aboutsummaryrefslogtreecommitdiffstats
path: root/template-common/lib/ui/ui.datepicker.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--template-common/lib/ui/ui.datepicker.js100
1 files changed, 59 insertions, 41 deletions
diff --git a/template-common/lib/ui/ui.datepicker.js b/template-common/lib/ui/ui.datepicker.js
index 2ddca2889..877e19b52 100644
--- a/template-common/lib/ui/ui.datepicker.js
+++ b/template-common/lib/ui/ui.datepicker.js
@@ -233,12 +233,6 @@ $.extend(Datepicker.prototype, {
this._updateDatepicker(inst);
},
- /* Tidy up after displaying the date picker. */
- _inlineShow: function(inst) {
- var numMonths = this._getNumberOfMonths(inst); // fix width for dynamic number of date pickers
- inst.dpDiv.width(numMonths[1] * $('.ui-datepicker', inst.dpDiv[0]).width());
- },
-
/* Pop-up the date picker in a "dialog" box.
@param input element - ignored
@param dateText string - the initial date to display (in the current format)
@@ -688,7 +682,8 @@ $.extend(Datepicker.prototype, {
this._selectDate(id, this._formatDate(inst,
inst.currentDay, inst.currentMonth, inst.currentYear));
if (this._stayOpen) {
- inst.rangeStart = new Date(inst.currentYear, inst.currentMonth, inst.currentDay);
+ inst.rangeStart = this._daylightSavingAdjust(
+ new Date(inst.currentYear, inst.currentMonth, inst.currentDay));
this._updateDatepicker(inst);
}
else if (rangeSelect) {
@@ -766,7 +761,7 @@ $.extend(Datepicker.prototype, {
@param date Date - the date to get the week for
@return number - the number of the week within the year that contains this date */
iso8601Week: function(date) {
- var checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate(), (date.getTimezoneOffset() / -60));
+ var checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate());
var firstMon = new Date(checkDate.getFullYear(), 1 - 1, 4); // First week always contains 4 Jan
var firstDay = firstMon.getDay() || 7; // Day of week: Mon = 1, ..., Sun = 7
firstMon.setDate(firstMon.getDate() + 1 - firstDay); // Preceding Monday
@@ -907,7 +902,7 @@ $.extend(Datepicker.prototype, {
if (year < 100)
year += new Date().getFullYear() - new Date().getFullYear() % 100 +
(year <= shortYearCutoff ? 0 : -100);
- var date = new Date(year, month - 1, day);
+ var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day)
throw 'Invalid date'; // E.g. 31/02/*
return date;
@@ -1094,7 +1089,7 @@ $.extend(Datepicker.prototype, {
_determineDate: function(date, defaultDate) {
var offsetNumeric = function(offset) {
var date = new Date();
- date.setUTCDate(date.getUTCDate() + offset);
+ date.setDate(date.getDate() + offset);
return date;
};
var offsetString = function(offset, getDaysInMonth) {
@@ -1123,9 +1118,29 @@ $.extend(Datepicker.prototype, {
}
return new Date(year, month, day);
};
- return (date == null ? defaultDate :
+ date = (date == null ? defaultDate :
(typeof date == 'string' ? offsetString(date, this._getDaysInMonth) :
- (typeof date == 'number' ? offsetNumeric(date) : date)));
+ (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date)));
+ date = (date && date.toString() == 'Invalid Date' ? defaultDate : date);
+ if (date) {
+ date.setHours(0);
+ date.setMinutes(0);
+ date.setSeconds(0);
+ date.setMilliseconds(0);
+ }
+ return this._daylightSavingAdjust(date);
+ },
+
+ /* Handle switch to/from daylight saving.
+ Hours may be non-zero on daylight saving cut-over:
+ > 12 when midnight changeover, but then cannot generate
+ midnight datetime, so jump to 1AM, otherwise reset.
+ @param date (Date) the date to check
+ @return (Date) the corrected date */
+ _daylightSavingAdjust: function(date) {
+ if (!date) return null;
+ date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+ return date;
},
/* Set the date(s) directly. */
@@ -1157,10 +1172,12 @@ $.extend(Datepicker.prototype, {
/* Retrieve the date(s) directly. */
_getDate: function(inst) {
var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null :
- new Date(inst.currentYear, inst.currentMonth, inst.currentDay));
+ this._daylightSavingAdjust(new Date(
+ inst.currentYear, inst.currentMonth, inst.currentDay)));
if (this._get(inst, 'rangeSelect')) {
- return [inst.rangeStart || startDate, (!inst.endYear ? null :
- new Date(inst.endYear, inst.endMonth, inst.endDay))];
+ return [inst.rangeStart || startDate,
+ (!inst.endYear ? inst.rangeStart || startDate :
+ this._daylightSavingAdjust(new Date(inst.endYear, inst.endMonth, inst.endDay)))];
} else
return startDate;
},
@@ -1168,7 +1185,8 @@ $.extend(Datepicker.prototype, {
/* Generate the HTML for the current state of the date picker. */
_generateDatepicker: function(inst) {
var today = new Date();
- today = new Date(today.getFullYear(), today.getMonth(), today.getDate()); // clear time
+ today = this._daylightSavingAdjust(
+ new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time
var showStatus = this._get(inst, 'showStatus');
var isRTL = this._get(inst, 'isRTL');
// build the date picker HTML
@@ -1187,17 +1205,17 @@ $.extend(Datepicker.prototype, {
var numMonths = this._getNumberOfMonths(inst);
var stepMonths = this._get(inst, 'stepMonths');
var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
- var currentDate = (!inst.currentDay ? new Date(9999, 9, 9) :
- new Date(inst.currentYear, inst.currentMonth, inst.currentDay));
+ var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+ new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
var minDate = this._getMinMaxDate(inst, 'min', true);
var maxDate = this._getMinMaxDate(inst, 'max');
var drawMonth = inst.drawMonth;
var drawYear = inst.drawYear;
if (maxDate) {
- var maxDraw = new Date(maxDate.getFullYear(),
- maxDate.getMonth() - numMonths[1] + 1, maxDate.getDate());
+ var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+ maxDate.getMonth() - numMonths[1] + 1, maxDate.getDate()));
maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
- while (new Date(drawYear, drawMonth, 1) > maxDraw) {
+ while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
drawMonth--;
if (drawMonth < 0) {
drawMonth = 11;
@@ -1207,15 +1225,17 @@ $.extend(Datepicker.prototype, {
}
// controls and links
var prevText = this._get(inst, 'prevText');
- prevText = (!navigationAsDateFormat ? prevText : this.formatDate(
- prevText, new Date(drawYear, drawMonth - stepMonths, 1), this._getFormatConfig(inst)));
+ prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+ this._getFormatConfig(inst)));
var prev = '<div class="ui-datepicker-prev">' + (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
'<a onclick="jQuery.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' +
(showStatus ? this._addStatus(inst, this._get(inst, 'prevStatus') || '&#xa0;') : '') + '>' + prevText + '</a>' :
(hideIfNoPrevNext ? '' : '<label>' + prevText + '</label>')) + '</div>';
var nextText = this._get(inst, 'nextText');
- nextText = (!navigationAsDateFormat ? nextText : this.formatDate(
- nextText, new Date(drawYear, drawMonth + stepMonths, 1), this._getFormatConfig(inst)));
+ nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+ this._getFormatConfig(inst)));
var next = '<div class="ui-datepicker-next">' + (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
'<a onclick="jQuery.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' +
(showStatus ? this._addStatus(inst, this._get(inst, 'nextStatus') || '&#xa0;') : '') + '>' + nextText + '</a>' :
@@ -1244,10 +1264,11 @@ $.extend(Datepicker.prototype, {
var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;
var status = (showStatus ? this._get(inst, 'dayStatus') || '&#xa0;' : '');
var dateStatus = this._get(inst, 'statusForDate') || this.dateStatus;
- var endDate = inst.endDay ? new Date(inst.endYear, inst.endMonth, inst.endDay) : currentDate;
+ var endDate = inst.endDay ? this._daylightSavingAdjust(
+ new Date(inst.endYear, inst.endMonth, inst.endDay)) : currentDate;
for (var row = 0; row < numMonths[0]; row++)
for (var col = 0; col < numMonths[1]; col++) {
- var selectedDate = new Date(drawYear, drawMonth, inst.selectedDay);
+ var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
html += '<div class="ui-datepicker-one-month' + (col == 0 ? ' ui-datepicker-new-row' : '') + '">' +
this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
selectedDate, row > 0 || col > 0, showStatus, monthNames) + // draw month headers
@@ -1269,8 +1290,8 @@ $.extend(Datepicker.prototype, {
if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)
inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
- var printDate = new Date(drawYear, drawMonth, 1 - leadDays);
var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate
+ var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows
html += '<tr class="ui-datepicker-days-row">' +
(showWeeks ? '<td class="ui-datepicker-week-col">' + calculateWeek(printDate) + '</td>' : '');
@@ -1305,7 +1326,8 @@ $.extend(Datepicker.prototype, {
inst.id + '\',' + drawMonth + ',' + drawYear + ', this);"') + '>' + // actions
(otherMonth ? (showOtherMonths ? printDate.getDate() : '&#xa0;') : // display for other months
(unselectable ? printDate.getDate() : '<a>' + printDate.getDate() + '</a>')) + '</td>'; // display for this month
- printDate.setUTCDate(printDate.getUTCDate() + 1);
+ printDate.setDate(printDate.getDate() + 1);
+ printDate = this._daylightSavingAdjust(printDate);
}
html += '</tr>';
}
@@ -1397,7 +1419,7 @@ $.extend(Datepicker.prototype, {
var month = inst.drawMonth + (period == 'M' ? offset : 0);
var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +
(period == 'D' ? offset : 0);
- var date = new Date(year, month, day);
+ var date = this._daylightSavingAdjust(new Date(year, month, day));
// ensure it is within the bounds set
var minDate = this._getMinMaxDate(inst, 'min', true);
var maxDate = this._getMinMaxDate(inst, 'max');
@@ -1427,12 +1449,6 @@ $.extend(Datepicker.prototype, {
/* Determine the current maximum date - ensure no time components are set - may be overridden for a range. */
_getMinMaxDate: function(inst, minMax, checkRange) {
var date = this._determineDate(this._get(inst, minMax + 'Date'), null);
- if (date) {
- date.setHours(0);
- date.setMinutes(0);
- date.setSeconds(0);
- date.setMilliseconds(0);
- }
return (!checkRange || !inst.rangeStart ? date :
(!date || inst.rangeStart > date ? inst.rangeStart : date));
},
@@ -1450,7 +1466,8 @@ $.extend(Datepicker.prototype, {
/* Determines if we should allow a "next/prev" month display change. */
_canAdjustMonth: function(inst, offset, curYear, curMonth) {
var numMonths = this._getNumberOfMonths(inst);
- var date = new Date(curYear, curMonth + (offset < 0 ? offset : numMonths[1]), 1);
+ var date = this._daylightSavingAdjust(new Date(
+ curYear, curMonth + (offset < 0 ? offset : numMonths[1]), 1));
if (offset < 0)
date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
return this._isInRange(inst, date);
@@ -1459,8 +1476,8 @@ $.extend(Datepicker.prototype, {
/* Is the given date in the accepted range? */
_isInRange: function(inst, date) {
// during range selection, use minimum of selected date and range start
- var newMinDate = (!inst.rangeStart ? null :
- new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay));
+ var newMinDate = (!inst.rangeStart ? null : this._daylightSavingAdjust(
+ new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay)));
newMinDate = (newMinDate && inst.rangeStart < newMinDate ? inst.rangeStart : newMinDate);
var minDate = newMinDate || this._getMinMaxDate(inst, 'min');
var maxDate = this._getMinMaxDate(inst, 'max');
@@ -1484,8 +1501,9 @@ $.extend(Datepicker.prototype, {
inst.currentMonth = inst.selectedMonth;
inst.currentYear = inst.selectedYear;
}
- var date = (day ? (typeof day == 'object' ? day : new Date(year, month, day)) :
- new Date(inst.currentYear, inst.currentMonth, inst.currentDay));
+ var date = (day ? (typeof day == 'object' ? day :
+ this._daylightSavingAdjust(new Date(year, month, day))) :
+ this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));
}
});