[REF] move compute_domain outside of openep.base.form.Widget
bzr revid: xmo@openerp.com-20110411173643-84eqb3vc0drd9ge7
This commit is contained in:
parent
25bbc891cf
commit
215ee4fa5f
|
@ -258,6 +258,65 @@ openerp.base.FormView = openerp.base.Controller.extend( /** @lends openerp.base
|
|||
/** @namespace */
|
||||
openerp.base.form = {};
|
||||
|
||||
openerp.base.form.compute_domain = function(expr, fields) {
|
||||
var stack = [];
|
||||
for (var i = 0; i < expr.length; i++) {
|
||||
var ex = expr[i];
|
||||
if (ex.length == 1) {
|
||||
stack.push(ex[0]);
|
||||
continue;
|
||||
}
|
||||
|
||||
var field = fields[ex[0]].value;
|
||||
var op = ex[1];
|
||||
var val = ex[2];
|
||||
|
||||
switch (op.toLowerCase()) {
|
||||
case '=':
|
||||
case '==':
|
||||
stack.push(field == val);
|
||||
break;
|
||||
case '!=':
|
||||
case '<>':
|
||||
stack.push(field != val);
|
||||
break;
|
||||
case '<':
|
||||
stack.push(field < val);
|
||||
break;
|
||||
case '>':
|
||||
stack.push(field > val);
|
||||
break;
|
||||
case '<=':
|
||||
stack.push(field <= val);
|
||||
break;
|
||||
case '>=':
|
||||
stack.push(field >= val);
|
||||
break;
|
||||
case 'in':
|
||||
stack.push(_.indexOf(val, field) > -1);
|
||||
break;
|
||||
case 'not in':
|
||||
stack.push(_.indexOf(val, field) == -1);
|
||||
break;
|
||||
default:
|
||||
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({
|
||||
init: function(view, node) {
|
||||
this.view = view;
|
||||
|
@ -282,69 +341,11 @@ openerp.base.form.Widget = openerp.base.Controller.extend({
|
|||
this.$element = $('#' + this.element_id);
|
||||
},
|
||||
process_attrs: function() {
|
||||
var compute_domain = openerp.base.form.compute_domain;
|
||||
for (var a in this.attrs) {
|
||||
this[a] = this.compute_domain(this.attrs[a]);
|
||||
this[a] = compute_domain(this.attrs[a], this.view.fields);
|
||||
}
|
||||
},
|
||||
compute_domain: function(expr) {
|
||||
var stack = [];
|
||||
for (var i = 0; i < expr.length; i++) {
|
||||
var ex = expr[i];
|
||||
if (ex.length == 1) {
|
||||
stack.push(ex[0]);
|
||||
continue;
|
||||
}
|
||||
|
||||
var field = this.view.fields[ex[0]].value;
|
||||
var op = ex[1];
|
||||
var val = ex[2];
|
||||
|
||||
switch (op.toLowerCase()) {
|
||||
case '=':
|
||||
case '==':
|
||||
stack.push(field == val);
|
||||
break;
|
||||
case '!=':
|
||||
case '<>':
|
||||
stack.push(field != val);
|
||||
break;
|
||||
case '<':
|
||||
stack.push(field < val);
|
||||
break;
|
||||
case '>':
|
||||
stack.push(field > val);
|
||||
break;
|
||||
case '<=':
|
||||
stack.push(field <= val);
|
||||
break;
|
||||
case '>=':
|
||||
stack.push(field >= val);
|
||||
break;
|
||||
case 'in':
|
||||
stack.push(_.indexOf(val, field) > -1);
|
||||
break;
|
||||
case 'not in':
|
||||
stack.push(_.indexOf(val, field) == -1);
|
||||
break;
|
||||
default:
|
||||
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;
|
||||
},
|
||||
update_dom: function() {
|
||||
this.$element.toggle(!this.invisible);
|
||||
},
|
||||
|
|
|
@ -1,32 +1,28 @@
|
|||
$(document).ready(function () {
|
||||
var widget;
|
||||
var openerp;
|
||||
module("form.widget", {
|
||||
setup: function () {
|
||||
var openerp = window.openerp.init(true);
|
||||
openerp = window.openerp.init(true);
|
||||
window.openerp.base.chrome(openerp);
|
||||
// views loader stuff
|
||||
window.openerp.base.data(openerp);
|
||||
window.openerp.base.views(openerp);
|
||||
window.openerp.base.form(openerp);
|
||||
widget = new openerp.base.form.Widget({
|
||||
'widgets': {},
|
||||
'fields': {}
|
||||
}, {
|
||||
'attrs': {}
|
||||
});
|
||||
}
|
||||
});
|
||||
test("compute_domain", function () {
|
||||
widget.view.fields = {
|
||||
var fields = {
|
||||
'a': {value: 3},
|
||||
'group_method': {value: 'line'},
|
||||
'select1': {value: 'day'},
|
||||
'rrule_type': {value: 'monthly'}
|
||||
};
|
||||
ok(widget.compute_domain([['a', '=', 3]]));
|
||||
ok(widget.compute_domain([['group_method','!=','count']]));
|
||||
ok(widget.compute_domain([['select1','=','day'],
|
||||
['rrule_type','=','monthly']]));
|
||||
ok(openerp.base.form.compute_domain(
|
||||
[['a', '=', 3]], fields));
|
||||
ok(openerp.base.form.compute_domain(
|
||||
[['group_method','!=','count']], fields));
|
||||
ok(openerp.base.form.compute_domain(
|
||||
[['select1','=','day'], ['rrule_type','=','monthly']], fields));
|
||||
});
|
||||
test("compute_domain or", function () {
|
||||
var base = {
|
||||
|
@ -39,16 +35,12 @@ $(document).ready(function () {
|
|||
'|', ['user_id','=',3],
|
||||
['member_ids', 'in', [3]]];
|
||||
|
||||
widget.view.fields = _.extend(
|
||||
{}, base, {'section_id': {value: 42}});
|
||||
ok(widget.compute_domain(domain));
|
||||
ok(openerp.base.form.compute_domain(domain, _.extend(
|
||||
{}, base, {'section_id': {value: 42}})));
|
||||
ok(openerp.base.form.compute_domain(domain, _.extend(
|
||||
{}, base, {'user_id': {value: 3}})));
|
||||
|
||||
widget.view.fields = _.extend(
|
||||
{}, base, {'user_id': {value: 3}});
|
||||
ok(widget.compute_domain(domain));
|
||||
|
||||
widget.view.fields = _.extend(
|
||||
{}, base, {'member_ids': {value: 3}});
|
||||
ok(widget.compute_domain(domain));
|
||||
ok(openerp.base.form.compute_domain(domain, _.extend(
|
||||
{}, base, {'member_ids': {value: 3}})));
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue