79 lines
2.3 KiB
JavaScript
79 lines
2.3 KiB
JavaScript
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 enable = this.querySelector('#enable').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('#enable').checked = settings.enable || true;
|
|
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); |