WidgetContext.ts
55 lines
| 1.5 KiB
| video/mp2t
|
TypeScriptLexer
|
|
r7 | import dom = require("dojo/dom-construct"); | ||
| import { argumentNotNull } from "@implab/core-amd/safe"; | ||||
| import { BuildContextBase } from "./BuildContextBase"; | ||||
|
|
r19 | import { MapOf } from "@implab/core-amd/interfaces"; | ||
|
|
r7 | |||
|
|
r19 | // tslint:disable-next-line: class-name | ||
| export interface _Widget { | ||||
| domNode: Node; | ||||
| get(attr: string): any; | ||||
| set(attr: string, value: any): void; | ||||
| set(attrs: MapOf<any>): void; | ||||
| containerNode?: Node | ||||
| } | ||||
| export type _WidgetCtor = new (attrs: any, srcNode?: string | Node) => _Widget; | ||||
|
|
r7 | |||
|
|
r22 | export class WidgetContext extends BuildContextBase<Node> { | ||
|
|
r19 | widgetClass: _WidgetCtor; | ||
|
|
r7 | |||
|
|
r19 | _instance: _Widget | undefined; | ||
|
|
r7 | |||
|
|
r19 | constructor(widgetClass: _WidgetCtor) { | ||
|
|
r7 | super(); | ||
| argumentNotNull(widgetClass, "widgetClass"); | ||||
| this.widgetClass = widgetClass; | ||||
| } | ||||
| _addChild(child: any): void { | ||||
| if (!this._instance || !this._instance.containerNode) | ||||
| throw new Error("Widget doesn't support adding children"); | ||||
| dom.place(this.getChildDom(child), this._instance.containerNode); | ||||
| } | ||||
| _setAttrs(attrs: object): void { | ||||
| this._instance?.set(attrs); | ||||
| } | ||||
| _create(attrs: object, children: any[]) { | ||||
| this._instance = new this.widgetClass(this._attrs); | ||||
| if (children) | ||||
| children.forEach(x => this._addChild(x)); | ||||
| } | ||||
|
|
r19 | _getDomNode() { | ||
|
|
r7 | if (!this._instance) | ||
| throw new Error("The instance of the widget isn't created"); | ||||
| return this._instance.domNode; | ||||
| } | ||||
| } | ||||
