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
#dup
or#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
permalink #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
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
Class Method Details
permalink .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
permalink #<<(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 |
permalink #==(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 |
permalink #>>(node) ⇒ Object
[View source]
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 |
permalink #add_child(node = nil, &block) ⇒ Object
[View source]
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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #attached? ⇒ Boolean
210 211 212 |
# File 'opal/browser/dom/node.rb', line 210 def attached? `#@native.isConnected` end |
permalink #blank? ⇒ Boolean
255 256 257 |
# File 'opal/browser/dom/node.rb', line 255 def blank? raise NotImplementedError end |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #content ⇒ Object Also known as: inner_text, text
230 231 232 |
# File 'opal/browser/dom/node.rb', line 230 def content `#@native.textContent` end |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #parse(text, options = {}) ⇒ Object
407 408 409 |
# File 'opal/browser/dom/node.rb', line 407 def parse(text, = {}) raise NotImplementedError end |
permalink #path ⇒ Object
411 412 413 |
# File 'opal/browser/dom/node.rb', line 411 def path raise NotImplementedError end |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #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 |
permalink #traverse(&block) ⇒ Object
483 484 485 |
# File 'opal/browser/dom/node.rb', line 483 def traverse(&block) raise NotImplementedError end |