Skip to content

Commit 31de2d0

Browse files
author
Avaer Kazmer
committed
Major bugfixing of recursive template load
1 parent 6bdf625 commit 31de2d0

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

src/Window.js

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,44 @@ class XREngineTemplate extends HTMLTemplateElement {
8585
for (let i = 0; i < childNodes.length; i++) {
8686
const childNode = childNodes[i];
8787
if (childNode.nodeType === Node.ELEMENT_NODE) {
88-
const xrIframe = document.importNode(childNode, true);
89-
this.insertAdjacentElement('afterend', xrIframe);
88+
let node = document.importNode(childNode, true);
89+
let scripts = node.matches('script') ? [node] : Array.from(node.querySelectorAll('script'));
90+
scripts = scripts.map(oldScript => {
91+
const {src, innerHTML} = oldScript;
92+
const script = document.createElement('script');
93+
if (src) {
94+
script.spec = {
95+
type: 'src',
96+
data: src,
97+
};
98+
} else {
99+
script.spec = {
100+
type: 'innerHTML',
101+
data: innerHTML,
102+
};
103+
}
104+
if (oldScript.parentNode) {
105+
oldScript.parentNode.replaceChild(script, oldScript);
106+
}
107+
if (oldScript === node) {
108+
node = script;
109+
}
110+
return script;
111+
});
112+
this.insertAdjacentElement('afterend', node);
113+
for (let i = 0; i < scripts.length; i++) {
114+
const script = scripts[i];
115+
const p = new Promise((accept, reject) => {
116+
script.addEventListener('load', accept);
117+
script.addEventListener('error', reject);
118+
});
119+
if (script.spec.type === 'src') {
120+
script.src = script.spec.data;
121+
} else if (script.spec.type === 'innerHTML') {
122+
script.innerHTML = script.spec.data;
123+
}
124+
await p;
125+
}
90126
}
91127
}
92128
})();

0 commit comments

Comments
 (0)