# Système de Thèmes - Linux BenchTools ## Vue d'ensemble Le système de thèmes permet aux utilisateurs de personnaliser l'apparence de l'interface avec différents jeux de couleurs. Les thèmes sont stockés dans des fichiers CSS séparés et peuvent être changés dynamiquement sans rechargement de page. ## Thèmes disponibles ### 1. Monokai Dark (par défaut) - **Fichier**: `frontend/css/themes/monokai-dark.css` - **Description**: Thème sombre avec la palette de couleurs Monokai classique - **Arrière-plan**: `#1e1e1e` - **Couleur primaire**: `#a6e22e` (vert) - **Utilisation**: Idéal pour une utilisation prolongée, réduit la fatigue oculaire ### 2. Monokai Light - **Fichier**: `frontend/css/themes/monokai-light.css` - **Description**: Variante claire du thème Monokai - **Arrière-plan**: `#f9f9f9` - **Couleur primaire**: `#7cb82f` (vert) - **Utilisation**: Pour les environnements bien éclairés ### 3. Gruvbox Dark - **Fichier**: `frontend/css/themes/gruvbox-dark.css` - **Description**: Thème sombre avec la palette Gruvbox - **Arrière-plan**: `#282828` - **Couleur primaire**: `#b8bb26` (vert) - **Utilisation**: Palette chaleureuse et rétro, populaire dans la communauté des développeurs ### 4. Gruvbox Light - **Fichier**: `frontend/css/themes/gruvbox-light.css` - **Description**: Variante claire du thème Gruvbox - **Arrière-plan**: `#fbf1c7` - **Couleur primaire**: `#98971a` (vert) - **Utilisation**: Palette chaleureuse pour environnements lumineux ## Architecture ### Structure des fichiers ``` frontend/ ├── css/ │ ├── main.css # Styles de base (spacing, layout, etc.) │ ├── components.css # Composants réutilisables │ └── themes/ # Thèmes (variables CSS uniquement) │ ├── monokai-dark.css │ ├── monokai-light.css │ ├── gruvbox-dark.css │ └── gruvbox-light.css └── js/ └── theme-manager.js # Gestionnaire de thèmes ``` ### Variables CSS communes Tous les thèmes définissent les mêmes variables CSS pour assurer la compatibilité : ```css :root { /* Couleurs de fond */ --bg-primary --bg-secondary --bg-tertiary --bg-hover /* Couleurs de texte */ --text-primary --text-secondary --text-muted /* Couleurs d'accent */ --color-red --color-orange --color-yellow --color-green --color-cyan --color-blue --color-purple /* Couleurs sémantiques */ --color-success --color-warning --color-danger --color-info --color-primary /* Bordures */ --border-color --border-highlight /* Ombres */ --shadow-sm --shadow-md --shadow-lg } ``` ## Gestionnaire de thèmes (theme-manager.js) ### API #### `ThemeManager.getCurrentTheme()` Retourne l'identifiant du thème actuellement actif. ```javascript const theme = ThemeManager.getCurrentTheme(); // 'monokai-dark' ``` #### `ThemeManager.applyTheme(theme)` Applique un thème et sauvegarde la préférence. ```javascript ThemeManager.applyTheme('gruvbox-dark'); ``` #### `ThemeManager.loadTheme(theme)` Charge un thème sans sauvegarder la préférence. ```javascript ThemeManager.loadTheme('monokai-light'); ``` #### `ThemeManager.themes` Objet contenant la configuration de tous les thèmes disponibles. ```javascript { 'monokai-dark': { name: 'Monokai Dark', file: 'css/themes/monokai-dark.css' }, // ... } ``` ### Événement personnalisé Le gestionnaire de thèmes émet un événement `themeChanged` lors du changement de thème : ```javascript window.addEventListener('themeChanged', (event) => { console.log('Nouveau thème:', event.detail.theme); console.log('Nom du thème:', event.detail.themeName); }); ``` ## Stockage Le thème sélectionné est stocké dans `localStorage` avec la clé `benchtools_theme`. ```javascript // Lecture const theme = localStorage.getItem('benchtools_theme'); // Écriture (ne pas faire manuellement, utiliser ThemeManager.applyTheme) localStorage.setItem('benchtools_theme', 'gruvbox-dark'); ``` ## Intégration dans les pages Chaque page HTML doit inclure le gestionnaire de thèmes **avant** les autres scripts : ```html ``` Le thème est automatiquement chargé au démarrage de la page. ## Page de configuration La page [settings.html](../frontend/settings.html) contient un sélecteur de thème : ```html ``` La fonction `saveThemePreference()` dans [settings.js](../frontend/js/settings.js) gère la sauvegarde et l'application du thème. ## Ajout d'un nouveau thème Pour ajouter un nouveau thème : 1. **Créer le fichier CSS** dans `frontend/css/themes/mon-theme.css` ```css :root { --bg-primary: #...; --bg-secondary: #...; /* ... toutes les variables requises ... */ } ``` 2. **Déclarer le thème** dans `theme-manager.js` ```javascript const THEMES = { // ... thèmes existants 'mon-theme': { name: 'Mon Nouveau Thème', file: 'css/themes/mon-theme.css' } }; ``` 3. **Ajouter l'option** dans `settings.html` ```html ``` ## Tests Pour tester le système de thèmes : 1. Ouvrir [settings.html](http://localhost:8087/settings.html) 2. Sélectionner un thème dans la liste déroulante 3. Cliquer sur "Appliquer le thème" 4. Vérifier que le thème est appliqué immédiatement 5. Naviguer vers d'autres pages pour vérifier la persistance ## Avantages de cette architecture - **Modularité** : Chaque thème est dans un fichier séparé - **Performance** : Un seul fichier CSS de thème chargé à la fois - **Extensibilité** : Facile d'ajouter de nouveaux thèmes - **Cohérence** : Variables CSS standardisées - **Persistance** : Le choix de l'utilisateur est sauvegardé - **Sans rechargement** : Changement instantané de thème ## Compatibilité - Fonctionne avec tous les navigateurs modernes supportant les variables CSS - Fallback automatique vers Monokai Dark si le thème n'est pas trouvé - Compatible avec le système d'unités d'affichage existant