Merge pull request #886 from guewen/11.0-fix-dynamic-colored-json-parse-object

Fix several issues in web_tree_dynamic_colored_field
pull/922/head
Pedro M. Baeza 2018-03-16 17:49:39 +01:00 committed by GitHub
commit a095b86105
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 19 deletions

View File

@ -25,13 +25,13 @@ Features
Usage Usage
===== =====
* In the tree view declaration, put ``options='"bg_color": "red: customer==True"`` attribute in the ``field`` tag:: * In the tree view declaration, put ``options='{"bg_color": "red: customer==True"}`` attribute in the ``field`` tag::
... ...
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="View name"> <tree string="View name">
... ...
<field name="name" options='"bg_color": "red: customer == True"'/> <field name="name" options='{"bg_color": "red: customer == True"}'/>
... ...
</tree> </tree>
</field> </field>
@ -39,13 +39,13 @@ Usage
With this example, column which renders 'name' field will have its background colored in red. With this example, column which renders 'name' field will have its background colored in red.
* In the tree view declaration, put ``options='"fg_color": "white:customer == True"'`` attribute in the ``field`` tag:: * In the tree view declaration, put ``options='{"fg_color": "white:customer == True"}'`` attribute in the ``field`` tag::
... ...
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="View name"> <tree string="View name">
... ...
<field name="name" 'options="fg_color": "white:customer == True"'/> <field name="name" options='{"fg_color": "white:customer == True"}'/>
... ...
</tree> </tree>
</field> </field>
@ -90,6 +90,7 @@ Contributors
* Damien Crier <damien.crier@camptocamp.com> * Damien Crier <damien.crier@camptocamp.com>
* Holger Brunn <hbrunn@therp.nl> * Holger Brunn <hbrunn@therp.nl>
* Artem Kostyuk <a.kostyuk@mobilunity.com> * Artem Kostyuk <a.kostyuk@mobilunity.com>
* Guewen Baconnier <guewen.baconnier@camptocamp.com>
Maintainer Maintainer
---------- ----------

View File

@ -4,7 +4,7 @@
'name': 'Colorize field in tree views', 'name': 'Colorize field in tree views',
'summary': 'Allows you to dynamically color fields on tree views', 'summary': 'Allows you to dynamically color fields on tree views',
'category': 'Hidden/Dependency', 'category': 'Hidden/Dependency',
'version': '11.0.1.0.0', 'version': '11.0.1.0.1',
'depends': ['web'], 'depends': ['web'],
'author': "Camptocamp, Therp BV, Odoo Community Association (OCA)", 'author': "Camptocamp, Therp BV, Odoo Community Association (OCA)",
'license': 'AGPL-3', 'license': 'AGPL-3',

View File

@ -12,20 +12,21 @@ odoo.define('web_tree_dynamic_colored_field', function (require) {
*/ */
_renderBody: function () { _renderBody: function () {
if (this.arch.attrs.colors) { if (this.arch.attrs.colors) {
var colorField = this.arch.attrs.colors.split(';') var colorAttr = this.arch.attrs.colors.split(';')
.filter(color => color.trim().startsWith('color_field'))[0] .filter(color => color.trim().startsWith('color_field'));
.split(':')[1] if (colorAttr.length > 0) {
.trim(); var colorField = colorAttr[0].split(':')[1].trim();
// validate the presence of that field in tree view // validate the presence of that field in tree view
var fieldNames = _(this.columns).map( var fieldNames = _(this.columns).map(
(value) => { return value.attrs.name; } (value) => { return value.attrs.name; }
);
if (fieldNames.indexOf(colorField) === -1) {
console.warn(
"No field named '" + colorField + "' present in view."
); );
} else { if (fieldNames.indexOf(colorField) === -1) {
this.colorField = colorField; console.warn(
"No field named '" + colorField + "' present in view."
);
} else {
this.colorField = colorField;
}
} }
} }
return this._super(); return this._super();
@ -56,7 +57,11 @@ odoo.define('web_tree_dynamic_colored_field', function (require) {
} }
// apply <field>'s own `options` // apply <field>'s own `options`
if (!node.attrs.options) { return; } if (!node.attrs.options) { return; }
var nodeOptions = JSON.parse(node.attrs.options); if (node.tag !== 'field') { return; }
var nodeOptions = node.attrs.options;
if (!_.isObject(nodeOptions)) {
nodeOptions = pyeval.py_eval(nodeOptions);
}
this.applyColorizeHelper($td, nodeOptions, node, 'fg_color', 'color', ctx); this.applyColorizeHelper($td, nodeOptions, node, 'fg_color', 'color', ctx);
this.applyColorizeHelper($td, nodeOptions, node, 'bg_color', 'background-color', ctx); this.applyColorizeHelper($td, nodeOptions, node, 'bg_color', 'background-color', ctx);
}, },