function luhnValidate(cardNumber) { cardNumber = String(cardNumber).replace(/[\s]/g, ""); let odd = false; let total = 0; let position, doubledPos; if (!/^[0-9]+$/.test(cardNumber)) { return false; } for (var i = cardNumber.length; i > 0; i--) { position = parseInt(cardNumber[i - 1]); if (!odd) { total += position; } else { doubledPos = position * 2; if (doubledPos > 9) { doubledPos -= 9; } total += doubledPos; } odd = !odd; } return (total !== 0 && (total % 10) === 0); } function putError(s){ document.querySelector('#errors').textContent += s; } function clearError(){ document.querySelector('#errors').textContent = ""; } async function saveOptions(ev) { clearError(); ev.preventDefault(); let bcNum = this.querySelector("#bcnum").value; if (!bcNum.length == 16 || !bcNum.startsWith("70814") || !luhnValidate(bcNum)) { putError("Your BahnCard number is not valid. Please make sure you haven't made any typos."); return; } let bDay = this.querySelector('#birthday').value; if (bDay == ""){ putError("Please enter a birthday."); return; } let autoContinue = this.querySelector('#autocontinue').checked; let options = { bcnum: bcNum, bday: bDay, autocontinue: autoContinue }; console.log("saving", options); browser.storage.sync.set(options).then(() => { document.querySelector('#success').textContent = "✔"; setTimeout(() => { document.querySelector('#success').textContent = ''; }, 5000); }) } async function restoreOptions() { // We do not save user data in managed storage. // let res = await browser.storage.managed.get('colour'); // document.querySelector("#managed-colour").innerText = res.colour; let settings = await browser.storage.sync.get(); console.log("restoring", settings); document.querySelector("#bcnum").value = settings.bcnum || ""; document.querySelector("#birthday").value = settings.bday || ""; document.querySelector("#autocontinue").checked = settings.autocontinue || false; } document.addEventListener('DOMContentLoaded', restoreOptions); document.querySelector("form").addEventListener("submit", saveOptions);