diff options
| author | Xavier Morel <xmo@openerp.com> | 2012-01-10 16:39:05 +0100 |
|---|---|---|
| committer | Xavier Morel <xmo@openerp.com> | 2012-01-10 16:39:05 +0100 |
| commit | d98b8b8be0145700667c0f4cc0e7619dec790c5b (patch) | |
| tree | 17f6679cea38997846c43598b0f72eac66534418 /addons/web/static/src | |
| parent | 4cc9cb83cede980383709dfebe6ce48d436aaa7f (diff) | |
[ADD] handling of binary fields to the listview
bzr revid: xmo@openerp.com-20120110153905-zxqkze9c4zrkmv2a
Diffstat (limited to 'addons/web/static/src')
| -rw-r--r-- | addons/web/static/src/js/formats.js | 49 | ||||
| -rw-r--r-- | addons/web/static/src/js/view_list.js | 20 |
2 files changed, 53 insertions, 16 deletions
diff --git a/addons/web/static/src/js/formats.js b/addons/web/static/src/js/formats.js index 2418439ac46..4076c190a74 100644 --- a/addons/web/static/src/js/formats.js +++ b/addons/web/static/src/js/formats.js @@ -237,7 +237,15 @@ openerp.web.auto_date_to_str = function(value, type) { }; /** - * Formats a provided cell based on its field type + * Formats a provided cell based on its field type. Most of the field types + * return a correctly formatted value, but some tags and fields are + * special-cased in their handling: + * + * * buttons will return an actual ``<button>`` tag with a bunch of error handling + * + * * boolean fields will return a checkbox input, potentially disabled + * + * * binary fields will return a link to download the binary data as a file * * @param {Object} row_data record whose values should be displayed in the cell * @param {Object} column column descriptor @@ -245,21 +253,21 @@ openerp.web.auto_date_to_str = function(value, type) { * @param {String} column.type widget type for a field control * @param {String} [column.string] button label * @param {String} [column.icon] button icon - * @param {String} [value_if_empty=''] what to display if the field's value is ``false`` - * @param {Boolean} [process_modifiers=true] should the modifiers be computed ? + * @param {Object} [options] + * @param {String} [options.value_if_empty=''] what to display if the field's value is ``false`` + * @param {Boolean} [options.process_modifiers=true] should the modifiers be computed ? + * @param {String} [options.model] current record's model + * @param {Number} [options.id] current record's id + * */ -openerp.web.format_cell = function (row_data, column, value_if_empty, process_modifiers) { +openerp.web.format_cell = function (row_data, column, options) { + options = options || {}; var attrs = {}; - if (process_modifiers !== false) { + if (options.process_modifiers !== false) { attrs = column.modifiers_for(row_data); } if (attrs.invisible) { return ''; } - if (column.type === "boolean") { - return _.str.sprintf('<input type="checkbox" %s disabled="disabled"/>', - row_data[column.id].value ? 'checked="checked"' : ''); - } - if (column.tag === 'button') { return _.template('<button type="button" title="<%-title%>" <%=additional_attributes%> >' + '<img src="<%-prefix%>/web/static/src/img/icons/<%-icon%>.png" alt="<%-alt%>"/>' + @@ -269,14 +277,29 @@ openerp.web.format_cell = function (row_data, column, value_if_empty, process_mo 'disabled="disabled" class="oe-listview-button-disabled"' : '', prefix: openerp.connection.prefix, icon: column.icon, - alt: column.string || '', + alt: column.string || '' }); } if (!row_data[column.id]) { - return value_if_empty === undefined ? '' : value_if_empty; + return options.value_if_empty === undefined ? '' : options.value_if_empty; + } + + switch (column.type) { + case "boolean": + return _.str.sprintf('<input type="checkbox" %s disabled="disabled"/>', + row_data[column.id].value ? 'checked="checked"' : ''); + case "binary": + return _.str.sprintf('<a href="%(href)s">%(text)s</a> (%(size)s)', { + text: _t("Download"), + href: _.str.sprintf('/web/binary/saveas?session_id=%s&model=%s&field=%s&id=%d', + openerp.connection.session_id, options.model, + column.id, options.id), + size: row_data[column.id].value + }); } + return openerp.web.format_value( - row_data[column.id].value, column, value_if_empty); + row_data[column.id].value, column, options.value_if_empty); } }; diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 6b1621af74c..70ae337b903 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -685,6 +685,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# this.display_aggregates(aggregates); }, display_aggregates: function (aggregation) { + var self = this; var $footer_cells = this.$element.find('.oe-list-footer'); _(this.aggregate_columns).each(function (column) { if (!column['function']) { @@ -692,7 +693,10 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# } $footer_cells.filter(_.str.sprintf('[data-field=%s]', column.id)) - .html(openerp.web.format_cell(aggregation, column, undefined, false)); + .html(openerp.web.format_cell(aggregation, column, { + process_modifiers: false, + model: self.dataset.model + })); }); }, get_selected_ids: function() { @@ -846,6 +850,9 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis return self.reload_record(self.records.get(record_id)); }]); }) + .delegate('a', 'click', function (e) { + e.stopPropagation(); + }) .delegate('tr', 'click', function (e) { e.stopPropagation(); var row_id = self.row_id(e.currentTarget); @@ -905,7 +912,10 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis }); } } - return openerp.web.format_cell(record.toForm().data, column); + return openerp.web.format_cell(record.toForm().data, column, { + model: this.dataset.model, + id: record.get('id') + }); }, render: function () { if (this.$current) { @@ -1211,7 +1221,11 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L return column.id === group.grouped_on; }); try { $group_column.html(openerp.web.format_cell( - row_data, group_column, _t("Undefined"), false)); + row_data, group_column, { + value_if_empty: _t("Undefined"), + process_modifiers: false, + model: self.dataset.model + })); } catch (e) { $group_column.html(row_data[group_column.id].value); } |
