This commit is contained in:
2025-11-28 03:06:13 +01:00
parent b2be51d65e
commit 5de109b649
4 changed files with 273 additions and 363 deletions

View File

@@ -1,19 +1,9 @@
// public/assets/js/header.js
document.addEventListener("DOMContentLoaded", function () {
// --------------------------------------------------
// Sprachauflösung: basiert auf derselben Logik wie lang.js
//
// Priorität:
// a) ?lang= in der URL
// b) localStorage (usbcheck_lang)
// c) Browsersprache
// d) 'en' wenn vorhanden
// e) erste verfügbare Sprache
// --------------------------------------------------
const cfg = window.usbConfig || {};
const i18nCfg = cfg.i18n || {};
const availLangs = i18nCfg.available || {};
const availCodes = Object.keys(availLangs);
const cfg = window.usbConfig || {};
const i18nCfg = cfg.i18n || {};
const availLangs = i18nCfg.available || {};
const availCodes = Object.keys(availLangs);
function normalizeLang(code) {
if (!code) return "";
@@ -47,43 +37,30 @@ document.addEventListener("DOMContentLoaded", function () {
const url = new URL(window.location.href);
const urlLang = normalizeLang(url.searchParams.get("lang"));
// a) ?lang= aus der URL, wenn gültig
// 1) ?lang
if (urlLang && availCodes.includes(urlLang)) {
return urlLang;
}
// b) localStorage (vom lang.js gesetzt)
const stored = normalizeLang(localStorage.getItem("usbcheck_lang"));
if (stored && availCodes.includes(stored)) {
return stored;
}
if (stored && !availCodes.includes(stored)) {
localStorage.removeItem("usbcheck_lang");
}
// c) Browsersprache
// 2) Browsersprache
const browserLang = detectBrowserLang();
if (browserLang) {
return browserLang;
}
// d) Fallback: en, wenn vorhanden
// 3) EN
if (availCodes.includes("en")) {
return "en";
}
// e) Sonst erste verfügbare Sprache
if (availCodes.length > 0) {
return availCodes[0];
}
// f) absolute Notlösung
return "en";
}
// --------------------------------------------------
// LOGIN-BUTTON → /login mit redirect + lang
// --------------------------------------------------
// LOGIN-BUTTON
const loginBtn = document.getElementById("loginButton");
if (loginBtn) {
@@ -96,7 +73,6 @@ document.addEventListener("DOMContentLoaded", function () {
const lang = resolveCurrentLang();
// Wenn wir bereits auf /login sind → nur zum #auth scrollen
if (currentPath === "/login" || currentPath === "/login/") {
const authEl = document.getElementById("auth");
if (authEl) {
@@ -105,7 +81,6 @@ document.addEventListener("DOMContentLoaded", function () {
return;
}
// Sonst: auf Login-Seite mit lang + redirect-Parameter
const url = "/login/?lang=" + encodeURIComponent(lang) +
"&redirect=" + encodeURIComponent(redirect) +
"#auth";
@@ -114,9 +89,7 @@ document.addEventListener("DOMContentLoaded", function () {
});
}
// --------------------------------------------------
// AVATAR-MENÜ (userAvatar / userMenu)
// --------------------------------------------------
// AVATAR-MENÜ & LOGOUT wie gehabt (deine bestehende Logik)
const avatarBtn = document.getElementById("userAvatar");
const userMenu = document.getElementById("userMenu");
@@ -129,7 +102,6 @@ document.addEventListener("DOMContentLoaded", function () {
avatarBtn.setAttribute("aria-expanded", expanded ? "false" : "true");
});
// Klick außerhalb schließt Menü
document.addEventListener("click", function (event) {
if (userMenu.classList.contains("hidden")) {
return;
@@ -145,9 +117,6 @@ document.addEventListener("DOMContentLoaded", function () {
});
}
// --------------------------------------------------
// LOGOUT-MODAL
// --------------------------------------------------
const logoutButtons = document.querySelectorAll('[data-logout-link="true"]');
const backdrop = document.getElementById("logoutModalBackdrop");
const btnConfirm = document.getElementById("logoutConfirm");
@@ -182,7 +151,6 @@ document.addEventListener("DOMContentLoaded", function () {
showLogoutModal(href);
// Avatar-Menü beim Öffnen des Modals schließen
if (userMenu && !userMenu.classList.contains("hidden")) {
userMenu.classList.add("hidden");
if (avatarBtn) {
@@ -192,7 +160,6 @@ document.addEventListener("DOMContentLoaded", function () {
});
});
// Bestätigen → weiter zur Logout-URL
btnConfirm.addEventListener("click", function () {
if (logoutTarget) {
window.location.href = logoutTarget;
@@ -201,12 +168,10 @@ document.addEventListener("DOMContentLoaded", function () {
}
});
// Abbrechen → Modal schließen
btnCancel.addEventListener("click", function () {
hideLogoutModal();
});
// Klick auf Hintergrund schließt Modal (außer man klickt auf die Card)
backdrop.addEventListener("click", function (event) {
const card = backdrop.querySelector(".max-w-sm");
if (card && !card.contains(event.target)) {
@@ -214,7 +179,6 @@ document.addEventListener("DOMContentLoaded", function () {
}
});
// ESC-Taste schließt Modal
document.addEventListener("keydown", function (event) {
if (event.key === "Escape" && !backdrop.classList.contains("hidden")) {
hideLogoutModal();