Mailspring/internal_packages/message-list/lib/inline-download-prompts.es6

42 lines
1.3 KiB
Plaintext
Raw Normal View History

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);
}
}