wc-upgrader/wc-upgrader.mjs
2020-02-04 11:23:58 -08:00

35 lines
1.3 KiB
JavaScript

class wcUpgrader {
upgradeOnDefined(elemDef, target){
customElements.whenDefined(elemDef)
.then( () => {
let oldElements = document.querySelectorAll(target);
for(let i = 0; i < oldElements.length; i++){
this._appendToDOM(elemDef, oldElements[i])
}
});
}
_appendToDOM(elemDef, targetElement){
// Works but elements are added to the DOM multiple times if nested
// within other elements that get upgraded - constructors are ran each time
// let newElem = document.createElement(elemDef);
// newElem.innerHTML = targetElem.innerHTML;
// targetElem.parentNode.replaceChild(newElem, targetElem);
let newElement = document.createElement(elemDef);
const parentNode = targetElement.parentNode;
for(let i=0; i < parentNode.childNodes.length; i++){
if(targetElement.isSameNode(parentNode.childNodes[i])){
parentNode.insertBefore(newElement, parentNode.childNodes[i]);
while(targetElement.firstChild){
newElement.appendChild(targetElement.firstChild);
}
targetElement.parentNode.removeChild(targetElement);
break;
}
}
}
}
export default wcUpgrader;