Class: Browser::DOM::Node
- Includes:
 - NativeCachedWrapper
 
- Defined in:
 - opal/browser/dom/node.rb
 
Overview
Abstract class for all DOM node types.
Direct Known Subclasses
Constant Summary collapse
- ELEMENT_NODE =
 1- ATTRIBUTE_NODE =
 2- TEXT_NODE =
 3- CDATA_SECTION_NODE =
 4- ENTITY_REFERENCE_NOCE =
 5- ENTITY_NODE =
 6- PROCESSING_INSTRUCTION_NODE =
 7- COMMENT_NODE =
 8- DOCUMENT_NODE =
 9- DOCUMENT_TYPE_NODE =
 10- DOCUMENT_FRAGMENT_NODE =
 11- NOTATION_NODE =
 12
Instance Attribute Summary collapse
- 
  
    
      #child  ⇒ Node? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
The first child of the node.
 - 
  
    
      #children  ⇒ NodeSet 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    
The children of the node.
 - 
  
    
      #document  ⇒ Document? 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    
The document the node is attached to.
 - 
  
    
      #element_children  ⇒ NodeSet 
    
    
      (also: #elements)
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
All the children which are elements.
 - 
  
    
      #first_element_child  ⇒ Element? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
The first element child.
 - 
  
    
      #last_element_child  ⇒ Element? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
The last element child.
 - 
  
    
      #name  ⇒ String 
    
    
      (also: #node_name)
    
  
  
  
  
    
    
  
  
  
  
  
  
    
The name of the node.
 - 
  
    
      #namespace  ⇒ String 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
The namespace of the node.
 - 
  
    
      #next  ⇒ Node? 
    
    
      (also: #next_sibling)
    
  
  
  
  
    
    
  
  
  
  
  
  
    
The next sibling of the node.
 - 
  
    
      #next_element  ⇒ Element? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
The next element sibling of the node.
 - 
  
    
      #node_type  ⇒ Symbol 
    
    
      (also: #type)
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
The type of the node.
 - 
  
    
      #outer_html  ⇒ String 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    
The simulated outer html of the node.
 - 
  
    
      #parent  ⇒ Element? 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    
The parent of the node.
 - 
  
    
      #previous  ⇒ Node? 
    
    
      (also: #previous_sibling)
    
  
  
  
  
    
    
  
  
  
  
  
  
    
The previous sibling of the node.
 - 
  
    
      #previous_element  ⇒ Element? 
    
    
  
  
  
  
    
      readonly
    
    
  
  
  
  
  
  
    
The previous element sibling of the node.
 - 
  
    
      #value  ⇒ String 
    
    
  
  
  
  
    
    
  
  
  
  
  
  
    
The value of the node.
 
Class Method Summary collapse
- 
  
    
      .new(value)  ⇒ Node 
    
    
  
  
  
  
  
  
  
  
  
    
Wrap a native DOM node.
 
Instance Method Summary collapse
- 
  
    
      #<<(node)  ⇒ self 
    
    
  
  
  
  
  
  
  
  
  
    
Append a child to the node.
 - 
  
    
      #==(other)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Return true of the other element is the same underlying DOM node.
 - #>>(node) ⇒ Object
 - #add_child(node = nil, &block) ⇒ Object
 - 
  
    
      #add_next_sibling(node = nil, &block)  ⇒ Object 
    
    
      (also: #after, #next=)
    
  
  
  
  
  
  
  
  
  
    
Add the passed node after this one.
 - 
  
    
      #add_previous_sibling(node = nil, &block)  ⇒ Object 
    
    
      (also: #before, #previous=)
    
  
  
  
  
  
  
  
  
  
    
Add the passed node before this one.
 - 
  
    
      #ancestors(expression = nil)  ⇒ NodeSet 
    
    
  
  
  
  
  
  
  
  
  
    
Get an array of ancestors.
 - 
  
    
      #append_to(node)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Append the node to the passed one.
 - #attached? ⇒ Boolean
 - #blank? ⇒ Boolean
 - 
  
    
      #cdata?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Return true if the node is a CDATA section.
 - 
  
    
      #clear  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Remove all the children of the node.
 - 
  
    
      #comment?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Return true if the node is a comment.
 - #content ⇒ Object (also: #inner_text, #text)
 - #content=(value) ⇒ Object (also: #inner_text=, #text=)
 - 
  
    
      #custom?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Return true if the node is a custom element.
 - 
  
    
      #document?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Return true if the node is a document.
 - 
  
    
      #elem?  ⇒ Boolean 
    
    
      (also: #element?)
    
  
  
  
  
  
  
  
  
  
    
Return true if the node is an element.
 - 
  
    
      #fragment?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Return true if the node is a document fragment.
 - 
  
    
      #initialize(node)  ⇒ Node 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
A new instance of Node.
 - 
  
    
      #initialize_copy(old)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Initialize a new node after
#dupor#clone. - #parse(text, options = {}) ⇒ Object
 - #path ⇒ Object
 - 
  
    
      #prepend_to(node)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Prepend the node to the passed one.
 - 
  
    
      #remove  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Remove the node from its parent.
 - 
  
    
      #remove_child(node)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Remove the given node from the children of this node.
 - 
  
    
      #replace(node)  ⇒ Node 
    
    
      (also: #replace_with)
    
  
  
  
  
  
  
  
  
  
    
Replace the node with the given one.
 - 
  
    
      #text?  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Return true if the node is a text node.
 - #traverse(&block) ⇒ Object
 
Methods included from NativeCachedWrapper
#restricted?, #set_native_reference
Constructor Details
#initialize(node) ⇒ Node
Returns a new instance of Node.
      42 43 44 45  | 
    
      # File 'opal/browser/dom/node.rb', line 42 def initialize(node) raise ArgumentError, "Please ensure that #initialize of #{self.class} accepts one argument" unless node super end  | 
  
Instance Attribute Details
#child ⇒ Node? (readonly)
Returns the first child of the node.
      266 267 268  | 
    
      # File 'opal/browser/dom/node.rb', line 266 def child children.first end  | 
  
#children ⇒ NodeSet
Returns the children of the node.
      272 273 274  | 
    
      # File 'opal/browser/dom/node.rb', line 272 def children NodeSet[Native::Array.new(`#@native.childNodes`)] end  | 
  
#document ⇒ Document?
Returns the document the node is attached to.
      292 293 294  | 
    
      # File 'opal/browser/dom/node.rb', line 292 def document DOM(`#@native.ownerDocument`) if defined?(`#@native.ownerDocument`) end  | 
  
#element_children ⇒ NodeSet (readonly) Also known as: elements
Returns all the children which are elements.
      315 316 317  | 
    
      # File 'opal/browser/dom/node.rb', line 315 def element_children children.select(&:element?) end  | 
  
#first_element_child ⇒ Element? (readonly)
Returns the first element child.
      323 324 325  | 
    
      # File 'opal/browser/dom/node.rb', line 323 def first_element_child element_children.first end  | 
  
#last_element_child ⇒ Element? (readonly)
Returns the last element child.
      337 338 339  | 
    
      # File 'opal/browser/dom/node.rb', line 337 def last_element_child element_children.last end  | 
  
#name ⇒ String Also known as: node_name
Returns the name of the node.
      343 344 345  | 
    
      # File 'opal/browser/dom/node.rb', line 343 def name `#@native.nodeName || nil` end  | 
  
#namespace ⇒ String (readonly)
Returns the namespace of the node.
      353 354 355  | 
    
      # File 'opal/browser/dom/node.rb', line 353 def namespace `#@native.namespaceURI || nil` end  | 
  
#next ⇒ Node? Also known as: next_sibling
Returns the next sibling of the node.
      359 360 361  | 
    
      # File 'opal/browser/dom/node.rb', line 359 def next DOM(`#@native.nextSibling`) if `#@native.nextSibling != null` end  | 
  
#next_element ⇒ Element? (readonly)
Returns the next element sibling of the node.
      367 368 369 370 371 372 373 374 375  | 
    
      # File 'opal/browser/dom/node.rb', line 367 def next_element current = self.next while current && !current.element? current = current.next end current end  | 
  
#node_type ⇒ Symbol (readonly) Also known as: type
Returns the type of the node.
      385 386 387  | 
    
      # File 'opal/browser/dom/node.rb', line 385 def node_type `#@native.nodeType` end  | 
  
#outer_html ⇒ String
Returns the simulated outer html of the node.
      391 392 393 394 395  | 
    
      # File 'opal/browser/dom/node.rb', line 391 def outer_html div = $document.create_element("DIV") div << self.dup div.inner_html end  | 
  
#parent ⇒ Element?
Returns the parent of the node.
      399 400 401  | 
    
      # File 'opal/browser/dom/node.rb', line 399 def parent DOM(`#@native.parentNode`) if `#@native.parentNode != null` end  | 
  
#previous ⇒ Node? Also known as: previous_sibling
Returns the previous sibling of the node.
      425 426 427  | 
    
      # File 'opal/browser/dom/node.rb', line 425 def previous DOM(`#@native.previousSibling`) if `#@native.previousSibling != null` end  | 
  
#previous_element ⇒ Element? (readonly)
Returns the previous element sibling of the node.
      433 434 435 436 437 438 439 440 441  | 
    
      # File 'opal/browser/dom/node.rb', line 433 def previous_element current = self.previous while current && !current.element? current = current.previous end current end  | 
  
#value ⇒ String
Returns the value of the node.
      491 492 493  | 
    
      # File 'opal/browser/dom/node.rb', line 491 def value `#@native.nodeValue || nil` end  | 
  
Class Method Details
.new(value) ⇒ Node
Wrap a native DOM node.
      28 29 30 31 32 33 34 35 36 37 38 39 40  | 
    
      # File 'opal/browser/dom/node.rb', line 28 def self.new(value) if self == Node @classes ||= [nil, Element, Attribute, Text, CDATA, nil, nil, nil, Comment, Document, nil, DocumentFragment] if klass = @classes[`value.nodeType`] klass.new(value) else raise ArgumentError, 'cannot instantiate a non derived Node object' end else super end end  | 
  
Instance Method Details
#<<(node) ⇒ self
Append a child to the node.
When passing a String a text node will be created.
When passing an Object that responds to #each, every yielded element will be added following the same logic.
      75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94  | 
    
      # File 'opal/browser/dom/node.rb', line 75 def <<(node) if Opal.respond_to? node, :each node.each { |n| self << n } return self elsif Opal.respond_to? node, :to_dom node = node.to_dom(document) end unless native?(node) if String === node node = `#@native.ownerDocument.createTextNode(node)` else node = Native.convert(node) end end `#@native.appendChild(node)` self end  | 
  
#==(other) ⇒ Boolean
Return true of the other element is the same underlying DOM node.
      50 51 52  | 
    
      # File 'opal/browser/dom/node.rb', line 50 def ==(other) `#@native === #{Native.convert(other)}` end  | 
  
#>>(node) ⇒ Object
      96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119  | 
    
      # File 'opal/browser/dom/node.rb', line 96 def >>(node) if Opal.respond_to? node, :each node.each { |n| self >> n } return self elsif Opal.respond_to? node, :to_dom node = node.to_dom(document) end unless native?(node) if String === node node = `#@native.ownerDocument.createTextNode(node)` else node = Native.convert(node) end end if `#@native.firstChild == null` `#@native.appendChild(node)` else `#@native.insertBefore(node, #@native.firstChild)` end self end  | 
  
#add_child(node = nil, &block) ⇒ Object
      121 122 123 124 125 126 127  | 
    
      # File 'opal/browser/dom/node.rb', line 121 def add_child(node = nil, &block) unless node node = DOM(&block) end self << node end  | 
  
#add_next_sibling(node = nil, &block) ⇒ Object Also known as: after, next=
Add the passed node after this one.
When passing a String a text node will be created.
      134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149  | 
    
      # File 'opal/browser/dom/node.rb', line 134 def add_next_sibling(node = nil, &block) unless node node = DOM(&block) end node = node.to_dom(document) if Opal.respond_to? node, :to_dom unless native?(node) if String === node node = `#@native.ownerDocument.createTextNode(node)` else node = Native.convert(node) end end `#@native.parentNode.insertBefore(node, #@native.nextSibling)` end  | 
  
#add_previous_sibling(node = nil, &block) ⇒ Object Also known as: before, previous=
Add the passed node before this one.
When passing a String a text node will be created.
      156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171  | 
    
      # File 'opal/browser/dom/node.rb', line 156 def add_previous_sibling(node = nil, &block) unless node node = DOM(&block) end node = node.to_dom(document) if Opal.respond_to? node, :to_dom unless native?(node) if String === node node = `#@native.ownerDocument.createTextNode(node)` else node = Native.convert(node) end end `#@native.parentNode.insertBefore(node, #@native)` end  | 
  
#ancestors(expression = nil) ⇒ NodeSet
Get an array of ancestors.
Passing a selector will select the ancestors matching it.
      190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208  | 
    
      # File 'opal/browser/dom/node.rb', line 190 def ancestors(expression = nil) return NodeSet[] unless parent parents = [parent] while parent = parents.last.parent parents << parent end if Document === parents.last parents.pop end if expression parents.select! { |p| p =~ expression } end NodeSet.new(parents) end  | 
  
#append_to(node) ⇒ Object
Append the node to the passed one.
      178 179 180 181  | 
    
      # File 'opal/browser/dom/node.rb', line 178 def append_to(node) node << self self end  | 
  
#attached? ⇒ Boolean
      210 211 212  | 
    
      # File 'opal/browser/dom/node.rb', line 210 def attached? `#@native.isConnected` end  | 
  
#blank? ⇒ Boolean
      255 256 257  | 
    
      # File 'opal/browser/dom/node.rb', line 255 def blank? raise NotImplementedError end  | 
  
#cdata? ⇒ Boolean
Return true if the node is a CDATA section.
      260 261 262  | 
    
      # File 'opal/browser/dom/node.rb', line 260 def cdata? node_type == CDATA_SECTION_NODE end  | 
  
#clear ⇒ Object
Remove all the children of the node.
      223 224 225  | 
    
      # File 'opal/browser/dom/node.rb', line 223 def clear children.remove end  | 
  
#comment? ⇒ Boolean
Return true if the node is a comment.
      281 282 283  | 
    
      # File 'opal/browser/dom/node.rb', line 281 def comment? node_type == COMMENT_NODE end  | 
  
#content ⇒ Object Also known as: inner_text, text
      230 231 232  | 
    
      # File 'opal/browser/dom/node.rb', line 230 def content `#@native.textContent` end  | 
  
#content=(value) ⇒ Object Also known as: inner_text=, text=
      234 235 236  | 
    
      # File 'opal/browser/dom/node.rb', line 234 def content=(value) `#@native.textContent = #{value}` end  | 
  
#custom? ⇒ Boolean
Return true if the node is a custom element.
      286 287 288  | 
    
      # File 'opal/browser/dom/node.rb', line 286 def custom? false end  | 
  
#document? ⇒ Boolean
Return true if the node is a document.
      302 303 304  | 
    
      # File 'opal/browser/dom/node.rb', line 302 def document? node_type == DOCUMENT_NODE end  | 
  
#elem? ⇒ Boolean Also known as: element?
Return true if the node is an element.
      307 308 309  | 
    
      # File 'opal/browser/dom/node.rb', line 307 def elem? node_type == ELEMENT_NODE end  | 
  
#fragment? ⇒ Boolean
Return true if the node is a document fragment.
      328 329 330  | 
    
      # File 'opal/browser/dom/node.rb', line 328 def fragment? node_type == DOCUMENT_FRAGMENT_NODE end  | 
  
#initialize_copy(old) ⇒ Object
Initialize a new node after #dup or #clone.
This method is not to be called directly. Use Node#dup or
Node#clone.
This method creates a deep detached clone of a DOM subtree to be used in the same document. The new node will have all events detached.
      61 62 63  | 
    
      # File 'opal/browser/dom/node.rb', line 61 def initialize_copy(old) set_native_reference `#{old.to_n}.cloneNode(true)` end  | 
  
#parse(text, options = {}) ⇒ Object
      407 408 409  | 
    
      # File 'opal/browser/dom/node.rb', line 407 def parse(text, = {}) raise NotImplementedError end  | 
  
#path ⇒ Object
      411 412 413  | 
    
      # File 'opal/browser/dom/node.rb', line 411 def path raise NotImplementedError end  | 
  
#prepend_to(node) ⇒ Object
Prepend the node to the passed one.
      418 419 420 421  | 
    
      # File 'opal/browser/dom/node.rb', line 418 def prepend_to(node) node >> self self end  | 
  
#remove ⇒ Object
Remove the node from its parent.
      217 218 219 220  | 
    
      # File 'opal/browser/dom/node.rb', line 217 def remove parent.remove_child(self) if parent self end  | 
  
#remove_child(node) ⇒ Object
Remove the given node from the children of this node.
      446 447 448 449  | 
    
      # File 'opal/browser/dom/node.rb', line 446 def remove_child(node) `#@native.removeChild(#{Native.try_convert(node)})` self end  | 
  
#replace(node) ⇒ Node Also known as: replace_with
implement for NodeSet
Replace the node with the given one.
      457 458 459 460 461 462 463 464 465 466 467 468 469 470 471  | 
    
      # File 'opal/browser/dom/node.rb', line 457 def replace(node) node = node.to_dom(document) if Opal.respond_to? node, :to_dom unless native?(node) if String === node node = `#@native.ownerDocument.createTextNode(node)` else node = Native.convert(node) end end `#@native.parentNode.replaceChild(node, #@native)` DOM(node) end  | 
  
#text? ⇒ Boolean
Return true if the node is a text node.
      479 480 481  | 
    
      # File 'opal/browser/dom/node.rb', line 479 def text? node_type == TEXT_NODE end  | 
  
#traverse(&block) ⇒ Object
      483 484 485  | 
    
      # File 'opal/browser/dom/node.rb', line 483 def traverse(&block) raise NotImplementedError end  |