]> git.wh0rd.org - tt-rss.git/blobdiff - lib/dijit/Calendar.js
update dojo to 1.7.3
[tt-rss.git] / lib / dijit / Calendar.js
index b092ed79742e1b660442fa1c0522263aadebeaa1..9c86805d9cc845f10411f6daedfa7727e9f46361 100644 (file)
@@ -1,609 +1,2 @@
-/*
-       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.Calendar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
-dojo._hasResource["dijit.Calendar"] = true;
-dojo.provide("dijit.Calendar");
-dojo.require("dojo.cldr.supplemental");
-dojo.require("dojo.date");
-dojo.require("dojo.date.locale");
-dojo.require("dijit._Widget");
-dojo.require("dijit._Templated");
-dojo.require("dijit._CssStateMixin");
-dojo.require("dijit.form.DropDownButton");
-
-
-dojo.declare(
-       "dijit.Calendar",
-       [dijit._Widget, dijit._Templated, dijit._CssStateMixin],
-       {
-               // summary:
-               //              A simple GUI for choosing a date in the context of a monthly calendar.
-               //
-               // description:
-               //              A simple GUI for choosing a date in the context of a monthly calendar.
-               //              This widget can't be used in a form because it doesn't serialize the date to an
-               //              `<input>` field.  For a form element, use dijit.form.DateTextBox instead.
-               //
-               //              Note that the parser takes all dates attributes passed in the
-               //              [RFC 3339 format](http://www.faqs.org/rfcs/rfc3339.html), e.g. `2005-06-30T08:05:00-07:00`
-               //              so that they are serializable and locale-independent.
-               //
-               // example:
-               //      |       var calendar = new dijit.Calendar({}, dojo.byId("calendarNode"));
-               //
-               // example:
-               //      |       <div dojoType="dijit.Calendar"></div>
-
-               templateString: dojo.cache("dijit", "templates/Calendar.html", "<table cellspacing=\"0\" cellpadding=\"0\" class=\"dijitCalendarContainer\" role=\"grid\" dojoAttachEvent=\"onkeypress: _onKeyPress\" aria-labelledby=\"${id}_year\">\n\t<thead>\n\t\t<tr class=\"dijitReset dijitCalendarMonthContainer\" valign=\"top\">\n\t\t\t<th class='dijitReset dijitCalendarArrow' dojoAttachPoint=\"decrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarDecrease\" role=\"presentation\"/>\n\t\t\t\t<span dojoAttachPoint=\"decreaseArrowNode\" class=\"dijitA11ySideArrow\">-</span>\n\t\t\t</th>\n\t\t\t<th class='dijitReset' colspan=\"5\">\n\t\t\t\t<div dojoType=\"dijit.form.DropDownButton\" dojoAttachPoint=\"monthDropDownButton\"\n\t\t\t\t\tid=\"${id}_mddb\" tabIndex=\"-1\">\n\t\t\t\t</div>\n\t\t\t</th>\n\t\t\t<th class='dijitReset dijitCalendarArrow' dojoAttachPoint=\"incrementMonth\">\n\t\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitCalendarIncrementControl dijitCalendarIncrease\" role=\"presentation\"/>\n\t\t\t\t<span dojoAttachPoint=\"increaseArrowNode\" class=\"dijitA11ySideArrow\">+</span>\n\t\t\t</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th class=\"dijitReset dijitCalendarDayLabelTemplate\" role=\"columnheader\"><span class=\"dijitCalendarDayLabel\"></span></th>\n\t\t</tr>\n\t</thead>\n\t<tbody dojoAttachEvent=\"onclick: _onDayClick, onmouseover: _onDayMouseOver, onmouseout: _onDayMouseOut, onmousedown: _onDayMouseDown, onmouseup: _onDayMouseUp\" class=\"dijitReset dijitCalendarBodyContainer\">\n\t\t<tr class=\"dijitReset dijitCalendarWeekTemplate\" role=\"row\">\n\t\t\t<td class=\"dijitReset dijitCalendarDateTemplate\" role=\"gridcell\"><span class=\"dijitCalendarDateLabel\"></span></td>\n\t\t</tr>\n\t</tbody>\n\t<tfoot class=\"dijitReset dijitCalendarYearContainer\">\n\t\t<tr>\n\t\t\t<td class='dijitReset' valign=\"top\" colspan=\"7\">\n\t\t\t\t<h3 class=\"dijitCalendarYearLabel\">\n\t\t\t\t\t<span dojoAttachPoint=\"previousYearLabelNode\" class=\"dijitInline dijitCalendarPreviousYear\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"currentYearLabelNode\" class=\"dijitInline dijitCalendarSelectedYear\" id=\"${id}_year\"></span>\n\t\t\t\t\t<span dojoAttachPoint=\"nextYearLabelNode\" class=\"dijitInline dijitCalendarNextYear\"></span>\n\t\t\t\t</h3>\n\t\t\t</td>\n\t\t</tr>\n\t</tfoot>\n</table>\n"),
-               widgetsInTemplate: true,
-
-               // value: Date
-               //              The currently selected Date, initially set to invalid date to indicate no selection.
-               value: new Date(""),
-               // TODO: for 2.0 make this a string (ISO format) rather than a Date
-
-               // datePackage: String
-               //              JavaScript namespace to find Calendar routines.  Uses Gregorian Calendar routines
-               //              at dojo.date by default.
-               datePackage: "dojo.date",
-
-               // dayWidth: String
-               //              How to represent the days of the week in the calendar header. See dojo.date.locale
-               dayWidth: "narrow",
-
-               // tabIndex: Integer
-               //              Order fields are traversed when user hits the tab key
-               tabIndex: "0",
-               
-               // currentFocus: Date
-               //              Date object containing the currently focused date, or the date which would be focused
-               //              if the calendar itself was focused.   Also indicates which year and month to display,
-               //              i.e. the current "page" the calendar is on.
-               currentFocus: new Date(),
-
-               baseClass:"dijitCalendar",
-
-               // Set node classes for various mouse events, see dijit._CssStateMixin for more details
-               cssStateNodes: {
-                       "decrementMonth": "dijitCalendarArrow",
-                       "incrementMonth": "dijitCalendarArrow",
-                       "previousYearLabelNode": "dijitCalendarPreviousYear",
-                       "nextYearLabelNode": "dijitCalendarNextYear"
-               },
-
-               _isValidDate: function(/*Date*/ value){
-                       // summary:
-                       //              Runs various tests on the value, checking that it's a valid date, rather
-                       //              than blank or NaN.
-                       // tags:
-                       //              private
-                       return value && !isNaN(value) && typeof value == "object" &&
-                               value.toString() != this.constructor.prototype.value.toString();
-               },
-
-               setValue: function(/*Date*/ value){
-                       // summary:
-                       //      Deprecated.   Use set('value', ...) instead.
-                       // tags:
-                       //      deprecated
-                       dojo.deprecated("dijit.Calendar:setValue() is deprecated.  Use set('value', ...) instead.", "", "2.0");
-                       this.set('value', value);
-               },
-
-               _getValueAttr: function(){
-                       // summary:
-                       //              Support get('value')
-
-                       // this.value is set to 1AM, but return midnight, local time for back-compat
-                       var value = new this.dateClassObj(this.value);
-                       value.setHours(0, 0, 0, 0);
-
-                       // If daylight savings pushes midnight to the previous date, fix the Date
-                       // object to point at 1am so it will represent the correct day. See #9366
-                       if(value.getDate() < this.value.getDate()){
-                               value = this.dateFuncObj.add(value, "hour", 1);
-                       }
-                       return value;
-               },
-
-               _setValueAttr: function(/*Date|Number*/ value, /*Boolean*/ priorityChange){
-                       // summary:
-                       //              Support set("value", ...)
-                       // description:
-                       //              Set the current date and update the UI.  If the date is disabled, the value will
-                       //              not change, but the display will change to the corresponding month.
-                       // value:
-                       //              Either a Date or the number of seconds since 1970.
-                       // tags:
-                       //      protected
-                       if(value){
-                               // convert from Number to Date, or make copy of Date object so that setHours() call below
-                               // doesn't affect original value
-                               value = new this.dateClassObj(value);
-                       }
-                       if(this._isValidDate(value)){
-                               if(!this._isValidDate(this.value) || this.dateFuncObj.compare(value, this.value)){
-                                       value.setHours(1, 0, 0, 0); // round to nearest day (1am to avoid issues when DST shift occurs at midnight, see #8521, #9366)
-       
-                                       if(!this.isDisabledDate(value, this.lang)){
-                                               this._set("value", value);
-               
-                                               // Set focus cell to the new value.   Arguably this should only happen when there isn't a current
-                                               // focus point.   This will also repopulate the grid, showing the new selected value (and possibly
-                                               // new month/year).
-                                               this.set("currentFocus", value);
-       
-                                               if(priorityChange || typeof priorityChange == "undefined"){
-                                                       this.onChange(this.get('value'));
-                                                       this.onValueSelected(this.get('value'));        // remove in 2.0
-                                               }
-                                       }
-                               }
-                       }else{
-                               // clear value, and repopulate grid (to deselect the previously selected day) without changing currentFocus
-                               this._set("value", null);
-                               this.set("currentFocus", this.currentFocus);
-                       }
-               },
-
-               _setText: function(node, text){
-                       // summary:
-                       //              This just sets the content of node to the specified text.
-                       //              Can't do "node.innerHTML=text" because of an IE bug w/tables, see #3434.
-                       // tags:
-                       //      private
-                       while(node.firstChild){
-                               node.removeChild(node.firstChild);
-                       }
-                       node.appendChild(dojo.doc.createTextNode(text));
-               },
-
-               _populateGrid: function(){
-                       // summary:
-                       //      Fills in the calendar grid with each day (1-31)
-                       // tags:
-                       //      private
-
-                       var month = new this.dateClassObj(this.currentFocus);
-                       month.setDate(1);
-
-                       var firstDay = month.getDay(),
-                               daysInMonth = this.dateFuncObj.getDaysInMonth(month),
-                               daysInPreviousMonth = this.dateFuncObj.getDaysInMonth(this.dateFuncObj.add(month, "month", -1)),
-                               today = new this.dateClassObj(),
-                               dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
-                       if(dayOffset > firstDay){ dayOffset -= 7; }
-
-                       // Iterate through dates in the calendar and fill in date numbers and style info
-                       dojo.query(".dijitCalendarDateTemplate", this.domNode).forEach(function(template, i){
-                               i += dayOffset;
-                               var date = new this.dateClassObj(month),
-                                       number, clazz = "dijitCalendar", adj = 0;
-
-                               if(i < firstDay){
-                                       number = daysInPreviousMonth - firstDay + i + 1;
-                                       adj = -1;
-                                       clazz += "Previous";
-                               }else if(i >= (firstDay + daysInMonth)){
-                                       number = i - firstDay - daysInMonth + 1;
-                                       adj = 1;
-                                       clazz += "Next";
-                               }else{
-                                       number = i - firstDay + 1;
-                                       clazz += "Current";
-                               }
-
-                               if(adj){
-                                       date = this.dateFuncObj.add(date, "month", adj);
-                               }
-                               date.setDate(number);
-
-                               if(!this.dateFuncObj.compare(date, today, "date")){
-                                       clazz = "dijitCalendarCurrentDate " + clazz;
-                               }
-
-                               if(this._isSelectedDate(date, this.lang)){
-                                       clazz = "dijitCalendarSelectedDate " + clazz;
-                               }
-
-                               if(this.isDisabledDate(date, this.lang)){
-                                       clazz = "dijitCalendarDisabledDate " + clazz;
-                               }
-
-                               var clazz2 = this.getClassForDate(date, this.lang);
-                               if(clazz2){
-                                       clazz = clazz2 + " " + clazz;
-                               }
-
-                               template.className = clazz + "Month dijitCalendarDateTemplate";
-                               template.dijitDateValue = date.valueOf();                               // original code
-                               dojo.attr(template, "dijitDateValue", date.valueOf());  // so I can dojo.query() it
-                               var label = dojo.query(".dijitCalendarDateLabel", template)[0],
-                                       text = date.getDateLocalized ? date.getDateLocalized(this.lang) : date.getDate();
-                               this._setText(label, text);
-                       }, this);
-
-                       // Repopulate month drop down list based on current year.
-                       // Need to do this to hide leap months in Hebrew calendar.
-                       var monthNames = this.dateLocaleModule.getNames('months', 'wide', 'standAlone', this.lang, month);
-                       this.monthDropDownButton.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.monthDropDownButton.containerNode.innerHTML =
-                               (dojo.isIE == 6 ? "" : "<div class='dijitSpacer'>" + this.monthDropDownButton.dropDown.domNode.innerHTML + "</div>") +
-                               "<div class='dijitCalendarMonthLabel dijitCalendarCurrentMonthLabel'>" +  monthNames[month.getMonth()] + "</div>";
-
-                       // Fill in localized prev/current/next years
-                       var y = month.getFullYear() - 1;
-                       var d = new this.dateClassObj();
-                       dojo.forEach(["previous", "current", "next"], function(name){
-                               d.setFullYear(y++);
-                               this._setText(this[name+"YearLabelNode"],
-                                       this.dateLocaleModule.format(d, {selector:'year', locale:this.lang}));
-                       }, this);
-               },
-
-               goToToday: function(){
-                       // summary:
-                       //      Sets calendar's value to today's date
-                       this.set('value', new this.dateClassObj());
-               },
-
-               constructor: function(/*Object*/args){
-                       var dateClass = (args.datePackage && (args.datePackage != "dojo.date"))? args.datePackage + ".Date" : "Date";
-                       this.dateClassObj = dojo.getObject(dateClass, false);
-                       this.datePackage = args.datePackage || this.datePackage;
-                       this.dateFuncObj = dojo.getObject(this.datePackage, false);
-                       this.dateLocaleModule = dojo.getObject(this.datePackage + ".locale", false);
-               },
-
-               postMixInProperties: function(){
-                       // Parser.instantiate sometimes passes in NaN for IE.  Use default value in prototype instead.
-                       // TODO: remove this for 2.0 (thanks to #11511)
-                       if(isNaN(this.value)){ delete this.value; }
-
-                       this.inherited(arguments);
-               },
-
-               buildRendering: function(){
-                       this.inherited(arguments);
-                       dojo.setSelectable(this.domNode, false);
-
-                       var cloneClass = dojo.hitch(this, function(clazz, n){
-                               var template = dojo.query(clazz, this.domNode)[0];
-                               for(var i=0; i<n; i++){
-                                       template.parentNode.appendChild(template.cloneNode(true));
-                               }
-                       });
-
-                       // clone the day label and calendar day templates 6 times to make 7 columns
-                       cloneClass(".dijitCalendarDayLabelTemplate", 6);
-                       cloneClass(".dijitCalendarDateTemplate", 6);
-
-                       // now make 6 week rows
-                       cloneClass(".dijitCalendarWeekTemplate", 5);
-
-                       // insert localized day names in the header
-                       var dayNames = this.dateLocaleModule.getNames('days', this.dayWidth, 'standAlone', this.lang);
-                       var dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang);
-                       dojo.query(".dijitCalendarDayLabel", this.domNode).forEach(function(label, i){
-                               this._setText(label, dayNames[(i + dayOffset) % 7]);
-                       }, this);
-
-                       var dateObj = new this.dateClassObj(this.currentFocus);
-
-                       this.monthDropDownButton.dropDown = new dijit.Calendar._MonthDropDown({
-                               id: this.id + "_mdd",
-                               onChange: dojo.hitch(this, "_onMonthSelect")
-                       });
-
-                       this.set('currentFocus', dateObj, false);       // draw the grid to the month specified by currentFocus
-
-                       // Set up repeating mouse behavior for increment/decrement of months/years
-                       var _this = this;
-                       var typematic = function(nodeProp, dateProp, adj){
-                               _this._connects.push(
-                                       dijit.typematic.addMouseListener(_this[nodeProp], _this, function(count){
-                                               if(count >= 0){ _this._adjustDisplay(dateProp, adj); }
-                                       }, 0.8, 500)
-                               );
-                       };
-                       typematic("incrementMonth", "month", 1);
-                       typematic("decrementMonth", "month", -1);
-                       typematic("nextYearLabelNode", "year", 1);
-                       typematic("previousYearLabelNode", "year", -1);
-               },
-
-               _adjustDisplay: function(/*String*/ part, /*int*/ amount){
-                       // summary:
-                       //      Moves calendar forwards or backwards by months or years
-                       // part:
-                       //      "month" or "year"
-                       // amount:
-                       //      Number of months or years
-                       // tags:
-                       //      private
-                       this._setCurrentFocusAttr(this.dateFuncObj.add(this.currentFocus, part, amount));
-               },
-
-               _setCurrentFocusAttr: function(/*Date*/ date, /*Boolean*/ forceFocus){
-                       // summary:
-                       //              If the calendar currently has focus, then focuses specified date,
-                       //              changing the currently displayed month/year if necessary.
-                       //              If the calendar doesn't have focus, updates currently
-                       //              displayed month/year, and sets the cell that will get focus.
-                       // forceFocus:
-                       //              If true, will focus() the cell even if calendar itself doesn't have focus
-
-                       var oldFocus = this.currentFocus,
-                               oldCell = oldFocus ? dojo.query("[dijitDateValue=" + oldFocus.valueOf() + "]", this.domNode)[0] : null;
-
-                       // round specified value to nearest day (1am to avoid issues when DST shift occurs at midnight, see #8521, #9366)
-                       date = new this.dateClassObj(date);
-                       date.setHours(1, 0, 0, 0);
-
-                       this._set("currentFocus", date);
-
-                       // TODO: only re-populate grid when month/year has changed
-                       this._populateGrid();
-
-                       // set tabIndex=0 on new cell, and focus it (but only if Calendar itself is focused)
-                       var newCell = dojo.query("[dijitDateValue=" + date.valueOf() + "]", this.domNode)[0];
-                       newCell.setAttribute("tabIndex", this.tabIndex);
-                       if(this._focused || forceFocus){
-                               newCell.focus();
-                       }
-
-                       // set tabIndex=-1 on old focusable cell
-                       if(oldCell && oldCell != newCell){
-                               if(dojo.isWebKit){      // see #11064 about webkit bug
-                                       oldCell.setAttribute("tabIndex", "-1");
-                               }else{
-                                               oldCell.removeAttribute("tabIndex");
-                               }
-                       }
-               },
-
-               focus: function(){
-                       // summary:
-                       //              Focus the calendar by focusing one of the calendar cells
-                       this._setCurrentFocusAttr(this.currentFocus, true);
-               },
-
-               _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.currentFocus = this.dateFuncObj.add(this.currentFocus, "month",
-                               newMonth - this.currentFocus.getMonth());
-                       this._populateGrid();
-               },
-
-               _onDayClick: function(/*Event*/ evt){
-                       // summary:
-                       //      Handler for day clicks, selects the date if appropriate
-                       // tags:
-                       //      protected
-                       dojo.stopEvent(evt);
-                       for(var node = evt.target; node && !node.dijitDateValue; node = node.parentNode);
-                       if(node && !dojo.hasClass(node, "dijitCalendarDisabledDate")){
-                               this.set('value', node.dijitDateValue);
-                       }
-               },
-
-               _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 =
-                               dojo.hasClass(evt.target, "dijitCalendarDateLabel") ?
-                               evt.target.parentNode :
-                               evt.target;
-
-                       if(node && (node.dijitDateValue || node == this.previousYearLabelNode || node == this.nextYearLabelNode) ){
-                               dojo.addClass(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(dojo.hasClass(this._currentNode, "dijitCalendarActiveDate")) {
-                               cls += " dijitCalendarActiveDate";
-                       }
-                       dojo.removeClass(this._currentNode, cls);
-                       this._currentNode = null;
-               },
-               
-               _onDayMouseDown: function(/*Event*/ evt){
-                       var node = evt.target.parentNode;
-                       if(node && node.dijitDateValue){
-                               dojo.addClass(node, "dijitCalendarActiveDate");
-                               this._currentNode = node;
-                       }
-               },
-               
-               _onDayMouseUp: function(/*Event*/ evt){
-                       var node = evt.target.parentNode;
-                       if(node && node.dijitDateValue){
-                               dojo.removeClass(node, "dijitCalendarActiveDate");
-                       }
-               },
-
-//TODO: use typematic
-               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 dk = dojo.keys,
-                               increment = -1,
-                               interval,
-                               newValue = this.currentFocus;
-                       switch(evt.keyCode){
-                               case dk.RIGHT_ARROW:
-                                       increment = 1;
-                                       //fallthrough...
-                               case dk.LEFT_ARROW:
-                                       interval = "day";
-                                       if(!this.isLeftToRight()){ increment *= -1; }
-                                       break;
-                               case dk.DOWN_ARROW:
-                                       increment = 1;
-                                       //fallthrough...
-                               case dk.UP_ARROW:
-                                       interval = "week";
-                                       break;
-                               case dk.PAGE_DOWN:
-                                       increment = 1;
-                                       //fallthrough...
-                               case dk.PAGE_UP:
-                                       interval = evt.ctrlKey || evt.altKey ? "year" : "month";
-                                       break;
-                               case dk.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 dk.HOME:
-                                       newValue = new this.dateClassObj(newValue);
-                                       newValue.setDate(1);
-                                       break;
-                               case dk.ENTER:
-                               case dk.SPACE:
-                                       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)){
-                               dojo.stopEvent(evt);
-                       }
-               },
-
-               onValueSelected: function(/*Date*/ date){
-                       // summary:
-                       //              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(/*Date*/ date){
-                       // summary:
-                       //              Called only when the selected date has changed
-               },
-
-               _isSelectedDate: function(/*Date*/ dateObject, /*String?*/ locale){
-                       // summary:
-                       //              Extension point so developers can subclass Calendar to
-                       //              support multiple (concurrently) selected dates
-                       // tags:
-                       //              protected extension
-                       return this._isValidDate(this.value) && !this.dateFuncObj.compare(dateObject, this.value, "date")
-               },
-
-               isDisabledDate: function(/*Date*/ dateObject, /*String?*/ locale){
-                       // summary:
-                       //              May be overridden to disable certain dates in the calendar e.g. `isDisabledDate=dojo.date.locale.isWeekend`
-                       // tags:
-                       //      extension
-/*=====
-                       return false; // Boolean
-=====*/
-               },
-
-               getClassForDate: function(/*Date*/ dateObject, /*String?*/ 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.
-                       // tags:
-                       //      extension
-
-/*=====
-                       return ""; // String
-=====*/
-               }
-       }
-);
-
-dojo.declare("dijit.Calendar._MonthDropDown", [dijit._Widget, dijit._Templated], {
-       // summary:
-       //              The month drop down
-
-       // 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' " +
-               "dojoAttachEvent='onclick:_onClick,onmouseover:_onMenuHover,onmouseout:_onMenuHover'></div>",
-
-       _setMonthsAttr: function(/*String[]*/ months){
-               this.domNode.innerHTML = dojo.map(months, function(month, idx){
-                               return month ? "<div class='dijitCalendarMonthLabel' month='" + idx +"'>" + month + "</div>" : "";
-                       }).join("");
-       },
-
-       _onClick: function(/*Event*/ evt){
-               this.onChange(dojo.attr(evt.target, "month"));
-       },
-
-       onChange: function(/*Number*/ month){
-               // summary:
-               //              Callback when month is selected from drop down
-       },
-
-       _onMenuHover: function(evt){
-               dojo.toggleClass(evt.target, "dijitCalendarMonthLabelHover", evt.type == "mouseover");
-       }
-});
-
-}
+//>>built
+define("dijit/Calendar",["dojo/_base/array","dojo/date","dojo/date/locale","dojo/_base/declare","dojo/dom-attr","dojo/dom-class","dojo/_base/event","dojo/_base/kernel","dojo/keys","dojo/_base/lang","dojo/_base/sniff","./CalendarLite","./_Widget","./_CssStateMixin","./_TemplatedMixin","./form/DropDownButton","./hccss"],function(_1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c,_d,_e,_f,_10){var _11=_4("dijit.Calendar",[_c,_d,_e],{cssStateNodes:{"decrementMonth":"dijitCalendarArrow","incrementMonth":"dijitCalendarArrow","previousYearLabelNode":"dijitCalendarPreviousYear","nextYearLabelNode":"dijitCalendarNextYear"},setValue:function(_12){_8.deprecated("dijit.Calendar:setValue() is deprecated.  Use set('value', ...) instead.","","2.0");this.set("value",_12);},_createMonthWidget:function(){return new _11._MonthDropDownButton({id:this.id+"_mddb",tabIndex:-1,onMonthSelect:_a.hitch(this,"_onMonthSelect"),lang:this.lang,dateLocaleModule:this.dateLocaleModule},this.monthNode);},buildRendering:function(){this.inherited(arguments);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(_13){this._setCurrentFocusAttr(this.dateFuncObj.add(this.currentFocus,"month",_13-this.currentFocus.getMonth()));},_onDayMouseOver:function(evt){var _14=_6.contains(evt.target,"dijitCalendarDateLabel")?evt.target.parentNode:evt.target;if(_14&&((_14.dijitDateValue&&!_6.contains(_14,"dijitCalendarDisabledDate"))||_14==this.previousYearLabelNode||_14==this.nextYearLabelNode)){_6.add(_14,"dijitCalendarHoveredDate");this._currentNode=_14;}},_onDayMouseOut:function(evt){if(!this._currentNode){return;}if(evt.relatedTarget&&evt.relatedTarget.parentNode==this._currentNode){return;}var cls="dijitCalendarHoveredDate";if(_6.contains(this._currentNode,"dijitCalendarActiveDate")){cls+=" dijitCalendarActiveDate";}_6.remove(this._currentNode,cls);this._currentNode=null;},_onDayMouseDown:function(evt){var _15=evt.target.parentNode;if(_15&&_15.dijitDateValue&&!_6.contains(_15,"dijitCalendarDisabledDate")){_6.add(_15,"dijitCalendarActiveDate");this._currentNode=_15;}},_onDayMouseUp:function(evt){var _16=evt.target.parentNode;if(_16&&_16.dijitDateValue){_6.remove(_16,"dijitCalendarActiveDate");}},handleKey:function(evt){var _17=-1,_18,_19=this.currentFocus;switch(evt.charOrCode){case _9.RIGHT_ARROW:_17=1;case _9.LEFT_ARROW:_18="day";if(!this.isLeftToRight()){_17*=-1;}break;case _9.DOWN_ARROW:_17=1;case _9.UP_ARROW:_18="week";break;case _9.PAGE_DOWN:_17=1;case _9.PAGE_UP:_18=evt.ctrlKey||evt.altKey?"year":"month";break;case _9.END:_19=this.dateFuncObj.add(_19,"month",1);_18="day";case _9.HOME:_19=new this.dateClassObj(_19);_19.setDate(1);break;case _9.ENTER:case " ":this.set("value",this.currentFocus);break;default:return true;}if(_18){_19=this.dateFuncObj.add(_19,_18,_17);}this._setCurrentFocusAttr(_19);return false;},_onKeyPress:function(evt){if(!this.handleKey(evt)){_7.stop(evt);}},onValueSelected:function(){},onChange:function(_1a){this.onValueSelected(_1a);},getClassForDate:function(){}});_11._MonthDropDownButton=_4("dijit.Calendar._MonthDropDownButton",_10,{onMonthSelect:function(){},postCreate:function(){this.inherited(arguments);this.dropDown=new _11._MonthDropDown({id:this.id+"_mdd",onChange:this.onMonthSelect});},_setMonthAttr:function(_1b){var _1c=this.dateLocaleModule.getNames("months","wide","standAlone",this.lang,_1b);this.dropDown.set("months",_1c);this.containerNode.innerHTML=(_b("ie")==6?"":"<div class='dijitSpacer'>"+this.dropDown.domNode.innerHTML+"</div>")+"<div class='dijitCalendarMonthLabel dijitCalendarCurrentMonthLabel'>"+_1c[_1b.getMonth()]+"</div>";}});_11._MonthDropDown=_4("dijit.Calendar._MonthDropDown",[_d,_f],{months:[],templateString:"<div class='dijitCalendarMonthMenu dijitMenu' "+"data-dojo-attach-event='onclick:_onClick,onmouseover:_onMenuHover,onmouseout:_onMenuHover'></div>",_setMonthsAttr:function(_1d){this.domNode.innerHTML=_1.map(_1d,function(_1e,idx){return _1e?"<div class='dijitCalendarMonthLabel' month='"+idx+"'>"+_1e+"</div>":"";}).join("");},_onClick:function(evt){this.onChange(_5.get(evt.target,"month"));},onChange:function(){},_onMenuHover:function(evt){_6.toggle(evt.target,"dijitCalendarMonthLabelHover",evt.type=="mouseover");}});return _11;});
\ No newline at end of file