Class: Dommy::Internal::ShadowRootRegistry
- Inherits:
-
Object
- Object
- Dommy::Internal::ShadowRootRegistry
- Defined in:
- lib/dommy/internal/shadow_root_registry.rb
Overview
Manages ShadowRoot identity and shadow boundary traversal. Maps Nokogiri DocumentFragment (shadow tree backing) to ShadowRoot wrapper.
Instance Method Summary collapse
-
#all ⇒ Object
Every registered ShadowRoot (used by the cascade to collect shadow-tree stylesheets).
-
#find_enclosing(nokogiri_node) ⇒ Object
Find the enclosing ShadowRoot for a given node.
-
#find_for_fragment(fragment_node) ⇒ Object
Find the ShadowRoot for a given fragment (if any).
-
#initialize ⇒ ShadowRootRegistry
constructor
A new instance of ShadowRootRegistry.
-
#register(fragment_node, shadow_root) ⇒ Object
Register a shadow root by its backing fragment node.
Constructor Details
#initialize ⇒ ShadowRootRegistry
Returns a new instance of ShadowRootRegistry.
10 11 12 |
# File 'lib/dommy/internal/shadow_root_registry.rb', line 10 def initialize @shadow_roots = {} end |
Instance Method Details
#all ⇒ Object
Every registered ShadowRoot (used by the cascade to collect shadow-tree stylesheets). Insertion order; includes roots whose host may have since been detached (harmless — their rules only match their own subtree).
28 29 30 |
# File 'lib/dommy/internal/shadow_root_registry.rb', line 28 def all @shadow_roots.values end |
#find_enclosing(nokogiri_node) ⇒ Object
Find the enclosing ShadowRoot for a given node. Walks up the ancestor chain looking for a shadow root. Uses NodeTraversal to avoid duplication of tree walking logic.
35 36 37 38 39 |
# File 'lib/dommy/internal/shadow_root_registry.rb', line 35 def find_enclosing(nokogiri_node) NodeTraversal.find_ancestor(nokogiri_node) do |ancestor| find_for_fragment(ancestor) end end |
#find_for_fragment(fragment_node) ⇒ Object
Find the ShadowRoot for a given fragment (if any)
20 21 22 23 |
# File 'lib/dommy/internal/shadow_root_registry.rb', line 20 def find_for_fragment(fragment_node) return nil unless fragment_node @shadow_roots[Backend.identity_key(fragment_node)] end |
#register(fragment_node, shadow_root) ⇒ Object
Register a shadow root by its backing fragment node
15 16 17 |
# File 'lib/dommy/internal/shadow_root_registry.rb', line 15 def register(fragment_node, shadow_root) @shadow_roots[Backend.identity_key(fragment_node)] = shadow_root end |