tsx.ts
33 lines
| 1.0 KiB
| video/mp2t
|
TypeScriptLexer
cin
|
r6 | import { Constructor } from "@implab/core-amd/interfaces"; | ||
cin
|
r7 | import { HtmlElementContext } from "./tsx/HtmlElementContext"; | ||
import { WidgetContext } from "./tsx/WidgetContext"; | ||||
import { isWidgetConstructor, BuildContext } from "./tsx/traits"; | ||||
cin
|
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>; | ||||