mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
cfdce29ce7
This is a difficult part of owl: we need to be able to reconcile the vdom generated (this is done with our virtual dom algorithm), but also to be able to reconcile the proper components. The issue here is that when we are in a list, with a t-key attribute on all list nodes, and those list nodes contains sub component, then the component system used the index of the list, and did not take into account the key from the parent. The fix is to keep track of the current key in the context, and uses that as a part of the templateId.
1831 lines
46 KiB
Plaintext
1831 lines
46 KiB
Plaintext
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
|
|
exports[`attributes class and t-attf-class with ternary operation 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = 'hello ' + (context['value']?'world':'');
|
|
let c2 = [], p2 = {key:2,attrs:{class: _1}};
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes dynamic attribute falsy variable 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = context['value'];
|
|
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes dynamic attribute with a dash 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = context['id'];
|
|
let c2 = [], p2 = {key:2,attrs:{\\"data-action-id\\": _1}};
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes dynamic attributes 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = 'bar';
|
|
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes dynamic formatted attributes with a dash 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = \`Some text \${context['id']}\`;
|
|
let c2 = [], p2 = {key:2,attrs:{\\"aria-label\\": _1}};
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes fixed variable 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = context['value'];
|
|
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes format expression 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = (context['value']+37);
|
|
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes format expression, other format 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = (context['value']+37);
|
|
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes format literal 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = \`bar\`;
|
|
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes format multiple 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = \`a \${context['value1']} is \${context['value2']} of \${context['value3']} ]\`;
|
|
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes format value 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = \`b\${context['value']}r\`;
|
|
let c2 = [], p2 = {key:2,attrs:{foo: _1}};
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes from object variables set previously 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let utils = this.constructor.utils;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = {a:'b'};
|
|
let _3 = utils.toObj(_2.a);
|
|
let c4 = [], p4 = {key:4,class:_3};
|
|
var vn4 = h('span', p4, c4);
|
|
c1.push(vn4);
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes from variables set previously 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let utils = this.constructor.utils;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = 'def';
|
|
let _3 = utils.toObj(_2);
|
|
let c4 = [], p4 = {key:4,class:_3};
|
|
var vn4 = h('span', p4, c4);
|
|
c1.push(vn4);
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes object 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = context['value'];
|
|
let c2 = [], p2 = {key:2,attrs:{}};
|
|
if (_1 instanceof Array) {
|
|
p2.attrs[_1[0]] = _1[1];
|
|
} else {
|
|
for (let key in _1) {
|
|
p2.attrs[key] = _1[key];
|
|
}
|
|
}
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes static attributes 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = 'a';
|
|
var _2 = 'b';
|
|
var _3 = 'c';
|
|
let c4 = [], p4 = {key:4,attrs:{foo: _1,bar: _2,baz: _3}};
|
|
var vn4 = h('div', p4, c4);
|
|
return vn4;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes static attributes on void elements 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = '/test.jpg';
|
|
var _2 = 'Test';
|
|
let c3 = [], p3 = {key:3,attrs:{src: _1,alt: _2}};
|
|
var vn3 = h('img', p3, c3);
|
|
return vn3;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes static attributes with dashes 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = 'Close';
|
|
let c2 = [], p2 = {key:2,attrs:{\\"aria-label\\": _1}};
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes t-att-class and class should combine together 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let utils = this.constructor.utils;
|
|
var h = this.h;
|
|
let _2 = {'hello':true};
|
|
Object.assign(_2, utils.toObj(context['value']))
|
|
let c3 = [], p3 = {key:3,class:_2};
|
|
var vn3 = h('div', p3, c3);
|
|
return vn3;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes t-att-class with object 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let utils = this.constructor.utils;
|
|
var h = this.h;
|
|
let _2 = {'static':true};
|
|
Object.assign(_2, utils.toObj({a:context['b'],c:context['d'],e:context['f']}))
|
|
let c3 = [], p3 = {key:3,class:_2};
|
|
var vn3 = h('div', p3, c3);
|
|
return vn3;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes t-attf-class should combine with class 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = 'hello ' + \`world\`;
|
|
let c2 = [], p2 = {key:2,attrs:{class: _1}};
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes tuple literal 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = ['foo','bar'];
|
|
let c2 = [], p2 = {key:2,attrs:{}};
|
|
if (_1 instanceof Array) {
|
|
p2.attrs[_1[0]] = _1[1];
|
|
} else {
|
|
for (let key in _1) {
|
|
p2.attrs[key] = _1[key];
|
|
}
|
|
}
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`attributes tuple variable 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = context['value'];
|
|
let c2 = [], p2 = {key:2,attrs:{}};
|
|
if (_1 instanceof Array) {
|
|
p2.attrs[_1[0]] = _1[1];
|
|
} else {
|
|
for (let key in _1) {
|
|
p2.attrs[key] = _1[key];
|
|
}
|
|
}
|
|
var vn2 = h('div', p2, c2);
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`debugging t-debug 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
debugger;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
if (true) {
|
|
debugger;
|
|
let c2 = [], p2 = {key:2};
|
|
var vn2 = h('span', p2, c2);
|
|
c1.push(vn2);
|
|
c2.push({text: \`hey\`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`debugging t-log 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = 42;
|
|
console.log(_2+3)
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`foreach does not pollute the rendering context 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
context = Object.create(context);
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = [1];
|
|
if (!_2) { throw new Error('QWeb error: Invalid loop expression')}
|
|
var _3 = _4 = _2;
|
|
if (!(_2 instanceof Array)) {
|
|
_3 = Object.keys(_2);
|
|
_4 = Object.values(_2);
|
|
}
|
|
var _length3 = _3.length;
|
|
for (let i = 0; i < _length3; i++) {
|
|
context.item_first = i === 0;
|
|
context.item_last = i === _length3 - 1;
|
|
context.item_index = i;
|
|
context.item = _3[i];
|
|
context.item_value = _4[i];
|
|
var _5 = context['item'];
|
|
if (_5 || _5 === 0) {
|
|
c1.push({text: _5});
|
|
}
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`foreach iterate on items (on a element node) 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
context = Object.create(context);
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = [1,2];
|
|
if (!_2) { throw new Error('QWeb error: Invalid loop expression')}
|
|
var _3 = _4 = _2;
|
|
if (!(_2 instanceof Array)) {
|
|
_3 = Object.keys(_2);
|
|
_4 = Object.values(_2);
|
|
}
|
|
var _length3 = _3.length;
|
|
for (let i = 0; i < _length3; i++) {
|
|
context.item_first = i === 0;
|
|
context.item_last = i === _length3 - 1;
|
|
context.item_index = i;
|
|
context.item = _3[i];
|
|
context.item_value = _4[i];
|
|
const nodeKey5 = context['item']
|
|
let c5 = [], p5 = {key:nodeKey5};
|
|
var vn5 = h('span', p5, c5);
|
|
c1.push(vn5);
|
|
var _6 = context['item'];
|
|
if (_6 || _6 === 0) {
|
|
c5.push({text: _6});
|
|
}
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`foreach iterate on items 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
context = Object.create(context);
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = [3,2,1];
|
|
if (!_2) { throw new Error('QWeb error: Invalid loop expression')}
|
|
var _3 = _4 = _2;
|
|
if (!(_2 instanceof Array)) {
|
|
_3 = Object.keys(_2);
|
|
_4 = Object.values(_2);
|
|
}
|
|
var _length3 = _3.length;
|
|
for (let i = 0; i < _length3; i++) {
|
|
context.item_first = i === 0;
|
|
context.item_last = i === _length3 - 1;
|
|
context.item_index = i;
|
|
context.item = _3[i];
|
|
context.item_value = _4[i];
|
|
c1.push({text: \` [\`});
|
|
var _5 = context['item_index'];
|
|
if (_5 || _5 === 0) {
|
|
c1.push({text: _5});
|
|
}
|
|
c1.push({text: \`: \`});
|
|
var _6 = context['item'];
|
|
if (_6 || _6 === 0) {
|
|
c1.push({text: _6});
|
|
}
|
|
c1.push({text: \` \`});
|
|
var _7 = context['item_value'];
|
|
if (_7 || _7 === 0) {
|
|
c1.push({text: _7});
|
|
}
|
|
c1.push({text: \`] \`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`foreach iterate, dict param 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
context = Object.create(context);
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = context['value'];
|
|
if (!_2) { throw new Error('QWeb error: Invalid loop expression')}
|
|
var _3 = _4 = _2;
|
|
if (!(_2 instanceof Array)) {
|
|
_3 = Object.keys(_2);
|
|
_4 = Object.values(_2);
|
|
}
|
|
var _length3 = _3.length;
|
|
for (let i = 0; i < _length3; i++) {
|
|
context.item_first = i === 0;
|
|
context.item_last = i === _length3 - 1;
|
|
context.item_index = i;
|
|
context.item = _3[i];
|
|
context.item_value = _4[i];
|
|
c1.push({text: \` [\`});
|
|
var _5 = context['item_index'];
|
|
if (_5 || _5 === 0) {
|
|
c1.push({text: _5});
|
|
}
|
|
c1.push({text: \`: \`});
|
|
var _6 = context['item'];
|
|
if (_6 || _6 === 0) {
|
|
c1.push({text: _6});
|
|
}
|
|
c1.push({text: \` \`});
|
|
var _7 = context['item_value'];
|
|
if (_7 || _7 === 0) {
|
|
c1.push({text: _7});
|
|
}
|
|
c1.push({text: \`] \`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`foreach iterate, position 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
context = Object.create(context);
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = Array(5);
|
|
if (!_2) { throw new Error('QWeb error: Invalid loop expression')}
|
|
var _3 = _4 = _2;
|
|
if (!(_2 instanceof Array)) {
|
|
_3 = Object.keys(_2);
|
|
_4 = Object.values(_2);
|
|
}
|
|
var _length3 = _3.length;
|
|
for (let i = 0; i < _length3; i++) {
|
|
context.elem_first = i === 0;
|
|
context.elem_last = i === _length3 - 1;
|
|
context.elem_index = i;
|
|
context.elem = _3[i];
|
|
context.elem_value = _4[i];
|
|
c1.push({text: \` -\`});
|
|
if (context['elem_first']) {
|
|
c1.push({text: \` first\`});
|
|
}
|
|
if (context['elem_last']) {
|
|
c1.push({text: \` last\`});
|
|
}
|
|
c1.push({text: \` (\`});
|
|
var _5 = context['elem_index'];
|
|
if (_5 || _5 === 0) {
|
|
c1.push({text: _5});
|
|
}
|
|
c1.push({text: \`) \`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`foreach warn if no key in some case 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
context = Object.create(context);
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = [1,2];
|
|
if (!_2) { throw new Error('QWeb error: Invalid loop expression')}
|
|
var _3 = _4 = _2;
|
|
if (!(_2 instanceof Array)) {
|
|
_3 = Object.keys(_2);
|
|
_4 = Object.values(_2);
|
|
}
|
|
var _length3 = _3.length;
|
|
for (let i = 0; i < _length3; i++) {
|
|
context.item_first = i === 0;
|
|
context.item_last = i === _length3 - 1;
|
|
context.item_index = i;
|
|
context.item = _3[i];
|
|
context.item_value = _4[i];
|
|
let c5 = [], p5 = {key:5};
|
|
var vn5 = h('span', p5, c5);
|
|
c1.push(vn5);
|
|
var _6 = context['item'];
|
|
if (_6 || _6 === 0) {
|
|
c5.push({text: _6});
|
|
}
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`loading templates can initialize qweb with a string 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
c1.push({text: \`jupiler\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`loading templates can load a few templates from a xml string 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('ul', p1, c1);
|
|
let c2 = [], p2 = {key:2};
|
|
var vn2 = h('li', p2, c2);
|
|
c1.push(vn2);
|
|
c2.push({text: \`ok\`});
|
|
let c3 = [], p3 = {key:3};
|
|
var vn3 = h('li', p3, c3);
|
|
c1.push(vn3);
|
|
c3.push({text: \`foo\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`misc global 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let utils = this.constructor.utils;
|
|
context = Object.create(context);
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = [4,5,6];
|
|
if (!_2) { throw new Error('QWeb error: Invalid loop expression')}
|
|
var _3 = _4 = _2;
|
|
if (!(_2 instanceof Array)) {
|
|
_3 = Object.keys(_2);
|
|
_4 = Object.values(_2);
|
|
}
|
|
var _length3 = _3.length;
|
|
for (let i = 0; i < _length3; i++) {
|
|
context.value_first = i === 0;
|
|
context.value_last = i === _length3 - 1;
|
|
context.value_index = i;
|
|
context.value = _3[i];
|
|
context.value_value = _4[i];
|
|
let c5 = [], p5 = {key:5,on:{}};
|
|
var vn5 = h('span', p5, c5);
|
|
c1.push(vn5);
|
|
var _6 = context['value'];
|
|
if (_6 || _6 === 0) {
|
|
c5.push({text: _6});
|
|
}
|
|
{
|
|
let _11 = 'bbb';
|
|
var _13 = 'agüero';
|
|
let c14 = [], p14 = {key:14,attrs:{\\"falló\\": _13},on:{}};
|
|
var vn14 = h('Año', p14, c14);
|
|
c1.push(vn14);
|
|
{
|
|
let _15 = 'aaa';
|
|
let c16 = [], p16 = {key:16,on:{}};
|
|
var vn16 = h('span', p16, c16);
|
|
c14.push(vn16);
|
|
if (_15 || _15 === 0) {
|
|
c16.push({text: _15});
|
|
} else {
|
|
c16.push({text: \`foo default\`});
|
|
}
|
|
}
|
|
let c17 = [], p17 = {key:17,on:{}};
|
|
var vn17 = h('span', p17, c17);
|
|
c14.push(vn17);
|
|
var _18 = context['foo'];
|
|
if (_18 || _18 === 0) {
|
|
c17.push({text: _18});
|
|
} else {
|
|
c17.push({text: \`foo default\`});
|
|
}
|
|
var _19 = 'bbb';
|
|
let c20 = [], p20 = {key:20,on:{}};
|
|
var vn20 = h('span', p20, c20);
|
|
c14.push(vn20);
|
|
if (_19 || _19 === 0) {
|
|
c20.push({text: _19});
|
|
} else {
|
|
c20.push({text: \`foo default\`});
|
|
}
|
|
}
|
|
}
|
|
let c21 = [], p21 = {key:21,on:{}};
|
|
var vn21 = h('div', p21, c21);
|
|
c1.push(vn21);
|
|
var _22 = context['toto'];
|
|
if (_22 || _22 === 0) {
|
|
var frag23 = utils.getFragment(_22)
|
|
var p24 = {hook: {
|
|
insert: n => n.elm.parentNode.replaceChild(frag23, n.elm),
|
|
}};
|
|
var vn24 = h('div', p24)
|
|
c21.push(vn24);
|
|
} else {
|
|
c21.push({text: \`toto default\`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`special cases for some boolean html attributes/properties input type= checkbox, with t-att-checked 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = 'checkbox';
|
|
var _2 = context['flag'];
|
|
let c3 = [], p3 = {key:3,attrs:{type: _1,checked: _2},props:{checked: _2}};
|
|
var vn3 = h('input', p3, c3);
|
|
return vn3;
|
|
}"
|
|
`;
|
|
|
|
exports[`special cases for some boolean html attributes/properties various boolean html attributes 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = 'checkbox';
|
|
var _3 = 'checked';
|
|
let c4 = [], p4 = {key:4,attrs:{type: _2,checked: _3},props:{checked: _3}};
|
|
var vn4 = h('input', p4, c4);
|
|
c1.push(vn4);
|
|
var _5 = 'checked';
|
|
let c6 = [], p6 = {key:6,attrs:{checked: _5}};
|
|
var vn6 = h('input', p6, c6);
|
|
c1.push(vn6);
|
|
var _7 = 'checked';
|
|
let c8 = [], p8 = {key:8,attrs:{checked: _7}};
|
|
var vn8 = h('div', p8, c8);
|
|
c1.push(vn8);
|
|
var _9 = 'selected';
|
|
let c10 = [], p10 = {key:10,attrs:{selected: _9}};
|
|
var vn10 = h('div', p10, c10);
|
|
c1.push(vn10);
|
|
var _11 = 'selected';
|
|
var _12 = '1';
|
|
let c13 = [], p13 = {key:13,attrs:{selected: _11,other: _12},props:{selected: _11}};
|
|
var vn13 = h('option', p13, c13);
|
|
c1.push(vn13);
|
|
var _14 = 'readonly';
|
|
let c15 = [], p15 = {key:15,attrs:{readonly: _14},props:{readonly: _14}};
|
|
var vn15 = h('input', p15, c15);
|
|
c1.push(vn15);
|
|
var _16 = 'disabled';
|
|
let c17 = [], p17 = {key:17,attrs:{disabled: _16},props:{disabled: _16}};
|
|
var vn17 = h('button', p17, c17);
|
|
c1.push(vn17);
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`static templates div with a span child node 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
let c2 = [], p2 = {key:2};
|
|
var vn2 = h('span', p2, c2);
|
|
c1.push(vn2);
|
|
c2.push({text: \`word\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`static templates div with a text node 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
c1.push({text: \`word\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`static templates empty div 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`static templates simple dynamic value 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var _1 = context['text'];
|
|
if (_1 || _1 === 0) {
|
|
var vn2 = {text: _1};
|
|
}
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`static templates simple string 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var vn1 = {text: \`hello vdom\`};
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`static templates simple string, with some dynamic value 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var vn1 = {text: \`hello \`};
|
|
var _2 = context['text'];
|
|
if (_2 || _2 === 0) {
|
|
vn1.text += _2;
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-call (template calling basic caller 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
c1.push({text: \`ok\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-call (template calling inherit context 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = 1;
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-call (template calling scoped parameters 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
{
|
|
let _2 = 42;
|
|
c1.push({text: \`ok\`});
|
|
}
|
|
var _3 = context['foo'];
|
|
if (_3 || _3 === 0) {
|
|
c1.push({text: _3});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-call (template calling t-call with t-if 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
if (context['flag']) {
|
|
let c2 = [], p2 = {key:2};
|
|
var vn2 = h('span', p2, c2);
|
|
c1.push(vn2);
|
|
c2.push({text: \`ok\`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-call (template calling with unused body 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c2 = [], p2 = {key:2};
|
|
var vn2 = h('div', p2, c2);
|
|
c2.push({text: \`ok\`});
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-call (template calling with unused setbody 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
{
|
|
let _1 = 3;
|
|
let c2 = [], p2 = {key:2};
|
|
var vn2 = h('div', p2, c2);
|
|
c2.push({text: \`ok\`});
|
|
}
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-call (template calling with used body 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c2 = [], p2 = {key:2};
|
|
var vn2 = h('h1', p2, c2);
|
|
c2.push({text: \`ok\`});
|
|
return vn2;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-call (template calling with used set body 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('span', p1, c1);
|
|
{
|
|
let _2 = 'ok';
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-esc escaping on a node 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1,on:{}};
|
|
var vn1 = h('span', p1, c1);
|
|
var _2 = 'ok';
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-esc escaping on a node with a body 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1,on:{}};
|
|
var vn1 = h('span', p1, c1);
|
|
var _2 = 'ok';
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
} else {
|
|
c1.push({text: \`nope\`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-esc escaping on a node with a body, as a default 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1,on:{}};
|
|
var vn1 = h('span', p1, c1);
|
|
var _2 = context['var'];
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
} else {
|
|
c1.push({text: \`nope\`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-esc literal 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('span', p1, c1);
|
|
var _2 = 'ok';
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-esc variable 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('span', p1, c1);
|
|
var _2 = context['var'];
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-if boolean value condition elif 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
if (context['color']=='black') {
|
|
c1.push({text: \`black pearl\`});
|
|
}
|
|
else if (context['color']=='yellow') {
|
|
c1.push({text: \`yellow submarine\`});
|
|
}
|
|
else if (context['color']=='red') {
|
|
c1.push({text: \`red is dead\`});
|
|
}
|
|
else {
|
|
c1.push({text: \`beer\`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-if boolean value condition else 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
let c2 = [], p2 = {key:2};
|
|
var vn2 = h('span', p2, c2);
|
|
c1.push(vn2);
|
|
c2.push({text: \`begin\`});
|
|
if (context['condition']) {
|
|
c1.push({text: \`ok\`});
|
|
}
|
|
else {
|
|
c1.push({text: \`ok-else\`});
|
|
}
|
|
let c3 = [], p3 = {key:3};
|
|
var vn3 = h('span', p3, c3);
|
|
c1.push(vn3);
|
|
c3.push({text: \`end\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-if boolean value condition false else 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
let c2 = [], p2 = {key:2};
|
|
var vn2 = h('span', p2, c2);
|
|
c1.push(vn2);
|
|
c2.push({text: \`begin\`});
|
|
if (context['condition']) {
|
|
c1.push({text: \`fail\`});
|
|
}
|
|
else {
|
|
c1.push({text: \`fail-else\`});
|
|
}
|
|
let c3 = [], p3 = {key:3};
|
|
var vn3 = h('span', p3, c3);
|
|
c1.push(vn3);
|
|
c3.push({text: \`end\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-if boolean value condition missing 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('span', p1, c1);
|
|
if (context['condition']) {
|
|
c1.push({text: \`fail\`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-if boolean value false condition 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
if (context['condition']) {
|
|
c1.push({text: \`ok\`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-if boolean value true condition 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
if (context['condition']) {
|
|
c1.push({text: \`ok\`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-if can use some boolean operators in expressions 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
if (context['cond1']&&context['cond2']) {
|
|
c1.push({text: \`and\`});
|
|
}
|
|
if (context['cond1']&&context['cond3']) {
|
|
c1.push({text: \`nope\`});
|
|
}
|
|
if (context['cond1']||context['cond3']) {
|
|
c1.push({text: \`or\`});
|
|
}
|
|
if (context['cond3']||context['cond4']) {
|
|
c1.push({text: \`nope\`});
|
|
}
|
|
if (context['m']>3) {
|
|
c1.push({text: \`mgt\`});
|
|
}
|
|
if (context['n']>3) {
|
|
c1.push({text: \`ngt\`});
|
|
}
|
|
if (context['m']<3) {
|
|
c1.push({text: \`mlt\`});
|
|
}
|
|
if (context['n']<3) {
|
|
c1.push({text: \`nlt\`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-key can use t-key directive on a node 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
const nodeKey1 = context['beer'].id
|
|
let c1 = [], p1 = {key:nodeKey1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = context['beer'].name;
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-key t-key directive in a list 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
context = Object.create(context);
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('ul', p1, c1);
|
|
var _2 = context['beers'];
|
|
if (!_2) { throw new Error('QWeb error: Invalid loop expression')}
|
|
var _3 = _4 = _2;
|
|
if (!(_2 instanceof Array)) {
|
|
_3 = Object.keys(_2);
|
|
_4 = Object.values(_2);
|
|
}
|
|
var _length3 = _3.length;
|
|
for (let i = 0; i < _length3; i++) {
|
|
context.beer_first = i === 0;
|
|
context.beer_last = i === _length3 - 1;
|
|
context.beer_index = i;
|
|
context.beer = _3[i];
|
|
context.beer_value = _4[i];
|
|
const nodeKey5 = context['beer'].id
|
|
let c5 = [], p5 = {key:nodeKey5};
|
|
var vn5 = h('li', p5, c5);
|
|
c1.push(vn5);
|
|
var _6 = context['beer'].name;
|
|
if (_6 || _6 === 0) {
|
|
c5.push({text: _6});
|
|
}
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-key t-key directive in a list 2`] = `"<ul><li>Chimay Rouge</li></ul>"`;
|
|
|
|
exports[`t-on can bind event handler 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let owner = context;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1,on:{}};
|
|
var vn1 = h('button', p1, c1);
|
|
if (!context['add']) {
|
|
throw new Error('Missing handler \\\\'' + 'add' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
extra.handlers['click' + 1] = extra.handlers['click' + 1] || context['add'].bind(owner);
|
|
p1.on['click'] = extra.handlers['click' + 1];
|
|
c1.push({text: \`Click\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-on can bind handlers with arguments 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let owner = context;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1,on:{}};
|
|
var vn1 = h('button', p1, c1);
|
|
if (!context['add']) {
|
|
throw new Error('Missing handler \\\\'' + 'add' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
p1.on['click'] = context['add'].bind(owner, 5);
|
|
c1.push({text: \`Click\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-on can bind handlers with empty object (with non empty inner string) 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let owner = context;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1,on:{}};
|
|
var vn1 = h('button', p1, c1);
|
|
if (!context['doSomething']) {
|
|
throw new Error('Missing handler \\\\'' + 'doSomething' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
p1.on['click'] = context['doSomething'].bind(owner, {});
|
|
c1.push({text: \`Click\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-on can bind handlers with empty object 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let owner = context;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1,on:{}};
|
|
var vn1 = h('button', p1, c1);
|
|
if (!context['doSomething']) {
|
|
throw new Error('Missing handler \\\\'' + 'doSomething' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
p1.on['click'] = context['doSomething'].bind(owner, {});
|
|
c1.push({text: \`Click\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-on can bind handlers with loop variable as argument 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let owner = context;
|
|
context = Object.create(context);
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('ul', p1, c1);
|
|
var _2 = ['someval'];
|
|
if (!_2) { throw new Error('QWeb error: Invalid loop expression')}
|
|
var _3 = _4 = _2;
|
|
if (!(_2 instanceof Array)) {
|
|
_3 = Object.keys(_2);
|
|
_4 = Object.values(_2);
|
|
}
|
|
var _length3 = _3.length;
|
|
for (let i = 0; i < _length3; i++) {
|
|
context.action_first = i === 0;
|
|
context.action_last = i === _length3 - 1;
|
|
context.action_index = i;
|
|
context.action = _3[i];
|
|
context.action_value = _4[i];
|
|
const nodeKey5 = context['action_index']
|
|
let c5 = [], p5 = {key:nodeKey5};
|
|
var vn5 = h('li', p5, c5);
|
|
c1.push(vn5);
|
|
let c6 = [], p6 = {key:6,on:{}};
|
|
var vn6 = h('a', p6, c6);
|
|
c5.push(vn6);
|
|
if (!context['activate']) {
|
|
throw new Error('Missing handler \\\\'' + 'activate' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
p6.on['click'] = context['activate'].bind(owner, context['action']);
|
|
c6.push({text: \`link\`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-on can bind handlers with object arguments 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let owner = context;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1,on:{}};
|
|
var vn1 = h('button', p1, c1);
|
|
if (!context['add']) {
|
|
throw new Error('Missing handler \\\\'' + 'add' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
p1.on['click'] = context['add'].bind(owner, {val:5});
|
|
c1.push({text: \`Click\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-on can bind two event handlers 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let owner = context;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1,on:{}};
|
|
var vn1 = h('button', p1, c1);
|
|
if (!context['handleClick']) {
|
|
throw new Error('Missing handler \\\\'' + 'handleClick' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
extra.handlers['click' + 1] = extra.handlers['click' + 1] || context['handleClick'].bind(owner);
|
|
p1.on['click'] = extra.handlers['click' + 1];
|
|
if (!context['handleDblClick']) {
|
|
throw new Error('Missing handler \\\\'' + 'handleDblClick' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
extra.handlers['dblclick' + 1] = extra.handlers['dblclick' + 1] || context['handleDblClick'].bind(owner);
|
|
p1.on['dblclick'] = extra.handlers['dblclick' + 1];
|
|
c1.push({text: \`Click\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-on handler is bound to proper owner 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let owner = context;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1,on:{}};
|
|
var vn1 = h('button', p1, c1);
|
|
if (!context['add']) {
|
|
throw new Error('Missing handler \\\\'' + 'add' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
extra.handlers['click' + 1] = extra.handlers['click' + 1] || context['add'].bind(owner);
|
|
p1.on['click'] = extra.handlers['click' + 1];
|
|
c1.push({text: \`Click\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-on t-on with prevent and self modifiers (order matters) 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let owner = context;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
let c2 = [], p2 = {key:2,on:{}};
|
|
var vn2 = h('button', p2, c2);
|
|
c1.push(vn2);
|
|
if (!context['onClick']) {
|
|
throw new Error('Missing handler \\\\'' + 'onClick' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
extra.handlers['click' + 2] = extra.handlers['click' + 2] || function (e) {e.preventDefault();if (e.target !== this.elm) {return}context['onClick'].call(owner, e);};
|
|
p2.on['click'] = extra.handlers['click' + 2];
|
|
let c3 = [], p3 = {key:3};
|
|
var vn3 = h('span', p3, c3);
|
|
c2.push(vn3);
|
|
c3.push({text: \`Button\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-on t-on with prevent and/or stop modifiers 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let owner = context;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
let c2 = [], p2 = {key:2,on:{}};
|
|
var vn2 = h('button', p2, c2);
|
|
c1.push(vn2);
|
|
if (!context['onClickPrevented']) {
|
|
throw new Error('Missing handler \\\\'' + 'onClickPrevented' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
extra.handlers['click' + 2] = extra.handlers['click' + 2] || function (e) {e.preventDefault();context['onClickPrevented'].call(owner, e);};
|
|
p2.on['click'] = extra.handlers['click' + 2];
|
|
c2.push({text: \`Button 1\`});
|
|
let c3 = [], p3 = {key:3,on:{}};
|
|
var vn3 = h('button', p3, c3);
|
|
c1.push(vn3);
|
|
if (!context['onClickStopped']) {
|
|
throw new Error('Missing handler \\\\'' + 'onClickStopped' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
extra.handlers['click' + 3] = extra.handlers['click' + 3] || function (e) {e.stopPropagation();context['onClickStopped'].call(owner, e);};
|
|
p3.on['click'] = extra.handlers['click' + 3];
|
|
c3.push({text: \`Button 2\`});
|
|
let c4 = [], p4 = {key:4,on:{}};
|
|
var vn4 = h('button', p4, c4);
|
|
c1.push(vn4);
|
|
if (!context['onClickPreventedAndStopped']) {
|
|
throw new Error('Missing handler \\\\'' + 'onClickPreventedAndStopped' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
extra.handlers['click' + 4] = extra.handlers['click' + 4] || function (e) {e.preventDefault();e.stopPropagation();context['onClickPreventedAndStopped'].call(owner, e);};
|
|
p4.on['click'] = extra.handlers['click' + 4];
|
|
c4.push({text: \`Button 3\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-on t-on with self and prevent modifiers (order matters) 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let owner = context;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
let c2 = [], p2 = {key:2,on:{}};
|
|
var vn2 = h('button', p2, c2);
|
|
c1.push(vn2);
|
|
if (!context['onClick']) {
|
|
throw new Error('Missing handler \\\\'' + 'onClick' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
extra.handlers['click' + 2] = extra.handlers['click' + 2] || function (e) {if (e.target !== this.elm) {return}e.preventDefault();context['onClick'].call(owner, e);};
|
|
p2.on['click'] = extra.handlers['click' + 2];
|
|
let c3 = [], p3 = {key:3};
|
|
var vn3 = h('span', p3, c3);
|
|
c2.push(vn3);
|
|
c3.push({text: \`Button\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-on t-on with self modifier 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let owner = context;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
let c2 = [], p2 = {key:2,on:{}};
|
|
var vn2 = h('button', p2, c2);
|
|
c1.push(vn2);
|
|
if (!context['onClick']) {
|
|
throw new Error('Missing handler \\\\'' + 'onClick' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
extra.handlers['click' + 2] = extra.handlers['click' + 2] || context['onClick'].bind(owner);
|
|
p2.on['click'] = extra.handlers['click' + 2];
|
|
let c3 = [], p3 = {key:3};
|
|
var vn3 = h('span', p3, c3);
|
|
c2.push(vn3);
|
|
c3.push({text: \`Button\`});
|
|
let c4 = [], p4 = {key:4,on:{}};
|
|
var vn4 = h('button', p4, c4);
|
|
c1.push(vn4);
|
|
if (!context['onClickSelf']) {
|
|
throw new Error('Missing handler \\\\'' + 'onClickSelf' + \`\\\\' when evaluating template 'test'\`)
|
|
}
|
|
extra.handlers['click' + 4] = extra.handlers['click' + 4] || function (e) {if (e.target !== this.elm) {return}context['onClickSelf'].call(owner, e);};
|
|
p4.on['click'] = extra.handlers['click' + 4];
|
|
let c5 = [], p5 = {key:5};
|
|
var vn5 = h('span', p5, c5);
|
|
c4.push(vn5);
|
|
c5.push({text: \`Button\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-raw literal 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let utils = this.constructor.utils;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('span', p1, c1);
|
|
var _2 = 'ok';
|
|
if (_2 || _2 === 0) {
|
|
var frag3 = utils.getFragment(_2)
|
|
var p4 = {hook: {
|
|
insert: n => n.elm.parentNode.replaceChild(frag3, n.elm),
|
|
}};
|
|
var vn4 = h('div', p4)
|
|
c1.push(vn4);
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-raw not escaping 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let utils = this.constructor.utils;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = context['var'];
|
|
if (_2 || _2 === 0) {
|
|
var frag3 = utils.getFragment(_2)
|
|
var p4 = {hook: {
|
|
insert: n => n.elm.parentNode.replaceChild(frag3, n.elm),
|
|
}};
|
|
var vn4 = h('div', p4)
|
|
c1.push(vn4);
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-raw t-raw and another sibling node 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let utils = this.constructor.utils;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('span', p1, c1);
|
|
let c2 = [], p2 = {key:2};
|
|
var vn2 = h('span', p2, c2);
|
|
c1.push(vn2);
|
|
c2.push({text: \`hello\`});
|
|
var _3 = context['var'];
|
|
if (_3 || _3 === 0) {
|
|
var frag4 = utils.getFragment(_3)
|
|
var p5 = {hook: {
|
|
insert: n => n.elm.parentNode.replaceChild(frag4, n.elm),
|
|
}};
|
|
var vn5 = h('div', p5)
|
|
c1.push(vn5);
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-raw variable 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
let utils = this.constructor.utils;
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('span', p1, c1);
|
|
var _2 = context['var'];
|
|
if (_2 || _2 === 0) {
|
|
var frag3 = utils.getFragment(_2)
|
|
var p4 = {hook: {
|
|
insert: n => n.elm.parentNode.replaceChild(frag3, n.elm),
|
|
}};
|
|
var vn4 = h('div', p4)
|
|
c1.push(vn4);
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-ref can get a dynamic ref on a node 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
let c2 = [], p2 = {key:2};
|
|
var vn2 = h('span', p2, c2);
|
|
c1.push(vn2);
|
|
const ref3 = \`myspan\${context['id']}\`;
|
|
p2.hook = {
|
|
create: (_, n) => {
|
|
context.refs[ref3] = n.elm;
|
|
},
|
|
};
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-ref can get a ref on a node 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
let c2 = [], p2 = {key:2};
|
|
var vn2 = h('span', p2, c2);
|
|
c1.push(vn2);
|
|
const ref3 = \`myspan\`;
|
|
p2.hook = {
|
|
create: (_, n) => {
|
|
context.refs[ref3] = n.elm;
|
|
},
|
|
};
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-ref refs in a loop 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
context = Object.create(context);
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = context['items'];
|
|
if (!_2) { throw new Error('QWeb error: Invalid loop expression')}
|
|
var _3 = _4 = _2;
|
|
if (!(_2 instanceof Array)) {
|
|
_3 = Object.keys(_2);
|
|
_4 = Object.values(_2);
|
|
}
|
|
var _length3 = _3.length;
|
|
for (let i = 0; i < _length3; i++) {
|
|
context.item_first = i === 0;
|
|
context.item_last = i === _length3 - 1;
|
|
context.item_index = i;
|
|
context.item = _3[i];
|
|
context.item_value = _4[i];
|
|
const nodeKey5 = context['item']
|
|
let c5 = [], p5 = {key:nodeKey5};
|
|
var vn5 = h('div', p5, c5);
|
|
c1.push(vn5);
|
|
const ref6 = (context['item']);
|
|
p5.hook = {
|
|
create: (_, n) => {
|
|
context.refs[ref6] = n.elm;
|
|
},
|
|
};
|
|
var _7 = context['item'];
|
|
if (_7 || _7 === 0) {
|
|
c5.push({text: _7});
|
|
}
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-set evaluate value expression 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = 1+2;
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-set evaluate value expression, part 2 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = context['somevariable']+2;
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-set set from attribute literal 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = 'ok';
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-set set from attribute lookup 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = context['value'];
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-set set from body literal 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
var vn1 = {text: \`ok\`};
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-set set from body lookup 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = context['value'];
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-set set from empty body 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-set t-set and t-if 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = context['value'];
|
|
if (_2==='ok') {
|
|
c1.push({text: \`grimbergen\`});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-set t-set evaluates an expression only once 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = context['value']+' artois';
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-set t-set should reuse variable if possible 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
context = Object.create(context);
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = 1;
|
|
var _3 = context['list'];
|
|
if (!_3) { throw new Error('QWeb error: Invalid loop expression')}
|
|
var _4 = _5 = _3;
|
|
if (!(_3 instanceof Array)) {
|
|
_4 = Object.keys(_3);
|
|
_5 = Object.values(_3);
|
|
}
|
|
var _length4 = _4.length;
|
|
for (let i = 0; i < _length4; i++) {
|
|
context.elem_first = i === 0;
|
|
context.elem_last = i === _length4 - 1;
|
|
context.elem_index = i;
|
|
context.elem = _4[i];
|
|
context.elem_value = _5[i];
|
|
const nodeKey6 = context['elem_index']
|
|
let c6 = [], p6 = {key:nodeKey6};
|
|
var vn6 = h('div', p6, c6);
|
|
c1.push(vn6);
|
|
let c7 = [], p7 = {key:7};
|
|
var vn7 = h('span', p7, c7);
|
|
c6.push(vn7);
|
|
c7.push({text: \`v\`});
|
|
if (_2 || _2 === 0) {
|
|
c7.push({text: _2});
|
|
}
|
|
_2 = context['elem']
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`t-set value priority 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
var _2 = 1;
|
|
if (_2 || _2 === 0) {
|
|
c1.push({text: _2});
|
|
}
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`whitespace handling consecutives whitespaces are condensed into a single space 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
c1.push({text: \` abc \`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`whitespace handling nothing is done in pre tags 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('pre', p1, c1);
|
|
c1.push({text: \` \`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`whitespace handling nothing is done in pre tags 2`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('pre', p1, c1);
|
|
c1.push({text: \`
|
|
some text
|
|
\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`whitespace handling nothing is done in pre tags 3`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('pre', p1, c1);
|
|
c1.push({text: \`
|
|
|
|
\`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`whitespace handling white space only text nodes are condensed into a single space 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
c1.push({text: \` \`});
|
|
return vn1;
|
|
}"
|
|
`;
|
|
|
|
exports[`whitespace handling whitespace only text nodes with newlines are removed 1`] = `
|
|
"function anonymous(context,extra
|
|
) {
|
|
var h = this.h;
|
|
let c1 = [], p1 = {key:1};
|
|
var vn1 = h('div', p1, c1);
|
|
let c2 = [], p2 = {key:2};
|
|
var vn2 = h('span', p2, c2);
|
|
c1.push(vn2);
|
|
c2.push({text: \`abc\`});
|
|
return vn1;
|
|
}"
|
|
`;
|