feat: added a basic yet enough event manager

This commit is contained in:
2026-04-26 00:05:30 +03:30
parent 00f76cb1dc
commit 1fce8a5682
2 changed files with 53 additions and 0 deletions

View File

@@ -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 = [];
}
}

1
src/events/index.ts Normal file
View File

@@ -0,0 +1 @@
export { EventManager } from "./EventManager";