diff --git a/web_tree_dynamic_colored_field/demo/res_users.xml b/web_tree_dynamic_colored_field/demo/res_users.xml index de8aeb41c..004a90f12 100644 --- a/web_tree_dynamic_colored_field/demo/res_users.xml +++ b/web_tree_dynamic_colored_field/demo/res_users.xml @@ -1,4 +1,4 @@ - + res.users diff --git a/web_tree_dynamic_colored_field/static/src/js/web_tree_dynamic_colored_field.js b/web_tree_dynamic_colored_field/static/src/js/web_tree_dynamic_colored_field.js index 6f2239d03..2b9812de5 100644 --- a/web_tree_dynamic_colored_field/static/src/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,9 @@ -odoo.define('web_tree_dynamic_colored_field', function (require) { - 'use strict'; +odoo.define("web_tree_dynamic_colored_field", function(require) { + "use strict"; - var ListRenderer = require('web.ListRenderer'); + var ListRenderer = require("web.ListRenderer"); var pyUtils = require("web.py_utils"); + var py = window.py; ListRenderer.include({ /** @@ -10,7 +11,7 @@ odoo.define('web_tree_dynamic_colored_field', function (require) { * * @override */ - _renderBodyCell: function (record, node, colIndex, options) { + _renderBodyCell: function(record, node) { var $td = this._super.apply(this, arguments); var ctx = this.getEvalContext(record); this.applyColorize($td, record, node, ctx); @@ -20,35 +21,57 @@ odoo.define('web_tree_dynamic_colored_field', function (require) { /** * Colorize the current cell depending on expressions provided. * - * @param {Query Node} $td a tag inside a table representing a list view + * @param {Element} $td a tag inside a table representing a list view + * @param {Object} record * @param {Object} node an XML node (must be a ) + * @param {Object} ctx evaluation context for the record */ - applyColorize: function ($td, record, node, ctx) { - if (!node.attrs.options) { return; } - if (node.tag !== 'field') { return; } + applyColorize: function($td, record, node, ctx) { + if (!node.attrs.options) { + return; + } + if (node.tag !== "field") { + return; + } var nodeOptions = node.attrs.options; if (!_.isObject(nodeOptions)) { nodeOptions = pyUtils.py_eval(nodeOptions); } - this.applyColorizeHelper($td, nodeOptions, node, 'fg_color', 'color', ctx); - this.applyColorizeHelper($td, nodeOptions, node, 'bg_color', 'background-color', ctx); + this.applyColorizeHelper($td, nodeOptions, node, "fg_color", "color", ctx); + this.applyColorizeHelper( + $td, + nodeOptions, + node, + "bg_color", + "background-color", + ctx + ); }, /** + * @param {Element} $td a tag inside a table representing a list view * @param {Object} nodeOptions a mapping of nodeOptions parameters to the color itself * @param {Object} node an XML node (must be a ) - * @param {string} nodeAttribute an attribute of a node to apply a style onto - * @param {string} cssAttribute a real CSS-compatible attribute + * @param {String} nodeAttribute an attribute of a node to apply a style onto + * @param {String} cssAttribute a real CSS-compatible attribute + * @param {Object} ctx evaluation context for the record */ - applyColorizeHelper: function ($td, nodeOptions, node, nodeAttribute, cssAttribute, ctx) { + applyColorizeHelper: function( + $td, + nodeOptions, + node, + nodeAttribute, + cssAttribute, + ctx + ) { if (nodeOptions[nodeAttribute]) { - var colors = _(nodeOptions[nodeAttribute].split(';')) + var colors = _(nodeOptions[nodeAttribute].split(";")) .chain() .map(this.pairColors) .value() - .filter(function CheckUndefined(value, index, ar) { + .filter(function CheckUndefined(value) { return value !== undefined; }); - for (var i=0, len=colors.length; i: ` forms to * evaluable expressions * - * @param {string} pairColor `color: expression` pair + * @param {String} pairColor `color: expression` pair + * @returns {Array} undefined or array of color, parsed expression, + * original expression */ - pairColors: function (pairColor) { + pairColors: function(pairColor) { if (pairColor !== "") { - var pairList = pairColor.split(':'), + var pairList = pairColor.split(":"), color = pairList[0], - // if one passes a bare color instead of an expression, + // If one passes a bare color instead of an expression, // then we consider that color is to be shown in any case - expression = pairList[1]? pairList[1] : 'True'; + expression = pairList[1] ? pairList[1] : "True"; return [color, py.parse(py.tokenize(expression)), expression]; } return undefined; @@ -81,22 +106,19 @@ odoo.define('web_tree_dynamic_colored_field', function (require) { * record's fields's values to local scope. * * @param {Object} record a record to build a context from + * @returns {Object} evaluation context for the record */ - getEvalContext: function (record) { - var ctx = _.extend( - {}, - record.data, - pyUtils.context() - ); + getEvalContext: function(record) { + var ctx = _.extend({}, record.data, pyUtils.context()); for (var key in ctx) { var value = ctx[key]; if (ctx[key] instanceof moment) { - // date/datetime fields are represented w/ Moment objects + // Date/datetime fields are represented w/ Moment objects // docs: https://momentjs.com/ - ctx[key] = value.format('YYYY-MM-DD hh:mm:ss'); + ctx[key] = value.format("YYYY-MM-DD hh:mm:ss"); } } return ctx; - } + }, }); }); 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 116b37db4..dbd9e43cd 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 @@ -1,8 +1,15 @@ - + -