diff --git a/background.js b/background.js index b312eb3..3c8a881 100644 --- a/background.js +++ b/background.js @@ -10,19 +10,12 @@ async function handleClick(tab, e) { const imgURL = await browser.tabs.captureTab(tab.id); - const selecteds = await browser.tabs.executeScript( - tab.id, - { - code: 'getSelection().toString()', - }, - ); - const selected = selecteds.filter(x => x).join('\n'); - let noteParts = [ ``, `${escapeHTML(tab.url)}`, ]; + const selected = await getSelectedText(tab.id); if (selected) { noteParts.push(`\n\n${escapeHTML(selected)}`); } @@ -133,21 +126,8 @@ async function create(cfg, task) { } async function attach(cfg, task) { - const [_, type, base64] = task.attach.match(reData); - const bytes = atob(base64); - - const arr = new Uint8Array(bytes.length); - for (let i = 0; i < bytes.length; i++) { - arr[i] = bytes.charCodeAt(i); - } - const blob = new Blob( - [arr], - { - type: type, - }, - ); - const data = new FormData(); + const blob = dataURLToBlob(task.attach); data.append('file', blob, task.filename); const attachResp = await fetch( @@ -167,6 +147,34 @@ async function attach(cfg, task) { } } +async function getSelectedText(tabId) { + const selecteds = await browser.tabs.executeScript( + tabId, + { + code: 'getSelection().toString()', + }, + ); + + return selecteds.filter(x => x).join('\n'); +} + +function dataURLToBlob(url) { + const [_, type, base64] = url.match(reData); + const bytes = atob(base64); + + const arr = new Uint8Array(bytes.length); + for (let i = 0; i < bytes.length; i++) { + arr[i] = bytes.charCodeAt(i); + } + + return new Blob( + [arr], + { + type: type, + }, + ); +} + function escapeHTML(unsafe) { const div = document.createElement('div'); div.innerText = unsafe;