MCPcopy Index your code
hub / github.com/darkreader/darkreader / getElementsTreeOperations

Function getElementsTreeOperations

src/inject/utils/dom.ts:286–324  ·  view source on GitHub ↗
(mutations: MutationRecord[])

Source from the content-addressed store, hash-verified

284}
285
286function getElementsTreeOperations(mutations: MutationRecord[]): ElementsTreeOperations {
287 const additions = new Set<Element>();
288 const deletions = new Set<Element>();
289 const moves = new Set<Element>();
290 mutations.forEach((m) => {
291 forEach(m.addedNodes, (n) => {
292 if (n instanceof Element && n.isConnected) {
293 additions.add(n);
294 }
295 });
296 forEach(m.removedNodes, (n) => {
297 if (n instanceof Element) {
298 if (n.isConnected) {
299 moves.add(n);
300 additions.delete(n);
301 } else {
302 deletions.add(n);
303 }
304 }
305 });
306 });
307
308 const duplicateAdditions: Element[] = [];
309 const duplicateDeletions: Element[] = [];
310 additions.forEach((node) => {
311 if (additions.has(node.parentElement as HTMLElement)) {
312 duplicateAdditions.push(node);
313 }
314 });
315 deletions.forEach((node) => {
316 if (deletions.has(node.parentElement as HTMLElement)) {
317 duplicateDeletions.push(node);
318 }
319 });
320 duplicateAdditions.forEach((node) => additions.delete(node));
321 duplicateDeletions.forEach((node) => deletions.delete(node));
322
323 return {additions, moves, deletions};
324}
325
326interface OptimizedTreeObserverCallbacks {
327 onMinorMutations: (root: Document | ShadowRoot, operations: ElementsTreeOperations) => void;

Callers 1

Calls 3

forEachFunction · 0.90
addMethod · 0.80
hasMethod · 0.65

Tested by

no test coverage detected