+
+
+
Tips
+
+ First Visit
+ https://getbootstrap.com/docs/5.3/customize/color-modes/
+
+
+
@@ -187,25 +206,40 @@ const page = "color-mode";
setTheme(getPreferredTheme());
- const showActiveTheme = (theme) => {
+ const showActiveTheme = (theme, focus = false) => {
+ const themeSwitcher = document.querySelector("#bd-theme");
+
+ if (!themeSwitcher) {
+ return;
+ }
+
+ const themeSwitcherText = document.querySelector("#bd-theme-text");
const activeThemeIcon = document.querySelector(
".theme-icon-active i"
);
const btnToActive = document.querySelector(
- '[data-bs-theme-value="' + theme + '"]'
+ `[data-bs-theme-value="${theme}"]`
);
const svgOfActiveBtn = btnToActive
.querySelector("i")
.getAttribute("class");
- document
- .querySelectorAll("[data-bs-theme-value]")
- .forEach((element) => {
- element.classList.remove("active");
- });
+ for (const element of document.querySelectorAll(
+ "[data-bs-theme-value]"
+ )) {
+ element.classList.remove("active");
+ element.setAttribute("aria-pressed", "false");
+ }
btnToActive.classList.add("active");
+ btnToActive.setAttribute("aria-pressed", "true");
activeThemeIcon.setAttribute("class", svgOfActiveBtn);
+ const themeSwitcherLabel = `${themeSwitcherText.textContent} (${btnToActive.dataset.bsThemeValue})`;
+ themeSwitcher.setAttribute("aria-label", themeSwitcherLabel);
+
+ if (focus) {
+ themeSwitcher.focus();
+ }
};
window
@@ -219,16 +253,16 @@ const page = "color-mode";
window.addEventListener("DOMContentLoaded", () => {
showActiveTheme(getPreferredTheme());
- document
- .querySelectorAll("[data-bs-theme-value]")
- .forEach((toggle) => {
- toggle.addEventListener("click", () => {
- const theme = toggle.getAttribute("data-bs-theme-value");
- localStorage.setItem("theme", theme);
- setTheme(theme);
- showActiveTheme(theme);
- });
+ for (const toggle of document.querySelectorAll(
+ "[data-bs-theme-value]"
+ )) {
+ toggle.addEventListener("click", () => {
+ const theme = toggle.getAttribute("data-bs-theme-value");
+ localStorage.setItem("theme", theme);
+ setTheme(theme);
+ showActiveTheme(theme, true);
});
+ }
});
})();