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