[IMP] compute domains in a single pass, add 'not' operator
bzr revid: xmo@openerp.com-20110411175025-trllxu05xt4ict84
This commit is contained in:
parent
215ee4fa5f
commit
ae0a6c6cf1
|
@ -260,11 +260,23 @@ openerp.base.form = {};
|
|||
|
||||
openerp.base.form.compute_domain = function(expr, fields) {
|
||||
var stack = [];
|
||||
for (var i = 0; i < expr.length; i++) {
|
||||
for (var i = expr.length - 1; i >= 0; i--) {
|
||||
var ex = expr[i];
|
||||
if (ex.length == 1) {
|
||||
stack.push(ex[0]);
|
||||
continue;
|
||||
var top = stack.pop();
|
||||
switch (ex[0]) {
|
||||
case '|':
|
||||
stack.push(stack.pop() || top);
|
||||
continue;
|
||||
case '&':
|
||||
stack.push(stack.pop() && top);
|
||||
continue;
|
||||
case '!':
|
||||
stack.push(!top);
|
||||
continue;
|
||||
default:
|
||||
throw new Error('Unknown domain operator ' + ex[0]);
|
||||
}
|
||||
}
|
||||
|
||||
var field = fields[ex[0]].value;
|
||||
|
@ -302,19 +314,6 @@ openerp.base.form.compute_domain = function(expr, fields) {
|
|||
this.log("Unsupported operator in attrs :", op);
|
||||
}
|
||||
}
|
||||
|
||||
for (var j = stack.length-1; j >- 1; j--) {
|
||||
switch (stack[j]) {
|
||||
case '|':
|
||||
var result = stack[j + 1] || stack[j + 2];
|
||||
stack.splice(j, 3, result);
|
||||
break;
|
||||
case '&':
|
||||
var result = stack[j + 1] && stack[j + 2];
|
||||
stack.splice(j, 3, result);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return _.indexOf(stack, false) == -1;
|
||||
},
|
||||
openerp.base.form.Widget = openerp.base.Controller.extend({
|
||||
|
|
|
@ -43,4 +43,14 @@ $(document).ready(function () {
|
|||
ok(openerp.base.form.compute_domain(domain, _.extend(
|
||||
{}, base, {'member_ids': {value: 3}})));
|
||||
});
|
||||
test("compute_domain not", function () {
|
||||
var fields = {
|
||||
'a': {value: 5},
|
||||
'group_method': {value: 'line'}
|
||||
};
|
||||
ok(openerp.base.form.compute_domain(
|
||||
['!', ['a', '=', 3]], fields));
|
||||
ok(openerp.base.form.compute_domain(
|
||||
['!', ['group_method','=','count']], fields));
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue