-
Notifications
You must be signed in to change notification settings - Fork 280
Expand file tree
/
Copy pathsidebar_toggle.js
More file actions
63 lines (53 loc) · 1.77 KB
/
sidebar_toggle.js
File metadata and controls
63 lines (53 loc) · 1.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
(() => {
const STORAGE_KEY = "bn_api_sidebar";
const CLASS_NAME = "bn-sidebar-collapsed";
const BUTTON_ID = "bn-sidebar-toggle";
function isCollapsed() {
return document.documentElement.classList.contains(CLASS_NAME);
}
function setCollapsed(collapsed) {
document.documentElement.classList.toggle(CLASS_NAME, collapsed);
try {
localStorage.setItem(STORAGE_KEY, collapsed ? "collapsed" : "expanded");
} catch (_) {
// ignore storage failures (private mode, policy, etc.)
}
const btn = document.getElementById(BUTTON_ID);
if (btn) {
btn.setAttribute("aria-pressed", collapsed ? "true" : "false");
btn.title = collapsed ? "Show navigation" : "Hide navigation";
}
}
function initialCollapsed() {
try {
const saved = localStorage.getItem(STORAGE_KEY);
if (saved === "collapsed") return true;
if (saved === "expanded") return false;
} catch (_) {
// ignore
}
// Default: collapse in narrower / split-screen-ish layouts.
return window.matchMedia("(max-width: 1400px)").matches;
}
function ensureButton() {
if (document.getElementById(BUTTON_ID)) return;
const btn = document.createElement("button");
btn.id = BUTTON_ID;
btn.type = "button";
btn.setAttribute("aria-label", "Toggle navigation");
btn.setAttribute("aria-pressed", "false");
btn.textContent = "☰";
btn.addEventListener("click", () => setCollapsed(!isCollapsed()));
// Append to body so it always exists even when the sidebar is collapsed.
document.body.appendChild(btn);
}
function init() {
ensureButton();
setCollapsed(initialCollapsed());
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", init);
} else {
init();
}
})();