Completely re-structured the project from scratch, wrote a better bootstrap script, changed configuration format to yaml, improved Caddyfile, and more. #15 #16 #20
This commit is contained in:
parent
0012214f9b
commit
5572fec9c1
91 changed files with 739 additions and 1345 deletions
|
@ -1,3 +0,0 @@
|
|||
setInterval(() => {
|
||||
location.reload();
|
||||
}, 1000*60*2); // reload after 2 minutes
|
|
@ -1,30 +0,0 @@
|
|||
{
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
// get all customnumberinput Elements
|
||||
let customNumberInputElements = document.getElementsByClassName("customnumberinput");
|
||||
// Add Event Handler to the elements of the customnumberinputs
|
||||
[...customNumberInputElements].forEach(element => {
|
||||
// number input
|
||||
let numberFieldElement = element.getElementsByClassName("customnumberinput-field")[0];
|
||||
// minus button
|
||||
element.getElementsByClassName("customnumberinput-minus")[0].addEventListener("click", () => {
|
||||
alterCustomNumberField(numberFieldElement, -1)
|
||||
});
|
||||
// plus button
|
||||
element.getElementsByClassName("customnumberinput-plus")[0].addEventListener("click", () => {
|
||||
alterCustomNumberField(numberFieldElement, +1)
|
||||
});
|
||||
})
|
||||
})
|
||||
|
||||
function alterCustomNumberField(numberFieldElement, n) {
|
||||
numberFieldElement.value = Math.min(
|
||||
Math.max(
|
||||
(parseInt(numberFieldElement.value) + n), numberFieldElement.min || Number.MIN_VALUE
|
||||
),
|
||||
numberFieldElement.max || Number.MAX_VALUE
|
||||
);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
document.addEventListener("DOMContentLoaded", () => {
|
||||
|
||||
// elements
|
||||
|
||||
let depositForm = document.getElementById("depositform");
|
||||
let statusInfo = document.getElementById("statusinfo");
|
||||
let depositSubmitButton = document.getElementById("depositsubmitbtn");
|
||||
|
||||
// event listener for deposit form
|
||||
// this implements a custom submit method
|
||||
|
||||
depositForm.addEventListener("submit", (event) => {
|
||||
|
||||
depositSubmitButton.disabled = true;
|
||||
|
||||
event.preventDefault(); // Don't do the default submit action!
|
||||
|
||||
let xhr = new XMLHttpRequest();
|
||||
let formData = new FormData(depositForm);
|
||||
|
||||
xhr.addEventListener("load", (event) => {
|
||||
|
||||
status_ = event.target.status;
|
||||
response_ = event.target.responseText;
|
||||
|
||||
if (status_ == 200 && response_ == "success") {
|
||||
statusInfo.innerText = "Success. Redirecting soon.";
|
||||
window.location.replace("/");
|
||||
}
|
||||
else {
|
||||
statusInfo.classList.add("errortext");
|
||||
statusInfo.innerText = "An error occured. Redirecting in 5 seconds...";
|
||||
window.setTimeout(() => { window.location.replace("/") }, 5000);
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
xhr.addEventListener("error", (event) => {
|
||||
statusInfo.classList.add("errortext");
|
||||
statusInfo.innerText = "An error occured. Redirecting in 5 seconds...";
|
||||
window.setTimeout(() => { window.location.replace("/") }, 5000);
|
||||
})
|
||||
|
||||
xhr.open("POST", "/api/deposit");
|
||||
xhr.send(formData);
|
||||
|
||||
});
|
||||
|
||||
})
|
|
@ -1 +0,0 @@
|
|||
window.location.replace("/");
|
|
@ -1,87 +0,0 @@
|
|||
(() => {
|
||||
|
||||
// Define variables
|
||||
|
||||
let usernameInputElement;
|
||||
let passwordInputElement;
|
||||
let submitButton;
|
||||
let passwordOverlayElement;
|
||||
let pwOverlayCancelButton;
|
||||
let userlistButtons;
|
||||
let pinpadButtons;
|
||||
let userlistContainerElement;
|
||||
|
||||
|
||||
// Add event listeners after DOM Content loaded
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
|
||||
// elements
|
||||
|
||||
usernameInputElement = document.getElementById("id_username");
|
||||
passwordInputElement = document.getElementById("id_password");
|
||||
submitButton = document.getElementById("submit_login");
|
||||
passwordOverlayElement = document.getElementById("passwordoverlaycontainer");
|
||||
pwOverlayCancelButton = document.getElementById("pwocancel");
|
||||
userlistContainerElement = document.getElementById("userlistcontainer");
|
||||
|
||||
userlistButtons = document.getElementsByClassName("userlistbutton");
|
||||
pinpadButtons = document.getElementsByClassName("pinpadbtn");
|
||||
|
||||
// event listeners
|
||||
|
||||
// [...<html-collection>] converts an html collection to an array
|
||||
|
||||
[...userlistButtons].forEach(element => {
|
||||
element.addEventListener("click", () => {
|
||||
set_username(element.dataset.username);
|
||||
show_password_overlay();
|
||||
})
|
||||
});
|
||||
|
||||
[...pinpadButtons].forEach(element => {
|
||||
element.addEventListener("click", () => {
|
||||
pinpad_press(element.dataset.btn);
|
||||
})
|
||||
})
|
||||
|
||||
pwOverlayCancelButton.addEventListener("click", () => {
|
||||
hide_password_overlay();
|
||||
});
|
||||
|
||||
})
|
||||
|
||||
|
||||
function set_username(username) {
|
||||
usernameInputElement.value = username;
|
||||
}
|
||||
|
||||
function show_password_overlay() {
|
||||
|
||||
window.scrollTo(0, 0);
|
||||
passwordOverlayElement.classList.remove("nodisplay");
|
||||
userlistContainerElement.classList.add("nodisplay");
|
||||
|
||||
}
|
||||
|
||||
function hide_password_overlay() {
|
||||
|
||||
passwordOverlayElement.classList.add("nodisplay");
|
||||
userlistContainerElement.classList.remove("nodisplay");
|
||||
passwordInputElement.value = "";
|
||||
|
||||
}
|
||||
|
||||
function pinpad_press(key) {
|
||||
if (key == "enter") {
|
||||
submitButton.click();
|
||||
}
|
||||
else if (key == "x") {
|
||||
passwordInputElement.value = "";
|
||||
}
|
||||
else {
|
||||
passwordInputElement.value += key;
|
||||
}
|
||||
}
|
||||
|
||||
})()
|
|
@ -1,21 +0,0 @@
|
|||
document.addEventListener("DOMContentLoaded", () => {
|
||||
|
||||
let dropdownmenuElement = document.getElementById("dropdownmenu");
|
||||
let dropdownmenuButtonElement = document.getElementById("dropdownmenu-button");
|
||||
|
||||
if (dropdownmenuButtonElement != null) {
|
||||
|
||||
dropdownmenuButtonElement.addEventListener("click", () => {
|
||||
|
||||
if (dropdownmenuElement.classList.contains("dropdownvisible")) {
|
||||
dropdownmenuElement.classList.remove("dropdownvisible");
|
||||
}
|
||||
else {
|
||||
dropdownmenuElement.classList.add("dropdownvisible");
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
})
|
|
@ -1,82 +0,0 @@
|
|||
document.addEventListener("DOMContentLoaded", () => {
|
||||
|
||||
// elements
|
||||
|
||||
let orderNumberofdrinksInput = document.getElementById("numberofdrinks");
|
||||
let orderNumberofdrinksBtnA = document.getElementById("numberofdrinks-btn-minus");
|
||||
let orderNumberofdrinksBtnB = document.getElementById("numberofdrinks-btn-plus");
|
||||
let orderSumElement = document.getElementById("ordercalculatedsum");
|
||||
|
||||
let orderFormElement = document.getElementById("orderform");
|
||||
let statusInfoElement = document.getElementById("statusinfo");
|
||||
let orderSubmitButton = document.getElementById("ordersubmitbtn");
|
||||
|
||||
|
||||
// calculate & display sum
|
||||
|
||||
let orderPricePerDrink = parseFloat(document.getElementById("priceperdrink").dataset.drinkPrice);
|
||||
|
||||
function calculateAndDisplaySum() {
|
||||
|
||||
setTimeout(() => {
|
||||
|
||||
let numberOfDrinks = parseFloat(orderNumberofdrinksInput.value);
|
||||
if (isNaN(numberOfDrinks)) {
|
||||
numberOfDrinks = 1;
|
||||
}
|
||||
let calculated_sum = orderPricePerDrink * numberOfDrinks;
|
||||
orderSumElement.innerText = new Intl.NumberFormat(undefined, {minimumFractionDigits: 2}).format(calculated_sum);
|
||||
|
||||
}, 25);
|
||||
|
||||
}
|
||||
|
||||
orderNumberofdrinksInput.addEventListener("input", calculateAndDisplaySum);
|
||||
orderNumberofdrinksBtnA.addEventListener("click", calculateAndDisplaySum);
|
||||
orderNumberofdrinksBtnB.addEventListener("click", calculateAndDisplaySum);
|
||||
|
||||
|
||||
// custom submit method
|
||||
|
||||
orderFormElement.addEventListener("submit", (event) => {
|
||||
|
||||
orderSubmitButton.disabled = true;
|
||||
|
||||
event.preventDefault(); // Don't do the default submit action!
|
||||
|
||||
if (isNaN(parseFloat(orderNumberofdrinksInput.value))) {
|
||||
orderNumberofdrinksInput.value = 1;
|
||||
}
|
||||
|
||||
let xhr = new XMLHttpRequest();
|
||||
let formData = new FormData(orderFormElement);
|
||||
|
||||
xhr.addEventListener("load", (event) => {
|
||||
|
||||
status_ = event.target.status;
|
||||
response_ = event.target.responseText;
|
||||
|
||||
if (status_ == 200 && response_ == "success") {
|
||||
statusInfoElement.innerText = "Success.";
|
||||
window.location.replace("/");
|
||||
}
|
||||
else {
|
||||
statusInfoElement.classList.add("errortext");
|
||||
statusInfoElement.innerText = "An error occured.";
|
||||
window.setTimeout(() => { window.location.reload() }, 5000);
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
xhr.addEventListener("error", (event) => {
|
||||
statusInfoElement.classList.add("errortext");
|
||||
statusInfoElement.innerText = "An error occured.";
|
||||
window.setTimeout(() => { window.location.reload() }, 5000);
|
||||
})
|
||||
|
||||
xhr.open("POST", "/api/order-drink");
|
||||
xhr.send(formData);
|
||||
|
||||
});
|
||||
|
||||
})
|
|
@ -1,56 +0,0 @@
|
|||
document.addEventListener("DOMContentLoaded", () => {
|
||||
|
||||
// elements
|
||||
|
||||
let supplyDescriptionElement = document.getElementById("supplydescription");
|
||||
let supplyPriceElement = document.getElementById("supplyprice");
|
||||
|
||||
let supplyFormElement = document.getElementById("supplyform");
|
||||
let statusInfoElement = document.getElementById("statusinfo");
|
||||
let supplySubmitButton = document.getElementById("supplysubmitbtn");
|
||||
|
||||
// custom submit method
|
||||
|
||||
supplyFormElement.addEventListener("submit", (event) => {
|
||||
|
||||
supplySubmitButton.disabled = true;
|
||||
|
||||
event.preventDefault(); // Don't do the default submit action!
|
||||
|
||||
if (isNaN(parseFloat(supplyPriceElement.value)) || supplyDescriptionElement.value == "") {
|
||||
statusInfoElement.innerText = "Please enter a description and price."
|
||||
supplySubmitButton.disabled = false;
|
||||
}
|
||||
|
||||
let xhr = new XMLHttpRequest();
|
||||
let formData = new FormData(supplyFormElement);
|
||||
|
||||
xhr.addEventListener("load", (event) => {
|
||||
|
||||
status_ = event.target.status;
|
||||
response_ = event.target.responseText;
|
||||
|
||||
if (status_ == 200 && response_ == "success") {
|
||||
statusInfoElement.innerText = "Success.";
|
||||
window.location.replace("/");
|
||||
}
|
||||
else {
|
||||
statusInfoElement.classList.add("errortext");
|
||||
statusInfoElement.innerText = "An error occured.";
|
||||
window.setTimeout(() => { window.location.reload() }, 5000);
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
xhr.addEventListener("error", (event) => {
|
||||
statusInfoElement.classList.add("errortext");
|
||||
statusInfoElement.innerText = "An error occured.";
|
||||
window.setTimeout(() => { window.location.reload() }, 5000);
|
||||
})
|
||||
|
||||
xhr.open("POST", "/api/supply");
|
||||
xhr.send(formData);
|
||||
|
||||
});
|
||||
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue