diff --git a/assets/javascripts/app/settings.coffee b/assets/javascripts/app/settings.coffee index 350a08c0..bfe8ae73 100644 --- a/assets/javascripts/app/settings.coffee +++ b/assets/javascripts/app/settings.coffee @@ -7,7 +7,8 @@ class app.Settings 'arrowScroll' 'analyticsConsent' 'docs' - 'dark' + 'dark' # legacy + 'theme' 'layout' 'size' 'tips' @@ -43,7 +44,7 @@ class app.Settings set: (key, value) -> @store.set(key, value) delete @cache[key] - @toggleDark(value) if key == 'dark' + @setTheme(value) if key == 'theme' return del: (key) -> @@ -114,15 +115,20 @@ class app.Settings return initLayout: -> - @toggleDark(@get('dark') is 1) + if @get('dark') is 1 + @set('theme', 'dark') + @del 'dark' + @setTheme(@get('theme')) @toggleLayout(layout, @hasLayout(layout)) for layout in @LAYOUTS @initSidebarWidth() return - toggleDark: (enable) -> + setTheme: (theme) -> + if not theme + theme = if window.matchMedia('(prefers-color-scheme: dark)').matches then 'dark' else 'default' classList = document.documentElement.classList - classList.toggle('_theme-default', !enable) - classList.toggle('_theme-dark', enable) + classList.remove('_theme-default', '_theme-dark') + classList.add('_theme-' + theme) color = getComputedStyle(document.documentElement).getPropertyValue('--headerBackground').trim() $('meta[name=theme-color]').setAttribute('content', color) return diff --git a/assets/javascripts/templates/pages/settings_tmpl.coffee b/assets/javascripts/templates/pages/settings_tmpl.coffee index d5cb0985..07bfc65a 100644 --- a/assets/javascripts/templates/pages/settings_tmpl.coffee +++ b/assets/javascripts/templates/pages/settings_tmpl.coffee @@ -2,12 +2,22 @@ app.templates.settingsPage = (settings) -> """

Preferences

-

General:

- +

Theme:

+
+
+ +
+

General:

+ +
diff --git a/assets/javascripts/views/content/settings_page.coffee b/assets/javascripts/views/content/settings_page.coffee index 9ca606c6..fd747438 100644 --- a/assets/javascripts/views/content/settings_page.coffee +++ b/assets/javascripts/views/content/settings_page.coffee @@ -11,7 +11,7 @@ class app.views.SettingsPage extends app.View currentSettings: -> settings = {} - settings.dark = app.settings.get('dark') + settings.theme = app.settings.get('theme') settings.smoothScroll = !app.settings.get('fastScroll') settings.arrowScroll = app.settings.get('arrowScroll') settings.autoInstall = app.settings.get('autoInstall') @@ -22,8 +22,8 @@ class app.views.SettingsPage extends app.View getTitle: -> 'Preferences' - toggleDark: (enable) -> - app.settings.set('dark', !!enable) + setTheme: (value) -> + app.settings.set('theme', value) return toggleLayout: (layout, enable) -> @@ -74,8 +74,8 @@ class app.views.SettingsPage extends app.View onChange: (event) => input = event.target switch input.name - when 'dark' - @toggleDark input.checked + when 'theme' + @setTheme input.value when 'layout' @toggleLayout input.value, input.checked when 'smoothScroll'