diff --git a/config.toml b/config.toml index 0026ce2..b7fa5f0 100644 --- a/config.toml +++ b/config.toml @@ -44,15 +44,12 @@ taxonomies = [{name = "tags", feed = true}] # https://welpo.github.io/tabi/blog/mastering-tabi-settings/ # Enable JavaScript theme toggler to allow users to switch between dark/light mode. -# Also enables automatic switching based on user's OS-level theme settings. # If disabled, your site will only use the theme specified in the `default_theme` variable. theme_switcher = true -# This setting determines the default theme ("light" or "dark"). -# If you wish to use only a dark or light theme, disable the `theme_switcher` above and set this variable. -# If `theme_switcher` is enabled, this will be the theme that is visible to users who have JavaScript disabled. -# Defaults to "light", if unset. -default_theme = "light" +# This setting determines the default theme on load ("light" or "dark"). +# To default to the user's OS-level theme, leave it empty or unset. +default_theme = "" # Choose the colourscheme (skin) for the theme. Default is "teal". # Skin available: blue, lavender, mint, red, sakura, teal, monochrome, lowcontrast_orange, lowcontrast_peach, lowcontrast_pink, indigo_ingot, evangelion diff --git a/content/blog/customise-tabi/index.ca.md b/content/blog/customise-tabi/index.ca.md index 9bf456c..1c91ff0 100644 --- a/content/blog/customise-tabi/index.ca.md +++ b/content/blog/customise-tabi/index.ca.md @@ -1,7 +1,7 @@ +++ title = "Personalitza el color de tabi i el tema per defecte" date = 2023-08-09 -updated = 2023-10-07 +updated = 2023-11-24 description = "Aprèn a personalitzar tabi fent servir skins i establint un tema per defecte, aconseguint un aspecte únic." [taxonomies] @@ -17,6 +17,8 @@ tabi pot ser personalitzat de dues maneres: establint el tema per defecte (fosc ## Tema per defecte +Utilitza `default_theme = "dark"` per establir el tema fosc com a predeterminat, o `default_theme = "light"` per establir el tema clar com a predeterminat. + Per configurar permanentment el teu lloc en el tema fosc o clar, necessites desactivar el `theme_switcher` a `config.toml` i establir el teu tema preferit (`light` o `dark`) a `default_theme`. Per exemple, per tenir un tema fosc permanent: @@ -27,8 +29,6 @@ theme_switcher = false default_theme = "dark" ``` -Si el teu interruptor de mode clar/fosc està activat, el `default_theme` només s'utilitzarà com a reserva, en cas que un visitant tingui JavaScript desactivat. - ## Skins No t'agrada l'aiguamarina? Cap problema! tabi té 12 skins per triar. Si cap d'aquestes t'agrada, pots [crear la teva pròpia skin](#crea-la-teva-propia-skin). diff --git a/content/blog/customise-tabi/index.es.md b/content/blog/customise-tabi/index.es.md index a472aef..8c3a752 100644 --- a/content/blog/customise-tabi/index.es.md +++ b/content/blog/customise-tabi/index.es.md @@ -1,7 +1,7 @@ +++ title = "Personaliza el color de tabi y el tema predeterminado" date = 2023-08-09 -updated = 2023-10-07 +updated = 2023-11-24 description = "Aprende a personalizar tabi usando skins y estableciendo un tema predeterminado, haciendo que tu sitio sea único." [taxonomies] @@ -17,6 +17,8 @@ tabi puede ser personalizado de dos maneras: estableciendo el tema predeterminad ## Tema predeterminado +Usa `default_theme = "dark"` para establecer el tema oscuro como predeterminado, o `default_theme = "light"` para establecer el tema claro como predeterminado. + Para configurar permanentemente tu sitio en el tema oscuro o claro, necesitas desactivar el `theme_switcher` en `config.toml` y establecer tu tema preferido (`light` o `dark`) como el `default_theme`. Por ejemplo, para tener un tema oscuro permanente: @@ -27,8 +29,6 @@ theme_switcher = false default_theme = "dark" ``` -Si tu interruptor de modo claro/oscuro está activado, el `default_theme` sólo se usará como respaldo, en caso de que un visitante tenga JavaScript desactivado. - ## Skins ¿No te gusta el aguamarina? ¡No hay problema! tabi tiene 12 skins (pieles) para elegir. Si ninguna de estas te convence, puedes [crear tu propia skin](#crea-tu-propia-skin). diff --git a/content/blog/customise-tabi/index.md b/content/blog/customise-tabi/index.md index 7d6e738..db7c24c 100644 --- a/content/blog/customise-tabi/index.md +++ b/content/blog/customise-tabi/index.md @@ -1,7 +1,7 @@ +++ title = "Customise tabi with skins and a default theme" date = 2023-08-09 -updated = 2023-10-07 +updated = 2023-11-24 description = "Learn how to customise tabi using skins and setting a default theme, making your site uniquely yours." [taxonomies] @@ -17,6 +17,8 @@ tabi can be customised in two ways: by setting the default theme (dark or light) ## Default theme +Use `default_theme = "dark"` to set the dark theme as the default, or `default_theme = "light"` to set the light theme as the default. + To permanently set your site to either the dark or light theme, you need to disable the theme switcher in `config.toml` and set your preferred theme as the `default_theme`. For example, to have a permanent dark theme: @@ -27,8 +29,6 @@ theme_switcher = false default_theme = "dark" ``` -If your theme switcher is enabled, the `default_theme` will only be used as fallback, in case a visitor has JavaScript disabled. - ## Skins Not a fan of teal? No problem! tabi has 12 skins for you to choose from. If none of these work for you, you can [create your own](#create-your-own-skin). diff --git a/content/blog/mastering-tabi-settings/index.ca.md b/content/blog/mastering-tabi-settings/index.ca.md index 6a67e6d..160ae4b 100644 --- a/content/blog/mastering-tabi-settings/index.ca.md +++ b/content/blog/mastering-tabi-settings/index.ca.md @@ -1,7 +1,7 @@ +++ title = "Domina la configuració de tabi: guia completa" date = 2023-09-18 -updated = 2023-11-05 +updated = 2023-11-24 description = "Descobreix les múltiples maneres en què pots personalitzar tabi." [taxonomies] @@ -102,9 +102,7 @@ El commutador de mode clar i fosc (la icona de lluna/sol a la cantonada superior |:------:|:------:|:-------------:|:---------------:|:-------------------:| | ❌ | ❌ | ✅ | ❌ | ❌ | -El mode predeterminat es pot especificar amb la variable `default_theme`, que accepta `"dark"` o `"light"`. Per defecte és `"light"`. - -**Nota**: el mode predeterminat només s'usa quan el commutador de mode està desactivat, ja sigui perquè s'ha configurat com a `false` a `config.toml` o perquè un usuari ha deshabilitat JavaScript. +El mode predeterminat es pot especificar amb la variable `default_theme`, que accepta `"dark"` o `"light"`. Si no s'especifica, el mode predeterminat és el mode del sistema. ### Skin personalitzada diff --git a/content/blog/mastering-tabi-settings/index.es.md b/content/blog/mastering-tabi-settings/index.es.md index 16252bc..8f95c64 100644 --- a/content/blog/mastering-tabi-settings/index.es.md +++ b/content/blog/mastering-tabi-settings/index.es.md @@ -1,7 +1,7 @@ +++ title = "Domina la configuración de tabi: guía completa" date = 2023-09-18 -updated = 2023-11-05 +updated = 2023-11-24 description = "Descubre las múltiples maneras en que puedes personalizar tabi." [taxonomies] @@ -100,9 +100,7 @@ El interruptor de modo claro y oscuro (el icono de luna/sol en la esquina superi |:------:|:-------:|:-------------:|:---------------:|:-------------------:| | ❌ | ❌ | ✅ | ❌ | ❌ | -El tema predeterminado puede especificarse con la variable `default_theme`, que acepta `"dark"` o `"light"`. Por defecto es `"light"`. - -**Nota**: el tema predeterminado solo se usa cuando el interruptor de tema está desactivado, ya sea porque se ha configurado como `false` en el config o porque un usuario ha deshabilitado JavaScript. +El tema predeterminado puede especificarse con la variable `default_theme`, que acepta `"dark"` o `"light"`. Si no lo especificas, el tema predeterminado será el tema del sistema. ### Pieles personalizadas diff --git a/content/blog/mastering-tabi-settings/index.md b/content/blog/mastering-tabi-settings/index.md index 025eb9c..34778cb 100644 --- a/content/blog/mastering-tabi-settings/index.md +++ b/content/blog/mastering-tabi-settings/index.md @@ -1,7 +1,7 @@ +++ title = "Mastering tabi Settings: A Comprehensive Guide" date = 2023-09-18 -updated = 2023-11-05 +updated = 2023-11-24 description = "Discover the many ways you can customise your tabi site." [taxonomies] @@ -102,9 +102,7 @@ The light and dark mode switcher (the moon/sun icon on the top right) can be ena |:----:|:-------:|:-------------:|:-----------------:|:-------------------:| | ❌ | ❌ | ✅ | ❌ | ❌ | -The default theme can be specified with the `default_theme` variable, which accepts either `"dark"` or `"light"`. Defaults to `"light"`. - -**Note**: the default theme is only used when the theme switcher is disabled, either because it's set to `false` in the config or because a user has JavaScript disabled. +The default theme can be specified with the `default_theme` variable, which accepts either `"dark"` or `"light"`. If you don't set it, the default theme will be the one set in the user's browser. ### Custom Skins diff --git a/i18n/ca.toml b/i18n/ca.toml index 3cda404..d2e8677 100644 --- a/i18n/ca.toml +++ b/i18n/ca.toml @@ -27,7 +27,7 @@ language_selection = "Selecció d'idioma" toggle_mode = "Canvia el mode $MODE" # $MODE will be replaced by a value (or both) below. dark = "obscur" light = "clar" -reset_mode = "Restableix el mode als valors predeterminats del sistema" +reset_mode = "Restableix el mode al valor predeterminat" # Quick navigation buttons. toggle_toc = "Mostrar/ocultar la taula de continguts" diff --git a/i18n/de.toml b/i18n/de.toml index acc97b8..bff310b 100644 --- a/i18n/de.toml +++ b/i18n/de.toml @@ -31,7 +31,7 @@ language_selection = "Sprachauswahl" toggle_mode = "Wechsle in den $MODE Modus" # $MODE will be replaced by a value (or both) below. dark = "dunkel" light = "hell" -reset_mode = "Modus auf Betriebssystemstandard zurücksetzen" +reset_mode = "Modus auf Standard zurücksetzen" # Quick navigation buttons. toggle_toc = "Inhaltsverzeichnis ein-/ausblenden" diff --git a/i18n/en.toml b/i18n/en.toml index 9dfee2e..f25047d 100644 --- a/i18n/en.toml +++ b/i18n/en.toml @@ -27,7 +27,7 @@ language_selection = "Language selection" toggle_mode = "Toggle $MODE mode" # $MODE will be replaced by a value (or both) below. dark = "dark" light = "light" -reset_mode = "Reset mode to OS default" +reset_mode = "Reset mode to default" # Quick navigation buttons. toggle_toc = "Toggle Table of Contents" diff --git a/i18n/es.toml b/i18n/es.toml index 975e4bf..11a2539 100644 --- a/i18n/es.toml +++ b/i18n/es.toml @@ -27,7 +27,7 @@ language_selection = "Selección de idioma" toggle_mode = "Cambiar a modo $MODE" # $MODE will be replaced by a value (or both) below. dark = "oscuro" light = "claro" -reset_mode = "Restablecer modo a configuración predeterminada del SO" +reset_mode = "Restablecer modo a configuración predeterminada" # Quick navigation buttons. toggle_toc = "Mostrar/ocultar la tabla de contenidos" diff --git a/i18n/fr.toml b/i18n/fr.toml index 44bfa77..203442c 100644 --- a/i18n/fr.toml +++ b/i18n/fr.toml @@ -31,7 +31,7 @@ language_selection = "Sélection de la langue" toggle_mode = "Basculer en mode $MODE" # $MODE will be replaced by a value (or both) below. dark = "sombre" light = "clair" -reset_mode = "Réinitialiser le mode aux paramètres par défaut du système" +reset_mode = "Réinitialiser le mode aux paramètres par défaut" # Quick navigation buttons. toggle_toc = "Afficher/Masquer la table des matières" diff --git a/i18n/hi.toml b/i18n/hi.toml index 56466f4..5b43300 100644 --- a/i18n/hi.toml +++ b/i18n/hi.toml @@ -29,7 +29,7 @@ language_selection = "भाषा चयन" toggle_mode = "$MODE मोड में टॉगल करें" # $MODE will be replaced by a value (or both) below. dark = "अंधेरा" light = "रोशनी" -reset_mode = "मोड को ओएस डिफ़ॉल्ट पर रीसेट करें" +reset_mode = "मोड को साइट डिफ़ॉल्ट पर रीसेट करें" # Quick navigation buttons. toggle_toc = "विषय-सूची टॉगल करें" diff --git a/i18n/it.toml b/i18n/it.toml index f493b1c..b1b94a6 100644 --- a/i18n/it.toml +++ b/i18n/it.toml @@ -27,7 +27,7 @@ language_selection = "Selezione della lingua" toggle_mode = "Passa alla modalità $MODE" # $MODE will be replaced by a value (or both) below. dark = "scuro" light = "chiaro" -reset_mode = "Reimposta la modalità alle impostazioni predefinite del sistema operativo" +reset_mode = "Reimposta la modalità alle impostazioni predefinite" # Quick navigation buttons. toggle_toc = "Attiva/Disattiva indice" diff --git a/i18n/ja.toml b/i18n/ja.toml index e47fe69..89d1ce5 100644 --- a/i18n/ja.toml +++ b/i18n/ja.toml @@ -31,7 +31,7 @@ language_selection = "言語選択" toggle_mode = "$MODE モードに切り替え" # $MODE will be replaced by a value (or both) below. dark = "暗い" light = "明るい" -reset_mode = "モードをOSデフォルトにリセット" +reset_mode = "モードをサイトのデフォルトにリセット" # Quick navigation buttons. toggle_toc = "目次を切り替え" diff --git a/i18n/ko.toml b/i18n/ko.toml index 511438f..dcc64d1 100644 --- a/i18n/ko.toml +++ b/i18n/ko.toml @@ -31,7 +31,7 @@ language_selection = "언어 선택" toggle_mode = "$MODE 모드로 전환" # $MODE will be replaced by a value (or both) below. dark = "어두운" light = "밝은" -reset_mode = "모드를 OS 기본값으로 재설정" +reset_mode = "모드를 사이트 기본값으로 재설정" # Quick navigation buttons. toggle_toc = "목차 토글" diff --git a/i18n/pt-PT.toml b/i18n/pt-PT.toml index f614f70..adf2b11 100644 --- a/i18n/pt-PT.toml +++ b/i18n/pt-PT.toml @@ -27,7 +27,7 @@ language_selection = "Seleção de idioma" toggle_mode = "Alternar para o modo $MODE" # $MODE will be replaced by a value (or both) below. dark = "escuro" light = "claro" -reset_mode = "Repor o modo para o padrão do SO" +reset_mode = "Repor o modo para o padrão" # Quick navigation buttons. toggle_toc = "Alternar Índice" diff --git a/i18n/ru.toml b/i18n/ru.toml index 78619dc..6a15b17 100644 --- a/i18n/ru.toml +++ b/i18n/ru.toml @@ -27,7 +27,7 @@ language_selection = "Выбор языка" toggle_mode = "Переключить на режим $MODE" # $MODE will be replaced by a value (or both) below. dark = "тёмный" light = "светлый" -reset_mode = "Сбросить режим к настройкам ОС по умолчанию" +reset_mode = "Сбросить режим к стандартным настройкам сайта" # Quick navigation buttons. toggle_toc = "Показать/Скрыть оглавление" diff --git a/i18n/uk.toml b/i18n/uk.toml index 4696ae7..6c4ee0c 100644 --- a/i18n/uk.toml +++ b/i18n/uk.toml @@ -31,7 +31,7 @@ language_selection = "Вибір мови" toggle_mode = "Перемкнути в режим $MODE" # $MODE will be replaced by a value (or both) below. dark = "темний" light = "світлий" -reset_mode = "Скинути режим до типових параметрів ОС" +reset_mode = "Скинути режим до типових налаштувань сайту" # Quick navigation buttons. toggle_toc = "Показати/Сховати зміст" diff --git a/i18n/zh-Hans.toml b/i18n/zh-Hans.toml index bcff141..3e9b6e0 100644 --- a/i18n/zh-Hans.toml +++ b/i18n/zh-Hans.toml @@ -27,7 +27,8 @@ language_selection = "语言选择" # Machine translated. toggle_mode = "切换到$MODE模式" # $MODE will be replaced by a value (or both) below. Machine translated. dark = "暗" # Machine translated. light = "亮" # Machine translated. -reset_mode = "重置为操作系统默认模式" # Machine translated. +reset_mode = "将模式重置为网站默认值" # Machine translated. + # Quick navigation buttons. toggle_toc = "切换目录" # Machine translated. diff --git a/i18n/zh-Hant.toml b/i18n/zh-Hant.toml index 2404de3..88d9bc3 100644 --- a/i18n/zh-Hant.toml +++ b/i18n/zh-Hant.toml @@ -27,7 +27,7 @@ language_selection = "語言選擇" # Machine translated. toggle_mode = "切換到$MODE模式" # $MODE will be replaced by a value (or both) below. Machine translated. dark = "暗" # Machine translated. light = "亮" # Machine translated. -reset_mode = "重置為操作系統預設模式" # Machine translated. +reset_mode = "將模式重置為網站默認值" # Machine translated. # Quick navigation buttons. toggle_toc = "切換目錄" # Machine translated. diff --git a/static/custom_subset.css b/static/custom_subset.css index f69edb0..a043796 100644 --- a/static/custom_subset.css +++ b/static/custom_subset.css @@ -1 +1 @@ -@font-face{font-family:"Inter Subset";src:url(data:application/font-woff2;base64,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);} +@font-face{font-family:"Inter Subset";src:url(data:application/font-woff2;base64,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);} diff --git a/static/js/initializeTheme.js b/static/js/initializeTheme.js index 5c8a96c..7d8a214 100644 --- a/static/js/initializeTheme.js +++ b/static/js/initializeTheme.js @@ -1,17 +1,22 @@ (function () { - // Get the current theme from the browser's local storage. - // This allows the user's theme preference to persist across sessions. - const currentTheme = localStorage.getItem('theme'); + // Get the default theme from the HTML data-theme attribute. + const defaultTheme = document.documentElement.getAttribute('data-theme'); - // Check if the current theme is stored in local storage. - if (currentTheme) { - // If a theme is found in local storage, apply it to the document. - document.documentElement.setAttribute('data-theme', currentTheme); + // Set the data-default-theme attribute only if defaultTheme is not null. + if (defaultTheme) { + document.documentElement.setAttribute('data-default-theme', defaultTheme); + } + + // Attempt to retrieve the current theme from the browser's local storage. + const storedTheme = localStorage.getItem('theme'); + + if (storedTheme) { + document.documentElement.setAttribute('data-theme', storedTheme); + } else if (defaultTheme) { + document.documentElement.setAttribute('data-theme', defaultTheme); } else { - // If no theme is found in local storage, determine if the user's system prefers a dark color scheme. + // If no theme is found in local storage and no default theme is set, use user's system preference. const isSystemDark = window.matchMedia('(prefers-color-scheme: dark)').matches; - - // Set the document's theme attribute to match the system preference. document.documentElement.setAttribute('data-theme', isSystemDark ? 'dark' : 'light'); } })(); diff --git a/static/js/initializeTheme.min.js b/static/js/initializeTheme.min.js index fa8208d..3f65952 100644 --- a/static/js/initializeTheme.min.js +++ b/static/js/initializeTheme.min.js @@ -1 +1 @@ -!function(){var e=localStorage.getItem("theme");e?document.documentElement.setAttribute("data-theme",e):(e=window.matchMedia("(prefers-color-scheme: dark)").matches,document.documentElement.setAttribute("data-theme",e?"dark":"light"))}(); +!function(){var t=document.documentElement.getAttribute("data-theme"),e=(t&&document.documentElement.setAttribute("data-default-theme",t),localStorage.getItem("theme"));e?document.documentElement.setAttribute("data-theme",e):t?document.documentElement.setAttribute("data-theme",t):(e=window.matchMedia("(prefers-color-scheme: dark)").matches,document.documentElement.setAttribute("data-theme",e?"dark":"light"))}(); diff --git a/static/js/themeSwitcher.js b/static/js/themeSwitcher.js index 3ec6a84..bc4e825 100644 --- a/static/js/themeSwitcher.js +++ b/static/js/themeSwitcher.js @@ -1,60 +1,54 @@ // Get the theme switcher button elements. const themeSwitcher = document.querySelector(".theme-switcher"); const themeResetter = document.querySelector(".theme-resetter"); +const defaultTheme = document.documentElement.getAttribute('data-default-theme'); -// Retrieve theme from either the localStorage or the data-theme attribute on the document element. -let currentTheme = localStorage.getItem("theme") || document.documentElement.getAttribute('data-theme'); +function getSystemThemePreference() { + return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; +} + +// Determine the initial theme. +let currentTheme = localStorage.getItem("theme") || document.documentElement.getAttribute('data-theme') || getSystemThemePreference(); function setTheme(theme, saveToLocalStorage = false) { document.documentElement.setAttribute("data-theme", theme); currentTheme = theme; - let togglePressed = theme === "dark" ? "true" : "false"; - themeSwitcher.setAttribute("aria-pressed", togglePressed); + themeSwitcher.setAttribute("aria-pressed", theme === "dark"); if (saveToLocalStorage) { localStorage.setItem("theme", theme); themeResetter.classList.add("has-custom-theme"); - themeResetter.setAttribute("aria-hidden", "false"); } else { localStorage.removeItem("theme"); themeResetter.classList.remove("has-custom-theme"); - themeResetter.setAttribute("aria-hidden", "true"); } // Dispatch a custom event for comment systems. - const event = new CustomEvent("themeChanged", { - detail: { theme: theme } - }); - window.dispatchEvent(event); + window.dispatchEvent(new CustomEvent("themeChanged", { detail: { theme } })); } function resetTheme() { - setTheme(window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"); + setTheme(defaultTheme || getSystemThemePreference()); } // Function to switch between dark and light themes. function switchTheme() { - // Set the new theme based on the current theme. - const newTheme = currentTheme === "dark" ? "light" : "dark"; - setTheme(newTheme, true); // Save the theme to localStorage when the user changes it. + setTheme(currentTheme === "dark" ? "light" : "dark", true); } // Initialize the theme switcher button. -themeSwitcher.addEventListener("click", switchTheme, false); -themeResetter.addEventListener("click", resetTheme, false); +themeSwitcher.addEventListener("click", switchTheme); +themeResetter.addEventListener("click", resetTheme); -themeSwitcher.setAttribute("role", "button"); -let togglePressed = currentTheme === "dark" ? "true" : "false"; -themeSwitcher.setAttribute("aria-pressed", togglePressed); - -// Update the theme based on system preference if the user hasn't manually changed the theme. -window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", e => { - const newTheme = e.matches ? "dark" : "light"; - setTheme(newTheme); -}); +// Update the theme based on system preference if necessary. +if (!defaultTheme) { + window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", e => { + setTheme(e.matches ? "dark" : "light"); + }); +} +// Set initial ARIA attribute and custom theme class. +themeSwitcher.setAttribute("aria-pressed", currentTheme === "dark"); if (localStorage.getItem("theme")) { themeResetter.classList.add("has-custom-theme"); -} else { - themeResetter.classList.remove("has-custom-theme"); } diff --git a/static/js/themeSwitcher.min.js b/static/js/themeSwitcher.min.js index f925a28..5c9561b 100644 --- a/static/js/themeSwitcher.min.js +++ b/static/js/themeSwitcher.min.js @@ -1 +1 @@ -const themeSwitcher=document.querySelector(".theme-switcher"),themeResetter=document.querySelector(".theme-resetter");let currentTheme=localStorage.getItem("theme")||document.documentElement.getAttribute("data-theme");function setTheme(e,t=!1){document.documentElement.setAttribute("data-theme",e);var r="dark"===(currentTheme=e)?"true":"false",r=(themeSwitcher.setAttribute("aria-pressed",r),t?(localStorage.setItem("theme",e),themeResetter.classList.add("has-custom-theme"),themeResetter.setAttribute("aria-hidden","false")):(localStorage.removeItem("theme"),themeResetter.classList.remove("has-custom-theme"),themeResetter.setAttribute("aria-hidden","true")),new CustomEvent("themeChanged",{detail:{theme:e}}));window.dispatchEvent(r)}function resetTheme(){setTheme(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")}function switchTheme(){setTheme("dark"===currentTheme?"light":"dark",!0)}themeSwitcher.addEventListener("click",switchTheme,!1),themeResetter.addEventListener("click",resetTheme,!1),themeSwitcher.setAttribute("role","button");let togglePressed="dark"===currentTheme?"true":"false";themeSwitcher.setAttribute("aria-pressed",togglePressed),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{setTheme(e.matches?"dark":"light")}),localStorage.getItem("theme")?themeResetter.classList.add("has-custom-theme"):themeResetter.classList.remove("has-custom-theme"); +const themeSwitcher=document.querySelector(".theme-switcher"),themeResetter=document.querySelector(".theme-resetter"),defaultTheme=document.documentElement.getAttribute("data-default-theme");function getSystemThemePreference(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}let currentTheme=localStorage.getItem("theme")||document.documentElement.getAttribute("data-theme")||getSystemThemePreference();function setTheme(e,t=!1){document.documentElement.setAttribute("data-theme",e),currentTheme=e,themeSwitcher.setAttribute("aria-pressed","dark"===e),t?(localStorage.setItem("theme",e),themeResetter.classList.add("has-custom-theme")):(localStorage.removeItem("theme"),themeResetter.classList.remove("has-custom-theme")),window.dispatchEvent(new CustomEvent("themeChanged",{detail:{theme:e}}))}function resetTheme(){setTheme(defaultTheme||getSystemThemePreference())}function switchTheme(){setTheme("dark"===currentTheme?"light":"dark",!0)}themeSwitcher.addEventListener("click",switchTheme),themeResetter.addEventListener("click",resetTheme),defaultTheme||window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",e=>{setTheme(e.matches?"dark":"light")}),themeSwitcher.setAttribute("aria-pressed","dark"===currentTheme),localStorage.getItem("theme")&&themeResetter.classList.add("has-custom-theme"); diff --git a/templates/partials/theme_switcher.html b/templates/partials/theme_switcher.html index 5e1f0dc..7fba81a 100644 --- a/templates/partials/theme_switcher.html +++ b/templates/partials/theme_switcher.html @@ -16,7 +16,7 @@ aria-pressed="false"> - {%- set reset_str = macros_translate::translate(key='reset_mode', default='Reset mode to OS default', language_strings=language_strings) -%} + {%- set reset_str = macros_translate::translate(key='reset_mode', default='Reset mode to default', language_strings=language_strings) -%}