diff --git a/src/qweb_extensions.ts b/src/qweb_extensions.ts index ee7b4798..f33af30f 100644 --- a/src/qweb_extensions.ts +++ b/src/qweb_extensions.ts @@ -573,7 +573,7 @@ QWeb.addDirective({ ); // SLOTS - if (node.childElementCount) { + if (node.childNodes.length) { const clone = node.cloneNode(true); const slotNodes = clone.querySelectorAll("[t-set]"); const slotId = qweb.nextSlotId++; @@ -592,9 +592,9 @@ QWeb.addDirective({ qweb.slots[`${slotId}_${key}`] = slotFn.bind(qweb); } } - if (clone.childElementCount) { + if (clone.childNodes.length) { const t = clone.ownerDocument!.createElement("t"); - for (let child of Object.values(clone.children)) { + for (let child of Object.values(clone.childNodes)) { t.appendChild(child); } const slotFn = qweb._compile( diff --git a/tests/component.test.ts b/tests/component.test.ts index cf11b0b1..ccf708d0 100644 --- a/tests/component.test.ts +++ b/tests/component.test.ts @@ -2981,6 +2981,27 @@ describe("t-slot directive", () => { ); }); + test("default slot work with text nodes", async () => { + env.qweb.addTemplates(` + +
+ sts rocks +
+
+
+ `); + class Dialog extends Widget {} + class Parent extends Widget { + components = { Dialog }; + } + const parent = new Parent(env); + await parent.mount(fixture); + + expect(fixture.innerHTML).toBe( + "
sts rocks
" + ); + }); + test("multiple roots are allowed in a named slot", async () => { env.qweb.addTemplates(`