refactor(widgets): add EventTarget-based lifecycle event system

Add _emitter, on(), off() to WidgetManager. Dispatch widget:close event
after close(). Foundation for removing monkey-patching from widget modules.
This commit is contained in:
2026-04-16 20:07:04 +02:00
parent 3de1dd3b8b
commit 7cda3019c8
+22
View File
@@ -9,6 +9,27 @@ const WidgetManager = {
_topZ: 100, _topZ: 100,
STORAGE_KEY: 'widgetStates', STORAGE_KEY: 'widgetStates',
/** @type {EventTarget} Internes Event-System fuer Widget-Lifecycle */
_emitter: new EventTarget(),
/**
* Event-Listener registrieren
* @param {string} event - z.B. 'widget:close', 'widget:minimize', 'widget:open'
* @param {Function} handler
*/
on(event, handler) {
this._emitter.addEventListener(event, handler);
},
/**
* Event-Listener entfernen
* @param {string} event
* @param {Function} handler
*/
off(event, handler) {
this._emitter.removeEventListener(event, handler);
},
/** /**
* Widget erstellen und in DOM einfuegen * Widget erstellen und in DOM einfuegen
* @param {string} type - 'note' * @param {string} type - 'note'
@@ -145,6 +166,7 @@ const WidgetManager = {
if (!entry) return; if (!entry) return;
entry.el.remove(); entry.el.remove();
this._widgets.delete(id); this._widgets.delete(id);
this._emitter.dispatchEvent(new CustomEvent('widget:close', { detail: { id } }));
}, },
/** /**