Class: Dommy::MutationObserver
- Inherits:
-
Object
- Object
- Dommy::MutationObserver
- Defined in:
- lib/dommy/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`).
Constructor Details
#initialize(window, callback) ⇒ MutationObserver
Returns a new instance of MutationObserver.
71 72 73 74 75 76 77 78 |
# File 'lib/dommy/observer.rb', line 71 def initialize(window, callback) @window = window @document = window.document @callback = callback @observed = [] @records = [] @scheduled = false end |
Instance Method Details
#__js_call__(method, args) ⇒ Object
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/dommy/observer.rb', line 80 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
114 115 116 117 118 119 120 121 |
# File 'lib/dommy/observer.rb', line 114 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.
100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/dommy/observer.rb', line 100 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.
93 94 95 |
# File 'lib/dommy/observer.rb', line 93 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`).
125 126 127 |
# File 'lib/dommy/observer.rb', line 125 def records @records.dup end |