console.log("contentscript.js started!"); // get date email was received on function extractDate() { console.log("contentscript.js: this is extractDate()"); // get element containing date from mail list const dateElement = document.querySelector(".samoware-mail-list__item_mode_active .samoware-mail-list__time"); // robustify if ( dateElement === null ) { return "nodate"; } // check if date is actually a time and return today's date if ( dateElement.innerText.includes(":") ) { return getTodaysDate(); } // parse date string const dateArray = dateElement.innerText.split("/"); const yyyy = "20" + String(dateArray.pop()); const mm = String(dateArray.pop()).padStart(2, '0'); const dd = String(dateArray.pop()).padStart(2, '0'); // log value and return console.log(`contentscript.js: date is ${yyyy + mm + dd}`); return yyyy + mm + dd; } function getTodaysDate() { let today = new Date(); let yyyy = today.getFullYear(); let mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0! let dd = String(today.getDate()).padStart(2, '0'); // log value and return console.log(`contentscript.js: today's date is ${yyyy + mm + dd}`); return yyyy + mm + dd; } // execute script regardless of message content function handleReceivedMessage(message) { // log received message console.log(`contentscript.js received a message with content ${message}`); // get date email was received on const date = extractDate(); // get urls and filenames const urlsAndFilenames = extractUrlsAndFilenames(); console.log(`contentscript.js: URLs and filenames extracted -> ${JSON.stringify(urlsAndFilenames)}`); // trigger click on print button clickPrintButton(); // return data as the resolved Promise's payload return Promise.resolve({ date: date, urlsAndFilenames: urlsAndFilenames }); } // extract URL and filename for each mail attachment function extractUrlsAndFilenames() { console.log("contentscript.js: this is extractUrlsAndFilenames()"); // get the correct frame const frame = document.querySelector("iframe.js-mail-content"); // get all divs containing attachments const divs = frame.contentWindow.document.body.querySelectorAll("div.samoware-mail-message__attach__item[attachment-ref]"); // loop over divs and extract attachment information let urlsAndFilenames = []; divs.forEach((div) => { // get url const url = div.getAttribute("attachment-ref"); // get filename let filename = div.getAttribute("file-name"); // if filename is null, derive it from url if (!filename) { const splitUrl = url.split("/"); filename = splitUrl[splitUrl.length - 1]; } urlsAndFilenames.push({ url: url, filename: filename }); }); return urlsAndFilenames; } // trigger a click event on samoware's print button function clickPrintButton() { const printElement = document.querySelector('li[ng-click="printMessage(selectedMessage)"]'); printElement.click(); } browser.runtime.onMessage.addListener(handleReceivedMessage);