Skip to content

Commit e7a8e72

Browse files
committed
Fix #104 - Use document.importNode instead of just cloneNode
1 parent 70ca11f commit e7a8e72

3 files changed

Lines changed: 34 additions & 1 deletion

File tree

esm/creator.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export default parse => (
2121
*/
2222
(template, values) => {
2323
const { a: fragment, b: entries, c: direct } = parse(template, values);
24-
const root = fragment.cloneNode(true);
24+
const root = document.importNode(fragment, true);
2525
/** @type {import("./literals.js").Detail[]} */
2626
let details = empty;
2727
if (entries !== empty) {

esm/dom/document.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,17 @@ export default class Document extends Parent {
115115
return new TreeWalker(parent, accept);
116116
}
117117

118+
/**
119+
* Same as `document.importNode`
120+
* @template T
121+
* @param {T} externalNode
122+
* @param {boolean} deep
123+
* @returns {T}
124+
*/
125+
importNode(externalNode, deep = false) {
126+
return externalNode.cloneNode(deep);
127+
}
128+
118129
toString() {
119130
return this[childNodes].join('');
120131
}

test/custom-element.html

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width,initial-scale=1.0">
6+
<title>uhtml</title>
7+
<script type="module">
8+
import { render, html } from '../index.js';
9+
10+
customElements.define('c-e', class extends HTMLElement {
11+
#stuff;
12+
get stuff() { return this.#stuff }
13+
set stuff(value) { this.#stuff = value }
14+
connectedCallback() {
15+
this.textContent = this.#stuff;
16+
}
17+
});
18+
19+
render(document.body, html`<c-e .stuff=${'OK'} />`);
20+
</script>
21+
</head>
22+
</html>

0 commit comments

Comments
 (0)