Class: Dommy::MutationObserver
- Inherits:
-
Object
- Object
- Dommy::MutationObserver
- Includes:
- Bridge::Methods
- Defined in:
- lib/dommy/mutation_observer.rb
Instance Method Summary collapse
- #__js_call__(method, args) ⇒ Object
- #enqueue(record) ⇒ Object
-
#find_matching_entry(target_wrapped) ⇒ Object
Find the observer entry that matches target_wrapped.
-
#initialize(window, callback) ⇒ MutationObserver
constructor
A new instance of MutationObserver.
-
#matches_wrapped?(target_wrapped) ⇒ Boolean
Matches a wrapped target against this observer’s scope.
-
#records ⇒ Object
Public: introspection used by linkedom-style tests that peek at pending records without draining (‘observer.records`).
Methods included from Bridge::Methods
Constructor Details
#initialize(window, callback) ⇒ MutationObserver
Returns a new instance of MutationObserver.
71 72 73 74 75 76 77 78 79 |
# File 'lib/dommy/mutation_observer.rb', line 71 def initialize(window, callback) @window = window @document = window.document @callback = callback @observed = [] @records = [] @scheduled = false @registered_docs = [] end |
Instance Method Details
#__js_call__(method, args) ⇒ Object
83 84 85 86 87 88 89 90 91 92 |
# File 'lib/dommy/mutation_observer.rb', line 83 def __js_call__(method, args) case method when "observe" observe(args[0], args[1]) when "disconnect" disconnect when "takeRecords" take_records end end |
#enqueue(record) ⇒ Object
117 118 119 120 121 122 123 124 |
# File 'lib/dommy/mutation_observer.rb', line 117 def enqueue(record) @records << record return nil if @scheduled @scheduled = true @window.scheduler.queue_microtask(proc { flush }) nil end |
#find_matching_entry(target_wrapped) ⇒ Object
Find the observer entry that matches target_wrapped. Returns the entry with options (attributes, attributeFilter, etc.) or nil if target doesn’t match any observed scope.
103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/dommy/mutation_observer.rb', line 103 def find_matching_entry(target_wrapped) matcher = Internal::ObserverMatcher.new @observed.find do |entry| observed_wrapped = entry[:target] next false unless observed_wrapped if observed_wrapped.is_a?(Document) matcher.matches_document?(target_wrapped, subtree: entry[:subtree]) else matcher.matches?(observed_wrapped, target_wrapped, subtree: entry[:subtree]) end end end |
#matches_wrapped?(target_wrapped) ⇒ Boolean
Matches a wrapped target against this observer’s scope. Called by MutationCoordinator.
96 97 98 |
# File 'lib/dommy/mutation_observer.rb', line 96 def matches_wrapped?(target_wrapped) find_matching_entry(target_wrapped) != nil end |
#records ⇒ Object
Public: introspection used by linkedom-style tests that peek at pending records without draining (‘observer.records`).
128 129 130 |
# File 'lib/dommy/mutation_observer.rb', line 128 def records @records.dup end |