##// END OF EJS Templates
Switched to @implab/dojo-typings
Switched to @implab/dojo-typings

File last commit:

r71:73341acc489b default
r71:73341acc489b default
Show More
DjxWidgetBase.ts
86 lines | 2.9 KiB | video/mp2t | TypeScriptLexer
/ djx / src / main / ts / tsx / DjxWidgetBase.ts
cin
Switched to @implab/dojo-typings
r71 import { AbstractConstructor, djbase, djclass } from "../declare";
cin
Converted to subproject djx, removed dojo-typings
r65 import _WidgetBase = require("dijit/_WidgetBase");
import _AttachMixin = require("dijit/_AttachMixin");
import { Rendition, isNode, startupWidgets } from "./traits";
import registry = require("dijit/registry");
// type Handle = dojo.Handle;
export interface EventArgs {
bubbles?: boolean;
cancelable?: boolean;
composed?: boolean;
}
cin
Switched to @implab/dojo-typings
r71 export interface DjxWidgetBase<Attrs = {}, Events extends { [name in keyof Events]: Event } = {}> extends
_WidgetBase<Events> {
}
cin
Converted to subproject djx, removed dojo-typings
r65
cin
Switched to @implab/dojo-typings
r71 type _super = {
startup(): void;
cin
Converted to subproject djx, removed dojo-typings
r65 }
@djclass
cin
Switched to @implab/dojo-typings
r71 export abstract class DjxWidgetBase<Attrs = {}, Events = {}> extends djbase<_super, _AttachMixin>(_WidgetBase, _AttachMixin) {
cin
Converted to subproject djx, removed dojo-typings
r65
buildRendering() {
this.domNode = this.render().getDomNode();
super.buildRendering();
// now we should get assigned data-dojo-attach-points
// place the contents of the original srcNode to the containerNode
const src = this.srcNodeRef;
const dest = this.containerNode;
if (src && dest) {
while (src.firstChild)
dest.appendChild(src.firstChild);
}
}
abstract render(): Rendition<HTMLElement>;
_processTemplateNode<T extends (Element | Node | _WidgetBase)>(
baseNode: T,
cin
Switched to @implab/dojo-typings
r71 getAttrFunc: (baseNode: T, attr: string) => any,
cin
Converted to subproject djx, removed dojo-typings
r65 // tslint:disable-next-line: ban-types
attachFunc: (node: T, type: string, func?: Function) => dojo.Handle
): boolean {
if (isNode(baseNode)) {
const w = registry.byNode(baseNode);
if (w) {
// from dijit/_WidgetsInTemplateMixin
this._processTemplateNode(w,
cin
Switched to @implab/dojo-typings
r71 (n, p) => n.get(p as any), // callback to get a property of a widget
cin
Converted to subproject djx, removed dojo-typings
r65 (widget, type, callback) => {
if (!callback)
throw new Error("The callback must be specified");
// callback to do data-dojo-attach-event to a widget
if (type in widget) {
// back-compat, remove for 2.0
return widget.connect(widget, type, callback as EventListener);
} else {
// 1.x may never hit this branch, but it's the default for 2.0
return widget.on(type, callback);
}
});
// don't process widgets internals
return false;
}
}
return super._processTemplateNode(baseNode, getAttrFunc, attachFunc);
}
/** Starts current widget and all its supporting widgets (placed outside
* `containerNode`) and child widgets (placed inside `containerNode`)
*/
startup() {
// startup supporting widgets
registry.findWidgets(this.domNode, this.containerNode).forEach(w => w.startup());
super.startup();
}
}