@spectrum-web-components/shared
Version:
The `@spectrum-web-components/shared` package provides essential base classes, mixins, and utilities that support developing Spectrum Web Components. This package contains foundational tools for focus management, slot observation, accessibility enhancemen
54 lines (53 loc) • 1.85 kB
JavaScript
;
function restoreChildren(placeholderItems, srcElements, cleanupCallbacks = []) {
for (let index = 0; index < srcElements.length; ++index) {
const srcElement = srcElements[index];
const placeholderItem = placeholderItems[index];
const parentElement = placeholderItem.parentElement || placeholderItem.getRootNode();
if (cleanupCallbacks[index]) {
cleanupCallbacks[index](srcElement);
}
if (parentElement && parentElement !== placeholderItem) {
parentElement.replaceChild(srcElement, placeholderItem);
}
delete placeholderItems[index];
}
return srcElements;
}
export const reparentChildren = (srcElements, destination, {
position,
prepareCallback
} = { position: "beforeend" }) => {
let { length } = srcElements;
if (length === 0) {
return () => srcElements;
}
let step = 1;
let index = 0;
if (position === "afterbegin" || position === "afterend") {
step = -1;
index = length - 1;
}
const placeholderItems = new Array(length);
const cleanupCallbacks = new Array(length);
const placeholderTemplate = document.createComment(
"placeholder for reparented element"
);
do {
const srcElement = srcElements[index];
if (prepareCallback) {
cleanupCallbacks[index] = prepareCallback(srcElement);
}
placeholderItems[index] = placeholderTemplate.cloneNode();
const parentElement = srcElement.parentElement || srcElement.getRootNode();
if (parentElement && parentElement !== srcElement) {
parentElement.replaceChild(placeholderItems[index], srcElement);
}
destination.insertAdjacentElement(position, srcElement);
index += step;
} while (--length > 0);
return function() {
return restoreChildren(placeholderItems, srcElements, cleanupCallbacks);
};
};
//# sourceMappingURL=reparent-children.dev.js.map