diff --git a/web_tree_dynamic_colored_field/README.rst b/web_tree_dynamic_colored_field/README.rst index 90174e3d3..b1a0f3544 100644 --- a/web_tree_dynamic_colored_field/README.rst +++ b/web_tree_dynamic_colored_field/README.rst @@ -4,14 +4,20 @@ 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. +It provides attributes on fields with the same syntax as the 'colors' attribute +in tree tags. + +Further, it provides a ``color_field`` attribute on tree tags to use a field's +value as color. Features ======== -* Add attribute 'bg_color' to color background of a cell in tree view +* Add attribute ``bg_color`` on fields to color background of a cell in tree view -* Add attribute 'fg_color' to change text color of a cell in tree view +* Add attribute ``fg_color`` on fields to change text color of a cell in tree view + +* Add attribute ``color_field`` on the tree element to use as color Usage @@ -45,7 +51,23 @@ Usage With this example, column which renders 'name' field will have its text colored in white. +* In the tree view declaration, use color_field="color" attribute in the tree tag:: + ... + <field name="arch" type="xml"> + <tree string="View name" color_field="color"> + ... + <field name="color" invisible="1" /> + ... + </tree> + </field> + ... + + With this example, the content of the field named `color` will be used to + populate the `color` CSS value. Use a function field to return whichever + color you want depending on the other record values. Note this this + overrides the `colors` attribute, and that you need the tree to load your + field in the first place by adding it as invisible field. Bug Tracker =========== @@ -63,6 +85,7 @@ Contributors ------------ * Damien Crier <damien.crier@camptocamp.com> +* Holger Brunn <hbrunn@therp.nl> Maintainer ---------- diff --git a/web_tree_dynamic_colored_field/__openerp__.py b/web_tree_dynamic_colored_field/__openerp__.py index 45c2be526..891f1c229 100644 --- a/web_tree_dynamic_colored_field/__openerp__.py +++ b/web_tree_dynamic_colored_field/__openerp__.py @@ -19,9 +19,10 @@ # ############################################################################## { - 'name': 'web tree dynamic colored field', + 'name': 'Colorize field in tree views', + 'summary': 'Allows you to dynamically color fields on tree views', 'category': 'Hidden', - 'version': '8.0.1.0.0', + 'version': '8.0.2.0.0', 'depends': ['web'], 'author': "Camptocamp,Odoo Community Association (OCA)", 'license': 'AGPL-3', @@ -30,8 +31,6 @@ 'views/web_tree_dynamic_colored_field.xml', ], 'qweb': [ - 'static/xml/*.xml', + 'static/src/xml/*.xml', ], - 'auto_install': False, - 'installable': False, } diff --git a/web_tree_dynamic_colored_field/static/js/web_tree_dynamic_colored_field.js b/web_tree_dynamic_colored_field/static/src/js/web_tree_dynamic_colored_field.js similarity index 51% rename from web_tree_dynamic_colored_field/static/js/web_tree_dynamic_colored_field.js rename to web_tree_dynamic_colored_field/static/src/js/web_tree_dynamic_colored_field.js index 2c3b5e4f9..36b4dac6e 100644 --- a/web_tree_dynamic_colored_field/static/js/web_tree_dynamic_colored_field.js +++ b/web_tree_dynamic_colored_field/static/src/js/web_tree_dynamic_colored_field.js @@ -1,8 +1,4 @@ openerp.web_tree_dynamic_colored_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(':'), @@ -12,6 +8,14 @@ openerp.web_tree_dynamic_colored_field = function(instance){ } }; + 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]){ @@ -22,14 +26,7 @@ openerp.web_tree_dynamic_colored_field = function(instance){ 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') - } - ); + var ctx = get_eval_context(record); for(i=0, len=colors.length; i<len; ++i) { pair = colors[i]; var color = pair[0]; @@ -41,46 +38,38 @@ openerp.web_tree_dynamic_colored_field = function(instance){ } 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); + }); + + 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; + }, }); } diff --git a/web_tree_dynamic_colored_field/static/xml/web_tree_dynamic_colored_field.xml b/web_tree_dynamic_colored_field/static/src/xml/web_tree_dynamic_colored_field.xml similarity index 64% rename from web_tree_dynamic_colored_field/static/xml/web_tree_dynamic_colored_field.xml rename to web_tree_dynamic_colored_field/static/src/xml/web_tree_dynamic_colored_field.xml index 8a79e701a..254172e88 100644 --- a/web_tree_dynamic_colored_field/static/xml/web_tree_dynamic_colored_field.xml +++ b/web_tree_dynamic_colored_field/static/src/xml/web_tree_dynamic_colored_field.xml @@ -4,8 +4,8 @@ <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> + <attribute name="t-att-style">columns.fct_colorize(record, column)</attribute> </t> </tr> -</templates> \ No newline at end of file +</templates> diff --git a/web_tree_dynamic_colored_field/views/web_tree_dynamic_colored_field.xml b/web_tree_dynamic_colored_field/views/web_tree_dynamic_colored_field.xml index 4d425fd9c..7341731dd 100644 --- a/web_tree_dynamic_colored_field/views/web_tree_dynamic_colored_field.xml +++ b/web_tree_dynamic_colored_field/views/web_tree_dynamic_colored_field.xml @@ -5,8 +5,8 @@ <data> <template id="assets_backend" name="web_tree_dynamic_colored_field assets" inherit_id="web.assets_backend"> <xpath expr="." position="inside"> - <script type="text/javascript" src="/web_tree_dynamic_colored_field/static/js/web_tree_dynamic_colored_field.js"></script> + <script type="text/javascript" src="/web_tree_dynamic_colored_field/static/src/js/web_tree_dynamic_colored_field.js"></script> </xpath> </template> </data> -</openerp> \ No newline at end of file +</openerp>