Add event system

This commit is contained in:
Schmelczer András 2019-12-25 14:26:34 +01:00
parent 29e1546eb2
commit 5a87d2db71
15 changed files with 151 additions and 92 deletions

View file

@ -1,16 +1,32 @@
import { PageEvent, PageEventType } from "./page-event";
export abstract class PageElement {
private element: HTMLElement;
// Getter and setter accessors would have to agree in visibility
public getElement(): HTMLElement {
return this._element;
return this.element;
}
private _element: HTMLElement;
protected setElement(value: HTMLElement) {
this._element = value;
this.element = value;
}
protected eventGenerator: PageElement;
protected constructor(private children: Array<PageElement> = []) {}
public onAfterLoad(parent: HTMLElement) {
this.children.forEach(c => c.onAfterLoad(this.getElement()));
public giveEvent(event: PageEvent, parent: PageElement = null) {
if (event.type === PageEventType.eventGeneratorChanged) {
this.eventGenerator = event.data;
}
this.handleEvent(event, parent);
this.children.forEach(c => c.giveEvent(event, this));
}
protected query(query: string): HTMLElement | null {
return this.getElement()?.querySelector(query);
}
protected handleEvent(event: PageEvent, parent: PageElement) {}
}