Files
tom 89eb5d255d
Some checks failed
Tests / Run Go Tests (push) Failing after 1m23s
fixed #52
2025-10-08 12:59:47 +02:00

95 lines
2.3 KiB
JavaScript

function clearEditState() {
for (let e of document.querySelectorAll(".edit")) {
e.classList.remove("edit");
}
toggleAbsenceEdit(false);
}
function clearButtonState() {
for (let b of document.querySelectorAll(".change-button-component")) {
b.type = "button";
}
}
function editWorkday(element, event, id, isWorkDay) {
event.preventDefault();
let form = document.getElementById(id);
if (form == null) {
form = element
.closest(".grid-sub")
.querySelector(".all-booking-component > form");
}
clearEditState();
element.closest(".grid-sub").classList.add("edit");
toggleAbsenceEdit(!isWorkDay);
if (isWorkDay) {
element.classList.add("edit");
if (element.type == "button") {
for (let input of form.querySelectorAll("input, select")) {
input.disabled = false;
}
clearButtonState();
element.type = "submit";
} else {
form.submit();
}
} else {
const absenceForm = document.getElementById("absence_form");
if (id == 0) {
absenceForm.querySelector("[name=date_from]").value = form.id.replace(
"time-",
"",
);
absenceForm.querySelector("[name=date_to]").value = form.id.replace(
"time-",
"",
);
} else {
syncFields(form, absenceForm, [
"date_from",
"date_to",
"aw_type",
"aw_id",
]);
}
}
}
function toggleAbsenceEdit(state) {
const form = document.getElementById("absence_form");
if (state) {
form.classList.remove("hidden");
form.scrollIntoView({
behavior: "smooth",
block: "start",
inline: "nearest",
});
} else {
form.classList.add("hidden");
}
}
function syncFields(from, to, fieldsToSync) {
for (let field of fieldsToSync) {
const src = from.querySelector(`[name=${field}]`);
const target = to.querySelector(`[name=${field}]`);
if (!src || !target) return;
target.value = src.value;
}
}
function navigateWeek(element, event, direction) {
const dateInput = element.closest("form").querySelector("input[type=date]");
const date = dateInput.valueAsDate;
date.setDate(date.getDate() + 7 * direction);
date.setHours(10);
dateInput.valueAsDate = date;
}
function logoutUser() {
fetch("/user/logout", {}).then(() => globalThis.location.reload());
}