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