Skip to content

Commit

Permalink
fix: corrige bug graphique sur theme-switcher
Browse files Browse the repository at this point in the history
  • Loading branch information
raphaelgoetter committed Oct 10, 2024
1 parent 430086d commit 7b72b7a
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 81 deletions.
68 changes: 30 additions & 38 deletions assets/components/theme.css
Original file line number Diff line number Diff line change
Expand Up @@ -9,72 +9,64 @@
}
.theme-switcher {
--theme-switcher-radius: 40px;
--theme-switcher-border: #ccc;
--theme-switcher-border-size: 2px;
--theme-switcher-background: #ccc;
--theme-switcher-border: var(--colors-black);
--theme-switcher-border-size: 3px;
--theme-switcher-background: var(--colors-black);
--theme-switcher-icon-size: 18px;
--theme-switcher-icon-padding: 3px;
--theme-switcher-icon-color: #fff;
--theme-switcher-icon-background: #555;
--theme-switcher-icon-color: var(--colors-white);
--theme-switcher-icon-background: #777777;

display: inline-grid;
justify-content: start;
width: calc(var(--theme-switcher-icon-size) * 2);
padding: 0;
width: calc(
var(--theme-switcher-icon-size) * 2 + var(--theme-switcher-border-size) * 2
);
padding: var(--theme-switcher-border-size);
border: 0;
border-radius: var(--theme-switcher-radius);
outline-color: currentColor;
outline-offset: 0.5em;
background-color: var(--theme-switcher-background);
box-shadow: 0 0 0 var(--theme-switcher-border-size)
var(--theme-switcher-border);
line-height: 0;
cursor: pointer;

/* styles en activant le bouton */
& * {
pointer-events: none;
}

& > .theme-icon {
padding: var(--theme-switcher-border-size);
border-radius: var(--border-radius-full);
background-color: var(--theme-switcher-icon-background);
color: var(--theme-switcher-icon-color);
transition: 0.3s translate;
}

& [class^="theme-icon-"] {
width: var(--theme-switcher-icon-size);
height: var(--theme-switcher-icon-size);
}

&[aria-pressed="true"] {
--theme-switcher-border: #555;
--theme-switcher-background: #555;
--theme-switcher-icon-background: #222;
--theme-switcher-border: #777777;
--theme-switcher-background: #777777;
--theme-switcher-icon-background: var(--colors-black);

/* on cache l'icône light en activant le bouton */
& .theme-icon-light {
display: none;
}

/* on déplace l'icône en activant le bouton */
& > .theme-icon {
translate: calc(
var(--theme-switcher-icon-size) -
(var(--theme-switcher-icon-padding) * 2)
(var(--theme-switcher-border-size) * 2)
);
}
}

/* on cache l'icône dark en désactivant le bouton */
&[aria-pressed="false"] {
& .theme-icon-dark {
display: none;
}
}

/* seul le bouton doit être interactif */
& * {
pointer-events: none;
}

/* conteneur des icônes */
& > .theme-icon {
padding: var(--theme-switcher-icon-padding);
border-radius: 50%;
background-color: var(--theme-switcher-icon-background);
color: var(--theme-switcher-icon-color);
transition: 0.3s;
}

/* taille des icônes */
& [class^="theme-icon-"] {
width: var(--theme-switcher-icon-size);
height: var(--theme-switcher-icon-size);
}
}
4 changes: 1 addition & 3 deletions assets/components/theme.hbs
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
<div class="switcher">
<button
class="theme-switcher"
class="theme-switcher js-theme-switcher"
type="button"
title="Changer le mode de couleurs"
aria-pressed="false"
>
<span class="visually-hidden">Changer le mode de couleurs</span>
Expand All @@ -25,7 +24,6 @@
clip-rule="evenodd"
/>
</svg>

<svg
class="theme-icon-dark"
aria-hidden="true"
Expand Down
2 changes: 1 addition & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -554,7 +554,7 @@ <h3>Contact personnel</h3>

<script
type="module"
src="/main.ts"
src="/main.js"
></script>
</body>
</html>
50 changes: 50 additions & 0 deletions main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import "./assets/styles.css"
import "virtual:uno.css"

// Encapsulation du code dans une fonction immédiatement invoquée
;(function () {
// Déclaration des variables
const themeSwitcher = {
button: document.querySelector(".js-theme-switcher"),
prefersDark: window.matchMedia("(prefers-color-scheme: dark)"),
currentTheme: null,
}

// Initialisation du thème
function initTheme() {
if (localStorage.getItem("theme-preference")) {
themeSwitcher.currentTheme = localStorage.getItem("theme-preference")
} else if (themeSwitcher.prefersDark.matches) {
themeSwitcher.currentTheme = "dark"
} else {
themeSwitcher.currentTheme = "light"
}
setTheme(themeSwitcher.currentTheme)
}

// Gestion du clic sur le bouton
themeSwitcher.button.addEventListener("click", function () {
themeSwitcher.currentTheme =
document.documentElement.getAttribute("data-theme-preference") === "dark"
? "light"
: "dark"
setTheme(themeSwitcher.currentTheme)
})

// Gestion du changement de préférence système
themeSwitcher.prefersDark.addEventListener("change", function (event) {
themeSwitcher.currentTheme = event.matches ? "dark" : "light"
setTheme(themeSwitcher.currentTheme)
})

// Fonction pour définir le thème
function setTheme(theme) {
const pressed = theme === "dark" ? "true" : "false"
document.documentElement.setAttribute("data-theme-preference", theme)
localStorage.setItem("theme-preference", theme)
themeSwitcher.button.setAttribute("aria-pressed", pressed)
}

// Initialisation
initTheme()
})()
39 changes: 0 additions & 39 deletions main.ts

This file was deleted.

0 comments on commit 7b72b7a

Please sign in to comment.