Class: Browser::DOM::Node
- Includes:
- Native
- 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?
readonly
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.
-
#inner_html ⇒ String
The inner HTML of the node.
-
#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.
-
#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.
- #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=)
-
#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.
- #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
Instance Attribute Details
#child ⇒ Node? (readonly)
Returns the first child of the node.
237 238 239 |
# File 'opal/browser/dom/node.rb', line 237 def child children.first end |
#children ⇒ NodeSet
Returns the children of the node.
243 244 245 |
# File 'opal/browser/dom/node.rb', line 243 def children NodeSet[Native::Array.new(`#@native.childNodes`)] end |
#document ⇒ Document? (readonly)
Returns the document the node is attached to.
258 259 260 |
# File 'opal/browser/dom/node.rb', line 258 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.
276 277 278 |
# File 'opal/browser/dom/node.rb', line 276 def element_children children.select(&:element?) end |
#first_element_child ⇒ Element? (readonly)
Returns the first element child.
284 285 286 |
# File 'opal/browser/dom/node.rb', line 284 def first_element_child element_children.first end |
#inner_html ⇒ String
Returns the inner HTML of the node.
295 296 297 |
# File 'opal/browser/dom/node.rb', line 295 def inner_html `#@native.innerHTML` end |
#last_element_child ⇒ Element? (readonly)
Returns the last element child.
308 309 310 |
# File 'opal/browser/dom/node.rb', line 308 def last_element_child element_children.last end |
#name ⇒ String Also known as: node_name
Returns the name of the node.
314 315 316 |
# File 'opal/browser/dom/node.rb', line 314 def name `#@native.nodeName || nil` end |
#namespace ⇒ String (readonly)
Returns the namespace of the node.
324 325 326 |
# File 'opal/browser/dom/node.rb', line 324 def namespace `#@native.namespaceURI || nil` end |
#next ⇒ Node? Also known as: next_sibling
Returns the next sibling of the node.
330 331 332 |
# File 'opal/browser/dom/node.rb', line 330 def next DOM(`#@native.nextSibling`) if `#@native.nextSibling != null` end |
#next_element ⇒ Element? (readonly)
Returns the next element sibling of the node.
338 339 340 341 342 343 344 345 346 |
# File 'opal/browser/dom/node.rb', line 338 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.
356 357 358 |
# File 'opal/browser/dom/node.rb', line 356 def node_type `#@native.nodeType` end |
#parent ⇒ Element?
Returns the parent of the node.
362 363 364 |
# File 'opal/browser/dom/node.rb', line 362 def parent DOM(`#@native.parentNode`) if `#@native.parentNode != null` end |
#previous ⇒ Node? Also known as: previous_sibling
Returns the previous sibling of the node.
387 388 389 |
# File 'opal/browser/dom/node.rb', line 387 def previous DOM(`#@native.previousSibling`) if `#@native.previousSibling != null` end |
#previous_element ⇒ Element? (readonly)
Returns the previous element sibling of the node.
395 396 397 398 399 400 401 402 403 |
# File 'opal/browser/dom/node.rb', line 395 def previous_element current = self.previous while current && !current.element? current = current.previous end current end |
#value ⇒ String
Returns the value of the node.
450 451 452 |
# File 'opal/browser/dom/node.rb', line 450 def value `#@native.nodeValue || nil` end |
Class Method Details
.new(value) ⇒ Node
Wrap a native DOM node.
27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'opal/browser/dom/node.rb', line 27 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.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'opal/browser/dom/node.rb', line 58 def <<(node) if Opal.respond_to? node, :each node.each { |n| self << n } return self 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.
44 45 46 |
# File 'opal/browser/dom/node.rb', line 44 def ==(other) `#@native === #{Native.convert(other)}` end |
#>>(node) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'opal/browser/dom/node.rb', line 77 def >>(node) if Opal.respond_to? node, :each node.each { |n| self >> n } return self 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
100 101 102 103 104 105 106 |
# File 'opal/browser/dom/node.rb', line 100 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.
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'opal/browser/dom/node.rb', line 113 def add_next_sibling(node = nil, &block) unless node node = DOM(&block) end 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.
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'opal/browser/dom/node.rb', line 134 def add_previous_sibling(node = nil, &block) unless node node = DOM(&block) end 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.
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'opal/browser/dom/node.rb', line 166 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.
155 156 157 |
# File 'opal/browser/dom/node.rb', line 155 def append_to(node) node << self end |
#blank? ⇒ Boolean
226 227 228 |
# File 'opal/browser/dom/node.rb', line 226 def blank? raise NotImplementedError end |
#cdata? ⇒ Boolean
Return true if the node is a CDATA section.
231 232 233 |
# File 'opal/browser/dom/node.rb', line 231 def cdata? node_type == CDATA_SECTION_NODE end |
#clear ⇒ Object
Remove all the children of the node.
194 195 196 |
# File 'opal/browser/dom/node.rb', line 194 def clear children.remove end |
#comment? ⇒ Boolean
Return true if the node is a comment.
252 253 254 |
# File 'opal/browser/dom/node.rb', line 252 def comment? node_type == COMMENT_NODE end |
#content ⇒ Object Also known as: inner_text, text
201 202 203 |
# File 'opal/browser/dom/node.rb', line 201 def content `#@native.textContent` end |
#content=(value) ⇒ Object Also known as: inner_text=, text=
205 206 207 |
# File 'opal/browser/dom/node.rb', line 205 def content=(value) `#@native.textContent = #{value}` end |
#document? ⇒ Boolean
Return true if the node is a document.
263 264 265 |
# File 'opal/browser/dom/node.rb', line 263 def document? node_type == DOCUMENT_NODE end |
#elem? ⇒ Boolean Also known as: element?
Return true if the node is an element.
268 269 270 |
# File 'opal/browser/dom/node.rb', line 268 def elem? node_type == ELEMENT_NODE end |
#fragment? ⇒ Boolean
Return true if the node is a document fragment.
289 290 291 |
# File 'opal/browser/dom/node.rb', line 289 def fragment? node_type == DOCUMENT_FRAGMENT_NODE end |
#parse(text, options = {}) ⇒ Object
370 371 372 |
# File 'opal/browser/dom/node.rb', line 370 def parse(text, = {}) raise NotImplementedError end |
#path ⇒ Object
374 375 376 |
# File 'opal/browser/dom/node.rb', line 374 def path raise NotImplementedError end |
#prepend_to(node) ⇒ Object
Prepend the node to the passed one.
381 382 383 |
# File 'opal/browser/dom/node.rb', line 381 def prepend_to(node) node >> self end |
#remove ⇒ Object
Remove the node from its parent.
189 190 191 |
# File 'opal/browser/dom/node.rb', line 189 def remove parent.remove_child(self) if parent end |
#remove_child(node) ⇒ Object
Remove the given node from the children of this node.
408 409 410 |
# File 'opal/browser/dom/node.rb', line 408 def remove_child(node) `#@native.removeChild(#{Native.try_convert(node)})` end |
#replace(node) ⇒ Node Also known as: replace_with
implement for NodeSet
Replace the node with the given one.
418 419 420 421 422 423 424 425 426 427 428 429 430 |
# File 'opal/browser/dom/node.rb', line 418 def replace(node) unless native?(node) if String === node node = `#@native.ownerDocument.createTextNode(node)` else node = Native.convert(node) end end `#@native.parentNode.replaceChild(node, #@native)` node end |
#text? ⇒ Boolean
Return true if the node is a text node.
438 439 440 |
# File 'opal/browser/dom/node.rb', line 438 def text? node_type == TEXT_NODE end |
#traverse(&block) ⇒ Object
442 443 444 |
# File 'opal/browser/dom/node.rb', line 442 def traverse(&block) raise NotImplementedError end |