diff --git a/src/events/EventManager.ts b/src/events/EventManager.ts new file mode 100644 index 0000000..3105164 --- /dev/null +++ b/src/events/EventManager.ts @@ -0,0 +1,52 @@ +/** + * an event handling system + * + * author: db123 at db + * creation: 25/4/2026 + */ + +export class EventManager { + private listeners: Array<{ + element: HTMLElement; + event: string; + handler: Function; + }> = []; + + add(element: HTMLElement, event: string, handler: Function): void { + this.listeners.push({ element, event, handler }); + element.addEventListener(event, handler as EventListener); + } + + remove(element: HTMLElement, event: string, handler: Function): void { + const index = this.listeners.findIndex( + (listener: { + element: HTMLElement; + event: string; + handler: Function; + }): boolean => + listener.element === element && + listener.event === event && + listener.handler === handler, + ); + if (index !== -1) { + this.listeners.splice(index, 1); + } + element.removeEventListener(event, handler as EventListener); + } + + removeAll(): void { + this.listeners.forEach( + (listener: { + element: HTMLElement; + event: string; + handler: Function; + }): void => { + listener.element.removeEventListener( + listener.event, + listener.handler as EventListener, + ); + }, + ); + this.listeners = []; + } +} diff --git a/src/events/index.ts b/src/events/index.ts new file mode 100644 index 0000000..f511f38 --- /dev/null +++ b/src/events/index.ts @@ -0,0 +1 @@ +export { EventManager } from "./EventManager";