/// /// declare namespace dojo { /* general implied types */ type NodeOrString = Node | string; type ElementOrString = Element | string; type NodeFragmentOrString = NodeOrString | DocumentFragment; interface GenericConstructor { new (...args: any[]): T; prototype: T; } interface GenericObject { [id: string]: any; } interface GenericFunction { (...args: any[]): T; } interface Handle { remove(): void; } interface EventListener { (evt: any): void; } interface BuildProfile { resourceTags: { [tag: string]: (filename: string, mid?: string) => boolean; }; } interface Package { location?: string; main?: string; name?: string; } export interface ModuleMap extends ModuleMapItem { [ sourceMid: string ]: ModuleMapReplacement; } export interface ModuleMapItem { [ mid: string ]: /* ModuleMapReplacement | ModuleMap */ any; } export interface ModuleMapReplacement extends ModuleMapItem { [ findMid: string ]: /* replaceMid */ string; } /* dojo/AdapterRegistry */ interface AdapterRegistry { /** * register a check function to determine if the wrap function or * object gets selected */ register(name: string, check: (...args: any[]) => boolean, wrap: Function, directReturn?: boolean, override?: boolean): void; /** * Find an adapter for the given arguments. If no suitable adapter * is found, throws an exception. match() accepts any number of * arguments, all of which are passed to all matching functions * from the registered pairs. */ match(...args: any[]): any; /** * Remove a named adapter from the registry */ unregister(name: string): boolean; } interface AdapterRegistryConstructor { new (returnWrappers?: boolean): AdapterRegistry; prototype: AdapterRegistry; } /* dojo/aspect */ interface AfterAdvice { (result: T, ...args: any[]): T; } interface AroundAdvice { (origFn: GenericFunction): (...args: any[]) => T; } interface BeforeAdvice { (...args: any[]): any[] | void; } interface Aspect { /** * The "before" export of the aspect module is a function that can be used to attach * "before" advice to a method. This function will be executed before the original attach * is executed. This function will be called with the arguments used to call the mattach * This function may optionally return an array as the new arguments to use tattach * the original method (or the previous, next-to-execute before advice, if one exattach * If the before method doesn't return anything (returns undefined) the original argattach * will be presattach * If there are multiple "before" advisors, they are executed in the reverse order they were registered. */ before(target: GenericObject, methodName: string, advice: BeforeAdvice | Function): Handle; /** * The "around" export of the aspect module is a function that can be used to attach * "around" advice to a method. The advisor function is immediately executeattach * the around() is called, is passed a single argument that is a function that attach * called to continue execution of the original method (or the next around advattach * The advisor function should return a function, and this function will be called whattach * the method is called. It will be called with the arguments used to call the mattach * Whatever this function returns will be returned as the result of the method call (unless after advise changes it). */ around(target: GenericObject, methodName: string, advice: AroundAdvice | Function): Handle; /** * The "after" export of the aspect module is a function that can be used to attach * "after" advice to a method. This function will be executed after the original method * is executed. By default the function will be called with a single argument, the return * value of the original method, or the the return value of the last executed advice (if a previous one exists). * The fourth (optional) argument can be set to true to so the function receives the original * arguments (from when the original method was called) rather than the return value. * If there are multiple "after" advisors, they are executed in the order they were registered. */ after(target: GenericObject, methodName: string, advice: AfterAdvice | Function, receiveArguments?: boolean): Handle; } /* dojo/back */ interface BackArgs { back?: GenericFunction; forward?: GenericFunction; changeUrl?: boolean | string; } interface Back { getHash(): string; setHash(h: string): void; /** * private method. Do not call this directly. */ goBack(): void; /** * private method. Do not call this directly. */ goForward(): void; /** * Initializes the undo stack. This must be called from a ` * into a function */ _functionFromScript(node: HTMLScriptElement, attrData: string): Function; /** * Takes array of nodes, and turns them into class instances and * potentially calls a startup method to allow them to connect with * any children. */ instantiate(nodes: Node[], mixin?: Object, options?: ParserOptions): any[]; /** * Takes array of objects representing nodes, and turns them into class instances and * potentially calls a startup method to allow them to connect with * any children. */ _instantiate(nodes: ParserObjects[], mixin?: Object, options?: ParserOptions, returnPromise?: boolean): any[] | promise.Promise; /** * Calls new ctor(params, node), where params is the hash of parameters specified on the node, * excluding data-dojo-type and data-dojo-mixins. Does not call startup(). */ construct( ctor: GenericConstructor, node: Node, mixin?: Object, options?: ParserOptions, scripts?: HTMLScriptElement[], inherited?: { [prop: string]: any; } ): promise.Promise | T; /** * Scan a DOM tree and return an array of objects representing the DOMNodes * that need to be turned into widgets. */ scan(root?: Node, options?: ParserOptions): promise.Promise; /** * Helper for _scanAMD(). Takes a `` node, * calls require() to load the specified modules and (asynchronously) assign them to the specified global * variables, and returns a Promise for when that operation completes. * * In the example above, it is effectively doing a require(["acme/bar", ...], function(a){ bar = a; }). */ _require(script: HTMLScriptElement, options: ParserOptions): promise.Promise; /** * Scans the DOM for any declarative requires and returns their values. */ _scanAmd(root?: Node, options?: ParserOptions): promise.Promise; /** * Scan the DOM for class instances, and instantiate them. */ parse(rootNode?: Node, options?: ParserOptions): InstancesArray; } /* dojo/query */ interface NodeListFilterCallback { (item: T, idx: number, nodeList: this): boolean; } type NodeListFilter = string | NodeListFilterCallback; interface NodeList extends ArrayLike { /** * decorate an array to make it look like a `dojo/NodeList`. */ _wrap(a: U[], parent?: NodeList, NodeListCtor?: NodeListConstructor): NodeList; _NodeListCtor: NodeListConstructor; toString(): string; /** * private function to hold to a parent NodeList. end() to return the parent NodeList. */ _stash(parent: Node): this; /** * Listen for events on the nodes in the NodeList. */ on(eventName: string, listener: EventListener): Handle[]; /** * Ends use of the current `NodeList` by returning the previous NodeList * that generated the current NodeList. */ end(): NodeList; /** * Returns a new NodeList, maintaining this one in place */ slice(begin: number, end?: number): this; /** * Returns a new NodeList, manipulating this NodeList based on * the arguments passed, potentially splicing in new elements * at an offset, optionally deleting elements */ splice(index: number, howmany?: number, ...items: T[]): this; /** * see `dojo/_base/array.indexOf()`. The primary difference is that the acted-on * array is implicitly this NodeList */ indexOf(value: T, fromIndex?: number, findLast?: boolean): number; /** * see `dojo/_base/array.lastIndexOf()`. The primary difference is that the * acted-on array is implicitly this NodeList */ lastIndexOf(value: T, fromIndex?: number): number; /** * see `dojo/_base/array.every()` and the [Array.every * docs](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every). * Takes the same structure of arguments and returns as * dojo/_base/array.every() with the caveat that the passed array is * implicitly this NodeList */ every(callback: (item: T, idx: number, nodeList: this) => boolean | string, thisObj?: Object): boolean; /** * Takes the same structure of arguments and returns as * `dojo/_base/array.some()` with the caveat that the passed array as * implicitly this NodeList. See `dojo/_base/array.some()` and Mozillaas * [Array.soas * documentation](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some). */ some(callback: (item: T, idx: number, nodeList: this) => boolean | string, thisObj?: Object): boolean; /** * Returns a new NodeList comprised of items in this NodeList * as well as items passed in as parameters */ concat(...items: T[]): this; /** * see `dojo/_base/array.map()`. The primary difference is that the acted-on * array is implicitly this NodeList and the return is a * NodeList (a subclass of Array) */ map(func: (item: T, idx: number, nodeList: this) => U, obj?: Object): NodeList; /** * see `dojo/_base/array.forEach()`. The primary difference is that the acted-on * array is implicitly this NodeList. If you want the option to break out * of the forEach loop, use every() or some() instead. */ forEach(callback: (item: T, idx: number, nodeList: this) => void, thisObj?: Object): this; /** * "masks" the built-in javascript filter() method (supported * in Dojo via `dojo/_base/array.filter`) to support passing a simple * string filter in addition to supporting filtering function * objects. */ filter(filter: NodeListFilter, thisObj?: Object): NodeList; /** * Create a new instance of a specified class, using the * specified properties and each node in the NodeList as a * srcNodeRef. */ instantiate(declaredClass: string | GenericConstructor, properties?: Object): this; /** * Returns a new NodeList comprised of items in this NodeList * at the given index or indices. */ at(...indices: number[]): this; } interface NodeListConstructor { new (array: number | Array): NodeList; new (...args: T[]): NodeList; (array: number | Array): NodeList; (...args: T[]): NodeList; prototype: NodeList; /** * decorate an array to make it look like a `dojo/NodeList`. */ _wrap(a: U[], parent?: NodeList, NodeListCtor?: NodeListConstructor): NodeList; /** * adapts a single node function to be used in the map-type * actions. The return is a new array of values, as via `dojo/_base/array.map` */ _adaptAsMap(f: (node: T) => U, o?: Object): NodeList; /** * adapts a single node function to be used in the forEach-type * actions. The initial object is returned from the specialized * function. */ _adaptAsForEach(f: (node: T) => void, o?: Object): this; /** * adapts a single node function to be used in the filter-type actions */ _adaptAsFilter(f: (node: T) => boolean, o?: Object): this; /** * adapts a single node function to be used in the map-type * actions, behaves like forEach() or map() depending on arguments */ _adaptWithCondition(f: (node: T) => U | void, g: (...args: any[]) => boolean, o?: Object): NodeList | this; } interface Query { /** * Returns nodes which match the given CSS selector, searching the * entire document by default but optionally taking a node to scope * the search by. Returns an instance of NodeList. */ (query: string, root?: NodeOrString): NodeList; /** * Test to see if a node matches a selector */ matches(node: Node, selector: string, root?: NodeOrString): boolean; /** * Filters an array of nodes. Note that this does not guarantee to return a NodeList, just an array. */ filter(nodes: NodeList | T[], select: string, root?: NodeOrString): T[] | NodeList; /** * can be used as AMD plugin to conditionally load new query engine */ load(id: string, parentRequire: Function, loaded: Function): void; /* TODO: Align with loader api */ } /* dojo/ready */ interface Ready { /** * Add a function to execute on DOM content loaded and all requested modules have arrived and been evaluated. * In most cases, the `domReady` plug-in should suffice and this method should not be needed. * * When called in a non-browser environment, just checks that all requested modules have arrived and been * evaluated. */ (callback: Function): void; (context: Object, callback: Function | string): void; (priority: number, callback: Function): void; (priority: number, context: Object, callback: Function | string): void; } /* dojo/regexp */ interface RegExpModule { /** * Adds escape sequences for special characters in regular expressions */ escapeString(str: string, except?: string): string; /** * Builds a regular expression that groups subexpressions */ buildGroupRE(arr: any[] | Object, re: (item: any) => string, nonCapture?: boolean): string; /** * adds group match to expression */ group(expression: string, nonCapture?: boolean): string; } /* dojo/request */ /* This is contained in request.d.ts */ /* dojo/require */ interface RequirePlugin { dynamic: number; normalize(id: string): string; load(mid: string, require: any, loaded: (...modules: any[]) => void): void; } /* dojo/robot */ interface Robot extends doh.Robot { _resolveNode(n: NodeOrString | (() => Node)): Node; _scrollIntoView(n: Node): void; _position(n: Node): DomGeometryBoxExtents; _getWindowChain(n: Node): Window[]; /** * Scroll the passed node into view, if it is not. */ scrollIntoView(node: NodeOrString | (() => Node), delay?: number): void; /** * Moves the mouse over the specified node at the specified relative x,y offset. */ mouseMoveAt( node: NodeOrString | (() => Node), delay?: number, duration?: number, offsetX?: number, offsetY?: number ): void; } /* dojo/robotx */ interface RobotX extends Robot { /** * Called every time a new page is loaded into the iframe, to setup variables * Point dojo.global, dojo.publish, etc. to refer to iframe. * Remove for 2.0? */ _updateDocument(): void; /** * Opens the application at the specified URL for testing, redirecting dojo to point to the application * environment instead of the test environment. */ initRobot(url: string): void; /** * Notifies DOH that the doh.robot is about to make a page change in the application it is driving, * returning a doh.Deferred object the user should return in their runTest function as part of a DOH test. */ waitForPageToLoad(submitActions: () => void): any; } /* dojo/router */ /* Module just exports instance of dojo.router.BaseRouter */ /* dojo/sniff */ interface Has { (name: 'air'): boolean; (name: 'wp'): void | number; (name: 'msapp'): void | number; (name: 'khtml'): void | number; (name: 'edge'): void | number; (name: 'opr'): void | number; (name: 'webkit'): void | number; (name: 'chrome'): void | number; (name: 'android'): void | number; (name: 'safari'): void | number; (name: 'mac'): boolean; (name: 'quirks'): boolean; (name: 'iphone'): void | number; (name: 'ipod'): void | number; (name: 'ipad'): void | number; (name: 'ios'): void | number; (name: 'bb'): void | number | boolean; (name: 'trident'): void | number; (name: 'svg'): boolean; (name: 'opera'): void | number; (name: 'mozilla'): void | number; (name: 'ff'): void | number; (name: 'ie'): void | number; (name: 'wii'): boolean | any; } /* Just rexports has after adding features */ /* dojo/Stateful */ interface WatchHandle extends Handle { unwatch(): void; } interface Stateful { /** * Used across all instances a hash to cache attribute names and their getter * and setter names. */ _attrPairNames: { [attr: string]: string }; /** * Helper function for get() and set(). * Caches attribute name values so we don't do the string ops every time. */ _getAttrNames(name: string): string; /** * Automatic setting of params during construction */ postscript(params?: Object): void; /** * Get a property on a Stateful instance. */ get(name: K): T[K]; /** * Set a property on a Stateful instance */ set(name: K, value: T[K]): this; set(name: K, ...values: T[K]): this; set(values: Partial): this; /** * Internal helper for directly changing an attribute value. */ _changeAttrValue(name: string, value: any): this; /** * Watches a property for changes */ watch(callback: (prop: K, oldValue: T[K], newValue: T[K]) => void): WatchHandle; watch(name: K, callback: (prop: K, oldValue: T[K], newValue: T[K]) => void): WatchHandle; } interface StatefulConstructor extends _base.DeclareConstructor { new (params?: Partial): Stateful; } /* dojo/string */ interface String { /** * Efficiently escape a string for insertion into HTML (innerHTML or attributes), replacing &, <, >, ", ', and / characters. */ escape(str: string): string; /** * Efficiently replicate a string `n` times. */ rep(str: string, num: number): string; /** * Pad a string to guarantee that it is at least `size` length by * filling with the character `ch` at either the start or end of the * string. Pads at the start, by default. */ pad(text: string, size: number, ch?: string, end?: boolean): string; /** * Performs parameterized substitutions on a string. Throws an * exception if any parameter is unmatched. */ substitute(template: string, map: Object | any[], transform?: (value: any, key: string) => any, thisObject?: Object): string; /** * Trims whitespace from both sides of the string */ trim(str: string): string; } /* dojo/text */ /** * A getter and setter for storing the string content associated with the * module and url arguments. */ interface Cache { (module: string | GenericObject, url: string, value?: string | { value: string, sanitize?: boolean }): string; } interface Text { /** * the dojo/text caches it's own resources because of dojo.cache */ dynamic: boolean; normalize(id: string, toAbsMid: Function): string; /* TODO: Align with loader api */ load(id: string, parentRequire: Function, loaded: Function): void; /* TODO: Align with loader api */ } /* dojo/throttle */ interface Throttle { (cb: T, wait: number): T; } /* dojo/topic */ interface Topic { /** * Publishes a message to a topic on the pub/sub hub. All arguments after * the first will be passed to the subscribers, so any number of arguments * can be provided (not just event). */ publish(topic: string | ExtensionEvent, ...event: any[]): boolean; /** * Subscribes to a topic on the pub/sub hub */ subscribe(topic: string | ExtensionEvent, listener: EventListener | Function): Handle; } /* dojo/touch */ interface Touch { press: ExtensionEvent; move: ExtensionEvent; release: ExtensionEvent; cancel: ExtensionEvent; over: ExtensionEvent; out: ExtensionEvent; enter: ExtensionEvent; leave: ExtensionEvent; } /* dojo/uacss */ /* rexports has after adding classes to dom */ /* dojo/when */ interface When { /** * Transparently applies callbacks to values and/or promises. */ (value: T | dojo.promise.Promise): dojo.promise.Promise; (value: T | dojo.promise.Promise, callback?: dojo.promise.PromiseCallback, errback?: dojo.promise.PromiseErrback, progress?: dojo.promise.PromiseProgback): T | dojo.promise.Promise; (value: T | dojo.promise.Promise, callback?: dojo.promise.PromiseCallback, errback?: dojo.promise.PromiseErrback, progress?: dojo.promise.PromiseProgback): U | dojo.promise.Promise; } /* dojo/window */ interface WindowModule { /** * Returns the dimensions and scroll position of the viewable area of a browser window */ getBox(doc?: Document): DomGeometryBox; /** * Get window object associated with document doc. */ get(doc?: Document): Window; /** * Scroll the passed node into view using minimal movement, if it is not already. */ scrollIntoView(node: Element, pos?: DomGeometryXYBox): void; } }