-/*
- Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
-*/
-
-
-if(!dojo._hasResource["dijit._TimePicker"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit._TimePicker"] = true;
-dojo.provide("dijit._TimePicker");
-dojo.require("dijit.form._FormWidget");
-dojo.require("dojo.date.locale");
-
-
-/*=====
-dojo.declare(
- "dijit._TimePicker.__Constraints",
- dojo.date.locale.__FormatOptions,
- {
- // clickableIncrement: String
- // See `dijit._TimePicker.clickableIncrement`
- clickableIncrement: "T00:15:00",
-
- // visibleIncrement: String
- // See `dijit._TimePicker.visibleIncrement`
- visibleIncrement: "T01:00:00",
-
- // visibleRange: String
- // See `dijit._TimePicker.visibleRange`
- visibleRange: "T05:00:00"
- }
-);
-=====*/
-
-dojo.declare("dijit._TimePicker",
- [dijit._Widget, dijit._Templated],
- {
- // summary:
- // A graphical time picker.
- // This widget is used internally by other widgets and is not available
- // as a standalone widget due to lack of accessibility support.
-
- templateString: dojo.cache("dijit", "templates/TimePicker.html", "<div id=\"widget_${id}\" class=\"dijitMenu\"\n ><div dojoAttachPoint=\"upArrow\" class=\"dijitButtonNode dijitUpArrowButton\" dojoAttachEvent=\"onmouseenter:_buttonMouse,onmouseleave:_buttonMouse\"\n\t\t><div class=\"dijitReset dijitInline dijitArrowButtonInner\" role=\"presentation\"> </div\n\t\t><div class=\"dijitArrowButtonChar\">▲</div></div\n ><div dojoAttachPoint=\"timeMenu,focusNode\" dojoAttachEvent=\"onclick:_onOptionSelected,onmouseover,onmouseout\"></div\n ><div dojoAttachPoint=\"downArrow\" class=\"dijitButtonNode dijitDownArrowButton\" dojoAttachEvent=\"onmouseenter:_buttonMouse,onmouseleave:_buttonMouse\"\n\t\t><div class=\"dijitReset dijitInline dijitArrowButtonInner\" role=\"presentation\"> </div\n\t\t><div class=\"dijitArrowButtonChar\">▼</div></div\n></div>\n"),
-
- // baseClass: [protected] String
- // The root className to use for the various states of this widget
- baseClass: "dijitTimePicker",
-
- // clickableIncrement: String
- // ISO-8601 string representing the amount by which
- // every clickable element in the time picker increases.
- // Set in local time, without a time zone.
- // Example: `T00:15:00` creates 15 minute increments
- // Must divide dijit._TimePicker.visibleIncrement evenly
- clickableIncrement: "T00:15:00",
-
- // visibleIncrement: String
- // ISO-8601 string representing the amount by which
- // every element with a visible time in the time picker increases.
- // Set in local time, without a time zone.
- // Example: `T01:00:00` creates text in every 1 hour increment
- visibleIncrement: "T01:00:00",
-
- // visibleRange: String
- // ISO-8601 string representing the range of this TimePicker.
- // The TimePicker will only display times in this range.
- // Example: `T05:00:00` displays 5 hours of options
- visibleRange: "T05:00:00",
-
- // value: String
- // Date to display.
- // Defaults to current time and date.
- // Can be a Date object or an ISO-8601 string.
- // If you specify the GMT time zone (`-01:00`),
- // the time will be converted to the local time in the local time zone.
- // Otherwise, the time is considered to be in the local time zone.
- // If you specify the date and isDate is true, the date is used.
- // Example: if your local time zone is `GMT -05:00`,
- // `T10:00:00` becomes `T10:00:00-05:00` (considered to be local time),
- // `T10:00:00-01:00` becomes `T06:00:00-05:00` (4 hour difference),
- // `T10:00:00Z` becomes `T05:00:00-05:00` (5 hour difference between Zulu and local time)
- // `yyyy-mm-ddThh:mm:ss` is the format to set the date and time
- // Example: `2007-06-01T09:00:00`
- value: new Date(),
-
- _visibleIncrement:2,
- _clickableIncrement:1,
- _totalIncrements:10,
-
- // constraints: dijit._TimePicker.__Constraints
- // Specifies valid range of times (start time, end time)
- constraints:{},
-
-/*=====
- serialize: function(val, options){
- // summary:
- // User overridable function used to convert the attr('value') result to a String
- // val: Date
- // The current value
- // options: Object?
- // tags:
- // protected
- },
-=====*/
- serialize: dojo.date.stamp.toISOString,
-
-/*=====
- // filterString: string
- // The string to filter by
- filterString: "",
-=====*/
-
- setValue: function(/*Date*/ value){
- // summary:
- // Deprecated. Used set('value') instead.
- // tags:
- // deprecated
- dojo.deprecated("dijit._TimePicker:setValue() is deprecated. Use set('value', ...) instead.", "", "2.0");
- this.set('value', value);
- },
-
- _setValueAttr: function(/*Date*/ date){
- // summary:
- // Hook so set('value', ...) works.
- // description:
- // Set the value of the TimePicker.
- // Redraws the TimePicker around the new date.
- // tags:
- // protected
- this._set("value", date);
- this._showText();
- },
-
- _setFilterStringAttr: function(val){
- // summary:
- // Called by TimeTextBox to filter the values shown in my list
- this._set("filterString", val);
- this._showText();
- },
-
- isDisabledDate: function(/*Date*/ dateObject, /*String?*/ locale){
- // summary:
- // May be overridden to disable certain dates in the TimePicker e.g. `isDisabledDate=dojo.date.locale.isWeekend`
- // type:
- // extension
- return false; // Boolean
- },
-
- _getFilteredNodes: function(/*number*/ start, /*number*/ maxNum, /*Boolean*/ before, /*DOMnode*/ lastNode){
- // summary:
- // Returns an array of nodes with the filter applied. At most maxNum nodes
- // will be returned - but fewer may be returned as well. If the
- // before parameter is set to true, then it will return the elements
- // before the given index
- // tags:
- // private
- var
- nodes = [],
- lastValue = lastNode ? lastNode.date : this._refDate,
- n,
- i = start,
- max = this._maxIncrement + Math.abs(i),
- chk = before ? -1 : 1,
- dec = before ? 1 : 0,
- inc = 1 - dec;
- do{
- i = i - dec;
- n = this._createOption(i);
- if(n){
- if((before && n.date > lastValue) || (!before && n.date < lastValue)){
- break; // don't wrap
- }
- nodes[before ? "unshift" : "push"](n);
- lastValue = n.date;
- }
- i = i + inc;
- }while(nodes.length < maxNum && (i*chk) < max);
- return nodes;
- },
-
- _showText: function(){
- // summary:
- // Displays the relevant choices in the drop down list
- // tags:
- // private
- var fromIso = dojo.date.stamp.fromISOString;
- this.timeMenu.innerHTML = "";
- this._clickableIncrementDate=fromIso(this.clickableIncrement);
- this._visibleIncrementDate=fromIso(this.visibleIncrement);
- this._visibleRangeDate=fromIso(this.visibleRange);
- // get the value of the increments and the range in seconds (since 00:00:00) to find out how many divs to create
- var
- sinceMidnight = function(/*Date*/ date){
- return date.getHours() * 60 * 60 + date.getMinutes() * 60 + date.getSeconds();
- },
- clickableIncrementSeconds = sinceMidnight(this._clickableIncrementDate),
- visibleIncrementSeconds = sinceMidnight(this._visibleIncrementDate),
- visibleRangeSeconds = sinceMidnight(this._visibleRangeDate),
-
- // round reference date to previous visible increment
- time = (this.value || this.currentFocus).getTime();
-
- this._refDate = new Date(time - time % (visibleIncrementSeconds*1000));
- this._refDate.setFullYear(1970,0,1); // match parse defaults
-
- // assume clickable increment is the smallest unit
- this._clickableIncrement = 1;
- // divide the visible range by the clickable increment to get the number of divs to create
- // example: 10:00:00/00:15:00 -> display 40 divs
- this._totalIncrements = visibleRangeSeconds / clickableIncrementSeconds;
- // divide the visible increments by the clickable increments to get how often to display the time inline
- // example: 01:00:00/00:15:00 -> display the time every 4 divs
- this._visibleIncrement = visibleIncrementSeconds / clickableIncrementSeconds;
- // divide the number of seconds in a day by the clickable increment in seconds to get the
- // absolute max number of increments.
- this._maxIncrement = (60 * 60 * 24) / clickableIncrementSeconds;
-
- var
- // Find the nodes we should display based on our filter.
- // Limit to 10 nodes displayed as a half-hearted attempt to stop drop down from overlapping <input>.
- after = this._getFilteredNodes(0, Math.min(this._totalIncrements >> 1, 10) - 1),
- before = this._getFilteredNodes(0, Math.min(this._totalIncrements, 10) - after.length, true, after[0]);
- dojo.forEach(before.concat(after), function(n){this.timeMenu.appendChild(n);}, this);
- },
-
- constructor: function(){
- this.constraints = {}; // create instance object
- },
-
- postMixInProperties: function(){
- this.inherited(arguments);
- this._setConstraintsAttr(this.constraints); // this needs to happen now (and later) due to codependency on _set*Attr calls
- },
-
- _setConstraintsAttr: function(/* Object */ constraints){
- // brings in visibleRange, increments, etc.
- dojo.mixin(this, constraints);
-
- // dojo.date.locale needs the lang in the constraints as locale
- if(!constraints.locale){
- constraints.locale = this.lang;
- }
- },
-
- postCreate: function(){
- // assign typematic mouse listeners to the arrow buttons
- this.connect(this.timeMenu, dojo.isIE ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled");
- this._connects.push(dijit.typematic.addMouseListener(this.upArrow, this, "_onArrowUp", 33, 250));
- this._connects.push(dijit.typematic.addMouseListener(this.downArrow, this, "_onArrowDown", 33, 250));
-
- this.inherited(arguments);
- },
-
- _buttonMouse: function(/*Event*/ e){
- // summary:
- // Handler for hover (and unhover) on up/down arrows
- // tags:
- // private
-
- // in non-IE browser the "mouseenter" event will become "mouseover",
- // but in IE it's still "mouseenter"
- dojo.toggleClass(e.currentTarget, e.currentTarget == this.upArrow ? "dijitUpArrowHover" : "dijitDownArrowHover",
- e.type == "mouseenter" || e.type == "mouseover");
- },
-
- _createOption: function(/*Number*/ index){
- // summary:
- // Creates a clickable time option
- // tags:
- // private
- var date = new Date(this._refDate);
- var incrementDate = this._clickableIncrementDate;
- date.setHours(date.getHours() + incrementDate.getHours() * index,
- date.getMinutes() + incrementDate.getMinutes() * index,
- date.getSeconds() + incrementDate.getSeconds() * index);
- if(this.constraints.selector == "time"){
- date.setFullYear(1970,0,1); // make sure each time is for the same date
- }
- var dateString = dojo.date.locale.format(date, this.constraints);
- if(this.filterString && dateString.toLowerCase().indexOf(this.filterString) !== 0){
- // Doesn't match the filter - return null
- return null;
- }
-
- var div = dojo.create("div", {"class": this.baseClass+"Item"});
- div.date = date;
- div.index = index;
- dojo.create('div',{
- "class": this.baseClass + "ItemInner",
- innerHTML: dateString
- }, div);
-
- if(index%this._visibleIncrement<1 && index%this._visibleIncrement>-1){
- dojo.addClass(div, this.baseClass+"Marker");
- }else if(!(index%this._clickableIncrement)){
- dojo.addClass(div, this.baseClass+"Tick");
- }
-
- if(this.isDisabledDate(date)){
- // set disabled
- dojo.addClass(div, this.baseClass+"ItemDisabled");
- }
- if(this.value && !dojo.date.compare(this.value, date, this.constraints.selector)){
- div.selected = true;
- dojo.addClass(div, this.baseClass+"ItemSelected");
- if(dojo.hasClass(div, this.baseClass+"Marker")){
- dojo.addClass(div, this.baseClass+"MarkerSelected");
- }else{
- dojo.addClass(div, this.baseClass+"TickSelected");
- }
-
- // Initially highlight the current value. User can change highlight by up/down arrow keys
- // or mouse movement.
- this._highlightOption(div, true);
- }
- return div;
- },
-
- _onOptionSelected: function(/*Object*/ tgt){
- // summary:
- // Called when user clicks an option in the drop down list
- // tags:
- // private
- var tdate = tgt.target.date || tgt.target.parentNode.date;
- if(!tdate || this.isDisabledDate(tdate)){ return; }
- this._highlighted_option = null;
- this.set('value', tdate);
- this.onChange(tdate);
- },
-
- onChange: function(/*Date*/ time){
- // summary:
- // Notification that a time was selected. It may be the same as the previous value.
- // tags:
- // public
- },
-
- _highlightOption: function(/*node*/ node, /*Boolean*/ highlight){
- // summary:
- // Turns on/off highlight effect on a node based on mouse out/over event
- // tags:
- // private
- if(!node){return;}
- if(highlight){
- if(this._highlighted_option){
- this._highlightOption(this._highlighted_option, false);
- }
- this._highlighted_option = node;
- }else if(this._highlighted_option !== node){
- return;
- }else{
- this._highlighted_option = null;
- }
- dojo.toggleClass(node, this.baseClass+"ItemHover", highlight);
- if(dojo.hasClass(node, this.baseClass+"Marker")){
- dojo.toggleClass(node, this.baseClass+"MarkerHover", highlight);
- }else{
- dojo.toggleClass(node, this.baseClass+"TickHover", highlight);
- }
- },
-
- onmouseover: function(/*Event*/ e){
- // summary:
- // Handler for onmouseover event
- // tags:
- // private
- this._keyboardSelected = null;
- var tgr = (e.target.parentNode === this.timeMenu) ? e.target : e.target.parentNode;
- // if we aren't targeting an item, then we return
- if(!dojo.hasClass(tgr, this.baseClass+"Item")){return;}
- this._highlightOption(tgr, true);
- },
-
- onmouseout: function(/*Event*/ e){
- // summary:
- // Handler for onmouseout event
- // tags:
- // private
- this._keyboardSelected = null;
- var tgr = (e.target.parentNode === this.timeMenu) ? e.target : e.target.parentNode;
- this._highlightOption(tgr, false);
- },
-
- _mouseWheeled: function(/*Event*/ e){
- // summary:
- // Handle the mouse wheel events
- // tags:
- // private
- this._keyboardSelected = null;
- dojo.stopEvent(e);
- // we're not _measuring_ the scroll amount, just direction
- var scrollAmount = (dojo.isIE ? e.wheelDelta : -e.detail);
- this[(scrollAmount>0 ? "_onArrowUp" : "_onArrowDown")](); // yes, we're making a new dom node every time you mousewheel, or click
- },
-
- _onArrowUp: function(count){
- // summary:
- // Handler for up arrow key.
- // description:
- // Removes the bottom time and add one to the top
- // tags:
- // private
- if(typeof count == "number" && count == -1){ return; } // typematic end
- if(!this.timeMenu.childNodes.length){ return; }
- var index = this.timeMenu.childNodes[0].index;
- var divs = this._getFilteredNodes(index, 1, true, this.timeMenu.childNodes[0]);
- if(divs.length){
- this.timeMenu.removeChild(this.timeMenu.childNodes[this.timeMenu.childNodes.length - 1]);
- this.timeMenu.insertBefore(divs[0], this.timeMenu.childNodes[0]);
- }
- },
-
- _onArrowDown: function(count){
- // summary:
- // Handler for up arrow key.
- // description:
- // Remove the top time and add one to the bottom
- // tags:
- // private
- if(typeof count == "number" && count == -1){ return; } // typematic end
- if(!this.timeMenu.childNodes.length){ return; }
- var index = this.timeMenu.childNodes[this.timeMenu.childNodes.length - 1].index + 1;
- var divs = this._getFilteredNodes(index, 1, false, this.timeMenu.childNodes[this.timeMenu.childNodes.length - 1]);
- if(divs.length){
- this.timeMenu.removeChild(this.timeMenu.childNodes[0]);
- this.timeMenu.appendChild(divs[0]);
- }
- },
-
- handleKey: function(/*Event*/ e){
- // summary:
- // Called from `dijit.form._DateTimeTextBox` to pass a keypress event
- // from the `dijit.form.TimeTextBox` to be handled in this widget
- // tags:
- // protected
- var dk = dojo.keys;
- if(e.charOrCode == dk.DOWN_ARROW || e.charOrCode == dk.UP_ARROW){
- dojo.stopEvent(e);
- // Figure out which option to highlight now and then highlight it
- if(this._highlighted_option && !this._highlighted_option.parentNode){
- this._highlighted_option = null;
- }
- var timeMenu = this.timeMenu,
- tgt = this._highlighted_option || dojo.query("." + this.baseClass + "ItemSelected", timeMenu)[0];
- if(!tgt){
- tgt = timeMenu.childNodes[0];
- }else if(timeMenu.childNodes.length){
- if(e.charOrCode == dk.DOWN_ARROW && !tgt.nextSibling){
- this._onArrowDown();
- }else if(e.charOrCode == dk.UP_ARROW && !tgt.previousSibling){
- this._onArrowUp();
- }
- if(e.charOrCode == dk.DOWN_ARROW){
- tgt = tgt.nextSibling;
- }else{
- tgt = tgt.previousSibling;
- }
- }
- this._highlightOption(tgt, true);
- this._keyboardSelected = tgt;
- return false;
- }else if(e.charOrCode == dk.ENTER || e.charOrCode === dk.TAB){
- // mouse hover followed by TAB is NO selection
- if(!this._keyboardSelected && e.charOrCode === dk.TAB){
- return true; // true means don't call stopEvent()
- }
-
- // Accept the currently-highlighted option as the value
- if(this._highlighted_option){
- this._onOptionSelected({target: this._highlighted_option});
- }
-
- // Call stopEvent() for ENTER key so that form doesn't submit,
- // but not for TAB, so that TAB does switch focus
- return e.charOrCode === dk.TAB;
- }
- }
- }
-);
-
-}
+//>>built
+define("dijit/_TimePicker",["dojo/_base/array","dojo/date","dojo/date/locale","dojo/date/stamp","dojo/_base/declare","dojo/dom-class","dojo/dom-construct","dojo/_base/kernel","dojo/keys","dojo/_base/lang","dojo/sniff","dojo/query","dojo/mouse","dojo/on","./_WidgetBase","./form/_ListMouseMixin"],function(_1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c,_d,on,_e,_f){var _10=_5("dijit._TimePicker",[_e,_f],{baseClass:"dijitTimePicker",pickerMin:"T00:00:00",pickerMax:"T23:59:59",clickableIncrement:"T00:15:00",visibleIncrement:"T01:00:00",value:new Date(),_visibleIncrement:2,_clickableIncrement:1,_totalIncrements:10,constraints:{},serialize:_4.toISOString,buildRendering:function(){this.inherited(arguments);this.containerNode=this.domNode;this.timeMenu=this.domNode;},setValue:function(_11){_8.deprecated("dijit._TimePicker:setValue() is deprecated. Use set('value', ...) instead.","","2.0");this.set("value",_11);},_setValueAttr:function(_12){this._set("value",_12);this._showText();},_setFilterStringAttr:function(val){this._set("filterString",val);this._showText();},isDisabledDate:function(){return false;},_getFilteredNodes:function(_13,_14,_15,_16){var _17=this.ownerDocument.createDocumentFragment();for(var i=0;i<this._maxIncrement;i++){var n=this._createOption(i);if(n){_17.appendChild(n);}}return _17;},_showText:function(){var _18=_4.fromISOString;this.domNode.innerHTML="";this._clickableIncrementDate=_18(this.clickableIncrement);this._visibleIncrementDate=_18(this.visibleIncrement);var _19=function(_1a){return _1a.getHours()*60*60+_1a.getMinutes()*60+_1a.getSeconds();},_1b=_19(this._clickableIncrementDate),_1c=_19(this._visibleIncrementDate),_1d=(this.value||this.currentFocus).getTime();this._refDate=_18(this.pickerMin);this._refDate.setFullYear(1970,0,1);this._clickableIncrement=1;this._visibleIncrement=_1c/_1b;var _1e=_18(this.pickerMax);_1e.setFullYear(1970,0,1);var _1f=(_1e.getTime()-this._refDate.getTime())*0.001;this._maxIncrement=Math.ceil((_1f+1)/_1b);var _20=this._getFilteredNodes();if(!_20.firstChild&&this.filterString){this.filterString="";this._showText();}else{this.domNode.appendChild(_20);}},constructor:function(){this.constraints={};},postMixInProperties:function(){this.inherited(arguments);this._setConstraintsAttr(this.constraints);},_setConstraintsAttr:function(_21){for(var key in {clickableIncrement:1,visibleIncrement:1,pickerMin:1,pickerMax:1}){if(key in _21){this[key]=_21[key];}}if(!_21.locale){_21.locale=this.lang;}},_createOption:function(_22){var _23=new Date(this._refDate);var _24=this._clickableIncrementDate;_23.setHours(_23.getHours()+_24.getHours()*_22,_23.getMinutes()+_24.getMinutes()*_22,_23.getSeconds()+_24.getSeconds()*_22);if(this.constraints.selector=="time"){_23.setFullYear(1970,0,1);}var _25=_3.format(_23,this.constraints);if(this.filterString&&_25.toLowerCase().indexOf(this.filterString)!==0){return null;}var div=this.ownerDocument.createElement("div");div.className=this.baseClass+"Item";div.date=_23;div.idx=_22;_7.create("div",{"class":this.baseClass+"ItemInner",innerHTML:_25},div);var _26=_22%this._visibleIncrement<1&&_22%this._visibleIncrement>-1,_27=!_26&&!(_22%this._clickableIncrement);if(_26){div.className+=" "+this.baseClass+"Marker";}else{if(_27){div.className+=" "+this.baseClass+"Tick";}}if(this.isDisabledDate(_23)){div.className+=" "+this.baseClass+"ItemDisabled";}if(this.value&&!_2.compare(this.value,_23,this.constraints.selector)){div.selected=true;div.className+=" "+this.baseClass+"ItemSelected";this._selectedDiv=div;if(_26){div.className+=" "+this.baseClass+"MarkerSelected";}else{if(_27){div.className+=" "+this.baseClass+"TickSelected";}}this._highlightOption(div,true);}return div;},onOpen:function(){this.inherited(arguments);this.set("selected",this._selectedDiv);},_onOptionSelected:function(tgt,_28){var _29=tgt.target.date||tgt.target.parentNode.date;if(!_29||this.isDisabledDate(_29)){return;}this._set("value",_29);this.emit("input");if(_28){this._highlighted_option=null;this.set("value",_29);this.onChange(_29);}},onChange:function(){},_highlightOption:function(_2a,_2b){if(!_2a){return;}if(_2b){if(this._highlighted_option){this._highlightOption(this._highlighted_option,false);}this._highlighted_option=_2a;}else{if(this._highlighted_option!==_2a){return;}else{this._highlighted_option=null;}}_6.toggle(_2a,this.baseClass+"ItemHover",_2b);if(_6.contains(_2a,this.baseClass+"Marker")){_6.toggle(_2a,this.baseClass+"MarkerHover",_2b);}else{_6.toggle(_2a,this.baseClass+"TickHover",_2b);}},handleKey:function(e){if(e.keyCode==_9.DOWN_ARROW){this.selectNextNode();this._onOptionSelected({target:this._highlighted_option},false);e.stopPropagation();e.preventDefault();return false;}else{if(e.keyCode==_9.UP_ARROW){this.selectPreviousNode();this._onOptionSelected({target:this._highlighted_option},false);e.stopPropagation();e.preventDefault();return false;}else{if(e.keyCode==_9.ENTER||e.keyCode===_9.TAB){if(!this._keyboardSelected&&e.keyCode===_9.TAB){return true;}if(this._highlighted_option){this._onOptionSelected({target:this._highlighted_option},true);}return e.keyCode===_9.TAB;}}}return undefined;},onHover:function(_2c){this._highlightOption(_2c,true);},onUnhover:function(_2d){this._highlightOption(_2d,false);},onSelect:function(_2e){this._highlightOption(_2e,true);},onDeselect:function(_2f){this._highlightOption(_2f,false);},onClick:function(_30){this._onOptionSelected({target:_30},true);}});return _10;});
\ No newline at end of file