MCPcopy Create free account
hub / github.com/WebReflection/neverland / disconnected

Function disconnected

index.js:145–236  ·  view source on GitHub ↗
(poly)

Source from the content-addressed store, hash-verified

143
144 /*! (c) Andrea Giammarchi */
145 function disconnected(poly) {
146
147 var Event = poly.Event;
148 var WeakSet = poly.WeakSet;
149 var notObserving = true;
150 var observer = null;
151 return function observe(node) {
152 if (notObserving) {
153 notObserving = !notObserving;
154 observer = new WeakSet();
155 startObserving(node.ownerDocument);
156 }
157
158 observer.add(node);
159 return node;
160 };
161
162 function startObserving(document) {
163 var connected = new WeakSet();
164 var disconnected = new WeakSet();
165
166 try {
167 new MutationObserver(changes).observe(document, {
168 subtree: true,
169 childList: true
170 });
171 } catch (o_O) {
172 var timer = 0;
173 var records = [];
174
175 var reschedule = function reschedule(record) {
176 records.push(record);
177 clearTimeout(timer);
178 timer = setTimeout(function () {
179 changes(records.splice(timer = 0, records.length));
180 }, 0);
181 };
182
183 document.addEventListener('DOMNodeRemoved', function (event) {
184 reschedule({
185 addedNodes: [],
186 removedNodes: [event.target]
187 });
188 }, true);
189 document.addEventListener('DOMNodeInserted', function (event) {
190 reschedule({
191 addedNodes: [event.target],
192 removedNodes: []
193 });
194 }, true);
195 }
196
197 function changes(records) {
198 for (var record, length = records.length, i = 0; i < length; i++) {
199 record = records[i];
200 dispatchAll(record.removedNodes, 'disconnected', disconnected, connected);
201 dispatchAll(record.addedNodes, 'connected', connected, disconnected);
202 }

Callers 1

index.jsFile · 0.70

Calls 1

startObservingFunction · 0.70

Tested by

no test coverage detected