diff options
| author | Josh <[email protected]> | 2020-08-29 17:57:17 +1000 |
|---|---|---|
| committer | Rapptz <[email protected]> | 2020-12-18 21:18:56 -0500 |
| commit | ffdddb0fe52dde0be139c2b6991e7a7c297210ab (patch) | |
| tree | 712c336b6f42d4e63e655c71f54a1b761e36bd25 /docs/_static | |
| parent | [matrix] collapsible sidebar headings (diff) | |
| download | discord.py-ffdddb0fe52dde0be139c2b6991e7a7c297210ab.tar.xz discord.py-ffdddb0fe52dde0be139c2b6991e7a7c297210ab.zip | |
[matrix] Set theme to system preferred by default
Diffstat (limited to 'docs/_static')
| -rw-r--r-- | docs/_static/custom.js | 65 | ||||
| -rw-r--r-- | docs/_static/style.css | 5 |
2 files changed, 58 insertions, 12 deletions
diff --git a/docs/_static/custom.js b/docs/_static/custom.js index 0d9d324a..bb03bdbf 100644 --- a/docs/_static/custom.js +++ b/docs/_static/custom.js @@ -31,12 +31,27 @@ function changeDocumentation(element) { } function updateSetting(element) { - localStorage.setItem(element.name, element.checked); + let value; + switch (element.type) { + case "checkbox": + localStorage.setItem(element.name, element.checked); + value = element.checked; + break; + case "radio": + localStorage.setItem(element.name, `"${element.value}"`); + value = element.value; + break; + } if (element.name in settings) { - settings[element.name](element.checked); + settings[element.name]["setter"](value); } } +function LoadSetting(name, defaultValue) { + let value = JSON.parse(localStorage.getItem(name)); + return value === null ? defaultValue : value; +} + function getRootAttributeToggle(attributeName, valueName) { function toggleRootAttribute(set) { if (set) { @@ -48,13 +63,35 @@ function getRootAttributeToggle(attributeName, valueName) { return toggleRootAttribute; } +function setTheme(value) { + if (value === "automatic") { + if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { + document.documentElement.setAttribute(`data-theme`, "dark"); + } else{ + document.documentElement.setAttribute(`data-theme`, "light"); + } + } + else { + document.documentElement.setAttribute(`data-theme`, value); + } +} + const settings = { - useSerifFont: getRootAttributeToggle('font', 'serif'), - useDarkTheme: getRootAttributeToggle('theme', 'dark') + useSerifFont: { + settingType: "checkbox", + defaultValue: false, + setter: getRootAttributeToggle('font', 'serif') + }, + setTheme: { + settingType: "radio", + defaultValue: "automatic", + setter: setTheme + } }; -Object.entries(settings).forEach(([name, setter]) => { - let value = JSON.parse(localStorage.getItem(name)); +Object.entries(settings).forEach(([name, setting]) => { + let { defaultValue, setter, ..._ } = setting; + let value = LoadSetting(name, defaultValue); try { setter(value); } catch (error) { @@ -109,11 +146,15 @@ document.addEventListener('DOMContentLoaded', () => { parent.insertBefore(table, element.nextSibling); }); - Object.keys(settings).forEach(name => { - let value = JSON.parse(localStorage.getItem(name)); - let element = document.querySelector(`input[name=${name}]`); - if (element) { - element.checked = value === true; + Object.entries(settings).forEach(([name, setting]) => { + let { settingType, defaultValue, ..._ } = setting; + let value = LoadSetting(name, defaultValue); + if (settingType === "checkbox") { + let element = document.querySelector(`input[name=${name}]`); + element.checked = value; + } else { + let element = document.querySelector(`input[name=${name}][value=${value}]`); + element.checked = true; } }); }); @@ -144,7 +185,7 @@ window.addEventListener('scroll', () => { if (activeLink) { let headingChildren = activeLink.parentElement.parentElement; let heading = headingChildren.previousElementSibling.previousElementSibling; - + if (heading && headingChildren.style.display === "none") { activeLink = heading; } diff --git a/docs/_static/style.css b/docs/_static/style.css index 9018302d..a80d137c 100644 --- a/docs/_static/style.css +++ b/docs/_static/style.css @@ -289,6 +289,11 @@ header > nav > a:hover { margin-right: 0.5em; } +.setting h3 { + display: inline-block; + margin-left: 2em; +} + .sub-header > .settings:hover { color: var(--settings-hover); } |