mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[FIX] qweb/component: handle nested t-foreach and components
The way keys were handled in QWeb was mostly ok, but a little naive. It is fine when we deal with a list of dom nodes, since the reconciliation algorithm need only to be able to differentiate/reconcile nodes in that list, but it is an issue with components, which needs to globally be able to find themselves in their parent's children map. Because of the way this was handled, there were situations were Owl internal virtual dom would crash, since components wrongly assumed that they were already rendered in a different place. To fix this, we generalize the way keys are generated, by concatenating all sub keys coming from each iteration loops. closes #584
This commit is contained in:
@@ -428,6 +428,7 @@ exports[`foreach does not pollute the rendering context 1`] = `
|
||||
scope.item_index = i1
|
||||
scope.item = _3[i1]
|
||||
scope.item_value = _4[i1]
|
||||
let key1 = i1;
|
||||
let _6 = scope['item'];
|
||||
if (_6 != null) {
|
||||
c1.push({text: _6});
|
||||
@@ -462,13 +463,13 @@ exports[`foreach iterate on items (on a element node) 1`] = `
|
||||
scope.item_index = i1
|
||||
scope.item = _3[i1]
|
||||
scope.item_value = _4[i1]
|
||||
const nodeKey6 = scope['item'];
|
||||
let c7 = [], p7 = {key:nodeKey6};
|
||||
let vn7 = h('span', p7, c7);
|
||||
c1.push(vn7);
|
||||
let _8 = scope['item'];
|
||||
if (_8 != null) {
|
||||
c7.push({text: _8});
|
||||
let key1 = scope['item'];
|
||||
let c6 = [], p6 = {key:\`\${key1}_6\`};
|
||||
let vn6 = h('span', p6, c6);
|
||||
c1.push(vn6);
|
||||
let _7 = scope['item'];
|
||||
if (_7 != null) {
|
||||
c6.push({text: _7});
|
||||
}
|
||||
}
|
||||
scope = _origScope5;
|
||||
@@ -500,6 +501,7 @@ exports[`foreach iterate on items 1`] = `
|
||||
scope.item_index = i1
|
||||
scope.item = _3[i1]
|
||||
scope.item_value = _4[i1]
|
||||
let key1 = i1;
|
||||
c1.push({text: \` [\`});
|
||||
let _6 = scope['item_index'];
|
||||
if (_6 != null) {
|
||||
@@ -546,6 +548,7 @@ exports[`foreach iterate, dict param 1`] = `
|
||||
scope.item_index = i1
|
||||
scope.item = _3[i1]
|
||||
scope.item_value = _4[i1]
|
||||
let key1 = i1;
|
||||
c1.push({text: \` [\`});
|
||||
let _6 = scope['item_index'];
|
||||
if (_6 != null) {
|
||||
@@ -592,6 +595,7 @@ exports[`foreach iterate, position 1`] = `
|
||||
scope.elem_index = i1
|
||||
scope.elem = _3[i1]
|
||||
scope.elem_value = _4[i1]
|
||||
let key1 = i1;
|
||||
c1.push({text: \` -\`});
|
||||
if (scope['elem_first']) {
|
||||
c1.push({text: \` first\`});
|
||||
@@ -635,6 +639,7 @@ exports[`foreach t-foreach in t-forach 1`] = `
|
||||
scope.number_index = i1
|
||||
scope.number = _3[i1]
|
||||
scope.number_value = _4[i1]
|
||||
let key1 = i1;
|
||||
let _6 = scope['letters'];
|
||||
if (!_6) { throw new Error('QWeb error: Invalid loop expression')}
|
||||
let _7 = _8 = _6;
|
||||
@@ -651,6 +656,7 @@ exports[`foreach t-foreach in t-forach 1`] = `
|
||||
scope.letter_index = i2
|
||||
scope.letter = _7[i2]
|
||||
scope.letter_value = _8[i2]
|
||||
let key2 = i2;
|
||||
c1.push({text: \` [\`});
|
||||
let _10 = scope['number'];
|
||||
if (_10 != null) {
|
||||
@@ -693,7 +699,8 @@ exports[`foreach warn if no key in some case 1`] = `
|
||||
scope.item_index = i1
|
||||
scope.item = _3[i1]
|
||||
scope.item_value = _4[i1]
|
||||
let c6 = [], p6 = {key:6};
|
||||
let key1 = i1;
|
||||
let c6 = [], p6 = {key:\`\${key1}_6\`};
|
||||
let vn6 = h('span', p6, c6);
|
||||
c1.push(vn6);
|
||||
let _7 = scope['item'];
|
||||
@@ -757,7 +764,8 @@ exports[`misc global 1`] = `
|
||||
scope.value_index = i1
|
||||
scope.value = _3[i1]
|
||||
scope.value_value = _4[i1]
|
||||
let c6 = [], p6 = {key:6};
|
||||
let key1 = i1;
|
||||
let c6 = [], p6 = {key:\`\${key1}_6\`};
|
||||
let vn6 = h('span', p6, c6);
|
||||
c1.push(vn6);
|
||||
let _7 = scope['value'];
|
||||
@@ -765,32 +773,32 @@ exports[`misc global 1`] = `
|
||||
c6.push({text: _7});
|
||||
}
|
||||
{
|
||||
let _origScope11 = scope;
|
||||
let _origScope10 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
{
|
||||
let _origScope15 = scope;
|
||||
let _origScope13 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
scope.foo = 'aaa';
|
||||
scope[utils.zero] = c__0;
|
||||
}
|
||||
let k16 = \`__16__\${i1}__\`;
|
||||
this.subTemplates['_callee-uses-foo'].call(this, scope, Object.assign({}, extra, {parentNode: c__0, parent: utils.getComponent(context), key: k16}));
|
||||
scope = _origScope15;
|
||||
let k14 = \`__14__\${key1}__\`;
|
||||
this.subTemplates['_callee-uses-foo'].call(this, scope, Object.assign({}, extra, {parentNode: c__0, parent: utils.getComponent(context), key: k14}));
|
||||
scope = _origScope13;
|
||||
}
|
||||
let k17 = \`__17__\${i1}__\`;
|
||||
this.subTemplates['_callee-uses-foo'].call(this, Object.assign(Object.create(context), scope), Object.assign({}, extra, {parentNode: c__0, parent: utils.getComponent(context), key: k17}));
|
||||
let k15 = \`__15__\${key1}__\`;
|
||||
this.subTemplates['_callee-uses-foo'].call(this, Object.assign(Object.create(context), scope), Object.assign({}, extra, {parentNode: c__0, parent: utils.getComponent(context), key: k15}));
|
||||
scope.foo = 'bbb';
|
||||
let k18 = \`__18__\${i1}__\`;
|
||||
this.subTemplates['_callee-uses-foo'].call(this, Object.assign(Object.create(context), scope), Object.assign({}, extra, {parentNode: c__0, parent: utils.getComponent(context), key: k18}));
|
||||
let k16 = \`__16__\${key1}__\`;
|
||||
this.subTemplates['_callee-uses-foo'].call(this, Object.assign(Object.create(context), scope), Object.assign({}, extra, {parentNode: c__0, parent: utils.getComponent(context), key: k16}));
|
||||
scope[utils.zero] = c__0;
|
||||
}
|
||||
let k19 = \`__19__\${i1}__\`;
|
||||
this.subTemplates['_callee-asc'].call(this, scope, Object.assign({}, extra, {parentNode: c1, parent: utils.getComponent(context), key: k19}));
|
||||
scope = _origScope11;
|
||||
let k17 = \`__17__\${key1}__\`;
|
||||
this.subTemplates['_callee-asc'].call(this, scope, Object.assign({}, extra, {parentNode: c1, parent: utils.getComponent(context), key: k17}));
|
||||
scope = _origScope10;
|
||||
}
|
||||
}
|
||||
scope = _origScope5;
|
||||
@@ -1044,11 +1052,11 @@ exports[`t-call (template calling basic caller 2`] = `
|
||||
// Template name: \\"_basic-callee\\"
|
||||
let h = this.h;
|
||||
let c1 = extra.parentNode;
|
||||
let key2 = extra.key || '';
|
||||
let c3 = [], p3 = {key:key2};
|
||||
let vn3 = h('span', p3, c3);
|
||||
c1.push(vn3);
|
||||
c3.push({text: \`ok\`});
|
||||
let key0 = extra.key || \\"\\";
|
||||
let c2 = [], p2 = {key:\`\${key0}_2\`};
|
||||
let vn2 = h('span', p2, c2);
|
||||
c1.push(vn2);
|
||||
c2.push({text: \`ok\`});
|
||||
}"
|
||||
`;
|
||||
|
||||
@@ -1073,11 +1081,11 @@ exports[`t-call (template calling basic caller, no parent node 2`] = `
|
||||
// Template name: \\"_basic-callee\\"
|
||||
let h = this.h;
|
||||
let c1 = extra.parentNode;
|
||||
let key2 = extra.key || '';
|
||||
let c3 = [], p3 = {key:key2};
|
||||
let vn3 = h('div', p3, c3);
|
||||
c1.push(vn3);
|
||||
c3.push({text: \`ok\`});
|
||||
let key0 = extra.key || \\"\\";
|
||||
let c2 = [], p2 = {key:\`\${key0}_2\`};
|
||||
let vn2 = h('div', p2, c2);
|
||||
c1.push(vn2);
|
||||
c2.push({text: \`ok\`});
|
||||
}"
|
||||
`;
|
||||
|
||||
@@ -1091,23 +1099,23 @@ exports[`t-call (template calling call with several sub nodes on same line 1`] =
|
||||
let c1 = [], p1 = {key:1};
|
||||
let vn1 = h('div', p1, c1);
|
||||
{
|
||||
let _origScope4 = scope;
|
||||
let _origScope3 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
let c4 = [], p4 = {key:4};
|
||||
let vn4 = h('span', p4, c4);
|
||||
c__0.push(vn4);
|
||||
c4.push({text: \`hey\`});
|
||||
c__0.push({text: \` \`});
|
||||
let c5 = [], p5 = {key:5};
|
||||
let vn5 = h('span', p5, c5);
|
||||
c__0.push(vn5);
|
||||
c5.push({text: \`hey\`});
|
||||
c__0.push({text: \` \`});
|
||||
let c6 = [], p6 = {key:6};
|
||||
let vn6 = h('span', p6, c6);
|
||||
c__0.push(vn6);
|
||||
c6.push({text: \`yay\`});
|
||||
c5.push({text: \`yay\`});
|
||||
scope[utils.zero] = c__0;
|
||||
}
|
||||
this.subTemplates['SubTemplate'].call(this, scope, Object.assign({}, extra, {parentNode: c1, parent: utils.getComponent(context)}));
|
||||
scope = _origScope4;
|
||||
scope = _origScope3;
|
||||
}
|
||||
return vn1;
|
||||
}"
|
||||
@@ -1121,11 +1129,11 @@ exports[`t-call (template calling call with several sub nodes on same line 2`] =
|
||||
let scope = Object.create(context);
|
||||
let h = this.h;
|
||||
let c1 = extra.parentNode;
|
||||
let key2 = extra.key || '';
|
||||
let c3 = [], p3 = {key:key2};
|
||||
let vn3 = h('div', p3, c3);
|
||||
c1.push(vn3);
|
||||
c3.push(...scope[utils.zero]);
|
||||
let key0 = extra.key || \\"\\";
|
||||
let c2 = [], p2 = {key:\`\${key0}_2\`};
|
||||
let vn2 = h('div', p2, c2);
|
||||
c1.push(vn2);
|
||||
c2.push(...scope[utils.zero]);
|
||||
}"
|
||||
`;
|
||||
|
||||
@@ -1139,23 +1147,23 @@ exports[`t-call (template calling cascading t-call t-raw='0' 1`] = `
|
||||
let c1 = [], p1 = {key:1};
|
||||
let vn1 = h('div', p1, c1);
|
||||
{
|
||||
let _origScope13 = scope;
|
||||
let _origScope12 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
let c13 = [], p13 = {key:13};
|
||||
let vn13 = h('span', p13, c13);
|
||||
c__0.push(vn13);
|
||||
c13.push({text: \`hey\`});
|
||||
c__0.push({text: \` \`});
|
||||
let c14 = [], p14 = {key:14};
|
||||
let vn14 = h('span', p14, c14);
|
||||
c__0.push(vn14);
|
||||
c14.push({text: \`hey\`});
|
||||
c__0.push({text: \` \`});
|
||||
let c15 = [], p15 = {key:15};
|
||||
let vn15 = h('span', p15, c15);
|
||||
c__0.push(vn15);
|
||||
c15.push({text: \`yay\`});
|
||||
c14.push({text: \`yay\`});
|
||||
scope[utils.zero] = c__0;
|
||||
}
|
||||
this.subTemplates['SubTemplate'].call(this, scope, Object.assign({}, extra, {parentNode: c1, parent: utils.getComponent(context)}));
|
||||
scope = _origScope13;
|
||||
scope = _origScope12;
|
||||
}
|
||||
return vn1;
|
||||
}"
|
||||
@@ -1204,16 +1212,17 @@ exports[`t-call (template calling recursive template, part 1 2`] = `
|
||||
let scope = Object.create(context);
|
||||
let h = this.h;
|
||||
let c1 = extra.parentNode;
|
||||
let key3 = extra.key || '';
|
||||
let c4 = [], p4 = {key:key3};
|
||||
let vn4 = h('div', p4, c4);
|
||||
c1.push(vn4);
|
||||
let c5 = [], p5 = {key:key3};
|
||||
let vn5 = h('span', p5, c5);
|
||||
c4.push(vn5);
|
||||
c5.push({text: \`hey\`});
|
||||
let key0 = extra.key || \\"\\";
|
||||
let c3 = [], p3 = {key:\`\${key0}_3\`};
|
||||
let vn3 = h('div', p3, c3);
|
||||
c1.push(vn3);
|
||||
let c4 = [], p4 = {key:\`\${key0}_4\`};
|
||||
let vn4 = h('span', p4, c4);
|
||||
c3.push(vn4);
|
||||
c4.push({text: \`hey\`});
|
||||
if (false) {
|
||||
this.subTemplates['recursive'].call(this, Object.assign(Object.create(context), scope), Object.assign({}, extra, {parentNode: c4, parent: utils.getComponent(context)}));
|
||||
let k5 = \`__5__\${key0}__\`;
|
||||
this.subTemplates['recursive'].call(this, Object.assign(Object.create(context), scope), Object.assign({}, extra, {parentNode: c3, parent: utils.getComponent(context), key: k5}));
|
||||
}
|
||||
}"
|
||||
`;
|
||||
@@ -1228,7 +1237,7 @@ exports[`t-call (template calling recursive template, part 2 1`] = `
|
||||
let c1 = [], p1 = {key:1};
|
||||
let vn1 = h('div', p1, c1);
|
||||
{
|
||||
let _origScope12 = scope;
|
||||
let _origScope11 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
@@ -1236,7 +1245,7 @@ exports[`t-call (template calling recursive template, part 2 1`] = `
|
||||
scope[utils.zero] = c__0;
|
||||
}
|
||||
this.subTemplates['nodeTemplate'].call(this, scope, Object.assign({}, extra, {parentNode: c1, parent: utils.getComponent(context)}));
|
||||
scope = _origScope12;
|
||||
scope = _origScope11;
|
||||
}
|
||||
return vn1;
|
||||
}"
|
||||
@@ -1250,47 +1259,48 @@ exports[`t-call (template calling recursive template, part 2 2`] = `
|
||||
let scope = Object.create(context);
|
||||
let h = this.h;
|
||||
let c1 = extra.parentNode;
|
||||
let key2 = extra.key || '';
|
||||
let c3 = [], p3 = {key:key2};
|
||||
let vn3 = h('div', p3, c3);
|
||||
c1.push(vn3);
|
||||
let c4 = [], p4 = {key:key2};
|
||||
let vn4 = h('p', p4, c4);
|
||||
c3.push(vn4);
|
||||
let _5 = scope['node'].val;
|
||||
if (_5 != null) {
|
||||
c4.push({text: _5});
|
||||
let key0 = extra.key || \\"\\";
|
||||
let c2 = [], p2 = {key:\`\${key0}_2\`};
|
||||
let vn2 = h('div', p2, c2);
|
||||
c1.push(vn2);
|
||||
let c3 = [], p3 = {key:\`\${key0}_3\`};
|
||||
let vn3 = h('p', p3, c3);
|
||||
c2.push(vn3);
|
||||
let _4 = scope['node'].val;
|
||||
if (_4 != null) {
|
||||
c3.push({text: _4});
|
||||
}
|
||||
let _6 = scope['node'].children||[];
|
||||
if (!_6) { throw new Error('QWeb error: Invalid loop expression')}
|
||||
let _7 = _8 = _6;
|
||||
if (!(_6 instanceof Array)) {
|
||||
_7 = Object.keys(_6);
|
||||
_8 = Object.values(_6);
|
||||
let _5 = scope['node'].children||[];
|
||||
if (!_5) { throw new Error('QWeb error: Invalid loop expression')}
|
||||
let _6 = _7 = _5;
|
||||
if (!(_5 instanceof Array)) {
|
||||
_6 = Object.keys(_5);
|
||||
_7 = Object.values(_5);
|
||||
}
|
||||
let _length7 = _7.length;
|
||||
let _origScope9 = scope;
|
||||
let _length6 = _6.length;
|
||||
let _origScope8 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
for (let i1 = 0; i1 < _length7; i1++) {
|
||||
for (let i1 = 0; i1 < _length6; i1++) {
|
||||
scope.subtree_first = i1 === 0
|
||||
scope.subtree_last = i1 === _length7 - 1
|
||||
scope.subtree_last = i1 === _length6 - 1
|
||||
scope.subtree_index = i1
|
||||
scope.subtree = _7[i1]
|
||||
scope.subtree_value = _8[i1]
|
||||
scope.subtree = _6[i1]
|
||||
scope.subtree_value = _7[i1]
|
||||
let key1 = i1;
|
||||
{
|
||||
let _origScope10 = scope;
|
||||
let _origScope9 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
scope.node = scope['subtree'];
|
||||
scope[utils.zero] = c__0;
|
||||
}
|
||||
let k11 = \`__11__\` + key2;
|
||||
this.subTemplates['nodeTemplate'].call(this, scope, Object.assign({}, extra, {parentNode: c3, parent: utils.getComponent(context), key: k11}));
|
||||
scope = _origScope10;
|
||||
let k10 = \`__10__\${key0}__\${key1}__\`;
|
||||
this.subTemplates['nodeTemplate'].call(this, scope, Object.assign({}, extra, {parentNode: c2, parent: utils.getComponent(context), key: k10}));
|
||||
scope = _origScope9;
|
||||
}
|
||||
}
|
||||
scope = _origScope9;
|
||||
scope = _origScope8;
|
||||
}"
|
||||
`;
|
||||
|
||||
@@ -1304,7 +1314,7 @@ exports[`t-call (template calling recursive template, part 3 1`] = `
|
||||
let c1 = [], p1 = {key:1};
|
||||
let vn1 = h('div', p1, c1);
|
||||
{
|
||||
let _origScope12 = scope;
|
||||
let _origScope11 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
@@ -1312,7 +1322,7 @@ exports[`t-call (template calling recursive template, part 3 1`] = `
|
||||
scope[utils.zero] = c__0;
|
||||
}
|
||||
this.subTemplates['nodeTemplate'].call(this, scope, Object.assign({}, extra, {parentNode: c1, parent: utils.getComponent(context)}));
|
||||
scope = _origScope12;
|
||||
scope = _origScope11;
|
||||
}
|
||||
return vn1;
|
||||
}"
|
||||
@@ -1326,47 +1336,48 @@ exports[`t-call (template calling recursive template, part 3 2`] = `
|
||||
let scope = Object.create(context);
|
||||
let h = this.h;
|
||||
let c1 = extra.parentNode;
|
||||
let key2 = extra.key || '';
|
||||
let c3 = [], p3 = {key:key2};
|
||||
let vn3 = h('div', p3, c3);
|
||||
c1.push(vn3);
|
||||
let c4 = [], p4 = {key:key2};
|
||||
let vn4 = h('p', p4, c4);
|
||||
c3.push(vn4);
|
||||
let _5 = scope['node'].val;
|
||||
if (_5 != null) {
|
||||
c4.push({text: _5});
|
||||
let key0 = extra.key || \\"\\";
|
||||
let c2 = [], p2 = {key:\`\${key0}_2\`};
|
||||
let vn2 = h('div', p2, c2);
|
||||
c1.push(vn2);
|
||||
let c3 = [], p3 = {key:\`\${key0}_3\`};
|
||||
let vn3 = h('p', p3, c3);
|
||||
c2.push(vn3);
|
||||
let _4 = scope['node'].val;
|
||||
if (_4 != null) {
|
||||
c3.push({text: _4});
|
||||
}
|
||||
let _6 = scope['node'].children||[];
|
||||
if (!_6) { throw new Error('QWeb error: Invalid loop expression')}
|
||||
let _7 = _8 = _6;
|
||||
if (!(_6 instanceof Array)) {
|
||||
_7 = Object.keys(_6);
|
||||
_8 = Object.values(_6);
|
||||
let _5 = scope['node'].children||[];
|
||||
if (!_5) { throw new Error('QWeb error: Invalid loop expression')}
|
||||
let _6 = _7 = _5;
|
||||
if (!(_5 instanceof Array)) {
|
||||
_6 = Object.keys(_5);
|
||||
_7 = Object.values(_5);
|
||||
}
|
||||
let _length7 = _7.length;
|
||||
let _origScope9 = scope;
|
||||
let _length6 = _6.length;
|
||||
let _origScope8 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
for (let i1 = 0; i1 < _length7; i1++) {
|
||||
for (let i1 = 0; i1 < _length6; i1++) {
|
||||
scope.subtree_first = i1 === 0
|
||||
scope.subtree_last = i1 === _length7 - 1
|
||||
scope.subtree_last = i1 === _length6 - 1
|
||||
scope.subtree_index = i1
|
||||
scope.subtree = _7[i1]
|
||||
scope.subtree_value = _8[i1]
|
||||
scope.subtree = _6[i1]
|
||||
scope.subtree_value = _7[i1]
|
||||
let key1 = i1;
|
||||
{
|
||||
let _origScope10 = scope;
|
||||
let _origScope9 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
scope.node = scope['subtree'];
|
||||
scope[utils.zero] = c__0;
|
||||
}
|
||||
let k11 = \`__11__\` + key2;
|
||||
this.subTemplates['nodeTemplate'].call(this, scope, Object.assign({}, extra, {parentNode: c3, parent: utils.getComponent(context), key: k11}));
|
||||
scope = _origScope10;
|
||||
let k10 = \`__10__\${key0}__\${key1}__\`;
|
||||
this.subTemplates['nodeTemplate'].call(this, scope, Object.assign({}, extra, {parentNode: c2, parent: utils.getComponent(context), key: k10}));
|
||||
scope = _origScope9;
|
||||
}
|
||||
}
|
||||
scope = _origScope9;
|
||||
scope = _origScope8;
|
||||
}"
|
||||
`;
|
||||
|
||||
@@ -1380,7 +1391,7 @@ exports[`t-call (template calling scoped parameters 1`] = `
|
||||
let c1 = [], p1 = {key:1};
|
||||
let vn1 = h('div', p1, c1);
|
||||
{
|
||||
let _origScope3 = scope;
|
||||
let _origScope2 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
@@ -1388,7 +1399,7 @@ exports[`t-call (template calling scoped parameters 1`] = `
|
||||
scope[utils.zero] = c__0;
|
||||
}
|
||||
this.subTemplates['_basic-callee'].call(this, scope, Object.assign({}, extra, {parentNode: c1, parent: utils.getComponent(context)}));
|
||||
scope = _origScope3;
|
||||
scope = _origScope2;
|
||||
}
|
||||
if (scope.foo != null) {
|
||||
c1.push({text: scope.foo});
|
||||
@@ -1419,11 +1430,11 @@ exports[`t-call (template calling t-call with t-if 2`] = `
|
||||
// Template name: \\"sub\\"
|
||||
let h = this.h;
|
||||
let c1 = extra.parentNode;
|
||||
let key2 = extra.key || '';
|
||||
let c3 = [], p3 = {key:key2};
|
||||
let vn3 = h('span', p3, c3);
|
||||
c1.push(vn3);
|
||||
c3.push({text: \`ok\`});
|
||||
let key0 = extra.key || \\"\\";
|
||||
let c2 = [], p2 = {key:\`\${key0}_2\`};
|
||||
let vn2 = h('span', p2, c2);
|
||||
c1.push(vn2);
|
||||
c2.push({text: \`ok\`});
|
||||
}"
|
||||
`;
|
||||
|
||||
@@ -1452,18 +1463,19 @@ exports[`t-call (template calling t-call with t-set inside and outside 1`] = `
|
||||
scope.v_index = i1
|
||||
scope.v = _3[i1]
|
||||
scope.v_value = _4[i1]
|
||||
let key1 = i1;
|
||||
scope.val = scope['v'].val;
|
||||
{
|
||||
let _origScope9 = scope;
|
||||
let _origScope8 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
scope.val3 = scope.val*3;
|
||||
scope[utils.zero] = c__0;
|
||||
}
|
||||
let k10 = \`__10__\${i1}__\`;
|
||||
this.subTemplates['sub'].call(this, scope, Object.assign({}, extra, {parentNode: c1, parent: utils.getComponent(context), key: k10}));
|
||||
scope = _origScope9;
|
||||
let k9 = \`__9__\${key1}__\`;
|
||||
this.subTemplates['sub'].call(this, scope, Object.assign({}, extra, {parentNode: c1, parent: utils.getComponent(context), key: k9}));
|
||||
scope = _origScope8;
|
||||
}
|
||||
}
|
||||
scope = _origScope5;
|
||||
@@ -1501,7 +1513,7 @@ exports[`t-call (template calling t-call, conditional and t-set in t-call body 1
|
||||
}
|
||||
else if (scope.v1==='elif') {
|
||||
{
|
||||
let _origScope7 = scope;
|
||||
let _origScope5 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
@@ -1509,7 +1521,7 @@ exports[`t-call (template calling t-call, conditional and t-set in t-call body 1
|
||||
scope[utils.zero] = c__0;
|
||||
}
|
||||
this.subTemplates['callee2'].call(this, scope, Object.assign({}, extra, {parentNode: c1, parent: utils.getComponent(context)}));
|
||||
scope = _origScope7;
|
||||
scope = _origScope5;
|
||||
}
|
||||
}
|
||||
return vn1;
|
||||
@@ -1539,7 +1551,7 @@ exports[`t-call (template calling with unused body 1`] = `
|
||||
let result;
|
||||
let h = this.h;
|
||||
{
|
||||
let _origScope4 = scope;
|
||||
let _origScope3 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
@@ -1549,7 +1561,7 @@ exports[`t-call (template calling with unused body 1`] = `
|
||||
result = []
|
||||
this.subTemplates['_basic-callee'].call(this, scope, Object.assign({}, extra, {parentNode: result, parent: utils.getComponent(context)}));
|
||||
result = result[0]
|
||||
scope = _origScope4;
|
||||
scope = _origScope3;
|
||||
}
|
||||
return result;
|
||||
}"
|
||||
@@ -1564,7 +1576,7 @@ exports[`t-call (template calling with unused setbody 1`] = `
|
||||
let result;
|
||||
let h = this.h;
|
||||
{
|
||||
let _origScope4 = scope;
|
||||
let _origScope3 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
@@ -1574,7 +1586,7 @@ exports[`t-call (template calling with unused setbody 1`] = `
|
||||
result = []
|
||||
this.subTemplates['_basic-callee'].call(this, scope, Object.assign({}, extra, {parentNode: result, parent: utils.getComponent(context)}));
|
||||
result = result[0]
|
||||
scope = _origScope4;
|
||||
scope = _origScope3;
|
||||
}
|
||||
return result;
|
||||
}"
|
||||
@@ -1589,7 +1601,7 @@ exports[`t-call (template calling with used body 1`] = `
|
||||
let result;
|
||||
let h = this.h;
|
||||
{
|
||||
let _origScope4 = scope;
|
||||
let _origScope3 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
@@ -1599,7 +1611,7 @@ exports[`t-call (template calling with used body 1`] = `
|
||||
result = []
|
||||
this.subTemplates['_callee-printsbody'].call(this, scope, Object.assign({}, extra, {parentNode: result, parent: utils.getComponent(context)}));
|
||||
result = result[0]
|
||||
scope = _origScope4;
|
||||
scope = _origScope3;
|
||||
}
|
||||
return result;
|
||||
}"
|
||||
@@ -1615,7 +1627,7 @@ exports[`t-call (template calling with used set body 1`] = `
|
||||
let c1 = [], p1 = {key:1};
|
||||
let vn1 = h('span', p1, c1);
|
||||
{
|
||||
let _origScope4 = scope;
|
||||
let _origScope3 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
@@ -1623,7 +1635,7 @@ exports[`t-call (template calling with used set body 1`] = `
|
||||
scope[utils.zero] = c__0;
|
||||
}
|
||||
this.subTemplates['_callee-uses-foo'].call(this, scope, Object.assign({}, extra, {parentNode: c1, parent: utils.getComponent(context)}));
|
||||
scope = _origScope4;
|
||||
scope = _origScope3;
|
||||
}
|
||||
return vn1;
|
||||
}"
|
||||
@@ -1812,18 +1824,18 @@ exports[`t-esc t-esc=0 is escaped 1`] = `
|
||||
let c1 = [], p1 = {key:1};
|
||||
let vn1 = h('div', p1, c1);
|
||||
{
|
||||
let _origScope4 = scope;
|
||||
let _origScope3 = scope;
|
||||
scope = Object.assign(Object.create(context), scope);
|
||||
{
|
||||
let c__0 = [];
|
||||
let c5 = [], p5 = {key:5};
|
||||
let vn5 = h('p', p5, c5);
|
||||
c__0.push(vn5);
|
||||
c5.push({text: \`escaped\`});
|
||||
let c4 = [], p4 = {key:4};
|
||||
let vn4 = h('p', p4, c4);
|
||||
c__0.push(vn4);
|
||||
c4.push({text: \`escaped\`});
|
||||
scope[utils.zero] = c__0;
|
||||
}
|
||||
this.subTemplates['test'].call(this, scope, Object.assign({}, extra, {parentNode: c1, parent: utils.getComponent(context)}));
|
||||
scope = _origScope4;
|
||||
scope = _origScope3;
|
||||
}
|
||||
return vn1;
|
||||
}"
|
||||
@@ -2110,15 +2122,20 @@ exports[`t-key can use t-key directive on a node 1`] = `
|
||||
) {
|
||||
// Template name: \\"test\\"
|
||||
let scope = Object.create(context);
|
||||
let result;
|
||||
let h = this.h;
|
||||
const nodeKey1 = scope['beer'].id;
|
||||
let c2 = [], p2 = {key:nodeKey1};
|
||||
let vn2 = h('div', p2, c2);
|
||||
let _3 = scope['beer'].name;
|
||||
if (_3 != null) {
|
||||
c2.push({text: _3});
|
||||
{
|
||||
let key0 = scope['beer'].id;
|
||||
let c1 = [], p1 = {key:\`\${key0}_1\`};
|
||||
let vn1 = h('div', p1, c1);
|
||||
result = vn1;
|
||||
result = vn1;
|
||||
let _2 = scope['beer'].name;
|
||||
if (_2 != null) {
|
||||
c1.push({text: _2});
|
||||
}
|
||||
}
|
||||
return vn2;
|
||||
return result;
|
||||
}"
|
||||
`;
|
||||
|
||||
@@ -2146,13 +2163,13 @@ exports[`t-key t-key directive in a list 1`] = `
|
||||
scope.beer_index = i1
|
||||
scope.beer = _3[i1]
|
||||
scope.beer_value = _4[i1]
|
||||
const nodeKey6 = scope['beer'].id;
|
||||
let c7 = [], p7 = {key:nodeKey6};
|
||||
let vn7 = h('li', p7, c7);
|
||||
c1.push(vn7);
|
||||
let _8 = scope['beer'].name;
|
||||
if (_8 != null) {
|
||||
c7.push({text: _8});
|
||||
let key1 = scope['beer'].id;
|
||||
let c6 = [], p6 = {key:\`\${key1}_6\`};
|
||||
let vn6 = h('li', p6, c6);
|
||||
c1.push(vn6);
|
||||
let _7 = scope['beer'].name;
|
||||
if (_7 != null) {
|
||||
c6.push({text: _7});
|
||||
}
|
||||
}
|
||||
scope = _origScope5;
|
||||
@@ -2250,16 +2267,16 @@ exports[`t-on can bind handlers with loop variable as argument 1`] = `
|
||||
scope.action_index = i1
|
||||
scope.action = _3[i1]
|
||||
scope.action_value = _4[i1]
|
||||
const nodeKey6 = scope['action_index'];
|
||||
let c7 = [], p7 = {key:nodeKey6};
|
||||
let vn7 = h('li', p7, c7);
|
||||
c1.push(vn7);
|
||||
let c8 = [], p8 = {key:nodeKey6,on:{}};
|
||||
let vn8 = h('a', p8, c8);
|
||||
c7.push(vn8);
|
||||
let args9 = [scope['action']];
|
||||
p8.on['click'] = function (e) {if (!context.__owl__.isMounted){return}utils.getComponent(context)['activate'](...args9, e);};
|
||||
c8.push({text: \`link\`});
|
||||
let key1 = scope['action_index'];
|
||||
let c6 = [], p6 = {key:\`\${key1}_6\`};
|
||||
let vn6 = h('li', p6, c6);
|
||||
c1.push(vn6);
|
||||
let c7 = [], p7 = {key:\`\${key1}_7\`,on:{}};
|
||||
let vn7 = h('a', p7, c7);
|
||||
c6.push(vn7);
|
||||
let args8 = [scope['action']];
|
||||
p7.on['click'] = function (e) {if (!context.__owl__.isMounted){return}utils.getComponent(context)['activate'](...args8, e);};
|
||||
c7.push({text: \`link\`});
|
||||
}
|
||||
scope = _origScope5;
|
||||
return vn1;
|
||||
@@ -2507,17 +2524,20 @@ exports[`t-on t-on with prevent modifier in t-foreach 1`] = `
|
||||
scope.project_index = i1
|
||||
scope.project = _3[i1]
|
||||
scope.project_value = _4[i1]
|
||||
const nodeKey6 = scope['project'];
|
||||
let _7 = '#';
|
||||
let c8 = [], p8 = {key:nodeKey6,attrs:{href: _7},on:{}};
|
||||
let vn8 = h('a', p8, c8);
|
||||
c1.push(vn8);
|
||||
let args9 = [scope['project'].id];
|
||||
p8.on['click'] = function (e) {if (!context.__owl__.isMounted){return}e.preventDefault();utils.getComponent(context)['onEdit'](...args9, e);};
|
||||
c8.push({text: \` Edit \`});
|
||||
let _10 = scope['project'].name;
|
||||
if (_10 != null) {
|
||||
c8.push({text: _10});
|
||||
let key1 = i1;
|
||||
{
|
||||
let key1 = scope['project'];
|
||||
let _6 = '#';
|
||||
let c7 = [], p7 = {key:\`\${key1}_7\`,attrs:{href: _6},on:{}};
|
||||
let vn7 = h('a', p7, c7);
|
||||
c1.push(vn7);
|
||||
let args8 = [scope['project'].id];
|
||||
p7.on['click'] = function (e) {if (!context.__owl__.isMounted){return}e.preventDefault();utils.getComponent(context)['onEdit'](...args8, e);};
|
||||
c7.push({text: \` Edit \`});
|
||||
let _9 = scope['project'].name;
|
||||
if (_9 != null) {
|
||||
c7.push({text: _9});
|
||||
}
|
||||
}
|
||||
}
|
||||
scope = _origScope5;
|
||||
@@ -2750,22 +2770,25 @@ exports[`t-ref refs in a loop 1`] = `
|
||||
scope.item_index = i1
|
||||
scope.item = _3[i1]
|
||||
scope.item_value = _4[i1]
|
||||
const nodeKey6 = scope['item'];
|
||||
let c7 = [], p7 = {key:nodeKey6};
|
||||
let vn7 = h('div', p7, c7);
|
||||
c1.push(vn7);
|
||||
const ref8 = (scope['item']);
|
||||
p7.hook = {
|
||||
create: (_, n) => {
|
||||
context.__owl__.refs[ref8] = n.elm;
|
||||
},
|
||||
destroy: () => {
|
||||
delete context.__owl__.refs[ref8];
|
||||
},
|
||||
};
|
||||
let _9 = scope['item'];
|
||||
if (_9 != null) {
|
||||
c7.push({text: _9});
|
||||
let key1 = i1;
|
||||
{
|
||||
let key1 = scope['item'];
|
||||
let c6 = [], p6 = {key:\`\${key1}_6\`};
|
||||
let vn6 = h('div', p6, c6);
|
||||
c1.push(vn6);
|
||||
const ref7 = (scope['item']);
|
||||
p6.hook = {
|
||||
create: (_, n) => {
|
||||
context.__owl__.refs[ref7] = n.elm;
|
||||
},
|
||||
destroy: () => {
|
||||
delete context.__owl__.refs[ref7];
|
||||
},
|
||||
};
|
||||
let _8 = scope['item'];
|
||||
if (_8 != null) {
|
||||
c6.push({text: _8});
|
||||
}
|
||||
}
|
||||
}
|
||||
scope = _origScope5;
|
||||
@@ -2988,16 +3011,16 @@ exports[`t-set t-set should reuse variable if possible 1`] = `
|
||||
scope.elem_index = i1
|
||||
scope.elem = _3[i1]
|
||||
scope.elem_value = _4[i1]
|
||||
const nodeKey6 = scope['elem_index'];
|
||||
let c7 = [], p7 = {key:nodeKey6};
|
||||
let vn7 = h('div', p7, c7);
|
||||
c1.push(vn7);
|
||||
let c8 = [], p8 = {key:nodeKey6};
|
||||
let vn8 = h('span', p8, c8);
|
||||
c7.push(vn8);
|
||||
c8.push({text: \`v\`});
|
||||
let key1 = scope['elem_index'];
|
||||
let c6 = [], p6 = {key:\`\${key1}_6\`};
|
||||
let vn6 = h('div', p6, c6);
|
||||
c1.push(vn6);
|
||||
let c7 = [], p7 = {key:\`\${key1}_7\`};
|
||||
let vn7 = h('span', p7, c7);
|
||||
c6.push(vn7);
|
||||
c7.push({text: \`v\`});
|
||||
if (scope.v != null) {
|
||||
c8.push({text: scope.v});
|
||||
c7.push({text: scope.v});
|
||||
}
|
||||
scope.v = scope['elem'];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user