multidatespicker.min.js
8.78 KB
/*
* MultiDatesPicker v1.6.4
* http://multidatespickr.sourceforge.net/
*
* Copyright 2014, Luca Lauretta
* Dual licensed under the MIT or GPL version 2 licenses.
*/
(function(e){e.extend(e.ui,{multiDatesPicker:{version:"1.6.4"}});e.fn.multiDatesPicker=function(t){function u(e,t){if(!t)t="picked";e=c.call(this,e);for(var n=0;n<this.multiDatesPicker.dates[t].length;n++)if(!h.compareDates(this.multiDatesPicker.dates[t][n],e))return this.multiDatesPicker.dates[t].splice(n,1).pop()}function a(e,t){if(!t)t="picked";return this.multiDatesPicker.dates[t].splice(e,1).pop()}function f(e,t,n){if(!t)t="picked";e=c.call(this,e);e.setHours(0);e.setMinutes(0);e.setSeconds(0);e.setMilliseconds(0);if(h.gotDate.call(this,e,t)===false){this.multiDatesPicker.dates[t].push(e);if(!n)this.multiDatesPicker.dates[t].sort(h.compareDates)}}function l(e){if(!e)e="picked";this.multiDatesPicker.dates[e].sort(h.compareDates)}function c(e,t,n){if(!t)t="object";return h.dateConvert.call(this,e,t,n)}var n=arguments;var r=this;var i=new Date;var s=new Date(0);var o={};var h={init:function(t){var n=e(this);this.multiDatesPicker.changed=false;var r={beforeShow:function(e,t){this.multiDatesPicker.changed=false;if(this.multiDatesPicker.originalBeforeShow)this.multiDatesPicker.originalBeforeShow.call(this,e,t)},onSelect:function(t,n){var r=e(this);this.multiDatesPicker.changed=true;if(t){r.multiDatesPicker("toggleDate",t);this.multiDatesPicker.changed=true}if(this.multiDatesPicker.mode=="normal"&&this.multiDatesPicker.pickableRange){if(this.multiDatesPicker.dates.picked.length>0){var i=this.multiDatesPicker.dates.picked[0],s=new Date(i.getTime());h.sumDays(s,this.multiDatesPicker.pickableRange-1);if(this.multiDatesPicker.adjustRangeToDisabled){var o,u=this.multiDatesPicker.dates.disabled.slice(0);do{o=0;for(var a=0;a<u.length;a++){if(u[a].getTime()<=s.getTime()){if(i.getTime()<=u[a].getTime()&&u[a].getTime()<=s.getTime()){o++}u.splice(a,1);a--}}s.setDate(s.getDate()+o)}while(o!=0)}if(this.multiDatesPicker.maxDate&&s>this.multiDatesPicker.maxDate)s=this.multiDatesPicker.maxDate;r.datepicker("option","minDate",i).datepicker("option","maxDate",s)}else{r.datepicker("option","minDate",this.multiDatesPicker.minDate).datepicker("option","maxDate",this.multiDatesPicker.maxDate)}}if(this.multiDatesPicker.originalOnSelect&&t)this.multiDatesPicker.originalOnSelect.call(this,t,n)},beforeShowDay:function(t){var n=e(this),r=n.multiDatesPicker("gotDate",t)!==false,i=n.datepicker("option","disabled"),s=n.multiDatesPicker("gotDate",t,"disabled")!==false,o=this.multiDatesPicker.maxPicks<=this.multiDatesPicker.dates.picked.length;var u=[true,"",null];if(this.multiDatesPicker.originalBeforeShowDay)u=this.multiDatesPicker.originalBeforeShowDay.call(this,t);u[1]=r?"ui-state-highlight "+u[1]:u[1];u[0]=u[0]&&!(i||s||o&&!u[1]);return u}};if(n.val())var i=n.val();if(t){if(t.separator)this.multiDatesPicker.separator=t.separator;if(!this.multiDatesPicker.separator)this.multiDatesPicker.separator=", ";this.multiDatesPicker.originalBeforeShow=t.beforeShow;this.multiDatesPicker.originalOnSelect=t.onSelect;this.multiDatesPicker.originalBeforeShowDay=t.beforeShowDay;this.multiDatesPicker.originalOnClose=t.onClose;n.datepicker(t);this.multiDatesPicker.minDate=e.datepicker._determineDate(this,t.minDate,null);this.multiDatesPicker.maxDate=e.datepicker._determineDate(this,t.maxDate,null);if(t.addDates)h.addDates.call(this,t.addDates);if(t.addDisabledDates)h.addDates.call(this,t.addDisabledDates,"disabled");h.setMode.call(this,t)}else{n.datepicker()}n.datepicker("option",r);if(i)n.multiDatesPicker("value",i);var s=n.multiDatesPicker("value");n.val(s);var o=n.datepicker("option","altField");if(o)e(o).val(s);n.datepicker("refresh")},compareDates:function(e,t){e=c.call(this,e);t=c.call(this,t);var n=e.getFullYear()-t.getFullYear();if(!n){n=e.getMonth()-t.getMonth();if(!n)n=e.getDate()-t.getDate()}return n},sumDays:function(e,t){var n=typeof e;obj_date=c.call(this,e);obj_date.setDate(obj_date.getDate()+t);return c.call(this,obj_date,n)},dateConvert:function(t,n,r){var i=typeof t;var s=e(this);if(i==n){if(i=="object"){try{t.getTime()}catch(o){e.error("Received date is in a non supported format!");return false}}return t}if(typeof t=="undefined")t=new Date(0);if(n!="string"&&n!="object"&&n!="number")e.error('Date format "'+n+'" not supported!');if(!r){var u=s.datepicker("option","dateFormat");if(u){r=u}else{r=e.datepicker._defaults.dateFormat}}switch(i){case"object":break;case"string":t=e.datepicker.parseDate(r,t);break;case"number":t=new Date(t);break;default:e.error('Conversion from "'+n+'" format not allowed on jQuery.multiDatesPicker')}switch(n){case"object":return t;case"string":return e.datepicker.formatDate(r,t);case"number":return t.getTime();default:e.error('Conversion to "'+n+'" format not allowed on jQuery.multiDatesPicker')}return false},gotDate:function(e,t){if(!t)t="picked";for(var n=0;n<this.multiDatesPicker.dates[t].length;n++){if(h.compareDates.call(this,this.multiDatesPicker.dates[t][n],e)===0){return n}}return false},value:function(e){if(e&&typeof e=="string"){h.addDates.call(this,e.split(this.multiDatesPicker.separator))}else{var t=h.getDates.call(this,"string");return t.length?t.join(this.multiDatesPicker.separator):""}},getDates:function(t,n){if(!t)t="string";if(!n)n="picked";switch(t){case"object":return this.multiDatesPicker.dates[n];case"string":case"number":var r=new Array;for(var i in this.multiDatesPicker.dates[n])r.push(c.call(this,this.multiDatesPicker.dates[n][i],t));return r;default:e.error('Format "'+t+'" not supported!')}},addDates:function(t,n){if(t.length>0){if(!n)n="picked";switch(typeof t){case"object":case"array":if(t.length){for(var r=0;r<t.length;r++)f.call(this,t[r],n,true);l.call(this,n);break};case"string":case"number":f.call(this,t,n);break;default:e.error('Date format "'+typeof t+'" not allowed on jQuery.multiDatesPicker')}}else{e.error("Empty array of dates received.")}},removeDates:function(e,t){if(!t)t="picked";var n=[];if(Object.prototype.toString.call(e)==="[object Array]"){for(var r in e.sort(function(e,t){return t-e})){n.push(u.call(this,e[r],t))}}else{n.push(u.call(this,e,t))}return n},removeIndexes:function(e,t){if(!t)t="picked";var n=[];if(Object.prototype.toString.call(e)==="[object Array]"){for(var r in e.sort(function(e,t){return t-e})){n.push(a.call(this,e[r],t))}}else{n.push(a.call(this,e,t))}return n},resetDates:function(e){if(!e)e="picked";this.multiDatesPicker.dates[e]=[]},toggleDate:function(e,t){if(!t)t="picked";switch(this.multiDatesPicker.mode){case"daysRange":this.multiDatesPicker.dates[t]=[];var n=this.multiDatesPicker.autoselectRange[1];var r=this.multiDatesPicker.autoselectRange[0];if(n<r){n=this.multiDatesPicker.autoselectRange[0];r=this.multiDatesPicker.autoselectRange[1]}for(var i=r;i<n;i++)h.addDates.call(this,h.sumDays.call(this,e,i),t);break;default:if(h.gotDate.call(this,e)===false)h.addDates.call(this,e,t);else h.removeDates.call(this,e,t);break}},setMode:function(t){var n=e(this);if(t.mode)this.multiDatesPicker.mode=t.mode;switch(this.multiDatesPicker.mode){case"normal":for(option in t)switch(option){case"maxPicks":case"minPicks":case"pickableRange":case"adjustRangeToDisabled":this.multiDatesPicker[option]=t[option];break}break;case"daysRange":case"weeksRange":var r=1;for(option in t)switch(option){case"autoselectRange":r--;case"pickableRange":case"adjustRangeToDisabled":this.multiDatesPicker[option]=t[option];break}if(r>0)e.error("Some mandatory options not specified!");break}if(o.onSelect)o.onSelect()},destroy:function(){this.multiDatesPicker=null;e(this).datepicker("destroy")}};this.each(function(){var i=e(this);if(!this.multiDatesPicker){this.multiDatesPicker={dates:{picked:[],disabled:[]},mode:"normal",adjustRangeToDisabled:true}}if(h[t]){var s=h[t].apply(this,Array.prototype.slice.call(n,1));switch(t){case"removeDates":case"removeIndexes":case"resetDates":case"toggleDate":case"addDates":var o=i.datepicker("option","altField");var u=h.value.call(this);if(o!==undefined&&o!=""){e(o).val(u)}i.val(u);e.datepicker._refreshDatepicker(this)}switch(t){case"removeDates":case"getDates":case"gotDate":case"sumDays":case"compareDates":case"dateConvert":case"value":r=s}return s}else if(typeof t==="object"||!t){return h.init.apply(this,n)}else{e.error("Method "+t+" does not exist on jQuery.multiDatesPicker")}return false});return r};var t="multiDatesPicker";var n=(new Date).getTime();var r;e.multiDatesPicker={version:false};e.multiDatesPicker.initialized=false;e.multiDatesPicker.uuid=(new Date).getTime();e.multiDatesPicker.version=e.ui.multiDatesPicker.version;e.multiDatesPicker._hideDatepicker=e.datepicker._hideDatepicker;e.datepicker._hideDatepicker=function(){var t=this._curInst.input[0];var n=t.multiDatesPicker;if(!n||this._curInst.inline===false&&!n.changed){return e.multiDatesPicker._hideDatepicker.apply(this,arguments)}else{n.changed=false;e.datepicker._refreshDatepicker(t);return}};window["DP_jQuery_"+n]=e})(jQuery)