mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-09-23 08:46:07 +08:00
aa7ef91b0b
Summary: When you have your "Download attachments for new mail" setting set to "manually", inline images always appear broken with no explanation. This patch listens for the image load to fail and displays a button which queues the fetchFile task on click. This seemed like the best approach because it doesn't slow down the loading of the message with more fstats / lookups. (Seeing if the file has already been downloaded is an async operation) Test Plan: No specs atm Reviewers: evan, juan Reviewed By: juan Differential Revision: https://phab.nylas.com/D3313
42 lines
1.3 KiB
JavaScript
42 lines
1.3 KiB
JavaScript
import {Actions, Utils} from 'nylas-exports';
|
|
|
|
function _runOnImageNode(node) {
|
|
if (node.src && node.dataset.nylasFile) {
|
|
node.addEventListener('error', () => {
|
|
const file = JSON.parse(atob(node.dataset.nylasFile), Utils.registeredObjectReviver);
|
|
const initialDisplay = node.style.display;
|
|
const downloadButton = document.createElement('a');
|
|
downloadButton.classList.add('inline-download-prompt')
|
|
downloadButton.textContent = "Click to download inline image";
|
|
downloadButton.addEventListener('click', () => {
|
|
Actions.fetchFile(file);
|
|
node.parentNode.removeChild(downloadButton);
|
|
node.addEventListener('load', () => {
|
|
node.style.display = initialDisplay;
|
|
});
|
|
});
|
|
node.style.display = 'none';
|
|
node.parentNode.insertBefore(downloadButton, node);
|
|
});
|
|
}
|
|
}
|
|
|
|
export function encodedAttributeForFile(file) {
|
|
return btoa(JSON.stringify(file, Utils.registeredObjectReplacer));
|
|
}
|
|
|
|
export function addInlineDownloadPrompts(doc) {
|
|
const imgTagWalker = document.createTreeWalker(doc.body, NodeFilter.SHOW_ELEMENT, {
|
|
acceptNode: (node) => {
|
|
if (node.nodeName === 'IMG') {
|
|
return NodeFilter.FILTER_ACCEPT;
|
|
}
|
|
return NodeFilter.FILTER_SKIP;
|
|
},
|
|
});
|
|
|
|
while (imgTagWalker.nextNode()) {
|
|
_runOnImageNode(imgTagWalker.currentNode);
|
|
}
|
|
}
|