10 lines
17 KiB
JavaScript
10 lines
17 KiB
JavaScript
/*!
|
|
* Datepicker v0.6.5
|
|
* https://github.com/fengyuanchen/datepicker
|
|
*
|
|
* Copyright (c) 2014-2018 Chen Fengyuan
|
|
* Released under the MIT license
|
|
*
|
|
* Date: 2018-03-31T06:17:11.587Z
|
|
*/
|
|
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],t):t(e.jQuery)}(this,function(D){"use strict";D=D&&D.hasOwnProperty("default")?D.default:D;var a={autoShow:!1,autoHide:!1,autoPick:!1,inline:!1,container:null,trigger:null,language:"",format:"mm/dd/yyyy",date:null,startDate:null,endDate:null,startView:0,weekStart:0,yearFirst:!1,yearSuffix:"",days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],itemTag:"li",mutedClass:"muted",pickedClass:"picked",disabledClass:"disabled",highlightedClass:"highlighted",template:'<div class="datepicker-container"><div class="datepicker-panel" data-view="years picker"><ul><li data-view="years prev">‹</li><li data-view="years current"></li><li data-view="years next">›</li></ul><ul data-view="years"></ul></div><div class="datepicker-panel" data-view="months picker"><ul><li data-view="year prev">‹</li><li data-view="year current"></li><li data-view="year next">›</li></ul><ul data-view="months"></ul></div><div class="datepicker-panel" data-view="days picker"><ul><li data-view="month prev">‹</li><li data-view="month current"></li><li data-view="month next">›</li></ul><ul data-view="week"></ul><ul data-view="days"></ul></div></div>',offset:10,zIndex:1e3,filter:null,show:null,hide:null,pick:null},e="undefined"!=typeof window?window:{},d="datepicker",s="click."+d,n="focus."+d,r="hide."+d,h="keyup."+d,o="pick."+d,t="resize."+d,l="show."+d,u=d+"-hide",c={},p=0,f=1,g=2,i=Object.prototype.toString;function y(e){return"string"==typeof e}var v=Number.isNaN||e.isNaN;function m(e){return"number"==typeof e&&!v(e)}function w(e){return void 0===e}function k(e){return"date"===(t=e,i.call(t).slice(8,-1).toLowerCase());var t}function b(a,s){for(var e=arguments.length,n=Array(2<e?e-2:0),t=2;t<e;t++)n[t-2]=arguments[t];return function(){for(var e=arguments.length,t=Array(e),i=0;i<e;i++)t[i]=arguments[i];return a.apply(s,n.concat(t))}}function C(e){return'[data-view="'+e+'"]'}function G(e,t){return[31,(i=e,i%4==0&&i%100!=0||i%400==0?29:28),31,30,31,30,31,31,30,31,30,31][t];var i}function $(e,t,i){return Math.min(i,G(e,t))}var x=/(y|m|d)+/g;var F=/\d+/g,M={show:function(){this.built||this.build(),this.shown||this.trigger(l).isDefaultPrevented()||(this.shown=!0,this.$picker.removeClass(u).on(s,D.proxy(this.click,this)),this.showView(this.options.startView),this.inline||(D(window).on(t,this.onResize=b(this.place,this)),D(document).on(s,this.onGlobalClick=b(this.globalClick,this)),D(document).on(h,this.onGlobalKeyup=b(this.globalKeyup,this)),this.place()))},hide:function(){this.shown&&(this.trigger(r).isDefaultPrevented()||(this.shown=!1,this.$picker.addClass(u).off(s,this.click),this.inline||(D(window).off(t,this.onResize),D(document).off(s,this.onGlobalClick),D(document).off(h,this.onGlobalKeyup))))},toggle:function(){this.shown?this.hide():this.show()},update:function(){var e=this.getValue();e!==this.oldValue&&(this.setDate(e,!0),this.oldValue=e)},pick:function(e){var t=this.$element,i=this.date;this.trigger(o,{view:e||"",date:i}).isDefaultPrevented()||(i=this.formatDate(this.date),this.setValue(i),this.isInput&&(t.trigger("input"),t.trigger("change")))},reset:function(){this.setDate(this.initialDate,!0),this.setValue(this.initialValue),this.shown&&this.showView(this.options.startView)},getMonthName:function(e,t){var i=this.options,a=i.monthsShort,s=i.months;return D.isNumeric(e)?e=Number(e):w(t)&&(t=e),!0===t&&(s=a),s[m(e)?e:this.date.getMonth()]},getDayName:function(e,t,i){var a=this.options,s=a.days;return D.isNumeric(e)?e=Number(e):(w(i)&&(i=t),w(t)&&(t=e)),i?s=a.daysMin:t&&(s=a.daysShort),s[m(e)?e:this.date.getDay()]},getDate:function(e){var t=this.date;return e?this.formatDate(t):new Date(t)},setDate:function(e,t){var i=this.options.filter;if(k(e)||y(e)){if(e=this.parseDate(e),D.isFunction(i)&&!1===i.call(this.$element,e))return;this.date=e,this.viewDate=new Date(e),t||this.pick(),this.built&&this.render()}},setStartDate:function(e){(k(e)||y(e))&&(this.startDate=this.parseDate(e),this.built&&this.render())},setEndDate:function(e){(k(e)||y(e))&&(this.endDate=this.parseDate(e),this.built&&this.render())},parseDate:function(e){var a=this.format,t=[];if(k(e))return new Date(e.getFullYear(),e.getMonth(),e.getDate());y(e)&&(t=e.match(F)||[]),e=new Date;var i=a.parts.length,s=e.getFullYear(),n=e.getDate(),r=e.getMonth();return t.length===i&&D.each(t,function(e,t){var i=parseInt(t,10)||1;switch(a.parts[e]){case"dd":case"d":n=i;break;case"mm":case"m":r=i-1;break;case"yy":s=2e3+i;break;case"yyyy":s=i}}),new Date(s,r,n)},formatDate:function(e){var t=this.format,i="";if(k(e)){var a=e.getFullYear(),s={d:e.getDate(),m:e.getMonth()+1,yy:a.toString().substring(2),yyyy:a};s.dd=(s.d<10?"0":"")+s.d,s.mm=(s.m<10?"0":"")+s.m,i=t.source,D.each(t.parts,function(e,t){i=i.replace(t,s[t])})}return i},destroy:function(){this.unbind(),this.unbuild(),this.$element.removeData(d)}},V={click:function(e){var t=D(e.target),i=this.options,a=this.viewDate,s=this.format;if(e.stopPropagation(),e.preventDefault(),!t.hasClass("disabled")){var n=t.data("view"),r=a.getFullYear(),h=a.getMonth(),o=a.getDate();switch(n){case"years prev":case"years next":r="years prev"===n?r-10:r+10,this.viewDate=new Date(r,h,$(r,h,o)),this.renderYears();break;case"year prev":case"year next":r="year prev"===n?r-1:r+1,this.viewDate=new Date(r,h,$(r,h,o)),this.renderMonths();break;case"year current":s.hasYear&&this.showView(g);break;case"year picked":s.hasMonth?this.showView(f):(t.addClass(i.pickedClass).siblings().removeClass(i.pickedClass),this.hideView()),this.pick("year");break;case"year":r=parseInt(t.text(),10),this.date=new Date(r,h,$(r,h,o)),s.hasMonth?(this.viewDate=new Date(this.date),this.showView(f)):(t.addClass(i.pickedClass).siblings().removeClass(i.pickedClass),this.hideView()),this.pick("year");break;case"month prev":case"month next":(h="month prev"===n?h-1:h+1)<0?(r-=1,h+=12):11<h&&(r+=1,h-=12),this.viewDate=new Date(r,h,$(r,h,o)),this.renderDays();break;case"month current":s.hasMonth&&this.showView(f);break;case"month picked":s.hasDay?this.showView(p):(t.addClass(i.pickedClass).siblings().removeClass(i.pickedClass),this.hideView()),this.pick("month");break;case"month":h=D.inArray(t.text(),i.monthsShort),this.date=new Date(r,h,$(r,h,o)),s.hasDay?(this.viewDate=new Date(r,h,$(r,h,o)),this.showView(p)):(t.addClass(i.pickedClass).siblings().removeClass(i.pickedClass),this.hideView()),this.pick("month");break;case"day prev":case"day next":case"day":"day prev"===n?h-=1:"day next"===n&&(h+=1),o=parseInt(t.text(),10),this.date=new Date(r,h,o),this.viewDate=new Date(r,h,o),this.renderDays(),"day"===n&&this.hideView(),this.pick("day");break;case"day picked":this.hideView(),this.pick("day")}}},globalClick:function(e){for(var t=e.target,i=this.element,a=this.$trigger[0],s=!0;t!==document;){if(t===a||t===i){s=!1;break}t=t.parentNode}s&&this.hide()},keyup:function(){this.update()},globalKeyup:function(e){var t=e.target,i=e.key,a=e.keyCode;this.isInput&&t!==this.element&&this.shown&&("Tab"===i||9===a)&&this.hide()}},Y={render:function(){this.renderYears(),this.renderMonths(),this.renderDays()},renderWeek:function(){var i=this,a=[],e=this.options,t=e.weekStart,s=e.daysMin;t=parseInt(t,10)%7,s=s.slice(t).concat(s.slice(0,t)),D.each(s,function(e,t){a.push(i.createItem({text:t}))}),this.$week.html(a.join(""))},renderYears:function(){var e=this.options,t=this.startDate,i=this.endDate,a=e.disabledClass,s=e.filter,n=e.yearSuffix,r=this.viewDate.getFullYear(),h=(new Date).getFullYear(),o=this.date.getFullYear(),l=[],d=!1,u=!1,c=void 0;for(c=-5;c<=6;c+=1){var p=new Date(r+c,1,1),f=!1;t&&(f=p.getFullYear()<t.getFullYear(),-5===c&&(d=f)),!f&&i&&(f=p.getFullYear()>i.getFullYear(),6===c&&(u=f)),!f&&s&&(f=!1===s.call(this.$element,p));var g=r+c===o,y=g?"year picked":"year";l.push(this.createItem({picked:g,disabled:f,text:r+c,view:f?"year disabled":y,highlighted:p.getFullYear()===h}))}this.$yearsPrev.toggleClass(a,d),this.$yearsNext.toggleClass(a,u),this.$yearsCurrent.toggleClass(a,!0).html(r+-5+n+" - "+(r+6)+n),this.$years.html(l.join(""))},renderMonths:function(){var e=this.options,t=this.startDate,i=this.endDate,a=this.viewDate,s=e.disabledClass||"",n=e.monthsShort,r=D.isFunction(e.filter)&&e.filter,h=a.getFullYear(),o=new Date,l=o.getFullYear(),d=o.getMonth(),u=this.date.getFullYear(),c=this.date.getMonth(),p=[],f=!1,g=!1,y=void 0;for(y=0;y<=11;y+=1){var v=new Date(h,y,1),m=!1;t&&(m=(f=v.getFullYear()===t.getFullYear())&&v.getMonth()<t.getMonth()),!m&&i&&(m=(g=v.getFullYear()===i.getFullYear())&&v.getMonth()>i.getMonth()),!m&&r&&(m=!1===r.call(this.$element,v));var w=h===u&&y===c,k=w?"month picked":"month";p.push(this.createItem({disabled:m,picked:w,highlighted:h===l&&v.getMonth()===d,index:y,text:n[y],view:m?"month disabled":k}))}this.$yearPrev.toggleClass(s,f),this.$yearNext.toggleClass(s,g),this.$yearCurrent.toggleClass(s,f&&g).html(h+e.yearSuffix||""),this.$months.html(p.join(""))},renderDays:function(){var e=this.$element,t=this.options,i=this.startDate,a=this.endDate,s=this.viewDate,n=this.date,r=t.disabledClass,h=t.filter,o=t.monthsShort,l=t.weekStart,d=t.yearSuffix,u=s.getFullYear(),c=s.getMonth(),p=new Date,f=p.getFullYear(),g=p.getMonth(),y=p.getDate(),v=n.getFullYear(),m=n.getMonth(),w=n.getDate(),k=void 0,D=void 0,b=void 0,C=[],$=u,x=c,F=!1;0===c?($-=1,x=11):x-=1,k=G($,x);var M=new Date(u,c,1);for((b=M.getDay()-parseInt(l,10)%7)<=0&&(b+=7),i&&(F=M.getTime()<=i.getTime()),D=k-(b-1);D<=k;D+=1){var V=new Date($,x,D),Y=!1;i&&(Y=V.getTime()<i.getTime()),!Y&&h&&(Y=!1===h.call(e,V)),C.push(this.createItem({disabled:Y,highlighted:$===f&&x===g&&V.getDate()===y,muted:!0,picked:$===v&&x===m&&D===w,text:D,view:"day prev"}))}var I=[],S=u,T=c,N=!1;11===c?(S+=1,T=0):T+=1,k=G(u,c),b=42-(C.length+k);var P=new Date(u,c,k);for(a&&(N=P.getTime()>=a.getTime()),D=1;D<=b;D+=1){var j=new Date(S,T,D),q=S===v&&T===m&&D===w,A=!1;a&&(A=j.getTime()>a.getTime()),!A&&h&&(A=!1===h.call(e,j)),I.push(this.createItem({disabled:A,picked:q,highlighted:S===f&&T===g&&j.getDate()===y,muted:!0,text:D,view:"day next"}))}var W=[];for(D=1;D<=k;D+=1){var z=new Date(u,c,D),J=!1;i&&(J=z.getTime()<i.getTime()),!J&&a&&(J=z.getTime()>a.getTime()),!J&&h&&(J=!1===h.call(e,z));var O=u===v&&c===m&&D===w,E=O?"day picked":"day";W.push(this.createItem({disabled:J,picked:O,highlighted:u===f&&c===g&&z.getDate()===y,text:D,view:J?"day disabled":E}))}this.$monthPrev.toggleClass(r,F),this.$monthNext.toggleClass(r,N),this.$monthCurrent.toggleClass(r,F&&N).html(t.yearFirst?u+d+" "+o[c]:o[c]+" "+u+d),this.$days.html(C.join("")+W.join("")+I.join(""))}},I=function(){function a(e,t){for(var i=0;i<t.length;i++){var a=t[i];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(e,t,i){return t&&a(e.prototype,t),i&&a(e,i),e}}();var S=d+"-top-left",T=d+"-bottom-left",N=[S,d+"-top-right",T,d+"-bottom-right"].join(" "),P=function(){function i(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i),this.$element=D(e),this.element=e,this.options=D.extend({},a,c[t.language],t),this.built=!1,this.shown=!1,this.isInput=!1,this.inline=!1,this.initialValue="",this.initialDate=null,this.startDate=null,this.endDate=null,this.init()}return I(i,[{key:"init",value:function(){var e=this.$element,t=this.options,i=t.startDate,a=t.endDate,s=t.date;this.$trigger=D(t.trigger),this.isInput=e.is("input")||e.is("textarea"),this.inline=t.inline&&(t.container||!this.isInput),this.format=function(i){var e=String(i).toLowerCase(),t=e.match(x);if(!t||0===t.length)throw new Error("Invalid date format.");return i={source:e,parts:t},D.each(t,function(e,t){switch(t){case"dd":case"d":i.hasDay=!0;break;case"mm":case"m":i.hasMonth=!0;break;case"yyyy":case"yy":i.hasYear=!0}}),i}(t.format);var n=this.getValue();this.initialValue=n,this.oldValue=n,s=this.parseDate(s||n),i&&(i=this.parseDate(i),s.getTime()<i.getTime()&&(s=new Date(i)),this.startDate=i),a&&(a=this.parseDate(a),i&&a.getTime()<i.getTime()&&(a=new Date(i)),s.getTime()>a.getTime()&&(s=new Date(a)),this.endDate=a),this.date=s,this.viewDate=new Date(s),this.initialDate=new Date(this.date),this.bind(),(t.autoShow||this.inline)&&this.show(),t.autoPick&&this.pick()}},{key:"build",value:function(){if(!this.built){this.built=!0;var e=this.$element,t=this.options,i=D(t.template);this.$picker=i,this.$week=i.find(C("week")),this.$yearsPicker=i.find(C("years picker")),this.$yearsPrev=i.find(C("years prev")),this.$yearsNext=i.find(C("years next")),this.$yearsCurrent=i.find(C("years current")),this.$years=i.find(C("years")),this.$monthsPicker=i.find(C("months picker")),this.$yearPrev=i.find(C("year prev")),this.$yearNext=i.find(C("year next")),this.$yearCurrent=i.find(C("year current")),this.$months=i.find(C("months")),this.$daysPicker=i.find(C("days picker")),this.$monthPrev=i.find(C("month prev")),this.$monthNext=i.find(C("month next")),this.$monthCurrent=i.find(C("month current")),this.$days=i.find(C("days")),this.inline?D(t.container||e).append(i.addClass(d+"-inline")):(D(document.body).append(i.addClass(d+"-dropdown")),i.addClass(u)),this.renderWeek()}}},{key:"unbuild",value:function(){this.built&&(this.built=!1,this.$picker.remove())}},{key:"bind",value:function(){var e=this.options,t=this.$element;D.isFunction(e.show)&&t.on(l,e.show),D.isFunction(e.hide)&&t.on(r,e.hide),D.isFunction(e.pick)&&t.on(o,e.pick),this.isInput&&t.on(h,D.proxy(this.keyup,this)),this.inline||(e.trigger?this.$trigger.on(s,D.proxy(this.toggle,this)):this.isInput?t.on(n,D.proxy(this.show,this)):t.on(s,D.proxy(this.show,this)))}},{key:"unbind",value:function(){var e=this.$element,t=this.options;D.isFunction(t.show)&&e.off(l,t.show),D.isFunction(t.hide)&&e.off(r,t.hide),D.isFunction(t.pick)&&e.off(o,t.pick),this.isInput&&e.off(h,this.keyup),this.inline||(t.trigger?this.$trigger.off(s,this.toggle):this.isInput?e.off(n,this.show):e.off(s,this.show))}},{key:"showView",value:function(e){var t=this.$yearsPicker,i=this.$monthsPicker,a=this.$daysPicker,s=this.format;if(s.hasYear||s.hasMonth||s.hasDay)switch(Number(e)){case g:i.addClass(u),a.addClass(u),s.hasYear?(this.renderYears(),t.removeClass(u),this.place()):this.showView(p);break;case f:t.addClass(u),a.addClass(u),s.hasMonth?(this.renderMonths(),i.removeClass(u),this.place()):this.showView(g);break;default:t.addClass(u),i.addClass(u),s.hasDay?(this.renderDays(),a.removeClass(u),this.place()):this.showView(f)}}},{key:"hideView",value:function(){!this.inline&&this.options.autoHide&&this.hide()}},{key:"place",value:function(){if(!this.inline){var e=this.$element,t=this.options,i=this.$picker,a=D(document).outerWidth(),s=D(document).outerHeight(),n=e.outerWidth(),r=e.outerHeight(),h=i.width(),o=i.height(),l=e.offset(),d=l.left,u=l.top,c=parseFloat(t.offset),p=S;v(c)&&(c=10),o<u&&s<u+r+o?(u-=o+c,p=T):u+=r+c,a<d+h&&(d+=n-h,p=p.replace("left","right")),i.removeClass(N).addClass(p).css({top:u,left:d,zIndex:parseInt(t.zIndex,10)})}}},{key:"trigger",value:function(e,t){var i=D.Event(e,t);return this.$element.trigger(i),i}},{key:"createItem",value:function(e){var t=this.options,i=t.itemTag,a={text:"",view:"",muted:!1,picked:!1,disabled:!1,highlighted:!1},s=[];return D.extend(a,e),a.muted&&s.push(t.mutedClass),a.highlighted&&s.push(t.highlightedClass),a.picked&&s.push(t.pickedClass),a.disabled&&s.push(t.disabledClass),"<"+i+' class="'+s.join(" ")+'" data-view="'+a.view+'">'+a.text+"</"+i+">"}},{key:"getValue",value:function(){var e=this.$element;return this.isInput?e.val():e.text()}},{key:"setValue",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"",t=this.$element;this.isInput?t.val(e):t.text(e)}}],[{key:"setDefaults",value:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};D.extend(a,c[e.language],e)}}]),i}();if(D.extend&&D.extend(P.prototype,Y,V,M),D.fn){var j=D.fn.datepicker;D.fn.datepicker=function(h){for(var e=arguments.length,o=Array(1<e?e-1:0),t=1;t<e;t++)o[t-1]=arguments[t];var l=void 0;return this.each(function(e,t){var i=D(t),a="destroy"===h,s=i.data(d);if(!s){if(a)return;var n=D.extend({},i.data(),D.isPlainObject(h)&&h);s=new P(t,n),i.data(d,s)}if(y(h)){var r=s[h];D.isFunction(r)&&(l=r.apply(s,o),a&&i.removeData(d))}}),w(l)?this:l},D.fn.datepicker.Constructor=P,D.fn.datepicker.languages=c,D.fn.datepicker.setDefaults=P.setDefaults,D.fn.datepicker.noConflict=function(){return D.fn.datepicker=j,this}}}); |