/** * version 1.0.6 * @license * ========================================================= * bootstrap-datetimepicker.js * http://www.eyecon.ro/bootstrap-datepicker * ========================================================= * Copyright 2012 Stefan Petre * * Contributions: * - Andrew Rowls * - Thiago de Arruda * - updated for Bootstrap v3 by Jonathan Peterson @Eonasdan * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ========================================================= */ (function(i){var q=(window.orientation!==undefined);var b=function(s,k){this.id=n++;this.init(s,k)};var o=function(k){if(typeof k==="string"){return new Date(k)}return k};b.prototype={constructor:b,init:function(s,k){var t=false;this.useMoment=(typeof moment!="undefined");if(!(k.pickTime||k.pickDate)){throw new Error("Must choose at least one picker")}this.options=k;this.$element=i(s);this.language=k.language in a?k.language:"en";this.pickDate=k.pickDate;this.pickTime=k.pickTime;this.isInput=this.$element.is("input");this.component=false;if(this.$element.hasClass("input-group")){this.component=this.$element.find(".input-group-addon")}this.format=k.format;if(!this.format){if(a[this.language].format!=null){this.format=a[this.language].format}else{if(this.isInput){this.format=this.$element.data("format")}else{this.format=this.$element.find("input").data("format")}}if(!this.format){this.format=(this.pickDate?"MM/dd/yyyy":"")}this.format+=(this.pickTime?" hh:mm":"")+(this.pickSeconds?":ss":"")}this._compileFormat();if(this.component){t=this.component.find("span")}if(this.pickTime){if(t&&t.length){this.timeIcon=t.data("time-icon");this.upIcon=t.data("up-icon");this.downIcon=t.data("down-icon")}if(!this.timeIcon){this.timeIcon="glyphicon glyphicon-time"}if(!this.upIcon){this.upIcon="glyphicon glyphicon-chevron-up"}if(!this.downIcon){this.downIcon="glyphicon glyphicon-chevron-down"}if(t){t.addClass(this.timeIcon)}}if(this.pickDate){if(t&&t.length){this.dateIcon=t.data("date-icon")}if(!this.dateIcon){this.dateIcon="glyphicon glyphicon-calendar"}if(t){t.removeClass(this.timeIcon);t.addClass(this.dateIcon)}}this.widget=i(d(this.timeIcon,this.upIcon,this.downIcon,k.pickDate,k.pickTime,k.pick12HourFormat,k.pickSeconds,k.collapse)).appendTo("body");this.minViewMode=k.minViewMode||this.$element.data("date-minviewmode")||0;if(typeof this.minViewMode==="string"){switch(this.minViewMode){case"months":this.minViewMode=1;break;case"years":this.minViewMode=2;break;default:this.minViewMode=0;break}}this.viewMode=k.viewMode||this.$element.data("date-viewmode")||0;if(typeof this.viewMode==="string"){switch(this.viewMode){case"months":this.viewMode=1;break;case"years":this.viewMode=2;break;default:this.viewMode=0;break}}if(k.defaultDate!==""){this.setValue(k.defaultDate)}this.startViewMode=this.viewMode;this.weekStart=k.weekStart||this.$element.data("date-weekstart")||0;this.weekEnd=this.weekStart===0?6:this.weekStart-1;setStartDate(k.startDate||this.$element.data("date-startdate"));this.setEndDate(k.endDate||this.$element.data("date-enddate"));this.fillDow();this.fillMonths();this.fillHours();this.fillMinutes();this.fillSeconds();this.update();this.showMode();this._attachDatePickerEvents()},show:function(k){this.widget.show();this.height=this.component?this.component.outerHeight():this.$element.outerHeight();this.place();this.$element.trigger({type:"show",date:this._date});this._attachDatePickerGlobalEvents();if(k){k.stopPropagation();k.preventDefault()}},disable:function(){this.$element.find("input").prop("disabled",true);this._detachDatePickerEvents()},enable:function(){this.$element.find("input").prop("disabled",false);this._attachDatePickerEvents()},hide:function(){var t=this.widget.find(".collapse");for(var k=0;ks.height()){t.top=t.top-(this.widget.height()+this.height+10)}if(this.options.width!==undefined){this.widget.width(this.options.width)}if(this.options.orientation==="left"){this.widget.addClass("left-oriented");t.left=t.left-this.widget.width()+20}if(this._isInFixed()){k="fixed";t.top-=s.scrollTop();t.left-=s.scrollLeft()}if(s.width()");while(k'+a[this.language].daysMin[(k++)%7]+"")}this.widget.find(".datepicker-days thead").append(s)},fillMonths:function(){var s="";var k=0;while(k<12){s+=''+a[this.language].monthsShort[k++]+""}this.widget.find(".datepicker-months td").append(s)},fillDate:function(){var D=this.viewDate.getUTCFullYear();var B=this.viewDate.getUTCMonth();var s=m(this._date.getUTCFullYear(),this._date.getUTCMonth(),this._date.getUTCDate(),0,0,0,0);var C=typeof this.startDate==="object"?this.startDate.getUTCFullYear():-Infinity;var F=typeof this.startDate==="object"?this.startDate.getUTCMonth():-1;var G=typeof this.endDate==="object"?this.endDate.getUTCFullYear():Infinity;var z=typeof this.endDate==="object"?this.endDate.getUTCMonth():12;this.widget.find(".datepicker-days").find(".disabled").removeClass("disabled");this.widget.find(".datepicker-months").find(".disabled").removeClass("disabled");this.widget.find(".datepicker-years").find(".disabled").removeClass("disabled");this.widget.find(".datepicker-days th:eq(1)").text(a[this.language].months[B]+" "+D);var v=m(D,B-1,28,0,0,0,0);var E=j.getDaysInMonth(v.getUTCFullYear(),v.getUTCMonth());v.setUTCDate(E);v.setUTCDate(E-(v.getUTCDay()-this.weekStart+7)%7);if((D==C&&B<=F)||D=z)||D>G){this.widget.find(".datepicker-days th:eq(2)").addClass("disabled")}var y=new Date(v.valueOf());y.setUTCDate(y.getUTCDate()+42);y=y.valueOf();var x=[];var H;var u;while(v.valueOf()");x.push(H)}u="";if(v.getUTCFullYear()D||(v.getUTCFullYear()==D&&v.getUTCMonth()>B)){u+=" new"}}if(v.valueOf()===s.valueOf()){u+=" active"}if((v.valueOf()+86400000)<=this.startDate){u+=" disabled"}if(v.valueOf()>this.endDate){u+=" disabled"}H.append(''+v.getUTCDate()+"");v.setUTCDate(v.getUTCDate()+1)}this.widget.find(".datepicker-days tbody").empty().append(x);var A=this._date.getUTCFullYear();var k=this.widget.find(".datepicker-months").find("th:eq(1)").text(D).end().find("span").removeClass("active");if(A===D){k.eq(this._date.getUTCMonth()).addClass("active")}if(A-1G){this.widget.find(".datepicker-months th:eq(2)").addClass("disabled")}for(var w=0;w<12;w++){if((D==C&&F>w)||(DG)){i(k[w]).addClass("disabled")}}}x="";D=parseInt(D/10,10)*10;var t=this.widget.find(".datepicker-years").find("th:eq(1)").text(D+"-"+(D+9)).end().find("td");this.widget.find(".datepicker-years").find("th").removeClass("disabled");if(C>D){this.widget.find(".datepicker-years").find("th:eq(0)").addClass("disabled")}if(GG)?" disabled":"")+'">'+D+"";D+=1}t.html(x)},fillHours:function(){var u=this.widget.find(".timepicker .timepicker-hours table");u.parent().hide();var t="";if(this.options.pick12HourFormat){var v=1;for(var s=0;s<3;s+=1){t+="";for(var k=0;k<4;k+=1){var w=v.toString();t+=''+f(w,2,"0")+"";v++}t+=""}}else{var v=0;for(var s=0;s<6;s+=1){t+="";for(var k=0;k<4;k+=1){var w=v.toString();t+=''+f(w,2,"0")+"";v++}t+=""}}u.html(t)},fillMinutes:function(){var u=this.widget.find(".timepicker .timepicker-minutes table");u.parent().hide();var t="";var v=0;for(var s=0;s<5;s++){t+="";for(var k=0;k<4;k+=1){var w=v.toString();t+=''+f(w,2,"0")+"";v+=3}t+=""}u.html(t)},fillSeconds:function(){var u=this.widget.find(".timepicker .timepicker-seconds table");u.parent().hide();var t="";var v=0;for(var s=0;s<5;s++){t+="";for(var k=0;k<4;k+=1){var w=v.toString();t+=''+f(w,2,"0")+"";v+=3}t+=""}u.html(t)},fillTime:function(){if(!this._date){return}var x=this.widget.find(".timepicker span[data-time-component]");var u=x.closest("table");var t=this.options.pick12HourFormat;var k=this._date.getUTCHours();var w="AM";if(t){if(k>=12){w="PM"}if(k===0){k=12}else{if(k!=12){k=k%12}}this.widget.find(".timepicker [data-action=togglePeriod]").text(w)}k=f(k.toString(),2,"0");var v=f(this._date.getUTCMinutes().toString(),2,"0");var s=f(this._date.getUTCSeconds().toString(),2,"0");x.filter("[data-time-component=hours]").text(k);x.filter("[data-time-component=minutes]").text(v);x.filter("[data-time-component=seconds]").text(s)},click:function(y){y.stopPropagation();y.preventDefault();this._unset=false;var x=i(y.target).closest("span, td, th");if(x.length===1){if(!x.is(".disabled")){switch(x[0].nodeName.toLowerCase()){case"th":switch(x[0].className){case"switch":this.showMode(1);break;case"prev":case"next":var s=this.viewDate;var t=j.modes[this.viewMode].navFnc;var v=j.modes[this.viewMode].navStep;if(x[0].className==="prev"){v=v*-1}s["set"+t](s["get"+t]()+v);this.fillDate();break}break;case"span":if(x.is(".month")){var w=x.parent().find("span").index(x);this.viewDate.setUTCMonth(w)}else{var u=parseInt(x.text(),10)||0;this.viewDate.setUTCFullYear(u)}if(this.viewMode!==0){this._date=m(this.viewDate.getUTCFullYear(),this.viewDate.getUTCMonth(),this.viewDate.getUTCDate(),this._date.getUTCHours(),this._date.getUTCMinutes(),this._date.getUTCSeconds(),this._date.getUTCMilliseconds());this.notifyChange()}this.showMode(-1);this.fillDate();break;case"td":if(x.is(".day")){var k=parseInt(x.text(),10)||1;var w=this.viewDate.getUTCMonth();var u=this.viewDate.getUTCFullYear();if(x.is(".old")){if(w===0){w=11;u-=1}else{w-=1}}else{if(x.is(".new")){if(w==11){w=0;u+=1}else{w+=1}}}this._date=m(u,w,k,this._date.getUTCHours(),this._date.getUTCMinutes(),this._date.getUTCSeconds(),this._date.getUTCMilliseconds());this.viewDate=m(u,w,Math.min(28,k),0,0,0,0);this.fillDate();this.set();this.notifyChange()}break}}}},actions:{incrementHours:function(k){this._date.setUTCHours(this._date.getUTCHours()+1)},incrementMinutes:function(k){this._date.setUTCMinutes(this._date.getUTCMinutes()+1)},incrementSeconds:function(k){this._date.setUTCSeconds(this._date.getUTCSeconds()+1)},decrementHours:function(k){this._date.setUTCHours(this._date.getUTCHours()-1)},decrementMinutes:function(k){this._date.setUTCMinutes(this._date.getUTCMinutes()-1)},decrementSeconds:function(k){this._date.setUTCSeconds(this._date.getUTCSeconds()-1)},togglePeriod:function(s){var k=this._date.getUTCHours();if(k>=12){k-=12}else{k+=12}this._date.setUTCHours(k)},showPicker:function(){this.widget.find(".timepicker > div:not(.timepicker-picker)").hide();this.widget.find(".timepicker .timepicker-picker").show()},showHours:function(){this.widget.find(".timepicker .timepicker-picker").hide();this.widget.find(".timepicker .timepicker-hours").show()},showMinutes:function(){this.widget.find(".timepicker .timepicker-picker").hide();this.widget.find(".timepicker .timepicker-minutes").show()},showSeconds:function(){this.widget.find(".timepicker .timepicker-picker").hide();this.widget.find(".timepicker .timepicker-seconds").show()},selectHour:function(t){var u=i(t.target);var k=parseInt(u.text(),10);if(this.options.pick12HourFormat){var s=this._date.getUTCHours();if(s>=12){if(k!=12){k=(k+12)%24}}else{if(k===12){k=0}else{k=k%12}}}this._date.setUTCHours(k);this.actions.showPicker.call(this)},selectMinute:function(s){var t=i(s.target);var k=parseInt(t.text(),10);this._date.setUTCMinutes(k);this.actions.showPicker.call(this)},selectSecond:function(s){var t=i(s.target);var k=parseInt(t.text(),10);this._date.setUTCSeconds(k);this.actions.showPicker.call(this)}},doAction:function(s){s.stopPropagation();s.preventDefault();if(!this._date){this._date=m(1970,0,0,0,0,0,0)}var k=i(s.currentTarget).data("action");var t=this.actions[k].apply(this,arguments);this.set();this.fillTime();this.notifyChange();return t},stopEvent:function(k){k.stopPropagation();k.preventDefault()},keydown:function(v){var u=this,t=v.which,s=i(v.target);if(t==8||t==46){setTimeout(function(){u._resetMaskPos(s)})}},keypress:function(v){var u=v.which;if(u==8||u==46){return}var t=i(v.target);var x=String.fromCharCode(u);var w=t.val()||"";w+=x;var s=this._mask[this._maskPos];if(!s){return false}if(s.end!=w.length){return}if(!s.pattern.test(w.slice(s.start))){w=w.slice(0,w.length-1);while((s=this._mask[this._maskPos])&&s.character){w+=s.character;this._maskPos++}w+=x;if(s.end!=w.length){t.val(w);return false}else{if(!s.pattern.test(w.slice(s.start))){t.val(w.slice(0,s.start));return false}else{t.val(w);this._maskPos++;return false}}}else{this._maskPos++}},change:function(s){var k=i(s.target);var t=k.val();if(this._formatPattern.test(t)){this.update();this.setValue(this._date.getTime());this.notifyChange();this.set()}else{if(t&&t.trim()){this.setValue(this._date.getTime());if(this._date){this.set()}else{k.val("")}}else{if(this._date){this.setValue(null);this.notifyChange();this._unset=true}}}this._resetMaskPos(k)},showMode:function(k){if(k){this.viewMode=Math.max(this.minViewMode,Math.min(2,this.viewMode+k))}this.widget.find(".datepicker > div").hide().filter(".datepicker-"+j.modes[this.viewMode].clsName).show()},destroy:function(){this._detachDatePickerEvents();this._detachDatePickerGlobalEvents();this.widget.remove();this.$element.removeData("datetimepicker");this.component.removeData("datetimepicker")},formatDate:function(k){return this.format.replace(c,function(u){var t,v,w,s=u.length;if(u==="ms"){s=1}v=p[u].property;if(v==="Hours12"){w=k.getUTCHours();if(w===0){w=12}else{if(w!==12){w=w%12}}}else{if(v==="Period12"){if(k.getUTCHours()>=12){return"PM"}else{return"AM"}}else{t="get"+v;w=k[t]()}}if(t==="getUTCMonth"){w=w+1}if(t==="getUTCYear"){w=w+1900-2000}return f(w.toString(),s,"0")}).trim()},parseDate:function(y){if(this.useMoment){var x=moment(y);return x}var t,u,w,s,v,k={};if(!(t=this._formatPattern.exec(y))){return null}for(u=1;ut.length){this._maskPos=s;break}else{if(this._mask[s].end===t.length){this._maskPos=s+1;break}}}},_finishParsingDate:function(s){var w,x,u,k,v,y,t;w=s.UTCFullYear;if(s.UTCYear){w=2000+s.UTCYear}if(!w){w=1970}if(s.UTCMonth){x=s.UTCMonth-1}else{x=0}u=s.UTCDate||1;k=s.UTCHours||0;v=s.UTCMinutes||0;y=s.UTCSeconds||0;t=s.UTCMilliseconds||0;if(s.Hours12){k=s.Hours12}if(s.Period12){if(/pm/i.test(s.Period12)){if(k!=12){k=(k+12)%24}}else{k=k%12}}return m(w,x,u,k,v,y,t)},_compileFormat:function(){var u,t,w=[],s=[],x=this.format,k={},v=0,y=0;while(u=h.exec(x)){t=u[0];if(t in p){v++;k[v]=p[t].property;w.push("\\s*"+p[t].getPattern(this)+"\\s*");s.push({pattern:new RegExp(p[t].getPattern(this)),property:p[t].property,start:y,end:y+=t.length})}else{w.push(g(t));s.push({pattern:new RegExp(g(t)),character:t,start:y,end:++y})}x=x.slice(t.length)}this._mask=s;this._maskPos=0;this._formatPattern=new RegExp("^\\s*"+w.join("")+"\\s*$");this._propertiesByIndex=k},_attachDatePickerEvents:function(){var k=this;this.widget.on("click",".datepicker *",i.proxy(this.click,this));this.widget.on("click","[data-action]",i.proxy(this.doAction,this));this.widget.on("mousedown",i.proxy(this.stopEvent,this));if(this.pickDate&&this.pickTime){this.widget.on("click.togglePicker",".accordion-toggle",function(x){x.stopPropagation();var w=i(this);var v=w.closest("ul");var t=v.find(".in");var s=v.find(".collapse:not(.in)");if(t&&t.length){var u=t.data("collapse");if(u&&u.transitioning){return}t.collapse("hide");s.collapse("show");w.find("span").toggleClass(k.timeIcon+" "+k.dateIcon);k.$element.find(".input-group-addon span").toggleClass(k.timeIcon+" "+k.dateIcon)}})}if(this.isInput){this.$element.on({focus:i.proxy(this.show,this),change:i.proxy(this.change,this),blur:i.proxy(this.hide,this)});if(this.options.maskInput){this.$element.on({keydown:i.proxy(this.keydown,this),keypress:i.proxy(this.keypress,this)})}}else{this.$element.on({change:i.proxy(this.change,this)},"input");if(this.options.maskInput){this.$element.on({keydown:i.proxy(this.keydown,this),keypress:i.proxy(this.keypress,this)},"input")}if(this.component){this.component.on("click",i.proxy(this.show,this))}else{this.$element.on("click",i.proxy(this.show,this))}}},_attachDatePickerGlobalEvents:function(){i(window).on("resize.datetimepicker"+this.id,i.proxy(this.place,this));if(!this.isInput){i(document).on("mousedown.datetimepicker"+this.id,i.proxy(this.hide,this))}},_detachDatePickerEvents:function(){this.widget.off("click",".datepicker *",this.click);this.widget.off("click","[data-action]");this.widget.off("mousedown",this.stopEvent);if(this.pickDate&&this.pickTime){this.widget.off("click.togglePicker")}if(this.isInput){this.$element.off({focus:this.show,change:this.change});if(this.options.maskInput){this.$element.off({keydown:this.keydown,keypress:this.keypress})}}else{this.$element.off({change:this.change},"input");if(this.options.maskInput){this.$element.off({keydown:this.keydown,keypress:this.keypress},"input")}if(this.component){this.component.off("click",this.show)}else{this.$element.off("click",this.show)}}},_detachDatePickerGlobalEvents:function(){i(window).off("resize.datetimepicker"+this.id);if(!this.isInput){i(document).off("mousedown.datetimepicker"+this.id)}},_isInFixed:function(){if(this.$element){var s=this.$element.parents();var k=false;for(var t=0;t
    '+j.template+'
  • '+l.getTemplate(s,t,y,v)+"
")}else{if(k){return('")}else{return('")}}}function m(){return new Date(Date.UTC.apply(Date,arguments))}var j={modes:[{clsName:"days",navFnc:"UTCMonth",navStep:1},{clsName:"months",navFnc:"UTCFullYear",navStep:1},{clsName:"years",navFnc:"UTCFullYear",navStep:10}],isLeapYear:function(k){return(((k%4===0)&&(k%100!==0))||(k%400===0))},getDaysInMonth:function(k,s){return[31,(j.isLeapYear(k)?29:28),31,30,31,30,31,31,30,31,30,31][s]},headTemplate:'‹›',contTemplate:''};j.template='
'+j.headTemplate+'
'+j.headTemplate+j.contTemplate+'
'+j.headTemplate+j.contTemplate+"
";var l={hourTemplate:'',minuteTemplate:'',secondTemplate:''};l.getTemplate=function(k,s,u,t){return('
'+(s?'':"")+(k?'':"")+" "+(s?'":"")+(k?'':"")+''+(s?'':"")+(k?'':"")+'
"+l.hourTemplate+' :'+l.minuteTemplate+":'+l.secondTemplate+"
'+(s?'
':""))}})(window.jQuery);