##// END OF EJS Templates
_WidgetBase some attributes made optional
cin -
r18:8ab7be820af9 v1.0.7 default
parent child
Show More
@@ -1,2368 +1,2368
1 /// <reference path="../dojo/index.d.ts" />
1 /// <reference path="../dojo/index.d.ts" />
2 /// <reference path="form.d.ts" />
2 /// <reference path="form.d.ts" />
3 /// <reference path="layout.d.ts" />
3 /// <reference path="layout.d.ts" />
4
4
5 declare namespace dijit {
5 declare namespace dijit {
6 /* Global Dijit Interface */
6 /* Global Dijit Interface */
7 interface Dijit { }
7 interface Dijit { }
8
8
9 /* dijit/_AttachMixin */
9 /* dijit/_AttachMixin */
10
10
11 /* tslint:disable:class-name */
11 /* tslint:disable:class-name */
12
12
13 interface _WidgetBase {
13 interface _WidgetBase {
14 dojoAttachEvent: string;
14 dojoAttachEvent: string;
15 dojoAttachPoint: string;
15 dojoAttachPoint: string;
16 }
16 }
17
17
18 interface _AttachMixin {
18 interface _AttachMixin {
19 /**
19 /**
20 * List of widget attribute names associated with data-dojo-attach-point=... in the template, ex: ["containerNode", "labelNode"]
20 * List of widget attribute names associated with data-dojo-attach-point=... in the template, ex: ["containerNode", "labelNode"]
21 */
21 */
22 _attachPoints: string[];
22 _attachPoints: string[];
23
23
24 /**
24 /**
25 * List of connections associated with data-dojo-attach-event=... in the template
25 * List of connections associated with data-dojo-attach-event=... in the template
26 */
26 */
27 _attachEvents: dojo.Handle[];
27 _attachEvents: dojo.Handle[];
28
28
29 /**
29 /**
30 * Object to which attach points and events will be scoped. Defaults to 'this'.
30 * Object to which attach points and events will be scoped. Defaults to 'this'.
31 */
31 */
32 attachScope: any;
32 attachScope: any;
33
33
34 /**
34 /**
35 * Search descendants of this.containerNode for data-dojo-attach-point and data-dojo-attach-event.
35 * Search descendants of this.containerNode for data-dojo-attach-point and data-dojo-attach-event.
36 *
36 *
37 * Should generally be left false (the default value) both for performance and to avoid failures when this.containerNode holds other _AttachMixin instances with their own attach points and events.
37 * Should generally be left false (the default value) both for performance and to avoid failures when this.containerNode holds other _AttachMixin instances with their own attach points and events.
38 */
38 */
39 searchContainerNode: boolean;
39 searchContainerNode: boolean;
40
40
41 /**
41 /**
42 * Attach to DOM nodes marked with special attributes.
42 * Attach to DOM nodes marked with special attributes.
43 */
43 */
44 buildRendering(): void;
44 buildRendering(): void;
45
45
46 /**
46 /**
47 * hook for _WidgetsInTemplateMixin
47 * hook for _WidgetsInTemplateMixin
48 */
48 */
49 _beforeFillContent(): void;
49 _beforeFillContent(): void;
50
50
51 /**
51 /**
52 * Iterate through the dom nodes and attach functions and nodes accordingly.
52 * Iterate through the dom nodes and attach functions and nodes accordingly.
53 *
53 *
54 * Map widget properties and functions to the handlers specified in the dom node and it's descendants. This function iterates over all nodes and looks for these properties:
54 * Map widget properties and functions to the handlers specified in the dom node and it's descendants. This function iterates over all nodes and looks for these properties:
55 * - dojoAttachPoint/data-dojo-attach-point
55 * - dojoAttachPoint/data-dojo-attach-point
56 * - dojoAttachEvent/data-dojo-attach-event
56 * - dojoAttachEvent/data-dojo-attach-event
57 */
57 */
58 _attachTemplateNodes(rootNode: Element | Node): void;
58 _attachTemplateNodes(rootNode: Element | Node): void;
59
59
60 /**
60 /**
61 * Process data-dojo-attach-point and data-dojo-attach-event for given node or widget.
61 * Process data-dojo-attach-point and data-dojo-attach-event for given node or widget.
62 *
62 *
63 * Returns true if caller should process baseNode's children too.
63 * Returns true if caller should process baseNode's children too.
64 */
64 */
65 _processTemplateNode<T extends (Element | Node | _WidgetBase)>(
65 _processTemplateNode<T extends (Element | Node | _WidgetBase)>(
66 baseNode: T,
66 baseNode: T,
67 getAttrFunc: (baseNode: T, attr: string) => string,
67 getAttrFunc: (baseNode: T, attr: string) => string,
68 attachFunc: (node: T, type: string, func?: Function) => dojo.Handle
68 attachFunc: (node: T, type: string, func?: Function) => dojo.Handle
69 ): boolean;
69 ): boolean;
70
70
71 /**
71 /**
72 * Roughly corresponding to dojo/on, this is the default function for processing a data-dojo-attach-event. Meant to attach to DOMNodes, not to widgets.
72 * Roughly corresponding to dojo/on, this is the default function for processing a data-dojo-attach-event. Meant to attach to DOMNodes, not to widgets.
73 */
73 */
74 _attach(node: Element | Node, type: string, func?: Function): dojo.Handle;
74 _attach(node: Element | Node, type: string, func?: Function): dojo.Handle;
75
75
76 /**
76 /**
77 * Detach and clean up the attachments made in _attachtempalteNodes.
77 * Detach and clean up the attachments made in _attachtempalteNodes.
78 */
78 */
79 _detachTemplateNodes(): void;
79 _detachTemplateNodes(): void;
80
80
81 destroyRendering(preserveDom?: boolean): void;
81 destroyRendering(preserveDom?: boolean): void;
82 }
82 }
83
83
84 interface _AttachMixinConstructor extends dojo._base.DeclareConstructor<_AttachMixin> { }
84 interface _AttachMixinConstructor extends dojo._base.DeclareConstructor<_AttachMixin> { }
85
85
86 /* dijit/_BidiMixin */
86 /* dijit/_BidiMixin */
87
87
88 interface _WidgetBase {
88 interface _WidgetBase {
89
89
90 /**
90 /**
91 * Gets the right direction of text.
91 * Gets the right direction of text.
92 */
92 */
93 getTextDir(text: string): string;
93 getTextDir(text: string): string;
94
94
95 /**
95 /**
96 * Set element.dir according to this.textDir, assuming this.textDir has a value.
96 * Set element.dir according to this.textDir, assuming this.textDir has a value.
97 */
97 */
98 applyTextDir(element: HTMLElement, text?: string): void;
98 applyTextDir(element: HTMLElement, text?: string): void;
99
99
100 /**
100 /**
101 * Wraps by UCC (Unicode control characters) option's text according to this.textDir
101 * Wraps by UCC (Unicode control characters) option's text according to this.textDir
102 */
102 */
103 enforceTextDirWithUcc(option: HTMLOptionElement, text: string): string;
103 enforceTextDirWithUcc(option: HTMLOptionElement, text: string): string;
104
104
105 /**
105 /**
106 * Restores the text of origObj, if needed, after enforceTextDirWithUcc, e.g. set("textDir", textDir).
106 * Restores the text of origObj, if needed, after enforceTextDirWithUcc, e.g. set("textDir", textDir).
107 */
107 */
108 restoreOriginalText(origObj: HTMLOptionElement): HTMLOptionElement;
108 restoreOriginalText(origObj: HTMLOptionElement): HTMLOptionElement;
109 }
109 }
110
110
111 /* dijit/_ConfirmDialogMixin */
111 /* dijit/_ConfirmDialogMixin */
112
112
113 interface _ConfirmDialogMixin extends _WidgetsInTemplateMixin {
113 interface _ConfirmDialogMixin extends _WidgetsInTemplateMixin {
114 /**
114 /**
115 * HTML snippet for action bar, overrides _DialogMixin.actionBarTemplate
115 * HTML snippet for action bar, overrides _DialogMixin.actionBarTemplate
116 */
116 */
117 actionBarTemplate: string;
117 actionBarTemplate: string;
118
118
119 /**
119 /**
120 * Label of OK button.
120 * Label of OK button.
121 */
121 */
122 buttonOk: string;
122 buttonOk: string;
123
123
124 /**
124 /**
125 * Label of cancel button.
125 * Label of cancel button.
126 */
126 */
127 buttonCancel: string;
127 buttonCancel: string;
128 }
128 }
129
129
130 /* dijit/_Contained */
130 /* dijit/_Contained */
131
131
132 interface _Contained {
132 interface _Contained {
133 /**
133 /**
134 * Returns the previous child of the parent or null if this is the
134 * Returns the previous child of the parent or null if this is the
135 * first child of the parent.
135 * first child of the parent.
136 */
136 */
137 getPreviousSibling<T extends _WidgetBase>(): T;
137 getPreviousSibling<T extends _WidgetBase>(): T;
138
138
139 /**
139 /**
140 * Returns the next child of the parent or null if this is the last
140 * Returns the next child of the parent or null if this is the last
141 * child of the parent.
141 * child of the parent.
142 */
142 */
143 getNextSibling<T extends _WidgetBase>(): T;
143 getNextSibling<T extends _WidgetBase>(): T;
144
144
145 /**
145 /**
146 * Returns the index of this widget within its container parent.
146 * Returns the index of this widget within its container parent.
147 * It returns -1 if the parent does not exist or if the parent is
147 * It returns -1 if the parent does not exist or if the parent is
148 * not a dijit/_Container.
148 * not a dijit/_Container.
149 */
149 */
150 getIndexInParent(): number;
150 getIndexInParent(): number;
151 }
151 }
152
152
153 interface _ContainedConstructor extends dojo._base.DeclareConstructor<_Contained> { }
153 interface _ContainedConstructor extends dojo._base.DeclareConstructor<_Contained> { }
154
154
155 /* dijit/_Container */
155 /* dijit/_Container */
156
156
157 interface _Container {
157 interface _Container {
158 buildRendering(): void;
158 buildRendering(): void;
159
159
160 /**
160 /**
161 * Makes the given widget a child of this widget.
161 * Makes the given widget a child of this widget.
162 */
162 */
163 addChild<T extends _WidgetBase>(widget: T, insertIndex?: number): void;
163 addChild<T extends _WidgetBase>(widget: T, insertIndex?: number): void;
164
164
165 /**
165 /**
166 * Removes the passed widget instance from this widget but does
166 * Removes the passed widget instance from this widget but does
167 * not destroy it. You can also pass in an integer indicating
167 * not destroy it. You can also pass in an integer indicating
168 * the index within the container to remove (ie, removeChild(5) removes the sixth widget)
168 * the index within the container to remove (ie, removeChild(5) removes the sixth widget)
169 */
169 */
170 removeChild<T extends _WidgetBase>(widget: T): void;
170 removeChild<T extends _WidgetBase>(widget: T): void;
171 removeChild<T extends number>(widget: number): void;
171 removeChild<T extends number>(widget: number): void;
172
172
173 /**
173 /**
174 * Returns true if widget has child widgets, i.e. if this.containerNode contains widgets.
174 * Returns true if widget has child widgets, i.e. if this.containerNode contains widgets.
175 */
175 */
176 hasChildren(): boolean;
176 hasChildren(): boolean;
177
177
178 /**
178 /**
179 * Gets the index of the child in this container or -1 if not found
179 * Gets the index of the child in this container or -1 if not found
180 */
180 */
181 getIndexOfChild<T extends _WidgetBase>(widget: T): number;
181 getIndexOfChild<T extends _WidgetBase>(widget: T): number;
182 }
182 }
183
183
184 interface _ContainerConstructor extends dojo._base.DeclareConstructor<_Container> { }
184 interface _ContainerConstructor extends dojo._base.DeclareConstructor<_Container> { }
185
185
186 /* dijit/_CssStateMixin */
186 /* dijit/_CssStateMixin */
187
187
188 interface CSSStateNodes {
188 interface CSSStateNodes {
189 [node: string]: string;
189 [node: string]: string;
190 }
190 }
191
191
192 interface _CssStateMixin {
192 interface _CssStateMixin {
193 /**
193 /**
194 * True if cursor is over this widget
194 * True if cursor is over this widget
195 */
195 */
196 hovering: boolean;
196 hovering: boolean;
197
197
198 /**
198 /**
199 * True if mouse was pressed while over this widget, and hasn't been released yet
199 * True if mouse was pressed while over this widget, and hasn't been released yet
200 */
200 */
201 active: boolean;
201 active: boolean;
202 }
202 }
203
203
204 interface _CssStateMixinConstructor extends dojo._base.DeclareConstructor<_CssStateMixin> { }
204 interface _CssStateMixinConstructor extends dojo._base.DeclareConstructor<_CssStateMixin> { }
205
205
206 /* dijit/_DialogMixin */
206 /* dijit/_DialogMixin */
207
207
208 interface _DialogMixin {
208 interface _DialogMixin {
209 /**
209 /**
210 * HTML snippet to show the action bar (gray bar with OK/cancel buttons).
210 * HTML snippet to show the action bar (gray bar with OK/cancel buttons).
211 * Blank by default, but used by ConfirmDialog/ConfirmTooltipDialog subclasses.
211 * Blank by default, but used by ConfirmDialog/ConfirmTooltipDialog subclasses.
212 */
212 */
213 actionBarTemplate: string;
213 actionBarTemplate: string;
214
214
215 /**
215 /**
216 * Callback when the user hits the submit button.
216 * Callback when the user hits the submit button.
217 * Override this method to handle Dialog execution.
217 * Override this method to handle Dialog execution.
218 */
218 */
219 execute(formContents?: any): void;
219 execute(formContents?: any): void;
220
220
221 /**
221 /**
222 * Called when user has pressed the Dialog's cancel button, to notify container.
222 * Called when user has pressed the Dialog's cancel button, to notify container.
223 */
223 */
224 onCancel(): void;
224 onCancel(): void;
225
225
226 /**
226 /**
227 * Called when user has pressed the dialog's OK button, to notify container.
227 * Called when user has pressed the dialog's OK button, to notify container.
228 */
228 */
229 onExecute(): void;
229 onExecute(): void;
230 }
230 }
231
231
232 /* dijit/_FocusMixin */
232 /* dijit/_FocusMixin */
233 interface _FocusMixin { }
233 interface _FocusMixin { }
234
234
235 interface _WidgetBase {
235 interface _WidgetBase {
236 /**
236 /**
237 * Called when the widget becomes "active" because
237 * Called when the widget becomes "active" because
238 * it or a widget inside of it either has focus, or has recently
238 * it or a widget inside of it either has focus, or has recently
239 * been clicked.
239 * been clicked.
240 */
240 */
241 onFocus(): void;
241 onFocus(): void;
242
242
243 /**
243 /**
244 * Called when the widget stops being "active" because
244 * Called when the widget stops being "active" because
245 * focus moved to something outside of it, or the user
245 * focus moved to something outside of it, or the user
246 * clicked somewhere outside of it, or the widget was
246 * clicked somewhere outside of it, or the widget was
247 * hidden.
247 * hidden.
248 */
248 */
249 onBlur(): void;
249 onBlur(): void;
250 }
250 }
251
251
252 /* dijit/_HasDropDown */
252 /* dijit/_HasDropDown */
253
253
254 interface _HasDropDown<T extends _WidgetBase> extends _FocusMixin {
254 interface _HasDropDown<T extends _WidgetBase> extends _FocusMixin {
255 /**
255 /**
256 * The button/icon/node to click to display the drop down.
256 * The button/icon/node to click to display the drop down.
257 * Can be set via a data-dojo-attach-point assignment.
257 * Can be set via a data-dojo-attach-point assignment.
258 * If missing, then either focusNode or domNode (if focusNode is also missing) will be used.
258 * If missing, then either focusNode or domNode (if focusNode is also missing) will be used.
259 */
259 */
260 _buttonNode: HTMLElement;
260 _buttonNode: HTMLElement;
261
261
262 /**
262 /**
263 * Will set CSS class dijitUpArrow, dijitDownArrow, dijitRightArrow etc. on this node depending
263 * Will set CSS class dijitUpArrow, dijitDownArrow, dijitRightArrow etc. on this node depending
264 * on where the drop down is set to be positioned.
264 * on where the drop down is set to be positioned.
265 * Can be set via a data-dojo-attach-point assignment.
265 * Can be set via a data-dojo-attach-point assignment.
266 * If missing, then _buttonNode will be used.
266 * If missing, then _buttonNode will be used.
267 */
267 */
268 _arrowWrapperNode: HTMLElement;
268 _arrowWrapperNode: HTMLElement;
269
269
270 /**
270 /**
271 * The node to set the aria-expanded class on.
271 * The node to set the aria-expanded class on.
272 * Also sets popupActive class but that will be removed in 2.0.
272 * Also sets popupActive class but that will be removed in 2.0.
273 * Can be set via a data-dojo-attach-point assignment.
273 * Can be set via a data-dojo-attach-point assignment.
274 * If missing, then focusNode or _buttonNode (if focusNode is missing) will be used.
274 * If missing, then focusNode or _buttonNode (if focusNode is missing) will be used.
275 */
275 */
276 _popupStateNode: HTMLElement;
276 _popupStateNode: HTMLElement;
277
277
278 /**
278 /**
279 * The node to display the popup around.
279 * The node to display the popup around.
280 * Can be set via a data-dojo-attach-point assignment.
280 * Can be set via a data-dojo-attach-point assignment.
281 * If missing, then domNode will be used.
281 * If missing, then domNode will be used.
282 */
282 */
283 _aroundNode: HTMLElement;
283 _aroundNode: HTMLElement;
284
284
285 /**
285 /**
286 * The widget to display as a popup. This widget *must* be
286 * The widget to display as a popup. This widget *must* be
287 * defined before the startup function is called.
287 * defined before the startup function is called.
288 */
288 */
289 dropDown: T;
289 dropDown: T;
290
290
291 /**
291 /**
292 * Set to true to make the drop down at least as wide as this
292 * Set to true to make the drop down at least as wide as this
293 * widget. Set to false if the drop down should just be its
293 * widget. Set to false if the drop down should just be its
294 * default width.
294 * default width.
295 */
295 */
296 autoWidth: boolean;
296 autoWidth: boolean;
297
297
298 /**
298 /**
299 * Set to true to make the drop down exactly as wide as this
299 * Set to true to make the drop down exactly as wide as this
300 * widget. Overrides autoWidth.
300 * widget. Overrides autoWidth.
301 */
301 */
302 forceWidth: boolean;
302 forceWidth: boolean;
303
303
304 /**
304 /**
305 * The max height for our dropdown.
305 * The max height for our dropdown.
306 * Any dropdown taller than this will have scrollbars.
306 * Any dropdown taller than this will have scrollbars.
307 * Set to 0 for no max height, or -1 to limit height to available space in viewport
307 * Set to 0 for no max height, or -1 to limit height to available space in viewport
308 */
308 */
309 maxHeight: number;
309 maxHeight: number;
310
310
311 /**
311 /**
312 * This variable controls the position of the drop down.
312 * This variable controls the position of the drop down.
313 * It's an array of strings
313 * It's an array of strings
314 */
314 */
315 dropDownPosition: string[];
315 dropDownPosition: string[];
316 /* TODO remove for TS 1.8 */
316 /* TODO remove for TS 1.8 */
317 /* dropDownPosition: ('before' | 'after' | 'above' | 'below')[]; */
317 /* dropDownPosition: ('before' | 'after' | 'above' | 'below')[]; */
318
318
319 /**
319 /**
320 * When set to false, the click events will not be stopped, in
320 * When set to false, the click events will not be stopped, in
321 * case you want to use them in your subclass
321 * case you want to use them in your subclass
322 */
322 */
323 _stopClickEvents: boolean;
323 _stopClickEvents: boolean;
324
324
325 /**
325 /**
326 * Callback when the user mousedown/touchstart on the arrow icon.
326 * Callback when the user mousedown/touchstart on the arrow icon.
327 */
327 */
328 _onDropDownMouseDown(e: MouseEvent): void;
328 _onDropDownMouseDown(e: MouseEvent): void;
329
329
330 /**
330 /**
331 * Callback on mouseup/touchend after mousedown/touchstart on the arrow icon.
331 * Callback on mouseup/touchend after mousedown/touchstart on the arrow icon.
332 * Note that this function is called regardless of what node the event occurred on (but only after
332 * Note that this function is called regardless of what node the event occurred on (but only after
333 * a mousedown/touchstart on the arrow).
333 * a mousedown/touchstart on the arrow).
334 */
334 */
335 _onDropDownMouseUp(e?: MouseEvent): void;
335 _onDropDownMouseUp(e?: MouseEvent): void;
336
336
337 /**
337 /**
338 * The drop down was already opened on mousedown/keydown; just need to stop the event
338 * The drop down was already opened on mousedown/keydown; just need to stop the event
339 */
339 */
340 _onDropDownClick(e: MouseEvent): void;
340 _onDropDownClick(e: MouseEvent): void;
341
341
342 buildRendering(): void;
342 buildRendering(): void;
343 postCreate(): void;
343 postCreate(): void;
344 destroy(preserveDom?: boolean): void;
344 destroy(preserveDom?: boolean): void;
345
345
346 /**
346 /**
347 * Returns true if the dropdown exists and it's data is loaded. This can
347 * Returns true if the dropdown exists and it's data is loaded. This can
348 * be overridden in order to force a call to loadDropDown().
348 * be overridden in order to force a call to loadDropDown().
349 */
349 */
350 isLoaded(): boolean;
350 isLoaded(): boolean;
351
351
352 /**
352 /**
353 * Creates the drop down if it doesn't exist, loads the data
353 * Creates the drop down if it doesn't exist, loads the data
354 * if there's an href and it hasn't been loaded yet, and then calls
354 * if there's an href and it hasn't been loaded yet, and then calls
355 * the given callback.
355 * the given callback.
356 */
356 */
357 loadDropDown(loadCallback: () => void): void;
357 loadDropDown(loadCallback: () => void): void;
358
358
359 /**
359 /**
360 * Creates the drop down if it doesn't exist, loads the data
360 * Creates the drop down if it doesn't exist, loads the data
361 * if there's an href and it hasn't been loaded yet, and
361 * if there's an href and it hasn't been loaded yet, and
362 * then opens the drop down. This is basically a callback when the
362 * then opens the drop down. This is basically a callback when the
363 * user presses the down arrow button to open the drop down.
363 * user presses the down arrow button to open the drop down.
364 */
364 */
365 loadAndOpenDropDown(): dojo.Deferred<T>;
365 loadAndOpenDropDown(): dojo.Deferred<T>;
366
366
367 /**
367 /**
368 * Callback when the user presses the down arrow button or presses
368 * Callback when the user presses the down arrow button or presses
369 * the down arrow key to open/close the drop down.
369 * the down arrow key to open/close the drop down.
370 * Toggle the drop-down widget; if it is up, close it, if not, open it
370 * Toggle the drop-down widget; if it is up, close it, if not, open it
371 */
371 */
372 toggleDropDown(): void;
372 toggleDropDown(): void;
373
373
374 /**
374 /**
375 * Opens the dropdown for this widget. To be called only when this.dropDown
375 * Opens the dropdown for this widget. To be called only when this.dropDown
376 * has been created and is ready to display (ie, it's data is loaded).
376 * has been created and is ready to display (ie, it's data is loaded).
377 */
377 */
378 openDropDown(): PlaceLocation;
378 openDropDown(): PlaceLocation;
379
379
380 /**
380 /**
381 * Closes the drop down on this widget
381 * Closes the drop down on this widget
382 */
382 */
383 closeDropDown(focus?: boolean): void;
383 closeDropDown(focus?: boolean): void;
384 }
384 }
385
385
386 /* dijit/_OnDijitClickMixin */
386 /* dijit/_OnDijitClickMixin */
387
387
388 interface _OnDijitClickMixin {
388 interface _OnDijitClickMixin {
389 /**
389 /**
390 * override _WidgetBase.connect() to make this.connect(node, "ondijitclick", ...) work
390 * override _WidgetBase.connect() to make this.connect(node, "ondijitclick", ...) work
391 */
391 */
392 connect(obj: any, event: string | dojo.ExtensionEvent, method: string | dojo.EventListener): dojo.WatchHandle;
392 connect(obj: any, event: string | dojo.ExtensionEvent, method: string | dojo.EventListener): dojo.WatchHandle;
393 }
393 }
394
394
395 interface _OnDijitClickMixinConstructor {
395 interface _OnDijitClickMixinConstructor {
396 /**
396 /**
397 * Deprecated. New code should access the dijit/a11yclick event directly, ex:
397 * Deprecated. New code should access the dijit/a11yclick event directly, ex:
398 * | this.own(on(node, a11yclick, function(){ ... }));
398 * | this.own(on(node, a11yclick, function(){ ... }));
399 *
399 *
400 * Mixing in this class will make _WidgetBase.connect(node, "ondijitclick", ...) work.
400 * Mixing in this class will make _WidgetBase.connect(node, "ondijitclick", ...) work.
401 * It also used to be necessary to make templates with ondijitclick work, but now you can just require
401 * It also used to be necessary to make templates with ondijitclick work, but now you can just require
402 * dijit/a11yclick.
402 * dijit/a11yclick.
403 */
403 */
404 new(): _OnDijitClickMixin;
404 new(): _OnDijitClickMixin;
405 a11yclick: A11yClick;
405 a11yclick: A11yClick;
406 }
406 }
407
407
408 /* dijit/_TemplatedMixin */
408 /* dijit/_TemplatedMixin */
409
409
410 interface _TemplatedMixin extends _AttachMixin {
410 interface _TemplatedMixin extends _AttachMixin {
411
411
412 /**
412 /**
413 * A string that represents the widget template.
413 * A string that represents the widget template.
414 * Use in conjunction with dojo.cache() to load from a file.
414 * Use in conjunction with dojo.cache() to load from a file.
415 */
415 */
416 templateString: string;
416 templateString: string;
417
417
418 /**
418 /**
419 * Path to template (HTML file) for this widget relative to dojo.baseUrl.
419 * Path to template (HTML file) for this widget relative to dojo.baseUrl.
420 * Deprecated: use templateString with require([... "dojo/text!..."], ...) instead
420 * Deprecated: use templateString with require([... "dojo/text!..."], ...) instead
421 */
421 */
422 templatePath: string;
422 templatePath: string;
423
423
424 /**
424 /**
425 * Set _AttachMixin.searchContainerNode to true for back-compat for widgets that have data-dojo-attach-point's
425 * Set _AttachMixin.searchContainerNode to true for back-compat for widgets that have data-dojo-attach-point's
426 * and events inside this.containerNode. Remove for 2.0.
426 * and events inside this.containerNode. Remove for 2.0.
427 */
427 */
428 searchContainerNode: boolean;
428 searchContainerNode: boolean;
429
429
430 /**
430 /**
431 * Construct the UI for this widget from a template, setting this.domNode.
431 * Construct the UI for this widget from a template, setting this.domNode.
432 */
432 */
433 buildRendering(): void;
433 buildRendering(): void;
434 }
434 }
435
435
436 interface _TemplatedMixinConstructor extends _WidgetBaseConstructor<_TemplatedMixin> {
436 interface _TemplatedMixinConstructor extends _WidgetBaseConstructor<_TemplatedMixin> {
437 /**
437 /**
438 * Static method to get a template based on the templatePath or
438 * Static method to get a template based on the templatePath or
439 * templateString key
439 * templateString key
440 */
440 */
441 getCachedTemplate(templateString: string, alwaysUseString: string, doc?: Document): string | HTMLElement;
441 getCachedTemplate(templateString: string, alwaysUseString: string, doc?: Document): string | HTMLElement;
442 }
442 }
443
443
444 /* dijit/_Widget */
444 /* dijit/_Widget */
445 interface _Widget extends _WidgetBase, _OnDijitClickMixin, _FocusMixin {
445 interface _Widget extends _WidgetBase, _OnDijitClickMixin, _FocusMixin {
446 /**
446 /**
447 * Connect to this function to receive notifications of mouse click events.
447 * Connect to this function to receive notifications of mouse click events.
448 */
448 */
449 onClick(event: MouseEvent): void;
449 onClick(event: MouseEvent): void;
450
450
451 /**
451 /**
452 * Connect to this function to receive notifications of mouse double click events.
452 * Connect to this function to receive notifications of mouse double click events.
453 */
453 */
454 onDblClick(event: MouseEvent): void;
454 onDblClick(event: MouseEvent): void;
455
455
456 /**
456 /**
457 * Connect to this function to receive notifications of keys being pressed down.
457 * Connect to this function to receive notifications of keys being pressed down.
458 */
458 */
459 onKeyDown(event: KeyboardEvent): void;
459 onKeyDown(event: KeyboardEvent): void;
460
460
461 /**
461 /**
462 * Connect to this function to receive notifications of printable keys being typed.
462 * Connect to this function to receive notifications of printable keys being typed.
463 */
463 */
464 onKeyPress(event: KeyboardEvent): void;
464 onKeyPress(event: KeyboardEvent): void;
465
465
466 /**
466 /**
467 * Connect to this function to receive notifications of keys being released.
467 * Connect to this function to receive notifications of keys being released.
468 */
468 */
469 onKeyUp(event: KeyboardEvent): void;
469 onKeyUp(event: KeyboardEvent): void;
470
470
471 /**
471 /**
472 * Connect to this function to receive notifications of when the mouse button is pressed down.
472 * Connect to this function to receive notifications of when the mouse button is pressed down.
473 */
473 */
474 onMouseDown(event: MouseEvent): void;
474 onMouseDown(event: MouseEvent): void;
475
475
476 /**
476 /**
477 * Connect to this function to receive notifications of when the mouse moves over nodes contained within this widget.
477 * Connect to this function to receive notifications of when the mouse moves over nodes contained within this widget.
478 */
478 */
479 onMouseMove(event: MouseEvent): void;
479 onMouseMove(event: MouseEvent): void;
480
480
481 /**
481 /**
482 * Connect to this function to receive notifications of when the mouse moves off of nodes contained within this widget.
482 * Connect to this function to receive notifications of when the mouse moves off of nodes contained within this widget.
483 */
483 */
484 onMouseOut(event: MouseEvent): void;
484 onMouseOut(event: MouseEvent): void;
485
485
486 /**
486 /**
487 * Connect to this function to receive notifications of when the mouse moves onto nodes contained within this widget.
487 * Connect to this function to receive notifications of when the mouse moves onto nodes contained within this widget.
488 */
488 */
489 onMouseOver(event: MouseEvent): void;
489 onMouseOver(event: MouseEvent): void;
490
490
491 /**
491 /**
492 * Connect to this function to receive notifications of when the mouse moves off of this widget.
492 * Connect to this function to receive notifications of when the mouse moves off of this widget.
493 */
493 */
494 onMouseLeave(event: MouseEvent): void;
494 onMouseLeave(event: MouseEvent): void;
495
495
496 /**
496 /**
497 * Connect to this function to receive notifications of when the mouse moves onto this widget.
497 * Connect to this function to receive notifications of when the mouse moves onto this widget.
498 */
498 */
499 onMouseEnter(event: MouseEvent): void;
499 onMouseEnter(event: MouseEvent): void;
500
500
501 /**
501 /**
502 * Connect to this function to receive notifications of when the mouse button is released.
502 * Connect to this function to receive notifications of when the mouse button is released.
503 */
503 */
504 onMouseUp(event: MouseEvent): void;
504 onMouseUp(event: MouseEvent): void;
505
505
506 postCreate(): void;
506 postCreate(): void;
507
507
508 /**
508 /**
509 * Deprecated. Use set() instead.
509 * Deprecated. Use set() instead.
510 */
510 */
511 setAttribute(attr: string, value: any): void;
511 setAttribute(attr: string, value: any): void;
512
512
513 /**
513 /**
514 * This method is deprecated, use get() or set() directly.
514 * This method is deprecated, use get() or set() directly.
515 */
515 */
516 attr(name: string | { [attr: string]: any }, value?: any): any;
516 attr(name: string | { [attr: string]: any }, value?: any): any;
517
517
518 /**
518 /**
519 * Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
519 * Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode.
520 */
520 */
521 getDescendants(): _Widget[];
521 getDescendants(): _Widget[];
522
522
523 /**
523 /**
524 * Called when this widget becomes the selected pane in a
524 * Called when this widget becomes the selected pane in a
525 * `dijit/layout/TabContainer`, `dijit/layout/StackContainer`,
525 * `dijit/layout/TabContainer`, `dijit/layout/StackContainer`,
526 * `dijit/layout/AccordionContainer`, etc.
526 * `dijit/layout/AccordionContainer`, etc.
527 *
527 *
528 * Also called to indicate display of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
528 * Also called to indicate display of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
529 */
529 */
530 onShow(): void;
530 onShow(): void;
531
531
532 /**
532 /**
533 * Called when another widget becomes the selected pane in a
533 * Called when another widget becomes the selected pane in a
534 * `dijit/layout/TabContainer`, `dijit/layout/StackContainer`,
534 * `dijit/layout/TabContainer`, `dijit/layout/StackContainer`,
535 * `dijit/layout/AccordionContainer`, etc.
535 * `dijit/layout/AccordionContainer`, etc.
536 *
536 *
537 * Also called to indicate hide of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
537 * Also called to indicate hide of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`.
538 */
538 */
539 onHide(): void;
539 onHide(): void;
540
540
541 /**
541 /**
542 * Called when this widget is being displayed as a popup (ex: a Calendar popped
542 * Called when this widget is being displayed as a popup (ex: a Calendar popped
543 * up from a DateTextBox), and it is hidden.
543 * up from a DateTextBox), and it is hidden.
544 * This is called from the dijit.popup code, and should not be called directly.
544 * This is called from the dijit.popup code, and should not be called directly.
545 *
545 *
546 * Also used as a parameter for children of `dijit/layout/StackContainer` or subclasses.
546 * Also used as a parameter for children of `dijit/layout/StackContainer` or subclasses.
547 * Callback if a user tries to close the child. Child will be closed if this function returns true.
547 * Callback if a user tries to close the child. Child will be closed if this function returns true.
548 */
548 */
549 onClose(): boolean;
549 onClose(): boolean;
550 }
550 }
551
551
552 interface _WidgetBase {
552 interface _WidgetBase {
553 /**
553 /**
554 * Used across all instances a hash to cache attribute names and their getter
554 * Used across all instances a hash to cache attribute names and their getter
555 * and setter names.
555 * and setter names.
556 */
556 */
557 _attrPairNames: { [attr: string]: string };
557 _attrPairNames: { [attr: string]: string };
558
558
559 /**
559 /**
560 * Helper function for get() and set().
560 * Helper function for get() and set().
561 * Caches attribute name values so we don't do the string ops every time.
561 * Caches attribute name values so we don't do the string ops every time.
562 */
562 */
563 _getAttrNames(name: string): string;
563 _getAttrNames(name: string): string;
564
564
565 /**
565 /**
566 * Internal helper for directly changing an attribute value.
566 * Internal helper for directly changing an attribute value.
567 * This method id derived from Stateful and must not be used!
567 * This method id derived from Stateful and must not be used!
568 * @deprecated use `_set(name, value)` instead.
568 * @deprecated use `_set(name, value)` instead.
569 */
569 */
570 _changeAttrValue(name: string, value: any): this;
570 _changeAttrValue(name: string, value: any): this;
571
571
572 get<K extends keyof this>(name: K): this[K];
572 get<K extends keyof this>(name: K): this[K];
573
573
574 /**
574 /**
575 * Helper function to set new value for specified property, and call handlers
575 * Helper function to set new value for specified property, and call handlers
576 * registered with watch() if the value has changed.
576 * registered with watch() if the value has changed.
577 * @param name
577 * @param name
578 * @param value
578 * @param value
579 */
579 */
580 _set<K extends keyof this>(name: K, value: this[K]): void;
580 _set<K extends keyof this>(name: K, value: this[K]): void;
581
581
582 /**
582 /**
583 * Helper function to get value for specified property stored by this._set(),
583 * Helper function to get value for specified property stored by this._set(),
584 * i.e. for properties with custom setters. Used mainly by custom getters.
584 * i.e. for properties with custom setters. Used mainly by custom getters.
585 *
585 *
586 * For example, CheckBox._getValueAttr() calls this._get("value").
586 * For example, CheckBox._getValueAttr() calls this._get("value").
587 * @param name
587 * @param name
588 */
588 */
589 _get<K extends keyof this>(name: K): this[K];
589 _get<K extends keyof this>(name: K): this[K];
590
590
591 /**
591 /**
592 * Set a property on a Stateful instance
592 * Set a property on a Stateful instance
593 */
593 */
594 set<K extends keyof this>(name: K, value: this[K], ...opts: unknown[]): this;
594 set<K extends keyof this>(name: K, value: this[K], ...opts: unknown[]): this;
595 set<K extends keyof this>(values: {[k in K]?: this[k]}): this;
595 set<K extends keyof this>(values: {[k in K]?: this[k]}): this;
596
596
597 /**
597 /**
598 * Watches a property for changes
598 * Watches a property for changes
599 */
599 */
600 watch(callback: <K extends keyof any>(prop: K, oldValue: any, newValue: any) => void): dojo.WatchHandle;
600 watch(callback: <K extends keyof any>(prop: K, oldValue: any, newValue: any) => void): dojo.WatchHandle;
601 watch<K extends keyof this>(name: K, callback: (prop: K, oldValue: this[K], newValue: this[K]) => void): dojo.WatchHandle;
601 watch<K extends keyof this>(name: K, callback: (prop: K, oldValue: this[K], newValue: this[K]) => void): dojo.WatchHandle;
602 }
602 }
603
603
604 type EventInitArgs<T extends Event> = {
604 type EventInitArgs<T extends Event> = {
605 [p in keyof T]?: T[p] extends (...args: any) => any ? never : T[p];
605 [p in keyof T]?: T[p] extends (...args: any) => any ? never : T[p];
606 };
606 };
607
607
608 /* dijit/_WidgetBase */
608 /* dijit/_WidgetBase */
609 interface _WidgetBase<Events extends { [name in keyof Events]: Event } = GlobalEventHandlersEventMap> extends Destroyable {
609 interface _WidgetBase<Events extends { [name in keyof Events]: Event } = GlobalEventHandlersEventMap> extends Destroyable {
610
610
611 /**
611 /**
612 * A unique, opaque ID string that can be assigned by users or by the
612 * A unique, opaque ID string that can be assigned by users or by the
613 * system. If the developer passes an ID which is known not to be
613 * system. If the developer passes an ID which is known not to be
614 * unique, the specified ID is ignored and the system-generated ID is
614 * unique, the specified ID is ignored and the system-generated ID is
615 * used instead.
615 * used instead.
616 */
616 */
617 id: string;
617 id: string;
618
618
619 /**
619 /**
620 * Rarely used. Overrides the default Dojo locale used to render this widget,
620 * Rarely used. Overrides the default Dojo locale used to render this widget,
621 * as defined by the [HTML LANG](http://www.w3.org/TR/html401/struct/dirlang.html#adef-lang) attribute.
621 * as defined by the [HTML LANG](http://www.w3.org/TR/html401/struct/dirlang.html#adef-lang) attribute.
622 * Value must be among the list of locales specified during by the Dojo bootstrap,
622 * Value must be among the list of locales specified during by the Dojo bootstrap,
623 * formatted according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt) (like en-us).
623 * formatted according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt) (like en-us).
624 */
624 */
625 lang: string;
625 lang?: string;
626
626
627 /**
627 /**
628 * Bi-directional support, as defined by the [HTML DIR](http://www.w3.org/TR/html401/struct/dirlang.html#adef-dir)
628 * Bi-directional support, as defined by the [HTML DIR](http://www.w3.org/TR/html401/struct/dirlang.html#adef-dir)
629 * attribute. Either left-to-right "ltr" or right-to-left "rtl". If undefined, widgets renders in page's
629 * attribute. Either left-to-right "ltr" or right-to-left "rtl". If undefined, widgets renders in page's
630 * default direction.
630 * default direction.
631 */
631 */
632 dir: string;
632 dir?: string;
633
633
634 /**
634 /**
635 * HTML class attribute
635 * HTML class attribute
636 */
636 */
637 class: string;
637 class?: string;
638
638
639 /**
639 /**
640 * HTML style attributes as cssText string or name/value hash
640 * HTML style attributes as cssText string or name/value hash
641 */
641 */
642 style: string;
642 style?: string;
643
643
644 /**
644 /**
645 * HTML title attribute.
645 * HTML title attribute.
646 *
646 *
647 * For form widgets this specifies a tooltip to display when hovering over
647 * For form widgets this specifies a tooltip to display when hovering over
648 * the widget (just like the native HTML title attribute).
648 * the widget (just like the native HTML title attribute).
649 *
649 *
650 * For TitlePane or for when this widget is a child of a TabContainer, AccordionContainer,
650 * For TitlePane or for when this widget is a child of a TabContainer, AccordionContainer,
651 * etc., it's used to specify the tab label, accordion pane title, etc. In this case it's
651 * etc., it's used to specify the tab label, accordion pane title, etc. In this case it's
652 * interpreted as HTML.
652 * interpreted as HTML.
653 */
653 */
654 title: string;
654 title?: string;
655
655
656 /**
656 /**
657 * When this widget's title attribute is used to for a tab label, accordion pane title, etc.,
657 * When this widget's title attribute is used to for a tab label, accordion pane title, etc.,
658 * this specifies the tooltip to appear when the mouse is hovered over that text.
658 * this specifies the tooltip to appear when the mouse is hovered over that text.
659 */
659 */
660 tooltip: string;
660 tooltip?: string;
661
661
662 /**
662 /**
663 * Root CSS class of the widget (ex: dijitTextBox), used to construct CSS classes to indicate
663 * Root CSS class of the widget (ex: dijitTextBox), used to construct CSS classes to indicate
664 * widget state.
664 * widget state.
665 */
665 */
666 baseClass: string;
666 baseClass: string;
667
667
668 /**
668 /**
669 * pointer to original DOM node
669 * pointer to original DOM node
670 */
670 */
671 srcNodeRef: HTMLElement;
671 srcNodeRef?: HTMLElement;
672
672
673 /**
673 /**
674 * This is our visible representation of the widget! Other DOM
674 * This is our visible representation of the widget! Other DOM
675 * Nodes may by assigned to other properties, usually through the
675 * Nodes may by assigned to other properties, usually through the
676 * template system's data-dojo-attach-point syntax, but the domNode
676 * template system's data-dojo-attach-point syntax, but the domNode
677 * property is the canonical "top level" node in widget UI.
677 * property is the canonical "top level" node in widget UI.
678 */
678 */
679 domNode: HTMLElement;
679 domNode: HTMLElement;
680
680
681 /**
681 /**
682 * Designates where children of the source DOM node will be placed.
682 * Designates where children of the source DOM node will be placed.
683 * "Children" in this case refers to both DOM nodes and widgets.
683 * "Children" in this case refers to both DOM nodes and widgets.
684 */
684 */
685 containerNode: HTMLElement;
685 containerNode?: HTMLElement;
686
686
687 /**
687 /**
688 * The document this widget belongs to. If not specified to constructor, will default to
688 * The document this widget belongs to. If not specified to constructor, will default to
689 * srcNodeRef.ownerDocument, or if no sourceRef specified, then to the document global
689 * srcNodeRef.ownerDocument, or if no sourceRef specified, then to the document global
690 */
690 */
691 ownerDocument: HTMLElement;
691 ownerDocument: HTMLElement;
692
692
693 /**
693 /**
694 * Deprecated. Instead of attributeMap, widget should have a _setXXXAttr attribute
694 * Deprecated. Instead of attributeMap, widget should have a _setXXXAttr attribute
695 * for each XXX attribute to be mapped to the DOM.
695 * for each XXX attribute to be mapped to the DOM.
696 */
696 */
697 attributeMap: { [attribute: string]: any };
697 attributeMap: { [attribute: string]: any };
698
698
699 /**
699 /**
700 * Bi-directional support, the main variable which is responsible for the direction of the text.
700 * Bi-directional support, the main variable which is responsible for the direction of the text.
701 * The text direction can be different than the GUI direction by using this parameter in creation
701 * The text direction can be different than the GUI direction by using this parameter in creation
702 * of a widget.
702 * of a widget.
703 */
703 */
704 textDir: string;
704 textDir?: string;
705
705
706 _started?: boolean;
706 _started?: boolean;
707
707
708 /**
708 /**
709 * Kicks off widget instantiation. See create() for details.
709 * Kicks off widget instantiation. See create() for details.
710 */
710 */
711 postscript(params?: any, srcNodeRef?: HTMLElement): void;
711 postscript(params?: any, srcNodeRef?: HTMLElement): void;
712
712
713 /**
713 /**
714 * Kick off the life-cycle of a widget
714 * Kick off the life-cycle of a widget
715 */
715 */
716 create(params?: any, srcNodeRef?: HTMLElement): void;
716 create(params?: any, srcNodeRef?: HTMLElement): void;
717
717
718 /**
718 /**
719 * Called after the parameters to the widget have been read-in,
719 * Called after the parameters to the widget have been read-in,
720 * but before the widget template is instantiated. Especially
720 * but before the widget template is instantiated. Especially
721 * useful to set properties that are referenced in the widget
721 * useful to set properties that are referenced in the widget
722 * template.
722 * template.
723 */
723 */
724 postMixInProperties(): void;
724 postMixInProperties(): void;
725
725
726 /**
726 /**
727 * Construct the UI for this widget, setting this.domNode.
727 * Construct the UI for this widget, setting this.domNode.
728 * Most widgets will mixin `dijit._TemplatedMixin`, which implements this method.
728 * Most widgets will mixin `dijit._TemplatedMixin`, which implements this method.
729 */
729 */
730 buildRendering(): void;
730 buildRendering(): void;
731
731
732 /**
732 /**
733 * Processing after the DOM fragment is created
733 * Processing after the DOM fragment is created
734 */
734 */
735 postCreate(): void;
735 postCreate(): void;
736
736
737 /**
737 /**
738 * Processing after the DOM fragment is added to the document
738 * Processing after the DOM fragment is added to the document
739 */
739 */
740 startup(): void;
740 startup(): void;
741
741
742 /**
742 /**
743 * Destroy this widget and its descendants
743 * Destroy this widget and its descendants
744 */
744 */
745 destroyRecursive(preserveDom?: boolean): void;
745 destroyRecursive(preserveDom?: boolean): void;
746
746
747 /**
747 /**
748 * Destroys the DOM nodes associated with this widget.
748 * Destroys the DOM nodes associated with this widget.
749 */
749 */
750 destroyRendering(preserveDom?: boolean): void;
750 destroyRendering(preserveDom?: boolean): void;
751
751
752 /**
752 /**
753 * Recursively destroy the children of this widget and their
753 * Recursively destroy the children of this widget and their
754 * descendants.
754 * descendants.
755 */
755 */
756 destroyDescendants(preserveDom?: boolean): void;
756 destroyDescendants(preserveDom?: boolean): void;
757
757
758 /**
758 /**
759 * Deprecated. Override destroy() instead to implement custom widget tear-down
759 * Deprecated. Override destroy() instead to implement custom widget tear-down
760 * behavior.
760 * behavior.
761 * @deprecated
761 * @deprecated
762 */
762 */
763 uninitialize(): boolean;
763 uninitialize(): boolean;
764
764
765 /**
765 /**
766 * Used by widgets to signal that a synthetic event occurred, ex:
766 * Used by widgets to signal that a synthetic event occurred, ex:
767 * | myWidget.emit("attrmodified-selectedChildWidget", {}).
767 * | myWidget.emit("attrmodified-selectedChildWidget", {}).
768 */
768 */
769 emit<K extends keyof Events>(eventName: K, evt: EventInitArgs<Events[K]>, callbackArgs?: any[]): any;
769 emit<K extends keyof Events>(eventName: K, evt: EventInitArgs<Events[K]>, callbackArgs?: any[]): any;
770
770
771 /**
771 /**
772 * Call specified function when event occurs, ex: myWidget.on("click", function(){ ... }).
772 * Call specified function when event occurs, ex: myWidget.on("click", function(){ ... }).
773 */
773 */
774 on<K extends keyof Events>(eventName: K, cb: (evt: Events[K]) => void): dojo.WatchHandle;
774 on<K extends keyof Events>(eventName: K, cb: (evt: Events[K]) => void): dojo.WatchHandle;
775
775
776 on(type: dojo.ExtensionEvent, func: dojo.EventListener): dojo.WatchHandle;
776 on(type: dojo.ExtensionEvent, func: dojo.EventListener): dojo.WatchHandle;
777
777
778 /**
778 /**
779 * Returns a string that represents the widget.
779 * Returns a string that represents the widget.
780 */
780 */
781 toString(): string;
781 toString(): string;
782
782
783 /**
783 /**
784 * Returns all direct children of this widget, i.e. all widgets underneath this.containerNode whose parent
784 * Returns all direct children of this widget, i.e. all widgets underneath this.containerNode whose parent
785 * is this widget. Note that it does not return all descendants, but rather just direct children.
785 * is this widget. Note that it does not return all descendants, but rather just direct children.
786 */
786 */
787 getChildren<T extends _WidgetBase>(): T[];
787 getChildren<T extends _WidgetBase>(): T[];
788
788
789 /**
789 /**
790 * Returns the parent widget of this widget.
790 * Returns the parent widget of this widget.
791 */
791 */
792 getParent<T extends _WidgetBase>(): T;
792 getParent<T extends _WidgetBase>(): T;
793
793
794 /**
794 /**
795 * Deprecated, will be removed in 2.0, use this.own(on(...)) or this.own(aspect.after(...)) instead.
795 * Deprecated, will be removed in 2.0, use this.own(on(...)) or this.own(aspect.after(...)) instead.
796 * @deprecated
796 * @deprecated
797 */
797 */
798 connect(obj: any, event: string | dojo.ExtensionEvent, method: string | dojo.EventListener): dojo.WatchHandle;
798 connect(obj: any, event: string | dojo.ExtensionEvent, method: string | dojo.EventListener): dojo.WatchHandle;
799
799
800 /**
800 /**
801 * Deprecated, will be removed in 2.0, use handle.remove() instead.
801 * Deprecated, will be removed in 2.0, use handle.remove() instead.
802 * @deprecated
802 * @deprecated
803 */
803 */
804 disconnect(handle: dojo.WatchHandle): void;
804 disconnect(handle: dojo.WatchHandle): void;
805
805
806 /**
806 /**
807 * Deprecated, will be removed in 2.0, use this.own(topic.subscribe()) instead.
807 * Deprecated, will be removed in 2.0, use this.own(topic.subscribe()) instead.
808 * @deprecated
808 * @deprecated
809 */
809 */
810 subscribe(t: string, method: dojo.EventListener): dojo.WatchHandle;
810 subscribe(t: string, method: dojo.EventListener): dojo.WatchHandle;
811
811
812 /**
812 /**
813 * Deprecated, will be removed in 2.0, use handle.remove() instead.
813 * Deprecated, will be removed in 2.0, use handle.remove() instead.
814 * @deprecated
814 * @deprecated
815 */
815 */
816 unsubscribe(handle: dojo.WatchHandle): void;
816 unsubscribe(handle: dojo.WatchHandle): void;
817
817
818 /**
818 /**
819 * Return this widget's explicit or implicit orientation (true for LTR, false for RTL)
819 * Return this widget's explicit or implicit orientation (true for LTR, false for RTL)
820 */
820 */
821 isLeftToRight(): boolean;
821 isLeftToRight(): boolean;
822
822
823 /**
823 /**
824 * Return true if this widget can currently be focused
824 * Return true if this widget can currently be focused
825 * and false if not
825 * and false if not
826 */
826 */
827 isFocusable(): boolean;
827 isFocusable(): boolean;
828
828
829 /**
829 /**
830 * Place this widget somewhere in the DOM based
830 * Place this widget somewhere in the DOM based
831 * on standard domConstruct.place() conventions.
831 * on standard domConstruct.place() conventions.
832 */
832 */
833 placeAt<T extends _WidgetBase>(reference: dojo.NodeFragmentOrString | T, position?: string | number): this;
833 placeAt<T extends _WidgetBase>(reference: dojo.NodeFragmentOrString | T, position?: string | number): this;
834
834
835 /**
835 /**
836 * Wrapper to setTimeout to avoid deferred functions executing
836 * Wrapper to setTimeout to avoid deferred functions executing
837 * after the originating widget has been destroyed.
837 * after the originating widget has been destroyed.
838 * Returns an object handle with a remove method (that returns null) (replaces clearTimeout).
838 * Returns an object handle with a remove method (that returns null) (replaces clearTimeout).
839 */
839 */
840 defer(fcn: Function, delay?: number): dojo.Handle;
840 defer(fcn: Function, delay?: number): dojo.Handle;
841 }
841 }
842
842
843 interface _WidgetBaseConstructor<W> extends Pick<dojo._base.DeclareConstructor<W>, Exclude<keyof dojo._base.DeclareConstructor<W>, 'new'>> {
843 interface _WidgetBaseConstructor<W> extends Pick<dojo._base.DeclareConstructor<W>, Exclude<keyof dojo._base.DeclareConstructor<W>, 'new'>> {
844 new(params?: Partial<W> & ThisType<W>, srcNodeRef?: dojo.NodeOrString): W & dojo._base.DeclareCreatedObject;
844 new(params?: Partial<W> & ThisType<W>, srcNodeRef?: dojo.NodeOrString): W & dojo._base.DeclareCreatedObject;
845 }
845 }
846
846
847 /* dijit/_WidgetsInTemplateMixin */
847 /* dijit/_WidgetsInTemplateMixin */
848
848
849 interface _WidgetsInTemplateMixin {
849 interface _WidgetsInTemplateMixin {
850 /**
850 /**
851 * Used to provide a context require to dojo/parser in order to be
851 * Used to provide a context require to dojo/parser in order to be
852 * able to use relative MIDs (e.g. `./Widget`) in the widget's template.
852 * able to use relative MIDs (e.g. `./Widget`) in the widget's template.
853 */
853 */
854 contextRequire: Function;
854 contextRequire: Function;
855
855
856 startup(): void;
856 startup(): void;
857 }
857 }
858
858
859 interface _WidgetsInTemplateMixinConstructor extends dojo._base.DeclareConstructor<_WidgetsInTemplateMixin> {
859 interface _WidgetsInTemplateMixinConstructor extends dojo._base.DeclareConstructor<_WidgetsInTemplateMixin> {
860 new(params: Object, srcNodeRef: dojo.NodeOrString): _WidgetsInTemplateMixin;
860 new(params: Object, srcNodeRef: dojo.NodeOrString): _WidgetsInTemplateMixin;
861 }
861 }
862
862
863 /* dijit/a11yclick */
863 /* dijit/a11yclick */
864
864
865 interface A11yClick {
865 interface A11yClick {
866
866
867 /**
867 /**
868 * Custom press, release, and click synthetic events
868 * Custom press, release, and click synthetic events
869 * which trigger on a left mouse click, touch, or space/enter keyup.
869 * which trigger on a left mouse click, touch, or space/enter keyup.
870 */
870 */
871 (node: HTMLElement, listener: Function): dojo.Handle;
871 (node: HTMLElement, listener: Function): dojo.Handle;
872
872
873 /**
873 /**
874 * Mousedown (left button), touchstart, or keydown (space or enter) corresponding to logical click operation.
874 * Mousedown (left button), touchstart, or keydown (space or enter) corresponding to logical click operation.
875 */
875 */
876 press: dojo.ExtensionEvent;
876 press: dojo.ExtensionEvent;
877
877
878 /**
878 /**
879 * Mouseup (left button), touchend, or keyup (space or enter) corresponding to logical click operation.
879 * Mouseup (left button), touchend, or keyup (space or enter) corresponding to logical click operation.
880 */
880 */
881 release: dojo.ExtensionEvent;
881 release: dojo.ExtensionEvent;
882
882
883 /**
883 /**
884 * Mouse cursor or a finger is dragged over the given node.
884 * Mouse cursor or a finger is dragged over the given node.
885 */
885 */
886 move: dojo.ExtensionEvent;
886 move: dojo.ExtensionEvent;
887 }
887 }
888
888
889 /* dijit/Calendar */
889 /* dijit/Calendar */
890
890
891 interface _MonthDropDownButton extends form.DropDownButton<_MonthDropDown> {
891 interface _MonthDropDownButton extends form.DropDownButton<_MonthDropDown> {
892 onMonthSelect(): void;
892 onMonthSelect(): void;
893 postCreate(): void;
893 postCreate(): void;
894
894
895 //set(name: 'month', value: number): this;
895 //set(name: 'month', value: number): this;
896 //set(name: string, value: any): this;
896 //set(name: string, value: any): this;
897 //set(values: Object): this;
897 //set(values: Object): this;
898 }
898 }
899
899
900 interface _MonthDropDownButtonConstructor extends _WidgetBaseConstructor<_MonthDropDownButton> { }
900 interface _MonthDropDownButtonConstructor extends _WidgetBaseConstructor<_MonthDropDownButton> { }
901
901
902 interface _MonthDropDown extends _Widget, _TemplatedMixin, _CssStateMixin {
902 interface _MonthDropDown extends _Widget, _TemplatedMixin, _CssStateMixin {
903 months: string[];
903 months: string[];
904 baseClass: string;
904 baseClass: string;
905 templateString: string;
905 templateString: string;
906
906
907 /**
907 /**
908 * Callback when month is selected from drop down
908 * Callback when month is selected from drop down
909 */
909 */
910 onChange(month: number): void;
910 onChange(month: number): void;
911
911
912 //set(name: 'months', value: string[]): this;
912 //set(name: 'months', value: string[]): this;
913 //set(name: string, value: any): this;
913 //set(name: string, value: any): this;
914 //set(values: Object): this;
914 //set(values: Object): this;
915 }
915 }
916
916
917 interface _MonthDropDownConstructor extends _WidgetBaseConstructor<_MonthDropDown> { }
917 interface _MonthDropDownConstructor extends _WidgetBaseConstructor<_MonthDropDown> { }
918
918
919 interface Calendar extends CalendarLite, _Widget, _CssStateMixin {
919 interface Calendar extends CalendarLite, _Widget, _CssStateMixin {
920
920
921 baseClass: string;
921 baseClass: string;
922
922
923 /**
923 /**
924 * Set node classes for various mouse events, see dijit._CssStateMixin for more details
924 * Set node classes for various mouse events, see dijit._CssStateMixin for more details
925 */
925 */
926 cssStateNodes: CSSStateNodes;
926 cssStateNodes: CSSStateNodes;
927
927
928 /**
928 /**
929 * Creates the drop down button that displays the current month and lets user pick a new one
929 * Creates the drop down button that displays the current month and lets user pick a new one
930 */
930 */
931 _createMonthWidget(): _MonthDropDownButton;
931 _createMonthWidget(): _MonthDropDownButton;
932
932
933 postCreate(): void;
933 postCreate(): void;
934
934
935 /**
935 /**
936 * Handler for when user selects a month from the drop down list
936 * Handler for when user selects a month from the drop down list
937 */
937 */
938 _onMonthSelect(newMonth: number): void;
938 _onMonthSelect(newMonth: number): void;
939
939
940 /**
940 /**
941 * Handler for mouse over events on days, sets hovered style
941 * Handler for mouse over events on days, sets hovered style
942 */
942 */
943 _onDayMouseOver(evt: MouseEvent): void;
943 _onDayMouseOver(evt: MouseEvent): void;
944
944
945 /**
945 /**
946 * Handler for mouse out events on days, clears hovered style
946 * Handler for mouse out events on days, clears hovered style
947 */
947 */
948 _onDayMouseOut(evt: MouseEvent): void;
948 _onDayMouseOut(evt: MouseEvent): void;
949 _onDayMouseDown(evt: MouseEvent): void;
949 _onDayMouseDown(evt: MouseEvent): void;
950 _onDayMouseUp(evt: MouseEvent): void;
950 _onDayMouseUp(evt: MouseEvent): void;
951
951
952 /**
952 /**
953 * Provides keyboard navigation of calendar.
953 * Provides keyboard navigation of calendar.
954 */
954 */
955 handleKey(evt: KeyboardEvent): void;
955 handleKey(evt: KeyboardEvent): void;
956
956
957 /**
957 /**
958 * For handling keydown events on a stand alone calendar
958 * For handling keydown events on a stand alone calendar
959 */
959 */
960 _onKeyDown(evt: KeyboardEvent): void;
960 _onKeyDown(evt: KeyboardEvent): void;
961
961
962 /**
962 /**
963 * Deprecated. Notification that a date cell was selected. It may be the same as the previous value.
963 * Deprecated. Notification that a date cell was selected. It may be the same as the previous value.
964 */
964 */
965 onValueSelected(date: Date): void;
965 onValueSelected(date: Date): void;
966
966
967 onChange(date: Date): void;
967 onChange(date: Date): void;
968
968
969 /**
969 /**
970 * May be overridden to return CSS classes to associate with the date entry for the given dateObject
970 * May be overridden to return CSS classes to associate with the date entry for the given dateObject
971 * for example to indicate a holiday in specified locale.
971 * for example to indicate a holiday in specified locale.
972 */
972 */
973 getClassForDate(dateObject: Date, locale?: string): string;
973 getClassForDate(dateObject: Date, locale?: string): string;
974
974
975 // get(name: 'value'): Date;
975 // get(name: 'value'): Date;
976 // get(name: string): any;
976 // get(name: string): any;
977
977
978 // set(name: 'value', value: number | Date): this;
978 // set(name: 'value', value: number | Date): this;
979 // set(name: string, value: any): this;
979 // set(name: string, value: any): this;
980 // set(values: Object): this;
980 // set(values: Object): this;
981 }
981 }
982
982
983 interface CalendarConstructor extends _WidgetBaseConstructor<Calendar> {
983 interface CalendarConstructor extends _WidgetBaseConstructor<Calendar> {
984 _MonthWidget: _MonthWidgetConstructor;
984 _MonthWidget: _MonthWidgetConstructor;
985 _MonthDropDown: _MonthDropDownButtonConstructor;
985 _MonthDropDown: _MonthDropDownButtonConstructor;
986 _MonthDropDownButton: _MonthDropDownButtonConstructor;
986 _MonthDropDownButton: _MonthDropDownButtonConstructor;
987 }
987 }
988
988
989 /* dijit/CalendarLite */
989 /* dijit/CalendarLite */
990
990
991 interface _MonthWidget extends _WidgetBase {
991 interface _MonthWidget extends _WidgetBase {
992 // set(name: 'month', value: Date): this;
992 // set(name: 'month', value: Date): this;
993 // set(name: string, value: any): this;
993 // set(name: string, value: any): this;
994 // set(values: Object): this;
994 // set(values: Object): this;
995 }
995 }
996
996
997 interface _MonthWidgetConstructor extends _WidgetBaseConstructor<_MonthWidget> { }
997 interface _MonthWidgetConstructor extends _WidgetBaseConstructor<_MonthWidget> { }
998
998
999 interface CalendarLite extends _WidgetBase, _TemplatedMixin {
999 interface CalendarLite extends _WidgetBase, _TemplatedMixin {
1000 /**
1000 /**
1001 * Template for main calendar
1001 * Template for main calendar
1002 */
1002 */
1003 templateString: string;
1003 templateString: string;
1004
1004
1005 /**
1005 /**
1006 * Template for cell for a day of the week (ex: M)
1006 * Template for cell for a day of the week (ex: M)
1007 */
1007 */
1008 dowTemplateString: string;
1008 dowTemplateString: string;
1009
1009
1010 dateTemplateString: string;
1010 dateTemplateString: string;
1011 weekTemplateString: string;
1011 weekTemplateString: string;
1012
1012
1013 /**
1013 /**
1014 * The currently selected Date, initially set to invalid date to indicate no selection.
1014 * The currently selected Date, initially set to invalid date to indicate no selection.
1015 */
1015 */
1016 value: Date;
1016 value: Date;
1017
1017
1018 /**
1018 /**
1019 * JavaScript namespace to find calendar routines. If unspecified, uses Gregorian calendar routines
1019 * JavaScript namespace to find calendar routines. If unspecified, uses Gregorian calendar routines
1020 * at dojo/date and dojo/date/locale.
1020 * at dojo/date and dojo/date/locale.
1021 */
1021 */
1022 datePackage: string;
1022 datePackage: string;
1023
1023
1024 /**
1024 /**
1025 * How to represent the days of the week in the calendar header. See locale
1025 * How to represent the days of the week in the calendar header. See locale
1026 */
1026 */
1027 dayWidth: string;
1027 dayWidth: string;
1028
1028
1029 /**
1029 /**
1030 * Order fields are traversed when user hits the tab key
1030 * Order fields are traversed when user hits the tab key
1031 */
1031 */
1032 tabIndex: string;
1032 tabIndex: string;
1033
1033
1034 /**
1034 /**
1035 * (Optional) The first day of week override. By default the first day of week is determined
1035 * (Optional) The first day of week override. By default the first day of week is determined
1036 * for the current locale (extracted from the CLDR).
1036 * for the current locale (extracted from the CLDR).
1037 * Special value -1 (default value), means use locale dependent value.
1037 * Special value -1 (default value), means use locale dependent value.
1038 */
1038 */
1039 dayOffset: number;
1039 dayOffset: number;
1040
1040
1041 /**
1041 /**
1042 * Date object containing the currently focused date, or the date which would be focused
1042 * Date object containing the currently focused date, or the date which would be focused
1043 * if the calendar itself was focused. Also indicates which year and month to display,
1043 * if the calendar itself was focused. Also indicates which year and month to display,
1044 * i.e. the current "page" the calendar is on.
1044 * i.e. the current "page" the calendar is on.
1045 */
1045 */
1046 currentFocus: Date;
1046 currentFocus: Date;
1047
1047
1048 /**
1048 /**
1049 * Put the summary to the node with role=grid
1049 * Put the summary to the node with role=grid
1050 */
1050 */
1051 _setSummaryAttr: string;
1051 _setSummaryAttr: string;
1052
1052
1053 baseClass: string;
1053 baseClass: string;
1054
1054
1055 /**
1055 /**
1056 * Runs various tests on the value, checking that it's a valid date, rather
1056 * Runs various tests on the value, checking that it's a valid date, rather
1057 * than blank or NaN.
1057 * than blank or NaN.
1058 */
1058 */
1059 _isValidDate(value: Date): boolean;
1059 _isValidDate(value: Date): boolean;
1060
1060
1061 /**
1061 /**
1062 * Convert Number into Date, or copy Date object. Then, round to nearest day,
1062 * Convert Number into Date, or copy Date object. Then, round to nearest day,
1063 * setting to 1am to avoid issues when DST shift occurs at midnight, see #8521, #9366)
1063 * setting to 1am to avoid issues when DST shift occurs at midnight, see #8521, #9366)
1064 */
1064 */
1065 _patchDate(value: number | Date): Date;
1065 _patchDate(value: number | Date): Date;
1066
1066
1067 /**
1067 /**
1068 * This just sets the content of node to the specified text.
1068 * This just sets the content of node to the specified text.
1069 * Can't do "node.innerHTML=text" because of an IE bug w/tables, see #3434.
1069 * Can't do "node.innerHTML=text" because of an IE bug w/tables, see #3434.
1070 */
1070 */
1071 _setText(node: HTMLElement, text?: string): void;
1071 _setText(node: HTMLElement, text?: string): void;
1072
1072
1073 /**
1073 /**
1074 * Fills in the calendar grid with each day (1-31).
1074 * Fills in the calendar grid with each day (1-31).
1075 * Call this on creation, when moving to a new month.
1075 * Call this on creation, when moving to a new month.
1076 */
1076 */
1077 _populateGrid(): void;
1077 _populateGrid(): void;
1078
1078
1079 /**
1079 /**
1080 * Fill in localized month, and prev/current/next years
1080 * Fill in localized month, and prev/current/next years
1081 */
1081 */
1082 _populateControls(): void;
1082 _populateControls(): void;
1083
1083
1084 /**
1084 /**
1085 * Sets calendar's value to today's date
1085 * Sets calendar's value to today's date
1086 */
1086 */
1087 goToToday(): void;
1087 goToToday(): void;
1088
1088
1089 /**
1089 /**
1090 * Creates the drop down button that displays the current month and lets user pick a new one
1090 * Creates the drop down button that displays the current month and lets user pick a new one
1091 */
1091 */
1092 _createMonthWidget(): void;
1092 _createMonthWidget(): void;
1093
1093
1094 buildRendering(): void;
1094 buildRendering(): void;
1095 postCreate(): void;
1095 postCreate(): void;
1096
1096
1097 /**
1097 /**
1098 * Set up connects for increment/decrement of months/years
1098 * Set up connects for increment/decrement of months/years
1099 */
1099 */
1100 _connectControls(): void;
1100 _connectControls(): void;
1101
1101
1102 /**
1102 /**
1103 * If the calendar currently has focus, then focuses specified date,
1103 * If the calendar currently has focus, then focuses specified date,
1104 * changing the currently displayed month/year if necessary.
1104 * changing the currently displayed month/year if necessary.
1105 * If the calendar doesn't have focus, updates currently
1105 * If the calendar doesn't have focus, updates currently
1106 * displayed month/year, and sets the cell that will get focus
1106 * displayed month/year, and sets the cell that will get focus
1107 * when Calendar is focused.
1107 * when Calendar is focused.
1108 */
1108 */
1109 _setCurrentFocusAttr(date: Date, forceFocus?: boolean): void;
1109 _setCurrentFocusAttr(date: Date, forceFocus?: boolean): void;
1110
1110
1111 /**
1111 /**
1112 * Focus the calendar by focusing one of the calendar cells
1112 * Focus the calendar by focusing one of the calendar cells
1113 */
1113 */
1114 focus(): void;
1114 focus(): void;
1115
1115
1116 /**
1116 /**
1117 * Handler for day clicks, selects the date if appropriate
1117 * Handler for day clicks, selects the date if appropriate
1118 */
1118 */
1119 _onDayClick(evt: MouseEvent): void;
1119 _onDayClick(evt: MouseEvent): void;
1120
1120
1121 /**
1121 /**
1122 * Returns the cell corresponding to the date, or null if the date is not within the currently
1122 * Returns the cell corresponding to the date, or null if the date is not within the currently
1123 * displayed month.
1123 * displayed month.
1124 */
1124 */
1125 _getNodeByDate(value: Date): HTMLElement;
1125 _getNodeByDate(value: Date): HTMLElement;
1126
1126
1127 /**
1127 /**
1128 * Marks the specified cells as selected, and clears cells previously marked as selected.
1128 * Marks the specified cells as selected, and clears cells previously marked as selected.
1129 * For CalendarLite at most one cell is selected at any point, but this allows an array
1129 * For CalendarLite at most one cell is selected at any point, but this allows an array
1130 * for easy subclassing.
1130 * for easy subclassing.
1131 */
1131 */
1132 _markSelectedDates(dates: Date[]): void;
1132 _markSelectedDates(dates: Date[]): void;
1133
1133
1134 /**
1134 /**
1135 * Called only when the selected date has changed
1135 * Called only when the selected date has changed
1136 */
1136 */
1137 onChange(date: Date): void;
1137 onChange(date: Date): void;
1138
1138
1139 /**
1139 /**
1140 * May be overridden to disable certain dates in the calendar e.g. `isDisabledDate=dojo.date.locale.isWeekend`
1140 * May be overridden to disable certain dates in the calendar e.g. `isDisabledDate=dojo.date.locale.isWeekend`
1141 */
1141 */
1142 isDisabledDate(dateObject: Date, locale?: string): boolean;
1142 isDisabledDate(dateObject: Date, locale?: string): boolean;
1143
1143
1144 /**
1144 /**
1145 * May be overridden to return CSS classes to associate with the date entry for the given dateObject,
1145 * May be overridden to return CSS classes to associate with the date entry for the given dateObject,
1146 * for example to indicate a holiday in specified locale.
1146 * for example to indicate a holiday in specified locale.
1147 */
1147 */
1148 getClassForDate(dateObject: Date, locale?: string): string;
1148 getClassForDate(dateObject: Date, locale?: string): string;
1149
1149
1150 // get(name: 'value'): Date;
1150 // get(name: 'value'): Date;
1151 // get(name: string): any;
1151 // get(name: string): any;
1152
1152
1153 // set(name: 'value', value: number | Date): this;
1153 // set(name: 'value', value: number | Date): this;
1154 // set(name: string, value: any): this;
1154 // set(name: string, value: any): this;
1155 // set(values: Object): this;
1155 // set(values: Object): this;
1156 }
1156 }
1157
1157
1158 interface CalendarLiteConstructor extends _WidgetBaseConstructor<CalendarLite> {
1158 interface CalendarLiteConstructor extends _WidgetBaseConstructor<CalendarLite> {
1159 _MonthWidget: _MonthWidgetConstructor;
1159 _MonthWidget: _MonthWidgetConstructor;
1160 }
1160 }
1161
1161
1162 /* dijit/Destroyable */
1162 /* dijit/Destroyable */
1163
1163
1164 interface Destroyable {
1164 interface Destroyable {
1165 _destroyed?: true;
1165 _destroyed?: true;
1166
1166
1167 /**
1167 /**
1168 * Destroy this class, releasing any resources registered via own().
1168 * Destroy this class, releasing any resources registered via own().
1169 */
1169 */
1170 destroy(preserveDom?: boolean): void;
1170 destroy(preserveDom?: boolean): void;
1171
1171
1172 /**
1172 /**
1173 * Track specified handles and remove/destroy them when this instance is destroyed, unless they were
1173 * Track specified handles and remove/destroy them when this instance is destroyed, unless they were
1174 * already removed/destroyed manually.
1174 * already removed/destroyed manually.
1175 */
1175 */
1176 own(...args: any[]): any[];
1176 own(...args: any[]): any[];
1177 }
1177 }
1178
1178
1179 /**
1179 /**
1180 * Mixin to track handles and release them when instance is destroyed.
1180 * Mixin to track handles and release them when instance is destroyed.
1181 */
1181 */
1182 interface DestroyableConstructor extends dojo._base.DeclareConstructor<Destroyable> { }
1182 interface DestroyableConstructor extends dojo._base.DeclareConstructor<Destroyable> { }
1183
1183
1184 /** dijit/_KeyNavMixin */
1184 /** dijit/_KeyNavMixin */
1185
1185
1186 /**
1186 /**
1187 * A mixin to allow arrow key and letter key navigation of child or descendant widgets.
1187 * A mixin to allow arrow key and letter key navigation of child or descendant widgets.
1188 * It can be used by dijit/_Container based widgets with a flat list of children, or more complex widgets like dijit/Tree.
1188 * It can be used by dijit/_Container based widgets with a flat list of children, or more complex widgets like dijit/Tree.
1189 *
1189 *
1190 * To use this mixin, the subclass must:
1190 * To use this mixin, the subclass must:
1191 *
1191 *
1192 * - Implement _getNext(), _getFirst(), _getLast(), _onLeftArrow(), _onRightArrow() _onDownArrow(), _onUpArrow() methods to handle home/end/left/right/up/down keystrokes. Next and previous in this context refer to a linear ordering of the descendants used by letter key search.
1192 * - Implement _getNext(), _getFirst(), _getLast(), _onLeftArrow(), _onRightArrow() _onDownArrow(), _onUpArrow() methods to handle home/end/left/right/up/down keystrokes. Next and previous in this context refer to a linear ordering of the descendants used by letter key search.
1193 * - Set all descendants' initial tabIndex to "-1"; both initial descendants and any descendants added later, by for example addChild()
1193 * - Set all descendants' initial tabIndex to "-1"; both initial descendants and any descendants added later, by for example addChild()
1194 * - Define childSelector to a function or string that identifies focusable descendant widgets
1194 * - Define childSelector to a function or string that identifies focusable descendant widgets
1195 *
1195 *
1196 * Also, child widgets must implement a focus() method.
1196 * Also, child widgets must implement a focus() method.
1197 */
1197 */
1198 interface _KeyNavMixin extends _FocusMixin {
1198 interface _KeyNavMixin extends _FocusMixin {
1199 /**
1199 /**
1200 * Tab index of the container; same as HTML tabIndex attribute.
1200 * Tab index of the container; same as HTML tabIndex attribute.
1201 * Note then when user tabs into the container, focus is immediately moved to the first item in the container.
1201 * Note then when user tabs into the container, focus is immediately moved to the first item in the container.
1202 */
1202 */
1203 tabIndex: string;
1203 tabIndex: string;
1204
1204
1205 /**
1205 /**
1206 * Selector (passed to on.selector()) used to identify what to treat as a child widget. Used to monitor focus events and set this.focusedChild. Must be set by implementing class. If this is a string (ex: "> *") then the implementing class must require dojo/query.
1206 * Selector (passed to on.selector()) used to identify what to treat as a child widget. Used to monitor focus events and set this.focusedChild. Must be set by implementing class. If this is a string (ex: "> *") then the implementing class must require dojo/query.
1207 */
1207 */
1208 childSelector: string | Function | null;
1208 childSelector: string | Function | null;
1209
1209
1210 /**
1210 /**
1211 * Called on left arrow key, or right arrow key if widget is in RTL mode.
1211 * Called on left arrow key, or right arrow key if widget is in RTL mode.
1212 * Should go back to the previous child in horizontal container widgets like Toolbar.
1212 * Should go back to the previous child in horizontal container widgets like Toolbar.
1213 */
1213 */
1214 _onLeftArrow(evt?: KeyboardEvent): void;
1214 _onLeftArrow(evt?: KeyboardEvent): void;
1215
1215
1216 /**
1216 /**
1217 * Called on right arrow key, or left arrow key if widget is in RTL mode.
1217 * Called on right arrow key, or left arrow key if widget is in RTL mode.
1218 * Should go to the next child in horizontal container widgets like Toolbar.
1218 * Should go to the next child in horizontal container widgets like Toolbar.
1219 */
1219 */
1220 _onRightArrow(evt?: KeyboardEvent): void;
1220 _onRightArrow(evt?: KeyboardEvent): void;
1221
1221
1222 /**
1222 /**
1223 * Called on up arrow key. Should go to the previous child in vertical container widgets like Menu.
1223 * Called on up arrow key. Should go to the previous child in vertical container widgets like Menu.
1224 */
1224 */
1225 _onUpArrow(evt?: KeyboardEvent): void;
1225 _onUpArrow(evt?: KeyboardEvent): void;
1226
1226
1227 /**
1227 /**
1228 * Called on down arrow key. Should go to the next child in vertical container widgets like Menu.
1228 * Called on down arrow key. Should go to the next child in vertical container widgets like Menu.
1229 */
1229 */
1230 _onDownArrow(evt?: KeyboardEvent): void;
1230 _onDownArrow(evt?: KeyboardEvent): void;
1231
1231
1232 /**
1232 /**
1233 * Default focus() implementation: focus the first child.
1233 * Default focus() implementation: focus the first child.
1234 */
1234 */
1235 focus(): void;
1235 focus(): void;
1236
1236
1237 /**
1237 /**
1238 * Returns first child that can be focused.
1238 * Returns first child that can be focused.
1239 */
1239 */
1240 _getFirstFocusableChild(): _WidgetBase;
1240 _getFirstFocusableChild(): _WidgetBase;
1241
1241
1242 /**
1242 /**
1243 * Returns last child that can be focused.
1243 * Returns last child that can be focused.
1244 */
1244 */
1245 _getLastFocusableChild(): _WidgetBase;
1245 _getLastFocusableChild(): _WidgetBase;
1246
1246
1247 /**
1247 /**
1248 * Focus the first focusable child in the container.
1248 * Focus the first focusable child in the container.
1249 */
1249 */
1250 focusFirstChild(): void;
1250 focusFirstChild(): void;
1251
1251
1252 /**
1252 /**
1253 * Focus the last focusable child in the container.
1253 * Focus the last focusable child in the container.
1254 */
1254 */
1255 focusLastChild(): void;
1255 focusLastChild(): void;
1256
1256
1257 /**
1257 /**
1258 * Focus specified child widget.
1258 * Focus specified child widget.
1259 *
1259 *
1260 * @param widget Reference to container's child widget
1260 * @param widget Reference to container's child widget
1261 * @param last If true and if widget has multiple focusable nodes, focus the last one instead of the first one
1261 * @param last If true and if widget has multiple focusable nodes, focus the last one instead of the first one
1262 */
1262 */
1263 focusChild(widget: _WidgetBase, last?: boolean): void;
1263 focusChild(widget: _WidgetBase, last?: boolean): void;
1264
1264
1265 /**
1265 /**
1266 * Handler for when the container itself gets focus.
1266 * Handler for when the container itself gets focus.
1267 *
1267 *
1268 * Initially the container itself has a tabIndex, but when it gets focus, switch focus to first child.
1268 * Initially the container itself has a tabIndex, but when it gets focus, switch focus to first child.
1269 */
1269 */
1270 _onContainerFocus(evt: Event): void;
1270 _onContainerFocus(evt: Event): void;
1271
1271
1272 /**
1272 /**
1273 * Called when a child widget gets focus, either by user clicking it, or programatically by arrow key handling code.
1273 * Called when a child widget gets focus, either by user clicking it, or programatically by arrow key handling code.
1274 *
1274 *
1275 * It marks that the current node is the selected one, and the previously selected node no longer is.
1275 * It marks that the current node is the selected one, and the previously selected node no longer is.
1276 */
1276 */
1277 _onChildFocus(child?: _WidgetBase): void;
1277 _onChildFocus(child?: _WidgetBase): void;
1278
1278
1279 _searchString: string;
1279 _searchString: string;
1280
1280
1281 multiCharSearchDuration: number;
1281 multiCharSearchDuration: number;
1282
1282
1283 /**
1283 /**
1284 * When a key is pressed that matches a child item, this method is called so that a widget can take appropriate action is necessary.
1284 * When a key is pressed that matches a child item, this method is called so that a widget can take appropriate action is necessary.
1285 */
1285 */
1286 onKeyboardSearch(tem: _WidgetBase, evt: Event, searchString: string, numMatches: number): void;
1286 onKeyboardSearch(tem: _WidgetBase, evt: Event, searchString: string, numMatches: number): void;
1287
1287
1288 /**
1288 /**
1289 * Compares the searchString to the widget's text label, returning:
1289 * Compares the searchString to the widget's text label, returning:
1290 *
1290 *
1291 * * -1: a high priority match and stop searching
1291 * * -1: a high priority match and stop searching
1292 * * 0: not a match
1292 * * 0: not a match
1293 * * 1: a match but keep looking for a higher priority match
1293 * * 1: a match but keep looking for a higher priority match
1294 */
1294 */
1295 _keyboardSearchCompare(item: _WidgetBase, searchString: string): -1 | 0 | 1;
1295 _keyboardSearchCompare(item: _WidgetBase, searchString: string): -1 | 0 | 1;
1296
1296
1297 /**
1297 /**
1298 * When a key is pressed, if it's an arrow key etc. then it's handled here.
1298 * When a key is pressed, if it's an arrow key etc. then it's handled here.
1299 */
1299 */
1300 _onContainerKeydown(evt: Event): void;
1300 _onContainerKeydown(evt: Event): void;
1301
1301
1302 /**
1302 /**
1303 * When a printable key is pressed, it's handled here, searching by letter.
1303 * When a printable key is pressed, it's handled here, searching by letter.
1304 */
1304 */
1305 _onContainerKeypress(evt: Event): void;
1305 _onContainerKeypress(evt: Event): void;
1306
1306
1307 /**
1307 /**
1308 * Perform a search of the widget's options based on the user's keyboard activity
1308 * Perform a search of the widget's options based on the user's keyboard activity
1309 *
1309 *
1310 * Called on keypress (and sometimes keydown), searches through this widget's children looking for items that match the user's typed search string. Multiple characters typed within 1 sec of each other are combined for multicharacter searching.
1310 * Called on keypress (and sometimes keydown), searches through this widget's children looking for items that match the user's typed search string. Multiple characters typed within 1 sec of each other are combined for multicharacter searching.
1311 */
1311 */
1312 _keyboardSearch(evt: Event, keyChar: string): void;
1312 _keyboardSearch(evt: Event, keyChar: string): void;
1313
1313
1314 /**
1314 /**
1315 * Called when focus leaves a child widget to go to a sibling widget.
1315 * Called when focus leaves a child widget to go to a sibling widget.
1316 */
1316 */
1317 _onChildBlur(widget: _WidgetBase): void;
1317 _onChildBlur(widget: _WidgetBase): void;
1318
1318
1319 /**
1319 /**
1320 * Returns the next or previous focusable descendant, compared to "child".
1320 * Returns the next or previous focusable descendant, compared to "child".
1321 * Implements and extends _KeyNavMixin._getNextFocusableChild() for a _Container.
1321 * Implements and extends _KeyNavMixin._getNextFocusableChild() for a _Container.
1322 */
1322 */
1323 _getNextFocusableChild(child: _WidgetBase, dir: 1 | -1): _WidgetBase | null;
1323 _getNextFocusableChild(child: _WidgetBase, dir: 1 | -1): _WidgetBase | null;
1324
1324
1325 /**
1325 /**
1326 * Returns the first child.
1326 * Returns the first child.
1327 */
1327 */
1328 _getFirst(): _WidgetBase | null;
1328 _getFirst(): _WidgetBase | null;
1329
1329
1330 /**
1330 /**
1331 * Returns the last descendant.
1331 * Returns the last descendant.
1332 */
1332 */
1333 _getLast(): _WidgetBase | null;
1333 _getLast(): _WidgetBase | null;
1334
1334
1335 /**
1335 /**
1336 * Returns the next descendant, compared to "child".
1336 * Returns the next descendant, compared to "child".
1337 */
1337 */
1338 _getNext(child: _WidgetBase, dir: 1 | -1): _WidgetBase | null;
1338 _getNext(child: _WidgetBase, dir: 1 | -1): _WidgetBase | null;
1339 }
1339 }
1340
1340
1341 interface _KeyNavMixinConstructor extends dojo._base.DeclareConstructor<_KeyNavMixin> { }
1341 interface _KeyNavMixinConstructor extends dojo._base.DeclareConstructor<_KeyNavMixin> { }
1342
1342
1343 /* dijit/_KeyNavContainer */
1343 /* dijit/_KeyNavContainer */
1344
1344
1345 /**
1345 /**
1346 * A _Container with keyboard navigation of its children.
1346 * A _Container with keyboard navigation of its children.
1347 *
1347 *
1348 * Provides normalized keyboard and focusing code for Container widgets.
1348 * Provides normalized keyboard and focusing code for Container widgets.
1349 * To use this mixin, call connectKeyNavHandlers() in postCreate().
1349 * To use this mixin, call connectKeyNavHandlers() in postCreate().
1350 * Also, child widgets must implement a focus() method.
1350 * Also, child widgets must implement a focus() method.
1351 */
1351 */
1352 interface _KeyNavContainer extends _FocusMixin, _KeyNavMixin, _Container {
1352 interface _KeyNavContainer extends _FocusMixin, _KeyNavMixin, _Container {
1353 /**
1353 /**
1354 * Deprecated. You can call this in postCreate() to attach the keyboard handlers to the container, but the preferred method is to override _onLeftArrow() and _onRightArrow(), or _onUpArrow() and _onDownArrow(), to call focusPrev() and focusNext().
1354 * Deprecated. You can call this in postCreate() to attach the keyboard handlers to the container, but the preferred method is to override _onLeftArrow() and _onRightArrow(), or _onUpArrow() and _onDownArrow(), to call focusPrev() and focusNext().
1355 *
1355 *
1356 * @param prevKeyCodes Key codes for navigating to the previous child.
1356 * @param prevKeyCodes Key codes for navigating to the previous child.
1357 * @param nextKeyCodes Key codes for navigating to the next child.
1357 * @param nextKeyCodes Key codes for navigating to the next child.
1358 */
1358 */
1359 connectKeyNavHandlers(prevKeyCodes: number[], nextKeyCodes: number[]): void;
1359 connectKeyNavHandlers(prevKeyCodes: number[], nextKeyCodes: number[]): void;
1360
1360
1361 /**
1361 /**
1362 * @deprecated
1362 * @deprecated
1363 */
1363 */
1364 startupKeyNavChildren(): void;
1364 startupKeyNavChildren(): void;
1365
1365
1366 /**
1366 /**
1367 * Setup for each child widget.
1367 * Setup for each child widget.
1368 *
1368 *
1369 * Sets tabIndex=-1 on each child, so that the tab key will leave the container rather than visiting each child.
1369 * Sets tabIndex=-1 on each child, so that the tab key will leave the container rather than visiting each child.
1370 *
1370 *
1371 * Note: if you add children by a different method than addChild(), then need to call this manually or at least make sure the child's tabIndex is -1.
1371 * Note: if you add children by a different method than addChild(), then need to call this manually or at least make sure the child's tabIndex is -1.
1372 *
1372 *
1373 * Note: see also _LayoutWidget.setupChild(), which is also called for each child widget.
1373 * Note: see also _LayoutWidget.setupChild(), which is also called for each child widget.
1374 */
1374 */
1375 _startupChild(widget: _WidgetBase): void;
1375 _startupChild(widget: _WidgetBase): void;
1376
1376
1377 /**
1377 /**
1378 * Returns the first child.
1378 * Returns the first child.
1379 */
1379 */
1380 _getFirst(): _Widget | null;
1380 _getFirst(): _Widget | null;
1381
1381
1382 /**
1382 /**
1383 * Returns the last descendant.
1383 * Returns the last descendant.
1384 */
1384 */
1385 _getLast(): _Widget | null;
1385 _getLast(): _Widget | null;
1386
1386
1387 /**
1387 /**
1388 * Focus the next widget
1388 * Focus the next widget
1389 */
1389 */
1390 focusNext(): void;
1390 focusNext(): void;
1391
1391
1392 /**
1392 /**
1393 * Focus the last focusable node in the previous widget
1393 * Focus the last focusable node in the previous widget
1394 *
1394 *
1395 * (ex: go to the ComboButton icon section rather than button section)
1395 * (ex: go to the ComboButton icon section rather than button section)
1396 */
1396 */
1397 focusPrev(): void;
1397 focusPrev(): void;
1398
1398
1399 /**
1399 /**
1400 * Implement _KeyNavMixin.childSelector, to identify focusable child nodes.
1400 * Implement _KeyNavMixin.childSelector, to identify focusable child nodes.
1401 *
1401 *
1402 * If we allowed a dojo/query dependency from this module this could more simply be a string "> *" instead of this function.
1402 * If we allowed a dojo/query dependency from this module this could more simply be a string "> *" instead of this function.
1403 */
1403 */
1404 childSelector(node: Element | Node): boolean | void | any;
1404 childSelector(node: Element | Node): boolean | void | any;
1405 }
1405 }
1406
1406
1407 interface _KeyNavContainerConstructor extends dojo._base.DeclareConstructor<_KeyNavContainer> { }
1407 interface _KeyNavContainerConstructor extends dojo._base.DeclareConstructor<_KeyNavContainer> { }
1408
1408
1409 /* dijit/_MenuBase */
1409 /* dijit/_MenuBase */
1410
1410
1411 /**
1411 /**
1412 * Abstract base class for Menu and MenuBar.
1412 * Abstract base class for Menu and MenuBar.
1413 * Subclass should implement _onUpArrow(), _onDownArrow(), _onLeftArrow(), and _onRightArrow().
1413 * Subclass should implement _onUpArrow(), _onDownArrow(), _onLeftArrow(), and _onRightArrow().
1414 */
1414 */
1415 interface _MenuBase extends _Widget, _TemplatedMixin, _KeyNavContainer, _CssStateMixin {
1415 interface _MenuBase extends _Widget, _TemplatedMixin, _KeyNavContainer, _CssStateMixin {
1416 selected: MenuItem | null;
1416 selected: MenuItem | null;
1417
1417
1418 _setSelectedAttr(item?: MenuItem | null): void;
1418 _setSelectedAttr(item?: MenuItem | null): void;
1419
1419
1420 /**
1420 /**
1421 * This Menu has been clicked (mouse or via space/arrow key) or opened as a submenu, so mere mouseover will open submenus. Focusing a menu via TAB does NOT automatically make it active since TAB is a navigation operation and not a selection one.
1421 * This Menu has been clicked (mouse or via space/arrow key) or opened as a submenu, so mere mouseover will open submenus. Focusing a menu via TAB does NOT automatically make it active since TAB is a navigation operation and not a selection one.
1422 *
1422 *
1423 * For Windows apps, pressing the ALT key focuses the menubar menus (similar to TAB navigation) but the menu is not active (ie no dropdown) until an item is clicked.
1423 * For Windows apps, pressing the ALT key focuses the menubar menus (similar to TAB navigation) but the menu is not active (ie no dropdown) until an item is clicked.
1424 */
1424 */
1425 activated: boolean;
1425 activated: boolean;
1426
1426
1427 _setActivatedAttr(val: boolean): void;
1427 _setActivatedAttr(val: boolean): void;
1428
1428
1429 /**
1429 /**
1430 * pointer to menu that displayed me
1430 * pointer to menu that displayed me
1431 */
1431 */
1432 parentMenu: _Widget | null;
1432 parentMenu: _Widget | null;
1433
1433
1434 /**
1434 /**
1435 * After a menu has been activated (by clicking on it etc.), number of milliseconds before hovering (without clicking) another MenuItem causes that MenuItem's popup to automatically open.
1435 * After a menu has been activated (by clicking on it etc.), number of milliseconds before hovering (without clicking) another MenuItem causes that MenuItem's popup to automatically open.
1436 */
1436 */
1437 popupDelay: number;
1437 popupDelay: number;
1438
1438
1439 /**
1439 /**
1440 * For a passive (unclicked) Menu, number of milliseconds before hovering (without clicking) will cause the popup to open. Default is Infinity, meaning you need to click the menu to open it.
1440 * For a passive (unclicked) Menu, number of milliseconds before hovering (without clicking) will cause the popup to open. Default is Infinity, meaning you need to click the menu to open it.
1441 */
1441 */
1442 passivePopupDelay: number;
1442 passivePopupDelay: number;
1443
1443
1444 /**
1444 /**
1445 * A toggle to control whether or not a Menu gets focused when opened as a drop down from a MenuBar or DropDownButton/ComboButton. Note though that it always get focused when opened via the keyboard.
1445 * A toggle to control whether or not a Menu gets focused when opened as a drop down from a MenuBar or DropDownButton/ComboButton. Note though that it always get focused when opened via the keyboard.
1446 */
1446 */
1447 autoFocus: boolean;
1447 autoFocus: boolean;
1448
1448
1449 /**
1449 /**
1450 * Selector (passed to on.selector()) used to identify MenuItem child widgets, but exclude inert children like MenuSeparator. If subclass overrides to a string (ex: "> *"), the subclass must require dojo/query.
1450 * Selector (passed to on.selector()) used to identify MenuItem child widgets, but exclude inert children like MenuSeparator. If subclass overrides to a string (ex: "> *"), the subclass must require dojo/query.
1451 */
1451 */
1452 childSelector(node: Element | Node): boolean | void | Function;
1452 childSelector(node: Element | Node): boolean | void | Function;
1453
1453
1454 /**
1454 /**
1455 * Attach point for notification about when a menu item has been executed. This is an internal mechanism used for Menus to signal to their parent to close them, because they are about to execute the onClick handler. In general developers should not attach to or override this method.
1455 * Attach point for notification about when a menu item has been executed. This is an internal mechanism used for Menus to signal to their parent to close them, because they are about to execute the onClick handler. In general developers should not attach to or override this method.
1456 */
1456 */
1457 onExecute(): void;
1457 onExecute(): void;
1458
1458
1459 /**
1459 /**
1460 * Attach point for notification about when the user cancels the current menu
1460 * Attach point for notification about when the user cancels the current menu
1461 * This is an internal mechanism used for Menus to signal to their parent to close them. In general developers should not attach to or override this method.
1461 * This is an internal mechanism used for Menus to signal to their parent to close them. In general developers should not attach to or override this method.
1462 */
1462 */
1463 onCancel(): void;
1463 onCancel(): void;
1464
1464
1465 /**
1465 /**
1466 * This handles the right arrow key (left arrow key on RTL systems), which will either open a submenu, or move to the next item in the ancestor MenuBar
1466 * This handles the right arrow key (left arrow key on RTL systems), which will either open a submenu, or move to the next item in the ancestor MenuBar
1467 */
1467 */
1468 _moveToPopup(evt: Event): void;
1468 _moveToPopup(evt: Event): void;
1469
1469
1470 /**
1470 /**
1471 * This handler is called when the mouse moves over the popup.
1471 * This handler is called when the mouse moves over the popup.
1472 */
1472 */
1473 _onPopupHover(evt?: MouseEvent): void;
1473 _onPopupHover(evt?: MouseEvent): void;
1474
1474
1475 /**
1475 /**
1476 * Called when cursor is over a MenuItem.
1476 * Called when cursor is over a MenuItem.
1477 */
1477 */
1478 onItemHover(item: MenuItem): void;
1478 onItemHover(item: MenuItem): void;
1479
1479
1480 /**
1480 /**
1481 * Called when a child MenuItem becomes deselected. Setup timer to close its popup.
1481 * Called when a child MenuItem becomes deselected. Setup timer to close its popup.
1482 */
1482 */
1483 _onChildDeselect(item: MenuItem): void;
1483 _onChildDeselect(item: MenuItem): void;
1484
1484
1485 /**
1485 /**
1486 * Callback fires when mouse exits a MenuItem
1486 * Callback fires when mouse exits a MenuItem
1487 */
1487 */
1488 onItemUnhover(item: MenuItem): void;
1488 onItemUnhover(item: MenuItem): void;
1489
1489
1490 /**
1490 /**
1491 * Cancels the popup timer because the user has stop hovering on the MenuItem, etc.
1491 * Cancels the popup timer because the user has stop hovering on the MenuItem, etc.
1492 */
1492 */
1493 _stopPopupTimer(): void;
1493 _stopPopupTimer(): void;
1494
1494
1495 /**
1495 /**
1496 * Cancels the pending-close timer because the close has been preempted
1496 * Cancels the pending-close timer because the close has been preempted
1497 */
1497 */
1498 _stopPendingCloseTimer(): void;
1498 _stopPendingCloseTimer(): void;
1499
1499
1500 /**
1500 /**
1501 * Returns the top menu in this chain of Menus
1501 * Returns the top menu in this chain of Menus
1502 */
1502 */
1503 _getTopMenu(): void;
1503 _getTopMenu(): void;
1504
1504
1505 /**
1505 /**
1506 * Handle clicks on an item.
1506 * Handle clicks on an item.
1507 */
1507 */
1508 onItemClick(item: _WidgetBase, evt: Event): void;
1508 onItemClick(item: _WidgetBase, evt: Event): void;
1509
1509
1510 /**
1510 /**
1511 * Open the popup to the side of/underneath the current menu item, and optionally focus first item
1511 * Open the popup to the side of/underneath the current menu item, and optionally focus first item
1512 */
1512 */
1513 _openItemPopup(fromItem: MenuItem, focus: boolean): void;
1513 _openItemPopup(fromItem: MenuItem, focus: boolean): void;
1514
1514
1515 /**
1515 /**
1516 * Callback when this menu is opened.
1516 * Callback when this menu is opened.
1517 * This is called by the popup manager as notification that the menu was opened.
1517 * This is called by the popup manager as notification that the menu was opened.
1518 */
1518 */
1519 onOpen(evt?: Event): void;
1519 onOpen(evt?: Event): void;
1520
1520
1521 /**
1521 /**
1522 * Callback when this menu is closed.
1522 * Callback when this menu is closed.
1523 * This is called by the popup manager as notification that the menu was closed.
1523 * This is called by the popup manager as notification that the menu was closed.
1524 */
1524 */
1525 onClose(): boolean;
1525 onClose(): boolean;
1526
1526
1527 /**
1527 /**
1528 * Called when submenu is clicked or focus is lost. Close hierarchy of menus.
1528 * Called when submenu is clicked or focus is lost. Close hierarchy of menus.
1529 */
1529 */
1530 _closeChild(): void;
1530 _closeChild(): void;
1531 /**
1531 /**
1532 * Called when child of this Menu gets focus from:
1532 * Called when child of this Menu gets focus from:
1533 *
1533 *
1534 * 1. clicking it
1534 * 1. clicking it
1535 * 2. tabbing into it
1535 * 2. tabbing into it
1536 * 3. being opened by a parent menu.
1536 * 3. being opened by a parent menu.
1537 *
1537 *
1538 * This is not called just from mouse hover.
1538 * This is not called just from mouse hover.
1539 */
1539 */
1540 _onItemFocus(item: MenuItem): void;
1540 _onItemFocus(item: MenuItem): void;
1541
1541
1542 /**
1542 /**
1543 * Called when focus is moved away from this Menu and it's submenus.
1543 * Called when focus is moved away from this Menu and it's submenus.
1544 */
1544 */
1545 _onBlur(): void;
1545 _onBlur(): void;
1546
1546
1547 /**
1547 /**
1548 * Called when the user is done with this menu. Closes hierarchy of menus.
1548 * Called when the user is done with this menu. Closes hierarchy of menus.
1549 */
1549 */
1550 _cleanUp(clearSelectedItem?: boolean): void;
1550 _cleanUp(clearSelectedItem?: boolean): void;
1551 }
1551 }
1552
1552
1553 interface _MenuBaseConstructor extends _WidgetBaseConstructor<_MenuBase> { }
1553 interface _MenuBaseConstructor extends _WidgetBaseConstructor<_MenuBase> { }
1554
1554
1555 /* dijit/Dialog */
1555 /* dijit/Dialog */
1556
1556
1557 interface _DialogBase extends _TemplatedMixin, form._FormMixin, _DialogMixin, _CssStateMixin {
1557 interface _DialogBase extends _TemplatedMixin, form._FormMixin, _DialogMixin, _CssStateMixin {
1558 templateString: string;
1558 templateString: string;
1559 baseClass: string;
1559 baseClass: string;
1560 cssStateNodes: CSSStateNodes;
1560 cssStateNodes: CSSStateNodes;
1561
1561
1562 /**
1562 /**
1563 * True if Dialog is currently displayed on screen.
1563 * True if Dialog is currently displayed on screen.
1564 */
1564 */
1565 open: boolean;
1565 open: boolean;
1566
1566
1567 /**
1567 /**
1568 * The time in milliseconds it takes the dialog to fade in and out
1568 * The time in milliseconds it takes the dialog to fade in and out
1569 */
1569 */
1570 duration: number;
1570 duration: number;
1571
1571
1572 /**
1572 /**
1573 * A Toggle to modify the default focus behavior of a Dialog, which
1573 * A Toggle to modify the default focus behavior of a Dialog, which
1574 * is to re-focus the element which had focus before being opened.
1574 * is to re-focus the element which had focus before being opened.
1575 * False will disable refocusing. Default: true
1575 * False will disable refocusing. Default: true
1576 */
1576 */
1577 refocus: boolean;
1577 refocus: boolean;
1578
1578
1579 /**
1579 /**
1580 * A Toggle to modify the default focus behavior of a Dialog, which
1580 * A Toggle to modify the default focus behavior of a Dialog, which
1581 * is to focus on the first dialog element after opening the dialog.
1581 * is to focus on the first dialog element after opening the dialog.
1582 * False will disable autofocusing. Default: true
1582 * False will disable autofocusing. Default: true
1583 */
1583 */
1584 autofocus: boolean;
1584 autofocus: boolean;
1585
1585
1586 /**
1586 /**
1587 * Toggles the movable aspect of the Dialog. If true, Dialog
1587 * Toggles the movable aspect of the Dialog. If true, Dialog
1588 * can be dragged by it's title. If false it will remain centered
1588 * can be dragged by it's title. If false it will remain centered
1589 * in the viewport.
1589 * in the viewport.
1590 */
1590 */
1591 draggable: boolean;
1591 draggable: boolean;
1592
1592
1593 /**
1593 /**
1594 * Maximum size to allow the dialog to expand to, relative to viewport size
1594 * Maximum size to allow the dialog to expand to, relative to viewport size
1595 */
1595 */
1596 maxRatio: number;
1596 maxRatio: number;
1597
1597
1598 /**
1598 /**
1599 * Dialog show [x] icon to close itself, and ESC key will close the dialog.
1599 * Dialog show [x] icon to close itself, and ESC key will close the dialog.
1600 */
1600 */
1601 closable: boolean;
1601 closable: boolean;
1602 postMixInProperties(): void;
1602 postMixInProperties(): void;
1603 postCreate(): void;
1603 postCreate(): void;
1604
1604
1605 /**
1605 /**
1606 * Called when data has been loaded from an href.
1606 * Called when data has been loaded from an href.
1607 * Unlike most other callbacks, this function can be connected to (via `dojo.connect`)
1607 * Unlike most other callbacks, this function can be connected to (via `dojo.connect`)
1608 * but should *not* be overridden.
1608 * but should *not* be overridden.
1609 */
1609 */
1610 onLoad(data?: any): void;
1610 onLoad(data?: any): void;
1611
1611
1612 focus(): void;
1612 focus(): void;
1613
1613
1614 /* Not entirely sure of the resolution type of these promises */
1614 /* Not entirely sure of the resolution type of these promises */
1615
1615
1616 /**
1616 /**
1617 * Display the dialog
1617 * Display the dialog
1618 */
1618 */
1619 show(): dojo.promise.Promise<any>;
1619 show(): dojo.promise.Promise<any>;
1620
1620
1621 /**
1621 /**
1622 * Hide the dialog
1622 * Hide the dialog
1623 */
1623 */
1624 hide(): dojo.promise.Promise<any>;
1624 hide(): dojo.promise.Promise<any>;
1625
1625
1626 /**
1626 /**
1627 * Called with no argument when viewport scrolled or viewport size changed. Adjusts Dialog as
1627 * Called with no argument when viewport scrolled or viewport size changed. Adjusts Dialog as
1628 * necessary to keep it visible.
1628 * necessary to keep it visible.
1629 *
1629 *
1630 * Can also be called with an argument (by dojox/layout/ResizeHandle etc.) to explicitly set the
1630 * Can also be called with an argument (by dojox/layout/ResizeHandle etc.) to explicitly set the
1631 * size of the dialog.
1631 * size of the dialog.
1632 */
1632 */
1633 resize(dim?: dojo.DomGeometryWidthHeight): void;
1633 resize(dim?: dojo.DomGeometryWidthHeight): void;
1634
1634
1635 destroy(preserveDom?: boolean): void;
1635 destroy(preserveDom?: boolean): void;
1636 }
1636 }
1637
1637
1638 interface _DialogBaseConstructor extends _WidgetBaseConstructor<_DialogBase> { }
1638 interface _DialogBaseConstructor extends _WidgetBaseConstructor<_DialogBase> { }
1639
1639
1640 interface Dialog extends layout.ContentPane, _DialogBase {
1640 interface Dialog extends layout.ContentPane, _DialogBase {
1641 /* overrides conflicting methods */
1641 /* overrides conflicting methods */
1642 resize(dim?: dojo.DomGeometryWidthHeight): void;
1642 resize(dim?: dojo.DomGeometryWidthHeight): void;
1643 }
1643 }
1644
1644
1645 interface DialogLevelManager {
1645 interface DialogLevelManager {
1646 _beginZIndex: number;
1646 _beginZIndex: number;
1647
1647
1648 /**
1648 /**
1649 * Call right before fade-in animation for new dialog.
1649 * Call right before fade-in animation for new dialog.
1650 *
1650 *
1651 * Saves current focus, displays/adjusts underlay for new dialog,
1651 * Saves current focus, displays/adjusts underlay for new dialog,
1652 * and sets the z-index of the dialog itself.
1652 * and sets the z-index of the dialog itself.
1653 *
1653 *
1654 * New dialog will be displayed on top of all currently displayed dialogs.
1654 * New dialog will be displayed on top of all currently displayed dialogs.
1655 * Caller is responsible for setting focus in new dialog after the fade-in
1655 * Caller is responsible for setting focus in new dialog after the fade-in
1656 * animation completes.
1656 * animation completes.
1657 */
1657 */
1658 show(dialog: _WidgetBase, underlayAttrs: Object): void;
1658 show(dialog: _WidgetBase, underlayAttrs: Object): void;
1659
1659
1660 /**
1660 /**
1661 * Called when the specified dialog is hidden/destroyed, after the fade-out
1661 * Called when the specified dialog is hidden/destroyed, after the fade-out
1662 * animation ends, in order to reset page focus, fix the underlay, etc.
1662 * animation ends, in order to reset page focus, fix the underlay, etc.
1663 * If the specified dialog isn't open then does nothing.
1663 * If the specified dialog isn't open then does nothing.
1664 *
1664 *
1665 * Caller is responsible for either setting display:none on the dialog domNode,
1665 * Caller is responsible for either setting display:none on the dialog domNode,
1666 * or calling dijit/popup.hide(), or removing it from the page DOM.
1666 * or calling dijit/popup.hide(), or removing it from the page DOM.
1667 */
1667 */
1668 hide(dialog: _WidgetBase): void;
1668 hide(dialog: _WidgetBase): void;
1669
1669
1670 /**
1670 /**
1671 * Returns true if specified Dialog is the top in the task
1671 * Returns true if specified Dialog is the top in the task
1672 */
1672 */
1673 isTop(dialog: _WidgetBase): boolean;
1673 isTop(dialog: _WidgetBase): boolean;
1674 }
1674 }
1675
1675
1676 interface DialogConstructor extends _WidgetBaseConstructor<Dialog> {
1676 interface DialogConstructor extends _WidgetBaseConstructor<Dialog> {
1677 /**
1677 /**
1678 * for monkey patching and dojox/widget/DialogSimple
1678 * for monkey patching and dojox/widget/DialogSimple
1679 */
1679 */
1680 _DialogBase: _DialogBaseConstructor;
1680 _DialogBase: _DialogBaseConstructor;
1681 _DialogLevelManager: DialogLevelManager;
1681 _DialogLevelManager: DialogLevelManager;
1682 _dialogStack: {
1682 _dialogStack: {
1683 dialog: _WidgetBase,
1683 dialog: _WidgetBase,
1684 focus: any,
1684 focus: any,
1685 underlayAttrs: any
1685 underlayAttrs: any
1686 }[];
1686 }[];
1687 }
1687 }
1688
1688
1689 /* dijit/ConfirmDialog */
1689 /* dijit/ConfirmDialog */
1690
1690
1691 interface ConfirmDialog extends _ConfirmDialogMixin { }
1691 interface ConfirmDialog extends _ConfirmDialogMixin { }
1692
1692
1693 interface ConfirmDialogConstructor extends DialogConstructor { }
1693 interface ConfirmDialogConstructor extends DialogConstructor { }
1694
1694
1695 /* dijit/DropDownMenu */
1695 /* dijit/DropDownMenu */
1696
1696
1697 /**
1697 /**
1698 * A menu, without features for context menu (Meaning, drop down menu)
1698 * A menu, without features for context menu (Meaning, drop down menu)
1699 */
1699 */
1700 interface DropDownMenu extends _MenuBase { }
1700 interface DropDownMenu extends _MenuBase { }
1701
1701
1702 interface DropDownMenuConstructor extends _WidgetBaseConstructor<DropDownMenu> { }
1702 interface DropDownMenuConstructor extends _WidgetBaseConstructor<DropDownMenu> { }
1703
1703
1704 /* dijit/Fieldset */
1704 /* dijit/Fieldset */
1705
1705
1706 /**
1706 /**
1707 * An accessible fieldset that can be expanded or collapsed via
1707 * An accessible fieldset that can be expanded or collapsed via
1708 * its legend. Fieldset extends `dijit.TitlePane`.
1708 * its legend. Fieldset extends `dijit.TitlePane`.
1709 */
1709 */
1710 interface Fieldset extends TitlePane {
1710 interface Fieldset extends TitlePane {
1711 open: boolean;
1711 open: boolean;
1712 }
1712 }
1713
1713
1714 interface FieldsetConstructor extends _WidgetBaseConstructor<Fieldset> { }
1714 interface FieldsetConstructor extends _WidgetBaseConstructor<Fieldset> { }
1715
1715
1716 /* dijit/Menu */
1716 /* dijit/Menu */
1717
1717
1718 /**
1718 /**
1719 * A context menu you can assign to multiple elements
1719 * A context menu you can assign to multiple elements
1720 */
1720 */
1721 interface Menu extends dijit.DropDownMenu {
1721 interface Menu extends dijit.DropDownMenu {
1722 /**
1722 /**
1723 * Array of dom node ids of nodes to attach to.
1723 * Array of dom node ids of nodes to attach to.
1724 * Fill this with nodeIds upon widget creation and it becomes context menu for those nodes.
1724 * Fill this with nodeIds upon widget creation and it becomes context menu for those nodes.
1725 */
1725 */
1726 targetNodeIds: string[];
1726 targetNodeIds: string[];
1727
1727
1728 /**
1728 /**
1729 * CSS expression to apply this Menu to descendants of targetNodeIds, rather than to
1729 * CSS expression to apply this Menu to descendants of targetNodeIds, rather than to
1730 * the nodes specified by targetNodeIds themselves. Useful for applying a Menu to
1730 * the nodes specified by targetNodeIds themselves. Useful for applying a Menu to
1731 * a range of rows in a table, tree, etc.
1731 * a range of rows in a table, tree, etc.
1732 *
1732 *
1733 * The application must require() an appropriate level of dojo/query to handle the selector.
1733 * The application must require() an appropriate level of dojo/query to handle the selector.
1734 */
1734 */
1735 selector: string;
1735 selector: string;
1736
1736
1737 /**
1737 /**
1738 * If true, right clicking anywhere on the window will cause this context menu to open.
1738 * If true, right clicking anywhere on the window will cause this context menu to open.
1739 * If false, must specify targetNodeIds.
1739 * If false, must specify targetNodeIds.
1740 */
1740 */
1741 contextMenuForWindow: boolean;
1741 contextMenuForWindow: boolean;
1742
1742
1743 /**
1743 /**
1744 * If true, menu will open on left click instead of right click, similar to a file menu.
1744 * If true, menu will open on left click instead of right click, similar to a file menu.
1745 */
1745 */
1746 leftClickToOpen: boolean;
1746 leftClickToOpen: boolean;
1747
1747
1748 /**
1748 /**
1749 * When this menu closes, re-focus the element which had focus before it was opened.
1749 * When this menu closes, re-focus the element which had focus before it was opened.
1750 */
1750 */
1751 refocus: boolean;
1751 refocus: boolean;
1752
1752
1753 /**
1753 /**
1754 * Attach menu to given node
1754 * Attach menu to given node
1755 */
1755 */
1756 bindDomNode(node: string | Node): void;
1756 bindDomNode(node: string | Node): void;
1757
1757
1758 /**
1758 /**
1759 * Detach menu from given node
1759 * Detach menu from given node
1760 */
1760 */
1761 unBindDomNode(nodeName: string | Node): void;
1761 unBindDomNode(nodeName: string | Node): void;
1762 }
1762 }
1763
1763
1764 interface MenuConstructor extends _WidgetBaseConstructor<Menu> { }
1764 interface MenuConstructor extends _WidgetBaseConstructor<Menu> { }
1765
1765
1766 /* dijit/MenuBar */
1766 /* dijit/MenuBar */
1767 interface MenuBar extends _MenuBase {
1767 interface MenuBar extends _MenuBase {
1768 baseClass: 'dijitMenuBar';
1768 baseClass: 'dijitMenuBar';
1769 popupDelay: number;
1769 popupDelay: number;
1770 _isMenuBar: true;
1770 _isMenuBar: true;
1771 _orient: string[];
1771 _orient: string[];
1772 _moveToPopup(evt: Event): void;
1772 _moveToPopup(evt: Event): void;
1773 focusChild(item: _WidgetBase): void;
1773 focusChild(item: _WidgetBase): void;
1774 _onChildDeselect(item: _WidgetBase): void;
1774 _onChildDeselect(item: _WidgetBase): void;
1775 _onLeftArrow(): void;
1775 _onLeftArrow(): void;
1776 _onRightArrow(): void;
1776 _onRightArrow(): void;
1777 _onDownArrow(): void;
1777 _onDownArrow(): void;
1778 _onUpArrow(): void;
1778 _onUpArrow(): void;
1779 onItemClick(item: _WidgetBase, evt: Event): void;
1779 onItemClick(item: _WidgetBase, evt: Event): void;
1780 }
1780 }
1781
1781
1782 interface MenuBarConstructor extends _WidgetBaseConstructor<MenuBar> { }
1782 interface MenuBarConstructor extends _WidgetBaseConstructor<MenuBar> { }
1783
1783
1784 /* dijit/MenuBarItem */
1784 /* dijit/MenuBarItem */
1785 interface MenuBarItem extends MenuItem { }
1785 interface MenuBarItem extends MenuItem { }
1786
1786
1787 interface MenuBarItemConstructor extends _WidgetBaseConstructor<MenuBarItem> { }
1787 interface MenuBarItemConstructor extends _WidgetBaseConstructor<MenuBarItem> { }
1788
1788
1789 /* dijit/MenuItem */
1789 /* dijit/MenuItem */
1790 interface MenuItem extends _Widget, _TemplatedMixin, _Contained, _CssStateMixin {
1790 interface MenuItem extends _Widget, _TemplatedMixin, _Contained, _CssStateMixin {
1791 /**
1791 /**
1792 * Text for the accelerator (shortcut) key combination, a control, alt, etc. modified keystroke meant to execute the menu item regardless of where the focus is on the page.
1792 * Text for the accelerator (shortcut) key combination, a control, alt, etc. modified keystroke meant to execute the menu item regardless of where the focus is on the page.
1793 *
1793 *
1794 * Note that although Menu can display accelerator keys, there is no infrastructure to actually catch and execute those accelerators.
1794 * Note that although Menu can display accelerator keys, there is no infrastructure to actually catch and execute those accelerators.
1795 */
1795 */
1796 accelKey: string;
1796 accelKey: string;
1797
1797
1798 /**
1798 /**
1799 * If true, the menu item is disabled.
1799 * If true, the menu item is disabled.
1800 * If false, the menu item is enabled.
1800 * If false, the menu item is enabled.
1801 */
1801 */
1802 disabled: boolean;
1802 disabled: boolean;
1803
1803
1804 /** Menu text as HTML */
1804 /** Menu text as HTML */
1805 label: string;
1805 label: string;
1806
1806
1807 /**
1807 /**
1808 * Class to apply to DOMNode to make it display an icon.
1808 * Class to apply to DOMNode to make it display an icon.
1809 */
1809 */
1810 iconClass: string;
1810 iconClass: string;
1811
1811
1812 /**
1812 /**
1813 * Hook for attr('accelKey', ...) to work.
1813 * Hook for attr('accelKey', ...) to work.
1814 * Set accelKey on this menu item.
1814 * Set accelKey on this menu item.
1815 */
1815 */
1816 _setAccelKeyAttr(value: string): void;
1816 _setAccelKeyAttr(value: string): void;
1817
1817
1818 /**
1818 /**
1819 * Hook for attr('disabled', ...) to work.
1819 * Hook for attr('disabled', ...) to work.
1820 * Enable or disable this menu item.
1820 * Enable or disable this menu item.
1821 */
1821 */
1822 _setDisabledAttr(value: boolean): void;
1822 _setDisabledAttr(value: boolean): void;
1823
1823
1824 _setLabelAttr(val: string): void;
1824 _setLabelAttr(val: string): void;
1825 _setIconClassAttr(val: string): void;
1825 _setIconClassAttr(val: string): void;
1826
1826
1827 _fillContent(source: Element): void;
1827 _fillContent(source: Element): void;
1828
1828
1829 /**
1829 /**
1830 * Indicate that this node is the currently selected one
1830 * Indicate that this node is the currently selected one
1831 */
1831 */
1832 _setSelected(selected: boolean): void;
1832 _setSelected(selected: boolean): void;
1833
1833
1834 focus(): void;
1834 focus(): void;
1835
1835
1836 /**
1836 /**
1837 * Deprecated.
1837 * Deprecated.
1838 * Use set('disabled', bool) instead.
1838 * Use set('disabled', bool) instead.
1839 */
1839 */
1840 setDisabled(disabled: boolean): void;
1840 setDisabled(disabled: boolean): void;
1841
1841
1842 /**
1842 /**
1843 * Deprecated.
1843 * Deprecated.
1844 * Use set('label', ...) instead.
1844 * Use set('label', ...) instead.
1845 */
1845 */
1846 setLabel(content: string): void;
1846 setLabel(content: string): void;
1847 }
1847 }
1848
1848
1849 interface MenuItemConstructor extends _WidgetBaseConstructor<MenuItem> { }
1849 interface MenuItemConstructor extends _WidgetBaseConstructor<MenuItem> { }
1850
1850
1851 /* dijit/MenuSeparator */
1851 /* dijit/MenuSeparator */
1852 interface MenuSeparator extends _WidgetBase, _TemplatedMixin, _Contained { }
1852 interface MenuSeparator extends _WidgetBase, _TemplatedMixin, _Contained { }
1853
1853
1854 interface MenuSeparatorConstructor extends _WidgetBaseConstructor<MenuSeparator> { }
1854 interface MenuSeparatorConstructor extends _WidgetBaseConstructor<MenuSeparator> { }
1855
1855
1856 /* dijit/place */
1856 /* dijit/place */
1857
1857
1858 interface PlacePosition {
1858 interface PlacePosition {
1859 x: number;
1859 x: number;
1860 y: number;
1860 y: number;
1861 }
1861 }
1862
1862
1863 interface PlaceWidthHeight {
1863 interface PlaceWidthHeight {
1864 w: number;
1864 w: number;
1865 h: number;
1865 h: number;
1866 }
1866 }
1867
1867
1868 interface PlaceRectangle extends PlacePosition, PlaceWidthHeight { }
1868 interface PlaceRectangle extends PlacePosition, PlaceWidthHeight { }
1869
1869
1870 type PlaceCorner = 'BL' | 'TR' | 'BR' | 'TL';
1870 type PlaceCorner = 'BL' | 'TR' | 'BR' | 'TL';
1871
1871
1872 type PlacePositions = 'before' | 'after' | 'before-centered' | 'after-centered' | 'above-centered' | 'above' | 'above-alt' | 'below-centered' | 'below' | 'below-alt';
1872 type PlacePositions = 'before' | 'after' | 'before-centered' | 'after-centered' | 'above-centered' | 'above' | 'above-alt' | 'below-centered' | 'below' | 'below-alt';
1873
1873
1874 interface PlaceChoice {
1874 interface PlaceChoice {
1875 corner: PlaceCorner;
1875 corner: PlaceCorner;
1876 pos: PlacePosition;
1876 pos: PlacePosition;
1877 aroundCorner?: PlaceCorner;
1877 aroundCorner?: PlaceCorner;
1878 }
1878 }
1879
1879
1880 interface PlaceLocation extends PlaceRectangle {
1880 interface PlaceLocation extends PlaceRectangle {
1881 corner: PlaceCorner;
1881 corner: PlaceCorner;
1882 aroundCorner: PlaceCorner;
1882 aroundCorner: PlaceCorner;
1883 overflow: number;
1883 overflow: number;
1884 spaceAvailable: PlaceWidthHeight;
1884 spaceAvailable: PlaceWidthHeight;
1885 }
1885 }
1886
1886
1887 interface LayoutNodeFunction {
1887 interface LayoutNodeFunction {
1888 (node: HTMLElement, aroundCorner: string, corner: string, spaceAvailable: PlaceWidthHeight, aroundNodeCoords: PlaceWidthHeight): number;
1888 (node: HTMLElement, aroundCorner: string, corner: string, spaceAvailable: PlaceWidthHeight, aroundNodeCoords: PlaceWidthHeight): number;
1889 }
1889 }
1890
1890
1891 interface Place {
1891 interface Place {
1892 /**
1892 /**
1893 * Positions node kitty-corner to the rectangle centered at (pos.x, pos.y) with width and height of
1893 * Positions node kitty-corner to the rectangle centered at (pos.x, pos.y) with width and height of
1894 * padding.x * 2 and padding.y * 2, or zero if padding not specified. Picks first corner in corners[]
1894 * padding.x * 2 and padding.y * 2, or zero if padding not specified. Picks first corner in corners[]
1895 * where node is fully visible, or the corner where it's most visible.
1895 * where node is fully visible, or the corner where it's most visible.
1896 *
1896 *
1897 * Node is assumed to be absolutely or relatively positioned.
1897 * Node is assumed to be absolutely or relatively positioned.
1898 */
1898 */
1899 at(node: Element, pos?: PlacePosition, corners?: PlaceCorner[], padding?: PlacePosition, layoutNode?: LayoutNodeFunction): PlaceLocation;
1899 at(node: Element, pos?: PlacePosition, corners?: PlaceCorner[], padding?: PlacePosition, layoutNode?: LayoutNodeFunction): PlaceLocation;
1900
1900
1901 /**
1901 /**
1902 * Position node adjacent or kitty-corner to anchor
1902 * Position node adjacent or kitty-corner to anchor
1903 * such that it's fully visible in viewport.
1903 * such that it's fully visible in viewport.
1904 */
1904 */
1905 around(node: Element, anchor: Element | PlaceRectangle, positions: PlacePositions[], leftToRight?: boolean, layoutNode?: LayoutNodeFunction): PlaceLocation;
1905 around(node: Element, anchor: Element | PlaceRectangle, positions: PlacePositions[], leftToRight?: boolean, layoutNode?: LayoutNodeFunction): PlaceLocation;
1906 }
1906 }
1907
1907
1908 /* dijit/popup */
1908 /* dijit/popup */
1909
1909
1910 interface PopupOpenArgs {
1910 interface PopupOpenArgs {
1911 /**
1911 /**
1912 * widget to display
1912 * widget to display
1913 */
1913 */
1914 popup?: _WidgetBase;
1914 popup?: _WidgetBase;
1915
1915
1916 /**
1916 /**
1917 * the button etc. that is displaying this popup
1917 * the button etc. that is displaying this popup
1918 */
1918 */
1919 parent?: _WidgetBase;
1919 parent?: _WidgetBase;
1920
1920
1921 /**
1921 /**
1922 * DOM node (typically a button); place popup relative to this node. (Specify this *or* "x" and "y" parameters.)
1922 * DOM node (typically a button); place popup relative to this node. (Specify this *or* "x" and "y" parameters.)
1923 */
1923 */
1924 around?: HTMLElement;
1924 around?: HTMLElement;
1925
1925
1926 /**
1926 /**
1927 * Absolute horizontal position (in pixels) to place node at. (Specify this *or* "around" parameter.)
1927 * Absolute horizontal position (in pixels) to place node at. (Specify this *or* "around" parameter.)
1928 */
1928 */
1929 x?: number;
1929 x?: number;
1930
1930
1931 /**
1931 /**
1932 * Absolute vertical position (in pixels) to place node at. (Specify this *or* "around" parameter.)
1932 * Absolute vertical position (in pixels) to place node at. (Specify this *or* "around" parameter.)
1933 */
1933 */
1934 y?: number;
1934 y?: number;
1935
1935
1936 /**
1936 /**
1937 * When the around parameter is specified, orient should be a list of positions to try
1937 * When the around parameter is specified, orient should be a list of positions to try
1938 */
1938 */
1939 orient?: string | string[] | { BL?: string; TR?: string; TL?: string; BR?: string; };
1939 orient?: string | string[] | { BL?: string; TR?: string; TL?: string; BR?: string; };
1940
1940
1941 /**
1941 /**
1942 * callback when user has canceled the popup by:
1942 * callback when user has canceled the popup by:
1943 *
1943 *
1944 * 1. hitting ESC or
1944 * 1. hitting ESC or
1945 * 2. by using the popup widget's proprietary cancel mechanism (like a cancel button in a dialog);
1945 * 2. by using the popup widget's proprietary cancel mechanism (like a cancel button in a dialog);
1946 * i.e. whenever popupWidget.onCancel() is called, args.onCancel is called
1946 * i.e. whenever popupWidget.onCancel() is called, args.onCancel is called
1947 */
1947 */
1948 onCancel?: () => void;
1948 onCancel?: () => void;
1949
1949
1950 /**
1950 /**
1951 * callback whenever this popup is closed
1951 * callback whenever this popup is closed
1952 */
1952 */
1953 onClose?: () => void;
1953 onClose?: () => void;
1954
1954
1955 /**
1955 /**
1956 * callback when user "executed" on the popup/sub-popup by selecting a menu choice, etc. (top menu only)
1956 * callback when user "executed" on the popup/sub-popup by selecting a menu choice, etc. (top menu only)
1957 */
1957 */
1958 onExecute?: () => void;
1958 onExecute?: () => void;
1959
1959
1960 /**
1960 /**
1961 * adding a buffer around the opening position. This is only useful when around is not set.
1961 * adding a buffer around the opening position. This is only useful when around is not set.
1962 */
1962 */
1963 padding?: PlacePosition;
1963 padding?: PlacePosition;
1964
1964
1965 /**
1965 /**
1966 * The max height for the popup. Any popup taller than this will have scrollbars.
1966 * The max height for the popup. Any popup taller than this will have scrollbars.
1967 * Set to Infinity for no max height. Default is to limit height to available space in viewport,
1967 * Set to Infinity for no max height. Default is to limit height to available space in viewport,
1968 * above or below the aroundNode or specified x/y position.
1968 * above or below the aroundNode or specified x/y position.
1969 */
1969 */
1970 maxHeight?: number;
1970 maxHeight?: number;
1971 }
1971 }
1972
1972
1973 interface PopupManager {
1973 interface PopupManager {
1974 /**
1974 /**
1975 * Stack of currently popped up widgets.
1975 * Stack of currently popped up widgets.
1976 * (someone opened _stack[0], and then it opened _stack[1], etc.)
1976 * (someone opened _stack[0], and then it opened _stack[1], etc.)
1977 */
1977 */
1978 _stack: _WidgetBase[];
1978 _stack: _WidgetBase[];
1979
1979
1980 /**
1980 /**
1981 * Z-index of the first popup. (If first popup opens other
1981 * Z-index of the first popup. (If first popup opens other
1982 * popups they get a higher z-index.)
1982 * popups they get a higher z-index.)
1983 */
1983 */
1984 _beginZIndex: number;
1984 _beginZIndex: number;
1985
1985
1986 _idGen: number;
1986 _idGen: number;
1987
1987
1988 /**
1988 /**
1989 * If screen has been scrolled, reposition all the popups in the stack.
1989 * If screen has been scrolled, reposition all the popups in the stack.
1990 * Then set timer to check again later.
1990 * Then set timer to check again later.
1991 */
1991 */
1992 _repositionAll(): void;
1992 _repositionAll(): void;
1993
1993
1994 /**
1994 /**
1995 * Initialization for widgets that will be used as popups.
1995 * Initialization for widgets that will be used as popups.
1996 * Puts widget inside a wrapper DIV (if not already in one),
1996 * Puts widget inside a wrapper DIV (if not already in one),
1997 * and returns pointer to that wrapper DIV.
1997 * and returns pointer to that wrapper DIV.
1998 */
1998 */
1999 _createWrapper(widget: _WidgetBase): HTMLDivElement;
1999 _createWrapper(widget: _WidgetBase): HTMLDivElement;
2000
2000
2001 /**
2001 /**
2002 * Moves the popup widget off-screen.
2002 * Moves the popup widget off-screen.
2003 * Do not use this method to hide popups when not in use, because
2003 * Do not use this method to hide popups when not in use, because
2004 * that will create an accessibility issue: the offscreen popup is
2004 * that will create an accessibility issue: the offscreen popup is
2005 * still in the tabbing order.
2005 * still in the tabbing order.
2006 */
2006 */
2007 moveOffScreen(widget: _WidgetBase): HTMLDivElement;
2007 moveOffScreen(widget: _WidgetBase): HTMLDivElement;
2008
2008
2009 /**
2009 /**
2010 * Hide this popup widget (until it is ready to be shown).
2010 * Hide this popup widget (until it is ready to be shown).
2011 * Initialization for widgets that will be used as popups
2011 * Initialization for widgets that will be used as popups
2012 *
2012 *
2013 * Also puts widget inside a wrapper DIV (if not already in one)
2013 * Also puts widget inside a wrapper DIV (if not already in one)
2014 *
2014 *
2015 * If popup widget needs to layout it should
2015 * If popup widget needs to layout it should
2016 * do so when it is made visible, and popup._onShow() is called.
2016 * do so when it is made visible, and popup._onShow() is called.
2017 */
2017 */
2018 hide(widget: _WidgetBase): void;
2018 hide(widget: _WidgetBase): void;
2019
2019
2020 /**
2020 /**
2021 * Compute the closest ancestor popup that's *not* a child of another popup.
2021 * Compute the closest ancestor popup that's *not* a child of another popup.
2022 * Ex: For a TooltipDialog with a button that spawns a tree of menus, find the popup of the button.
2022 * Ex: For a TooltipDialog with a button that spawns a tree of menus, find the popup of the button.
2023 */
2023 */
2024 getTopPopup(): _WidgetBase;
2024 getTopPopup(): _WidgetBase;
2025
2025
2026 /**
2026 /**
2027 * Popup the widget at the specified position
2027 * Popup the widget at the specified position
2028 */
2028 */
2029 open(args: PopupOpenArgs): PlaceLocation;
2029 open(args: PopupOpenArgs): PlaceLocation;
2030
2030
2031 /**
2031 /**
2032 * Close specified popup and any popups that it parented.
2032 * Close specified popup and any popups that it parented.
2033 * If no popup is specified, closes all popups.
2033 * If no popup is specified, closes all popups.
2034 */
2034 */
2035 close(popup?: _WidgetBase): void;
2035 close(popup?: _WidgetBase): void;
2036 }
2036 }
2037
2037
2038 /* dijit/PopupMenuBarItem */
2038 /* dijit/PopupMenuBarItem */
2039
2039
2040 interface PopupMenuBarItem extends PopupMenuItem { }
2040 interface PopupMenuBarItem extends PopupMenuItem { }
2041
2041
2042 interface PopupMenuBarItemConstructor extends _WidgetBaseConstructor<PopupMenuBarItem> { }
2042 interface PopupMenuBarItemConstructor extends _WidgetBaseConstructor<PopupMenuBarItem> { }
2043
2043
2044 /** dijit/PopupMenuItem */
2044 /** dijit/PopupMenuItem */
2045
2045
2046 /**
2046 /**
2047 * An item in a Menu that spawn a drop down (usually a drop down menu)
2047 * An item in a Menu that spawn a drop down (usually a drop down menu)
2048 */
2048 */
2049 interface PopupMenuItem extends MenuItem {
2049 interface PopupMenuItem extends MenuItem {
2050 /**
2050 /**
2051 * When Menu is declared in markup, this code gets the menu label and the popup widget from the srcNodeRef.
2051 * When Menu is declared in markup, this code gets the menu label and the popup widget from the srcNodeRef.
2052 *
2052 *
2053 * srcNodeRef.innerHTML contains both the menu item text and a popup widget
2053 * srcNodeRef.innerHTML contains both the menu item text and a popup widget
2054 * The first part holds the menu item text and the second part is the popup
2054 * The first part holds the menu item text and the second part is the popup
2055 */
2055 */
2056 _fillContent(source: Element): void;
2056 _fillContent(source: Element): void;
2057
2057
2058 /**
2058 /**
2059 * Open the popup to the side of/underneath this MenuItem, and optionally focus first item
2059 * Open the popup to the side of/underneath this MenuItem, and optionally focus first item
2060 */
2060 */
2061 _openPopup(params: { around?: Element; popup?: Function }, focus?: boolean): void;
2061 _openPopup(params: { around?: Element; popup?: Function }, focus?: boolean): void;
2062
2062
2063 _closePopup(): void;
2063 _closePopup(): void;
2064 }
2064 }
2065
2065
2066 interface PopupMenuItemConstructor extends _WidgetBaseConstructor<PopupMenuItem> { }
2066 interface PopupMenuItemConstructor extends _WidgetBaseConstructor<PopupMenuItem> { }
2067
2067
2068 /* dijit/registry */
2068 /* dijit/registry */
2069
2069
2070 interface Registry {
2070 interface Registry {
2071 /**
2071 /**
2072 * Number of registered widgets
2072 * Number of registered widgets
2073 */
2073 */
2074 length: number;
2074 length: number;
2075
2075
2076 /**
2076 /**
2077 * Add a widget to the registry. If a duplicate ID is detected, a error is thrown.
2077 * Add a widget to the registry. If a duplicate ID is detected, a error is thrown.
2078 */
2078 */
2079 add(widget: _WidgetBase): void;
2079 add(widget: _WidgetBase): void;
2080
2080
2081 /**
2081 /**
2082 * Remove a widget from the registry. Does not destroy the widget; simply
2082 * Remove a widget from the registry. Does not destroy the widget; simply
2083 * removes the reference.
2083 * removes the reference.
2084 */
2084 */
2085 remove(id: string): void;
2085 remove(id: string): void;
2086
2086
2087 /**
2087 /**
2088 * Find a widget by it's id.
2088 * Find a widget by it's id.
2089 * If passed a widget then just returns the widget.
2089 * If passed a widget then just returns the widget.
2090 */
2090 */
2091 byId(id: string | _WidgetBase): _WidgetBase;
2091 byId(id: string | _WidgetBase): _WidgetBase;
2092
2092
2093 /**
2093 /**
2094 * Returns the widget corresponding to the given DOMNode
2094 * Returns the widget corresponding to the given DOMNode
2095 */
2095 */
2096 byNode(node: Element | Node): _WidgetBase;
2096 byNode(node: Element | Node): _WidgetBase;
2097
2097
2098 /**
2098 /**
2099 * Convert registry into a true Array
2099 * Convert registry into a true Array
2100 */
2100 */
2101 toArray(): _WidgetBase[];
2101 toArray(): _WidgetBase[];
2102
2102
2103 /**
2103 /**
2104 * Generates a unique id for a given widgetType
2104 * Generates a unique id for a given widgetType
2105 */
2105 */
2106 getUniqueId(widgetType: string): string;
2106 getUniqueId(widgetType: string): string;
2107
2107
2108 /**
2108 /**
2109 * Search subtree under root returning widgets found.
2109 * Search subtree under root returning widgets found.
2110 * Doesn't search for nested widgets (ie, widgets inside other widgets).
2110 * Doesn't search for nested widgets (ie, widgets inside other widgets).
2111 */
2111 */
2112 findWidgets(root: Node, skipNode?: Node): _WidgetBase[];
2112 findWidgets(root: Node, skipNode?: Node): _WidgetBase[];
2113
2113
2114 /**
2114 /**
2115 * Returns the widget whose DOM tree contains the specified DOMNode, or null if
2115 * Returns the widget whose DOM tree contains the specified DOMNode, or null if
2116 * the node is not contained within the DOM tree of any widget
2116 * the node is not contained within the DOM tree of any widget
2117 */
2117 */
2118 getEnclosingWidget(node: Element | Node): _WidgetBase;
2118 getEnclosingWidget(node: Element | Node): _WidgetBase;
2119 }
2119 }
2120
2120
2121 /* dijit/TitlePane */
2121 /* dijit/TitlePane */
2122
2122
2123 interface TitlePane extends dijit.layout.ContentPane, _TemplatedMixin, _CssStateMixin {
2123 interface TitlePane extends dijit.layout.ContentPane, _TemplatedMixin, _CssStateMixin {
2124 /**
2124 /**
2125 * Whether pane can be opened or closed by clicking the title bar.
2125 * Whether pane can be opened or closed by clicking the title bar.
2126 */
2126 */
2127 toggleable: boolean;
2127 toggleable: boolean;
2128
2128
2129 /**
2129 /**
2130 * Tabindex setting for the title (so users can tab to the title then use space/enter to open/close the title pane)
2130 * Tabindex setting for the title (so users can tab to the title then use space/enter to open/close the title pane)
2131 */
2131 */
2132 tabIndex: string;
2132 tabIndex: string;
2133
2133
2134 /**
2134 /**
2135 * Time in milliseconds to fade in/fade out
2135 * Time in milliseconds to fade in/fade out
2136 */
2136 */
2137 duration: number;
2137 duration: number;
2138
2138
2139 /**
2139 /**
2140 * Don't change this parameter from the default value.
2140 * Don't change this parameter from the default value.
2141 *
2141 *
2142 * This ContentPane parameter doesn't make sense for TitlePane, since TitlePane is never a child of a layout container, nor should TitlePane try to control the size of an inner widget.
2142 * This ContentPane parameter doesn't make sense for TitlePane, since TitlePane is never a child of a layout container, nor should TitlePane try to control the size of an inner widget.
2143 */
2143 */
2144 doLayout: boolean;
2144 doLayout: boolean;
2145
2145
2146 /**
2146 /**
2147 * Switches between opened and closed state
2147 * Switches between opened and closed state
2148 */
2148 */
2149 toggle(): void;
2149 toggle(): void;
2150
2150
2151 /**
2151 /**
2152 * Set the open/close css state for the TitlePane
2152 * Set the open/close css state for the TitlePane
2153 */
2153 */
2154 _setCss(): void;
2154 _setCss(): void;
2155
2155
2156 /**
2156 /**
2157 * Handler for when user hits a key
2157 * Handler for when user hits a key
2158 */
2158 */
2159 _onTitleKey(e: Event): void;
2159 _onTitleKey(e: Event): void;
2160
2160
2161 /**
2161 /**
2162 * Handler when user clicks the title bar
2162 * Handler when user clicks the title bar
2163 */
2163 */
2164 _onTitleClick(): void;
2164 _onTitleClick(): void;
2165
2165
2166 /**
2166 /**
2167 * Deprecated. Use set('title', ...) instead.
2167 * Deprecated. Use set('title', ...) instead.
2168 */
2168 */
2169 setTitle(): void;
2169 setTitle(): void;
2170 }
2170 }
2171
2171
2172 interface TitlePaneConstructor extends _WidgetBaseConstructor<TitlePane> { }
2172 interface TitlePaneConstructor extends _WidgetBaseConstructor<TitlePane> { }
2173
2173
2174 /* dijit/Toolbar */
2174 /* dijit/Toolbar */
2175
2175
2176 interface Toolbar extends dijit._Widget, dijit._TemplatedMixin, dijit._KeyNavContainer { }
2176 interface Toolbar extends dijit._Widget, dijit._TemplatedMixin, dijit._KeyNavContainer { }
2177
2177
2178 interface ToolbarConstructor extends _WidgetBaseConstructor<Toolbar> { }
2178 interface ToolbarConstructor extends _WidgetBaseConstructor<Toolbar> { }
2179
2179
2180 /* dijit/ToolbarSeparator */
2180 /* dijit/ToolbarSeparator */
2181
2181
2182 interface ToolbarSeparator extends dijit._Widget, dijit._TemplatedMixin { }
2182 interface ToolbarSeparator extends dijit._Widget, dijit._TemplatedMixin { }
2183
2183
2184 interface ToolbarSeparatorConstructor extends _WidgetBaseConstructor<ToolbarSeparator> { }
2184 interface ToolbarSeparatorConstructor extends _WidgetBaseConstructor<ToolbarSeparator> { }
2185
2185
2186 /* dijit/Tooltip */
2186 /* dijit/Tooltip */
2187
2187
2188 interface Tooltip extends _Widget {
2188 interface Tooltip extends _Widget {
2189 /**
2189 /**
2190 * HTML to display in the tooltip.
2190 * HTML to display in the tooltip.
2191 * Specified as innerHTML when creating the widget from markup.
2191 * Specified as innerHTML when creating the widget from markup.
2192 */
2192 */
2193 label: string;
2193 label: string;
2194
2194
2195 /**
2195 /**
2196 * Number of milliseconds to wait after hovering over/focusing on the object, before
2196 * Number of milliseconds to wait after hovering over/focusing on the object, before
2197 * the tooltip is displayed.
2197 * the tooltip is displayed.
2198 */
2198 */
2199 showDelay: number;
2199 showDelay: number;
2200
2200
2201 /**
2201 /**
2202 * Number of milliseconds to wait after unhovering the object, before
2202 * Number of milliseconds to wait after unhovering the object, before
2203 * the tooltip is hidden. Note that blurring an object hides the tooltip immediately.
2203 * the tooltip is hidden. Note that blurring an object hides the tooltip immediately.
2204 */
2204 */
2205 hideDelay: number;
2205 hideDelay: number;
2206
2206
2207 /**
2207 /**
2208 * Id of domNode(s) to attach the tooltip to.
2208 * Id of domNode(s) to attach the tooltip to.
2209 * When user hovers over specified dom node(s), the tooltip will appear.
2209 * When user hovers over specified dom node(s), the tooltip will appear.
2210 */
2210 */
2211 connectId: dojo.NodeOrString | dojo.NodeOrString[];
2211 connectId: dojo.NodeOrString | dojo.NodeOrString[];
2212
2212
2213 /**
2213 /**
2214 * See description of `dijit/Tooltip.defaultPosition` for details on position parameter.
2214 * See description of `dijit/Tooltip.defaultPosition` for details on position parameter.
2215 */
2215 */
2216 position: string;
2216 position: string;
2217
2217
2218 /**
2218 /**
2219 * CSS expression to apply this Tooltip to descendants of connectIds, rather than to
2219 * CSS expression to apply this Tooltip to descendants of connectIds, rather than to
2220 * the nodes specified by connectIds themselves. Useful for applying a Tooltip to
2220 * the nodes specified by connectIds themselves. Useful for applying a Tooltip to
2221 * a range of rows in a table, tree, etc. Use in conjunction with getContent() parameter.
2221 * a range of rows in a table, tree, etc. Use in conjunction with getContent() parameter.
2222 * Ex: connectId: myTable, selector: "tr", getContent: function(node){ return ...; }
2222 * Ex: connectId: myTable, selector: "tr", getContent: function(node){ return ...; }
2223 *
2223 *
2224 * The application must require() an appropriate level of dojo/query to handle the selector.
2224 * The application must require() an appropriate level of dojo/query to handle the selector.
2225 */
2225 */
2226 selector: string;
2226 selector: string;
2227
2227
2228 /**
2228 /**
2229 * Attach tooltip to specified node if it's not already connected
2229 * Attach tooltip to specified node if it's not already connected
2230 */
2230 */
2231 addTarget(node: dojo.NodeOrString): void;
2231 addTarget(node: dojo.NodeOrString): void;
2232
2232
2233 /**
2233 /**
2234 * Detach tooltip from specified node
2234 * Detach tooltip from specified node
2235 */
2235 */
2236 removeTarget(node: dojo.NodeOrString): void;
2236 removeTarget(node: dojo.NodeOrString): void;
2237
2237
2238 /**
2238 /**
2239 * User overridable function that return the text to display in the tooltip.
2239 * User overridable function that return the text to display in the tooltip.
2240 */
2240 */
2241 getContent(node: Node): Node;
2241 getContent(node: Node): Node;
2242
2242
2243 /**
2243 /**
2244 * Display the tooltip; usually not called directly.
2244 * Display the tooltip; usually not called directly.
2245 */
2245 */
2246 open(target: Node): void;
2246 open(target: Node): void;
2247
2247
2248 /**
2248 /**
2249 * Hide the tooltip or cancel timer for show of tooltip
2249 * Hide the tooltip or cancel timer for show of tooltip
2250 */
2250 */
2251 close(): void;
2251 close(): void;
2252
2252
2253 /**
2253 /**
2254 * Called when the tooltip is shown
2254 * Called when the tooltip is shown
2255 */
2255 */
2256 onShow(): void;
2256 onShow(): void;
2257
2257
2258 /**
2258 /**
2259 * Called when the tooltip is hidden
2259 * Called when the tooltip is hidden
2260 */
2260 */
2261 onHide(): void;
2261 onHide(): void;
2262 }
2262 }
2263
2263
2264 interface TooltipConstructor extends _WidgetBaseConstructor<Tooltip> {
2264 interface TooltipConstructor extends _WidgetBaseConstructor<Tooltip> {
2265 /**
2265 /**
2266 * This variable controls the position of tooltips, if the position is not specified to
2266 * This variable controls the position of tooltips, if the position is not specified to
2267 * the Tooltip widget or *TextBox widget itself. It's an array of strings with the values
2267 * the Tooltip widget or *TextBox widget itself. It's an array of strings with the values
2268 * possible for `dijit/place.around()`. The recommended values are:
2268 * possible for `dijit/place.around()`. The recommended values are:
2269 *
2269 *
2270 * - before-centered: centers tooltip to the left of the anchor node/widget, or to the right
2270 * - before-centered: centers tooltip to the left of the anchor node/widget, or to the right
2271 * in the case of RTL scripts like Hebrew and Arabic
2271 * in the case of RTL scripts like Hebrew and Arabic
2272 * - after-centered: centers tooltip to the right of the anchor node/widget, or to the left
2272 * - after-centered: centers tooltip to the right of the anchor node/widget, or to the left
2273 * in the case of RTL scripts like Hebrew and Arabic
2273 * in the case of RTL scripts like Hebrew and Arabic
2274 * - above-centered: tooltip is centered above anchor node
2274 * - above-centered: tooltip is centered above anchor node
2275 * - below-centered: tooltip is centered above anchor node
2275 * - below-centered: tooltip is centered above anchor node
2276 *
2276 *
2277 * The list is positions is tried, in order, until a position is found where the tooltip fits
2277 * The list is positions is tried, in order, until a position is found where the tooltip fits
2278 * within the viewport.
2278 * within the viewport.
2279 *
2279 *
2280 * Be careful setting this parameter. A value of "above-centered" may work fine until the user scrolls
2280 * Be careful setting this parameter. A value of "above-centered" may work fine until the user scrolls
2281 * the screen so that there's no room above the target node. Nodes with drop downs, like
2281 * the screen so that there's no room above the target node. Nodes with drop downs, like
2282 * DropDownButton or FilteringSelect, are especially problematic, in that you need to be sure
2282 * DropDownButton or FilteringSelect, are especially problematic, in that you need to be sure
2283 * that the drop down and tooltip don't overlap, even when the viewport is scrolled so that there
2283 * that the drop down and tooltip don't overlap, even when the viewport is scrolled so that there
2284 * is only room below (or above) the target node, but not both.
2284 * is only room below (or above) the target node, but not both.
2285 */
2285 */
2286 defaultPosition: [string];
2286 defaultPosition: [string];
2287
2287
2288 /**
2288 /**
2289 * Static method to display tooltip w/specified contents in specified position.
2289 * Static method to display tooltip w/specified contents in specified position.
2290 * See description of dijit/Tooltip.defaultPosition for details on position parameter.
2290 * See description of dijit/Tooltip.defaultPosition for details on position parameter.
2291 * If position is not specified then dijit/Tooltip.defaultPosition is used.
2291 * If position is not specified then dijit/Tooltip.defaultPosition is used.
2292 */
2292 */
2293 show(innerHTML: string, aroundNode: PlaceRectangle, position?: [string], rtl?: boolean, textDir?: string, onMouseEnter?: Function, onMouseLeave?: Function): void;
2293 show(innerHTML: string, aroundNode: PlaceRectangle, position?: [string], rtl?: boolean, textDir?: string, onMouseEnter?: Function, onMouseLeave?: Function): void;
2294
2294
2295 /**
2295 /**
2296 * Hide the tooltip
2296 * Hide the tooltip
2297 */
2297 */
2298 hide(aroundNode: PlaceRectangle): void;
2298 hide(aroundNode: PlaceRectangle): void;
2299 }
2299 }
2300
2300
2301 /* dijit/TooltipDialog */
2301 /* dijit/TooltipDialog */
2302
2302
2303 interface TooltipDialog extends layout.ContentPane, _TemplatedMixin, form._FormMixin, _DialogMixin {
2303 interface TooltipDialog extends layout.ContentPane, _TemplatedMixin, form._FormMixin, _DialogMixin {
2304 /**
2304 /**
2305 * Description of tooltip dialog (required for a11y)
2305 * Description of tooltip dialog (required for a11y)
2306 */
2306 */
2307 title: string;
2307 title: string;
2308
2308
2309 /**
2309 /**
2310 * Don't change this parameter from the default value.
2310 * Don't change this parameter from the default value.
2311 * This ContentPane parameter doesn't make sense for TooltipDialog, since TooltipDialog
2311 * This ContentPane parameter doesn't make sense for TooltipDialog, since TooltipDialog
2312 * is never a child of a layout container, nor can you specify the size of
2312 * is never a child of a layout container, nor can you specify the size of
2313 * TooltipDialog in order to control the size of an inner widget.
2313 * TooltipDialog in order to control the size of an inner widget.
2314 */
2314 */
2315 doLayout: boolean;
2315 doLayout: boolean;
2316
2316
2317 /**
2317 /**
2318 * A Toggle to modify the default focus behavior of a Dialog, which
2318 * A Toggle to modify the default focus behavior of a Dialog, which
2319 * is to focus on the first dialog element after opening the dialog.
2319 * is to focus on the first dialog element after opening the dialog.
2320 * False will disable autofocusing. Default: true.
2320 * False will disable autofocusing. Default: true.
2321 */
2321 */
2322 autofocus: boolean;
2322 autofocus: boolean;
2323
2323
2324 /**
2324 /**
2325 * The pointer to the first focusable node in the dialog.
2325 * The pointer to the first focusable node in the dialog.
2326 */
2326 */
2327 _firstFocusItem: any;
2327 _firstFocusItem: any;
2328
2328
2329 /**
2329 /**
2330 * The pointer to which node has focus prior to our dialog.
2330 * The pointer to which node has focus prior to our dialog.
2331 */
2331 */
2332 _lastFocusItem: any;
2332 _lastFocusItem: any;
2333
2333
2334 /**
2334 /**
2335 * Configure widget to be displayed in given position relative to the button.
2335 * Configure widget to be displayed in given position relative to the button.
2336 *
2336 *
2337 * This is called from the dijit.popup code, and should not be called directly.
2337 * This is called from the dijit.popup code, and should not be called directly.
2338 */
2338 */
2339 orient(node: Node | HTMLElement, aroundCorner: PlaceCorner, tooltipCorner: PlaceCorner): void;
2339 orient(node: Node | HTMLElement, aroundCorner: PlaceCorner, tooltipCorner: PlaceCorner): void;
2340
2340
2341 /**
2341 /**
2342 * Focus on first field
2342 * Focus on first field
2343 */
2343 */
2344 focus(): void;
2344 focus(): void;
2345
2345
2346 /**
2346 /**
2347 * Called when dialog is displayed.
2347 * Called when dialog is displayed.
2348 *
2348 *
2349 * This is called from the dijit.popup code, and should not be called directly.
2349 * This is called from the dijit.popup code, and should not be called directly.
2350 */
2350 */
2351 onOpen(pos: {
2351 onOpen(pos: {
2352 aroundCorner: PlaceCorner
2352 aroundCorner: PlaceCorner
2353 aroundNodePos: PlacePosition
2353 aroundNodePos: PlacePosition
2354 corner: PlaceCorner
2354 corner: PlaceCorner
2355 x: number
2355 x: number
2356 y: number
2356 y: number
2357 }): void;
2357 }): void;
2358
2358
2359 /**
2359 /**
2360 * Handler for keydown events
2360 * Handler for keydown events
2361 *
2361 *
2362 * Keep keyboard focus in dialog; close dialog on escape key
2362 * Keep keyboard focus in dialog; close dialog on escape key
2363 */
2363 */
2364 _onKey(evt: KeyboardEvent): void;
2364 _onKey(evt: KeyboardEvent): void;
2365 }
2365 }
2366
2366
2367 interface TooltipDialogConstructor extends _WidgetBaseConstructor<TooltipDialog> { }
2367 interface TooltipDialogConstructor extends _WidgetBaseConstructor<TooltipDialog> { }
2368 }
2368 }
@@ -1,590 +1,590
1 /// <reference path="data.d.ts" />
1 /// <reference path="data.d.ts" />
2
2
3
3
4 declare namespace dojo {
4 declare namespace dojo {
5 namespace store {
5 namespace store {
6 namespace api {
6 namespace api {
7
7
8 type Identity = number | string;
8 type Identity = number | string;
9
9
10 /* dojo/store/api/Store */
10 /* dojo/store/api/Store */
11
11
12 interface SortInformation {
12 interface SortInformation {
13
13
14 /**
14 /**
15 * The name of the attribute to sort on.
15 * The name of the attribute to sort on.
16 */
16 */
17 attribute: string;
17 attribute: string;
18
18
19 /**
19 /**
20 * The direction of the sort. Default is false.
20 * The direction of the sort. Default is false.
21 */
21 */
22 descending?: boolean;
22 descending?: boolean;
23 }
23 }
24
24
25 interface QueryOptions {
25 interface QueryOptions {
26 /**
26 /**
27 * A list of attributes to sort on, as well as direction
27 * A list of attributes to sort on, as well as direction
28 * For example:
28 * For example:
29 * | [{attribute:"price", descending: true}].
29 * | [{attribute:"price", descending: true}].
30 * If the sort parameter is omitted, then the natural order of the store may be
30 * If the sort parameter is omitted, then the natural order of the store may be
31 * applied if there is a natural order.
31 * applied if there is a natural order.
32 */
32 */
33 sort?: SortInformation[];
33 sort?: SortInformation[];
34
34
35 /**
35 /**
36 * The first result to begin iteration on
36 * The first result to begin iteration on
37 */
37 */
38 start?: number;
38 start?: number;
39
39
40 /**
40 /**
41 * The number of how many results should be returned.
41 * The number of how many results should be returned.
42 */
42 */
43 count?: number;
43 count?: number;
44 }
44 }
45
45
46 interface QueryEngineFunction<T extends object> {
46 interface QueryEngineFunction<T extends object> {
47 (array: T[]): T[];
47 (array: T[]): T[];
48 matches(object: T): boolean;
48 matches(object: T): boolean;
49 }
49 }
50
50
51 type BaseQueryType = string | object | ((...params: unknown[]) => unknown);
51 type BaseQueryType = string | object | ((...params: unknown[]) => boolean);
52
52
53 interface QueryEngine<T extends object, Q extends BaseQueryType> {
53 interface QueryEngine<T extends object, Q extends BaseQueryType> {
54 <O extends QueryOptions>(query: Q, options?: O): QueryEngineFunction<T>;
54 <O extends QueryOptions>(query: Q, options?: O): QueryEngineFunction<T>;
55 }
55 }
56
56
57 interface PutDirectives<T extends object> {
57 interface PutDirectives<T extends object> {
58
58
59 /**
59 /**
60 * Indicates the identity of the object if a new object is created
60 * Indicates the identity of the object if a new object is created
61 */
61 */
62 id?: Identity;
62 id?: Identity;
63
63
64 /**
64 /**
65 * If the collection of objects in the store has a natural ordering,
65 * If the collection of objects in the store has a natural ordering,
66 * this indicates that the created or updated object should be placed before the
66 * this indicates that the created or updated object should be placed before the
67 * object specified by the value of this property. A value of null indicates that the
67 * object specified by the value of this property. A value of null indicates that the
68 * object should be last.
68 * object should be last.
69 */
69 */
70 before?: T;
70 before?: T;
71
71
72 /**
72 /**
73 * If the store is hierarchical (with single parenting) this property indicates the
73 * If the store is hierarchical (with single parenting) this property indicates the
74 * new parent of the created or updated object.
74 * new parent of the created or updated object.
75 */
75 */
76 parent?: T;
76 parent?: T;
77
77
78 /**
78 /**
79 * If this is provided as a boolean it indicates that the object should or should not
79 * If this is provided as a boolean it indicates that the object should or should not
80 * overwrite an existing object. A value of true indicates that a new object
80 * overwrite an existing object. A value of true indicates that a new object
81 * should not be created, the operation should update an existing object. A
81 * should not be created, the operation should update an existing object. A
82 * value of false indicates that an existing object should not be updated, a new
82 * value of false indicates that an existing object should not be updated, a new
83 * object should be created (which is the same as an add() operation). When
83 * object should be created (which is the same as an add() operation). When
84 * this property is not provided, either an update or creation is acceptable.
84 * this property is not provided, either an update or creation is acceptable.
85 */
85 */
86 overwrite?: boolean;
86 overwrite?: boolean;
87 }
87 }
88
88
89 interface SyncQueryResults<T extends object> extends Array<T> {
89 interface SyncQueryResults<T extends object> extends Array<T> {
90 total?: number;
90 total?: number;
91 }
91 }
92
92
93 interface AsyncQueryResults<T extends object> extends PromiseLike<Array<T>> {
93 interface AsyncQueryResults<T extends object> extends PromiseLike<Array<T>> {
94 /**
94 /**
95 * Iterates over the query results, based on
95 * Iterates over the query results, based on
96 * https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/objects/Array/forEach.
96 * https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/objects/Array/forEach.
97 * Note that this may executed asynchronously. The callback may be called
97 * Note that this may executed asynchronously. The callback may be called
98 * after this function returns.
98 * after this function returns.
99 */
99 */
100 forEach(callback: (item: T, index: number, results: Array<T>) => void, thisObject?: object): PromiseLike<void>;
100 forEach(callback: (item: T, index: number, results: Array<T>) => void, thisObject?: object): PromiseLike<void>;
101
101
102 /**
102 /**
103 * Filters the query results, based on
103 * Filters the query results, based on
104 * https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter.
104 * https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter.
105 * Note that this may executed asynchronously. The callback may be called
105 * Note that this may executed asynchronously. The callback may be called
106 * after this function returns.
106 * after this function returns.
107 */
107 */
108 filter(callback: (item: T, index: number, results: Array<T>) => boolean, thisObject?: object): PromiseLike<Array<T>>;
108 filter(callback: (item: T, index: number, results: Array<T>) => boolean, thisObject?: object): PromiseLike<Array<T>>;
109
109
110 /**
110 /**
111 * Maps the query results, based on
111 * Maps the query results, based on
112 * https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map.
112 * https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map.
113 * Note that this may executed asynchronously. The callback may be called
113 * Note that this may executed asynchronously. The callback may be called
114 * after this function returns.
114 * after this function returns.
115 */
115 */
116 map<U>(callback: (item: T, index: number, results: Array<T>) => U, thisObject?: object): PromiseLike<Array<U>>;
116 map<U>(callback: (item: T, index: number, results: Array<T>) => U, thisObject?: object): PromiseLike<Array<U>>;
117
117
118 /** Cancells the current query */
118 /** Cancells the current query */
119 cancel(reason?: any): void;
119 cancel(reason?: any): void;
120
120
121 total?: PromiseLike<number>;
121 total?: PromiseLike<number>;
122 }
122 }
123
123
124 type QueryResults<T extends object> = SyncQueryResults<T> | AsyncQueryResults<T>;
124 type QueryResults<T extends object> = SyncQueryResults<T> | AsyncQueryResults<T>;
125
125
126 interface Transaction {
126 interface Transaction {
127 /**
127 /**
128 * Commits the transaction. This may throw an error if it fails. Of if the operation
128 * Commits the transaction. This may throw an error if it fails. Of if the operation
129 * is asynchronous, it may return a promise that represents the eventual success
129 * is asynchronous, it may return a promise that represents the eventual success
130 * or failure of the commit.
130 * or failure of the commit.
131 */
131 */
132 commit(): void;
132 commit(): void;
133
133
134 /**
134 /**
135 * Aborts the transaction. This may throw an error if it fails. Of if the operation
135 * Aborts the transaction. This may throw an error if it fails. Of if the operation
136 * is asynchronous, it may return a promise that represents the eventual success
136 * is asynchronous, it may return a promise that represents the eventual success
137 * or failure of the abort.
137 * or failure of the abort.
138 */
138 */
139 abort(): void;
139 abort(): void;
140 }
140 }
141
141
142 interface Transacted {
142 interface Transacted {
143 /**
143 /**
144 * Starts a new transaction.
144 * Starts a new transaction.
145 * Note that a store user might not call transaction() prior to using put,
145 * Note that a store user might not call transaction() prior to using put,
146 * delete, etc. in which case these operations effectively could be thought of
146 * delete, etc. in which case these operations effectively could be thought of
147 * as "auto-commit" style actions.
147 * as "auto-commit" style actions.
148 */
148 */
149 transaction(): Transaction;
149 transaction(): Transaction;
150 }
150 }
151
151
152 interface MetadataProvider<T extends object> {
152 interface MetadataProvider<T extends object> {
153 /**
153 /**
154 * Returns any metadata about the object. This may include attribution,
154 * Returns any metadata about the object. This may include attribution,
155 * cache directives, history, or version information.
155 * cache directives, history, or version information.
156 */
156 */
157 getMetadata(object: T): object;
157 getMetadata(object: T): object;
158 }
158 }
159
159
160 interface IdentityProvider<T extends object> {
160 interface IdentityProvider<T extends object> {
161 /**
161 /**
162 * If the store has a single primary key, this indicates the property to use as the
162 * If the store has a single primary key, this indicates the property to use as the
163 * identity property. The values of this property should be unique.
163 * identity property. The values of this property should be unique.
164 */
164 */
165 idProperty: keyof T;
165 idProperty: keyof T;
166
166
167 /**
167 /**
168 * Returns an object's identity
168 * Returns an object's identity
169 */
169 */
170 getIdentity(object: T): Identity;
170 getIdentity(object: T): Identity;
171 }
171 }
172
172
173 interface Queryable<
173 interface Queryable<
174 T extends object,
174 T extends object,
175 Q extends BaseQueryType,
175 Q extends BaseQueryType,
176 O extends QueryOptions,
176 O extends QueryOptions,
177 R extends QueryResults<T> = QueryResults<T>> {
177 R extends QueryResults<T> = QueryResults<T>> {
178
178
179 /**
179 /**
180 * Queries the store for objects. This does not alter the store, but returns a
180 * Queries the store for objects. This does not alter the store, but returns a
181 * set of data from the store.
181 * set of data from the store.
182 */
182 */
183 query(query?: Q, options?: O): R;
183 query(query?: Q, options?: O): R;
184 }
184 }
185
185
186 interface SyncStore<T extends object, Q extends BaseQueryType = Partial<T> | ((item: T) => boolean) | string, O extends QueryOptions = QueryOptions>
186 interface SyncStore<T extends object, Q extends BaseQueryType = Partial<T> | ((item: T) => boolean) | string, O extends QueryOptions = QueryOptions>
187 extends IdentityProvider<T>, Queryable<T, Q, O, SyncQueryResults<T>> {
187 extends IdentityProvider<T>, Queryable<T, Q, O, SyncQueryResults<T>> {
188
188
189 /**
189 /**
190 * If the store can be queried locally (on the client side in JS), this defines
190 * If the store can be queried locally (on the client side in JS), this defines
191 * the query engine to use for querying the data store.
191 * the query engine to use for querying the data store.
192 * This takes a query and query options and returns a function that can execute
192 * This takes a query and query options and returns a function that can execute
193 * the provided query on a JavaScript array. The queryEngine may be replace to
193 * the provided query on a JavaScript array. The queryEngine may be replace to
194 * provide more sophisticated querying capabilities. For example:
194 * provide more sophisticated querying capabilities. For example:
195 * | var query = store.queryEngine({foo:"bar"}, {count:10});
195 * | var query = store.queryEngine({foo:"bar"}, {count:10});
196 * | query(someArray) -> filtered array
196 * | query(someArray) -> filtered array
197 * The returned query function may have a "matches" property that can be
197 * The returned query function may have a "matches" property that can be
198 * used to determine if an object matches the query. For example:
198 * used to determine if an object matches the query. For example:
199 * | query.matches({id:"some-object", foo:"bar"}) -> true
199 * | query.matches({id:"some-object", foo:"bar"}) -> true
200 * | query.matches({id:"some-object", foo:"something else"}) -> false
200 * | query.matches({id:"some-object", foo:"something else"}) -> false
201 */
201 */
202 queryEngine?: QueryEngine<T, Q>;
202 queryEngine?: QueryEngine<T, Q>;
203
203
204 /**
204 /**
205 * Retrieves an object by its identity
205 * Retrieves an object by its identity
206 */
206 */
207 get(id: Identity): T;
207 get(id: Identity): T;
208
208
209 /**
209 /**
210 * Stores an object
210 * Stores an object
211 */
211 */
212 put(object: T, directives?: PutDirectives<T>): unknown;
212 put(object: T, directives?: PutDirectives<T>): unknown;
213
213
214 /**
214 /**
215 * Creates an object, throws an error if the object already exists
215 * Creates an object, throws an error if the object already exists
216 */
216 */
217 add(object: T, directives?: PutDirectives<T>): unknown;
217 add(object: T, directives?: PutDirectives<T>): unknown;
218
218
219 /**
219 /**
220 * Deletes an object by its identity
220 * Deletes an object by its identity
221 */
221 */
222 remove(id: Identity): void;
222 remove(id: Identity): void;
223
223
224 }
224 }
225
225
226 interface AsyncStore<T extends object, Q extends BaseQueryType = Partial<T> | ((item: T) => boolean) | string, O extends QueryOptions = QueryOptions>
226 interface AsyncStore<T extends object, Q extends BaseQueryType = Partial<T> | ((item: T) => boolean) | string, O extends QueryOptions = QueryOptions>
227 extends IdentityProvider<T>, Queryable<T, Q, O, AsyncQueryResults<T>> {
227 extends IdentityProvider<T>, Queryable<T, Q, O, AsyncQueryResults<T>> {
228
228
229 /**
229 /**
230 * If the store can be queried locally (on the client side in JS), this defines
230 * If the store can be queried locally (on the client side in JS), this defines
231 * the query engine to use for querying the data store.
231 * the query engine to use for querying the data store.
232 * This takes a query and query options and returns a function that can execute
232 * This takes a query and query options and returns a function that can execute
233 * the provided query on a JavaScript array. The queryEngine may be replace to
233 * the provided query on a JavaScript array. The queryEngine may be replace to
234 * provide more sophisticated querying capabilities. For example:
234 * provide more sophisticated querying capabilities. For example:
235 * | var query = store.queryEngine({foo:"bar"}, {count:10});
235 * | var query = store.queryEngine({foo:"bar"}, {count:10});
236 * | query(someArray) -> filtered array
236 * | query(someArray) -> filtered array
237 * The returned query function may have a "matches" property that can be
237 * The returned query function may have a "matches" property that can be
238 * used to determine if an object matches the query. For example:
238 * used to determine if an object matches the query. For example:
239 * | query.matches({id:"some-object", foo:"bar"}) -> true
239 * | query.matches({id:"some-object", foo:"bar"}) -> true
240 * | query.matches({id:"some-object", foo:"something else"}) -> false
240 * | query.matches({id:"some-object", foo:"something else"}) -> false
241 */
241 */
242 queryEngine?: QueryEngine<T, Q>;
242 queryEngine?: QueryEngine<T, Q>;
243
243
244 /**
244 /**
245 * Retrieves an object by its identity
245 * Retrieves an object by its identity
246 */
246 */
247 get(id: Identity): PromiseLike<T>;
247 get(id: Identity): PromiseLike<T>;
248
248
249 /**
249 /**
250 * Stores an object
250 * Stores an object
251 */
251 */
252 put(object: T, directives?: PutDirectives<T>): PromiseLike<unknown>;
252 put(object: T, directives?: PutDirectives<T>): PromiseLike<unknown>;
253
253
254 /**
254 /**
255 * Creates an object, throws an error if the object already exists
255 * Creates an object, throws an error if the object already exists
256 */
256 */
257 add(object: T, directives?: PutDirectives<T>): PromiseLike<unknown>;
257 add(object: T, directives?: PutDirectives<T>): PromiseLike<unknown>;
258
258
259 /**
259 /**
260 * Deletes an object by its identity
260 * Deletes an object by its identity
261 */
261 */
262 remove(id: string | number): PromiseLike<void>;
262 remove(id: string | number): PromiseLike<void>;
263
263
264 }
264 }
265
265
266 interface HierarchicalStore<T extends object, O extends QueryOptions = QueryOptions, R extends QueryResults<T> = QueryResults<T>> {
266 interface HierarchicalStore<T extends object, O extends QueryOptions = QueryOptions, R extends QueryResults<T> = QueryResults<T>> {
267
267
268 /**
268 /**
269 * Retrieves the children of an object.
269 * Retrieves the children of an object.
270 */
270 */
271 getChildren(parent: T, options?: O): R;
271 getChildren(parent: T, options?: O): R;
272 }
272 }
273
273
274 interface Store<T extends object, Q extends BaseQueryType = Partial<T> | ((item: T) => boolean) | string, O extends QueryOptions = QueryOptions>
274 interface Store<T extends object, Q extends BaseQueryType = Partial<T> | ((item: T) => boolean) | string, O extends QueryOptions = QueryOptions>
275 extends IdentityProvider<T>, Queryable<T, Q, O> {
275 extends IdentityProvider<T>, Queryable<T, Q, O> {
276
276
277 /**
277 /**
278 * If the store can be queried locally (on the client side in JS), this defines
278 * If the store can be queried locally (on the client side in JS), this defines
279 * the query engine to use for querying the data store.
279 * the query engine to use for querying the data store.
280 * This takes a query and query options and returns a function that can execute
280 * This takes a query and query options and returns a function that can execute
281 * the provided query on a JavaScript array. The queryEngine may be replace to
281 * the provided query on a JavaScript array. The queryEngine may be replace to
282 * provide more sophisticated querying capabilities. For example:
282 * provide more sophisticated querying capabilities. For example:
283 * | var query = store.queryEngine({foo:"bar"}, {count:10});
283 * | var query = store.queryEngine({foo:"bar"}, {count:10});
284 * | query(someArray) -> filtered array
284 * | query(someArray) -> filtered array
285 * The returned query function may have a "matches" property that can be
285 * The returned query function may have a "matches" property that can be
286 * used to determine if an object matches the query. For example:
286 * used to determine if an object matches the query. For example:
287 * | query.matches({id:"some-object", foo:"bar"}) -> true
287 * | query.matches({id:"some-object", foo:"bar"}) -> true
288 * | query.matches({id:"some-object", foo:"something else"}) -> false
288 * | query.matches({id:"some-object", foo:"something else"}) -> false
289 */
289 */
290 queryEngine?: QueryEngine<T, Q>;
290 queryEngine?: QueryEngine<T, Q>;
291
291
292 /**
292 /**
293 * Retrieves an object by its identity
293 * Retrieves an object by its identity
294 */
294 */
295 get(id: Identity): T | PromiseLike<T>;
295 get(id: Identity): T | PromiseLike<T>;
296
296
297 /**
297 /**
298 * Stores an object
298 * Stores an object
299 */
299 */
300 put(object: T, directives?: PutDirectives<T>): unknown;
300 put(object: T, directives?: PutDirectives<T>): unknown;
301
301
302 /**
302 /**
303 * Creates an object, throws an error if the object already exists
303 * Creates an object, throws an error if the object already exists
304 */
304 */
305 add(object: T, directives?: PutDirectives<T>): unknown;
305 add(object: T, directives?: PutDirectives<T>): unknown;
306
306
307 /**
307 /**
308 * Deletes an object by its identity
308 * Deletes an object by its identity
309 */
309 */
310 remove(id: Identity): void | PromiseLike<void>;
310 remove(id: Identity): void | PromiseLike<void>;
311
311
312 }
312 }
313
313
314 interface StoreConstructor {
314 interface StoreConstructor {
315 new <T extends object, Q extends BaseQueryType, O extends QueryOptions>(): Store<T, Q, O>;
315 new <T extends object, Q extends BaseQueryType, O extends QueryOptions>(): Store<T, Q, O>;
316 }
316 }
317 }
317 }
318
318
319 namespace util {
319 namespace util {
320
320
321 /* dojo/store/util/QueryResults */
321 /* dojo/store/util/QueryResults */
322
322
323 interface QueryResultsFunction {
323 interface QueryResultsFunction {
324 /**
324 /**
325 * A function that wraps the results of a store query with additional
325 * A function that wraps the results of a store query with additional
326 * methods.
326 * methods.
327 */
327 */
328 <T extends object>(results: T[]): api.SyncQueryResults<T>;
328 <T extends object>(results: T[]): api.SyncQueryResults<T>;
329 <T extends object>(results: PromiseLike<T[]>): api.AsyncQueryResults<T>;
329 <T extends object>(results: PromiseLike<T[]>): api.AsyncQueryResults<T>;
330 }
330 }
331
331
332 /* dojo/store/util/SimpleQueryEngine */
332 /* dojo/store/util/SimpleQueryEngine */
333 interface SimpleQueryEngine extends api.QueryEngine<object, api.BaseQueryType> { }
333 interface SimpleQueryEngine extends api.QueryEngine<object, api.BaseQueryType> { }
334 }
334 }
335
335
336 /* dojo/store/Cache */
336 /* dojo/store/Cache */
337
337
338 interface CacheOptions<T extends object = any> {
338 interface CacheOptions<T extends object = any> {
339 /**
339 /**
340 * This is a function that will be called for each item in a query response to determine
340 * This is a function that will be called for each item in a query response to determine
341 * if it is cacheable. If isLoaded returns true, the item will be cached, otherwise it
341 * if it is cacheable. If isLoaded returns true, the item will be cached, otherwise it
342 * will not be cached. If isLoaded is not provided, all items will be cached.
342 * will not be cached. If isLoaded is not provided, all items will be cached.
343 */
343 */
344 isLoaded?: (item: T) => boolean;
344 isLoaded?: (item: T) => boolean;
345 }
345 }
346
346
347 interface CacheMixin {
347 interface CacheMixin {
348 /**
348 /**
349 * Remove the object with the specific id.
349 * Remove the object with the specific id.
350 */
350 */
351 remove(id: api.Identity): PromiseLike<void>;
351 remove(id: api.Identity): PromiseLike<void>;
352
352
353 /**
353 /**
354 * Remove the object with the given id from the underlying caching store.
354 * Remove the object with the given id from the underlying caching store.
355 */
355 */
356 evict(id: api.Identity): PromiseLike<void>;
356 evict(id: api.Identity): PromiseLike<void>;
357 }
357 }
358
358
359 interface Cache {
359 interface Cache {
360 /**
360 /**
361 * The Cache store wrapper takes a master store and a caching store,
361 * The Cache store wrapper takes a master store and a caching store,
362 * caches data from the master into the caching store for faster
362 * caches data from the master into the caching store for faster
363 * lookup. Normally one would use a memory store for the caching
363 * lookup. Normally one would use a memory store for the caching
364 * store and a server store like JsonRest for the master store.
364 * store and a server store like JsonRest for the master store.
365 */
365 */
366 <T extends object, Q extends api.BaseQueryType, O extends api.QueryOptions, S extends api.Store<T, Q, O>>(masterStore: S, cacheStore: api.Store<T, Q, O>, options?: CacheOptions): CacheMixin & S;
366 <T extends object, Q extends api.BaseQueryType, O extends api.QueryOptions, S extends api.Store<T, Q, O>>(masterStore: S, cacheStore: api.Store<T, Q, O>, options?: CacheOptions): CacheMixin & S;
367 }
367 }
368
368
369 /* dojo/store/DataStore */
369 /* dojo/store/DataStore */
370
370
371 interface DataStoreOptions<T extends object> {
371 interface DataStoreOptions<T extends object> {
372 idProperty?: keyof T;
372 idProperty?: keyof T;
373 queryEngine?: api.QueryEngine<T, api.QueryOptions>;
373 queryEngine?: api.QueryEngine<T, api.QueryOptions>;
374 store?: data.api.Read<T> | data.api.Write<T> | data.api.Identity<T>;
374 store?: data.api.Read<T> | data.api.Write<T> | data.api.Identity<T>;
375 }
375 }
376
376
377 interface DataStore<T extends object> extends api.Store<T, api.BaseQueryType, api.QueryOptions> {
377 interface DataStore<T extends object> extends api.Store<T, api.BaseQueryType, api.QueryOptions> {
378 /**
378 /**
379 * The object store to convert to a data store
379 * The object store to convert to a data store
380 */
380 */
381 store: data.api.Read<T> | data.api.Write<T> | data.api.Identity<T>;
381 store: data.api.Read<T> | data.api.Write<T> | data.api.Identity<T>;
382
382
383 /**
383 /**
384 * Defines the query engine to use for querying the data store
384 * Defines the query engine to use for querying the data store
385 */
385 */
386 queryEngine: api.QueryEngine<T, api.BaseQueryType>;
386 queryEngine: api.QueryEngine<T, api.BaseQueryType>;
387
387
388 _objectConverter(callback: (item: T) => any): (item: T) => any;
388 _objectConverter(callback: (item: T) => any): (item: T) => any;
389 }
389 }
390
390
391 interface DataStoreConstructor extends _base.DeclareConstructor<DataStore<object>> {
391 interface DataStoreConstructor extends _base.DeclareConstructor<DataStore<object>> {
392 new <T extends object>(options?: DataStoreOptions<T>): DataStore<T>;
392 new <T extends object>(options?: DataStoreOptions<T>): DataStore<T>;
393 }
393 }
394
394
395 /* dojo/store/JsonRest */
395 /* dojo/store/JsonRest */
396
396
397 interface Headers {
397 interface Headers {
398 [header: string]: string;
398 [header: string]: string;
399 }
399 }
400
400
401 interface JsonRestPutDirectives<T extends object> extends api.PutDirectives<T> {
401 interface JsonRestPutDirectives<T extends object> extends api.PutDirectives<T> {
402 headers?: Headers;
402 headers?: Headers;
403
403
404 incremental?: boolean;
404 incremental?: boolean;
405
405
406 timeout?: number
406 timeout?: number
407 }
407 }
408
408
409 interface JsonRestQueryOptions extends api.QueryOptions {
409 interface JsonRestQueryOptions extends api.QueryOptions {
410 headers?: Headers;
410 headers?: Headers;
411
411
412 timeout?: number;
412 timeout?: number;
413 }
413 }
414
414
415 interface JsonRestOptions<T extends object> {
415 interface JsonRestOptions<T extends object> {
416 idProperty?: keyof T;
416 idProperty?: keyof T;
417 queryEngine?: api.QueryEngine<T, JsonRestQueryOptions>;
417 queryEngine?: api.QueryEngine<T, JsonRestQueryOptions>;
418 headers?: Headers;
418 headers?: Headers;
419 target?: string;
419 target?: string;
420 rangeParam?: string;
420 rangeParam?: string;
421 sortParam?: string;
421 sortParam?: string;
422 ascendingPrefix?: string;
422 ascendingPrefix?: string;
423 descendingPrefix?: string;
423 descendingPrefix?: string;
424 accepts?: string;
424 accepts?: string;
425 }
425 }
426
426
427 interface JsonRest<
427 interface JsonRest<
428 T extends object,
428 T extends object,
429 Q extends api.BaseQueryType = (Partial<T> | string) & api.BaseQueryType,
429 Q extends api.BaseQueryType = (Partial<T> | string) & api.BaseQueryType,
430 O extends JsonRestQueryOptions = JsonRestQueryOptions>
430 O extends JsonRestQueryOptions = JsonRestQueryOptions>
431 extends api.AsyncStore<T, Q, O> {
431 extends api.AsyncStore<T, Q, O> {
432 /**
432 /**
433 * Additional headers to pass in all requests to the server. These can be overridden
433 * Additional headers to pass in all requests to the server. These can be overridden
434 * by passing additional headers to calls to the store.
434 * by passing additional headers to calls to the store.
435 */
435 */
436 headers: Headers;
436 headers: Headers;
437
437
438 /**
438 /**
439 * The target base URL to use for all requests to the server. This string will be
439 * The target base URL to use for all requests to the server. This string will be
440 * prepended to the id to generate the URL (relative or absolute) for requests
440 * prepended to the id to generate the URL (relative or absolute) for requests
441 * sent to the server
441 * sent to the server
442 */
442 */
443 target: string;
443 target: string;
444
444
445 /**
445 /**
446 * Use a query parameter for the requested range. If this is omitted, than the
446 * Use a query parameter for the requested range. If this is omitted, than the
447 * Range header will be used. Independent of this, the X-Range header is always set.
447 * Range header will be used. Independent of this, the X-Range header is always set.
448 */
448 */
449 rangeParam?: string;
449 rangeParam?: string;
450
450
451 /**
451 /**
452 * The query parameter to used for holding sort information. If this is omitted, than
452 * The query parameter to used for holding sort information. If this is omitted, than
453 * the sort information is included in a functional query token to avoid colliding
453 * the sort information is included in a functional query token to avoid colliding
454 * with the set of name/value pairs.
454 * with the set of name/value pairs.
455 */
455 */
456 sortParam?: string;
456 sortParam?: string;
457
457
458 /**
458 /**
459 * The prefix to apply to sort attribute names that are ascending
459 * The prefix to apply to sort attribute names that are ascending
460 */
460 */
461 ascendingPrefix: string;
461 ascendingPrefix: string;
462
462
463 /**
463 /**
464 * The prefix to apply to sort attribute names that are descending
464 * The prefix to apply to sort attribute names that are descending
465 */
465 */
466 descendingPrefix: string;
466 descendingPrefix: string;
467
467
468 /**
468 /**
469 * If the target has no trailing '/', then append it.
469 * If the target has no trailing '/', then append it.
470 */
470 */
471 _getTarget(id: api.Identity): string;
471 _getTarget(id: api.Identity): string;
472
472
473 /**
473 /**
474 * Retrieves an object by its identity. This will trigger a GET request to the server using
474 * Retrieves an object by its identity. This will trigger a GET request to the server using
475 * the url `this.target + id`.
475 * the url `this.target + id`.
476 */
476 */
477 get(id: api.Identity, options?: { headers: Headers } | Headers): PromiseLike<T>;
477 get(id: api.Identity, options?: { headers: Headers } | Headers): PromiseLike<T>;
478
478
479 /**
479 /**
480 * Defines the Accept header to use on HTTP requests
480 * Defines the Accept header to use on HTTP requests
481 */
481 */
482 accepts: string;
482 accepts: string;
483
483
484 /**
484 /**
485 * Stores an object. This will trigger a PUT request to the server
485 * Stores an object. This will trigger a PUT request to the server
486 * if the object has an id, otherwise it will trigger a POST request.
486 * if the object has an id, otherwise it will trigger a POST request.
487 */
487 */
488 put(object: T, options?: JsonRestPutDirectives<T>): PromiseLike<unknown>;
488 put(object: T, options?: JsonRestPutDirectives<T>): PromiseLike<unknown>;
489
489
490 /**
490 /**
491 * Adds an object. This will trigger a PUT request to the server
491 * Adds an object. This will trigger a PUT request to the server
492 * if the object has an id, otherwise it will trigger a POST request.
492 * if the object has an id, otherwise it will trigger a POST request.
493 */
493 */
494 add(object: T, options?: JsonRestPutDirectives<T>): PromiseLike<unknown>;
494 add(object: T, options?: JsonRestPutDirectives<T>): PromiseLike<unknown>;
495
495
496 /**
496 /**
497 * Deletes an object by its identity. This will trigger a DELETE request to the server.
497 * Deletes an object by its identity. This will trigger a DELETE request to the server.
498 */
498 */
499 remove(id: api.Identity, options?: { headers?: Headers }): PromiseLike<void>;
499 remove(id: api.Identity, options?: { headers?: Headers }): PromiseLike<void>;
500
500
501 }
501 }
502
502
503 interface JsonRestConstructor extends _base.DeclareConstructor<JsonRest<object, api.BaseQueryType, JsonRestQueryOptions>> {
503 interface JsonRestConstructor extends _base.DeclareConstructor<JsonRest<object, api.BaseQueryType, JsonRestQueryOptions>> {
504 new <T extends object, Q extends api.BaseQueryType, O extends JsonRestQueryOptions>(options?: JsonRestOptions<T>): JsonRest<T, Q, O>;
504 new <T extends object, Q extends api.BaseQueryType, O extends JsonRestQueryOptions>(options?: JsonRestOptions<T>): JsonRest<T, Q, O>;
505 }
505 }
506
506
507 /* dojo/store/Memory */
507 /* dojo/store/Memory */
508
508
509 interface MemoryOptions<T extends object> {
509 interface MemoryOptions<T extends object> {
510 data?: T[];
510 data?: T[];
511 idProperty?: keyof T;
511 idProperty?: keyof T;
512 queryEngine?: api.QueryEngine<T, api.QueryOptions>;
512 queryEngine?: api.QueryEngine<T, api.QueryOptions>;
513 setData?: (data: T[]) => void;
513 setData?: (data: T[]) => void;
514 }
514 }
515
515
516 interface Memory<T extends object> extends api.SyncStore<T> {
516 interface Memory<T extends object> extends api.SyncStore<T> {
517 /**
517 /**
518 * The array of all the objects in the memory store
518 * The array of all the objects in the memory store
519 */
519 */
520 data: T[];
520 data: T[];
521
521
522 /**
522 /**
523 * An index of data indices into the data array by id
523 * An index of data indices into the data array by id
524 */
524 */
525 index: { [id: string]: number };
525 index: { [id: string]: number };
526
526
527 /**
527 /**
528 * Sets the given data as the source for this store, and indexes it
528 * Sets the given data as the source for this store, and indexes it
529 */
529 */
530 setData(data: T[]): void;
530 setData(data: T[]): void;
531 }
531 }
532
532
533 interface MemoryConstructor extends _base.DeclareConstructor<Memory<any>> {
533 interface MemoryConstructor extends _base.DeclareConstructor<Memory<any>> {
534 /**
534 /**
535 * This is a basic in-memory object store. It implements dojo/store/api/Store.
535 * This is a basic in-memory object store. It implements dojo/store/api/Store.
536 */
536 */
537 new <T extends object>(options?: MemoryOptions<T>): Memory<T>;
537 new <T extends object>(options?: MemoryOptions<T>): Memory<T>;
538 }
538 }
539
539
540 /* dojo/store/Observable */
540 /* dojo/store/Observable */
541
541
542 interface ObservableQueryResultsMixin<T extends object> {
542 interface ObservableQueryResultsMixin<T extends object> {
543 /**
543 /**
544 * Allows observation of results
544 * Allows observation of results
545 */
545 */
546 observe(listener: (object: T, previousIndex: number, newIndex: number) => void, includeUpdates?: boolean): {
546 observe(listener: (object: T, previousIndex: number, newIndex: number) => void, includeUpdates?: boolean): {
547 remove(): void;
547 remove(): void;
548 cancel(): void;
548 cancel(): void;
549 };
549 };
550 }
550 }
551
551
552 type ObservableQueryResults<T extends object> = ObservableQueryResultsMixin<T> & api.QueryResults<T>;
552 type ObservableQueryResults<T extends object> = ObservableQueryResultsMixin<T> & api.QueryResults<T>;
553
553
554 interface ObservableMixin<T extends object, Q extends api.BaseQueryType, O extends api.QueryOptions, R extends api.QueryResults<T> = api.QueryResults<T> > {
554 interface ObservableMixin<T extends object, Q extends api.BaseQueryType, O extends api.QueryOptions, R extends api.QueryResults<T> = api.QueryResults<T> > {
555 notify(object: T, existingId?: api.Identity): void;
555 notify(object: T, existingId?: api.Identity): void;
556
556
557 /**
557 /**
558 * Queries the store for objects. This does not alter the store, but returns a
558 * Queries the store for objects. This does not alter the store, but returns a
559 * set of data from the store.
559 * set of data from the store.
560 */
560 */
561 query(query: Q, options?: O): ObservableQueryResultsMixin<T> & R;
561 query(query: Q, options?: O): ObservableQueryResultsMixin<T> & R;
562 }
562 }
563
563
564 interface ResultsObserveMixin<T extends object> {
564 interface ResultsObserveMixin<T extends object> {
565 /**
565 /**
566 * Allows observation of results
566 * Allows observation of results
567 */
567 */
568 observe(listener: (object: T, previousIndex: number, newIndex: number) => void, includeUpdates?: boolean): {
568 observe(listener: (object: T, previousIndex: number, newIndex: number) => void, includeUpdates?: boolean): {
569 remove(): void;
569 remove(): void;
570 cancel(): void;
570 cancel(): void;
571 };
571 };
572 }
572 }
573
573
574 interface Notifiable<T> {
574 interface Notifiable<T> {
575 notify(object: T, existingId?: api.Identity): void;
575 notify(object: T, existingId?: api.Identity): void;
576 }
576 }
577
577
578 type ResultItem<R> = R extends ArrayLike<infer I1> ? I1 :
578 type ResultItem<R> = R extends ArrayLike<infer I1> ? I1 :
579 R extends PromiseLike<ArrayLike<infer I2>> ? I2 : never;
579 R extends PromiseLike<ArrayLike<infer I2>> ? I2 : never;
580
580
581 type ObservableStore<S extends { query: (...params: any) => any }> =
581 type ObservableStore<S extends { query: (...params: any) => any }> =
582 S extends { query: (...params: infer P) => api.QueryResults<infer R> } ? {
582 S extends { query: (...params: infer P) => api.QueryResults<infer R> } ? {
583 [K in keyof S]: K extends "query" ? (...params: P) => ReturnType<S[K]> & ResultsObserveMixin<R> : S[K];
583 [K in keyof S]: K extends "query" ? (...params: P) => ReturnType<S[K]> & ResultsObserveMixin<R> : S[K];
584 } & Notifiable<R> : S;
584 } & Notifiable<R> : S;
585
585
586 interface Observable {
586 interface Observable {
587 new <S extends api.Store<any, any, any>>(store: S): ObservableStore<S>;
587 new <S extends api.Store<any, any, any>>(store: S): ObservableStore<S>;
588 }
588 }
589 }
589 }
590 }
590 }
@@ -1,59 +1,59
1 import * as _WidgetBase from "dijit/_WidgetBase";
1 import * as _WidgetBase from "dijit/_WidgetBase";
2 import { watch } from "./traits";
2 import { watch } from "./traits";
3
3
4 interface ScheduleWidgetAttrs {
4 interface ScheduleWidgetAttrs {
5 data: string[];
5 data: string[];
6 }
6 }
7
7
8 interface ScheduleWidgetEvents {
8 interface ScheduleWidgetEvents {
9 "scheduled": Event & {
9 "scheduled": Event & {
10 detail: {
10 detail: {
11 startDate: Date,
11 startDate: Date,
12 endDate: Date
12 endDate: Date
13 }
13 }
14 };
14 };
15 }
15 }
16
16
17 class ScheduleWidget extends _WidgetBase<ScheduleWidgetAttrs, ScheduleWidgetEvents> {
17 class ScheduleWidget extends _WidgetBase<ScheduleWidgetAttrs, ScheduleWidgetEvents> {
18 data: string[];
18 data: string[];
19
19
20 _onClick() {
20 _onClick() {
21 this.set("data", "", "");
21 this.set("data", ["", ""]);
22
22
23 const t = this.get("title");
23 const t = this.get("title");
24 this.set({
24 this.set({
25 data: ["",""]
25 data: ["",""]
26 });
26 });
27 }
27 }
28
28
29 render(){
29 render(){
30 watch(this, "title", v => String(v) );
30 watch(this, "title", v => String(v) );
31 }
31 }
32 }
32 }
33
33
34 const w = new ScheduleWidget({title: "Year schedule", data: ["a", "b"] });
34 const w = new ScheduleWidget({title: "Year schedule", data: ["a", "b"] });
35
35
36 w.get("data");
36 w.get("data");
37
37
38 w.set("data", "a","b");
38 w.set("data", ["a","b"]);
39 w.set({
39 w.set({
40 data: ["a", "b"]
40 data: ["a", "b"]
41 });
41 });
42
42
43 w.watch((p, o, n) => [p,o,n]);
43 w.watch((p, o, n) => [p,o,n]);
44
44
45 w.watch("data", (p, o, n) => [p,o,n]);
45 w.watch("data", (p, o, n) => [p,o,n]);
46
46
47 watch(w, "title", v => String(v) );
47 watch(w, "title", v => String(v) );
48 watch(w, "data", v => String(v) );
48 watch(w, "data", v => String(v) );
49
49
50 w.emit("scheduled", { detail: { startDate: new Date(), endDate: new Date()} });
50 w.emit("scheduled", { detail: { startDate: new Date(), endDate: new Date()} });
51
51
52 w.emit("click", {} );
52 w.emit("click", {} );
53
53
54 w.emit("click", {} );
54 w.emit("click", {} );
55
55
56 w.emit<any>("some-extra-event", {});
56 w.emit<any>("some-extra-event", {});
57
57
58 w.on("click", e => e);
58 w.on("click", e => e);
59 w.on<any>("some-extra-event", e => e);
59 w.on<any>("some-extra-event", e => e);
General Comments 0
You need to be logged in to leave comments. Login now