Publiczna aplikacja fdmtech.pl: renderer CMS, formularz audytu, szablony i logotypy

This commit is contained in:
FDMTech
2026-10-09 15:22:48 +02:00
commit 48b544c6b3
32 changed files with 1914 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
(() => {
"use strict";
const toggle = document.querySelector("[data-nav-toggle]");
const nav = document.getElementById("site-nav");
const scrim = document.querySelector("[data-nav-scrim]");
function setOpen(open) {
if (!nav || !toggle) return;
nav.dataset.open = open ? "true" : "false";
toggle.setAttribute("aria-expanded", open ? "true" : "false");
if (scrim) scrim.hidden = !open;
document.body.style.overflow = open ? "hidden" : "";
if (open) {
const first = nav.querySelector("a");
if (first) first.focus({ preventScroll: true });
} else {
toggle.focus({ preventScroll: true });
}
}
function isOpen() {
return !!nav && nav.dataset.open === "true";
}
if (toggle && nav) {
if (nav.dataset.open !== "true") nav.dataset.open = "false";
toggle.addEventListener("click", () => setOpen(!isOpen()));
document.addEventListener("keydown", (event) => {
if (event.key === "Escape" && isOpen()) setOpen(false);
});
}
if (scrim) scrim.addEventListener("click", () => setOpen(false));
// Active nav item for the current path (progressive enhancement only).
try {
const here = new URL(window.location.href).pathname.replace(/\/$/, "") || "/";
document.querySelectorAll(".site-nav a[href]").forEach((link) => {
const target = new URL(link.getAttribute("href"), window.location.origin).pathname.replace(/\/$/, "") || "/";
if (target === here) link.setAttribute("aria-current", "page");
});
} catch {
/* keep server-rendered navigation as is */
}
// Footer year (progressive enhancement only).
const year = document.querySelector("[data-year]");
if (year) year.textContent = String(new Date().getFullYear());
})();