"use strict"; var _typeof = typeof symbol === "function" && typeof symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof symbol === "function" && obj.constructor === symbol ? "symbol" : typeof obj; }; /*! flatpickr v2.0, @license mit */ function flatpickr(element, config) { var self = this; function init() { self.element = element; self.instanceconfig = config || {}; self.ismobile = /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(navigator.useragent); setupformats(); parseconfig(); setupinputs(); setupdates(); setuphelperfunctions(); self.changemonth = changemonth; self.clear = clear; self.close = close; self.destroy = destroy; self.formatdate = formatdate; self.jumptodate = jumptodate; self.open = open; self.parsedate = parsedate; self.redraw = redraw; self.set = set; self.setdate = setdate; self.toggle = toggle; if (self.ismobile && !self.config.disablemobile) { bind(); setupmobile(); } else { build(); bind(); } if (self.selecteddateobj) updatevalue(); triggerevent("ready"); } function updatetime(e) { timewrapper(e); updatevalue(e); } function bind() { if (self.config.wrap) { ["open", "close", "toggle", "clear"].foreach(function (el) { try { self.element.queryselector("[data-" + el + "]").addeventlistener("click", self[el]); } catch (e) { // } }); } if (self.ismobile) return; document.addeventlistener("keydown", onkeydown); window.addeventlistener("resize", debounce(onresize, 300)); document.addeventlistener("click", documentclick); document.addeventlistener("blur", documentclick); if (self.config.clickopens) (self.altinput || self.input).addeventlistener("focus", open); if (!self.config.nocalendar) { self.prevmonthnav.addeventlistener("click", function () { return changemonth(-1); }); self.nextmonthnav.addeventlistener("click", function () { return changemonth(1); }); self.currentyearelement.addeventlistener("wheel", yearscroll); self.currentyearelement.addeventlistener("focus", function () { self.currentyearelement.select(); }); self.currentyearelement.addeventlistener("input", function (event) { if (event.target.value.length === 4) self.currentyearelement.blur(); self.currentyear = parseint(event.target.value, 10) || self.currentyear; self.redraw(); }); self.days.addeventlistener("click", selectdate); } if (self.config.enabletime) { self.timecontainer.addeventlistener("wheel", updatetime); self.timecontainer.addeventlistener("wheel", debounce(function () { return triggerevent("change"); }, 1000)); self.timecontainer.addeventlistener("input", updatetime); self.hourelement.addeventlistener("focus", function () { return self.hourelement.select(); }); self.minuteelement.addeventlistener("focus", function () { return self.minuteelement.select(); }); if (self.secondelement) self.secondelement.addeventlistener("focus", function () { return self.secondelement.select(); }); if (self.ampm) self.ampm.addeventlistener("click", updatetime); } } function jumptodate(jumpdate) { jumpdate = jumpdate ? parsedate(jumpdate) : self.selecteddateobj || self.config.defaultdate || self.config.mindate || self.now; self.currentyear = jumpdate.getfullyear(); self.currentmonth = jumpdate.getmonth(); self.redraw(); } function build() { var fragment = document.createdocumentfragment(); self.calendarcontainer = createelement("div", "flatpickr-calendar"); if (!self.config.nocalendar) { fragment.appendchild(buildmonthnav()); if (self.config.weeknumbers) fragment.appendchild(buildweeks()); self.rcontainer = createelement("div", "flatpickr-rcontainer"); self.rcontainer.appendchild(buildweekdays()); self.rcontainer.appendchild(builddays()); fragment.appendchild(self.rcontainer); } if (self.config.enabletime) fragment.appendchild(buildtime()); self.calendarcontainer.appendchild(fragment); if (self.config.inline || self.config.static) { self.calendarcontainer.classlist.add(self.config.inline ? "inline" : "static"); positioncalendar(); self.element.parentnode.appendchild(self.calendarcontainer); } else document.body.appendchild(self.calendarcontainer); } function builddays() { if (!self.days) { self.days = createelement("div", "flatpickr-days"); self.days.tabindex = -1; } var firstofmonth = (new date(self.currentyear, self.currentmonth, 1).getday() - flatpickr.l10n.firstdayofweek + 7) % 7, daysinmonth = self.utils.getdaysinmonth(), prevmonthdays = self.utils.getdaysinmonth((self.currentmonth - 1 + 12) % 12), days = document.createdocumentfragment(); var daynumber = prevmonthdays + 1 - firstofmonth, currentdate = void 0, dateisdisabled = void 0; if (self.config.weeknumbers) self.weeknumbers.innerhtml = ""; self.days.innerhtml = ""; // prepend days from the ending of previous month for (; daynumber <= prevmonthdays; daynumber++) { var curdate = new date(self.currentyear, self.currentmonth - 1, daynumber, 0, 0, 0, 0, 0), dateisenabled = isenabled(curdate), dayelem = createelement("span", "flatpickr-day prevmonthday" + (dateisenabled ? "" : " disabled"), daynumber); if (dateisenabled) dayelem.tabindex = 0; days.appendchild(dayelem); } // start at 1 since there is no 0th day for (daynumber = 1; daynumber <= daysinmonth; daynumber++) { currentdate = new date(self.currentyear, self.currentmonth, daynumber, 0, 0, 0, 0, 0); if (self.config.weeknumbers && daynumber % 7 === 1) { self.weeknumbers.insertadjacenthtml("beforeend", "" + self.getweek(currentdate) + ""); } dateisdisabled = !isenabled(currentdate); var dayelement = createelement("span", dateisdisabled ? "flatpickr-day disabled" : "flatpickr-day", daynumber); if (!dateisdisabled) { dayelement.tabindex = 0; if (equaldates(currentdate, new date())) dayelement.classlist.add("today"); if (self.selecteddateobj && equaldates(currentdate, self.selecteddateobj)) { dayelement.classlist.add("selected"); self.selecteddateelem = dayelement; } } days.appendchild(dayelement); } // append days from the next month for (var daynum = daysinmonth + 1; daynum <= 42 - firstofmonth; daynum++) { var _curdate = new date(self.currentyear, self.currentmonth + 1, daynum % daysinmonth, 0, 0, 0, 0, 0), _dateisenabled = isenabled(_curdate), _dayelement = createelement("span", "flatpickr-day nextmonthday" + (_dateisenabled ? "" : " disabled"), daynum % daysinmonth); if (self.config.weeknumbers && daynum % 7 === 1) { self.weeknumbers.insertadjacenthtml("beforeend", "" + self.getweek(_curdate) + ""); } if (_dateisenabled) _dayelement.tabindex = 0; days.appendchild(_dayelement); } self.days.appendchild(days); return self.days; } function buildmonthnav() { var monthnavfragment = document.createdocumentfragment(); self.monthnav = createelement("div", "flatpickr-month"); self.prevmonthnav = createelement("span", "flatpickr-prev-month"); self.prevmonthnav.innerhtml = self.config.prevarrow; self.currentmonthelement = createelement("span", "cur_month"); self.currentyearelement = createelement("input", "cur_year"); self.currentyearelement.type = "number"; self.currentyearelement.title = flatpickr.l10n.scrolltitle; self.nextmonthnav = createelement("span", "flatpickr-next-month"); self.nextmonthnav.innerhtml = self.config.nextarrow; self.navigationcurrentmonth = createelement("span", "flatpickr-current-month"); self.navigationcurrentmonth.appendchild(self.currentmonthelement); self.navigationcurrentmonth.appendchild(self.currentyearelement); monthnavfragment.appendchild(self.prevmonthnav); monthnavfragment.appendchild(self.navigationcurrentmonth); monthnavfragment.appendchild(self.nextmonthnav); self.monthnav.appendchild(monthnavfragment); updatenavigationcurrentmonth(); return self.monthnav; } function buildtime() { self.calendarcontainer.classlist.add("hastime"); self.timecontainer = createelement("div", "flatpickr-time"); self.timecontainer.tabindex = -1; var separator = createelement("span", "flatpickr-time-separator", ":"); self.hourelement = createelement("input", "flatpickr-hour"); self.minuteelement = createelement("input", "flatpickr-minute"); self.hourelement.tabindex = self.minuteelement.tabindex = 0; self.hourelement.type = self.minuteelement.type = "number"; self.hourelement.value = self.selecteddateobj ? pad(self.selecteddateobj.gethours()) : 12; self.minuteelement.value = self.selecteddateobj ? pad(self.selecteddateobj.getminutes()) : "00"; self.hourelement.step = self.config.hourincrement; self.minuteelement.step = self.config.minuteincrement; self.hourelement.min = -(self.config.time_24hr ? 1 : 0); self.hourelement.max = self.config.time_24hr ? 24 : 13; self.minuteelement.min = -self.minuteelement.step; self.minuteelement.max = 60; self.hourelement.title = self.minuteelement.title = flatpickr.l10n.scrolltitle; self.timecontainer.appendchild(self.hourelement); self.timecontainer.appendchild(separator); self.timecontainer.appendchild(self.minuteelement); if (self.config.enableseconds) { self.timecontainer.classlist.add("has-seconds"); self.secondelement = createelement("input", "flatpickr-second"); self.secondelement.type = "number"; self.secondelement.value = self.selecteddateobj ? pad(self.selecteddateobj.getseconds()) : "00"; self.secondelement.step = self.minuteelement.step; self.secondelement.min = self.minuteelement.min; self.secondelement.max = self.minuteelement.max; self.timecontainer.appendchild(createelement("span", "flatpickr-time-separator", ":")); self.timecontainer.appendchild(self.secondelement); } if (!self.config.time_24hr) { // add self.ampm if appropriate self.ampm = createelement("span", "flatpickr-am-pm", ["am", "pm"][self.hourelement.value > 11 | 0]); self.ampm.title = flatpickr.l10n.toggletitle; self.ampm.tabindex = 0; self.timecontainer.appendchild(self.ampm); } return self.timecontainer; } function buildweekdays() { if (!self.weekdaycontainer) self.weekdaycontainer = createelement("div", "flatpickr-weekdays"); var firstdayofweek = flatpickr.l10n.firstdayofweek; var weekdays = flatpickr.l10n.weekdays.shorthand.slice(); if (firstdayofweek > 0 && firstdayofweek < weekdays.length) { weekdays = [].concat(weekdays.splice(firstdayofweek, weekdays.length), weekdays.splice(0, firstdayofweek)); } self.weekdaycontainer.innerhtml = "" + weekdays.join("") + ""; return self.weekdaycontainer; } function buildweeks() { self.calendarcontainer.classlist.add("hasweeks"); self.weekwrapper = createelement("div", "flatpickr-weekwrapper"); self.weekwrapper.appendchild(createelement("span", "flatpickr-weekday", flatpickr.l10n.weekabbreviation)); self.weeknumbers = createelement("div", "flatpickr-weeks"); self.weekwrapper.appendchild(self.weeknumbers); return self.weekwrapper; } function changemonth(offset) { self.currentmonth += offset; handleyearchange(); updatenavigationcurrentmonth(); builddays(); (self.config.nocalendar ? self.timecontainer : self.days).focus(); } function clear() { self.input.value = ""; if (self.altinput) self.altinput.value = ""; self.selecteddateobj = null; triggerevent("change"); jumptodate(self.now); } function close() { self.isopen = false; self.calendarcontainer.classlist.remove("open"); (self.altinput || self.input).classlist.remove("active"); triggerevent("close"); } function destroy() { self.calendarcontainer.parentnode.removechild(self.calendarcontainer); self.input.value = ""; if (self.altinput) { self.input.type = "text"; self.altinput.parentnode.removechild(self.altinput); } document.removeeventlistener("keydown", onkeydown); window.removeeventlistener("resize", onresize); document.removeeventlistener("click", documentclick); document.removeeventlistener("blur", documentclick); delete self.input._flatpickr; } function documentclick(e) { var iscalendarelement = self.calendarcontainer.contains(e.target), isinput = self.element.contains(e.target) || e.target === self.altinput; if (self.isopen && !iscalendarelement && !isinput) self.close(); } function formatdate(frmt, dateobj) { var chars = frmt.split(""); return chars.map(function (c, i) { return self.formats[c] && chars[i - 1] !== "\\" ? self.formats[c](dateobj) : c !== "\\" ? c : ""; }).join(""); } function handleyearchange() { if (self.currentmonth < 0 || self.currentmonth > 11) { self.currentyear += self.currentmonth % 11; self.currentmonth = (self.currentmonth + 12) % 12; } } function isenabled(datetocheck) { if (self.config.mindate && datetocheck < self.config.mindate || self.config.maxdate && datetocheck > self.config.maxdate) return false; if (!self.config.enable.length && !self.config.disable.length) return true; datetocheck = parsedate(datetocheck, true); // timeless var bool = self.config.enable.length > 0, array = bool ? self.config.enable : self.config.disable; var d = void 0; for (var i = 0; i < array.length; i++) { d = array[i]; if (d instanceof function && d(datetocheck)) // disabled by function return bool;else if ((d instanceof date || typeof d === "string") && parsedate(d, true).gettime() === datetocheck.gettime()) // disabled by date string return bool;else if ( // disabled by range (typeof d === "undefined" ? "undefined" : _typeof(d)) === "object" && d.hasownproperty("from") && datetocheck >= parsedate(d.from) && datetocheck <= parsedate(d.to)) return bool; } return !bool; } function onkeydown(e) { if (!self.isopen) return; switch (e.which) { case 13: if (self.timecontainer && self.timecontainer.contains(e.target)) updatevalue(e);else selectdate(e); break; case 27: self.close(); break; case 37: if (e.target !== self.input & e.target !== self.altinput) changemonth(-1); break; case 38: e.preventdefault(); if (self.timecontainer.contains(e.target)) updatetime(e);else { self.currentyear++; self.redraw(); } break; case 39: if (e.target !== self.input & e.target !== self.altinput) changemonth(1); break; case 40: e.preventdefault(); if (self.timecontainer.contains(e.target)) updatetime(e);else { self.currentyear--; self.redraw(); } break; default: break; } } function onresize() { if (self.isopen && !self.config.inline && !self.config.static) positioncalendar(); } function open(e) { if (self.ismobile) { e.preventdefault(); e.target.blur(); settimeout(function () { self.mobileinput.click(); }, 0); triggerevent("open"); return; } else if (self.isopen || (self.altinput || self.input).disabled || self.config.inline) return; self.calendarcontainer.classlist.add("open"); if (!self.config.static) positioncalendar(); self.isopen = true; if (!self.config.allowinput) { (self.altinput || self.input).blur(); (self.config.nocalendar ? self.timecontainer : self.selecteddateobj ? self.selecteddateelem : self.days).focus(); } (self.altinput || self.input).classlist.add("active"); triggerevent("open"); } function pad(number) { return ("0" + number).slice(-2); } function parseconfig() { self.config = self.instanceconfig; object.keys(self.element.dataset).foreach(function (k) { return self.config[k] = typeof flatpickr.defaultconfig[k] === "boolean" ? self.element.dataset[k] !== "false" : self.element.dataset[k]; }); if (!self.config.dateformat && self.config.enabletime) { self.config.dateformat = flatpickr.defaultconfig.dateformat; if (self.config.nocalendar) { // time picker self.config.dateformat = "h:i" + (self.config.enableseconds ? ":s" : ""); self.config.altformat = "h:i" + (self.config.enableseconds ? ":s k" : " k"); } else { self.config.dateformat += " h:i" + (self.config.enableseconds ? ":s" : ""); self.config.altformat = "h:i" + (self.config.enableseconds ? ":s" : "") + " k"; } } object.keys(flatpickr.defaultconfig).foreach(function (k) { return self.config[k] = typeof self.config[k] !== "undefined" ? self.config[k] : flatpickr.defaultconfig[k]; }); } function parsedate(date) { var timeless = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1]; if (typeof date === "string") { date = date.trim(); if (date === "today") { date = new date(); timeless = true; } else if (self.config.parsedate) date = self.config.parsedate(date);else if (/^\d\d:\d\d/.test(date)) { // time picker var m = date.match(/^(\d{1,2})[:\s]?(\d\d)?[:\s]?(\d\d)?/); date = new date(); date.sethours(m[1], m[2] || 0, m[2] || 0); } else if (/z$/.test(date) || /gmt$/.test(date)) // datestrings w/ timezone date = new date(date);else if (/(\d+)/g.test(date)) { var d = date.match(/(\d+)/g); date = new date(d[0] + "/" + (d[1] || 1) + "/" + (d[2] || 1) + " " + (d[3] || 0) + ":" + (d[4] || 0) + ":" + (d[5] || 0)); } } if (!(date instanceof date) || !date.gettime()) { console.warn("flatpickr: invalid date " + date); console.info(self.element); return null; } if (self.config.utc && !date.fp_isutc) date = date.fp_toutc(); if (timeless) date.sethours(0, 0, 0, 0); return date; } function positioncalendar() { var calendarheight = self.calendarcontainer.offsetheight, input = self.altinput || self.input, inputbounds = input.getboundingclientrect(), distancefrombottom = window.innerheight - inputbounds.bottom + input.offsetheight; var top = void 0, left = window.pagexoffset + inputbounds.left; if (distancefrombottom < calendarheight) { top = window.pageyoffset - calendarheight + inputbounds.top - 2; self.calendarcontainer.classlist.remove("arrowtop"); self.calendarcontainer.classlist.add("arrowbottom"); } else { top = window.pageyoffset + input.offsetheight + inputbounds.top + 10; self.calendarcontainer.classlist.remove("arrowbottom"); self.calendarcontainer.classlist.add("arrowtop"); } if (!self.config.inline) { self.calendarcontainer.style.top = top + "px"; self.calendarcontainer.style.left = left + "px"; } } function redraw() { if (self.config.nocalendar || self.ismobile) return; buildweekdays(); updatenavigationcurrentmonth(); builddays(); } function selectdate(e) { e.preventdefault(); e.stoppropagation(); if (self.config.allowinput && (e.target === self.altinput || e.target === self.input) && e.which === 13) self.setdate((self.altinput || self.input).value);else if (e.target.classlist.contains("flatpickr-day") && !e.target.classlist.contains("disabled")) { var isprevmonthday = e.target.classlist.contains("prevmonthday"), isnextmonthday = e.target.classlist.contains("nextmonthday"); if (isprevmonthday || isnextmonthday) changemonth(+isnextmonthday - isprevmonthday); self.selecteddateobj = parsedate(new date(self.currentyear, self.currentmonth, e.target.innerhtml)); updatevalue(e); builddays(); triggerevent("change"); if (!self.config.enabletime) self.close(); } } function set(option, value) { self.config[option] = value; jumptodate(); } function setdate(date, triggerchange) { date = parsedate(date); if (date instanceof date && date.gettime()) { self.selecteddateobj = date; jumptodate(self.selecteddateobj); updatevalue(false); if (triggerchange) triggerevent("change"); } else (self.altinput || self.input).value = ""; } function setupdates() { self.now = new date(); if (self.config.defaultdate || self.input.value) self.selecteddateobj = parsedate(self.config.defaultdate || self.input.value); if (self.config.mindate) self.config.mindate = parsedate(self.config.mindate, true); if (self.config.maxdate) self.config.maxdate = parsedate(self.config.maxdate, true); var initialdate = self.selecteddateobj || self.config.defaultdate || self.config.mindate || new date(); self.currentyear = initialdate.getfullyear(); self.currentmonth = initialdate.getmonth(); } function setupformats() { self.formats = { // weekday name, short, e.g. thu d: function d(date) { return flatpickr.l10n.weekdays.shorthand[self.formats.w(date)]; }, // full month name e.g. january f: function f(date) { return self.utils.monthtostr(self.formats.n(date) - 1, false); }, // hours with leading zero e.g. 03 h: function h(date) { return pad(date.gethours()); }, // day (1-30) with ordinal suffix e.g. 1st, 2nd j: function j(date) { return date.getdate() + flatpickr.l10n.ordinal(date.getdate()); }, // am/pm k: function k(date) { return date.gethours() > 11 ? "pm" : "am"; }, // shorthand month e.g. jan, sep, oct, etc m: function m(date) { return self.utils.monthtostr(date.getmonth(), true); }, // seconds 00-59 s: function s(date) { return pad(date.getseconds()); }, // unix timestamp u: function u(date) { return date.gettime() / 1000; }, // full year e.g. 2016 y: function y(date) { return date.getfullyear(); }, // day in month, padded (01-30) d: function d(date) { return pad(self.formats.j(date)); }, // hour from 1-12 (am/pm) h: function h(date) { return date.gethours() % 12 ? date.gethours() % 12 : 12; }, // minutes, padded with leading zero e.g. 09 i: function i(date) { return pad(date.getminutes()); }, // day in month (1-30) j: function j(date) { return date.getdate(); }, // weekday name, full, e.g. thursday l: function l(date) { return flatpickr.l10n.weekdays.longhand[self.formats.w(date)]; }, // padded month number (01-12) m: function m(date) { return pad(self.formats.n(date)); }, // the month number (1-12) n: function n(date) { return date.getmonth() + 1; }, // seconds 0-59 s: function s(date) { return date.getseconds(); }, // number of the day of the week w: function w(date) { return date.getday(); }, // last two digits of year e.g. 16 for 2016 y: function y(date) { return string(self.formats.y(date)).substring(2); } }; } function setuphelperfunctions() { self.utils = { getdaysinmonth: function getdaysinmonth() { var month = arguments.length <= 0 || arguments[0] === undefined ? self.currentmonth : arguments[0]; var yr = arguments.length <= 1 || arguments[1] === undefined ? self.currentyear : arguments[1]; if (month === 1 && yr % 4 === 0 && yr % 100 !== 0 || yr % 400 === 0) return 29; return flatpickr.l10n.daysinmonth[month]; }, monthtostr: function monthtostr(monthnumber) { var short = arguments.length <= 1 || arguments[1] === undefined ? self.config.shorthandcurrentmonth : arguments[1]; return flatpickr.l10n.months[(short ? "short" : "long") + "hand"][monthnumber]; } }; } function setupinputs() { self.input = self.config.wrap ? self.element.queryselector("[data-input]") : self.element; self.input.classlist.add("flatpickr-input"); if (self.config.altinput) { // replicate self.element self.altinput = createelement(self.input.nodename, "flatpickr-input " + self.config.altinputclass); self.altinput.placeholder = self.input.placeholder; self.altinput.type = "text"; self.input.type = "hidden"; self.input.parentnode.insertbefore(self.altinput, self.input.nextsibling); } if (!self.config.allowinput) (self.altinput || self.input).setattribute("readonly", "readonly"); } function setupmobile() { var inputtype = self.config.enabletime ? self.config.nocalendar ? "time" : "datetime-local" : "date"; self.mobileinput = createelement("input", "flatpickr-input"); self.mobileinput.step = "any"; self.mobileinput.tabindex = -1; self.mobileinput.type = inputtype; if (self.selecteddateobj) { var formatstr = inputtype === "datetime-local" ? "y-m-d\\th:i:s" : inputtype === "date" ? "y-m-d" : "h:i:s"; var mobileformatteddate = formatdate(formatstr, self.selecteddateobj); self.mobileinput.defaultvalue = self.mobileinput.value = mobileformatteddate; } if (self.config.mindate) self.mobileinput.min = formatdate("y-m-d", self.config.mindate); if (self.config.maxdate) self.mobileinput.max = formatdate("y-m-d", self.config.maxdate); self.input.type = "hidden"; if (self.config.altinput) self.altinput.type = "hidden"; try { self.input.parentnode.insertbefore(self.mobileinput, self.input.nextsibling); } catch (e) { // } self.mobileinput.addeventlistener("change", function (e) { self.setdate(e.target.value); triggerevent("change"); triggerevent("close"); }); } function toggle() { if (self.isopen) self.close();else self.open(); } function triggerevent(event) { if (self.config["on" + event]) self.config["on" + event](self.selecteddateobj, self.input.value, self); } function updatenavigationcurrentmonth() { self.currentmonthelement.textcontent = self.utils.monthtostr(self.currentmonth) + " "; self.currentyearelement.value = self.currentyear; } function updatevalue() { var readtimeinput = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0]; if (self.config.nocalendar && !self.selecteddateobj) // picking time only and method triggered from picker self.selecteddateobj = new date();else if (!self.selecteddateobj) return; if (self.config.enabletime && !self.ismobile) { var hours = void 0, minutes = void 0, seconds = void 0; if (readtimeinput) { // update time hours = parseint(self.hourelement.value, 10) || 0; minutes = (60 + (parseint(self.minuteelement.value, 10) || 0)) % 60; if (self.config.enableseconds) seconds = (60 + parseint(self.secondelement.value, 10) || 0) % 60; if (!self.config.time_24hr) // the real number of hours for the date object hours = hours % 12 + 12 * (self.ampm.innerhtml === "pm"); self.selecteddateobj.sethours(hours, minutes, seconds || 0, 0); } else { hours = self.selecteddateobj.gethours(); minutes = self.selecteddateobj.getminutes(); seconds = self.selecteddateobj.getseconds(); } self.hourelement.value = pad(!self.config.time_24hr ? (12 + hours) % 12 + 12 * (hours % 12 === 0) : hours); self.minuteelement.value = pad(minutes); if (self.secondelement !== undefined) self.secondelement.value = pad(seconds); } self.input.value = formatdate(self.config.dateformat, self.selecteddateobj); if (self.altinput) self.altinput.value = formatdate(self.config.altformat, self.selecteddateobj); triggerevent("valueupdate"); } function yearscroll(e) { e.preventdefault(); var delta = math.max(-1, math.min(1, e.wheeldelta || -e.deltay)); self.currentyear = e.target.value = parseint(e.target.value, 10) + delta; self.redraw(); } function createelement(tag) { var classname = arguments.length <= 1 || arguments[1] === undefined ? "" : arguments[1]; var content = arguments.length <= 2 || arguments[2] === undefined ? "" : arguments[2]; var e = document.createelement(tag); e.classname = classname; if (content) e.textcontent = content; return e; } function debounce(func, wait, immediate) { var timeout = void 0; return function () { for (var _len = arguments.length, args = array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } var context = this; var later = function later() { timeout = null; if (!immediate) func.apply(context, args); }; cleartimeout(timeout); timeout = settimeout(later, wait); if (immediate && !timeout) func.apply(context, args); }; } function equaldates(date1, date2) { return date1.getdate() === date2.getdate() && date1.getmonth() === date2.getmonth() && date1.getfullyear() === date2.getfullyear(); } function timewrapper(e) { e.preventdefault(); if (e && e.type !== "keydown") e.target.blur(); if (e.target.classname === "flatpickr-am-pm") { e.target.textcontent = ["am", "pm"][e.target.textcontent === "am" | 0]; e.stoppropagation(); return; } var min = parseint(e.target.min, 10), max = parseint(e.target.max, 10), step = parseint(e.target.step, 10), value = parseint(e.target.value, 10); var newvalue = value; if (e.type === "wheel") newvalue = value + step * math.max(-1, math.min(1, e.wheeldelta || -e.deltay));else if (e.type === "keydown") newvalue = value + step * (e.which === 38 ? 1 : -1); if (newvalue <= min) newvalue = max - step;else if (newvalue >= max) newvalue = min + step; e.target.value = pad(newvalue); } init(); return self; } flatpickr.defaultconfig = { /* if true, dates will be parsed, formatted, and displayed in utc. preloading date strings w/ timezones is recommended but not necessary */ utc: false, // wrap: see https://chmln.github.io/flatpickr/#strap wrap: false, // enables week numbers weeknumbers: false, allowinput: false, /* clicking on input opens the date(time)picker. disable if you wish to open the calendar manually with .open() */ clickopens: true, // display time picker in 24 hour mode time_24hr: false, // enables the time picker functionality enabletime: false, // nocalendar: true will hide the calendar. use for a time picker along w/ enabletime nocalendar: false, // more date format chars at https://chmln.github.io/flatpickr/#dateformat dateformat: "y-m-d", // altinput - see https://chmln.github.io/flatpickr/#altinput altinput: null, // the created altinput element will have this class. altinputclass: "", // same as dateformat, but for altinput altformat: "f j, y", // defaults to e.g. june 10, 2016 // defaultdate - either a datestring or a date object. used for datetimepicker"s initial value defaultdate: null, // the minimum date that user can pick (inclusive) mindate: null, // the maximum date that user can pick (inclusive) maxdate: null, // dateparser that transforms a given string to a date object parsedate: null, // see https://chmln.github.io/flatpickr/#disable enable: [], // see https://chmln.github.io/flatpickr/#disable disable: [], // display the short version of month names - e.g. sep instead of september shorthandcurrentmonth: false, // displays calendar inline. see https://chmln.github.io/flatpickr/#inline-calendar inline: false, // position calendar inside wrapper and next to the input element // leave at false unless you know what you"re doing static: false, // code for previous/next icons. this is where you put your custom icon code e.g. fontawesome prevarrow: "", nextarrow: "", // enables seconds in the time picker enableseconds: false, // step size used when scrolling/incrementing the hour element hourincrement: 1, // step size used when scrolling/incrementing the minute element minuteincrement: 5, // disable native mobile datetime input support disablemobile: false, // onchange callback when user selects a date or time onchange: null, // function (dateobj, datestr) {} // called every time calendar is opened onopen: null, // function (dateobj, datestr) {} // called every time calendar is closed onclose: null, // function (dateobj, datestr) {} // called after calendar is ready onready: null, // function (dateobj, datestr) {} onvalueupdate: null }; flatpickr.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 ordinal(nth) { var s = nth % 100; if (s > 3 && s < 21) return "th"; switch (s % 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" }; flatpickr.localize = function (l10n) { object.keys(l10n).foreach(function (k) { return flatpickr.l10n[k] = l10n[k]; }); }; function _flatpickr(nodelist, config) { var instances = []; for (var i = 0; i < nodelist.length; i++) { if (nodelist[i]._flatpickr) nodelist[i]._flatpickr.destroy(); try { nodelist[i]._flatpickr = new flatpickr(nodelist[i], config || {}); instances.push(nodelist[i]._flatpickr); } catch (e) { console.warn(e, e.stack); } } return instances.length === 1 ? instances[0] : instances; } htmlcollection.prototype.flatpickr = nodelist.prototype.flatpickr = function (config) { return _flatpickr(this, config); }; htmlelement.prototype.flatpickr = function (config) { return _flatpickr([this], config); }; if (typeof jquery !== "undefined") { jquery.fn.flatpickr = function (config) { return _flatpickr(this, config); }; } date.prototype.fp_incr = function (days) { return new date(this.getfullyear(), this.getmonth(), this.getdate() + parseint(days, 10)); }; date.prototype.fp_isutc = false; date.prototype.fp_toutc = function () { var newdate = new date(this.gettime() + this.gettimezoneoffset() * 60000); newdate.fp_isutc = true; return newdate; }; flatpickr.prototype.getweek = function (givendate) { var date = new date(givendate.gettime()); date.sethours(0, 0, 0, 0); // thursday in current week decides the year. date.setdate(date.getdate() + 3 - (date.getday() + 6) % 7); // january 4 is always in week 1. var week1 = new date(date.getfullyear(), 0, 4); // adjust to thursday in week 1 and count number of weeks from date to week1. return 1 + math.round(((date.gettime() - week1.gettime()) / 86400000 - 3 + (week1.getday() + 6) % 7) / 7); }; // ie9 classlist polyfill if (!("classlist" in document.documentelement) && object.defineproperty && typeof htmlelement !== "undefined") { object.defineproperty(htmlelement.prototype, "classlist", { get: function get() { var self = this; function update(fn) { return function (value) { var classes = self.classname.split(/\s+/), index = classes.indexof(value); fn(classes, index, value); self.classname = classes.join(" "); }; } var ret = { add: update(function (classes, index, value) { ~index || classes.push(value); }), remove: update(function (classes, index) { ~index && classes.splice(index, 1); }), toggle: update(function (classes, index, value) { ~index ? classes.splice(index, 1) : classes.push(value); }), contains: function contains(value) { return !!~self.classname.split(/\s+/).indexof(value); }, item: function item(i) { return self.classname.split(/\s+/)[i] || null; } }; object.defineproperty(ret, "length", { get: function get() { return self.classname.split(/\s+/).length; } }); return ret; } }); } if (typeof module !== "undefined") module.exports = flatpickr;