Precise DOM morphing
morphing typescript dom
0
fork

Configure Feed

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

Search for idSet matches past non-element nodes

+27 -23
+14 -12
dist/morphlite.js
··· 55 55 if (isElement(child) && isElement(guide)) { 56 56 let current = child; 57 57 let nextBestMatch = null; 58 - while (current && isElement(current)) { 59 - if (current.id !== "" && current.id === guide.id) { 60 - morphNodes(current, guide, idMap, child, parent); 61 - break; 62 - } 63 - else { 64 - const setA = idMap.get(current); 65 - const setB = idMap.get(guide); 66 - if (setA && setB && [...setA].some((it) => setB.has(it))) { 67 - return morphNodes(current, guide, idMap, child, parent); 58 + while (current) { 59 + if (isElement(current)) { 60 + if (current.id !== "" && current.id === guide.id) { 61 + morphNodes(current, guide, idMap, child, parent); 62 + break; 68 63 } 69 - else if (!nextBestMatch && current.tagName === guide.tagName) { 70 - nextBestMatch = current; 64 + else { 65 + const a = idMap.get(current); 66 + const b = idMap.get(guide); 67 + if (a && b && [...a].some((it) => b.has(it))) { 68 + return morphNodes(current, guide, idMap, child, parent); 69 + } 70 + else if (!nextBestMatch && current.tagName === guide.tagName) { 71 + nextBestMatch = current; 72 + } 71 73 } 72 74 } 73 75 current = current.nextSibling;
+13 -11
src/morphlite.ts
··· 51 51 let current: ChildNode | null = child; 52 52 let nextBestMatch: ChildNode | null = null; 53 53 54 - while (current && isElement(current)) { 55 - if (current.id !== "" && current.id === guide.id) { 56 - morphNodes(current, guide, idMap, child, parent); 57 - break; 58 - } else { 59 - const setA = idMap.get(current); 60 - const setB = idMap.get(guide); 54 + while (current) { 55 + if (isElement(current)) { 56 + if (current.id !== "" && current.id === guide.id) { 57 + morphNodes(current, guide, idMap, child, parent); 58 + break; 59 + } else { 60 + const a = idMap.get(current); 61 + const b = idMap.get(guide); 61 62 62 - if (setA && setB && [...setA].some((it) => setB.has(it))) { 63 - return morphNodes(current, guide, idMap, child, parent); 64 - } else if (!nextBestMatch && current.tagName === guide.tagName) { 65 - nextBestMatch = current; 63 + if (a && b && [...a].some((it) => b.has(it))) { 64 + return morphNodes(current, guide, idMap, child, parent); 65 + } else if (!nextBestMatch && current.tagName === guide.tagName) { 66 + nextBestMatch = current; 67 + } 66 68 } 67 69 } 68 70