25 lines
677 B
JavaScript
25 lines
677 B
JavaScript
|
import { Controller } from "@hotwired/stimulus"
|
||
|
|
||
|
// Connects to data-controller="theme"
|
||
|
export default class extends Controller {
|
||
|
static targets = ["toggle"]
|
||
|
|
||
|
connect() {
|
||
|
this.initTheme()
|
||
|
}
|
||
|
|
||
|
initTheme() {
|
||
|
const savedTheme = localStorage.getItem('theme')
|
||
|
if(savedTheme) {
|
||
|
document.documentElement.setAttribute('data-theme', savedTheme)
|
||
|
this.toggleTarget.checked = savedTheme === 'dark'
|
||
|
}
|
||
|
}
|
||
|
|
||
|
toggle(event) {
|
||
|
const newTheme = event.target.checked ? 'dark' : 'light'
|
||
|
document.documentElement.setAttribute('data-theme', newTheme)
|
||
|
localStorage.setItem('theme', newTheme)
|
||
|
}
|
||
|
}
|