You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.4 KiB
75 lines
2.4 KiB
openerp.web_tree_dynamic_colored_field = function(instance){
|
|
var pair_colors = function(pair_color){
|
|
if (pair_color != ""){
|
|
var pair_list = pair_color.split(':'),
|
|
color = pair_list[0],
|
|
expression = pair_list[1];
|
|
return [color, py.parse(py.tokenize(expression)), expression]
|
|
}
|
|
};
|
|
|
|
var get_eval_context = function(record){
|
|
return _.extend(
|
|
{},
|
|
record.attributes,
|
|
instance.web.pyeval.context()
|
|
);
|
|
};
|
|
|
|
var colorize_helper = function(obj, record, column, field_attribute, css_attribute){
|
|
var result = '';
|
|
if (column[field_attribute]){
|
|
var colors = _(column[field_attribute].split(';'))
|
|
.chain()
|
|
.map(pair_colors)
|
|
.value();
|
|
var colors = colors.filter(function CheckUndefined(value, index, ar) {
|
|
return value != undefined;
|
|
})
|
|
var ctx = get_eval_context(record);
|
|
for(i=0, len=colors.length; i<len; ++i) {
|
|
pair = colors[i];
|
|
var color = pair[0];
|
|
var expression = pair[1];
|
|
if (py.evaluate(expression, ctx).toJSON()) {
|
|
result = css_attribute + ': ' + color + ';';
|
|
}
|
|
}
|
|
}
|
|
return result
|
|
};
|
|
|
|
var colorize = function(record, column){
|
|
var res = '';
|
|
res += colorize_helper(this, record, column, 'bg_color', 'background-color');
|
|
res += colorize_helper(this, record, column, 'fg_color', 'color');
|
|
return res;
|
|
};
|
|
|
|
instance.web.ListView.List.include({
|
|
init: function(group, opts){
|
|
this._super(group, opts);
|
|
this.columns.fct_colorize = colorize;
|
|
},
|
|
});
|
|
|
|
instance.web.ListView.include({
|
|
style_for: function (record)
|
|
{
|
|
var result = this._super.apply(this, arguments);
|
|
if(this.fields_view.arch.attrs.color_field)
|
|
{
|
|
var color = py.evaluate(
|
|
py.parse(py.tokenize(
|
|
this.fields_view.arch.attrs.color_field
|
|
)),
|
|
get_eval_context(record)).toJSON();
|
|
if(color)
|
|
{
|
|
result += 'color: ' + color;
|
|
}
|
|
}
|
|
return result;
|
|
},
|
|
});
|
|
}
|