dotfiles

My PC Dotfiles & Website

site/static/js/mobile.js (1674B)


 1(() => {
 2  const phone = matchMedia(
 3    getComputedStyle(document.documentElement)
 4      .getPropertyValue("--phoneWidth")
 5      .trim(),
 6  );
 7  const menus = [
 8    [
 9      document.querySelector(".menu-trigger"),
10      document.getElementById("mobile-menu"),
11    ],
12    [
13      document.querySelector(".menu-inner-list-more-trigger"),
14      document.getElementById("more-menu"),
15    ],
16  ].filter(([button, panel]) => button && panel);
17
18  function setOpen(button, panel, open) {
19    panel.classList.toggle("hidden", !open);
20    button.setAttribute("aria-expanded", String(open));
21  }
22  for (const [button, panel] of menus) {
23    setOpen(button, panel, false);
24    button.addEventListener("click", () =>
25      setOpen(button, panel, button.getAttribute("aria-expanded") !== "true"),
26    );
27    document.addEventListener("click", (event) => {
28      if (!button.contains(event.target) && !panel.contains(event.target))
29        setOpen(button, panel, false);
30    });
31    document.addEventListener("keydown", (event) => {
32      if (
33        event.key === "Escape" &&
34        button.getAttribute("aria-expanded") === "true"
35      ) {
36        setOpen(button, panel, false);
37        button.focus();
38      }
39    });
40    phone.addEventListener("change", () => setOpen(button, panel, false));
41  }
42  const form = document.querySelector(".pagination__form");
43  if (form)
44    form.addEventListener("submit", (event) => {
45      event.preventDefault();
46      if (!form.reportValidity()) return;
47      const page = Number(form.elements.page.value);
48      location.href =
49        page === 1
50          ? form.action.replace(/page\/$/, "")
51          : `${form.action}${page}/`;
52    });
53})();