function smoothTextChange(element, newText) { // Temporarily hide the element element.classList.add('hide'); setTimeout(() => { element.innerText = newText; element.classList.remove('hide'); }, 500); // Wait for the transition to finish } (async function() { const $version = await new Promise(r => chrome.management.getSelf(self => r(self.version))); document.getElementById("version").innerText = `v${$version}`; await chrome.storage.local.get().then(items => { document.getElementById("activate").checked = items["cfg_activate"] || false; document.getElementById("username").value = items["cfg_username"] || ""; document.getElementById("password").value = items["cfg_password"] || ""; document.getElementById("frequency").value = items["cfg_frequency"] || 1; document.getElementById("frequency_info").innerText = items["cfg_frequency"] || 1; document.getElementById("status").innerText = items["ctx_statusMsg"] || "unknown"; let currentAppt = items["ctx_currentAppt"] || {"consulate": "somewhere", "date": "some time"}; document.getElementById("currApptConsulate").innerText = currentAppt["consulate"]; document.getElementById("currApptDate").innerText = currentAppt["date"]; document.getElementById("deltaAppt").value = items["cfg_deltaAppt"] || 1; document.getElementById("deltaNow").value = items["cfg_deltaNow"] || 1; }); // update frequency value chrome.storage.onChanged.addListener((changes, area) => { if (changes.cfg_frequency) document.getElementById("frequency_info").innerText = changes.cfg_frequency.newValue; }); // update status chrome.storage.onChanged.addListener((changes, area) => { if (changes.ctx_statusMsg) smoothTextChange(document.getElementById("status"), changes.ctx_statusMsg.newValue); }); // activate checkbox document.getElementById("activate").addEventListener("change", async e => { await chrome.storage.local.set({ "cfg_activate": e.target.checked }); }); // credentials let usernameField = document.getElementById("username"); let passwordField = document.getElementById("password"); let showPasswordButton = document.getElementById("showPassword"); let saveCredsButton = document.getElementById("saveButton"); let saveStatusElement = document.getElementById("saveStatus"); async function save_credentials() { await chrome.storage.local.set({ "cfg_username": usernameField.value, "cfg_password": passwordField.value }); saveStatusElement.classList.add("show"); setTimeout(() => { saveStatusElement.classList.remove("show"); }, 2000); } usernameField.addEventListener("keypress", async e => { if (e.key === "Enter") { await save_credentials(); } }); passwordField.addEventListener("keypress", async e => { if (e.key === "Enter") { await save_credentials(); } }); saveCredsButton.addEventListener("click", async () => { await save_credentials(); await chrome.storage.local.set({ "ctx_signinAttempts": 0 }); }); showPasswordButton.addEventListener("mousedown", function() { passwordField.type = "text"; }); showPasswordButton.addEventListener("mouseup", function() { passwordField.type = "password"; }); // range sliders document.getElementById("frequency").addEventListener("input", function() { chrome.storage.local.set({ cfg_frequency: this.value }); }); document.getElementById("deltaAppt").addEventListener("input", function() { chrome.storage.local.set({ cfg_deltaAppt: this.value }); }); document.getElementById("deltaNow").addEventListener("change", function() { chrome.storage.local.set({ cfg_deltaNow: this.value }); }); // consulates await chrome.storage.local.get(['cfg_consulates', 'ctx_consulates']).then((result) => { let consCfg = result['cfg_consulates']; let consCtx = result['ctx_consulates']; let html = `
| City | Current Date | Best Date | Book | |
|---|---|---|---|---|
|
|
${c} | ${consCtx[c].currentDate || "-"} | ${consCtx[c].bestDate || "-"} |
|