schmelczer-dev/src/framework/page-element.ts
Schmelczer András 0429ea7f72 Add final touches
2020-01-10 20:11:10 +01:00

30 lines
924 B
TypeScript

import { PageEvent, PageEventType } from './events/page-event';
import { EventBroadcaster } from './events/event-broadcaster';
export abstract class PageElement implements EventBroadcaster {
protected eventBroadcaster: EventBroadcaster;
protected constructor(
private readonly rootElement?: HTMLElement,
private readonly children: Array<PageElement> = []
) {}
public get element(): HTMLElement {
return this.rootElement;
}
public broadcastEvent(event: PageEvent, parent: EventBroadcaster = null) {
if (event.type === PageEventType.eventBroadcasterChanged) {
this.eventBroadcaster = event.data;
}
this.handleEvent(event, parent);
this.children.forEach(c => c.broadcastEvent(event, this));
}
protected handleEvent(event: PageEvent, parent: EventBroadcaster) {}
protected query(query: string): HTMLElement | null {
return this.element?.querySelector(query);
}
}