import _WidgetBase = require("dijit/_WidgetBase"); type _WidgetBaseConstructor = typeof _WidgetBase; export type DojoNodePosition = "first" | "after" | "before" | "last" | "replace" | "only" | number; export interface BuildContext { getDomNode(): TNode; placeAt(refNode: string | Node, position?: DojoNodePosition): void; } export function isNode(el: any): el is Node { return el && el.nodeName && el.nodeType; } export function isElementNode(el: any): el is Element { return isNode(el) && el.nodeType === 1; } export function isTextNode(el: any): el is Text { return isNode(el) && el.nodeType === 3; } export function isProcessingInstructionNode(el: any): el is ProcessingInstruction { return isNode(el) && el.nodeType === 7; } export function isCommentNode(el: any): el is Comment { return isNode(el) && el.nodeType === 8; } export function isDocumentNode(el: any): el is Document { return isNode(el) && el.nodeType === 9; } export function isDocumentTypeNode(el: any): el is DocumentType { return isNode(el) && el.nodeType === 10; } export function isDocumentFragmentNode(el: any): el is DocumentFragment { return isNode(el) && el.nodeType === 11; } export function isWidget(v: any): v is _WidgetBase { return v && "domNode" in v; } export function isBuildContext(v: any): v is BuildContext { return typeof v === "object" && typeof v.getDomElement === "function"; } export function isPlainObject(v: object) { if (typeof v !== "object") return false; const vp = Object.getPrototypeOf(v); return !vp || vp === Object.prototype; } export function isWidgetConstructor(v: any): v is _WidgetBaseConstructor { return typeof v === "function" && v.prototype && ( "domNode" in v.prototype || "buildRendering" in v.prototype ); } /** Tests whether the specified node is placed in visible dom. * @param {Node} node The node to test */ export function isInPage(node: Node) { return (node === document.body) ? false : document.body.contains(node); }