flatpickr_plus
Version:
A lightweight, powerful javascript datetime picker with additional locale year support and year dropdown
127 lines (126 loc) • 5.07 kB
JavaScript
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;