2024-04-20 05:14:53 +00:00
|
|
|
(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["__activate"] || false;
|
|
|
|
|
document.getElementById("username").value = items["__username"] || "";
|
|
|
|
|
document.getElementById("password").value = items["__password"] || "";
|
|
|
|
|
document.getElementById("frequency").value = items["__frequency"] || 1;
|
2024-04-24 16:46:56 +00:00
|
|
|
document.getElementById("frequency_info").innerText = items["__frequency"] || 1;
|
2024-04-21 04:03:26 +00:00
|
|
|
document.getElementById("status").innerText = items["__status"] || "unknown";
|
2024-04-24 22:12:45 +00:00
|
|
|
let currentAppt = items["__currentAppt"] || {"consulate": "somewhere", "date": "some time"};
|
2024-04-24 07:23:35 +00:00
|
|
|
document.getElementById("currApptConsulate").innerText = currentAppt["consulate"];
|
|
|
|
|
document.getElementById("currApptDate").innerText = currentAppt["date"];
|
2024-04-22 09:56:06 +00:00
|
|
|
document.getElementById("deltaAppt").value = items["__deltaAppt"] || 1;
|
|
|
|
|
document.getElementById("deltaNow").value = items["__deltaNow"] || 1;
|
2024-04-20 05:14:53 +00:00
|
|
|
});
|
|
|
|
|
|
2024-04-24 22:12:19 +00:00
|
|
|
// update frequency value
|
2024-04-20 05:14:53 +00:00
|
|
|
chrome.storage.onChanged.addListener((changes, area) => {
|
|
|
|
|
if (changes.__frequency)
|
2024-04-22 09:56:06 +00:00
|
|
|
document.getElementById("frequency_info").innerText = changes.__frequency.newValue;
|
2024-04-20 05:14:53 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// activate checkbox
|
|
|
|
|
document.getElementById("activate").addEventListener("change", async e => {
|
|
|
|
|
await chrome.storage.local.set({ "__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({
|
|
|
|
|
"__username": usernameField.value,
|
|
|
|
|
"__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();
|
2024-04-22 07:19:26 +00:00
|
|
|
await chrome.storage.local.set({ "__signinAttempts": 0 });
|
2024-04-20 05:14:53 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
showPasswordButton.addEventListener("mousedown", function() {
|
|
|
|
|
passwordField.type = "text";
|
|
|
|
|
});
|
|
|
|
|
showPasswordButton.addEventListener("mouseup", function() {
|
|
|
|
|
passwordField.type = "password";
|
|
|
|
|
});
|
|
|
|
|
|
2024-04-22 09:56:06 +00:00
|
|
|
// range sliders
|
|
|
|
|
document.getElementById("frequency").addEventListener("input", function() {
|
2024-04-20 05:14:53 +00:00
|
|
|
chrome.storage.local.set({ __frequency: this.value });
|
|
|
|
|
});
|
2024-04-22 09:56:06 +00:00
|
|
|
document.getElementById("deltaAppt").addEventListener("input", function() {
|
|
|
|
|
chrome.storage.local.set({ __deltaAppt: this.value });
|
|
|
|
|
});
|
|
|
|
|
document.getElementById("deltaNow").addEventListener("change", function() {
|
|
|
|
|
chrome.storage.local.set({ __deltaNow: this.value });
|
|
|
|
|
});
|
2024-04-20 05:14:53 +00:00
|
|
|
|
2024-04-24 22:12:19 +00:00
|
|
|
// consulates
|
|
|
|
|
await chrome.storage.local.get(['__consulates']).then((result) => {
|
|
|
|
|
let consulates = result['__consulates'];
|
|
|
|
|
|
2024-04-24 23:33:16 +00:00
|
|
|
let html = `
|
|
|
|
|
<table class="table table-striped">
|
|
|
|
|
<thead>
|
|
|
|
|
<tr>
|
|
|
|
|
<th scope="col"></th>
|
|
|
|
|
<th scope="col">City</th>
|
|
|
|
|
<th scope="col" style="white-space: nowrap;">Current Date</th>
|
|
|
|
|
<th scope="col" style="white-space: nowrap;">Best Date</th>
|
|
|
|
|
<th scope="col">Autobook</th>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
`
|
2024-04-24 22:12:19 +00:00
|
|
|
for (let c in consulates) {
|
|
|
|
|
let cSelected = consulates[c].isSelected === true ? "checked" : "";
|
|
|
|
|
let cAutobook = consulates[c].autobook === true ? "checked" : "";
|
|
|
|
|
let cId = consulates[c].id;
|
|
|
|
|
html += `
|
2024-04-24 23:33:16 +00:00
|
|
|
<tr>
|
|
|
|
|
<td>
|
2024-04-24 22:12:19 +00:00
|
|
|
<div class="form-check form-checkbox" style="text-align: left;">
|
|
|
|
|
<input class="form-check-input" type="checkbox" role="switch" id="isSelected-${cId}" ${cSelected}>
|
|
|
|
|
</div>
|
2024-04-24 23:33:16 +00:00
|
|
|
</td>
|
|
|
|
|
<td style="white-space: nowrap;">${c}</td>
|
|
|
|
|
<td style="white-space: nowrap;"><span id="currentDate-${cId}">${consulates[c].currentDate || "-"}</span></td>
|
|
|
|
|
<td style="white-space: nowrap;"><span id="bestDate-${cId}">${consulates[c].bestDate || "-"}</span></td>
|
|
|
|
|
<td>
|
2024-04-24 22:12:19 +00:00
|
|
|
<div class="form-check form-switch" style="text-align: left;">
|
|
|
|
|
<input class="form-check-input" type="checkbox" role="switch" id="autobook-${cId}" ${cAutobook}>
|
2024-04-24 23:33:16 +00:00
|
|
|
<!--<label class="form-check-label" for="autobook-${cId}">Autobook</label>-->
|
2024-04-24 22:12:19 +00:00
|
|
|
</div>
|
2024-04-24 23:33:16 +00:00
|
|
|
</td>
|
|
|
|
|
</tr>
|
2024-04-24 22:12:19 +00:00
|
|
|
`;
|
|
|
|
|
}
|
2024-04-24 23:33:16 +00:00
|
|
|
html += `</tbody></table>`;
|
2024-04-24 22:12:19 +00:00
|
|
|
document.getElementById('consulatesConfig').innerHTML = html;
|
|
|
|
|
|
|
|
|
|
for (let c in consulates) {
|
|
|
|
|
let cId = consulates[c].id;
|
|
|
|
|
document.getElementById(`isSelected-${cId}`).addEventListener("change", async e => {
|
|
|
|
|
consulates[c].isSelected = e.target.checked;
|
|
|
|
|
await chrome.storage.local.set({ "__consulates": consulates });
|
|
|
|
|
});
|
|
|
|
|
document.getElementById(`autobook-${cId}`).addEventListener("change", async e => {
|
|
|
|
|
consulates[c].autobook = e.target.checked;
|
|
|
|
|
await chrome.storage.local.set({ "__consulates": consulates });
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
2024-04-24 07:23:35 +00:00
|
|
|
// reset button
|
|
|
|
|
document.getElementById("resetButton").addEventListener("click", async () => {
|
|
|
|
|
if (confirm("Are you sure you want to reset?")) {
|
|
|
|
|
await chrome.storage.local.get().then(items => {
|
|
|
|
|
chrome.storage.local.clear();
|
|
|
|
|
// keep user parameters
|
|
|
|
|
chrome.storage.local.set({
|
|
|
|
|
"__activate": items["__activate"] || false,
|
|
|
|
|
"__username": items["__username"] || "",
|
|
|
|
|
"__password": items["__password"] || "",
|
|
|
|
|
"__frequency": items["__frequency"] || 1,
|
|
|
|
|
"__deltaAppt": items["__deltaAppt"] || 1,
|
|
|
|
|
"__deltaNow": items["__deltaNow"] || 1,
|
|
|
|
|
"__autobook": items["__autobook"] || false,
|
|
|
|
|
});
|
|
|
|
|
});
|
2024-04-24 15:51:43 +00:00
|
|
|
document.getElementById("status").innerText = "unknown";
|
2024-04-24 22:15:10 +00:00
|
|
|
document.getElementById("currApptConsulate").innerText = "somewhere";
|
|
|
|
|
document.getElementById("currApptDate").innerText = "some time";
|
|
|
|
|
document.getElementById('consulatesConfig').innerHTML = "No consulates found.";
|
2024-04-24 15:51:43 +00:00
|
|
|
|
|
|
|
|
document.getElementById("resetStatus").classList.add("show");
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
document.getElementById("resetStatus").classList.remove("show");
|
|
|
|
|
}, 2000);
|
|
|
|
|
|
2024-04-24 07:23:35 +00:00
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// show config button
|
|
|
|
|
document.getElementById("showConfigButton").addEventListener("click", async () => {
|
|
|
|
|
let config = await chrome.storage.local.get();
|
|
|
|
|
let configStr = JSON.stringify(config, null, 2);
|
|
|
|
|
let url = "data:text/plain;charset=utf-8," + encodeURIComponent(configStr);
|
|
|
|
|
chrome.tabs.create({ url: url });
|
|
|
|
|
});
|
|
|
|
|
|
2024-04-20 05:14:53 +00:00
|
|
|
})();
|