236 lines
6 KiB
JavaScript
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();
|
|
}
|
|
})();
|