UNPKG

flatpickr_plus

Version:

A lightweight, powerful javascript datetime picker with additional locale year support and year dropdown

127 lines (126 loc) 5.07 kB
var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var defaultConfig = { selectYear: new Date().getFullYear(), }; function yearDropdownPlugin(pluginConfig) { var config = __assign(__assign({}, defaultConfig), pluginConfig); var initialYear = config.selectYear; return function (fp) { var self = { yearSelectContainer: null, yearSelect: null, }; var hideOldYearInput = function () { var flatpickrYearElement = fp.currentYearElement; flatpickrYearElement.parentElement.classList.add("flatpickr-disabled"); }; var setDefaultMinMaxDate = function () { if (!fp.config.minDate) { fp.config.minDate = new Date(new Date().getFullYear() - 150, 0, 1); } if (!fp.config.maxDate) { fp.config.maxDate = new Date(new Date().getFullYear(), 11, 31); } }; var createSelectElement = function (initialYear) { var start = fp.config.minDate.getFullYear(); var end = fp.config.maxDate.getFullYear(); self.yearSelect = fp._createElement("select", "flatpickr-monthDropdown-months"); self.yearSelect.setAttribute("aria-label", "year selection"); if (fp.config.useLocaleYear) { start += fp.l10n.localeYearAdjustment; end += fp.l10n.localeYearAdjustment; initialYear += fp.l10n.localeYearAdjustment; } for (var i = end; i >= start; i--) { var year = fp._createElement("option", "flatpickr-monthDropdown-month"); year.value = i.toString(); year.text = i.toString(); self.yearSelect.appendChild(year); } self.yearSelect.value = initialYear > end ? end.toString() : initialYear.toString(); }; var createSelectContainer = function () { self.yearSelectContainer = fp._createElement("div", "numInputWrapper"); self.yearSelectContainer.tabIndex = -1; if (!!self.yearSelect) { self.yearSelectContainer.appendChild(self.yearSelect); } }; var buildSelect = function () { initialYear = fp.latestSelectedDateObj ? fp.latestSelectedDateObj.getFullYear() : initialYear; createSelectElement(initialYear); createSelectContainer(); fp.yearSelect = self.yearSelect; fp.yearSelectContainer = self.yearSelectContainer; }; var bindEvents = function () { if (self.yearSelect !== null) { fp._bind(self.yearSelect, "change", onYearSelected); fp._bind(self.yearSelect, "reset", onReset); } }; var changeYear = function () { var yearSelect = fp.yearSelect; var year = fp.currentYear; if (fp.config.useLocaleYear) { year += fp.l10n.localeYearAdjustment; } yearSelect.value = year.toString(); }; var onYearSelected = function (e) { var year; var target = e.target; var selectedYear = target["value"]; fp.currentYearElement.value = selectedYear; if (fp.config.useLocaleYear) { year = parseInt(selectedYear) - fp.l10n.localeYearAdjustment; fp.currentYear = year; } else { year = parseInt(selectedYear); fp.currentYear = year; } fp.changeYear(+year); fp.redraw(); }; var onReset = function () { self.yearSelect.value = fp.currentYearElement.value; fp.redraw(); }; function destroyPluginInstance() { if (self.yearSelect !== null) { self.yearSelect.removeEventListener("change", onYearSelected); } } return { onReady: [ setDefaultMinMaxDate, hideOldYearInput, buildSelect, bindEvents, function () { var flatpickrYearElement = fp.currentYearElement; flatpickrYearElement.parentElement.parentElement.appendChild(fp.yearSelectContainer); }, ], onYearChange: changeYear, onChange: changeYear, onDestroy: [destroyPluginInstance], }; }; } export default yearDropdownPlugin;