flatpickr
Version:
A lightweight, powerful javascript datetime picker
114 lines (110 loc) • 5.06 kB
JavaScript
/* flatpickr v4.0.1, @license MIT */
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global.rangePlugin = factory());
}(this, (function () { 'use strict';
function rangePlugin(config) {
if (config === void 0) { config = {}; }
return function (fp) {
var dateFormat = "", secondInput, _firstInputFocused, _secondInputFocused, _prevDates;
var createSecondInput = function () {
if (config.input) {
secondInput =
config.input instanceof Element
? config.input
: window.document.querySelector(config.input);
}
else {
secondInput = fp._input.cloneNode();
secondInput.removeAttribute("id");
secondInput._flatpickr = undefined;
}
secondInput.setAttribute("data-fp-omit", "");
fp._bind(secondInput, ["focus", "click"], function (e) {
if (fp.selectedDates[1]) {
fp.latestSelectedDateObj = fp.selectedDates[1];
fp._setHoursFromDate(fp.selectedDates[1]);
fp.jumpToDate(fp.selectedDates[1]);
}
fp.open(e, secondInput);
_a = [false, true], _firstInputFocused = _a[0], _secondInputFocused = _a[1];
var _a;
});
fp._bind(secondInput, "blur", function () {
fp.isOpen = false;
});
fp._bind(secondInput, "keydown", function (e) {
if (e.key === "Enter") {
fp.setDate([fp.selectedDates[0], secondInput.value], true, dateFormat);
secondInput.click();
}
});
if (!config.input)
fp._input.parentNode &&
fp._input.parentNode.insertBefore(secondInput, fp._input.nextSibling);
};
return {
onParseConfig: function () {
fp.config.mode = "range";
fp.config.allowInput = true;
dateFormat = fp.config.altInput
? fp.config.altFormat
: fp.config.dateFormat;
},
onReady: function () {
createSecondInput();
fp.config.ignoredFocusElements.push(secondInput);
fp._input.removeAttribute("readonly");
secondInput.removeAttribute("readonly");
fp._bind(fp._input, "focus", function () {
fp.latestSelectedDateObj = fp.selectedDates[0];
fp._setHoursFromDate(fp.selectedDates[0]);
_a = [true, false], _firstInputFocused = _a[0], _secondInputFocused = _a[1];
fp.jumpToDate(fp.selectedDates[0]);
var _a;
});
fp._bind(fp._input, "keydown", function (e) {
if (e.key === "Enter")
fp.setDate([fp._input.value, fp.selectedDates[1]], true, dateFormat);
});
fp.setDate(fp.selectedDates);
},
onChange: function () {
if (!fp.selectedDates.length) {
setTimeout(function () {
if (fp.selectedDates.length)
return;
secondInput.value = "";
_prevDates = [];
}, 10);
}
},
onDestroy: function () {
if (!config.input)
secondInput.parentNode &&
secondInput.parentNode.removeChild(secondInput);
},
onValueUpdate: function (selDates) {
if (!secondInput)
return;
_prevDates =
!_prevDates || selDates.length >= _prevDates.length
? selDates.slice() : _prevDates;
if (_prevDates.length > selDates.length) {
var newSelectedDate = selDates[0];
var newDates = Math.abs(newSelectedDate.getTime() - _prevDates[1].getTime()) <
Math.abs(newSelectedDate.getTime() - _prevDates[0].getTime())
? [_prevDates[0], newSelectedDate]
: [newSelectedDate, _prevDates[1]];
fp.setDate(newDates, false);
_prevDates = newDates.slice();
}
_a = fp.selectedDates.map(function (d) { return fp.formatDate(d, dateFormat); }), _b = _a[0], fp._input.value = _b === void 0 ? "" : _b, _c = _a[1], secondInput.value = _c === void 0 ? "" : _c;
var _a, _b, _c;
},
};
};
}
return rangePlugin;
})));