- 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
		
			
				
	
	
		
			175 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Logger Module
 | |
|  * Provides structured logging with different levels
 | |
|  * Can be configured to show/hide different log levels
 | |
|  */
 | |
| 
 | |
| class Logger {
 | |
|     /**
 | |
|      * Log levels
 | |
|      */
 | |
|     static LEVELS = {
 | |
|         DEBUG: 0,
 | |
|         INFO: 1,
 | |
|         WARN: 2,
 | |
|         ERROR: 3,
 | |
|         NONE: 4
 | |
|     };
 | |
| 
 | |
|     /**
 | |
|      * Current log level
 | |
|      * Set to DEBUG by default, can be changed via setLevel()
 | |
|      */
 | |
|     static currentLevel = Logger.LEVELS.DEBUG;
 | |
| 
 | |
|     /**
 | |
|      * Enable/disable logging
 | |
|      */
 | |
|     static enabled = true;
 | |
| 
 | |
|     /**
 | |
|      * Set the minimum log level
 | |
|      * @param {number} level - One of Logger.LEVELS
 | |
|      */
 | |
|     static setLevel(level) {
 | |
|         if (typeof level === 'number' && level >= 0 && level <= 4) {
 | |
|             Logger.currentLevel = level;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Enable or disable logging
 | |
|      * @param {boolean} enabled - Whether to enable logging
 | |
|      */
 | |
|     static setEnabled(enabled) {
 | |
|         Logger.enabled = enabled;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Log a debug message
 | |
|      * @param {string} message - The message to log
 | |
|      * @param {...any} args - Additional arguments to log
 | |
|      */
 | |
|     static debug(message, ...args) {
 | |
|         if (!Logger.enabled || Logger.currentLevel > Logger.LEVELS.DEBUG) {
 | |
|             return;
 | |
|         }
 | |
|         console.log(`[DEBUG] ${message}`, ...args);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Log an info message
 | |
|      * @param {string} message - The message to log
 | |
|      * @param {...any} args - Additional arguments to log
 | |
|      */
 | |
|     static info(message, ...args) {
 | |
|         if (!Logger.enabled || Logger.currentLevel > Logger.LEVELS.INFO) {
 | |
|             return;
 | |
|         }
 | |
|         console.info(`[INFO] ${message}`, ...args);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Log a warning message
 | |
|      * @param {string} message - The message to log
 | |
|      * @param {...any} args - Additional arguments to log
 | |
|      */
 | |
|     static warn(message, ...args) {
 | |
|         if (!Logger.enabled || Logger.currentLevel > Logger.LEVELS.WARN) {
 | |
|             return;
 | |
|         }
 | |
|         console.warn(`[WARN] ${message}`, ...args);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Log an error message
 | |
|      * @param {string} message - The message to log
 | |
|      * @param {...any} args - Additional arguments to log
 | |
|      */
 | |
|     static error(message, ...args) {
 | |
|         if (!Logger.enabled || Logger.currentLevel > Logger.LEVELS.ERROR) {
 | |
|             return;
 | |
|         }
 | |
|         console.error(`[ERROR] ${message}`, ...args);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Log a message with a custom prefix
 | |
|      * @param {string} prefix - The prefix to use
 | |
|      * @param {string} message - The message to log
 | |
|      * @param {...any} args - Additional arguments to log
 | |
|      */
 | |
|     static log(prefix, message, ...args) {
 | |
|         if (!Logger.enabled) {
 | |
|             return;
 | |
|         }
 | |
|         console.log(`[${prefix}] ${message}`, ...args);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Group related log messages
 | |
|      * @param {string} label - The group label
 | |
|      */
 | |
|     static group(label) {
 | |
|         if (!Logger.enabled) {
 | |
|             return;
 | |
|         }
 | |
|         console.group(label);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * End a log group
 | |
|      */
 | |
|     static groupEnd() {
 | |
|         if (!Logger.enabled) {
 | |
|             return;
 | |
|         }
 | |
|         console.groupEnd();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Log a table (useful for arrays of objects)
 | |
|      * @param {any} data - The data to display as a table
 | |
|      */
 | |
|     static table(data) {
 | |
|         if (!Logger.enabled) {
 | |
|             return;
 | |
|         }
 | |
|         console.table(data);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Start a timer
 | |
|      * @param {string} label - The timer label
 | |
|      */
 | |
|     static time(label) {
 | |
|         if (!Logger.enabled) {
 | |
|             return;
 | |
|         }
 | |
|         console.time(label);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * End a timer and log the elapsed time
 | |
|      * @param {string} label - The timer label
 | |
|      */
 | |
|     static timeEnd(label) {
 | |
|         if (!Logger.enabled) {
 | |
|             return;
 | |
|         }
 | |
|         console.timeEnd(label);
 | |
|     }
 | |
| }
 | |
| 
 | |
| // Make Logger globally available
 | |
| window.Logger = Logger;
 | |
| 
 | |
| // Set default log level based on environment
 | |
| // In production, you might want to set this to WARN or ERROR
 | |
| if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') {
 | |
|     Logger.setLevel(Logger.LEVELS.DEBUG);
 | |
| } else {
 | |
|     Logger.setLevel(Logger.LEVELS.INFO);
 | |
| }
 | |
| 
 |