source: Dev/branches/rest-dojo-ui/client/dijit/form/TimeTextBox.js @ 256

Last change on this file since 256 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

File size: 2.9 KB
Line 
1define([
2        "dojo/_base/declare", // declare
3        "dojo/keys", // keys.DOWN_ARROW keys.ENTER keys.ESCAPE keys.TAB keys.UP_ARROW
4        "dojo/_base/lang", // lang.hitch
5        "../_TimePicker",
6        "./_DateTimeTextBox"
7], function(declare, keys, lang, _TimePicker, _DateTimeTextBox){
8
9/*=====
10        var _TimePicker = dijit._TimePicker;
11        var _DateTimeTextBox = dijit.form._DateTimeTextBox;
12=====*/
13
14        // module:
15        //              dijit/form/TimeTextBox
16        // summary:
17        //              A validating, serializable, range-bound time text box with a drop down time picker
18
19
20        /*=====
21        declare(
22                "dijit.form.TimeTextBox.__Constraints",
23                [dijit.form._DateTimeTextBox.__Constraints, dijit._TimePicker.__Constraints]
24        );
25        =====*/
26
27        return declare("dijit.form.TimeTextBox", _DateTimeTextBox, {
28                // summary:
29                //              A validating, serializable, range-bound time text box with a drop down time picker
30
31                baseClass: "dijitTextBox dijitComboBox dijitTimeTextBox",
32                popupClass: _TimePicker,
33                _selector: "time",
34
35/*=====
36                // constraints: dijit.form.TimeTextBox.__Constraints
37                constraints:{},
38=====*/
39
40                // value: Date
41                //              The value of this widget as a JavaScript Date object.  Note that the date portion implies time zone and daylight savings rules.
42                //
43                //              Example:
44                // |    new dijit.form.TimeTextBox({value: stamp.fromISOString("T12:59:59", new Date())})
45                //
46                //              When passed to the parser in markup, must be specified according to locale-independent
47                //              `stamp.fromISOString` format.
48                //
49                //              Example:
50                // |    <input data-dojo-type='dijit.form.TimeTextBox' value='T12:34:00'>
51                value: new Date(""),            // value.toString()="NaN"
52                //FIXME: in markup, you have no control over daylight savings
53
54                _onKey: function(evt){
55                        if(this.disabled || this.readOnly){ return; }
56                        this.inherited(arguments);
57
58                        // If the user has backspaced or typed some numbers, then filter the result list
59                        // by what they typed.  Maybe there's a better way to detect this, like _handleOnChange()?
60                        switch(evt.keyCode){
61                                case keys.ENTER:
62                                case keys.TAB:
63                                case keys.ESCAPE:
64                                case keys.DOWN_ARROW:
65                                case keys.UP_ARROW:
66                                        // these keys have special meaning
67                                        break;
68                                default:
69                                        // setTimeout() because the keystroke hasn't yet appeared in the <input>,
70                                        // so the get('displayedValue') call below won't give the result we want.
71                                        setTimeout(lang.hitch(this, function(){
72                                                // set this.filterString to the filter to apply to the drop down list;
73                                                // it will be used in openDropDown()
74                                                var val = this.get('displayedValue');
75                                                this.filterString = (val && !this.parse(val, this.constraints)) ? val.toLowerCase() : "";
76
77                                                // close the drop down and reopen it, in order to filter the items shown in the list
78                                                // and also since the drop down may need to be repositioned if the number of list items has changed
79                                                // and it's being displayed above the <input>
80                                                if(this._opened){
81                                                        this.closeDropDown();
82                                                }
83                                                this.openDropDown();
84                                        }), 0);
85                        }
86                }
87        });
88});
Note: See TracBrowser for help on using the repository browser.