diff --git a/dev/Common/Html.js b/dev/Common/Html.js index dafb0991a..cf78b1260 100644 --- a/dev/Common/Html.js +++ b/dev/Common/Html.js @@ -39,7 +39,6 @@ export const cleanHtml = (html, oAttachments, removeColors) => { const debug = false, // Config()->Get('debug', 'enable', false); - useProxy = !!SettingsGet('UseLocalProxyForExternalImages'), detectHiddenImages = true, // !!SettingsGet('try_to_detect_hidden_images'), result = { @@ -229,48 +228,52 @@ export const value = getAttribute('src'); delAttribute('src'); - let attachment; - - if (detectHiddenImages - && 'IMG' === name - && (('' != getAttribute('height') && 3 > pInt(getAttribute('height'))) - || ('' != getAttribute('width') && 3 > pInt(getAttribute('width'))) - || [ - 'email.microsoftemail.com/open', - 'github.com/notifications/beacon/', - 'mandrillapp.com/track/open', - 'list-manage.com/track/open' - ].filter(uri => value.toLowerCase().includes(uri)).length - )) { - skipStyle = true; - setAttribute('style', 'display:none'); - setAttribute('data-x-hidden-src', value); - } - else if ((attachment = findLocationByCid(value))) - { - if (attachment.download) { - oElement.loading = 'lazy'; - oElement.src = attachment.linkPreview(); - attachment.isLinked(true); + if ('IMG' === name) { + let attachment; + if (detectHiddenImages + && (('' != getAttribute('height') && 3 > pInt(getAttribute('height'))) + || ('' != getAttribute('width') && 3 > pInt(getAttribute('width'))) + || [ + 'email.microsoftemail.com/open', + 'github.com/notifications/beacon/', + 'mandrillapp.com/track/open', + 'list-manage.com/track/open' + ].filter(uri => value.toLowerCase().includes(uri)).length + )) { + skipStyle = true; + setAttribute('style', 'display:none'); + setAttribute('data-x-hidden-src', value); } - } - else if ('cid:' === value.slice(0, 4)) - { - attachment = findAttachmentByCid(value.slice(4)); - if (attachment && attachment.download) { - oElement.src = attachment.linkPreview(); - attachment.isInline(true); - attachment.isLinked(true); + else if ((attachment = findLocationByCid(value))) + { + if (attachment.download) { + oElement.loading = 'lazy'; + oElement.src = attachment.linkPreview(); + attachment.isLinked(true); + } + } + else if ('cid:' === value.slice(0, 4)) + { + attachment = findAttachmentByCid(value.slice(4)); + if (attachment && attachment.download) { + oElement.src = attachment.linkPreview(); + attachment.isInline(true); + attachment.isLinked(true); + } + } + else if (/^(https?:)?\/\//i.test(value)) + { + setAttribute('data-x-src', value); + result.hasExternals = true; + } + else if ('data:image/' === value.slice(0, 11)) + { + setAttribute('src', value); + } + else + { + setAttribute('data-x-broken-src', value); } - } - else if (/^(https?:)?\/\//i.test(value)) - { - setAttribute('data-x-src', useProxy ? proxy(value) : value); - result.hasExternals = true; - } - else if ('data:image/' === value.slice(0, 11)) - { - setAttribute('src', value); } else { @@ -323,7 +326,7 @@ export const } } else if (/^(https?:)?\/\//.test(lowerUrl)) { result.hasExternals = true; - urls_remote.push([property, useProxy ? proxy(found) : value]); + urls_remote.push([property, found]); } else if ('data:image/' === lowerUrl.slice(0, 11)) { oStyle[property] = value; } else { diff --git a/dev/Model/Message.js b/dev/Model/Message.js index 21ad3bac8..93a414ebc 100644 --- a/dev/Model/Message.js +++ b/dev/Model/Message.js @@ -3,10 +3,10 @@ import ko from 'ko'; import { MessagePriority } from 'Common/EnumsUser'; import { i18n } from 'Common/Translator'; -import { doc } from 'Common/Globals'; +import { doc, SettingsGet } from 'Common/Globals'; import { encodeHtml, plainToHtml, cleanHtml } from 'Common/Html'; import { isArray, arrayLength, forEachObjectEntry } from 'Common/Utils'; -import { serverRequestRaw } from 'Common/Links'; +import { serverRequestRaw, proxy } from 'Common/Links'; import { FolderUserStore } from 'Stores/User/Folder'; import { SettingsUserStore } from 'Stores/User/Settings'; @@ -606,16 +606,18 @@ export class MessageModel extends AbstractModel { this.hasImages(false); body.rlHasImages = false; - let attr = 'data-x-src'; - body.querySelectorAll('[' + attr + ']').forEach(node => { - if (node.matches('img')) { - node.loading = 'lazy'; - } - node.src = node.getAttribute(attr); + let attr = 'data-x-src', + src, useProxy = !!SettingsGet('UseLocalProxyForExternalImages'); + body.querySelectorAll('img[' + attr + ']').forEach(node => { + node.loading = 'lazy'; + src = node.getAttribute(attr); + node.src = useProxy ? proxy(src) : src; }); body.querySelectorAll('[data-x-style-url]').forEach(node => { - JSON.parse(node.dataset.xStyleUrl).forEach(data => node.style[data[0]] = "url('" + data[1] + "')"); + JSON.parse(node.dataset.xStyleUrl).forEach(data => + node.style[data[0]] = "url('" + (useProxy ? proxy(data[1]) : data[1]) + "')" + ); }); } }