##// END OF EJS Templates
Added 'Attrs', 'Events' type parameters to DjxWidgetBase, typed 'on' and 'emit' methods
Added 'Attrs', 'Events' type parameters to DjxWidgetBase, typed 'on' and 'emit' methods

File last commit:

r22:a1ab2b5975ad v1.0.0-rc10 default
r30:a46488b209e8 v1.0.0-rc14 default
Show More
BuildContextBase.ts
76 lines | 2.0 KiB | video/mp2t | TypeScriptLexer
/ src / main / ts / tsx / BuildContextBase.ts
import { isNull, mixin } from "@implab/core-amd/safe";
import { isPlainObject, isNode, isBuildContext, DojoNodePosition, BuildContext } from "./traits";
import dom = require("dojo/dom-construct");
export abstract class BuildContextBase<TNode extends Node> implements BuildContext<TNode> {
_attrs = {};
_children = new Array();
_created: boolean = false;
visitNext(v: any) {
if (isNull(v))
return;
if (isPlainObject(v)) {
if (this._created)
this._setAttrs(v);
else
mixin(this._attrs, v);
} else if (v instanceof Array) {
v.forEach(x => this._addChild(x));
} else {
if (this._created)
this._addChild(v);
else
this._children.push(v);
}
}
getChildDom(v: any) {
const tv = typeof v;
if (tv === "string" || tv === "number" || tv === "boolean" || v instanceof RegExp || v instanceof Date) {
return document.createTextNode(v.toString());
} else if (isNode(v)) {
return v;
} else if (isBuildContext(v)) {
return v.getDomNode();
} else {
throw new Error("Invalid parameter");
}
}
abstract _getDomNode(): TNode;
ensureCreated() {
if (!this._created) {
this._create(this._attrs, this._children);
this._children = [];
this._attrs = {};
this._created = true;
}
}
/** @deprecated use getDomNode() */
getDomElement() {
return this.getDomNode();
}
getDomNode() {
this.ensureCreated();
return this._getDomNode();
}
placeAt(refNode: string | Node, position?: DojoNodePosition) {
dom.place(this.getDomNode(), refNode, position);
}
abstract _addChild(child: any): void;
abstract _setAttrs(attrs: object): void;
abstract _create(attrs: object, children: any[]): void;
}