flatpickr
Version:
A lightweight, powerful javascript datetime picker
1 lines • 19.2 kB
JavaScript
;var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},flatpickr=function e(t,n){var a=void 0,i=function(t){return t._flatpickr&&t._flatpickr.destroy(),t._flatpickr=new e.init(t,n),t._flatpickr};if(t.nodeName)return i(t);if(/^#[a-zA-Z0-9\-_]*$/.test(t))return i(document.getElementById(t.slice(1)));a=/^\.[a-zA-Z0-9\-_]*$/.test(t)?document.getElementsByClassName(t.slice(1)):document.querySelectorAll(t);for(var o=[],r=0;r<a.length;r++)o.push(i(a[r]));return 1===o.length?o[0]:{calendars:o,byID:function(e){return document.getElementById(e)._flatpickr}}};flatpickr.init=function(e,t){function n(e,t,n){var a=document.createElement(e);return n&&(a.textContent=n),t&&(a.className=t),a}var a=function(e,t,n){var a=void 0;return function(){for(var i=arguments.length,o=Array(i),r=0;r<i;r++)o[r]=arguments[r];var l=this,c=function(){a=null,n||e.apply(l,o)};clearTimeout(a),a=setTimeout(c,t),n&&!a&&e.apply(l,o)}},i=this,o=void 0,r=void 0,l=void 0,c=void 0,d=void 0,u=void 0,s=void 0,f=void 0,p=void 0,m=void 0,g=void 0,v=void 0,h=void 0,D=void 0,b=void 0,y=void 0,E=void 0,w=void 0,k=void 0,M=void 0,C=void 0,L=void 0,O=void 0,I=void 0,j=void 0,T=void 0,x=void 0,S=void 0,Y=void 0,_=void 0,H=void 0,F=void 0,P=void 0,A=void 0,N=void 0,W=void 0,q=void 0,B=void 0,U=void 0,J=void 0,$=new Date,K=void 0,z=void 0;i.formats={D:function(){return i.l10n.weekdays.shorthand[i.formats.w()]},F:function(){return s(i.formats.n()-1,!1)},H:function(){return u(i.selectedDateObj.getHours())},J:function(){return i.formats.j()+i.l10n.ordinal(i.formats.j())},K:function(){return i.selectedDateObj.getHours()>11?"PM":"AM"},M:function(){return s(i.formats.n()-1,!0)},S:function(){return u(i.selectedDateObj.getSeconds())},U:function(){return i.selectedDateObj.getTime()/1e3},Y:function(){return i.selectedDateObj.getFullYear()},d:function(){return u(i.formats.j())},h:function(){return i.selectedDateObj.getHours()%12?i.selectedDateObj.getHours()%12:12},i:function(){return u(i.selectedDateObj.getMinutes())},j:function(){return i.selectedDateObj.getDate()},l:function(){return i.l10n.weekdays.longhand[i.formats.w()]},m:function(){return u(i.formats.n())},n:function(){return i.selectedDateObj.getMonth()+1},s:function(){return i.selectedDateObj.getSeconds()},w:function(){return i.selectedDateObj.getDay()},y:function(){return String(i.formats.Y()).substring(2)}},i.defaultConfig={utc:!1,wrap:!1,weekNumbers:!1,allowInput:!1,clickOpens:!0,time_24hr:!1,enableTime:!1,noCalendar:!1,dateFormat:"Y-m-d",altInput:!1,altInputClass:"",altFormat:"F j, Y",defaultDate:null,minDate:null,maxDate:null,parseDate:null,enable:[],disable:[],shorthandCurrentMonth:!1,inline:!1,"static":!1,prevArrow:"<",nextArrow:">",enableSeconds:!1,hourIncrement:1,minuteIncrement:5,onChange:null,onOpen:null,onClose:null,onValueUpdate:null},r=function(){t=t||{},i.element=e,o(),i.input=i.config.wrap?e.querySelector("[data-input]"):e,i.input.classList.add("flatpickr-input"),i.config.defaultDate&&(i.config.defaultDate=c(i.config.defaultDate)),(i.input.value||i.config.defaultDate)&&(i.selectedDateObj=c(i.config.defaultDate||i.input.value)),l(),g(),S(),i.uDate=c,i.jumpToDate(),E()},o=function(){i.config={},Object.keys(i.defaultConfig).forEach(function(e){t.hasOwnProperty(e)?i.config[e]=t[e]:i.element.dataset&&i.element.dataset.hasOwnProperty(e.toLowerCase())?i.config[e]=i.element.dataset[e.toLowerCase()]:!i.element.dataset&&i.element.hasAttribute("data-"+e)?i.config[e]=i.element.getAttribute("data-"+e):i.config[e]=flatpickr.init.prototype.defaultConfig[e]||i.defaultConfig[e],"boolean"==typeof i.defaultConfig[e]&&(i.config[e]=i.config[e]===!0||""===i.config[e]||"true"===i.config[e]),"enableTime"===e&&i.config[e]?(i.defaultConfig.dateFormat=i.config.time_24hr?"Y-m-d H:i":"Y-m-d h:i K",i.defaultConfig.altFormat=i.config.time_24hr?"F j, Y H:i":"F j Y, h:i K"):"noCalendar"===e&&i.config[e]&&(i.defaultConfig.dateFormat="h:i K",i.defaultConfig.altFormat="h:i K")})},x=function(){var e=void 0,t=void 0;do e=Math.round(Math.random()*Math.pow(10,10)),t="flatpickr-"+e;while(null!==document.getElementById(t));return t},c=function(e,t){if(t=t||!1,"today"===e)e=new Date,t=!0;else if("string"==typeof e)if(e=e.trim(),i.config.parseDate)e=i.config.parseDate(e);else if(/^\d\d\d\d\-\d{1,2}\-\d\d$/.test(e))e=new Date(e.replace(/(\d)-(\d)/g,"$1/$2"));else if(Date.parse(e))e=new Date(e);else if(/^\d\d\d\d\-\d\d\-\d\d/.test(e))e=new Date(e.replace(/(\d)-(\d)/g,"$1/$2"));else if(/^(\d?\d):(\d\d)/.test(e)){var n=e.match(/^(\d?\d):(\d\d)(:(\d\d))?/),a=void 0!==n[4]?n[4]:0;e=new Date,e.setHours(n[1],n[2],a,0)}else console.error("flatpickr: invalid date string "+e),console.info(i.element);return e instanceof Date&&e.getTime()?(i.config.utc&&!e.fp_isUTC&&(e=e.fp_toUTC()),t&&e.setHours(0,0,0,0),e):null},d=function(e,t){return e.getDate()===t.getDate()&&e.getMonth()===t.getMonth()&&e.getFullYear()===t.getFullYear()},l=function(){K=n("div","flatpickr-wrapper"),i.config.inline||i.config["static"]?(i.element.parentNode.insertBefore(K,i.element),K.appendChild(i.element),K.classList.add(i.config.inline?"inline":"static")):document.body.appendChild(K),i.config.altInput&&(i.altInput=n(i.input.nodeName,i.config.altInputClass+" flatpickr-input"),i.altInput.placeholder=i.input.placeholder,i.altInput.type="text",i.input.type="hidden",i.input.parentNode.insertBefore(i.altInput,i.input.nextSibling))},I=function(){var e=arguments.length<=0||void 0===arguments[0]?i.currentMonth:arguments[0],t=i.currentYear;return 1===e&&(t%4===0&&t%100!==0||t%400===0)?29:i.l10n.daysInMonth[e]},E=function(e){if(i.config.noCalendar&&!i.selectedDateObj)i.selectedDateObj=new Date;else if(!i.selectedDateObj)return;e&&e.target.blur();var t=void 0;if(i.config.enableTime){var n=i.selectedDateObj.getTime(),a=parseInt(i.hourElement.value,10)||0,o=void 0,r=(60+(parseInt(i.minuteElement.value,10)||0))%60;i.config.enableSeconds&&(o=(60+parseInt(i.secondElement.value,10)||0)%60),i.config.time_24hr||(a=a%12+12*("PM"===i.amPM.innerHTML)),i.selectedDateObj.setHours(a,r,void 0===o?i.selectedDateObj.getSeconds():o),i.hourElement.value=u(i.config.time_24hr?a:(12+a)%12+12*(a%12===0)),i.minuteElement.value=u(r),void 0!==o&&(i.secondElement.value=u(o)),t=i.selectedDateObj.getTime()!==n}i.input.value=i.formatDate(i.config.dateFormat),i.altInput&&(i.altInput.value=i.formatDate(i.config.altFormat)),e&&(t||e.target.classList.contains("flatpickr-day"))&&Y(),i.config.onValueUpdate&&i.config.onValueUpdate(i.selectedDateObj,i.input.value)},u=function(e){return("0"+e).slice(-2)},i.formatDate=function(e){for(var t="",n=e.split(""),a=0;a<n.length;a++){var o=n[a];i.formats.hasOwnProperty(o)&&"\\"!==n[a-1]?t+=i.formats[o]():"\\"!==o&&(t+=o)}return t},s=function(e,t){return t||i.config.shorthandCurrentMonth?i.l10n.months.shorthand[e]:i.l10n.months.longhand[e]},f=function(e){if(i.config.minDate&&e<i.config.minDate||i.config.maxDate&&e>i.config.maxDate)return!1;e=c(e,!0);for(var t=i.config.enable.length>0,n=t?i.config.enable:i.config.disable,a=void 0,o=0;o<n.length;o++){if(a=n[o],a instanceof Function&&a(e))return t;if("string"==typeof a&&/^wkd/.test(a)&&e.getDay()===(parseInt(a.slice(-1),10)+i.l10n.firstDayOfWeek-1)%7)return t;if((a instanceof Date||"string"==typeof a&&!/^wkd/.test(a))&&c(a,!0).getTime()===e.getTime())return t;if("object"===("undefined"==typeof a?"undefined":_typeof(a))&&a.hasOwnProperty("from")&&e>=c(a.from)&&e<=c(a.to))return t}return!t},y=function(e){e.preventDefault();var t=Math.max(-1,Math.min(1,e.wheelDelta||-e.deltaY));i.currentYear=e.target.value=parseInt(e.target.value,10)+t,i.redraw()},b=function(e){e.preventDefault();var t=parseInt(e.target.min,10),n=parseInt(e.target.max,10),a=parseInt(e.target.step,10),i=parseInt(e.target.value,10),o=i;"wheel"===e.type&&(o=i+a*Math.max(-1,Math.min(1,e.wheelDelta||-e.deltaY))),o<=t?o=n-a:o>=n&&(o=t+a),e.target.value=u(o)},C=function(){q.textContent=s(i.currentMonth)+" ",W.value=i.currentYear},L=function(){(i.currentMonth<0||i.currentMonth>11)&&(i.currentYear+=i.currentMonth%11,i.currentMonth=(i.currentMonth+12)%12)},j=function(e){var t=K.contains(e.target),n=i.element.contains(e.target)||e.target===i.altInput;!i.isOpen||t||n||i.close()},O=function(e){i.currentMonth+=e,L(),C(),v(),(i.config.noCalendar?F:U).focus()},T=function(e){if(e.preventDefault(),e.stopPropagation(),i.config.allowInput&&e.target===(i.altInput||i.input)&&13===e.which)i.setDate((i.altInput||i.input).value),i.redraw();else if(e.target.classList.contains("flatpickr-day")){var t=e.target.classList.contains("prevMonthDay"),n=e.target.classList.contains("nextMonthDay"),a=i.currentMonth-t+n;(t||n)&&O(+n-t),i.selectedDateObj=new Date(i.currentYear,a,e.target.innerHTML),E(e),v()}},g=function(){_=n("div","flatpickr-calendar"),_.id=x(),U=n("div","flatpickr-days"),U.tabIndex=-1,i.config.noCalendar||(p(),m(),i.config.weekNumbers&&h(),v(),_.appendChild(U)),K.appendChild(_),i.config.enableTime&&D()},p=function(){A=n("div","flatpickr-month"),N=n("span","flatpickr-prev-month"),N.innerHTML=i.config.prevArrow,q=n("span","cur_month"),W=n("input","cur_year"),W.type="number",W.title=i.l10n.scrollTitle,B=n("span","flatpickr-next-month"),B.innerHTML=i.config.nextArrow,P=n("span","flatpickr-current-month"),P.appendChild(q),P.appendChild(W),A.appendChild(N),A.appendChild(P),A.appendChild(B),_.appendChild(A),C()},m=function(){H=n("div","flatpickr-weekdays");var e=i.l10n.firstDayOfWeek,t=i.l10n.weekdays.shorthand.slice();e>0&&e<t.length&&(t=[].concat(t.splice(e,t.length),t.splice(0,e))),i.config.weekNumbers&&(H.innerHTML="<span>"+i.l10n.weekAbbreviation+"</span>"),H.innerHTML+="<span>"+t.join("</span><span>")+"</span>",_.appendChild(H)},h=function(){_.classList.add("hasWeeks"),J=n("div","flatpickr-weeks"),_.appendChild(J)},v=function(){var e=(new Date(i.currentYear,i.currentMonth,1).getDay()-i.l10n.firstDayOfWeek+7)%7,t=I(),a=I((i.currentMonth-1+12)%12),o=document.createDocumentFragment(),r=a+1-e,l=void 0,u=void 0;for(i.config.weekNumbers&&(J.innerHTML=""),U.innerHTML="",i.config.minDate=c(i.config.minDate,!0),i.config.maxDate=c(i.config.maxDate,!0);r<=a;r++){var s=new Date(i.currentYear,i.currentMonth-1,r,0,0,0,0,0),p=f(s),m=n("span",p?"flatpickr-day prevMonthDay":"disabled",r);p&&(m.tabIndex=0),o.appendChild(m)}for(r=1;r<=t;r++){l=new Date(i.currentYear,i.currentMonth,r,0,0,0,0,0),i.config.weekNumbers&&r%7===1&&J.appendChild(n("span","disabled flatpickr-day",l.fp_getWeek())),u=!f(l);var g=n("span",u?"disabled":"flatpickr-day",r);u||(g.tabIndex=0,d(l,$)&&g.classList.add("today"),i.selectedDateObj&&d(l,i.selectedDateObj)&&g.classList.add("selected")),o.appendChild(g)}for(var v=t+1;v<=42-e;v++){var h=new Date(i.currentYear,i.currentMonth+1,v%t,0,0,0,0,0),D=f(h),b=n("span",D?"nextMonthDay flatpickr-day":"disabled",v%t);i.config.weekNumbers&&v%7===1&&J.appendChild(n("span","disabled",h.fp_getWeek())),D&&(b.tabIndex=0),o.appendChild(b)}U.appendChild(o)},D=function(){F=n("div","flatpickr-time"),F.tabIndex=-1;var e=n("span","flatpickr-time-separator",":");i.hourElement=n("input","flatpickr-hour"),i.minuteElement=n("input","flatpickr-minute"),i.hourElement.tabIndex=i.minuteElement.tabIndex=0,i.hourElement.type=i.minuteElement.type="number",i.hourElement.value=i.selectedDateObj?u(i.selectedDateObj.getHours()):12,i.minuteElement.value=i.selectedDateObj?u(i.selectedDateObj.getMinutes()):"00",i.hourElement.step=i.config.hourIncrement,i.minuteElement.step=i.config.minuteIncrement,i.hourElement.min=-i.config.time_24hr,i.hourElement.max=i.config.time_24hr?24:13,i.minuteElement.min=-i.minuteElement.step,i.minuteElement.max=60,i.hourElement.title=i.minuteElement.title=i.l10n.scrollTitle,F.appendChild(i.hourElement),F.appendChild(e),F.appendChild(i.minuteElement),i.config.enableSeconds&&(F.classList.add("has-seconds"),i.secondElement=n("input","flatpickr-second"),i.secondElement.type="number",i.secondElement.value=i.selectedDateObj?u(i.selectedDateObj.getSeconds()):"00",i.secondElement.step=i.minuteElement.step,i.secondElement.min=i.minuteElement.min,i.secondElement.max=i.minuteElement.max,F.appendChild(n("span","flatpickr-time-separator",":")),F.appendChild(i.secondElement)),i.config.time_24hr||(i.amPM=n("span","flatpickr-am-pm",["AM","PM"][i.hourElement.value>11|0]),i.amPM.title=i.l10n.toggleTitle,i.amPM.tabIndex=0,F.appendChild(i.amPM)),_.appendChild(F)},S=function(){document.addEventListener("keydown",k),window.addEventListener("resize",M),i.config.clickOpens&&((i.altInput||i.input).addEventListener("click",i.open),(i.altInput||i.input).addEventListener("focus",i.open)),i.config.wrap&&i.element.querySelector("[data-open]")&&i.element.querySelector("[data-open]").addEventListener("click",i.open),i.config.wrap&&i.element.querySelector("[data-close]")&&i.element.querySelector("[data-close]").addEventListener("click",i.close),i.config.wrap&&i.element.querySelector("[data-toggle]")&&i.element.querySelector("[data-toggle]").addEventListener("click",i.toggle),i.config.wrap&&i.element.querySelector("[data-clear]")&&i.element.querySelector("[data-clear]").addEventListener("click",i.clear),i.config.noCalendar||(N.addEventListener("click",function(){O(-1)}),B.addEventListener("click",function(){O(1)}),W.addEventListener("wheel",y),W.addEventListener("focus",W.select),W.addEventListener("input",function(e){i.currentYear=parseInt(e.target.value,10),i.redraw()}),U.addEventListener("click",T)),document.addEventListener("click",j),document.addEventListener("blur",j,!0),i.config.enableTime&&(i.hourElement.addEventListener("wheel",b),i.minuteElement.addEventListener("wheel",b),i.hourElement.addEventListener("input",b),i.minuteElement.addEventListener("input",b),i.hourElement.addEventListener("mouseout",E),i.minuteElement.addEventListener("mouseout",E),i.hourElement.addEventListener("change",E),i.minuteElement.addEventListener("change",E),i.hourElement.addEventListener("focus",i.hourElement.select),i.minuteElement.addEventListener("focus",i.minuteElement.select),i.config.enableSeconds&&(i.secondElement.addEventListener("wheel",b),i.secondElement.addEventListener("input",b),i.secondElement.addEventListener("mouseout",E),i.secondElement.addEventListener("change",E),i.secondElement.addEventListener("focus",i.secondElement.select)),i.config.time_24hr||(i.amPM.addEventListener("click",w),i.amPM.addEventListener("wheel",w),i.amPM.addEventListener("mouseout",E),i.amPM.addEventListener("keydown",function(e){38!==e.which&&40!==e.which||w(e)}))),document.createEvent?(z=document.createEvent("MouseEvent"),z.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null)):z=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!0})},i.open=function(){i.isOpen||(i.altInput||i.input).disabled||i.config.inline||(i.config["static"]||i.positionCalendar(),i.isOpen=!0,K.classList.add("open"),i.config.allowInput||((i.altInput||i.input).blur(),(i.config.noCalendar?F:U).focus()),(i.altInput||i.input).classList.add("active"),i.config.onOpen&&i.config.onOpen(i.selectedDateObj,i.input.value))},i.positionCalendar=function(){var e=_.offsetHeight,t=i.altInput||i.input,n=t.getBoundingClientRect(),a=window.innerHeight-n.bottom+t.offsetHeight,o=void 0,r=window.pageXOffset+n.left;a<e?(o=window.pageYOffset-e+n.top-2,_.classList.remove("arrowTop"),_.classList.add("arrowBottom")):(o=window.pageYOffset+t.offsetHeight+n.top+2,_.classList.remove("arrowBottom"),_.classList.add("arrowTop")),K.style.top=o+"px",K.style.left=r+"px"},i.toggle=function(){i.isOpen?i.close():i.open()},i.close=function(){i.isOpen=!1,K.classList.remove("open"),(i.altInput||i.input).classList.remove("active"),i.config.onClose&&i.config.onClose(i.selectedDateObj,i.input.value)},i.clear=function(){i.input.value="",i.altInput&&(i.altInput.value=""),i.selectedDateObj=null,Y(),i.jumpToDate()},Y=function(){i.input.dispatchEvent(z),i.config.onChange&&i.config.onChange(i.selectedDateObj,i.input.value)},i.destroy=function(){if(document.removeEventListener("click",j,!1),i.altInput&&i.altInput.parentNode.removeChild(i.altInput),i.config.inline){var e=i.element.parentNode,t=e.removeChild(i.element);e.removeChild(_),e.parentNode.replaceChild(t,e)}else document.getElementsByTagName("body")[0].removeChild(K)},i.redraw=function(){i.config.noCalendar||(C(),v())},i.jumpToDate=function(e){e=c(e||i.selectedDateObj||i.config.defaultDate||i.config.minDate||$),i.currentYear=e.getFullYear(),i.currentMonth=e.getMonth(),i.redraw()},i.setDate=function(e,t){e=c(e),e instanceof Date&&e.getTime()&&(i.selectedDateObj=c(e),i.jumpToDate(i.selectedDateObj),E(),t&&Y())},i.setTime=function(e,t,n){i.selectedDateObj&&(i.hourElement.value=parseInt(e,10)%24,i.minuteElement.value=parseInt(t||0,10)%60,i.config.time_24hr||(i.amPM.innerHTML=e>11?"PM":"AM"),E(),n&&Y())},i.set=function(e,t){e in i.config&&(i.config[e]=t,i.jumpToDate())},w=function(e){e.preventDefault(),i.amPM.textContent=["AM","PM"]["AM"===i.amPM.innerHTML|0]},k=function(e){if(!(!i.isOpen||i.config.enableTime&&F.contains(e.target)))switch(e.which){case 13:T(e);break;case 27:i.close();break;case 37:O(-1);break;case 38:e.preventDefault(),i.currentYear++,i.redraw();break;case 39:O(1);break;case 40:e.preventDefault(),i.currentYear--,i.redraw()}},M=a(function(){!i.isOpen||i.config.inline||i.config["static"]||i.positionCalendar()},300);try{r()}catch(V){console.error(V),console.info(i.element)}return i},flatpickr.init.prototype={defaultConfig:{},l10n:{weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle"}},Date.prototype.fp_incr=function(e){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+parseInt(e,10))},Date.prototype.fp_isUTC=!1,Date.prototype.fp_toUTC=function(){var e=new Date(this.getTime()+6e4*this.getTimezoneOffset());return e.fp_isUTC=!0,e},Date.prototype.fp_getWeek=function(){var e=new Date(this.getTime());e.setHours(0,0,0,0),e.setDate(e.getDate()+3-(e.getDay()+6)%7);var t=new Date(e.getFullYear(),0,4);return 1+Math.round(((e.getTime()-t.getTime())/864e5-3+(t.getDay()+6)%7)/7)},"classList"in document.documentElement||!Object.defineProperty||"undefined"==typeof HTMLElement||Object.defineProperty(HTMLElement.prototype,"classList",{get:function(){var e=this;function t(t){return function(n){var a=e.className.split(/\s+/),i=a.indexOf(n);t(a,i,n),e.className=a.join(" ")}}var n={add:t(function(e,t,n){return~t||e.push(n)}),remove:t(function(e,t){return~t&&e.splice(t,1)}),toggle:t(function(e,t,n){~t?e.splice(t,1):e.push(n)}),contains:function(t){return!!~e.className.split(/\s+/).indexOf(t)}};return n}}),"undefined"!=typeof module&&(module.exports=flatpickr);