35 lines
1.3 KiB
JavaScript
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;
|