diff --git a/background.js b/background.js new file mode 100644 index 0000000..ef929f8 --- /dev/null +++ b/background.js @@ -0,0 +1,38 @@ +'use strict'; + +importScripts('libs/pdf-lib.min.js', 'parsers.js', 'pdf.js'); + +function errMsg(err) { + return String((err && err.message) || err); +} + +browser.runtime.onMessage.addListener((msg, sender, sendResponse) => { + if (msg && msg.type === 'scrape-study-load') { + browser.tabs.query({ active: true, currentWindow: true }) + .then((tabs) => { + const tab = tabs[0]; + if (!tab || tab.id == null) throw new Error('No active tab.'); + return browser.tabs.sendMessage(tab.id, { type: 'scrape-study-load' }); + }) + .then((data) => sendResponse(data)) + .catch((err) => sendResponse({ ok: false, error: errMsg(err) })); + return true; + } + + if (msg && msg.type === 'generate-pdf') { + generatePdf(msg.data) + .then(() => sendResponse({ ok: true })) + .catch((err) => sendResponse({ ok: false, error: errMsg(err) })); + return true; + } +}); + +async function generatePdf(data) { + const bytes = await ISMIStools.buildStudyLoadPdf(data); + const blob = new Blob([bytes], { type: 'application/pdf' }); + const url = URL.createObjectURL(blob); + const name = (data.header && data.header.fullName) || 'Student'; + const filename = 'Study Load - ' + name + '.pdf'; + await browser.downloads.download({ url, filename, saveAs: true }); + setTimeout(() => URL.revokeObjectURL(url), 10000); +}