updated admin page with more functionality, simplified burger menu and added many-to-many parent-child relationship
Build and Push Docker Image / build-and-push (pull_request) Successful in 59s
Python Code Quality / python-code-quality (pull_request) Successful in 10s
Python Test / python-test (pull_request) Successful in 17s

This commit is contained in:
Brian Bjarke Jensen
2025-11-10 22:58:52 +01:00
parent df28af880a
commit 402b5898bb
26 changed files with 952 additions and 564 deletions
+106
View File
@@ -0,0 +1,106 @@
/**
* Initializes the burger menu navigation
* @param {Object} options - Configuration options
* @param {boolean} options.includeHome - Whether to include Home menu item
* @param {boolean} options.includeFeedings - Whether to include Feedings menu item
* @param {boolean} options.includeDiapers - Whether to include Diapers menu item
* @param {boolean} options.includeSleep - Whether to include Sleep menu item
*/
function initBurgerMenu(options = {}) {
const {
includeHome = true,
includeFeedings = true,
includeDiapers = true,
includeSleep = true,
} = options;
// Create burger menu HTML
const burgerMenuHTML = `
<div class="burger-menu" id="burgerMenu">
<div></div>
<div></div>
<div></div>
</div>
<div class="menu-backdrop" id="menuBackdrop"></div>
<div class="menu-overlay" id="menuOverlay">
${includeHome ? '<div class="menu-item" id="menuHome">🏠 Home</div>' : ""}
${includeDiapers ? '<div class="menu-item" id="menuDiapers">🧷 Diapers</div>' : ""}
${includeFeedings ? '<div class="menu-item" id="menuFeedings">🍼 Feedings</div>' : ""}
${includeSleep ? '<div class="menu-item" id="menuSleep">😴 Sleep</div>' : ""}
<div class="menu-item" id="menuAddChild">👶 Add Child</div>
<div class="menu-item logout" id="menuLogout">🚪 Logout</div>
</div>
`;
// Insert menu at the beginning of body
document.body.insertAdjacentHTML("afterbegin", burgerMenuHTML);
// Get elements
const burgerMenu = document.getElementById("burgerMenu");
const menuOverlay = document.getElementById("menuOverlay");
const menuBackdrop = document.getElementById("menuBackdrop");
// Toggle menu function
function toggleMenu() {
menuOverlay.classList.toggle("open");
menuBackdrop.classList.toggle("open");
}
// Close menu function
function closeMenu() {
menuOverlay.classList.remove("open");
menuBackdrop.classList.remove("open");
}
// Event listeners for menu toggle
burgerMenu.addEventListener("click", toggleMenu);
menuBackdrop.addEventListener("click", closeMenu);
// Navigation event listeners
if (includeHome) {
document.getElementById("menuHome")?.addEventListener("click", () => {
window.location.href = "/";
});
}
document.getElementById("menuAddChild").addEventListener("click", () => {
window.location.href = "/add-child.html";
});
if (includeFeedings) {
document.getElementById("menuFeedings")?.addEventListener("click", () => {
window.location.href = "/feedings.html";
});
}
if (includeDiapers) {
document.getElementById("menuDiapers")?.addEventListener("click", () => {
window.location.href = "/diapers.html";
});
}
if (includeSleep) {
document.getElementById("menuSleep")?.addEventListener("click", () => {
window.location.href = "/sleep.html";
});
}
document.getElementById("menuLogout").addEventListener("click", () => {
closeMenu();
// Call the page's logout function if it exists, otherwise use default
if (typeof logout === "function") {
logout();
} else {
defaultLogout();
}
});
// Default logout function
function defaultLogout() {
localStorage.removeItem("access_token");
localStorage.removeItem("username");
window.location.href = "/login.html";
}
}