[FIX] component: default slot now works with textnodes

closes #209
This commit is contained in:
Géry Debongnie
2019-06-24 22:59:13 +02:00
parent 4a889b7b6b
commit 1e2b204fdd
2 changed files with 24 additions and 3 deletions
+3 -3
View File
@@ -573,7 +573,7 @@ QWeb.addDirective({
);
// SLOTS
if (node.childElementCount) {
if (node.childNodes.length) {
const clone = <Element>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(
+21
View File
@@ -2981,6 +2981,27 @@ describe("t-slot directive", () => {
);
});
test("default slot work with text nodes", async () => {
env.qweb.addTemplates(`
<templates>
<div t-name="Parent">
<Dialog>sts rocks</Dialog>
</div>
<div t-name="Dialog"><t t-slot="default"/></div>
</templates>
`);
class Dialog extends Widget {}
class Parent extends Widget {
components = { Dialog };
}
const parent = new Parent(env);
await parent.mount(fixture);
expect(fixture.innerHTML).toBe(
"<div><div>sts rocks</div></div>"
);
});
test("multiple roots are allowed in a named slot", async () => {
env.qweb.addTemplates(`
<templates>