diff --git a/frontend/src/modules/Gefest/element.ts b/frontend/src/modules/Gefest/element.ts index dff6820..3b4f719 100644 --- a/frontend/src/modules/Gefest/element.ts +++ b/frontend/src/modules/Gefest/element.ts @@ -2,6 +2,7 @@ import { GefestEngine } from './engine'; import { GefestStyle } from './style'; // The general class of Gefest +type gefestElementEvents = "onClick"; export abstract class GefestElement { style: GefestStyle | null = null; isHidden: boolean = false; @@ -10,9 +11,16 @@ export abstract class GefestElement { protected content: (GefestElement | string)[] | string; protected attributes: Record = {}; protected classList: Set = new Set(); + //protected eventHandlers: Record void> = {}; + protected eventHandlers: ((eventType: string, eventData: unknown) => void)[] = []; protected clickHandler: (() => void) | null = null; + emit(event: gefestElementEvents, data: unknown = undefined) { + for (let handler of this.eventHandlers) + new Promise((rs) => rs(handler("onClick", data))); + } + set onClick(handler: (() => void) | null) { if (handler) { this.clickHandler = handler; @@ -26,6 +34,8 @@ export abstract class GefestElement { return null; return () => { this.clickHandler!(); + this.emit("onClick"); + GefestEngine.activateOnClick(); }; }