';
return monthPicker;
},
_generateExtraHTML_MonthYearPicker: function(inst) {
var minDate = this._getMinMaxDate(inst, 'min');
var maxDate = this._getMinMaxDate(inst, 'max');
var drawYear = inst.drawYear;
var drawMonth = inst.drawMonth;
var inMinYear = (minDate && minDate.getFullYear() == drawYear);
var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
var monthPicker = this._generateMonthPickerHTML_MonthYearPicker(inst, minDate, maxDate, drawMonth, inMinYear, inMaxYear);
return '
' + monthPicker + '
' +
''; //yearPicker gets filled dinamically
},
_pickMonthYear_MonthYearPicker: function(id, valueMY, period) {
var dummySelect = jQuery('').append( new Option(valueMY, valueMY, true, true) );
//select month and show datepicker or select year ...
this._selectMonthYear(id, dummySelect[0], period);
//... and show month picker
if(period == 'Y') {
this._toggleDisplay_MonthYearPicker(id, 2);
}
},
_addHoverEvents_MonthYearPicker: function (parent) {
var dpMonths = parent.find('.ui-state-default');
dpMonths.hover(
function () {
jQuery(this).addClass('ui-state-hover');
},
function () {
jQuery(this).removeClass("ui-state-hover");
});
},
_toggleDisplay_MonthYearPicker: function(inst, screen, input) {
if(typeof inst == 'string') {
//var inst = this._curInst;
var target = jQuery(inst);
inst = this._getInst(target[0]);
}
else {
//get the input element and put it in the target array
var target = [ input !== undefined
? input
: instActive.inline ? dpDiv.parent()[0] : instActive.input[0]];
}
if (this._isDisabledDatepicker(target[0])) {
return;
}
//keep the focus for _doKeyDown to work
this._instInputFocus_MYP(inst);
var minDate = this._getMinMaxDate(inst, 'min');
var maxDate = this._getMinMaxDate(inst, 'max');
var drawYear = inst.drawYear; //inst.drawYear = inst.selectedYear = inst.currentYear
var drawMonth = inst.drawMonth;
var minYear = minDate ? minDate.getFullYear() : 0; //TODO
var maxYear = maxDate ? maxDate.getFullYear() : undefined;
var dpHeader = inst.dpDiv.children('.ui-datepicker-header');
var dpPrev = dpHeader.children('a.ui-datepicker-prev');
var dpNext = dpHeader.children('a.ui-datepicker-next');
var dpTitle = dpHeader.children('.ui-datepicker-title');
var self = this;
switch (screen) {
case 2:
//month picker
var inMinYear = (minYear !== undefined && minYear == drawYear);
var inMaxYear = (maxYear !== undefined && maxYear == drawYear);
var _advanceYear_MYP = function(diff) {
inst.drawYear = drawYear += diff;
dpTitle.children(':first').text(drawYear);
//update screen
if(minDate || maxDate) {
inMinYear = minYear == drawYear;
inMaxYear = maxYear == drawYear;
//update month selection
var monthPicker = self._generateMonthPickerHTML_MonthYearPicker(inst, minDate, maxDate, drawMonth, inMinYear, inMaxYear);
inst.dpDiv.children('.ui-datepicker-select-month').html(monthPicker);
}
_updatePrevNextYear_MYP();
};
var _updatePrevNextYear_MYP = function() {
dpPrev.unbind('click');
if(!inMinYear) {
dpPrev.removeClass('ui-state-disabled').click(function() {_advanceYear_MYP(-1); self._instInputFocus_MYP(inst);});
}
else {
dpPrev.addClass('ui-state-disabled');
}
dpNext.unbind('click');
if(!inMaxYear) {
dpNext.removeClass('ui-state-disabled').click(function() {_advanceYear_MYP(1); self._instInputFocus_MYP(inst);});
}
else {
dpNext.addClass('ui-state-disabled');
}
};
//change title link behaviour
dpTitle.html('' + drawYear +'');
//change prev next behaviour
dpPrev.removeAttr('onclick'); //remove DatePicker's onclick event
dpNext.removeAttr('onclick'); //remove DatePicker's onclick event
_updatePrevNextYear_MYP();
var dpMonthSelector = inst.dpDiv.find('.ui-datepicker-select-month table');
this._addHoverEvents_MonthYearPicker(dpMonthSelector);
jQuery('table.ui-datepicker-calendar').hide();
jQuery('.ui-datepicker-select-month').show();
jQuery('.ui-datepicker-select-year').hide();
break;
case 3:
//year picker
var year = parseInt(drawYear/10, 10) * 10; //first year in this decade
//change title link behaviour
dpTitle.unbind('click');
//change prev next behaviour
var _updateYearPicker_MYP = function(year) {
//TODO RTL
//change title html
dpTitle.html('' + year + '-' + (year + 9) + ''); //2010 - 2019
//change prev next behaviour
dpPrev.unbind('click');
dpNext.unbind('click');
if(year > minYear) {
dpPrev.removeClass('ui-state-disabled').click(function() {_updateYearPicker_MYP(year-21); self._instInputFocus_MYP(inst);}); //year is 2021 at this point
}
else {
dpPrev.addClass('ui-state-disabled');
}
if(maxYear === undefined || year+9 < maxYear) {
dpNext.removeClass('ui-state-disabled').click(function() {_updateYearPicker_MYP(year-1); self._instInputFocus_MYP(inst);});
}
else {
dpNext.addClass('ui-state-disabled');
}
//generate year picker HTML
var yearPicker = '
';
//show years in 4x3 matrix (2009-2020)
year--; //last year of the previous decade (2009)
for (var i = 1; i <= 12; i++) {
unselectable = (minYear !== 'undefined' && year < minYear) ||
(maxYear !== 'undefined' && year > maxYear);
//html += ''+year+'';
yearPicker += '
' + // actions
((unselectable ? '' + year + '' : '' + year + '')) + '