bulma_switch_controller.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { Controller } from '@hotwired/stimulus';
  2. export default class extends Controller {
  3. connect() {
  4. this.initThemeToggle();
  5. console.log("Stimulus: chargement du contrôler du switch");
  6. }
  7. initThemeToggle() {
  8. const themeToggleBtn = document.getElementById('theme-toggle');
  9. if (!themeToggleBtn) return;
  10. let currentTheme = localStorage.getItem('theme') || 'auto';
  11. const applyTheme = (theme) => {
  12. if (theme === 'auto') {
  13. const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
  14. theme = systemPrefersDark ? 'dark' : 'light';
  15. }
  16. document.documentElement.setAttribute('data-theme', theme);
  17. };
  18. const toggleTheme = () => {
  19. if (currentTheme === 'dark') {
  20. currentTheme = 'light';
  21. console.log('Thème clair activé');
  22. } else if (currentTheme === 'light') {
  23. currentTheme = 'dark';
  24. console.log('Thème sombre activé');
  25. } else {
  26. const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
  27. currentTheme = systemPrefersDark ? 'light' : 'dark';
  28. }
  29. localStorage.setItem('theme', currentTheme);
  30. applyTheme(currentTheme);
  31. };
  32. applyTheme(currentTheme);
  33. themeToggleBtn.addEventListener('click', toggleTheme);
  34. window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
  35. if (currentTheme === 'auto') {
  36. applyTheme(e.matches ? 'dark' : 'light');
  37. }
  38. });
  39. }
  40. }