Browse Source
Merge pull request #473 from hbrunn/9.0-web_tree_dynamic_colored_field
Merge pull request #473 from hbrunn/9.0-web_tree_dynamic_colored_field
9.0 web tree dynamic colored fieldpull/300/head
Pedro M. Baeza
8 years ago
committed by
GitHub
10 changed files with 220 additions and 147 deletions
-
44web_tree_dynamic_colored_field/README.rst
-
21web_tree_dynamic_colored_field/__init__.py
-
39web_tree_dynamic_colored_field/__openerp__.py
-
22web_tree_dynamic_colored_field/demo/res_users.xml
-
26web_tree_dynamic_colored_field/i18n/fi.po
-
26web_tree_dynamic_colored_field/i18n/sl.po
-
86web_tree_dynamic_colored_field/static/js/web_tree_dynamic_colored_field.js
-
95web_tree_dynamic_colored_field/static/src/js/web_tree_dynamic_colored_field.js
-
4web_tree_dynamic_colored_field/static/src/xml/web_tree_dynamic_colored_field.xml
-
4web_tree_dynamic_colored_field/views/web_tree_dynamic_colored_field.xml
@ -1,20 +1,3 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- 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/>. |
|
||||
# |
|
||||
############################################################################## |
|
||||
|
# © 2015 Camptocamp SA, Damien Crier |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
@ -1,37 +1,22 @@ |
|||||
# -*- coding: utf-8 -*- |
# -*- 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/>. |
|
||||
# |
|
||||
############################################################################## |
|
||||
|
# © 2015 Camptocamp SA, Damien Crier |
||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
||||
{ |
{ |
||||
'name': 'web tree dynamic colored field', |
|
||||
'category': 'Hidden', |
|
||||
'version': '8.0.1.0.0', |
|
||||
|
'name': 'Colorize field in tree views', |
||||
|
'summary': 'Allows you to dynamically color fields on tree views', |
||||
|
'category': 'Hidden/Dependency', |
||||
|
'version': '9.0.2.0.0', |
||||
'depends': ['web'], |
'depends': ['web'], |
||||
'author': "Camptocamp,Odoo Community Association (OCA)", |
|
||||
|
'author': "Camptocamp,Therp BV,Odoo Community Association (OCA)", |
||||
'license': 'AGPL-3', |
'license': 'AGPL-3', |
||||
'website': 'http://www.camptocamp.com', |
|
||||
|
'website': 'https://github.com/OCA/web', |
||||
|
'demo': [ |
||||
|
"demo/res_users.xml", |
||||
|
], |
||||
'data': [ |
'data': [ |
||||
'views/web_tree_dynamic_colored_field.xml', |
'views/web_tree_dynamic_colored_field.xml', |
||||
], |
], |
||||
'qweb': [ |
'qweb': [ |
||||
'static/xml/*.xml', |
|
||||
|
'static/src/xml/*.xml', |
||||
], |
], |
||||
'auto_install': False, |
|
||||
'installable': False, |
|
||||
} |
} |
@ -0,0 +1,22 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<openerp> |
||||
|
<data> |
||||
|
<record id="view_users_tree" model="ir.ui.view"> |
||||
|
<field name="model">res.users</field> |
||||
|
<field name="inherit_id" ref="base.view_users_tree" /> |
||||
|
<field name="arch" type="xml"> |
||||
|
<xpath expr="." position="attributes"> |
||||
|
<attribute name="color_field">lang</attribute> |
||||
|
</xpath> |
||||
|
<field name="login_date" position="attributes"> |
||||
|
<attribute name="bg_color">red: login_date == False</attribute> |
||||
|
<attribute name="fg_color">white: login_date == False</attribute> |
||||
|
</field> |
||||
|
<field name="name" position="attributes"> |
||||
|
<attribute name="bg_color">red: login == 'admin'</attribute> |
||||
|
<attribute name="fg_color">white: login == 'admin'</attribute> |
||||
|
</field> |
||||
|
</field> |
||||
|
</record> |
||||
|
</data> |
||||
|
</openerp> |
@ -0,0 +1,26 @@ |
|||||
|
# Translation of Odoo Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * web_tree_dynamic_colored_field |
||||
|
# |
||||
|
# Translators: |
||||
|
# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016 |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Odoo Server 8.0\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2016-07-08 16:36+0000\n" |
||||
|
"PO-Revision-Date: 2016-07-08 16:36+0000\n" |
||||
|
"Last-Translator: Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2016\n" |
||||
|
"Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: \n" |
||||
|
"Language: fi\n" |
||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
||||
|
|
||||
|
#. module: web_tree_dynamic_colored_field |
||||
|
#. openerp-web |
||||
|
#: code:addons/web_tree_dynamic_colored_field/static/src/xml/web_tree_dynamic_colored_field.xml:7 |
||||
|
#, python-format |
||||
|
msgid "columns.fct_colorize(record, column)" |
||||
|
msgstr "columns.fct_colorize(record, column)" |
@ -0,0 +1,26 @@ |
|||||
|
# Translation of Odoo Server. |
||||
|
# This file contains the translation of the following modules: |
||||
|
# * web_tree_dynamic_colored_field |
||||
|
# |
||||
|
# Translators: |
||||
|
# Matjaž Mozetič <m.mozetic@matmoz.si>, 2016 |
||||
|
msgid "" |
||||
|
msgstr "" |
||||
|
"Project-Id-Version: Odoo Server 8.0\n" |
||||
|
"Report-Msgid-Bugs-To: \n" |
||||
|
"POT-Creation-Date: 2016-06-24 00:46+0000\n" |
||||
|
"PO-Revision-Date: 2016-06-24 00:46+0000\n" |
||||
|
"Last-Translator: Matjaž Mozetič <m.mozetic@matmoz.si>, 2016\n" |
||||
|
"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" |
||||
|
"MIME-Version: 1.0\n" |
||||
|
"Content-Type: text/plain; charset=UTF-8\n" |
||||
|
"Content-Transfer-Encoding: \n" |
||||
|
"Language: sl\n" |
||||
|
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" |
||||
|
|
||||
|
#. module: web_tree_dynamic_colored_field |
||||
|
#. openerp-web |
||||
|
#: code:addons/web_tree_dynamic_colored_field/static/src/xml/web_tree_dynamic_colored_field.xml:7 |
||||
|
#, python-format |
||||
|
msgid "columns.fct_colorize(record, column)" |
||||
|
msgstr "columns.fct_colorize(record, column)" |
@ -1,86 +0,0 @@ |
|||||
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(':'), |
|
||||
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,95 @@ |
|||||
|
odoo.define('web_tree_dynamic_colored_field', function(require) |
||||
|
{ |
||||
|
'use strict'; |
||||
|
var ListView = require('web.ListView'), |
||||
|
pyeval = require('web.pyeval'), |
||||
|
py = window.py; |
||||
|
|
||||
|
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 get_eval_context = function(record){ |
||||
|
return _.extend( |
||||
|
{}, |
||||
|
record.attributes, |
||||
|
pyeval.context() |
||||
|
); |
||||
|
}; |
||||
|
|
||||
|
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() |
||||
|
.filter(function CheckUndefined(value, index, ar) { |
||||
|
return value !== undefined; |
||||
|
}); |
||||
|
var ctx = get_eval_context(record); |
||||
|
for(var i=0, len=colors.length; i<len; ++i) { |
||||
|
var pair = colors[i], |
||||
|
color = pair[0], |
||||
|
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; |
||||
|
}; |
||||
|
|
||||
|
ListView.List.include({ |
||||
|
init: function(group, opts){ |
||||
|
this._super(group, opts); |
||||
|
this.columns.fct_colorize = colorize; |
||||
|
}, |
||||
|
}); |
||||
|
|
||||
|
ListView.include({ |
||||
|
load_view: function() |
||||
|
{ |
||||
|
var self = this; |
||||
|
return this._super.apply(this, arguments) |
||||
|
.then(function() |
||||
|
{ |
||||
|
// the style_for helper is only called if one of colors or
|
||||
|
// fonts is not null
|
||||
|
if(self.fields_view.arch.attrs.color_field) |
||||
|
{ |
||||
|
self.colors = []; |
||||
|
} |
||||
|
}); |
||||
|
}, |
||||
|
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; |
||||
|
}, |
||||
|
}); |
||||
|
}); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue