Files
mivo/public/assets/js/mivo.js

71 lines
1.8 KiB
JavaScript

/**
* Mivo JS Core "The Kernel"
* Central management for Modules (Services) and Components (UI).
*/
class MivoCore {
constructor() {
this.modules = {};
this.components = {};
this.events = new EventTarget();
this.isReady = false;
// Initialize when DOM is ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => this.init());
} else {
this.init();
}
}
/**
* Register a Global Module (Service)
* @param {string} name
* @param {Object} instance
*/
registerModule(name, instance) {
this.modules[name] = instance;
console.debug(`[Mivo] Module '${name}' registered.`);
}
/**
* Register a UI Component definition
* @param {string} name
* @param {Class} classRef
*/
registerComponent(name, classRef) {
this.components[name] = classRef;
console.debug(`[Mivo] Component '${name}' registered.`);
}
/**
* Listen to global events
* @param {string} eventName
* @param {function} callback
*/
on(eventName, callback) {
this.events.addEventListener(eventName, (e) => callback(e.detail));
}
/**
* Emit global events
* @param {string} eventName
* @param {any} data
*/
emit(eventName, data) {
this.events.dispatchEvent(new CustomEvent(eventName, { detail: data }));
console.debug(`[Mivo] Event emitted: ${eventName}`, data);
}
init() {
if (this.isReady) return;
this.isReady = true;
console.log('[Mivo] Framework initialized.');
// Dispatch ready event for external scripts
this.emit('ready', { timestamp: Date.now() });
}
}
// Global Singleton
window.Mivo = new MivoCore();