From 9fed86b65baadeb43e4c3d832ca18e989835ae1e Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Fri, 5 Dec 2014 19:27:37 +0100 Subject: [PATCH] Handle binary fields. Courtesy of Marcel van der Boom --- web_tree_image/__openerp__.py | 17 ++++++----- .../static/src/js/web_tree_image.js | 30 ++++++++++++++----- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/web_tree_image/__openerp__.py b/web_tree_image/__openerp__.py index b82000eb..c16c1ebc 100644 --- a/web_tree_image/__openerp__.py +++ b/web_tree_image/__openerp__.py @@ -4,6 +4,9 @@ # OpenERP, Open Source Management Solution # This module copyright (C) 2014 Therp BV (). # +# Snippet from https://github.com/hsd/listview_images +# Copyright (C) 2013 Marcel van der Boom +# # 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 @@ -23,11 +26,12 @@ "version": "1.0", "author": "Therp BV", "description": """\ -This module defines a tree image widget, to be used with function fields of -type character. Use widget='tree_image' in your view definition. Optionally, set -a 'height' tag. Default height is 16px. +This module defines a tree image widget, to be used with either binary fields +or function fields of type character. Use widget='tree_image' in your view +definition. Optionally, set a 'height' tag. Default height is 16px. -The content of the field can be any of the following: +If you use the widget with a character field, the content of the field can be +any of the following: * the absolute or relative location of an image. For example, \ "//static/src/img/youricon.png" @@ -35,9 +39,8 @@ The content of the field can be any of the following: * a standard icon from the web distribution, without path or extension, For \ example, 'gtk-open' -* A dynamic image in a data url base 64 format. To show a regular image field \ -from the model, use a function field wrapper that retrieves the image with \ -bin_size=False in the context, and prefix with 'data:image/png;base64,' +* A dynamic image in a data url base 64 format. Prefix with \ +'data:image/png;base64,' """, 'depends': [ 'web', diff --git a/web_tree_image/static/src/js/web_tree_image.js b/web_tree_image/static/src/js/web_tree_image.js index cd97d39b..f161a2d5 100644 --- a/web_tree_image/static/src/js/web_tree_image.js +++ b/web_tree_image/static/src/js/web_tree_image.js @@ -1,6 +1,7 @@ /* OpenERP, Open Source Management Solution - This module copyright (C) 2014 Therp BV (). + This module copyright (C) 2014 Therp BV () + (C) 2013 Marcel van der Boom This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as @@ -18,14 +19,29 @@ openerp.web_tree_image = function (instance) { instance.web.list.Image = instance.web.list.Column.extend({ - /* Return an image tag */ format: function (row_data, options) { - if (!row_data[this.id] || !row_data[this.id].value) { return ''; } - var src; - if (!/\//.test(row_data[this.id].value)) { - src = '/web/static/src/img/icons/' + row_data[this.id].value + '.png'; + /* Return a valid img tag. For image fields, test if the + field's value contains just the binary size and retrieve + the image from the dedicated controller in that case. + Otherwise, assume a character field containing either a + stock Odoo icon name without path or extension or a fully + fledged location or data url */ + if (!row_data[this.id] || !row_data[this.id].value) { + return ''; + } + var value = row_data[this.id].value, src; + if (this.type === 'binary') { + if (value && value.substr(0, 10).indexOf(' ') === -1) { + src = "data:image/png;base64," + value; + } else { + src = instance.session.url('/web/binary/image', {model: options.model, field: this.id, id: options.id}); + } } else { - src = row_data[this.id].value; + if (!/\//.test(row_data[this.id].value)) { + src = '/web/static/src/img/icons/' + row_data[this.id].value + '.png'; + } else { + src = row_data[this.id].value; + } } return instance.web.qweb.render('ListView.row.image', {widget: this, src: src}); }