From aa9a5ca6e326780cb922b0cbbe5ea0400e78ceac Mon Sep 17 00:00:00 2001 From: Vladislav Kuzemchik Date: Tue, 19 Jul 2011 18:03:16 +0700 Subject: [PATCH 1/4] Override _optionDatepicker to set time with "option" and adjust sliders --- jquery-ui-timepicker-addon.js | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/jquery-ui-timepicker-addon.js b/jquery-ui-timepicker-addon.js index c97bffc..4fd6dc3 100644 --- a/jquery-ui-timepicker-addon.js +++ b/jquery-ui-timepicker-addon.js @@ -968,6 +968,33 @@ $.datepicker._getDateDatepicker = function(target, noDefault) { return this._base_getDateDatepicker(target, noDefault); }; +//####################################################################################### +// override options setter to add time to maxDate(Time) and minDate(Time) +//####################################################################################### +$.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker; +$.datepicker._optionDatepicker = function(target, name, value) { + this._base_optionDatepicker(target, name, value); + var inst = this._getInst(target), + tp_inst = this._get(inst, 'timepicker'); + if (tp_inst) { + //Set minimum and maximum date values if we have timepicker + if(name==='minDate') { + if(tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) + tp_inst._defaults.minDateTime = new Date(value); + if(tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date) + tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime()); + tp_inst._limitMinMaxDateTime(inst,true); + } + if(name==='maxDate') { + if(tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date) + tp_inst._defaults.maxDateTime = new Date(value); + if(tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date) + tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime()); + tp_inst._limitMinMaxDateTime(inst,true); + } + } +}; + //####################################################################################### // jQuery extend now ignores nulls! //####################################################################################### From f225d33879b75a44dc3b8cd08a365978905d6226 Mon Sep 17 00:00:00 2001 From: Vladislav Kuzemchik Date: Thu, 21 Jul 2011 12:48:50 +0700 Subject: [PATCH 2/4] Prevent time dissapearing on event subscription --- jquery-ui-timepicker-addon.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/jquery-ui-timepicker-addon.js b/jquery-ui-timepicker-addon.js index 4274950..5e8801e 100644 --- a/jquery-ui-timepicker-addon.js +++ b/jquery-ui-timepicker-addon.js @@ -790,7 +790,7 @@ $.datepicker._selectDate = function (id, dateStr) { tp_inst._limitMinMaxDateTime(inst, true); inst.inline = inst.stay_open = true; //This way the onSelect handler called from calendarpicker get the full dateTime - this._base_selectDate(id, dateStr + tp_inst._defaults.separator + tp_inst.formattedTime + tp_inst._defaults.timeSuffix); + this._base_selectDate(id, dateStr); inst.inline = inst.stay_open = false; this._notifyChange(inst); this._updateDatepicker(inst); @@ -1016,6 +1016,22 @@ $.datepicker.parseDate = function(format, value, settings) { return date; }; +//####################################################################################### +// override formatDate to set date with time to the input +//####################################################################################### +$.datepicker._base_formatDate=$.datepicker._formatDate; +$.datepicker._formatDate = function(inst, day, month, year){ + var tp_inst = this._get(inst, 'timepicker'); + if(tp_inst) + { + if(day) + var b = this._base_formatDate(inst, day, month, year); + tp_inst._updateDateTime(); + return tp_inst.$input.val(); + } + return this._base_formatDate(inst); +} + //####################################################################################### // override options setter to add time to maxDate(Time) and minDate(Time) //####################################################################################### From a7dcb3078651bea11c4372f44c6ff1151f86b9b0 Mon Sep 17 00:00:00 2001 From: Vladislav Kuzemchik Date: Thu, 21 Jul 2011 14:19:06 +0700 Subject: [PATCH 3/4] Options rewrited. onSelect event for sliders is working now. To set both max date and max time you need to set both maxDate and maxDateTime. The same with min. --- jquery-ui-timepicker-addon.js | 47 +++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/jquery-ui-timepicker-addon.js b/jquery-ui-timepicker-addon.js index 5e8801e..24ee524 100644 --- a/jquery-ui-timepicker-addon.js +++ b/jquery-ui-timepicker-addon.js @@ -64,6 +64,7 @@ function Timepicker() { secondMax: 59, minDateTime: null, maxDateTime: null, + onSelect: null, hourGrid: 0, minuteGrid: 0, secondGrid: 0, @@ -650,7 +651,7 @@ $.extend(Timepicker.prototype, { // bind to sliders slidestop, and grid click. //######################################################################## _onSelectHandler: function() { - var onSelect = this._defaults['onSelect']; + var onSelect = this._defaults.onSelect; var inputEl = this.$input ? this.$input[0] : null; if (onSelect && inputEl) { onSelect.apply(inputEl, [this.formattedDateTime, this]); @@ -1033,30 +1034,44 @@ $.datepicker._formatDate = function(inst, day, month, year){ } //####################################################################################### -// override options setter to add time to maxDate(Time) and minDate(Time) +// override options setter to add time to maxDate(Time) and minDate(Time). MaxDate //####################################################################################### $.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker; $.datepicker._optionDatepicker = function(target, name, value) { - this._base_optionDatepicker(target, name, value); var inst = this._getInst(target), tp_inst = this._get(inst, 'timepicker'); if (tp_inst) { - //Set minimum and maximum date values if we have timepicker - if(name==='minDate') { - if(tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) - tp_inst._defaults.minDateTime = new Date(value); - if(tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date) - tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime()); - tp_inst._limitMinMaxDateTime(inst,true); + var min,max,onselect; + if (typeof name == 'string') { // if min/max was set with the string + if (name==='minDate' || name==='minDateTime' ) + min = value; + else if (name==='maxDate' || name==='maxDateTime') + max = value; + else if (name==='onSelect') + onselect=value; + } else if (typeof name == 'object') { //if min/max was set with the JSON + if(name.minDate) + min = name.minDate; + else if (name.minDateTime) + min = name.minDateTime; + else if (name.maxDate) + max = name.maxDate; + else if (name.maxDateTime) + max = name.maxDateTime; } - if(name==='maxDate') { - if(tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date) - tp_inst._defaults.maxDateTime = new Date(value); - if(tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date) - tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime()); - tp_inst._limitMinMaxDateTime(inst,true); + if(min){ //if min was set + min= new Date(min); + tp_inst._defaults.minDate = min; + tp_inst._defaults.minDateTime = min; + } else if (max){ //if max was set + max= new Date(max); + tp_inst._defaults.maxDate = max; + tp_inst._defaults.maxDateTime = max; } + else if (onselect) + tp_inst._defaults.onSelect=onselect; } + this._base_optionDatepicker(target, name, value); }; //####################################################################################### From 6f24e93ed85bb90965f7d10d939a47cc97eb2530 Mon Sep 17 00:00:00 2001 From: Vladislav Kuzemchik Date: Fri, 22 Jul 2011 10:42:19 +0700 Subject: [PATCH 4/4] Zero and null min/max values doesn't give error now --- jquery-ui-timepicker-addon.js | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/jquery-ui-timepicker-addon.js b/jquery-ui-timepicker-addon.js index 24ee524..fc252a9 100644 --- a/jquery-ui-timepicker-addon.js +++ b/jquery-ui-timepicker-addon.js @@ -163,7 +163,16 @@ $.extend(Timepicker.prototype, { tp_inst.$altInput = $(o.altField) .css({ cursor: 'pointer' }) .focus(function(){ $input.trigger("focus"); }); - + + if(tp_inst._defaults.minDate==0 || tp_inst._defaults.minDateTime==0) + { + tp_inst._defaults.minDate=new Date(); + } + if(tp_inst._defaults.maxDate==0 || tp_inst._defaults.maxDateTime==0) + { + tp_inst._defaults.maxDate=new Date(); + } + // datepicker needs minDate/maxDate, timepicker needs minDateTime/maxDateTime.. if(tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date) tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime()); @@ -173,7 +182,6 @@ $.extend(Timepicker.prototype, { tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime()); if(tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date) tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime()); - return tp_inst; }, @@ -520,7 +528,7 @@ $.extend(Timepicker.prototype, { if(!this._defaults.showTimepicker) return; // No time so nothing to check here - if($.datepicker._get(dp_inst, 'minDateTime') !== null && dp_date){ + if($.datepicker._get(dp_inst, 'minDateTime') !== null && $.datepicker._get(dp_inst, 'minDateTime') !== undefined && dp_date){ var minDateTime = $.datepicker._get(dp_inst, 'minDateTime'), minDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0); @@ -553,7 +561,7 @@ $.extend(Timepicker.prototype, { } } - if($.datepicker._get(dp_inst, 'maxDateTime') !== null && dp_date){ + if($.datepicker._get(dp_inst, 'maxDateTime') !== null && $.datepicker._get(dp_inst, 'maxDateTime') !== undefined && dp_date){ var maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'), maxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0); @@ -1060,11 +1068,18 @@ $.datepicker._optionDatepicker = function(target, name, value) { max = name.maxDateTime; } if(min){ //if min was set - min= new Date(min); + if(min==0) + min=new Date(); + else + min= new Date(min); + tp_inst._defaults.minDate = min; tp_inst._defaults.minDateTime = min; } else if (max){ //if max was set - max= new Date(max); + if(max==0) + max=new Date(); + else + max= new Date(max); tp_inst._defaults.maxDate = max; tp_inst._defaults.maxDateTime = max; }