diff options
| author | Xavier Morel <xmo@odoo.com> | 2017-10-10 15:38:19 +0200 |
|---|---|---|
| committer | Xavier Morel <xmo@odoo.com> | 2017-10-10 15:39:39 +0200 |
| commit | 7f6d32d5e0005fd694d1c59538f685f0867f6dfa (patch) | |
| tree | f80ead321014e415180f5b30d05472e9664abf90 /addons/web/static/lib/qweb/qweb2.js | |
| parent | f98fe5ac7597d54c96cfcf53489d9304ef47d33c (diff) | |
Revert "[FIX] qwebjs: add tests to test suite"
Diffstat (limited to 'addons/web/static/lib/qweb/qweb2.js')
| -rw-r--r-- | addons/web/static/lib/qweb/qweb2.js | 62 |
1 files changed, 25 insertions, 37 deletions
diff --git a/addons/web/static/lib/qweb/qweb2.js b/addons/web/static/lib/qweb/qweb2.js index 8058cb7745f..c4bb7128e9b 100644 --- a/addons/web/static/lib/qweb/qweb2.js +++ b/addons/web/static/lib/qweb/qweb2.js @@ -28,10 +28,8 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. var QWeb2 = { expressions_cache: { }, RESERVED_WORDS: 'true,false,NaN,null,undefined,debugger,console,window,in,instanceof,new,function,return,this,typeof,eval,void,Math,RegExp,Array,Object,Date'.split(','), - ACTIONS_PRECEDENCE: 'foreach,if,elif,else,call,set,js,debug,log'.split(','), + ACTIONS_PRECEDENCE: 'foreach,if,elif,else,call,set,esc,raw,js,debug,log'.split(','), WORD_REPLACEMENT: { - // FUCKING CHM FOR FUCK'S SAKE - 'not': '!', 'and': '&&', 'or': '||', 'gt': '>', @@ -78,9 +76,9 @@ var QWeb2 = { return s; }, gen_attribute: function(o) { - if (o) { + if (o !== null && o !== undefined) { if (o.constructor === Array) { - if (o[1]) { + if (o[1] !== null && o[1] !== undefined) { return this.format_attribute(o[0], o[1]); } } else if (typeof o === 'object') { @@ -720,52 +718,36 @@ QWeb2.Element = (function() { }, compile_element : function() { for (var i = 0, ilen = this.engine.actions_precedence.length; i < ilen; i++) { - var compiled_action = this.engine.actions_precedence[i]; - if (compiled_action in this.actions) { - var value = this.actions[compiled_action]; - var key = 'compile_action_' + compiled_action; + var a = this.engine.actions_precedence[i]; + if (a in this.actions) { + var value = this.actions[a]; + var key = 'compile_action_' + a; if (this[key]) { this[key](value); } else if (this.engine[key]) { this.engine[key].call(this, value); } else { - this.engine.tools.exception("No handler method for action '" + compiled_action + "'"); + this.engine.tools.exception("No handler method for action '" + a + "'"); } } } - function print_contents(self) { - var expr, esc, raw; - if (esc = self.actions['esc']) { - expr = "context.engine.tools.html_escape(" + self.format_str(esc) + ");"; - } else if(raw = self.actions['raw']) { - expr = self.format_str(raw); - } - // print non-empty result of t-esc or t-raw, otherwise - // print/process body - if (expr) { - self.top('var expr_result = ' + expr + ';'); - self.top('if (expr_result) {'); - self.top(' r.push(expr_result);'); - self.top('} else {'); - self.bottom('}'); - } - } if (this.tag.toLowerCase() !== this.engine.prefix) { var tag = "<" + this.tag; - for (var att in this.attributes) { - tag += this.engine.tools.gen_attribute([att, this.attributes[att]]); + for (var a in this.attributes) { + tag += this.engine.tools.gen_attribute([a, this.attributes[a]]); } this.top_string(tag); if (this.actions.att) { - + this.top("r.push(context.engine.tools.gen_attribute(" + (this.format_expression(this.actions.att)) + "));"); } for (var a in this.actions) { - var m, v = this.actions[a]; - if (a === 'att') { - this.top("r.push(context.engine.tools.gen_attribute(" + (this.format_expression(v)) + "));"); - } else if (m = a.match(/att-(.+)/)) { + var v = this.actions[a]; + var m = a.match(/att-(.+)/); + if (m) { this.top("r.push(context.engine.tools.gen_attribute(['" + m[1] + "', (" + (this.format_expression(v)) + ")]));"); - } else if (m = a.match(/attf-(.+)/)) { + } + var m = a.match(/attf-(.+)/); + if (m) { this.top("r.push(context.engine.tools.gen_attribute(['" + m[1] + "', (" + (this.string_interpolation(v)) + ")]));"); } } @@ -773,13 +755,11 @@ QWeb2.Element = (function() { // We do not enforce empty content on void elements // because QWeb rendering is not necessarily html. this.top_string("/>"); - return; // ensure we skip processing content } else { this.top_string(">"); this.bottom_string("</" + this.tag + ">"); } } - print_contents(this); }, compile_action_if : function(value) { this.top("if (" + (this.format_expression(value)) + ") {"); @@ -837,6 +817,14 @@ QWeb2.Element = (function() { } } }, + compile_action_esc : function(value) { + this.top("r.push(context.engine.tools.html_escape(" + + this.format_expression(value) + + "));"); + }, + compile_action_raw : function(value) { + this.top("r.push(" + (this.format_str(value)) + ");"); + }, compile_action_js : function(value) { this.top("(function(" + value + ") {"); this.bottom("})(dict);"); |
