tsx.ts
33 lines
| 1.0 KiB
| video/mp2t
|
TypeScriptLexer
|
|
r6 | import { Constructor } from "@implab/core-amd/interfaces"; | ||
|
|
r7 | import { HtmlElementContext } from "./tsx/HtmlElementContext"; | ||
| import { WidgetContext } from "./tsx/WidgetContext"; | ||||
| import { isWidgetConstructor, BuildContext } from "./tsx/traits"; | ||||
|
|
r6 | |||
| export function createElement<T extends Constructor>(elementType: string | T, ...args: any[]): BuildContext { | ||||
| if (typeof elementType === "string") { | ||||
| const ctx = new HtmlElementContext(elementType); | ||||
| if (args) | ||||
| args.forEach(x => ctx.visitNext(x)); | ||||
| return ctx; | ||||
| } else if (isWidgetConstructor(elementType)) { | ||||
| const ctx = new WidgetContext(elementType); | ||||
| if (args) | ||||
| args.forEach(x => ctx.visitNext(x)); | ||||
| return ctx; | ||||
| } else { | ||||
| throw new Error(`The element type '${elementType}' is unsupported`); | ||||
| } | ||||
| } | ||||
| export interface EventDetails<T = any> { | ||||
| detail: T; | ||||
| } | ||||
| export interface EventSelector { | ||||
| selectorTarget: HTMLElement; | ||||
| target: HTMLElement; | ||||
| } | ||||
| export type DojoMouseEvent<T = any> = MouseEvent & EventSelector & EventDetails<T>; | ||||
