priv/static/app.js

(() => {
  // assets/js/app.js
  (function() {
    "use strict";
    const NAV_KEY = "monitorex_nav_open";
    function highlightActiveNav() {
      const path = window.location.pathname;
      document.querySelectorAll("nav a").forEach((link) => {
        const href = link.getAttribute("href");
        link.classList.toggle("active", href === path);
      });
    }
    function setupNavToggle() {
      const hamburger = document.getElementById("nav-toggle");
      const nav = document.querySelector("nav");
      if (!hamburger || !nav) return;
      const saved = sessionStorage.getItem(NAV_KEY);
      if (saved === "true" && window.innerWidth <= 768) {
        nav.classList.add("nav-open");
        hamburger.classList.add("nav-open");
        document.body.classList.add("nav-open");
      }
      hamburger.addEventListener("click", () => {
        const isOpen = nav.classList.toggle("nav-open");
        hamburger.classList.toggle("nav-open", isOpen);
        document.body.classList.toggle("nav-open", isOpen);
        try {
          if (isOpen) {
            sessionStorage.setItem(NAV_KEY, "true");
          } else {
            sessionStorage.removeItem(NAV_KEY);
          }
        } catch (_) {
        }
      });
      nav.querySelectorAll("a").forEach((link) => {
        link.addEventListener("click", () => {
          if (window.innerWidth <= 768) {
            nav.classList.remove("nav-open");
            hamburger.classList.remove("nav-open");
            document.body.classList.remove("nav-open");
            try {
              sessionStorage.removeItem(NAV_KEY);
            } catch (_) {
            }
          }
        });
      });
    }
    function setupResizeHandler() {
      let prevWidth = window.innerWidth;
      window.addEventListener("resize", () => {
        const width = window.innerWidth;
        if (prevWidth <= 768 && width > 768) {
          const nav = document.querySelector("nav");
          const hamburger = document.getElementById("nav-toggle");
          if (nav && hamburger) {
            nav.classList.remove("nav-open");
            hamburger.classList.remove("nav-open");
            document.body.classList.remove("nav-open");
            try {
              sessionStorage.removeItem(NAV_KEY);
            } catch (_) {
            }
          }
        }
        prevWidth = width;
      });
    }
    document.addEventListener("DOMContentLoaded", () => {
      highlightActiveNav();
      setupNavToggle();
      setupResizeHandler();
    });
  })();
})();