diff --git a/src/qweb/base_directives.ts b/src/qweb/base_directives.ts index f95bfb1b..0a18f31c 100644 --- a/src/qweb/base_directives.ts +++ b/src/qweb/base_directives.ts @@ -242,7 +242,9 @@ QWeb.addDirective({ ctx.indent(); protectID = ctx.startProtectScope(); const nodeCopy = node.cloneNode(true) as Element; - nodeCopy.removeAttribute("t-call"); + for (let attr of ["t-if", "t-else", "t-elif", "t-call"]) { + nodeCopy.removeAttribute(attr); + } const parentNode = ctx.parentNode; ctx.parentNode = "__0"; // this local scope is intended to trap c__0 diff --git a/tests/qweb/__snapshots__/qweb.test.ts.snap b/tests/qweb/__snapshots__/qweb.test.ts.snap index bc187066..c670cba9 100644 --- a/tests/qweb/__snapshots__/qweb.test.ts.snap +++ b/tests/qweb/__snapshots__/qweb.test.ts.snap @@ -1464,6 +1464,36 @@ exports[`t-call (template calling t-call with t-set inside and outside. 2 1`] = }" `; +exports[`t-call (template calling t-call, conditional and t-set in t-call body 1`] = ` +"function anonymous(context, extra +) { + // Template name: \\"caller\\" + let utils = this.constructor.utils; + let scope = Object.create(context); + var h = this.h; + let c1 = [], p1 = {key:1}; + var vn1 = h('div', p1, c1); + scope.v1 = 'elif'; + if (scope.v1==='if') { + this.subTemplates['callee1'].call(this, Object.assign(Object.create(context), scope), Object.assign({}, extra, {parentNode: c1})); + } + else if (scope.v1==='elif') { + { + const _origScope5 = scope; + scope = Object.assign(Object.create(context), scope); + { + let c__0 = []; + scope.v = 'success'; + scope[utils.zero] = c__0; + } + this.subTemplates['callee2'].call(this, scope, Object.assign({}, extra, {parentNode: c1})); + scope = _origScope5; + } + } + return vn1; +}" +`; + exports[`t-call (template calling t-call, global templates 1`] = ` "function anonymous(context, extra ) { diff --git a/tests/qweb/qweb.test.ts b/tests/qweb/qweb.test.ts index 28d4f655..c465e32f 100644 --- a/tests/qweb/qweb.test.ts +++ b/tests/qweb/qweb.test.ts @@ -882,6 +882,22 @@ describe("t-call (template calling", () => { expect(trim(renderToString(qweb, "abcd"))).toBe(expected); }); + test("t-call, conditional and t-set in t-call body", () => { + QWeb.registerTemplate("callee1", '