Precise DOM morphing
morphing typescript dom
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Improve beforeNodeAdded signature

+11 -8
+10 -7
src/morphlex.ts
··· 12 12 interface Options { 13 13 beforeNodeVisited?: (fromNode: Node, toNode: Node) => boolean 14 14 afterNodeVisited?: (fromNode: Node, toNode: Node) => void 15 - beforeNodeAdded?: (node: Node) => boolean 15 + beforeNodeAdded?: (parent: ParentNode, node: Node, insertionPoint: ChildNode | null) => boolean 16 16 afterNodeAdded?: (node: Node) => void 17 17 beforeNodeRemoved?: (node: Node) => boolean 18 18 afterNodeRemoved?: (node: Node) => void ··· 101 101 const parent = from.parentNode || document 102 102 103 103 for (const newNode of newNodes) { 104 - if (this.options.beforeNodeAdded?.(newNode) ?? true) { 104 + if (this.options.beforeNodeAdded?.(parent, newNode, insertionPoint) ?? true) { 105 105 moveBefore(parent, newNode, insertionPoint) 106 106 this.options.afterNodeAdded?.(newNode) 107 107 } ··· 362 362 insertionPoint = insertionPoint.nextSibling 363 363 } 364 364 } else { 365 - if (this.options.beforeNodeAdded?.(node) ?? true) { 365 + if (this.options.beforeNodeAdded?.(parent, node, insertionPoint) ?? true) { 366 366 moveBefore(parent, node, insertionPoint) 367 367 this.options.afterNodeAdded?.(node) 368 368 insertionPoint = node.nextSibling ··· 381 381 } 382 382 383 383 private replaceNode(node: ChildNode, newNode: ChildNode): void { 384 - if (this.options.beforeNodeAdded?.(newNode) ?? true) { 385 - moveBefore(node.parentNode || document, newNode, node) 384 + const parent = node.parentNode || document 385 + const insertionPoint = node 386 + if (this.options.beforeNodeAdded?.(parent, newNode, insertionPoint) ?? true) { 387 + moveBefore(parent, newNode, insertionPoint) 386 388 this.options.afterNodeAdded?.(newNode) 387 389 this.removeNode(node) 388 390 } 389 391 } 390 392 391 393 private appendChild(parent: ParentNode, newChild: ChildNode): void { 392 - if (this.options.beforeNodeAdded?.(newChild) ?? true) { 393 - moveBefore(parent, newChild, null) 394 + const insertionPoint = null 395 + if (this.options.beforeNodeAdded?.(parent, newChild, insertionPoint) ?? true) { 396 + moveBefore(parent, newChild, insertionPoint) 394 397 this.options.afterNodeAdded?.(newChild) 395 398 } 396 399 }
+1 -1
test/morphlex-coverage.test.ts
··· 683 683 let afterCalled = false 684 684 685 685 morph(parent, reference, { 686 - beforeNodeAdded: (node) => { 686 + beforeNodeAdded: (_parent, node, _insertionPoint) => { 687 687 if ((node as Element).tagName === "CUSTOM-ELEMENT") { 688 688 beforeCalled = true 689 689 return true // Line 387-388