Changeset 0.25.3 (#163)
This commit is contained in:
@@ -1001,6 +1001,7 @@ function updateTabArrows(tabs) {
|
||||
|
||||
const Theme = {
|
||||
_key: 'switchboard_theme',
|
||||
_mqListener: null,
|
||||
|
||||
init() {
|
||||
this.set(localStorage.getItem(this._key) || 'system');
|
||||
@@ -1008,8 +1009,26 @@ const Theme = {
|
||||
|
||||
set(mode) {
|
||||
localStorage.setItem(this._key, mode);
|
||||
if (mode === 'system') document.documentElement.removeAttribute('data-theme');
|
||||
else document.documentElement.setAttribute('data-theme', mode);
|
||||
// Remove any prior system-preference listener
|
||||
if (this._mqListener) {
|
||||
window.matchMedia('(prefers-color-scheme: dark)').removeEventListener('change', this._mqListener);
|
||||
this._mqListener = null;
|
||||
}
|
||||
if (mode === 'system') {
|
||||
// Resolve current OS preference and apply it
|
||||
const resolved = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
||||
document.documentElement.setAttribute('data-theme', resolved);
|
||||
// Listen for OS preference changes while in system mode
|
||||
this._mqListener = (e) => {
|
||||
// Only react if still in system mode
|
||||
if (this.get() === 'system') {
|
||||
document.documentElement.setAttribute('data-theme', e.matches ? 'dark' : 'light');
|
||||
}
|
||||
};
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', this._mqListener);
|
||||
} else {
|
||||
document.documentElement.setAttribute('data-theme', mode);
|
||||
}
|
||||
},
|
||||
|
||||
get() {
|
||||
|
||||
Reference in New Issue
Block a user