feat: added a basic yet enough event manager
This commit is contained in:
52
src/events/EventManager.ts
Normal file
52
src/events/EventManager.ts
Normal 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
1
src/events/index.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export { EventManager } from "./EventManager";
|
||||||
Reference in New Issue
Block a user