From 7cda3019c82b5dcd6dc302ef4e7f290ad0333a7e Mon Sep 17 00:00:00 2001 From: JonKazama-Hellion Date: Thu, 16 Apr 2026 20:07:04 +0200 Subject: [PATCH] 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. --- src/js/widgets.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/js/widgets.js b/src/js/widgets.js index 47ea24d..502e5f9 100644 --- a/src/js/widgets.js +++ b/src/js/widgets.js @@ -9,6 +9,27 @@ const WidgetManager = { _topZ: 100, 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 * @param {string} type - 'note' @@ -145,6 +166,7 @@ const WidgetManager = { if (!entry) return; entry.el.remove(); this._widgets.delete(id); + this._emitter.dispatchEvent(new CustomEvent('widget:close', { detail: { id } })); }, /**