Sha256: 91558eebef9e4a0974f67aec44fa503fdd6d6e41828680a7512ef12bbf854ab3

Contents?: true

Size: 1.38 KB

Versions: 1

Compression:

Stored size: 1.38 KB

Contents

module Browser; module DOM

class NodeSet
  attr_reader :document

  def initialize(document, list = [])
    @document = document
    @literal  = []

    list.each {|el|
      if NodeSet === el
        @literal.concat(el.to_a)
      else
        @literal.push DOM(Native.convert(el))
      end
    }
  end

  def method_missing(name, *args, &block)
    unless @literal.respond_to? name
      each {|el|
        el.__send__(name, *args, &block)
      }

      return self
    end

    result = @literal.__send__ name, *args, &block

    if `result === #@literal`
      self
    elsif Array === result
      NodeSet.new(@document, result)
    else
      result
    end
  end

  def dup
    NodeSet.new(document, to_ary.dup)
  end

  def filter(expression)
    NodeSet.new(document, @literal.select { |node| node.matches?(expression) })
  end

  def after(node)
    last.after node
  end

  def at(path)
    raise NotImplementedError
  end

  def at_css(*rules)
    raise NotImplementedError
  end

  def at_xpath(*paths)
    raise NotImplementedError
  end

  def before
    first.before
  end

  def children
    result = NodeSet.new(document)

    each { |n| result.concat(n.children) }

    result
  end

  def css(*paths)
    raise NotImplementedError
  end

  def search(*what)
    map { |n| n.search(*what) }.flatten.uniq
  end

  def inspect
    "#<DOM::NodeSet: #{@literal.inspect[1 .. -2]}"
  end
end

end; end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
opal-browser-0.1.0.beta1 opal/browser/dom/node_set.rb