Files
paperless-ngx/docs/_static/js/darkmode.js
T

48 lines
1.5 KiB
JavaScript
Raw Normal View History

let toggleButton
let icon
2022-04-09 21:45:15 -07:00
function load() {
'use strict'
2022-04-09 21:45:15 -07:00
toggleButton = document.createElement('button')
toggleButton.setAttribute('title', 'Toggle dark mode')
toggleButton.classList.add('dark-mode-toggle')
icon = document.createElement('i')
icon.classList.add('fa', darkModeState ? 'fa-sun-o' : 'fa-moon-o')
toggleButton.appendChild(icon)
document.body.prepend(toggleButton)
2022-04-09 21:45:15 -07:00
// Listen for changes in the OS settings
// addListener is used because older versions of Safari don't support addEventListener
// prefersDarkQuery set in <head>
if (prefersDarkQuery) {
prefersDarkQuery.addListener(function (evt) {
toggleDarkMode(evt.matches)
})
2022-04-09 21:45:15 -07:00
}
// Initial setting depending on the prefers-color-mode or localstorage
// darkModeState should be set in the document <head> to prevent flash
if (darkModeState == undefined) darkModeState = false
toggleDarkMode(darkModeState)
2022-04-09 21:45:15 -07:00
// Toggles the "dark-mode" class on click and sets localStorage state
toggleButton.addEventListener('click', () => {
darkModeState = !darkModeState
2022-04-09 21:45:15 -07:00
toggleDarkMode(darkModeState)
localStorage.setItem('dark-mode', darkModeState)
})
2022-04-09 21:45:15 -07:00
}
function toggleDarkMode(state) {
document.documentElement.classList.toggle('dark-mode', state)
document.documentElement.classList.toggle('light-mode', !state)
icon.classList.remove('fa-sun-o')
icon.classList.remove('fa-moon-o')
icon.classList.add(state ? 'fa-sun-o' : 'fa-moon-o')
darkModeState = state
2022-04-09 21:45:15 -07:00
}
document.addEventListener('DOMContentLoaded', load)