Commit 2426f9b7 authored by JC Brand's avatar JC Brand

Only attempt loading img URL with filename and appropriate extension

updates #1228
parent e425f257
...@@ -82094,21 +82094,36 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_ ...@@ -82094,21 +82094,36 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
*/ */
const __ = _converse.__; const __ = _converse.__;
const list = obj.textContent.match(URL_REGEX) || []; const list = obj.textContent.match(URL_REGEX) || [];
return Promise.all(_.map(list, url => new Promise((resolve, reject) => isImage(url).then(function (img) { return Promise.all(_.map(list, url => new Promise((resolve, reject) => {
const i = new Image(); const uri = new URI(url),
i.src = img.src; filename = uri.filename(),
i.addEventListener('load', resolve); // We also resolve for non-images, otherwise the lower_filename = filename.toLowerCase();
// Promise.all resolves prematurely.
if (!_.includes(["https", "http"], uri.protocol().toLowerCase())) {
i.addEventListener('error', resolve); return resolve();
}
_.each(sizzle(`a[href="${url}"]`, obj), a => {
a.outerHTML = tpl_image({ if (lower_filename.endsWith('jpg') || lower_filename.endsWith('jpeg') || lower_filename.endsWith('png') || lower_filename.endsWith('gif') || lower_filename.endsWith('svg')) {
'url': url, return isImage(url).then(img => {
'label_download': __('Download') const i = new Image();
}); i.src = img.src;
}); i.addEventListener('load', resolve); // We also resolve for non-images, otherwise the
}).catch(resolve)))); // Promise.all resolves prematurely.
i.addEventListener('error', resolve);
const __ = _converse.__;
_.each(sizzle(`a[href="${url}"]`, obj), a => {
a.outerHTML = tpl_image({
'url': url,
'label_download': __('Download')
});
});
}).catch(resolve);
} else {
return resolve();
}
})));
}; };
u.renderFileURL = function (_converse, url) { u.renderFileURL = function (_converse, url) {
...@@ -288,23 +288,37 @@ ...@@ -288,23 +288,37 @@
const list = obj.textContent.match(URL_REGEX) || []; const list = obj.textContent.match(URL_REGEX) || [];
return Promise.all( return Promise.all(
_.map(list, (url) => _.map(list, (url) =>
new Promise((resolve, reject) => new Promise((resolve, reject) => {
isImage(url).then(function (img) { const uri = new URI(url),
const i = new Image(); filename = uri.filename(),
i.src = img.src; lower_filename = filename.toLowerCase();
i.addEventListener('load', resolve); if (!_.includes(["https", "http"], uri.protocol().toLowerCase())) {
// We also resolve for non-images, otherwise the return resolve();
// Promise.all resolves prematurely. }
i.addEventListener('error', resolve); if (lower_filename.endsWith('jpg') || lower_filename.endsWith('jpeg') ||
lower_filename.endsWith('png') || lower_filename.endsWith('gif') ||
_.each(sizzle(`a[href="${url}"]`, obj), (a) => { lower_filename.endsWith('svg')) {
a.outerHTML= tpl_image({
'url': url, return isImage(url).then(img => {
'label_download': __('Download') const i = new Image();
}) i.src = img.src;
}); i.addEventListener('load', resolve);
}).catch(resolve) // We also resolve for non-images, otherwise the
) // Promise.all resolves prematurely.
i.addEventListener('error', resolve);
const { __ } = _converse;
_.each(sizzle(`a[href="${url}"]`, obj), (a) => {
a.outerHTML= tpl_image({
'url': url,
'label_download': __('Download')
})
});
}).catch(resolve)
} else {
return resolve();
}
})
) )
) )
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment