18 lines
503 B
JavaScript
18 lines
503 B
JavaScript
/*
|
|
* Copyright (C) 2026 Mateusz Gruszczynski @linuxiarz.pl
|
|
* Source-Available Code / Dual-Licensed.
|
|
* See LICENSE.md for terms.
|
|
*/
|
|
|
|
export function reconcileChildren(container, desired) {
|
|
const retained = new Set(desired);
|
|
for (const node of [...container.childNodes]) {
|
|
if (!retained.has(node)) node.remove();
|
|
}
|
|
let cursor = container.firstChild;
|
|
for (const node of desired) {
|
|
if (node === cursor) cursor = cursor.nextSibling;
|
|
else container.insertBefore(node, cursor);
|
|
}
|
|
}
|