98 lines
3.0 KiB
JavaScript
98 lines
3.0 KiB
JavaScript
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);
|