/* Month and Year picker for jQuery UI Datepicker 1.8.21 Written by Anton Ludescher (silverskater{at}gmail.com). Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. */ (function( jQuery, undefined ) { //overriding functions meant to be private (starting with an underscore) jQuery.datepicker._updateDatepicker_MonthYearPicker = jQuery.datepicker._updateDatepicker; jQuery.datepicker._showDatepicker_MonthYearPicker = jQuery.datepicker._showDatepicker; jQuery.datepicker._doKeyDown_MonthYearPicker = jQuery.datepicker._doKeyDown; jQuery.extend(jQuery.datepicker, { _doKeyDown: function(event) { var inst = jQuery.datepicker._getInst(event.target); var handled = true; //var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); inst._keyEvent = true; if (jQuery.datepicker._datepickerShowing) { switch (event.keyCode) { case 27: if(jQuery('.ui-datepicker-select-month').is(':visible')) { jQuery.datepicker._updateDatepicker(inst); } else if(jQuery('.ui-datepicker-select-year').is(':visible')) { jQuery.datepicker._toggleDisplay_MonthYearPicker(inst, 2, this); } else { jQuery.datepicker._hideDatepicker(); } break; // hide on escape //TODO prev/next month/year on month/year picker screens default: //call the original function jQuery.datepicker._doKeyDown_MonthYearPicker(event); } } else { //call the original function jQuery.datepicker._doKeyDown_MonthYearPicker(event); } }, _updateDatepicker: function(inst) { //call the original function this._updateDatepicker_MonthYearPicker(inst); //TODO: multiMonth var numMonths = this._getNumberOfMonths(inst); var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); var changeMonth = this._get(inst, 'changeMonth'); var changeYear = this._get(inst, 'changeYear'); if(isMultiMonth || changeMonth || changeYear) { return ; } //console.log(jQuery('
').append(this.dpDiv.clone()).html()); var uidptitle = inst.dpDiv.find('.ui-datepicker-title'); var uidptitle_link = uidptitle.wrapInner(''); uidptitle_link.click(function(){jQuery.datepicker._toggleDisplay_MonthYearPicker('#' + inst.id, 2); return false;}); inst.dpDiv.children('table.ui-datepicker-calendar').after(this._generateExtraHTML_MonthYearPicker(inst)); }, //focus the date input field _instInputFocus_MYP: function(inst) { //code copied from datePicker's _updateDatepicker() if (inst == jQuery.datepicker._curInst && jQuery.datepicker._datepickerShowing && inst.input && // #6694 - don't focus the input if it's already focused // this breaks the change event in IE inst.input.is(':visible') && !inst.input.is(':disabled') && inst.input[0] != document.activeElement) inst.input.focus(); }, _generateMonthPickerHTML_MonthYearPicker: function(inst, minDate, maxDate, drawMonth, inMinYear, inMaxYear) { //TODO RTL? var monthNamesShort = this._get(inst, 'monthNamesShort'); var monthPicker = ''; var unselectable = false; for (var month = 0; month < 12; ) { unselectable = (inMinYear && month < minDate.getMonth()) || (inMaxYear && month > maxDate.getMonth()); monthPicker += ''; // display selectable date if(++month % 4 == 0) { monthPicker += ''; if(month != 12) { monthPicker += ''; } } } monthPicker += '
' + // actions ((unselectable ? '' + monthNamesShort[month] + '' : '' + monthNamesShort[month] + '')) + '
'; 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 '' + ''; //yearPicker gets filled dinamically }, _pickMonthYear_MonthYearPicker: function(id, valueMY, period) { var dummySelect = jQuery('