let users opera patch everything and add hiding to nav bar

This commit is contained in:
KingKDot
2026-04-17 18:43:16 -05:00
parent 4a062e3a19
commit d41607782a
11 changed files with 223 additions and 21 deletions
+54 -4
View File
@@ -1,8 +1,52 @@
import { NAV_MODE_KEY } from "./template.js";
const LS_KEY = "sb_collapsed";
const NAV_HIDDEN_KEY = "nav_hidden";
const MOBILE_BP = 768;
/* ──────────────────────────────────────────────
NAV HIDE / REVEAL — shared across both modes
────────────────────────────────────────────── */
function createNavHideController() {
let hidden = localStorage.getItem(NAV_HIDDEN_KEY) === "true";
// Create reveal button (injected into body)
const revealBtn = document.createElement("button");
revealBtn.id = "nav-reveal-btn";
revealBtn.setAttribute("aria-label", "Show navigation");
const isMac = /Mac|iPhone|iPad/.test(navigator.platform || "");
revealBtn.dataset.tooltip = `Show nav ${isMac ? "⌘" : "Ctrl"}+\\`;
revealBtn.innerHTML = '<i class="fa-solid fa-angles-right" style="font-size:0.65rem"></i>';
document.body.appendChild(revealBtn);
function setHidden(val) {
hidden = val;
localStorage.setItem(NAV_HIDDEN_KEY, String(val));
document.body.classList.toggle("nav-hidden", val);
}
function toggle() {
setHidden(!hidden);
}
// Apply persisted state
if (hidden) document.body.classList.add("nav-hidden");
// Click the reveal button → show nav
revealBtn.addEventListener("click", () => { if (hidden) setHidden(false); });
// Keyboard shortcut: Ctrl+\ (or Cmd+\ on Mac)
document.addEventListener("keydown", (e) => {
if ((e.ctrlKey || e.metaKey) && e.key === "\\") {
e.preventDefault();
toggle();
}
});
return { toggle, isHidden: () => hidden, setHidden };
}
/* ──────────────────────────────────────────────
TOPBAR DROPDOWN LOGIC
────────────────────────────────────────────── */
@@ -241,9 +285,15 @@ function createSidebarController(host, refs) {
export function createAdaptiveNavController(host, refs) {
const mode = localStorage.getItem(NAV_MODE_KEY);
if (mode === "sidebar") {
return createSidebarController(host, refs);
}
return createTopbarController(host, refs);
const navCtrl = mode === "sidebar"
? createSidebarController(host, refs)
: createTopbarController(host, refs);
const hideCtrl = createNavHideController();
return {
applyAdaptiveNavLayout: navCtrl.applyAdaptiveNavLayout,
navHide: hideCtrl,
};
}