Prohlížeč zdrojového kódu
app/javascript/controllers/theme_controller.js
import { Controller } from "@hotwired/stimulus"
export default class extends Controller {
connect() {
const saved = localStorage.getItem("theme")
const preferred = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"
const theme = saved || preferred
document.documentElement.setAttribute("data-theme", theme)
this.updateIcon(theme)
}
toggle() {
const current = document.documentElement.getAttribute("data-theme") || "light"
const next = current === "dark" ? "light" : "dark"
document.documentElement.setAttribute("data-theme", next)
localStorage.setItem("theme", next)
this.updateIcon(next)
}
updateIcon(theme) {
this.element.textContent = theme === "dark" ? "🔅" : "🌙"
}
}