initial commit
This commit is contained in:
48
color-scheme.js
Normal file
48
color-scheme.js
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
class ColorScheme {
|
||||||
|
|
||||||
|
static #localStorageKey = 'color_scheme'
|
||||||
|
static options = ['dark', 'light']
|
||||||
|
|
||||||
|
static set scheme(name) {
|
||||||
|
document.documentElement.setAttribute('data-color-scheme', name)
|
||||||
|
localStorage.setItem(this.#localStorageKey, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
static get scheme() {
|
||||||
|
return document.documentElement.dataset.colorScheme
|
||||||
|
}
|
||||||
|
|
||||||
|
static {
|
||||||
|
if (localStorage.getItem(this.#localStorageKey)) {
|
||||||
|
// user has previously made a manual color scheme selection
|
||||||
|
ColorScheme.scheme = localStorage.getItem(this.#localStorageKey)
|
||||||
|
} else if (window.matchMedia('(prefers-color-scheme: light)').matches === true) {
|
||||||
|
// user has not made a manual color scheme selection and has a 'light' preference
|
||||||
|
ColorScheme.scheme = 'light'
|
||||||
|
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches === true) {
|
||||||
|
// user has not made a manual color scheme selection and has a 'dark' preference
|
||||||
|
ColorScheme.scheme = 'dark'
|
||||||
|
} else {
|
||||||
|
ColorScheme.scheme = ColorScheme.options[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
const nextSchemeBtns = document.querySelectorAll('[data-color-scheme-next]')
|
||||||
|
for (const btn of nextSchemeBtns) {
|
||||||
|
btn.addEventListener('click', ColorScheme.next)
|
||||||
|
}
|
||||||
|
|
||||||
|
const setSchemeBtns = document.querySelectorAll('[data-color-scheme-set]')
|
||||||
|
for (const btn of setSchemeBtns) {
|
||||||
|
btn.addEventListener('click', () => { ColorScheme.scheme = btn.dataset.colorSchemeSet })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static next() {
|
||||||
|
const optionPos = ColorScheme.options.indexOf(ColorScheme.scheme) + 1
|
||||||
|
if (optionPos === ColorScheme.options.length) {
|
||||||
|
ColorScheme.scheme = ColorScheme.options[0]
|
||||||
|
} else {
|
||||||
|
ColorScheme.scheme = ColorScheme.options[optionPos]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user