From ff17338ea5d9ea8a6352a469ed8a9aab452b5bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sun, 30 Apr 2023 00:57:46 +0200 Subject: [PATCH] Set type to Blob for SVG image Without proper type, browsers do not render SVG image from Blob. So we try to guess if it is an SVG image by trying to parse it as XML. For other types, browsers render them without type. Closes #12201 --- sao/src/common.js | 19 +++++++++++++++++++ sao/src/view/form.js | 9 +-------- sao/src/view/tree.js | 9 +-------- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/sao/src/common.js b/sao/src/common.js index db309a5f79..ac793cef27 100644 --- a/sao/src/common.js +++ b/sao/src/common.js @@ -4244,4 +4244,23 @@ return el.html(); }; + Sao.common.image_url = function(data) { + if (!data) { + return null; + } + var type = ''; + try { + var xml = data; + if (xml instanceof Uint8Array) { + xml = new TextDecoder().decode(data); + } + if (jQuery.parseXML(xml)) { + type = 'image/svg+xml'; + } + } catch (e) { + } + blob = new Blob([data], {type: type}); + return window.URL.createObjectURL(blob); + }; + }()); diff --git a/sao/src/view/form.js b/sao/src/view/form.js index ed0118796f..b0ecd5f5b5 100644 --- a/sao/src/view/form.js +++ b/sao/src/view/form.js @@ -4392,17 +4392,10 @@ function eval_pyson(value){ value = jQuery.when(null); } value.done(data => { - var url, blob; if (record !== this.record) { return; } - if (!data) { - url = null; - } else { - blob = new Blob([data]); - url = window.URL.createObjectURL(blob); - } - this.image.attr('src', url); + this.image.attr('src', Sao.common.image_url(data)); this.update_buttons(Boolean(data)); }); }, diff --git a/sao/src/view/tree.js b/sao/src/view/tree.js index 61888d1f37..79f7f5b2dd 100644 --- a/sao/src/view/tree.js +++ b/sao/src/view/tree.js @@ -2844,14 +2844,7 @@ } const render = () => { const set_src = data => { - var img_url, blob; - if (!data) { - img_url = null; - } else { - blob = new Blob([data]); - img_url = window.URL.createObjectURL(blob); - } - cell.attr('src', img_url); + cell.attr('src', Sao.common.image_url(data)); }; var value = this.field.get_client(record);