flatpickr
Version:
A lightweight, powerful datetimepicker
1 lines • 11.9 kB
JavaScript
;var flatpickr=function e(t,n){var a=void 0,r=void 0,i=function(t){return t._flatpickr&&t._flatpickr.destroy(),t._flatpickr=new e.init(t,n),t._flatpickr};return t.nodeName?i(t):/^\#[a-zA-Z0-9\-\_]*$/.test(t)?i(document.getElementById(t.slice(1))):(a=/^\.[a-zA-Z0-9\-\_]*$/.test(t)?document.getElementsByClassName(t.slice(1)):document.querySelectorAll(t),r=[].slice.call(a).map(i),{calendars:r,byID:function(e){for(var t=0;t<r.length;t++)if(r[t].element.id===e)return r[t]}})};flatpickr.init=function(e,t){var n,a,r,i,c,l,o,u,s,d,f,p,m,g,h,v,D,M,b,y,L,E,k,w,O,j,C,T,I=this,N=document.createElement("div"),H=document.createElement("span"),S=document.createElement("div"),Y=document.createElement("span"),x=document.createElement("span"),F=document.createElement("span"),A=document.createElement("span"),_=document.createElement("div"),q=new Date,J=document.createElement("div");return L=function(){H.className="flatpickr-current-month",N.className="flatpickr-calendar",_.className="flatpickr-days",t=t||{},I.config={},I.element=e;for(var r in I.defaultConfig)I.config[r]=t[r]||I.element.dataset&&I.element.dataset[r.toLowerCase()]||I.element.getAttribute("data-"+r)||I.defaultConfig[r];I.input=I.config.wrap?e.querySelector("[data-input]"):e,I.config.defaultDate&&(I.config.defaultDate=a(I.config.defaultDate)),(I.input.value||I.config.defaultDate)&&(I.selectedDateObj=a(I.config.defaultDate||I.input.value)),I.jumpToDate(),n(),b(),y(),m()},a=function(e,t){if(t=t||!1,"today"===e)e=new Date,t=!0;else if("string"==typeof e)return Date.parse(e)?new Date(e):I.config.noCalendar&&/\d\d[:\s]\d\d/.test(e)?new Date(q.toDateString()+" "+e):(console.error("flatpickr: invalid date string "+e),console.info(I.element),null);return t&&e&&e.setHours(0,0,0,0),e},r=function(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()},n=function(){J.className="flatpickr-wrapper",I.element.parentNode.insertBefore(J,I.element),J.appendChild(I.element),I.config.inline&&J.classList.add("inline"),I.config.altInput&&(I.altInput=document.createElement(I.input.nodeName),I.altInput.placeholder=I.input.placeholder,I.altInput.type=I.input.type||"text",I.input.type="hidden",J.appendChild(I.altInput))},w=function(e){var t=I.currentYear,n=e||I.currentMonth;return 1===n&&t%4===0&&t%100!==0||t%400===0?29:I.l10n.daysInMonth[n]},m=function(){if(I.selectedDateObj&&I.config.enableTime){var e=parseInt(O.value),t=(60+parseInt(j.value))%60;I.config.time_24hr||(e=e%12+12*("PM"===C.innerHTML)),I.selectedDateObj.setHours(e,t),O.value=i(I.config.time_24hr?e:(12+e)%12+12*(e%12===0)),j.value=i(t)}I.altInput&&I.selectedDateObj&&(I.altInput.value=c(I.config.altFormat)),I.selectedDateObj&&(I.input.value=c(I.config.dateFormat)),E()},i=function(e){return("0"+e).slice(-2)},c=function(e){I.config.noCalendar&&(e=""),I.config.enableTime&&(e+=" "+I.config.timeFormat);for(var t="",n={D:function(){return I.l10n.weekdays.shorthand[n.w()]},F:function(){return l(n.n()-1,!1)},H:function(){return i(I.selectedDateObj.getHours())},K:function(){return I.selectedDateObj.getHours()>11?"PM":"AM"},M:function(){return l(n.n()-1,!0)},U:function(){return I.selectedDateObj.getTime()/1e3},Y:function(){return I.selectedDateObj.getFullYear()},d:function(){return i(n.j())},h:function(){return I.selectedDateObj.getHours()%12?I.selectedDateObj.getHours()%12:12},i:function(){return i(I.selectedDateObj.getMinutes())},j:function(){return I.selectedDateObj.getDate()},l:function(){return I.l10n.weekdays.longhand[n.w()]},m:function(){return i(n.n())},n:function(){return I.selectedDateObj.getMonth()+1},w:function(){return I.selectedDateObj.getDay()},y:function(){return String(n.Y()).substring(2)}},a=e.split(""),r=0;r<a.length;r++)n[a[r]]&&"\\"!==a[r-1]?t+=n[a[r]]():"\\"!==a[r]&&(t+=a[r]);return t},l=function(e,t){return t=t||I.config.shorthandCurrentMonth,t?I.l10n.months.shorthand[e]:I.l10n.months.longhand[e]},o=function(e){for(var t=0;t<I.config.disable.length;t++)if(e>=a(I.config.disable[t].from)&&e<=a(I.config.disable[t].to))return!0;return!1},p=function(e){e.preventDefault();var t=Math.max(-1,Math.min(1,e.wheelDelta||-e.deltaY));I.currentYear=e.target.innerHTML=parseInt(e.target.innerHTML,10)+t,I.redraw()},f=function(e){e.preventDefault();var t=parseInt(e.target.min),n=parseInt(e.target.max),a=parseInt(e.target.step),r=a*Math.max(-1,Math.min(1,e.wheelDelta||-e.deltaY)),c=(parseInt(e.target.value)+r)%(n+(0===t));t>c&&(c=n+(0===t)-a*(0===t)),e.target.value=i(c)},g=function(){F.innerHTML=l(I.currentMonth)+" ",x.innerHTML=I.currentYear},v=function(){(I.currentMonth<0||I.currentMonth>11)&&(I.currentYear+=I.currentMonth%11,I.currentMonth=(I.currentMonth+12)%12)},D=function(e){J.classList.contains("open")&&!J.contains(e.target)&&I.close()},k=function(e){I.currentMonth+=e,v(),g(),s()},M=function(e){e.preventDefault(),e.target.classList.contains("slot")&&(I.selectedDateObj=new Date(I.currentYear,I.currentMonth,e.target.innerHTML),m(),s(),I.config.inline||I.config.enableTime||I.close())},b=function(){I.config.noCalendar||(h(),u(),s(),N.appendChild(_)),J.appendChild(N),I.config.enableTime&&d()},h=function(){S.className="flatpickr-month",Y.className="flatpickr-prev-month",Y.innerHTML=I.config.prevArrow,A.className="flatpickr-next-month",A.innerHTML=I.config.nextArrow,F.className="cur_month",x.className="cur_year",x.title="Scroll to increment",H.appendChild(F),H.appendChild(x),S.appendChild(Y),S.appendChild(H),S.appendChild(A),g(),N.appendChild(S)},u=function(){var e=document.createElement("div"),t=I.l10n.firstDayOfWeek,n=I.l10n.weekdays.shorthand.slice();e.className="flatpickr-weekdays",t>0&&t<n.length&&(n=[].concat(n.splice(t,n.length),n.splice(0,t))),e.innerHTML="<span>"+n.join("</span><span>")+"</span>",N.appendChild(e)},s=function(){var e=(new Date(I.currentYear,I.currentMonth,1).getDay()-I.l10n.firstDayOfWeek+7)%7,t=w(),n=w((I.currentMonth-1+12)%12),i=n+1-e,c=void 0,l=void 0,u=void 0,s=void 0;for(_.innerHTML="",I.config.minDate=a("today"===I.config.minDate?new Date:I.config.minDate,!0),I.config.maxDate=a(I.config.maxDate,!0);n>=i;i++){var d=document.createElement("span");d.className="disabled flatpickr-day",d.innerHTML=i,_.appendChild(d)}for(i=1;42-e>=i;i++){t>=i&&(l=new Date(I.currentYear,I.currentMonth,i)),s=I.config.minDate&&l<I.config.minDate||I.config.maxDate&&l>I.config.maxDate,u=i>t||s||o(l),c=u?"disabled flatpickr-day":"slot flatpickr-day",u||I.selectedDateObj||!r(l,q)||(c+=" today"),!u&&I.selectedDateObj&&r(l,I.selectedDateObj)&&(c+=" selected");var f=document.createElement("span");f.className=c,f.innerHTML=i>t?i%t:i,_.appendChild(f)}},d=function(){var e=document.createElement("div"),t=document.createElement("span");e.className="flatpickr-time",O=document.createElement("input"),j=document.createElement("input"),t.className="flatpickr-time-separator",t.innerHTML=":",O.type=j.type="number",O.className="flatpickr-hour",j.className="flatpickr-minute",O.value=I.selectedDateObj?i(I.selectedDateObj.getHours()):12,j.value=I.selectedDateObj?i(I.selectedDateObj.getMinutes()):"00",O.step=I.config.hourIncrement,j.step=I.config.minuteIncrement,O.min=+!I.config.time_24hr,O.max=I.config.time_24hr?23:12,j.min=0,j.max=59,O.title=j.title="Scroll to increment",e.appendChild(O),e.appendChild(t),e.appendChild(j),I.config.time_24hr||(C=document.createElement("span"),C.className="flatpickr-am-pm",C.innerHTML=["AM","PM"][O.value>11|0],C.title="Click to toggle",e.appendChild(C)),N.appendChild(e)},y=function(){function e(e){e.preventDefault(),C.innerHTML=["AM","PM"]["AM"===C.innerHTML|0]}"true"===String(I.config.clickOpens)&&(I.input.addEventListener("focus",I.open),I.altInput&&I.altInput.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),Y.addEventListener("click",function(){k(-1)}),A.addEventListener("click",function(){k(1)}),x.addEventListener("wheel",p),_.addEventListener("click",M),document.addEventListener("click",D,!0),I.config.enableTime&&(O.addEventListener("wheel",f),j.addEventListener("wheel",f),O.addEventListener("mouseout",m),j.addEventListener("mouseout",m),O.addEventListener("change",m),j.addEventListener("change",m),O.addEventListener("click",function(){O.select()}),j.addEventListener("click",function(){j.select()}),I.config.time_24hr||(C.addEventListener("focus",function(){return C.blur()}),C.addEventListener("click",e),C.addEventListener("wheel",e),C.addEventListener("mouseout",m))),document.createEvent?(T=document.createEvent("MouseEvent"),T.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null)):T=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!0})},I.open=function(){I.input.disabled||I.config.inline||(I.input.blur(),I.input.classList.add("active"),I.altInput&&(I.altInput.blur(),I.altInput.classList.add("active")),I.element.parentNode.classList.add("open"),I.config.onOpen&&I.config.onOpen())},I.toggle=function(){I.input.disabled||(I.element.parentNode.classList.toggle("open"),I.altInput&&I.altInput.classList.toggle("active"),I.input.classList.toggle("active"))},I.close=function(){I.element.parentNode.classList.remove("open"),I.input.classList.remove("active"),I.altInput&&I.altInput.classList.remove("active"),I.config.onClose&&I.config.onClose()},I.clear=function(){I.input.value="",I.selectedDateObj=null,I.jumpToDate()},E=function(){I.input.dispatchEvent(T),I.config.onChange&&I.config.onChange(I.selectedDateObj,I.input.value)},I.destroy=function(){var e=I.element.parentNode,t=e.removeChild(I.element);document.removeEventListener("click",D,!1),e.removeChild(N),e.parentNode.replaceChild(t,e)},I.redraw=function(){g(),s()},I.jumpToDate=function(e){e=a(e||I.selectedDateObj||I.config.defaultDate||I.config.minDate||q),I.currentYear=e.getFullYear(),I.currentMonth=e.getMonth(),I.redraw()},I.setDate=function(e,t){I.selectedDateObj=a(e),I.jumpToDate(I.selectedDateObj),m(),t=t||!1,t&&E()},I.set=function(e,t){e in I.config&&(I.config[e]=t,I.jumpToDate())},L(),I},flatpickr.init.prototype={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},defaultConfig:{noCalendar:!1,wrap:!1,clickOpens:!0,dateFormat:"Y-m-d",altInput:!1,altFormat:"F j, Y",defaultDate:null,minDate:null,maxDate:null,disable:[],shorthandCurrentMonth:!1,inline:!1,prevArrow:"<",nextArrow:">",enableTime:!1,timeFormat:"h:i K",time_24hr:!1,hourIncrement:1,minuteIncrement:5,onChange:null,onOpen:null,onClose:null}},Date.prototype.fp_incr=function(e){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+parseInt(e,10))},"classList"in document.documentElement||!Object.defineProperty||"undefined"==typeof HTMLElement||Object.defineProperty(HTMLElement.prototype,"classList",{get:function(){function e(e){return function(n){var a=t.className.split(/\s+/),r=a.indexOf(n);e(a,r,n),t.className=a.join(" ")}}var t=this,n={add:e(function(e,t,n){~t||e.push(n)}),remove:e(function(e,t){~t&&e.splice(t,1)}),toggle:e(function(e,t,n){~t?e.splice(t,1):e.push(n)}),contains:function(e){return!!~t.className.split(/\s+/).indexOf(e)}};return n}}),"undefined"!=typeof module&&(module.exports=flatpickr);