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.
391 392 393 394 395 396 397 |
# File 'lib/dommy/tree_walker.rb', line 391 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.
389 390 391 |
# File 'lib/dommy/tree_walker.rb', line 389 def filter @filter end |
#root ⇒ Object (readonly)
Returns the value of attribute root.
389 390 391 |
# File 'lib/dommy/tree_walker.rb', line 389 def root @root end |
#what_to_show ⇒ Object (readonly)
Returns the value of attribute what_to_show.
389 390 391 |
# File 'lib/dommy/tree_walker.rb', line 389 def what_to_show @what_to_show end |
Instance Method Details
#__js_call__(method, _args) ⇒ Object
488 489 490 491 492 493 494 495 496 497 |
# File 'lib/dommy/tree_walker.rb', line 488 def __js_call__(method, _args) case method when "nextNode" next_node when "previousNode" previous_node when "detach" detach end end |
#__js_get__(key) ⇒ Object
469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 |
# File 'lib/dommy/tree_walker.rb', line 469 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 else Bridge::ABSENT end end |
#detach ⇒ Object
441 442 443 |
# File 'lib/dommy/tree_walker.rb', line 441 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.
402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 |
# File 'lib/dommy/tree_walker.rb', line 402 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).
447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 |
# File 'lib/dommy/tree_walker.rb', line 447 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).
422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 |
# File 'lib/dommy/tree_walker.rb', line 422 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 |