forked from qodesmith/datepicker
-
Notifications
You must be signed in to change notification settings - Fork 0
/
datepicker.min.js
1 lines (1 loc) · 8.33 KB
/
datepicker.min.js
1
!function(e,t){var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};return"object"===("undefined"==typeof exports?"undefined":n(exports))?module.exports=t():"function"==typeof define&&define.amd?define(function(){return t()}):e.datepicker=t()}(this,function(){"use strict";function e(e,o){var a="string"==typeof e?document.querySelector(e):e,i=a.parentElement;o=t(o||n(),a,e);var s=document.createElement("div"),c=o,d=c.startDate,u=c.dateSelected,f=a===document.body||a===document.querySelector("html"),p={el:a,parent:i,nonInput:"INPUT"!==a.nodeName,noPosition:f,position:!f&&o.position,startDate:d,dateSelected:u,minDate:o.minDate,maxDate:o.maxDate,noWeekends:!!o.noWeekends,calendar:s,currentMonth:(d||u).getMonth(),currentMonthName:(o.months||S)[(d||u).getMonth()],currentYear:(d||u).getFullYear(),setDate:h,remove:v,onSelect:o.onSelect,onShow:o.onShow,onHide:o.onHide,onMonthChange:o.onMonthChange,formatter:o.formatter,months:o.months,days:o.days,disableMobile:o.disableMobile,isMobile:"ontouchstart"in window};return u&&l(a,p),s.classList.add("qs-datepicker"),s.classList.add("qs-hidden"),b.push(a),r(d||u,p),m(s,p),w.forEach(function(e){window.addEventListener(e,y.bind(p))}),"static"===getComputedStyle(i).position&&(i.style.position="relative"),i.appendChild(s),p}function t(e,t){if(!t)throw new Error("An invalid selector or non-DOM node has been provided.");if(b.includes(t))throw new Error("A datepicker already exists on that element.");var n=e.position,r=e.maxDate,a=e.minDate,i=e.dateSelected,s=e.formatter,c=e.customMonths,l=e.customDays;if(n){var d=["tr","tl","br","bl"].some(function(e){return n===e}),u='"options.position" needs to be one of the following: tl, tr, bl, or br.';if(!d)throw new Error(u);e.position=o(n)}else e.position=o("bl");if(["startDate","dateSelected","minDate","maxDate"].forEach(function(t){if(e[t]){if(!f(e[t])||isNaN(+e[t]))throw new TypeError('"options.'+t+'" needs to be a valid JavaScript Date object.');e[t]=p(e[t])}}),e.startDate=e.startDate||e.dateSelected||p(new Date),e.formatter="function"==typeof s?s:null,r<a)throw new Error('"maxDate" in options is less than "minDate".');if(i){if(a>i)throw new Error('"dateSelected" in options is less than "minDate".');if(r<i)throw new Error('"dateSelected" in options is greater than "maxDate".')}return["onSelect","onShow","onHide","onMonthChange"].forEach(function(t){e[t]="function"==typeof e[t]&&e[t]}),[c,l].forEach(function(t,n){if(void 0!==t){var o=['"customMonths" must be an array with 12 strings.','"customDays" must be an array with 7 strings.'],r=["[object Array]"!=={}.toString.call(t),t.length!==(n?7:12),t.some(function(e){return"string"!=typeof e})].some(function(e){return e});if(r)throw new Error(o[n]);e[n?"days":"months"]=t}}),e}function n(){return{startDate:p(new Date),position:"bl"}}function o(e){var t={};return t[D[e[0]]]=1,t[D[e[1]]]=1,t}function r(e,t){var n=t.calendar,o=a(e,t),r=i(e,t),c=s(t);n.innerHTML=o+r+c}function a(e,t){return'\n <div class="qs-controls">\n <div class="qs-arrow qs-left"></div>\n <div class="qs-month-year">\n <span class="qs-month">'+(t.months||S)[e.getMonth()]+'</span>\n <span class="qs-year">'+e.getFullYear()+'</span>\n </div>\n <div class="qs-arrow qs-right"></div>\n </div>\n '}function i(e,t){var n=t.minDate,o=t.maxDate,r=t.dateSelected,a=t.currentYear,i=t.currentMonth,s=t.noWeekends,c=new Date,l=c.toJSON().slice(0,7)===e.toJSON().slice(0,7),d=new Date(new Date(e).setDate(1)),u=d.getDay();d.setMonth(d.getMonth()+1),d.setDate(0);var h=d.getDate(),f=[],p=7*((u+h)/7|0);p+=(u+h)%7?7:0;for(var v=1;v<=p;v++){var m=(t.days||g)[(v-1)%7],y=v-u,b="",w='<span class="qs-num">'+y+"</span>",S=new Date(a,i,y),D=y<1||y>h;if(D)b="qs-empty",w="";else{var M=n&&S<n||o&&S>o,E=t.days||g,x=E[6],N=E[0],L=m===x||m===N,C=l&&!M&&y===c.getDate();M=M||s&&L,b=M?"qs-disabled":C?"qs-current":""}+S!==+r||D||(b+=" qs-active"),f.push('<div class="qs-square qs-num '+m+" "+b+'">'+w+"</div>")}var q=(t.days||g).map(function(e){return'<div class="qs-square qs-day">'+e+"</div>"}).concat(f);if(q.length%7!==0){var k="Calendar not constructed properly. The # of squares should be a multiple of 7.";throw new Error(k)}return q.unshift('<div class="qs-squares">'),q.push("</div>"),q.join("")}function s(e){return'\n <div class="qs-overlay qs-hidden">\n <div class="qs-close">✕</div>\n <input type="number" class="qs-overlay-year" placeholder="4-digit year" />\n <div class="qs-submit qs-disabled">Submit</div>\n </div>\n '}function c(e,t){var n=t.currentMonth,o=t.currentYear,r=t.calendar,a=t.el,i=t.onSelect,s=r.querySelector(".qs-active"),c=e.textContent;t.dateSelected=new Date(o,n,c),s&&s.classList.remove("qs-active"),e.classList.add("qs-active"),l(a,t),r.classList.add("qs-hidden"),i&&t.onSelect(t)}function l(e,t){if(!t.nonInput)return t.formatter?t.formatter(e,t.dateSelected):void(e.value=t.dateSelected.toDateString())}function d(e,t,n){n?t.currentYear=n:(t.currentMonth+=e.contains("qs-right")?1:-1,12===t.currentMonth?(t.currentMonth=0,t.currentYear++):t.currentMonth===-1&&(t.currentMonth=11,t.currentYear--));var o=new Date(t.currentYear,t.currentMonth,1);r(o,t),t.currentMonthName=(t.months||S)[t.currentMonth],t.onMonthChange&&n&&t.onMonthChange(t)}function u(e){if(!e.noPosition){var t=e.el,n=e.calendar,o=e.position,r=e.parent,a=o.top,i=o.right,s=r.getBoundingClientRect(),c=t.getBoundingClientRect(),l=n.getBoundingClientRect(),d=c.top-s.top+r.scrollTop,u="\n top:"+(d-(a?l.height:c.height*-1))+"px;\n left:"+(c.left-s.left+(i?c.width-l.width:0))+"px;\n ";n.setAttribute("style",u)}}function h(e){if(!f(e))throw new TypeError("`setDate` needs a JavaScript Date object.");e=p(e),this.currentYear=e.getFullYear(),this.currentMonth=e.getMonth(),this.currentMonthName=(this.months||S)[e.getMonth()],this.dateSelected=e,l(this.el,this),r(e,this)}function f(e){return"[object Date]"==={}.toString.call(e)}function p(e){return new Date(e.toDateString())}function v(){var e=this.calendar,t=this.observer,n=this.parent;w.forEach(function(e){window.removeEventListener(e,y)}),e.remove(),t.disconnect(),e.hasOwnProperty("parentStyle")&&(n.style.position="");var o=b.indexOf(this.el);o>-1&&b.splice(o,1)}function m(e,t){t.observer=new MutationObserver(function(e,n){e[0].oldValue.includes("qs-hidden")?(u(t),t.onShow&&t.onShow(t)):t.onHide&&t.onHide(t)}),t.observer.observe(e,{attributes:1,attributeFilter:["class"],attributeOldValue:1})}function y(e){function t(t){var r=t.calendar,a=l.classList,i=r.querySelector(".qs-month-year"),u=a.contains("qs-close");if(a.contains("qs-num"))!function(){var e="SPAN"===l.nodeName?l.parentNode:l,n=["qs-disabled","qs-active","qs-empty"].some(function(t){return e.classList.contains(t)});!n&&c(e,t)}();else if(a.contains("qs-arrow"))d(a,t);else if(s.includes(i)||u)n(r,u,t);else if(l.classList.contains("qs-submit")){var h=r.querySelector(".qs-overlay-year");o(e,h,t)}}function n(e,t,n){[".qs-overlay",".qs-controls",".qs-squares"].forEach(function(t,n){e.querySelector(t).classList.toggle(n?"qs-blur":"qs-hidden")});var o=e.querySelector(".qs-overlay-year");t?o.value="":o.focus()}function o(e,t,n){var o=isNaN((new Date).setFullYear(t.value||void 0));if(13===e.which||"click"===e.type){if(o||t.classList.contains("qs-disabled"))return;d(null,n,t.value)}else{var r=o?"qs-add":"qs-remove",a=n.calendar.querySelector(".qs-submit");a.classList[r]("qs-disabled")}}if(!e.path){for(var r=e.target,a=[];r!==document;)a.push(r),r=r.parentNode;e.path=a}var i=e.type,s=e.path,l=e.target;if(!this.isMobile||!this.disableMobile){var u=this.calendar.classList,h=u.contains("qs-hidden"),f=s.includes(this.calendar);if("keyup"===i){var p=this.calendar.querySelector(".qs-overlay");if(13===e.which&&!p.classList.contains("qs-hidden"))return o(e,l,this);if(27===e.which)return n(this.calendar,!0,this);if(9!==e.which)return}return"focusin"===i?l===this.el&&u.remove("qs-hidden"):void(this.noPosition?f?t(this):u.toggle("qs-hidden"):h?l===this.el&&u.remove("qs-hidden"):"click"===i&&f?t(this):"input"===i?o(e,l,this):l!==this.el&&u.add("qs-hidden"))}}var b=[],w=["click","focusin","keyup","input"],g=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],S=["January","February","March","April","May","June","July","August","September","October","November","December"],D={t:"top",r:"right",b:"bottom",l:"left"};return e});