Browse Source

[ADD] add module 'web_widget_color_tree_field'

pull/187/head
Damien Crier 9 years ago
parent
commit
366cb8325b
  1. 80
      web_widget_color_tree_field/README.rst
  2. 20
      web_widget_color_tree_field/__init__.py
  3. 36
      web_widget_color_tree_field/__openerp__.py
  4. 86
      web_widget_color_tree_field/static/js/web_widget_color_tree_field.js
  5. 11
      web_widget_color_tree_field/static/xml/web_widget_color_tree_field.xml
  6. 12
      web_widget_color_tree_field/views/web_widget_color_tree_field.xml

80
web_widget_color_tree_field/README.rst

@ -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.

20
web_widget_color_tree_field/__init__.py

@ -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/>.
#
##############################################################################

36
web_widget_color_tree_field/__openerp__.py

@ -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
}

86
web_widget_color_tree_field/static/js/web_widget_color_tree_field.js

@ -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);
}
});
}
});
}

11
web_widget_color_tree_field/static/xml/web_widget_color_tree_field.xml

@ -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>

12
web_widget_color_tree_field/views/web_widget_color_tree_field.xml

@ -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>
Loading…
Cancel
Save