Damien Crier
9 years ago
6 changed files with 245 additions and 0 deletions
-
80web_widget_color_tree_field/README.rst
-
20web_widget_color_tree_field/__init__.py
-
36web_widget_color_tree_field/__openerp__.py
-
86web_widget_color_tree_field/static/js/web_widget_color_tree_field.js
-
11web_widget_color_tree_field/static/xml/web_widget_color_tree_field.xml
-
12web_widget_color_tree_field/views/web_widget_color_tree_field.xml
@ -0,0 +1,80 @@ |
|||||
|
Colorize field in tree views |
||||
|
============================ |
||||
|
|
||||
|
This module aims to add support for dynamically coloring fields in tree view |
||||
|
according to data in the record. |
||||
|
|
||||
|
It provides new attributes with the same syntax as 'colors' attribute in tree tag. |
||||
|
|
||||
|
Features |
||||
|
======== |
||||
|
|
||||
|
* Add attribute 'bg_color' to color background of a cell in tree view |
||||
|
|
||||
|
* Add attribute 'fg_color' to change text color of a cell in tree view |
||||
|
|
||||
|
|
||||
|
Usage |
||||
|
===== |
||||
|
|
||||
|
* In the tree view declaration, put bg_color="red:customer==True;" attribute in the field tag:: |
||||
|
|
||||
|
... |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree string="View name"> |
||||
|
... |
||||
|
<field name="name" bg_color="red:customer==True;"/> |
||||
|
... |
||||
|
</tree> |
||||
|
</field> |
||||
|
... |
||||
|
|
||||
|
With this example, column which renders 'name' field will have its background colored in red. |
||||
|
|
||||
|
* In the tree view declaration, put fg_color="white:customer==True;" attribute in the field tag:: |
||||
|
|
||||
|
... |
||||
|
<field name="arch" type="xml"> |
||||
|
<tree string="View name"> |
||||
|
... |
||||
|
<field name="name" fg_color="white:customer==True;"/> |
||||
|
... |
||||
|
</tree> |
||||
|
</field> |
||||
|
... |
||||
|
|
||||
|
With this example, column which renders 'name' field will have its text colored in white. |
||||
|
|
||||
|
|
||||
|
|
||||
|
Bug Tracker |
||||
|
=========== |
||||
|
|
||||
|
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/issues>`_. |
||||
|
In case of trouble, please check there if your issue has already been reported. |
||||
|
If you spotted it first, help us smashing it by providing a detailed and welcomed feedback |
||||
|
`here <https://github.com/OCA/web/issues/new?body=module:%20web_widget_color_tree_field%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. |
||||
|
|
||||
|
|
||||
|
Credits |
||||
|
======= |
||||
|
|
||||
|
Contributors |
||||
|
------------ |
||||
|
|
||||
|
* Damien Crier <damien.crier@camptocamp.com> |
||||
|
|
||||
|
Maintainer |
||||
|
---------- |
||||
|
|
||||
|
.. image:: http://odoo-community.org/logo.png |
||||
|
:alt: Odoo Community Association |
||||
|
:target: http://odoo-community.org |
||||
|
|
||||
|
This module is maintained by the OCA. |
||||
|
|
||||
|
OCA, or the Odoo Community Association, is a nonprofit organization whose |
||||
|
mission is to support the collaborative development of Odoo features and |
||||
|
promote its widespread use. |
||||
|
|
||||
|
To contribute to this module, please visit http://odoo-community.org. |
@ -0,0 +1,20 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Author: Damien Crier |
||||
|
# Copyright 2015 Camptocamp SA |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Affero General Public License as |
||||
|
# published by the Free Software Foundation, either version 3 of the |
||||
|
# License, or (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU Affero General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Affero General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
@ -0,0 +1,36 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
############################################################################## |
||||
|
# |
||||
|
# Author: Damien Crier |
||||
|
# Copyright 2015 Camptocamp SA |
||||
|
# |
||||
|
# This program is free software: you can redistribute it and/or modify |
||||
|
# it under the terms of the GNU Affero General Public License as |
||||
|
# published by the Free Software Foundation, either version 3 of the |
||||
|
# License, or (at your option) any later version. |
||||
|
# |
||||
|
# This program is distributed in the hope that it will be useful, |
||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
# GNU Affero General Public License for more details. |
||||
|
# |
||||
|
# You should have received a copy of the GNU Affero General Public License |
||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
||||
|
# |
||||
|
############################################################################## |
||||
|
{ |
||||
|
'name': 'web_widget_color_tree_field', |
||||
|
'category': 'Hidden', |
||||
|
'version': '1.0', |
||||
|
'depends': ['web'], |
||||
|
'author': "Camptocamp,Odoo Community Association (OCA)", |
||||
|
'license': 'AGPL-3', |
||||
|
'website': 'http://www.camptocamp.com', |
||||
|
'data': [ |
||||
|
'views/web_widget_color_tree_field.xml', |
||||
|
], |
||||
|
'qweb': [ |
||||
|
'static/xml/*.xml', |
||||
|
], |
||||
|
'auto_install': False |
||||
|
} |
@ -0,0 +1,86 @@ |
|||||
|
openerp.web_widget_color_tree_field = function(instance){ |
||||
|
var _t = instance.web._t, |
||||
|
_lt = instance.web._lt; |
||||
|
var QWeb = instance.web.qweb; |
||||
|
|
||||
|
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 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 = _.extend( |
||||
|
{}, |
||||
|
record.attributes, |
||||
|
{ |
||||
|
uid: obj.session.uid, |
||||
|
current_date: new Date().toString('yyyy-MM-dd') |
||||
|
} |
||||
|
); |
||||
|
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; |
||||
|
}, |
||||
|
fct_colorize: colorize, |
||||
|
render: function() { |
||||
|
this.$current.empty().append( |
||||
|
QWeb.render('ListView.rows', _.extend({ |
||||
|
render_cell: function () { |
||||
|
return self.render_cell.apply(self, arguments); }, |
||||
|
fct_colorize: function(){ |
||||
|
return self.fct_colorize.apply(self, arguments); |
||||
|
} |
||||
|
}, this))); |
||||
|
this.pad_table_to(4); |
||||
|
}, |
||||
|
render_record: function(record) { |
||||
|
var self = this; |
||||
|
var index = this.records.indexOf(record); |
||||
|
return QWeb.render('ListView.row', { |
||||
|
columns: this.columns, |
||||
|
options: this.options, |
||||
|
record: record, |
||||
|
row_parity: (index % 2 === 0) ? 'even' : 'odd', |
||||
|
view: this.view, |
||||
|
render_cell: function () { |
||||
|
return self.render_cell.apply(self, arguments); }, |
||||
|
fct_colorize: function(){ |
||||
|
return self.fct_colorize.apply(self, arguments); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
}); |
||||
|
} |
@ -0,0 +1,11 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
|
||||
|
<templates> |
||||
|
|
||||
|
<tr t-extend="ListView.row"> |
||||
|
<t t-jquery="td[t-att-data-field='column.id']" t-operation="attributes"> |
||||
|
<attribute name="t-att-style">fct_colorize(record, column)</attribute> |
||||
|
</t> |
||||
|
</tr> |
||||
|
|
||||
|
</templates> |
@ -0,0 +1,12 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<!-- vim:fdn=3: |
||||
|
--> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
<template id="assets_backend" name="web_widget_color_tree_field assets" inherit_id="web.assets_backend"> |
||||
|
<xpath expr="." position="inside"> |
||||
|
<script type="text/javascript" src="/web_widget_color_tree_field/static/js/web_widget_color_tree_field.js"></script> |
||||
|
</xpath> |
||||
|
</template> |
||||
|
</data> |
||||
|
</openerp> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue