diff options
| author | Thibault Delavallée <tde@openerp.com> | 2012-04-05 14:44:50 +0200 |
|---|---|---|
| committer | Thibault Delavallée <tde@openerp.com> | 2012-04-05 14:44:50 +0200 |
| commit | a3120a0509cd3ed54bc542bf9a2a14b77fec2e1c (patch) | |
| tree | 500861021b732ee9c008e658bc927b41c4f62680 /addons/web/static/src | |
| parent | 4229755f81418a3ba34111bc1daf7eb595cdaa15 (diff) | |
| parent | cbc38a346d90fb144b1399c81f20d2c1191b516c (diff) | |
[MERGE] Merged with main web
bzr revid: tde@openerp.com-20120404134238-lrdsmnfkf7sfj3zb
bzr revid: tde@openerp.com-20120405124450-h0nnkvmw7xhir1ih
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/js/core.js | 47 | ||||
| -rw-r--r-- | addons/web/static/src/js/search.js | 8 |
2 files changed, 32 insertions, 23 deletions
diff --git a/addons/web/static/src/js/core.js b/addons/web/static/src/js/core.js index fef97527a68..ffdabb75c90 100644 --- a/addons/web/static/src/js/core.js +++ b/addons/web/static/src/js/core.js @@ -13,7 +13,7 @@ openerp.web.core = function(openerp) { // a function to override the "extend()" method of JR's inheritance, allowing // the usage of "include()" -oe_override_class = function(claz){ +var oe_override_class = function(claz){ var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/; @@ -580,7 +580,7 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. openerp.webclient.notification.warn('Context fail, report to xmo', _.str.sprintf(fail_template, { error: e.message, - source: source.contexts + source: JSON.stringify(source.contexts) }), true); } @@ -598,7 +598,7 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. openerp.webclient.notification.warn('Domain fail, report to xmo', _.str.sprintf(fail_template, { error: e.message, - source: source.domains + source: JSON.stringify(source.domains) }), true); } @@ -616,40 +616,48 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. openerp.webclient.notification.warn('GroupBy fail, report to xmo', _.str.sprintf(fail_template, { error: e.message, - source: source.group_by_seq + source: JSON.stringify(source.group_by_seq) }), true); } }, - test_eval_contexts: function (contexts) { - var result_context = _.extend({}, this.user_context), - self = this; - _(contexts).each(function (ctx) { + test_eval_contexts: function (contexts, evaluation_context) { + evaluation_context = evaluation_context || {}; + var self = this; + return _(contexts).reduce(function (result_context, ctx) { + // __eval_context evaluations can lead to some of `contexts`'s + // values being null, skip them as well as empty contexts + if (_.isEmpty(ctx)) { return result_context; } + var evaluated = ctx; switch(ctx.__ref) { case 'context': - _.extend(result_context, py.eval(ctx.__debug)); + evaluated = py.eval(ctx.__debug, evaluation_context); break; case 'compound_context': - _.extend( - result_context, self.test_eval_contexts(ctx.__contexts)); + var eval_context = self.test_eval_contexts([ctx.__eval_context]); + evaluated = self.test_eval_contexts( + ctx.__contexts, _.extend({}, evaluation_context, eval_context)); break; - default: - _.extend(result_context, ctx); } - }); - return result_context; + // add newly evaluated context to evaluation context for following + // siblings + _.extend(evaluation_context, evaluated); + return _.extend(result_context, evaluated); + }, _.extend({}, this.user_context)); }, - test_eval_domains: function (domains, eval_context) { + test_eval_domains: function (domains, evaluation_context) { var result_domain = [], self = this; _(domains).each(function (dom) { switch(dom.__ref) { case 'domain': result_domain.push.apply( - result_domain, py.eval(dom.__debug, eval_context)); + result_domain, py.eval(dom.__debug, evaluation_context)); break; case 'compound_domain': + var eval_context = self.test_eval_contexts([dom.__eval_context]); result_domain.push.apply( result_domain, self.test_eval_domains( - dom.__domains, eval_context)); + dom.__domains, _.extend( + {}, evaluation_context, eval_context))); break; default: result_domain.push.apply( @@ -667,7 +675,8 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp. group = py.eval(ctx.__debug).group_by; break; case 'compound_context': - group = self.test_eval_contexts(ctx.__contexts).group_by; + group = self.test_eval_contexts( + ctx.__contexts, ctx.__eval_context).group_by; break; default: group = ctx.group_by diff --git a/addons/web/static/src/js/search.js b/addons/web/static/src/js/search.js index 8e89595585b..0136d41ada0 100644 --- a/addons/web/static/src/js/search.js +++ b/addons/web/static/src/js/search.js @@ -787,9 +787,8 @@ openerp.web.search.Field = openerp.web.search.Input.extend( /** @lends openerp.w if (!(has_value && context)) { return; } - return _.extend( - {}, context, - {own_values: {self: val}}); + return new openerp.web.CompoundContext(context) + .set_eval_context({self: val}); }, /** * Function creating the returned domain for the field, override this @@ -818,7 +817,8 @@ openerp.web.search.Field = openerp.web.search.Input.extend( /** @lends openerp.w this.attrs.operator || this.default_operator, val); } - return _.extend({}, domain, {own_values: {self: val}}); + return new openerp.web.CompoundDomain(domain) + .set_eval_context({self: val}); } }); /** |
