Sha256: e0b985f3e9d4a93b16974451e9e5aa064ab869b8d54e5d47e8e8ee6b730894f0

Contents?: true

Size: 1.45 KB

Versions: 11

Compression:

Stored size: 1.45 KB

Contents

u = up.util

class up.Selector

  CSS_HAS_SUFFIX_PATTERN = new RegExp("\\:has\\(([^\\)]+)\\)$")
  MATCH_FN_NAME = if up.browser.isIE11() then 'msMatchesSelector' else 'matches'

  constructor: (@selector, @filterFn) ->

  matches: (element) ->
    doesMatch = element[MATCH_FN_NAME](@selector)
    doesMatch &&= @filterFn(element) if @filterFn
    doesMatch

  descendants: (root) ->
    matches = root.querySelectorAll(@selector)
    if @filterFn
      matches = u.filter(matches, @filterFn)
    matches

  descendant: (root) ->
    if !@filterFn
     root.querySelector(@selector)
    else
      candidates = root.querySelectorAll(@selector)
      u.find(candidates, @filterFn)

  subtree: (root) ->
    matches = []
    if @matches(root)
      matches.push(root)
    matches.push(@descendants(root)...)
    matches

  closest: (root) ->
    if root.closest && !@filterFn
      return root.closest(@selector)
    else
      return @closestPolyfill(root)

  closestPolyfill: (root) ->
    if @matches(root, @selector)
      root
    else
      @ancestor(root)

  ancestor: (element) ->
    if parentElement = element.parentElement
      if @matches(parentElement)
        parentElement
      else
        @ancestor(parentElement)

  @parse: (selector) ->
    filter = null
    selector = selector.replace CSS_HAS_SUFFIX_PATTERN, (match, descendantSelector) ->
      filter = (element) ->
        element.querySelector(descendantSelector)
      return ''
    new @(selector, filter)

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
unpoly-rails-1.0.3 lib/assets/javascripts/unpoly/classes/selector.coffee
unpoly-rails-1.0.1 lib/assets/javascripts/unpoly/classes/selector.coffee
unpoly-rails-1.0.0 lib/assets/javascripts/unpoly/classes/selector.coffee
unpoly-rails-0.62.1 lib/assets/javascripts/unpoly/classes/selector.coffee
unpoly-rails-0.62.0 lib/assets/javascripts/unpoly/classes/selector.coffee
unpoly-rails-0.61.1 lib/assets/javascripts/unpoly/classes/selector.coffee
unpoly-rails-0.61.0 lib/assets/javascripts/unpoly/classes/selector.coffee
unpoly-rails-0.60.3 lib/assets/javascripts/unpoly/classes/selector.coffee
unpoly-rails-0.60.2 lib/assets/javascripts/unpoly/classes/selector.coffee
unpoly-rails-0.60.1 lib/assets/javascripts/unpoly/classes/selector.coffee
unpoly-rails-0.60.0 lib/assets/javascripts/unpoly/classes/selector.coffee