2022-08-09 19:20:02 +02:00
|
|
|
// @ts-ignore
|
|
|
|
const {$, doAfterLoad, footer, header, nav} = window.fwdekker;
|
|
|
|
|
|
|
|
|
2022-08-12 16:18:15 +02:00
|
|
|
function refreshTrackings() {
|
|
|
|
fetch("api.php?action=list-trackings")
|
2022-08-12 16:38:17 +02:00
|
|
|
.then(it => it.json())
|
|
|
|
.then(trackings => {
|
|
|
|
$("#trackings tbody").remove();
|
|
|
|
$("#trackings").append(document.createElement("tbody"));
|
|
|
|
|
|
|
|
const headerRow = document.createElement("tr");
|
|
|
|
const headerPersonName = document.createElement("th");
|
|
|
|
headerPersonName.innerText = "Person name";
|
|
|
|
const headerIsDeceased = document.createElement("th");
|
|
|
|
headerIsDeceased.innerText = "Deceased?";
|
|
|
|
const headerDelete = document.createElement("th");
|
|
|
|
headerRow.append(headerPersonName, headerIsDeceased, headerDelete);
|
|
|
|
$("#trackings tbody").append(headerRow);
|
|
|
|
|
|
|
|
trackings.forEach((tracking: any) => {
|
|
|
|
const trackingRow = document.createElement("tr");
|
|
|
|
const trackingPersonName = document.createElement("td");
|
|
|
|
trackingPersonName.innerText = tracking["person_name"];
|
|
|
|
const trackingIsDeceased = document.createElement("td");
|
|
|
|
trackingIsDeceased.innerText = tracking["is_deceased"] === 1 ? "yes" : "no";
|
|
|
|
const trackingDelete = document.createElement("td");
|
|
|
|
const trackingDeleteButton = document.createElement("button");
|
|
|
|
trackingDeleteButton.innerText = "remove";
|
|
|
|
trackingDeleteButton.addEventListener("click", () => {
|
|
|
|
$("#trackingsError").innerText = "";
|
|
|
|
fetch("api.php",
|
|
|
|
{
|
|
|
|
method: "post",
|
|
|
|
headers: {
|
|
|
|
"Accept": "application/json",
|
|
|
|
"Content-Type": "application/json",
|
|
|
|
},
|
|
|
|
body: JSON.stringify({
|
|
|
|
action: "delete-tracking",
|
|
|
|
token: $("#loginForm input[name=token]").value,
|
|
|
|
person_name: tracking["person_name"],
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.then(it => it.json())
|
|
|
|
.then(it => {
|
|
|
|
if (it !== true) {
|
|
|
|
$("#trackingsError").innerText = it;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
refreshTrackings();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
trackingDelete.append(trackingDeleteButton);
|
|
|
|
trackingRow.append(trackingPersonName, trackingIsDeceased, trackingDelete);
|
|
|
|
$("#trackings tbody").append(trackingRow);
|
|
|
|
});
|
|
|
|
|
|
|
|
const createRow = document.createElement("tr");
|
|
|
|
const createPersonName = document.createElement("td");
|
|
|
|
const createPersonInput = document.createElement("input");
|
|
|
|
const createPersonSubmit = document.createElement("button");
|
|
|
|
createPersonSubmit.innerText = "add";
|
|
|
|
createPersonSubmit.addEventListener("click", () => {
|
|
|
|
$("#trackingsError").innerText = "";
|
|
|
|
fetch("api.php",
|
|
|
|
{
|
|
|
|
method: "post",
|
|
|
|
headers: {
|
|
|
|
"Accept": "application/json",
|
|
|
|
"Content-Type": "application/json",
|
|
|
|
},
|
|
|
|
body: JSON.stringify({
|
|
|
|
action: "add-tracking",
|
|
|
|
token: $("#loginForm input[name=token]").value,
|
|
|
|
person_name: createPersonInput.value,
|
|
|
|
})
|
|
|
|
})
|
|
|
|
.then(it => it.json())
|
|
|
|
.then(it => {
|
|
|
|
if (it !== true) {
|
|
|
|
$("#trackingsError").innerText = it;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
refreshTrackings();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
createPersonName.append(createPersonInput, createPersonSubmit);
|
|
|
|
const createIsDeceased = document.createElement("td");
|
|
|
|
const createDelete = document.createElement("td");
|
|
|
|
createRow.append(createPersonName, createIsDeceased, createDelete);
|
|
|
|
$("#trackings tbody").append(createRow);
|
|
|
|
});
|
2022-08-12 16:18:15 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
doAfterLoad(async () => {
|
2022-08-09 19:20:02 +02:00
|
|
|
// Initialize template
|
|
|
|
$("#nav").appendChild(nav("/Tools/Death-Notifier/"));
|
|
|
|
$("#header").appendChild(header({
|
|
|
|
title: "Death Notifier",
|
|
|
|
description: "Get notified when a famous person dies"
|
|
|
|
}));
|
|
|
|
$("#footer").appendChild(footer({
|
|
|
|
vcsURL: "https://git.fwdekker.com/tools/death-notifier/",
|
|
|
|
version: "v%%VERSION_NUMBER%%"
|
|
|
|
}));
|
|
|
|
$("main").classList.remove("hidden");
|
2022-08-11 23:29:13 +02:00
|
|
|
|
2022-08-12 16:18:15 +02:00
|
|
|
// Workflow
|
|
|
|
const loginRow = $("#loginRow");
|
|
|
|
const trackingRow = $("#trackingRow");
|
|
|
|
const accountRow = $("#accountRow");
|
|
|
|
|
|
|
|
// TODO: Move common code to a Form class or sth... (or actually, wait with that until I have the table thingy
|
|
|
|
// implemented!)
|
|
|
|
$("#loginForm").addEventListener("submit", async () => {
|
|
|
|
$("#loginForm .error").innerText = "";
|
|
|
|
|
2022-08-12 16:38:17 +02:00
|
|
|
fetch("api.php",
|
|
|
|
{
|
|
|
|
method: "post",
|
|
|
|
headers: {
|
|
|
|
"Accept": "application/json",
|
|
|
|
"Content-Type": "application/json",
|
|
|
|
},
|
|
|
|
body: JSON.stringify({
|
|
|
|
action: "login",
|
|
|
|
// TODO: Deal with tokens in a smarter way. Allow refreshing them! Also remove duplication...
|
|
|
|
token: $("#loginForm input[name=token]").value,
|
|
|
|
email: $("#loginForm input[name=email]").value,
|
|
|
|
password: $("#loginForm input[name=password]").value,
|
|
|
|
})
|
2022-08-12 16:18:15 +02:00
|
|
|
})
|
2022-08-12 16:38:17 +02:00
|
|
|
.then(it => it.json())
|
|
|
|
.then(it => {
|
|
|
|
if (it !== true) {
|
|
|
|
$("#loginForm .error").innerText = it;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
$("#loginForm").reset();
|
|
|
|
loginRow.classList.add("hidden");
|
|
|
|
trackingRow.classList.remove("hidden");
|
|
|
|
accountRow.classList.remove("hidden");
|
|
|
|
refreshTrackings();
|
|
|
|
});
|
2022-08-12 16:18:15 +02:00
|
|
|
});
|
|
|
|
$("#registerForm").addEventListener("submit", async () => {
|
|
|
|
$("#registerForm .error").innerText = "";
|
|
|
|
|
2022-08-12 16:38:17 +02:00
|
|
|
fetch("api.php",
|
|
|
|
{
|
|
|
|
method: "post",
|
|
|
|
headers: {
|
|
|
|
"Accept": "application/json",
|
|
|
|
"Content-Type": "application/json",
|
|
|
|
},
|
|
|
|
body: JSON.stringify({
|
|
|
|
action: "register",
|
|
|
|
token: $("#registerForm input[name=token]").value,
|
|
|
|
email: $("#registerForm input[name=email]").value,
|
|
|
|
password: $("#registerForm input[name=password]").value,
|
|
|
|
password_confirm: $("#registerForm input[name=password_confirm]").value,
|
|
|
|
})
|
2022-08-12 16:18:15 +02:00
|
|
|
})
|
2022-08-12 16:38:17 +02:00
|
|
|
.then(it => it.json())
|
|
|
|
.then(it => {
|
|
|
|
if (it !== true) {
|
|
|
|
$("#registerForm .error").innerText = it;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
$("#registerForm").reset();
|
|
|
|
$("#registerForm .error").innerText = "Account created successfully! You may now log in.";
|
|
|
|
});
|
2022-08-12 16:18:15 +02:00
|
|
|
});
|
|
|
|
$("#logoutForm").addEventListener("submit", async () => {
|
|
|
|
$("#logoutForm .error").innerText = "";
|
|
|
|
|
2022-08-12 16:38:17 +02:00
|
|
|
fetch("api.php",
|
|
|
|
{
|
|
|
|
method: "post",
|
|
|
|
headers: {
|
|
|
|
"Accept": "application/json",
|
|
|
|
"Content-Type": "application/json",
|
|
|
|
},
|
|
|
|
body: JSON.stringify({
|
|
|
|
action: "logout",
|
|
|
|
token: $("#logoutForm input[name=token]").value,
|
|
|
|
})
|
2022-08-12 16:18:15 +02:00
|
|
|
})
|
2022-08-12 16:38:17 +02:00
|
|
|
.then(it => it.json())
|
|
|
|
.then(it => {
|
|
|
|
if (it !== true) {
|
|
|
|
$("#logoutForm .error").innerText = it;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
$("#logoutForm").reset();
|
|
|
|
loginRow.classList.remove("hidden");
|
|
|
|
trackingRow.classList.add("hidden");
|
|
|
|
accountRow.classList.add("hidden");
|
|
|
|
});
|
2022-08-12 16:18:15 +02:00
|
|
|
});
|
|
|
|
|
2022-08-12 16:38:17 +02:00
|
|
|
fetch("api.php?action=get-user-data")
|
|
|
|
.then(it => it.text())
|
|
|
|
.then(it => {
|
|
|
|
if (it === "\"not logged in\"") {
|
|
|
|
loginRow.classList.remove("hidden");
|
|
|
|
} else {
|
|
|
|
trackingRow.classList.remove("hidden");
|
|
|
|
accountRow.classList.remove("hidden");
|
|
|
|
refreshTrackings();
|
|
|
|
}
|
|
|
|
});
|
2022-08-09 19:20:02 +02:00
|
|
|
});
|