[IMP] components: allow multiple roots in slots

closes #199
This commit is contained in:
Géry Debongnie
2019-06-23 09:03:18 +02:00
parent 8c8ffb6a6b
commit af6aca83a2
6 changed files with 125 additions and 54 deletions
+2 -2
View File
@@ -1083,12 +1083,12 @@ exports[`t-slot directive can define and call slots 2`] = `
var vn2 = h('div', p2, c2);
c1.push(vn2);
const slot3 = this.slots[context.__owl__.slotId + '_' + 'header'];
c2.push(slot3(context.__owl__.parent, extra));
slot3(context.__owl__.parent, Object.assign({}, extra, {parentNode: c2}));
let c4 = [], p4 = {key:4};
var vn4 = h('div', p4, c4);
c1.push(vn4);
const slot5 = this.slots[context.__owl__.slotId + '_' + 'footer'];
c4.push(slot5(context.__owl__.parent, extra));
slot5(context.__owl__.parent, Object.assign({}, extra, {parentNode: c4}));
return vn1;
}"
`;
+74 -21
View File
@@ -2957,6 +2957,80 @@ describe("t-slot directive", () => {
'<div><span class="counter">1</span><span><button>do something</button></span></div>'
);
});
test("content is the default slot", async () => {
env.qweb.addTemplates(`
<templates>
<div t-name="Parent">
<Dialog>
<span>sts rocks</span>
</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><span>sts rocks</span></div></div>"
);
});
test("multiple roots are allowed in a named slot", async () => {
env.qweb.addTemplates(`
<templates>
<div t-name="Parent">
<Dialog>
<t t-set="content">
<span>sts</span>
<span>rocks</span>
</t>
</Dialog>
</div>
<div t-name="Dialog"><t t-slot="content"/></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><span>sts</span><span>rocks</span></div></div>"
);
});
test("multiple roots are allowed in a default slot", async () => {
env.qweb.addTemplates(`
<templates>
<div t-name="Parent">
<Dialog>
<span>sts</span>
<span>rocks</span>
</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><span>sts</span><span>rocks</span></div></div>"
);
});
});
describe("t-model directive", () => {
@@ -3190,28 +3264,7 @@ describe("t-model directive", () => {
expect(fixture.innerHTML).toBe("<div><input><span>invalid</span></div>");
});
test("content is the default slot", async () => {
env.qweb.addTemplates(`
<templates>
<div t-name="Parent">
<Dialog>
<span>sts rocks</span>
</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><span>sts rocks</span></div></div>"
);
});
});
describe("environment and plugins", () => {