Files
michaelschiemer/resources/js/core/EventManager.js

50 lines
1.4 KiB
JavaScript

// modules/core/EventManager.js
const registry = new Map();
export const EventManager = {
/**
* Fügt einen EventListener hinzu und speichert ihn im Modul-Kontext
*/
add(target, type, handler, { module = 'global', options = false } = {}) {
target.addEventListener(type, handler, options);
if (!registry.has(module)) registry.set(module, []);
registry.get(module).push([target, type, handler, options]);
},
/**
* Entfernt alle Listener, die für ein bestimmtes Modul registriert wurden
*/
removeModule(module) {
const entries = registry.get(module);
if (!entries) return;
entries.forEach(([target, type, handler, options]) => {
target.removeEventListener(type, handler, options);
});
registry.delete(module);
},
/**
* Entfernt alle Event-Listener aus allen Modulen
*/
clearAll() {
for (const [module, entries] of registry.entries()) {
entries.forEach(([target, type, handler, options]) => {
target.removeEventListener(type, handler, options);
});
}
registry.clear();
},
/**
* Debug: Gibt die aktuelle Registry in der Konsole aus
*/
debug() {
console.table([...registry.entries()].map(([module, events]) => ({
module,
listeners: events.length
})));
}
};