UNPKG

@spectrum-web-components/shared

Version:

Shared mixins, tools, etc. that support developing Spectrum Web Components.

58 lines (57 loc) 1.87 kB
"use strict"; 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