mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[IMP] add support for t-call-context directive
This commit is contained in:
@@ -617,6 +617,36 @@ exports[`t-call (template calling) t-call allowed on a non t node 2`] = `
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`t-call (template calling) t-call on a div with t-call-context 1`] = `
|
||||
"function anonymous(app, bdom, helpers
|
||||
) {
|
||||
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
||||
const callTemplate_1 = app.getTemplate(\`sub\`);
|
||||
|
||||
let block1 = createBlock(\`<div><block-child-0/></div>\`);
|
||||
|
||||
return function template(ctx, node, key = \\"\\") {
|
||||
let ctx1 = ctx['obj'];
|
||||
const b2 = callTemplate_1.call(this, ctx1, node, key + \`__1\`);
|
||||
return block1([], [b2]);
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`t-call (template calling) t-call on a div with t-call-context 2`] = `
|
||||
"function anonymous(app, bdom, helpers
|
||||
) {
|
||||
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
||||
|
||||
let block1 = createBlock(\`<span><block-text-0/></span>\`);
|
||||
|
||||
return function template(ctx, node, key = \\"\\") {
|
||||
let txt1 = ctx['value'];
|
||||
return block1([txt1]);
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`t-call (template calling) t-call with body content as root of a template 1`] = `
|
||||
"function anonymous(app, bdom, helpers
|
||||
) {
|
||||
@@ -890,6 +920,67 @@ exports[`t-call (template calling) t-call, conditional and t-set in t-call body
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`t-call (template calling) t-call-context 1`] = `
|
||||
"function anonymous(app, bdom, helpers
|
||||
) {
|
||||
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
||||
const callTemplate_1 = app.getTemplate(\`sub\`);
|
||||
|
||||
return function template(ctx, node, key = \\"\\") {
|
||||
let ctx1 = ctx['obj'];
|
||||
return callTemplate_1.call(this, ctx1, node, key + \`__1\`);
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`t-call (template calling) t-call-context 2`] = `
|
||||
"function anonymous(app, bdom, helpers
|
||||
) {
|
||||
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
||||
|
||||
let block1 = createBlock(\`<span><block-text-0/></span>\`);
|
||||
|
||||
return function template(ctx, node, key = \\"\\") {
|
||||
let txt1 = ctx['value'];
|
||||
return block1([txt1]);
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`t-call (template calling) t-call-context and value in body 1`] = `
|
||||
"function anonymous(app, bdom, helpers
|
||||
) {
|
||||
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
||||
let { isBoundary, withDefault, setContextValue } = helpers;
|
||||
const callTemplate_1 = app.getTemplate(\`sub\`);
|
||||
|
||||
return function template(ctx, node, key = \\"\\") {
|
||||
ctx = Object.create(ctx);
|
||||
ctx[isBoundary] = 1
|
||||
let ctx1 = ctx['obj'];
|
||||
ctx1 = Object.create(ctx1);
|
||||
ctx1[isBoundary] = 1;
|
||||
setContextValue(ctx1, \\"value2\\", ctx['aaron']);
|
||||
return callTemplate_1.call(this, ctx1, node, key + \`__1\`);
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`t-call (template calling) t-call-context and value in body 2`] = `
|
||||
"function anonymous(app, bdom, helpers
|
||||
) {
|
||||
let { text, createBlock, list, multi, html, toggler, comment } = bdom;
|
||||
|
||||
let block1 = createBlock(\`<span><block-text-0/><block-text-1/></span>\`);
|
||||
|
||||
return function template(ctx, node, key = \\"\\") {
|
||||
let txt1 = ctx['value1'];
|
||||
let txt2 = ctx['value2'];
|
||||
return block1([txt1, txt2]);
|
||||
}
|
||||
}"
|
||||
`;
|
||||
|
||||
exports[`t-call (template calling) t-esc inside t-call, with t-set outside 1`] = `
|
||||
"function anonymous(app, bdom, helpers
|
||||
) {
|
||||
|
||||
@@ -1033,6 +1033,7 @@ describe("qweb parser", () => {
|
||||
type: ASTType.TCall,
|
||||
name: "blap",
|
||||
body: null,
|
||||
context: null,
|
||||
},
|
||||
memo: "",
|
||||
hasNoFirst: false,
|
||||
@@ -1070,6 +1071,7 @@ describe("qweb parser", () => {
|
||||
type: ASTType.TCall,
|
||||
name: "blabla",
|
||||
body: null,
|
||||
context: null,
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1077,10 +1079,20 @@ describe("qweb parser", () => {
|
||||
expect(parse(`<t t-call="sub">ok</t>`)).toEqual({
|
||||
type: ASTType.TCall,
|
||||
name: "sub",
|
||||
context: null,
|
||||
body: [{ type: ASTType.Text, value: "ok" }],
|
||||
});
|
||||
});
|
||||
|
||||
test("t-call expression with t-call-context", async () => {
|
||||
expect(parse(`<t t-call="blabla" t-call-context="someContext"/>`)).toEqual({
|
||||
type: ASTType.TCall,
|
||||
name: "blabla",
|
||||
body: null,
|
||||
context: "someContext",
|
||||
});
|
||||
});
|
||||
|
||||
test("t-call on a div node", async () => {
|
||||
expect(parse(`<div t-call="blabla" />`)).toEqual({
|
||||
type: ASTType.DomNode,
|
||||
@@ -1096,6 +1108,7 @@ describe("qweb parser", () => {
|
||||
type: ASTType.TCall,
|
||||
name: "blabla",
|
||||
body: null,
|
||||
context: null,
|
||||
},
|
||||
],
|
||||
});
|
||||
@@ -1111,6 +1124,7 @@ describe("qweb parser", () => {
|
||||
type: ASTType.TCall,
|
||||
name: "blabla",
|
||||
body: null,
|
||||
context: null,
|
||||
},
|
||||
});
|
||||
});
|
||||
@@ -1547,7 +1561,7 @@ describe("qweb parser", () => {
|
||||
on: null,
|
||||
slots: {
|
||||
default: {
|
||||
content: { body: null, name: "subTemplate", type: ASTType.TCall },
|
||||
content: { body: null, name: "subTemplate", type: ASTType.TCall, context: null },
|
||||
attrs: null,
|
||||
scope: null,
|
||||
on: null,
|
||||
|
||||
@@ -445,4 +445,38 @@ describe("t-call (template calling)", () => {
|
||||
const expected2 = "<div><bar>quux</bar></div>";
|
||||
expect(context.renderToString("main", { template: "bar", val: "quux" })).toBe(expected2);
|
||||
});
|
||||
|
||||
test("t-call-context", () => {
|
||||
const context = new TestContext();
|
||||
context.addTemplate("sub", `<span><t t-esc="value"/></span>`);
|
||||
context.addTemplate("main", `<t t-call="sub" t-call-context="obj"/>`);
|
||||
|
||||
expect(context.renderToString("main", { obj: { value: 123 } })).toBe("<span>123</span>");
|
||||
});
|
||||
|
||||
test("t-call on a div with t-call-context", () => {
|
||||
const context = new TestContext();
|
||||
context.addTemplate("sub", `<span><t t-esc="value"/></span>`);
|
||||
context.addTemplate("main", `<div t-call="sub" t-call-context="obj"/>`);
|
||||
|
||||
expect(context.renderToString("main", { obj: { value: 123 } })).toBe(
|
||||
"<div><span>123</span></div>"
|
||||
);
|
||||
});
|
||||
|
||||
test("t-call-context and value in body", () => {
|
||||
const context = new TestContext();
|
||||
context.addTemplate("sub", `<span><t t-esc="value1"/><t t-esc="value2"/></span>`);
|
||||
context.addTemplate(
|
||||
"main",
|
||||
`
|
||||
<t t-call="sub" t-call-context="obj">
|
||||
<t t-set="value2" t-value="aaron" />
|
||||
</t>`
|
||||
);
|
||||
|
||||
expect(context.renderToString("main", { obj: { value1: 123 }, aaron: "lucas" })).toBe(
|
||||
"<span>123lucas</span>"
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user