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