diff options
author | Andrew Dolgov <[email protected]> | 2012-08-14 18:59:10 +0400 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2012-08-14 18:59:18 +0400 |
commit | 1354d17270961fff662d40f90521223f8fd0d73b (patch) | |
tree | e9266be71587e47c800303446e968a6d3565e2cf /lib/dijit/Calendar.js.uncompressed.js | |
parent | d04f8c826f5283765f52cf6b98b42a1ed8f2d6bc (diff) |
update dojo to 1.7.3
Diffstat (limited to 'lib/dijit/Calendar.js.uncompressed.js')
-rw-r--r-- | lib/dijit/Calendar.js.uncompressed.js | 317 |
1 files changed, 317 insertions, 0 deletions
diff --git a/lib/dijit/Calendar.js.uncompressed.js b/lib/dijit/Calendar.js.uncompressed.js new file mode 100644 index 000000000..fd383b439 --- /dev/null +++ b/lib/dijit/Calendar.js.uncompressed.js @@ -0,0 +1,317 @@ +define("dijit/Calendar", [ + "dojo/_base/array", // array.map + "dojo/date", + "dojo/date/locale", + "dojo/_base/declare", // declare + "dojo/dom-attr", // domAttr.get + "dojo/dom-class", // domClass.add domClass.contains domClass.remove domClass.toggle + "dojo/_base/event", // event.stop + "dojo/_base/kernel", // kernel.deprecated + "dojo/keys", // keys + "dojo/_base/lang", // lang.hitch + "dojo/_base/sniff", // has("ie") + "./CalendarLite", + "./_Widget", + "./_CssStateMixin", + "./_TemplatedMixin", + "./form/DropDownButton", + "./hccss" // not used directly, but sets CSS class on <body> +], function(array, date, local, declare, domAttr, domClass, event, kernel, keys, lang, has, + CalendarLite, _Widget, _CssStateMixin, _TemplatedMixin, DropDownButton){ + +/*===== + var CalendarLite = dijit.CalendarLite; + var _CssStateMixin = dijit._CssStateMixin; + var _Widget = dijit._Widget; + var _TemplatedMixin = dijit._TemplatedMixin; + var DropDownButton = dijit.form.DropDownButton; +=====*/ + + // module: + // dijit/Calendar + // summary: + // A simple GUI for choosing a date in the context of a monthly calendar. + + var Calendar = declare("dijit.Calendar", + [CalendarLite, _Widget, _CssStateMixin], // _Widget for deprecated methods like setAttribute() + { + // summary: + // A simple GUI for choosing a date in the context of a monthly calendar. + // + // description: + // See CalendarLite for general description. Calendar extends CalendarLite, adding: + // - month drop down list + // - keyboard navigation + // - CSS classes for hover/mousepress on date, month, and year nodes + // - support of deprecated methods (will be removed in 2.0) + + // Set node classes for various mouse events, see dijit._CssStateMixin for more details + cssStateNodes: { + "decrementMonth": "dijitCalendarArrow", + "incrementMonth": "dijitCalendarArrow", + "previousYearLabelNode": "dijitCalendarPreviousYear", + "nextYearLabelNode": "dijitCalendarNextYear" + }, + + setValue: function(/*Date*/ value){ + // summary: + // Deprecated. Use set('value', ...) instead. + // tags: + // deprecated + kernel.deprecated("dijit.Calendar:setValue() is deprecated. Use set('value', ...) instead.", "", "2.0"); + this.set('value', value); + }, + + _createMonthWidget: function(){ + // summary: + // Creates the drop down button that displays the current month and lets user pick a new one + + return new Calendar._MonthDropDownButton({ + id: this.id + "_mddb", + tabIndex: -1, + onMonthSelect: lang.hitch(this, "_onMonthSelect"), + lang: this.lang, + dateLocaleModule: this.dateLocaleModule + }, this.monthNode); + }, + + buildRendering: function(){ + this.inherited(arguments); + + // Events specific to Calendar, not used in CalendarLite + this.connect(this.domNode, "onkeypress", "_onKeyPress"); + this.connect(this.dateRowsNode, "onmouseover", "_onDayMouseOver"); + this.connect(this.dateRowsNode, "onmouseout", "_onDayMouseOut"); + this.connect(this.dateRowsNode, "onmousedown", "_onDayMouseDown"); + this.connect(this.dateRowsNode, "onmouseup", "_onDayMouseUp"); + }, + + _onMonthSelect: function(/*Number*/ newMonth){ + // summary: + // Handler for when user selects a month from the drop down list + // tags: + // protected + + // move to selected month, bounding by the number of days in the month + // (ex: dec 31 --> jan 28, not jan 31) + this._setCurrentFocusAttr(this.dateFuncObj.add(this.currentFocus, "month", + newMonth - this.currentFocus.getMonth())); + }, + + _onDayMouseOver: function(/*Event*/ evt){ + // summary: + // Handler for mouse over events on days, sets hovered style + // tags: + // protected + + // event can occur on <td> or the <span> inside the td, + // set node to the <td>. + var node = + domClass.contains(evt.target, "dijitCalendarDateLabel") ? + evt.target.parentNode : + evt.target; + + if(node && ( + (node.dijitDateValue && !domClass.contains(node, "dijitCalendarDisabledDate")) + || node == this.previousYearLabelNode || node == this.nextYearLabelNode + )){ + domClass.add(node, "dijitCalendarHoveredDate"); + this._currentNode = node; + } + }, + + _onDayMouseOut: function(/*Event*/ evt){ + // summary: + // Handler for mouse out events on days, clears hovered style + // tags: + // protected + + if(!this._currentNode){ return; } + + // if mouse out occurs moving from <td> to <span> inside <td>, ignore it + if(evt.relatedTarget && evt.relatedTarget.parentNode == this._currentNode){ return; } + var cls = "dijitCalendarHoveredDate"; + if(domClass.contains(this._currentNode, "dijitCalendarActiveDate")){ + cls += " dijitCalendarActiveDate"; + } + domClass.remove(this._currentNode, cls); + this._currentNode = null; + }, + + _onDayMouseDown: function(/*Event*/ evt){ + var node = evt.target.parentNode; + if(node && node.dijitDateValue && !domClass.contains(node, "dijitCalendarDisabledDate")){ + domClass.add(node, "dijitCalendarActiveDate"); + this._currentNode = node; + } + }, + + _onDayMouseUp: function(/*Event*/ evt){ + var node = evt.target.parentNode; + if(node && node.dijitDateValue){ + domClass.remove(node, "dijitCalendarActiveDate"); + } + }, + + handleKey: function(/*Event*/ evt){ + // summary: + // Provides keyboard navigation of calendar. + // description: + // Called from _onKeyPress() to handle keypress on a stand alone Calendar, + // and also from `dijit.form._DateTimeTextBox` to pass a keypress event + // from the `dijit.form.DateTextBox` to be handled in this widget + // returns: + // False if the key was recognized as a navigation key, + // to indicate that the event was handled by Calendar and shouldn't be propogated + // tags: + // protected + var increment = -1, + interval, + newValue = this.currentFocus; + switch(evt.charOrCode){ + case keys.RIGHT_ARROW: + increment = 1; + //fallthrough... + case keys.LEFT_ARROW: + interval = "day"; + if(!this.isLeftToRight()){ increment *= -1; } + break; + case keys.DOWN_ARROW: + increment = 1; + //fallthrough... + case keys.UP_ARROW: + interval = "week"; + break; + case keys.PAGE_DOWN: + increment = 1; + //fallthrough... + case keys.PAGE_UP: + interval = evt.ctrlKey || evt.altKey ? "year" : "month"; + break; + case keys.END: + // go to the next month + newValue = this.dateFuncObj.add(newValue, "month", 1); + // subtract a day from the result when we're done + interval = "day"; + //fallthrough... + case keys.HOME: + newValue = new this.dateClassObj(newValue); + newValue.setDate(1); + break; + case keys.ENTER: + case " ": + this.set("value", this.currentFocus); + break; + default: + return true; + } + + if(interval){ + newValue = this.dateFuncObj.add(newValue, interval, increment); + } + + this._setCurrentFocusAttr(newValue); + + return false; + }, + + _onKeyPress: function(/*Event*/ evt){ + // summary: + // For handling keypress events on a stand alone calendar + if(!this.handleKey(evt)){ + event.stop(evt); + } + }, + + onValueSelected: function(/*Date*/ /*===== date =====*/){ + // summary: + // Deprecated. Notification that a date cell was selected. It may be the same as the previous value. + // description: + // Formerly used by `dijit.form._DateTimeTextBox` (and thus `dijit.form.DateTextBox`) + // to get notification when the user has clicked a date. Now onExecute() (above) is used. + // tags: + // protected + }, + + onChange: function(value){ + this.onValueSelected(value); // remove in 2.0 + }, + + getClassForDate: function(/*===== dateObject, locale =====*/){ + // summary: + // May be overridden to return CSS classes to associate with the date entry for the given dateObject, + // for example to indicate a holiday in specified locale. + // dateObject: Date + // locale: String? + // tags: + // extension + +/*===== + return ""; // String +=====*/ + } + }); + + Calendar._MonthDropDownButton = declare("dijit.Calendar._MonthDropDownButton", DropDownButton, { + // summary: + // DropDownButton for the current month. Displays name of current month + // and a list of month names in the drop down + + onMonthSelect: function(){ }, + + postCreate: function(){ + this.inherited(arguments); + this.dropDown = new Calendar._MonthDropDown({ + id: this.id + "_mdd", //do not change this id because it is referenced in the template + onChange: this.onMonthSelect + }); + }, + _setMonthAttr: function(month){ + // summary: + // Set the current month to display as a label + var monthNames = this.dateLocaleModule.getNames('months', 'wide', 'standAlone', this.lang, month); + this.dropDown.set("months", monthNames); + + // Set name of current month and also fill in spacer element with all the month names + // (invisible) so that the maximum width will affect layout. But not on IE6 because then + // the center <TH> overlaps the right <TH> (due to a browser bug). + this.containerNode.innerHTML = + (has("ie") == 6 ? "" : "<div class='dijitSpacer'>" + this.dropDown.domNode.innerHTML + "</div>") + + "<div class='dijitCalendarMonthLabel dijitCalendarCurrentMonthLabel'>" + monthNames[month.getMonth()] + "</div>"; + } + }); + + Calendar._MonthDropDown = declare("dijit.Calendar._MonthDropDown", [_Widget, _TemplatedMixin], { + // summary: + // The list-of-months drop down from the MonthDropDownButton + + // months: String[] + // List of names of months, possibly w/some undefined entries for Hebrew leap months + // (ex: ["January", "February", undefined, "April", ...]) + months: [], + + templateString: "<div class='dijitCalendarMonthMenu dijitMenu' " + + "data-dojo-attach-event='onclick:_onClick,onmouseover:_onMenuHover,onmouseout:_onMenuHover'></div>", + + _setMonthsAttr: function(/*String[]*/ months){ + this.domNode.innerHTML = array.map(months, function(month, idx){ + return month ? "<div class='dijitCalendarMonthLabel' month='" + idx +"'>" + month + "</div>" : ""; + }).join(""); + }, + + _onClick: function(/*Event*/ evt){ + this.onChange(domAttr.get(evt.target, "month")); + }, + + onChange: function(/*Number*/ /*===== month =====*/){ + // summary: + // Callback when month is selected from drop down + }, + + _onMenuHover: function(evt){ + domClass.toggle(evt.target, "dijitCalendarMonthLabelHover", evt.type == "mouseover"); + } + }); + + return Calendar; +}); |