From 2f932e3a46c6005870e4130b3c3f7151cd521f2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Theys?= Date: Fri, 8 Mar 2019 15:41:52 +0000 Subject: [PATCH] [IMP] web: add filename to qweb image widget MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It's better to always have a relevant name in the image URL for SEO. Also make sure there is always an alt on the image. closes odoo/odoo#31705 Signed-off-by: Jérémy Kersten (jke) --- addons/web/models/ir_qweb.py | 16 +++++++++++++--- addons/website/tests/test_qweb.py | 4 +++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/addons/web/models/ir_qweb.py b/addons/web/models/ir_qweb.py index ec97efa6001..d1d792e8f54 100644 --- a/addons/web/models/ir_qweb.py +++ b/addons/web/models/ir_qweb.py @@ -3,6 +3,7 @@ import hashlib from collections import OrderedDict +from werkzeug.urls import url_quote from odoo import api, models from odoo.tools import pycompat @@ -45,17 +46,26 @@ class Image(models.AbstractModel): sha = hashlib.sha1(str(getattr(record, '__last_update')).encode('utf-8')).hexdigest()[0:7] max_size = '' if max_size is None else '/%s' % max_size avoid_if_small = '&avoid_if_small=true' if options.get('avoid_if_small') else '' - src = '/web/image/%s/%s/%s%s?unique=%s%s' % (record._name, record.id, options.get('preview_image', field_name), max_size, sha, avoid_if_small) - alt = None + if options.get('filename-field') and getattr(record, options['filename-field'], None): + filename = record[options['filename-field']] + elif options.get('filename'): + filename = options['filename'] + else: + filename = record.display_name + + src = '/web/image/%s/%s/%s%s/%s?unique=%s%s' % (record._name, record.id, options.get('preview_image', field_name), max_size, url_quote(filename), sha, avoid_if_small) + if options.get('alt-field') and getattr(record, options['alt-field'], None): alt = escape(record[options['alt-field']]) elif options.get('alt'): alt = options['alt'] + else: + alt = escape(record.display_name) src_zoom = None if options.get('zoom') and getattr(record, options['zoom'], None): - src_zoom = '/web/image/%s/%s/%s%s?unique=%s' % (record._name, record.id, options['zoom'], max_size, sha) + src_zoom = '/web/image/%s/%s/%s%s/%s?unique=%s' % (record._name, record.id, options['zoom'], max_size, url_quote(filename), sha) elif options.get('zoom'): src_zoom = options['zoom'] diff --git a/addons/website/tests/test_qweb.py b/addons/website/tests/test_qweb.py index 5e078d89dd6..67e22117cde 100644 --- a/addons/website/tests/test_qweb.py +++ b/addons/website/tests/test_qweb.py @@ -56,10 +56,12 @@ class TestQweb(TransactionCase):
span
-
+
%(alt)s
""" % { "js": attachments[0].url, "css": attachments[1].url, "user_id": demo.id, + "filename": "Marc%20Demo", + "alt": "Marc Demo", }).encode('utf8'))