From 9921f9d959865738d9b9ceabde8cba3523c5fd72 Mon Sep 17 00:00:00 2001 From: kutyel Date: Fri, 22 Jul 2016 17:24:47 +0200 Subject: [PATCH 1/9] [MIG] web_widget_image_download --- web_widget_image_download/README.rst | 60 ++++++++++++++++++ web_widget_image_download/__init__.py | 3 + web_widget_image_download/__openerp__.py | 23 +++++++ .../static/description/icon.png | Bin 0 -> 17095 bytes .../src/css/web_widget_image_download.css | 6 ++ .../src/js/web_widget_image_download.js | 39 ++++++++++++ .../src/xml/web_widget_image_download.xml | 13 ++++ web_widget_image_download/views/assets.xml | 16 +++++ 8 files changed, 160 insertions(+) create mode 100644 web_widget_image_download/README.rst create mode 100644 web_widget_image_download/__init__.py create mode 100644 web_widget_image_download/__openerp__.py create mode 100644 web_widget_image_download/static/description/icon.png create mode 100644 web_widget_image_download/static/src/css/web_widget_image_download.css create mode 100644 web_widget_image_download/static/src/js/web_widget_image_download.js create mode 100644 web_widget_image_download/static/src/xml/web_widget_image_download.xml create mode 100644 web_widget_image_download/views/assets.xml diff --git a/web_widget_image_download/README.rst b/web_widget_image_download/README.rst new file mode 100644 index 00000000..cc5f3782 --- /dev/null +++ b/web_widget_image_download/README.rst @@ -0,0 +1,60 @@ +.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 + +=========================== +Web Widget - Image Download +=========================== + +This module was written to extend the functionality of the image widget and allows to download it. + +Usage +===== + +To use this module, you need to: + +#. Go to the section `Contacts`. +#. Click on a contact. +#. Edit the contact. +#. Click the `Download` button (between `Edit` and `Clear`). + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/162/8.0 + +Known Issues / Roadmap +====================== + +* In order to work correctly, this widget has to detect image type, the server should include this information in the `Content-Type` header. Right now, odoo is not doing so, but a fix has been `proposed `_. +* For some unknown reason, the widget does not work in the `Preferences` view, because odoo is not rendering the **QWeb** template. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Contributors +------------ + +* Flavio Corpa + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/web_widget_image_download/__init__.py b/web_widget_image_download/__init__.py new file mode 100644 index 00000000..c222227a --- /dev/null +++ b/web_widget_image_download/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Flavio Corpa +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/web_widget_image_download/__openerp__.py b/web_widget_image_download/__openerp__.py new file mode 100644 index 00000000..afc6d2f9 --- /dev/null +++ b/web_widget_image_download/__openerp__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Copyright 2016 Flavio Corpa +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +{ + "name": "Web Widget - Image Download", + "summary": "Allows to download any image from its widget", + "version": "9.0.1.0.0", + "category": "web", + "website": "https://www.tecnativa.com", + "author": "Tecnativa, Odoo Community Association (OCA)", + "license": "LGPL-3", + "application": False, + "installable": True, + "data": [ + "views/assets.xml", + ], + "depends": [ + "web", + ], + "qweb": [ + "static/src/xml/web_widget_image_download.xml", + ] +} diff --git a/web_widget_image_download/static/description/icon.png b/web_widget_image_download/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..65dabfc969bb36290899d851f2262e6dba91d1c5 GIT binary patch literal 17095 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 + * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */ + +.openerp .oe_application a.oe_form_binary_file_download { + color: #eee; +} diff --git a/web_widget_image_download/static/src/js/web_widget_image_download.js b/web_widget_image_download/static/src/js/web_widget_image_download.js new file mode 100644 index 00000000..6f204d13 --- /dev/null +++ b/web_widget_image_download/static/src/js/web_widget_image_download.js @@ -0,0 +1,39 @@ +/* + * Copyright 2016 Flavio Corpa + * License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + */ +odoo.define('web_widget_image_download', function (require) { + 'use strict'; + + var common = require('web.form_common'); + + common.FieldBinaryImage.include({ + render_value: function () { + this._super(); + + var $widget = this.$el.find('.oe_form_binary_file_download'); + + this.imgSrc = this.$el.find('img[name="image"]').attr('src'); + + $.ajax({ + type: 'HEAD', + url: this.imgSrc, + complete: function (xhr) { + // retrieve image type from server ("Content-Type" header) + $widget.attr('download', xhr.getResponseHeader("Content-Type").replace('/', '.')); + } + }); + + // use jquery instead of `replace` with qweb (to avoid breaking inheritance) + if (this.has_custom_image()) { + this.$el.find('.oe_form_binary_file_clear').removeClass('col-md-offset-5'); + } + + $widget.attr('href', this.imgSrc); + }, + has_custom_image: function () { + // check if the image of the widget is different from the default placeholder + return this.imgSrc && !this.imgSrc.includes('/placeholder.png'); + } + }); +}); diff --git a/web_widget_image_download/static/src/xml/web_widget_image_download.xml b/web_widget_image_download/static/src/xml/web_widget_image_download.xml new file mode 100644 index 00000000..096d3256 --- /dev/null +++ b/web_widget_image_download/static/src/xml/web_widget_image_download.xml @@ -0,0 +1,13 @@ + + + + diff --git a/web_widget_image_download/views/assets.xml b/web_widget_image_download/views/assets.xml new file mode 100644 index 00000000..56fb5385 --- /dev/null +++ b/web_widget_image_download/views/assets.xml @@ -0,0 +1,16 @@ + + + + + +