Class: Dommy::NodeIterator

Inherits:
Object
  • Object
show all
Includes:
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

Instance Method Summary collapse

Methods included from TreeTraversalCore

#__accept__

Constructor Details

#initialize(root, what_to_show = NodeFilter::SHOW_ALL, filter = nil) ⇒ NodeIterator

Returns a new instance of NodeIterator.



289
290
291
292
293
294
295
# File 'lib/dommy/tree_walker.rb', line 289

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

#filterObject (readonly)

Returns the value of attribute filter.



287
288
289
# File 'lib/dommy/tree_walker.rb', line 287

def filter
  @filter
end

#rootObject (readonly)

Returns the value of attribute root.



287
288
289
# File 'lib/dommy/tree_walker.rb', line 287

def root
  @root
end

#what_to_showObject (readonly)

Returns the value of attribute what_to_show.



287
288
289
# File 'lib/dommy/tree_walker.rb', line 287

def what_to_show
  @what_to_show
end

Instance Method Details

#__js_call__(method, _args) ⇒ Object



348
349
350
351
352
353
354
355
356
357
# File 'lib/dommy/tree_walker.rb', line 348

def __js_call__(method, _args)
  case method
  when "nextNode"
    next_node
  when "previousNode"
    previous_node
  when "detach"
    detach
  end
end

#__js_get__(key) ⇒ Object



333
334
335
336
337
338
339
340
341
342
343
344
345
346
# File 'lib/dommy/tree_walker.rb', line 333

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

#detachObject



329
330
331
# File 'lib/dommy/tree_walker.rb', line 329

def detach
  nil
end

#next_nodeObject



297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
# File 'lib/dommy/tree_walker.rb', line 297

def next_node
  loop do
    node = if @pointer_before_reference
      @reference_node
    else
      next_in_document_order(@reference_node)
    end

    return nil unless node

    @reference_node = node
    @pointer_before_reference = false
    return node if __accept__(node) == NodeFilter::FILTER_ACCEPT
  end
end

#previous_nodeObject



313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
# File 'lib/dommy/tree_walker.rb', line 313

def previous_node
  loop do
    node = if @pointer_before_reference
      previous_in_document_order(@reference_node)
    else
      @reference_node
    end

    return nil unless node

    @reference_node = node
    @pointer_before_reference = true
    return node if __accept__(node) == NodeFilter::FILTER_ACCEPT
  end
end