|
1 | 1 | document.addEventListener('DOMContentLoaded', function () {
|
2 |
| - const themeToggleBtn = document.getElementById('themeToggleBtn'); |
3 |
| - const table = document.getElementsByClassName('table'); |
4 |
| - const body = document.body; |
5 |
| - |
6 |
| - // on regarde si l'utilisateur avait le thème sombre à la dernière visite sur la page ou avant de la rafraîchir |
7 |
| - // Si ce n'est pas le cas, on regarde la préférence sélectionnée dans le système de l'utilisateur |
8 |
| - const savedTheme = localStorage.getItem('theme'); |
9 |
| - if (savedTheme) { |
10 |
| - body.classList.add(savedTheme); |
11 |
| - } else { |
12 |
| - |
13 |
| - const userPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; |
14 |
| - body.classList.add(userPrefersDark ? 'dark-theme' : 'light-theme'); |
15 |
| - } |
| 2 | +const themeToggleBtn = document.getElementById('themeToggleBtn'); |
| 3 | +const table = document.getElementsByClassName('table'); |
| 4 | +const body = document.body; |
16 | 5 |
|
17 |
| - // écouteurs d'évènements |
18 |
| - themeToggleBtn.addEventListener('click', function(){ |
19 |
| - body.classList.toggle('light-theme'); |
20 |
| - body.classList.toggle('dark-theme'); |
21 |
| - themeToggleBtn.classList.remove('btn-primary'); |
22 |
| - |
23 |
| - setTimeout(function(){ |
24 |
| - themeToggleBtn.classList.toggle( |
25 |
| - 'btn-dark', |
26 |
| - body.classList.contains('light-theme')); |
| 6 | +// on regarde si l'utilisateur avait le thème sombre à la dernière visite sur la page ou avant de la rafraîchir |
| 7 | +// Si ce n'est pas le cas, on regarde la préférence sélectionnée dans le système de l'utilisateur |
| 8 | +const savedTheme = localStorage.getItem('theme'); |
| 9 | +if (savedTheme) { |
| 10 | + body.classList.add(savedTheme); |
| 11 | +} else { |
| 12 | + |
| 13 | + const userPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; |
| 14 | + body.classList.add(userPrefersDark ? 'dark-theme' : 'light-theme'); |
| 15 | +} |
27 | 16 |
|
28 |
| - themeToggleBtn.classList.toggle( |
29 |
| - 'btn-light', |
30 |
| - body.classList.contains('dark-theme')); |
| 17 | +// écouteurs d'évènements |
| 18 | +themeToggleBtn.addEventListener('click', function(){ |
| 19 | + body.classList.toggle('light-theme'); |
| 20 | + body.classList.toggle('dark-theme'); |
| 21 | + themeToggleBtn.classList.remove('btn-primary'); |
| 22 | + |
| 23 | + /* |
| 24 | + L'idée est la suivante: Lorsque qu'un utilisateur clique sur le bouton, on applique aux éléments de la page souhaités une classe, qui varie selon l'élément et si c'est pour |
| 25 | + le thème clair ou sombre. Le style de ces classes sont pré-définis dans le fichier style.css, ou alors directement grâce aux classes bootstrap. |
31 | 26 |
|
32 |
| - themeToggleBtn.innerText = body.classList.contains('dark-theme') ? 'Mode clair' : 'Mode sombre'; |
| 27 | + On change aussi la couleur du bouton : fond noir & texte blanc si le thème est clair, ou fond blanc et texte noir si thème blanc. |
| 28 | + */ |
| 29 | + setTimeout(function(){ |
| 30 | + // setTimeout pour ajouter un effet de transition |
| 31 | + themeToggleBtn.classList.toggle( |
| 32 | + 'btn-dark', |
| 33 | + body.classList.contains('light-theme')); |
33 | 34 |
|
34 |
| - |
35 |
| - }, 200); |
| 35 | + themeToggleBtn.classList.toggle( |
| 36 | + 'btn-light', |
| 37 | + body.classList.contains('dark-theme')); |
36 | 38 |
|
37 |
| - for (var i = 0; i < table.length; i++){ |
38 |
| - table[i].classList.toggle('text-light'); |
39 |
| - } |
| 39 | + // on change de le texte du bouton pour indiquer quel thème s'appliquerai si l'utilisateur clique sur le bouton. |
| 40 | + themeToggleBtn.innerText = body.classList.contains('dark-theme') ? 'Mode clair' : 'Mode sombre'; |
| 41 | + }, 200); |
40 | 42 |
|
41 |
| - // on enregistre le choix de l'utilisateur (pour que le thème reste le même quand il revient) |
42 |
| - const currentTheme = body.classList.contains('dark-theme') ? 'dark-theme' : 'light-theme'; |
43 |
| - localStorage.setItem('theme', currentTheme); |
| 43 | + // changer le texte en blanc de tous les tableaux quand le thème est sombre |
| 44 | + for (var i = 0; i < table.length; i++){ |
| 45 | + table[i].classList.toggle('text-light'); |
| 46 | + } |
44 | 47 |
|
45 |
| - |
46 |
| - }); |
| 48 | + // on enregistre le choix de l'utilisateur (pour que le thème reste le même quand il revient) |
| 49 | + const currentTheme = body.classList.contains('dark-theme') ? 'dark-theme' : 'light-theme'; |
| 50 | + localStorage.setItem('theme', currentTheme); |
| 51 | +}); |
47 | 52 | });
|
0 commit comments