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