-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathsite.js
More file actions
100 lines (90 loc) · 2.85 KB
/
Copy pathsite.js
File metadata and controls
100 lines (90 loc) · 2.85 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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
try {
const savedTheme = localStorage.getItem("rustfs-theme");
document.documentElement.dataset.theme =
savedTheme ||
(matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light");
} catch {
document.documentElement.dataset.theme = "light";
}
function initializeSite() {
const themeToggle = document.querySelector("[data-theme-toggle]");
const themeIcon = themeToggle?.querySelector("span");
function updateThemeToggle() {
const isDark = document.documentElement.dataset.theme === "dark";
if (themeIcon) {
themeIcon.textContent = isDark ? "☀" : "☾";
}
themeToggle?.setAttribute(
"aria-label",
isDark ? "Switch to light theme" : "Switch to dark theme",
);
document.querySelector('meta[name="theme-color"]')?.setAttribute(
"content",
isDark ? "#050506" : "#ffffff",
);
}
themeToggle?.addEventListener("click", () => {
const nextTheme =
document.documentElement.dataset.theme === "dark" ? "light" : "dark";
document.documentElement.dataset.theme = nextTheme;
try {
localStorage.setItem("rustfs-theme", nextTheme);
} catch {
// The selected theme still applies for the current page.
}
updateThemeToggle();
});
const announcement = document.querySelector("[data-announcement]");
try {
if (sessionStorage.getItem("rustfs-announcement-dismissed") === "true") {
announcement?.setAttribute("hidden", "");
}
} catch {
// Keep the announcement visible when storage is unavailable.
}
document
.querySelector("[data-dismiss-announcement]")
?.addEventListener("click", () => {
announcement?.setAttribute("hidden", "");
try {
sessionStorage.setItem("rustfs-announcement-dismissed", "true");
} catch {
// Dismissing the announcement still works for the current page.
}
});
document.querySelectorAll("details").forEach((details) => {
details.addEventListener("toggle", () => {
if (!details.open) {
return;
}
document.querySelectorAll("details[open]").forEach((other) => {
if (other !== details) {
other.removeAttribute("open");
}
});
});
});
document.addEventListener("click", (event) => {
if (!(event.target instanceof Node)) {
return;
}
document.querySelectorAll("details[open]").forEach((details) => {
if (!details.contains(event.target)) {
details.removeAttribute("open");
}
});
});
document.addEventListener("keydown", (event) => {
if (event.key === "Escape") {
document.querySelectorAll("details[open]").forEach((details) => {
details.removeAttribute("open");
});
}
});
updateThemeToggle();
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initializeSite, { once: true });
} else {
initializeSite();
}