- Extract UI components into separate JS files - Centralize configuration values in config.js - Introduce a dedicated logger module - Improve file tree drag-and-drop and undo functionality - Refactor modal handling to a single manager - Add URL routing support for SPA navigation - Implement view mode for read-only access
		
			
				
	
	
		
			78 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Dark Mode Module
 | |
|  * Manages dark mode theme switching and persistence
 | |
|  */
 | |
| 
 | |
| class DarkMode {
 | |
|     constructor() {
 | |
|         this.isDark = localStorage.getItem(Config.STORAGE_KEYS.DARK_MODE) === 'true';
 | |
|         this.apply();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Toggle dark mode on/off
 | |
|      */
 | |
|     toggle() {
 | |
|         this.isDark = !this.isDark;
 | |
|         localStorage.setItem(Config.STORAGE_KEYS.DARK_MODE, this.isDark);
 | |
|         this.apply();
 | |
|         
 | |
|         Logger.debug(`Dark mode ${this.isDark ? 'enabled' : 'disabled'}`);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Apply the current dark mode state
 | |
|      */
 | |
|     apply() {
 | |
|         if (this.isDark) {
 | |
|             document.body.classList.add('dark-mode');
 | |
|             const btn = document.getElementById('darkModeBtn');
 | |
|             if (btn) btn.textContent = '☀️';
 | |
| 
 | |
|             // Update mermaid theme
 | |
|             if (window.mermaid) {
 | |
|                 mermaid.initialize({ theme: Config.MERMAID_THEME_DARK });
 | |
|             }
 | |
|         } else {
 | |
|             document.body.classList.remove('dark-mode');
 | |
|             const btn = document.getElementById('darkModeBtn');
 | |
|             if (btn) btn.textContent = '🌙';
 | |
| 
 | |
|             // Update mermaid theme
 | |
|             if (window.mermaid) {
 | |
|                 mermaid.initialize({ theme: Config.MERMAID_THEME_LIGHT });
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Check if dark mode is currently enabled
 | |
|      * @returns {boolean} True if dark mode is enabled
 | |
|      */
 | |
|     isEnabled() {
 | |
|         return this.isDark;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Enable dark mode
 | |
|      */
 | |
|     enable() {
 | |
|         if (!this.isDark) {
 | |
|             this.toggle();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Disable dark mode
 | |
|      */
 | |
|     disable() {
 | |
|         if (this.isDark) {
 | |
|             this.toggle();
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Make DarkMode globally available
 | |
| window.DarkMode = DarkMode;
 | |
| 
 |