server_photo_s85js/public/js/pageControls.js
2026-08-11 08:45:04 +02:00

236 lines
6 KiB
JavaScript

// public/js/pageControls.js
// Controlli della pagina Galleria
(() => {
"use strict";
function initializeProtectedPage() {
const authLoader = document.getElementById("authLoader");
const app = document.getElementById("app");
const isAuthenticated =
window.AppAuth &&
typeof window.AppAuth.isLoggedIn === "function" &&
window.AppAuth.isLoggedIn();
console.log("[AUTH CHECK]", {
authenticated: isAuthenticated,
token: sessionStorage.getItem("token"),
user: window.AppAuth?.getUser?.(),
});
if (!isAuthenticated) {
sessionStorage.removeItem("token");
window.location.replace("/login?redirect=/");
return false;
}
document.body.classList.add("authenticated");
if (authLoader) {
authLoader.style.display = "none";
}
if (app) {
app.style.display = "block";
}
return true;
}
function initializeConfigButton() {
const configButton = document.getElementById("configBtn");
if (!configButton) {
return;
}
configButton.addEventListener("click", () => {
window.location.href = "/admin.html";
});
}
function initializeModeToggle() {
const modeToggle = document.getElementById("modeToggle");
if (!modeToggle) {
console.error("[modeToggle] Pulsante non trovato");
return;
}
function normalizeMode(mode) {
return mode === "activities" ? "activities" : "photos";
}
function updateModeUI(mode) {
const safeMode = normalizeMode(mode);
document.body.classList.remove("photos", "activities");
document.body.classList.add(safeMode);
if (safeMode === "photos") {
modeToggle.textContent = "📷";
modeToggle.setAttribute("aria-label", "Passa alle attività");
modeToggle.title = "Passa alle attività";
} else {
modeToggle.textContent = "🏃";
modeToggle.setAttribute("aria-label", "Passa alle foto");
modeToggle.title = "Passa alle foto";
}
}
modeToggle.addEventListener("click", async () => {
const currentMode = normalizeMode(window.state?.mode);
const nextMode = currentMode === "photos" ? "activities" : "photos";
modeToggle.disabled = true;
try {
window.closeBottomSheet?.();
window.closeActivityModal?.();
window.closeInfoPanel?.();
if (typeof window.setGalleryMode === "function") {
window.setGalleryMode(nextMode);
} else {
window.state ??= {};
window.state.mode = nextMode;
window.loadLocalState?.();
}
updateModeUI(nextMode);
if (typeof window.progressiveSync === "function") {
await window.progressiveSync(nextMode);
}
window.refreshGallery?.();
const mapDiv = document.getElementById("globalMap");
if (mapDiv?.classList.contains("open")) {
window.redrawGlobalMap?.();
}
updateModeUI(window.state?.mode || nextMode);
} catch (error) {
console.error("[modeToggle] Errore cambio modalità:", error);
updateModeUI(window.state?.mode || "photos");
} finally {
modeToggle.disabled = false;
}
});
updateModeUI(window.state?.mode || "photos");
}
function initializeTerrainButton() {
const btn = document.getElementById("terrain3dBtn");
if (!btn) {
return;
}
btn.addEventListener("click", async () => {
try {
await window.MapTerrain3D?.toggle();
btn.classList.toggle(
"active",
window.MapTerrain3D?.enabled?.() === true
);
} catch (err) {
console.error("[Terrain3D]", err);
}
});
}
window.updateTerrainButton = function(enabled) {
const btn = document.getElementById("terrain3dBtn");
if (!btn) return;
btn.classList.toggle("active", enabled);
btn.textContent = enabled ? "🗺️" : "🏔️";
btn.title = enabled
? "Torna alla mappa 2D"
: "Apri Terrain 3D";
};
function initializeDeletedToggle() {
const checkbox = document.getElementById("showDeleted");
const toggleButton = document.getElementById("showDeletedBtn");
if (!checkbox || !toggleButton) {
console.error("[showDeleted] Checkbox o pulsante non trovato");
return;
}
function updateDeletedToggleUI() {
const showDeleted = checkbox.checked;
// Occhio barrato: cancellate nascoste.
// Occhio libero: cancellate visibili.
toggleButton.classList.toggle("is-hidden", !showDeleted);
toggleButton.classList.toggle("is-visible", showDeleted);
toggleButton.setAttribute("aria-pressed", String(showDeleted));
toggleButton.setAttribute(
"aria-label",
showDeleted
? "Nascondi elementi cancellati"
: "Mostra elementi cancellati",
);
toggleButton.title = showDeleted
? "Elementi cancellati visibili"
: "Elementi cancellati nascosti";
}
toggleButton.addEventListener("click", () => {
checkbox.checked = !checkbox.checked;
// gallery.js ascolta change, salva la preferenza e aggiorna la galleria.
checkbox.dispatchEvent(
new Event("change", {
bubbles: true,
}),
);
updateDeletedToggleUI();
});
checkbox.addEventListener("change", updateDeletedToggleUI);
// gallery.js ripristina prima il valore salvato in localStorage.
setTimeout(updateDeletedToggleUI, 0);
}
function initializeEruda() {
if (window.eruda && typeof window.eruda.init === "function") {
window.eruda.init();
}
}
function initializePageControls() {
const authenticated = initializeProtectedPage();
if (!authenticated) {
return;
}
initializeConfigButton();
initializeModeToggle();
initializeDeletedToggle();
initializeTerrainButton();
initializeEruda();
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initializePageControls, {
once: true,
});
} else {
initializePageControls();
}
})();