Class: Dommy::NodeIterator
- Inherits:
-
Object
- Object
- Dommy::NodeIterator
- Includes:
- Bridge::Methods, TreeTraversalCore
- Defined in:
- lib/dommy/tree_walker.rb
Overview
NodeIterator — flat-list traversal. Same filter semantics as TreeWalker but no sibling/parent navigation, just ‘next_node` / `previous_node` over a depth-first sequence anchored to `root`.
Instance Attribute Summary collapse
-
#filter ⇒ Object
readonly
Returns the value of attribute filter.
-
#root ⇒ Object
readonly
Returns the value of attribute root.
-
#what_to_show ⇒ Object
readonly
Returns the value of attribute what_to_show.
Instance Method Summary collapse
- #__js_call__(method, _args) ⇒ Object
- #__js_get__(key) ⇒ Object
- #detach ⇒ Object
-
#initialize(root, what_to_show = NodeFilter::SHOW_ALL, filter = nil) ⇒ NodeIterator
constructor
A new instance of NodeIterator.
-
#next_node ⇒ Object
WHATWG “traverse” (direction=next).
-
#pre_remove(removed) ⇒ Object
WHATWG “NodeIterator pre-removing steps”.
-
#previous_node ⇒ Object
WHATWG “traverse” (direction=previous).
Methods included from Bridge::Methods
Constructor Details
#initialize(root, what_to_show = NodeFilter::SHOW_ALL, filter = nil) ⇒ NodeIterator
Returns a new instance of NodeIterator.
403 404 405 406 407 408 409 |
# File 'lib/dommy/tree_walker.rb', line 403 def initialize(root, what_to_show = NodeFilter::SHOW_ALL, filter = nil) @root = root @what_to_show = what_to_show.to_i @filter = filter @reference_node = root @pointer_before_reference = true end |
Instance Attribute Details
#filter ⇒ Object (readonly)
Returns the value of attribute filter.
401 402 403 |
# File 'lib/dommy/tree_walker.rb', line 401 def filter @filter end |
#root ⇒ Object (readonly)
Returns the value of attribute root.
401 402 403 |
# File 'lib/dommy/tree_walker.rb', line 401 def root @root end |
#what_to_show ⇒ Object (readonly)
Returns the value of attribute what_to_show.
401 402 403 |
# File 'lib/dommy/tree_walker.rb', line 401 def what_to_show @what_to_show end |
Instance Method Details
#__js_call__(method, _args) ⇒ Object
498 499 500 501 502 503 504 505 506 507 |
# File 'lib/dommy/tree_walker.rb', line 498 def __js_call__(method, _args) case method when "nextNode" next_node when "previousNode" previous_node when "detach" detach end end |
#__js_get__(key) ⇒ Object
481 482 483 484 485 486 487 488 489 490 491 492 493 494 |
# File 'lib/dommy/tree_walker.rb', line 481 def __js_get__(key) case key when "root" @root when "whatToShow" @what_to_show when "filter" @filter when "referenceNode" @reference_node when "pointerBeforeReferenceNode" @pointer_before_reference end end |
#detach ⇒ Object
453 454 455 |
# File 'lib/dommy/tree_walker.rb', line 453 def detach nil end |
#next_node ⇒ Object
WHATWG “traverse” (direction=next). referenceNode / pointerBeforeReferenceNode are committed only when a node is accepted; if no node matches we return null and leave the iterator’s position untouched.
414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 |
# File 'lib/dommy/tree_walker.rb', line 414 def next_node node = @reference_node before = @pointer_before_reference loop do if before before = false else node = next_in_document_order(node) return nil unless node end next unless accept(node) == NodeFilter::FILTER_ACCEPT @reference_node = node @pointer_before_reference = before return node end end |
#pre_remove(removed) ⇒ Object
WHATWG “NodeIterator pre-removing steps”. ‘removed` is the wrapped node about to be detached (still attached when this runs).
459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 |
# File 'lib/dommy/tree_walker.rb', line 459 def pre_remove(removed) # Terminate unless `removed` is in this iterator's collection and an # inclusive ancestor of the reference node: skip if it is an inclusive # ancestor of root (never in the collection) or not one of referenceNode. return if inclusive_ancestor?(removed, @root) return unless inclusive_ancestor?(removed, @reference_node) unless @pointer_before_reference @reference_node = tree_preceding(removed) return end following = tree_next_descendants(removed) if following @reference_node = following return end @reference_node = tree_preceding(removed) @pointer_before_reference = false end |
#previous_node ⇒ Object
WHATWG “traverse” (direction=previous).
434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 |
# File 'lib/dommy/tree_walker.rb', line 434 def previous_node node = @reference_node before = @pointer_before_reference loop do if before node = previous_in_document_order(node) return nil unless node else before = true end next unless accept(node) == NodeFilter::FILTER_ACCEPT @reference_node = node @pointer_before_reference = before return node end end |