framework7
Version:
Full featured mobile HTML framework for building iOS & Android apps
1,382 lines (1,129 loc) • 72.6 kB
JavaScript
"use strict";
exports.__esModule = true;
exports.default = void 0;
var _utils = require("../../shared/utils");
var _class = _interopRequireDefault(require("../../shared/class"));
var _dom = _interopRequireDefault(require("../../shared/dom7"));
var _getDevice = require("../../shared/get-device");
var _getSupport = require("../../shared/get-support");
var _$jsx = _interopRequireDefault(require("../../shared/$jsx"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var Calendar = /*#__PURE__*/function (_Framework7Class) {
_inheritsLoose(Calendar, _Framework7Class);
function Calendar(app, params) {
var _this;
if (params === void 0) {
params = {};
}
_this = _Framework7Class.call(this, params, [app]) || this;
var calendar = _assertThisInitialized(_this);
calendar.params = (0, _utils.extend)({}, app.params.calendar, params);
var $containerEl;
if (calendar.params.containerEl) {
$containerEl = (0, _dom.default)(calendar.params.containerEl);
if ($containerEl.length === 0) return calendar || _assertThisInitialized(_this);
}
var $inputEl;
if (calendar.params.inputEl) {
$inputEl = (0, _dom.default)(calendar.params.inputEl);
}
var isHorizontal = calendar.params.direction === 'horizontal';
var inverter = 1;
if (isHorizontal) {
inverter = app.rtl ? -1 : 1;
}
(0, _utils.extend)(calendar, {
app: app,
$containerEl: $containerEl,
containerEl: $containerEl && $containerEl[0],
inline: $containerEl && $containerEl.length > 0,
$inputEl: $inputEl,
inputEl: $inputEl && $inputEl[0],
initialized: false,
opened: false,
url: calendar.params.url,
isHorizontal: isHorizontal,
inverter: inverter,
animating: false,
allowTouchMove: true,
hasTimePicker: calendar.params.timePicker && !calendar.params.rangePicker && !calendar.params.multiple
});
calendar.dayFormatter = new Intl.DateTimeFormat(calendar.params.locale, {
day: 'numeric'
});
calendar.monthFormatter = new Intl.DateTimeFormat(calendar.params.locale, {
month: 'long'
});
calendar.yearFormatter = new Intl.DateTimeFormat(calendar.params.locale, {
year: 'numeric'
});
calendar.timeSelectorFormatter = new Intl.DateTimeFormat(calendar.params.locale, calendar.params.timePickerFormat);
var timeFormatCheckDate = calendar.timeSelectorFormatter.format(new Date()).toLowerCase();
calendar.is12HoursFormat = timeFormatCheckDate.indexOf('pm') >= 0 || timeFormatCheckDate.indexOf('am') >= 0; // Auto names
var _calendar$params = calendar.params,
monthNames = _calendar$params.monthNames,
monthNamesShort = _calendar$params.monthNamesShort,
dayNames = _calendar$params.dayNames,
dayNamesShort = _calendar$params.dayNamesShort;
var _calendar$getIntlName = calendar.getIntlNames(),
monthNamesIntl = _calendar$getIntlName.monthNamesIntl,
monthNamesShortIntl = _calendar$getIntlName.monthNamesShortIntl,
dayNamesIntl = _calendar$getIntlName.dayNamesIntl,
dayNamesShortIntl = _calendar$getIntlName.dayNamesShortIntl;
if (monthNames === 'auto') monthNames = monthNamesIntl;
if (monthNamesShort === 'auto') monthNamesShort = monthNamesShortIntl;
if (dayNames === 'auto') dayNames = dayNamesIntl;
if (dayNamesShort === 'auto') dayNamesShort = dayNamesShortIntl;
(0, _utils.extend)(calendar, {
monthNames: monthNames,
monthNamesShort: monthNamesShort,
dayNames: dayNames,
dayNamesShort: dayNamesShort
});
function onInputClick() {
calendar.open();
}
function onInputFocus(e) {
e.preventDefault();
}
function onInputClear() {
calendar.setValue([]);
if (calendar.opened) {
calendar.update();
}
}
function onHtmlClick(e) {
var $targetEl = (0, _dom.default)(e.target);
if (calendar.destroyed || !calendar.params) return;
if (calendar.isPopover()) return;
if (!calendar.opened || calendar.closing) return;
if ($targetEl.closest('[class*="backdrop"]').length) return;
if ($inputEl && $inputEl.length > 0) {
if ($targetEl[0] !== $inputEl[0] && $targetEl.closest('.sheet-modal, .calendar-modal').length === 0) {
calendar.close();
}
} else if ((0, _dom.default)(e.target).closest('.sheet-modal, .calendar-modal').length === 0) {
calendar.close();
}
} // Events
(0, _utils.extend)(calendar, {
attachInputEvents: function attachInputEvents() {
calendar.$inputEl.on('click', onInputClick);
calendar.$inputEl.on('input:clear', onInputClear);
if (calendar.params.inputReadOnly) {
calendar.$inputEl.on('focus mousedown', onInputFocus);
if (calendar.$inputEl[0]) {
calendar.$inputEl[0].f7ValidateReadonly = true;
}
}
},
detachInputEvents: function detachInputEvents() {
calendar.$inputEl.off('click', onInputClick);
calendar.$inputEl.off('input:clear', onInputClear);
if (calendar.params.inputReadOnly) {
calendar.$inputEl.off('focus mousedown', onInputFocus);
if (calendar.$inputEl[0]) {
delete calendar.$inputEl[0].f7ValidateReadonly;
}
}
},
attachHtmlEvents: function attachHtmlEvents() {
app.on('click', onHtmlClick);
},
detachHtmlEvents: function detachHtmlEvents() {
app.off('click', onHtmlClick);
}
});
calendar.attachCalendarEvents = function attachCalendarEvents() {
var allowItemClick = true;
var isTouched;
var isMoved;
var touchStartX;
var touchStartY;
var touchCurrentX;
var touchCurrentY;
var touchStartTime;
var touchEndTime;
var currentTranslate;
var wrapperWidth;
var wrapperHeight;
var percentage;
var touchesDiff;
var isScrolling;
var $el = calendar.$el,
$wrapperEl = calendar.$wrapperEl;
function handleTouchStart(e) {
if (isMoved || isTouched) return;
isTouched = true;
touchStartX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
touchCurrentX = touchStartX;
touchStartY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
touchCurrentY = touchStartY;
touchStartTime = new Date().getTime();
percentage = 0;
allowItemClick = true;
isScrolling = undefined;
currentTranslate = calendar.monthsTranslate;
}
function handleTouchMove(e) {
if (!isTouched) return;
var isH = calendar.isHorizontal;
touchCurrentX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
touchCurrentY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
if (typeof isScrolling === 'undefined') {
isScrolling = !!(isScrolling || Math.abs(touchCurrentY - touchStartY) > Math.abs(touchCurrentX - touchStartX));
}
if (isH && isScrolling || !calendar.allowTouchMove) {
isTouched = false;
return;
}
e.preventDefault();
if (calendar.animating) {
isTouched = false;
return;
}
allowItemClick = false;
if (!isMoved) {
// First move
isMoved = true;
wrapperWidth = $wrapperEl[0].offsetWidth;
wrapperHeight = $wrapperEl[0].offsetHeight;
$wrapperEl.transition(0);
}
touchesDiff = isH ? touchCurrentX - touchStartX : touchCurrentY - touchStartY;
percentage = touchesDiff / (isH ? wrapperWidth : wrapperHeight);
currentTranslate = (calendar.monthsTranslate * calendar.inverter + percentage) * 100; // Transform wrapper
$wrapperEl.transform("translate3d(" + (isH ? currentTranslate : 0) + "%, " + (isH ? 0 : currentTranslate) + "%, 0)");
}
function handleTouchEnd() {
if (!isTouched || !isMoved) {
isTouched = false;
isMoved = false;
return;
}
isTouched = false;
isMoved = false;
touchEndTime = new Date().getTime();
if (touchEndTime - touchStartTime < 300) {
if (Math.abs(touchesDiff) < 10) {
calendar.resetMonth();
} else if (touchesDiff >= 10) {
if (app.rtl) calendar.nextMonth();else calendar.prevMonth();
} else if (app.rtl) calendar.prevMonth();else calendar.nextMonth();
} else if (percentage <= -0.5) {
if (app.rtl) calendar.prevMonth();else calendar.nextMonth();
} else if (percentage >= 0.5) {
if (app.rtl) calendar.nextMonth();else calendar.prevMonth();
} else {
calendar.resetMonth();
} // Allow click
setTimeout(function () {
allowItemClick = true;
}, 100);
}
function handleDayClick(e) {
if (!allowItemClick) return;
var $dayEl = (0, _dom.default)(e.target).parents('.calendar-day');
if ($dayEl.length === 0 && (0, _dom.default)(e.target).hasClass('calendar-day')) {
$dayEl = (0, _dom.default)(e.target);
}
if ($dayEl.length === 0) return;
if ($dayEl.hasClass('calendar-day-disabled')) return;
if (!calendar.params.rangePicker) {
if ($dayEl.hasClass('calendar-day-next')) calendar.nextMonth();
if ($dayEl.hasClass('calendar-day-prev')) calendar.prevMonth();
}
var dateYear = parseInt($dayEl.attr('data-year'), 10);
var dateMonth = parseInt($dayEl.attr('data-month'), 10);
var dateDay = parseInt($dayEl.attr('data-day'), 10);
calendar.emit('local::dayClick calendarDayClick', calendar, $dayEl[0], dateYear, dateMonth, dateDay);
if (!$dayEl.hasClass('calendar-day-selected') || calendar.params.multiple || calendar.params.rangePicker) {
var valueToAdd = new Date(dateYear, dateMonth, dateDay, 0, 0, 0);
if (calendar.hasTimePicker) {
if (calendar.value && calendar.value[0]) {
valueToAdd.setHours(calendar.value[0].getHours(), calendar.value[0].getMinutes());
} else {
valueToAdd.setHours(new Date().getHours(), new Date().getMinutes());
}
}
calendar.addValue(valueToAdd);
}
if (calendar.params.closeOnSelect) {
if (calendar.params.rangePicker && calendar.value.length === 2 || !calendar.params.rangePicker) {
calendar.close();
}
}
}
function onNextMonthClick() {
calendar.nextMonth();
}
function onPrevMonthClick() {
calendar.prevMonth();
}
function onNextYearClick() {
calendar.nextYear();
}
function onPrevYearClick() {
calendar.prevYear();
}
function onMonthSelectorClick() {
$el.append(calendar.renderMonthPicker());
}
function onMonthSelectorItemClick() {
var $clickedEl = (0, _dom.default)(this);
if ($clickedEl.hasClass('calendar-month-picker-item-current')) {
$el.find('.calendar-month-picker').remove();
return;
}
$el.find('.calendar-month-picker-item-current').add($clickedEl).toggleClass('calendar-month-picker-item-current');
var index = $clickedEl.index();
var localeMonthIndex = parseInt(calendar.$el.find('.calendar-month-current').attr('data-locale-month'), 10);
var monthIndex = calendar.currentMonth;
var diff = localeMonthIndex - monthIndex;
var diffIndex = index - diff;
calendar.setYearMonth(calendar.currentYear, diffIndex, 0);
setTimeout(function () {
$el.find('.calendar-month-picker').remove();
}, 200);
}
function onYearSelectorClick() {
$el.append(calendar.renderYearPicker());
var $currentEl = $el.find('.calendar-year-picker-item-current');
var $yearPickerEl = $el.find('.calendar-year-picker');
if (!$currentEl || !$currentEl.length) return;
$yearPickerEl.scrollTop($currentEl[0].offsetTop - $yearPickerEl[0].offsetHeight / 2 + $currentEl[0].offsetHeight / 2);
}
function onYearSelectorItemClick() {
var $clickedEl = (0, _dom.default)(this);
if ($clickedEl.hasClass('calendar-year-picker-item-current')) {
$el.find('.calendar-year-picker').remove();
return;
}
$el.find('.calendar-year-picker-item-current').add($clickedEl).toggleClass('calendar-year-picker-item-current');
var year = parseInt($clickedEl.attr('data-year'), 10);
calendar.setYearMonth(year, undefined, 0);
setTimeout(function () {
$el.find('.calendar-year-picker').remove();
}, 200);
}
function onTimeSelectorClick() {
calendar.openTimePicker();
}
function onTimePickerCloseClick() {
calendar.closeTimePicker();
}
var passiveListener = app.touchEvents.start === 'touchstart' && (0, _getSupport.getSupport)().passiveListener ? {
passive: true,
capture: false
} : false; // Selectors clicks
$el.find('.calendar-prev-month-button').on('click', onPrevMonthClick);
$el.find('.calendar-next-month-button').on('click', onNextMonthClick);
$el.find('.calendar-prev-year-button').on('click', onPrevYearClick);
$el.find('.calendar-next-year-button').on('click', onNextYearClick);
if (calendar.params.monthPicker) {
$el.find('.current-month-value').on('click', onMonthSelectorClick);
$el.on('click', '.calendar-month-picker-item', onMonthSelectorItemClick);
}
if (calendar.params.yearPicker) {
$el.find('.current-year-value').on('click', onYearSelectorClick);
$el.on('click', '.calendar-year-picker-item', onYearSelectorItemClick);
}
if (calendar.hasTimePicker) {
$el.find('.calendar-time-selector a').on('click', onTimeSelectorClick);
$el.on('click', '.calendar-time-picker-close', onTimePickerCloseClick);
} // Day clicks
$wrapperEl.on('click', handleDayClick); // Touch events
if (calendar.params.touchMove) {
$wrapperEl.on(app.touchEvents.start, handleTouchStart, passiveListener);
app.on('touchmove:active', handleTouchMove);
app.on('touchend:passive', handleTouchEnd);
}
calendar.detachCalendarEvents = function detachCalendarEvents() {
$el.find('.calendar-prev-month-button').off('click', onPrevMonthClick);
$el.find('.calendar-next-month-button').off('click', onNextMonthClick);
$el.find('.calendar-prev-year-button').off('click', onPrevYearClick);
$el.find('.calendar-next-year-button').off('click', onNextYearClick);
if (calendar.params.monthPicker) {
$el.find('.current-month-value').off('click', onMonthSelectorClick);
$el.off('click', '.calendar-month-picker-item', onMonthSelectorItemClick);
}
if (calendar.params.yearPicker) {
$el.find('.current-year-value').off('click', onYearSelectorClick);
$el.off('click', '.calendar-year-picker-item', onYearSelectorItemClick);
}
if (calendar.hasTimePicker) {
$el.find('.calendar-time-selector a').off('click', onTimeSelectorClick);
$el.off('click', '.calendar-time-picker-close', onTimePickerCloseClick);
}
$wrapperEl.off('click', handleDayClick);
if (calendar.params.touchMove) {
$wrapperEl.off(app.touchEvents.start, handleTouchStart, passiveListener);
app.off('touchmove:active', handleTouchMove);
app.off('touchend:passive', handleTouchEnd);
}
};
};
calendar.init();
return calendar || _assertThisInitialized(_this);
}
var _proto = Calendar.prototype;
_proto.getIntlNames = function getIntlNames() {
var calendar = this;
var locale = calendar.params.locale;
var monthNamesIntl = [];
var monthNamesShortIntl = [];
var dayNamesIntl = [];
var dayNamesShortIntl = [];
var formatterMonthNames = new Intl.DateTimeFormat(locale, {
month: 'long'
});
var formatterMonthNamesShort = new Intl.DateTimeFormat(locale, {
month: 'short'
});
var formatterDayNames = new Intl.DateTimeFormat(locale, {
weekday: 'long'
});
var formatterDayNamesShort = new Intl.DateTimeFormat(locale, {
weekday: 'short'
});
var year;
var yearStarted;
var yearEnded;
for (var i = 0; i < 24; i += 1) {
var date = new Date().setMonth(i, 1);
var currentYear = calendar.yearFormatter.format(date);
if (year && currentYear !== year) {
if (yearStarted) yearEnded = true;
yearStarted = true;
year = currentYear;
}
if (!year) {
year = currentYear;
}
if (yearStarted && year === currentYear && !yearEnded) {
monthNamesIntl.push(formatterMonthNames.format(date));
monthNamesShortIntl.push(formatterMonthNamesShort.format(date));
}
}
var weekDay = new Date().getDay();
for (var _i = 0; _i < 7; _i += 1) {
var _date = new Date().getTime() + (_i - weekDay) * 24 * 60 * 60 * 1000;
dayNamesIntl.push(formatterDayNames.format(_date));
dayNamesShortIntl.push(formatterDayNamesShort.format(_date));
}
return {
monthNamesIntl: monthNamesIntl,
monthNamesShortIntl: monthNamesShortIntl,
dayNamesIntl: dayNamesIntl,
dayNamesShortIntl: dayNamesShortIntl
};
};
_proto.normalizeDate = function normalizeDate(date) {
var calendar = this;
var d = new Date(date);
if (calendar.hasTimePicker) {
return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes());
}
return new Date(d.getFullYear(), d.getMonth(), d.getDate());
};
_proto.normalizeValues = function normalizeValues(values) {
var calendar = this;
var newValues = [];
if (values && Array.isArray(values)) {
newValues = values.map(function (val) {
return calendar.normalizeDate(val);
});
}
return newValues;
};
_proto.initInput = function initInput() {
var calendar = this;
if (!calendar.$inputEl) return;
if (calendar.params.inputReadOnly) calendar.$inputEl.prop('readOnly', true);
};
_proto.isPopover = function isPopover() {
var calendar = this;
var app = calendar.app,
modal = calendar.modal,
params = calendar.params;
var device = (0, _getDevice.getDevice)();
if (params.openIn === 'sheet') return false;
if (modal && modal.type !== 'popover') return false;
if (!calendar.inline && calendar.inputEl) {
if (params.openIn === 'popover') return true;
if (device.ios) {
return !!device.ipad;
}
if (app.width >= 768) {
return true;
}
if (device.desktop && app.theme === 'aurora') {
return true;
}
}
return false;
};
_proto.formatDate = function formatDate(d) {
var calendar = this;
var date = new Date(d);
var year = date.getFullYear();
var month = date.getMonth();
var month1 = month + 1;
var day = date.getDate();
var weekDay = date.getDay();
var monthNames = calendar.monthNames,
monthNamesShort = calendar.monthNamesShort,
dayNames = calendar.dayNames,
dayNamesShort = calendar.dayNamesShort;
var _calendar$params2 = calendar.params,
dateFormat = _calendar$params2.dateFormat,
locale = _calendar$params2.locale;
function twoDigits(number) {
return number < 10 ? "0" + number : number;
}
if (typeof dateFormat === 'string') {
var tokens = {
yyyy: year,
yy: String(year).substring(2),
mm: twoDigits(month1),
m: month1,
MM: monthNames[month],
M: monthNamesShort[month],
dd: twoDigits(day),
d: day,
DD: dayNames[weekDay],
D: dayNamesShort[weekDay]
};
if (calendar.params.timePicker) {
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
var hours12 = hours;
if (hours > 12) hours12 = hours - 12;
if (hours === 0) hours12 = 12;
var a = hours >= 12 && hours !== 0 ? 'pm' : 'am';
Object.assign(tokens, {
HH: twoDigits(hours),
H: hours,
hh: twoDigits(hours12),
h: hours12,
ss: twoDigits(seconds),
s: seconds,
':mm': twoDigits(minutes),
':m': minutes,
a: a,
A: a.toUpperCase()
});
}
var regexp = new RegExp(Object.keys(tokens).map(function (t) {
return "(" + t + ")";
}).join('|'), 'g');
return dateFormat.replace(regexp, function (token) {
if (token in tokens) return tokens[token];
return token;
});
}
if (typeof dateFormat === 'function') {
return dateFormat(date);
} // Intl Object
var formatter = new Intl.DateTimeFormat(locale, dateFormat);
return formatter.format(date);
};
_proto.formatValue = function formatValue() {
var calendar = this;
var value = calendar.value;
if (calendar.params.formatValue) {
return calendar.params.formatValue.call(calendar, value);
}
return value.map(function (v) {
return calendar.formatDate(v);
}).join(calendar.params.rangePicker ? ' - ' : ', ');
};
_proto.addValue = function addValue(newValue) {
var calendar = this;
var _calendar$params3 = calendar.params,
multiple = _calendar$params3.multiple,
rangePicker = _calendar$params3.rangePicker,
rangePickerMinDays = _calendar$params3.rangePickerMinDays,
rangePickerMaxDays = _calendar$params3.rangePickerMaxDays;
if (multiple) {
if (!calendar.value) calendar.value = [];
var inValuesIndex;
for (var i = 0; i < calendar.value.length; i += 1) {
if (new Date(newValue).getTime() === new Date(calendar.value[i]).getTime()) {
inValuesIndex = i;
}
}
if (typeof inValuesIndex === 'undefined') {
calendar.value.push(newValue);
} else {
calendar.value.splice(inValuesIndex, 1);
}
calendar.updateValue();
} else if (rangePicker) {
if (!calendar.value) calendar.value = [];
if (calendar.value.length === 2 || calendar.value.length === 0) {
calendar.value = [];
}
if (calendar.value.length === 0 || Math.abs(calendar.value[0].getTime() - newValue.getTime()) >= (rangePickerMinDays - 1) * 60 * 60 * 24 * 1000 && (rangePickerMaxDays === 0 || Math.abs(calendar.value[0].getTime() - newValue.getTime()) <= (rangePickerMaxDays - 1) * 60 * 60 * 24 * 1000)) calendar.value.push(newValue);else calendar.value = [];
calendar.value.sort(function (a, b) {
return a - b;
});
calendar.updateValue();
} else {
calendar.value = [newValue];
calendar.updateValue();
}
};
_proto.setValue = function setValue(values) {
var calendar = this;
var currentValue = calendar.value;
if (Array.isArray(currentValue) && Array.isArray(values) && currentValue.length === values.length) {
var equal = true;
currentValue.forEach(function (v, index) {
if (v !== values[index]) equal = false;
});
if (equal) return;
}
calendar.value = values;
calendar.updateValue();
};
_proto.getValue = function getValue() {
var calendar = this;
return calendar.value;
};
_proto.updateValue = function updateValue(onlyHeader) {
var calendar = this;
var $el = calendar.$el,
$wrapperEl = calendar.$wrapperEl,
$inputEl = calendar.$inputEl,
value = calendar.value,
params = calendar.params;
var i;
if ($el && $el.length > 0) {
$wrapperEl.find('.calendar-day-selected').removeClass('calendar-day-selected calendar-day-selected-range calendar-day-selected-left calendar-day-selected-right');
var valueDate;
if (params.rangePicker && value.length === 2) {
var leftDate = new Date(value[0]).getTime();
var rightDate = new Date(value[1]).getTime();
for (i = leftDate; i <= rightDate; i += 24 * 60 * 60 * 1000) {
valueDate = new Date(i);
var addClass = 'calendar-day-selected';
if (leftDate !== rightDate) {
if (i !== leftDate && i !== rightDate) {
addClass += ' calendar-day-selected-range';
}
if (i === leftDate) {
addClass += ' calendar-day-selected-left';
}
if (i === rightDate) {
addClass += ' calendar-day-selected-right';
}
}
$wrapperEl.find(".calendar-day[data-date=\"" + valueDate.getFullYear() + "-" + valueDate.getMonth() + "-" + valueDate.getDate() + "\"]").addClass(addClass);
}
valueDate = new Date(leftDate);
$wrapperEl.find(".calendar-day[data-date=\"" + valueDate.getFullYear() + "-" + valueDate.getMonth() + "-" + valueDate.getDate() + "\"]").removeClass('calendar-day-selected-range').addClass('calendar-day-selected calendar-day-selected-left');
valueDate = new Date(rightDate);
$wrapperEl.find(".calendar-day[data-date=\"" + valueDate.getFullYear() + "-" + valueDate.getMonth() + "-" + valueDate.getDate() + "\"]").removeClass('calendar-day-selected-range').addClass('calendar-day-selected calendar-day-selected-right');
} else {
for (i = 0; i < calendar.value.length; i += 1) {
valueDate = new Date(value[i]);
$wrapperEl.find(".calendar-day[data-date=\"" + valueDate.getFullYear() + "-" + valueDate.getMonth() + "-" + valueDate.getDate() + "\"]").addClass('calendar-day-selected');
}
}
}
if (!onlyHeader) {
calendar.emit('local::change calendarChange', calendar, value);
}
if ($el && $el.length > 0 && calendar.hasTimePicker) {
$el.find('.calendar-time-selector a').text(value && value.length ? calendar.timeSelectorFormatter.format(value[0]) : calendar.params.timePickerPlaceholder);
}
if ($inputEl && $inputEl.length || params.header) {
var inputValue = calendar.formatValue(value);
if (params.header && $el && $el.length) {
$el.find('.calendar-selected-date').text(inputValue);
}
if ($inputEl && $inputEl.length && !onlyHeader) {
$inputEl.val(inputValue);
$inputEl.trigger('change');
}
}
};
_proto.updateCurrentMonthYear = function updateCurrentMonthYear(dir) {
var calendar = this;
var $months = calendar.$months,
$el = calendar.$el,
monthNames = calendar.monthNames;
var currentLocaleMonth;
var currentLocaleYear;
if (typeof dir === 'undefined') {
calendar.currentMonth = parseInt($months.eq(1).attr('data-month'), 10);
calendar.currentYear = parseInt($months.eq(1).attr('data-year'), 10);
currentLocaleMonth = $months.eq(1).attr('data-locale-month');
currentLocaleYear = $months.eq(1).attr('data-locale-year');
} else {
calendar.currentMonth = parseInt($months.eq(dir === 'next' ? $months.length - 1 : 0).attr('data-month'), 10);
calendar.currentYear = parseInt($months.eq(dir === 'next' ? $months.length - 1 : 0).attr('data-year'), 10);
currentLocaleMonth = $months.eq(dir === 'next' ? $months.length - 1 : 0).attr('data-locale-month');
currentLocaleYear = $months.eq(dir === 'next' ? $months.length - 1 : 0).attr('data-locale-year');
}
$el.find('.current-month-value').text(monthNames[currentLocaleMonth]);
$el.find('.current-year-value').text(currentLocaleYear);
};
_proto.update = function update() {
var calendar = this;
var currentYear = calendar.currentYear,
currentMonth = calendar.currentMonth,
$wrapperEl = calendar.$wrapperEl;
var currentDate = new Date(currentYear, currentMonth);
var prevMonthHtml = calendar.renderMonth(currentDate, 'prev');
var currentMonthHtml = calendar.renderMonth(currentDate);
var nextMonthHtml = calendar.renderMonth(currentDate, 'next');
$wrapperEl.transition(0).html("" + prevMonthHtml + currentMonthHtml + nextMonthHtml).transform('translate3d(0,0,0)');
calendar.$months = $wrapperEl.find('.calendar-month');
calendar.monthsTranslate = 0;
calendar.setMonthsTranslate();
calendar.$months.each(function (monthEl) {
calendar.emit('local::monthAdd calendarMonthAdd', monthEl);
});
};
_proto.onMonthChangeStart = function onMonthChangeStart(dir) {
var calendar = this;
var $months = calendar.$months,
currentYear = calendar.currentYear,
currentMonth = calendar.currentMonth;
calendar.updateCurrentMonthYear(dir);
$months.removeClass('calendar-month-current calendar-month-prev calendar-month-next');
var currentIndex = dir === 'next' ? $months.length - 1 : 0;
$months.eq(currentIndex).addClass('calendar-month-current');
$months.eq(dir === 'next' ? currentIndex - 1 : currentIndex + 1).addClass(dir === 'next' ? 'calendar-month-prev' : 'calendar-month-next');
calendar.emit('local::monthYearChangeStart calendarMonthYearChangeStart', calendar, currentYear, currentMonth);
};
_proto.onMonthChangeEnd = function onMonthChangeEnd(dir, rebuildBoth) {
var calendar = this;
var currentYear = calendar.currentYear,
currentMonth = calendar.currentMonth,
$wrapperEl = calendar.$wrapperEl,
monthsTranslate = calendar.monthsTranslate;
calendar.animating = false;
var nextMonthHtml;
var prevMonthHtml;
var currentMonthHtml;
$wrapperEl.find('.calendar-month:not(.calendar-month-prev):not(.calendar-month-current):not(.calendar-month-next)').remove();
if (typeof dir === 'undefined') {
dir = 'next'; // eslint-disable-line
rebuildBoth = true; // eslint-disable-line
}
if (!rebuildBoth) {
currentMonthHtml = calendar.renderMonth(new Date(currentYear, currentMonth), dir);
} else {
$wrapperEl.find('.calendar-month-next, .calendar-month-prev').remove();
prevMonthHtml = calendar.renderMonth(new Date(currentYear, currentMonth), 'prev');
nextMonthHtml = calendar.renderMonth(new Date(currentYear, currentMonth), 'next');
}
if (dir === 'next' || rebuildBoth) {
$wrapperEl.append(currentMonthHtml || nextMonthHtml);
}
if (dir === 'prev' || rebuildBoth) {
$wrapperEl.prepend(currentMonthHtml || prevMonthHtml);
}
var $months = $wrapperEl.find('.calendar-month');
calendar.$months = $months;
calendar.setMonthsTranslate(monthsTranslate);
calendar.emit('local::monthAdd calendarMonthAdd', calendar, dir === 'next' ? $months.eq($months.length - 1)[0] : $months.eq(0)[0]);
calendar.emit('local::monthYearChangeEnd calendarMonthYearChangeEnd', calendar, currentYear, currentMonth);
};
_proto.setMonthsTranslate = function setMonthsTranslate(translate) {
var calendar = this;
var $months = calendar.$months,
isH = calendar.isHorizontal,
inverter = calendar.inverter; // eslint-disable-next-line
translate = translate || calendar.monthsTranslate || 0;
if (typeof calendar.monthsTranslate === 'undefined') {
calendar.monthsTranslate = translate;
}
$months.removeClass('calendar-month-current calendar-month-prev calendar-month-next');
var prevMonthTranslate = -(translate + 1) * 100 * inverter;
var currentMonthTranslate = -translate * 100 * inverter;
var nextMonthTranslate = -(translate - 1) * 100 * inverter;
$months.eq(0).transform("translate3d(" + (isH ? prevMonthTranslate : 0) + "%, " + (isH ? 0 : prevMonthTranslate) + "%, 0)").addClass('calendar-month-prev');
$months.eq(1).transform("translate3d(" + (isH ? currentMonthTranslate : 0) + "%, " + (isH ? 0 : currentMonthTranslate) + "%, 0)").addClass('calendar-month-current');
$months.eq(2).transform("translate3d(" + (isH ? nextMonthTranslate : 0) + "%, " + (isH ? 0 : nextMonthTranslate) + "%, 0)").addClass('calendar-month-next');
};
_proto.nextMonth = function nextMonth(transition) {
var calendar = this;
var params = calendar.params,
$wrapperEl = calendar.$wrapperEl,
inverter = calendar.inverter,
isH = calendar.isHorizontal;
if (typeof transition === 'undefined' || typeof transition === 'object') {
transition = ''; // eslint-disable-line
if (!params.animate) transition = 0; // eslint-disable-line
}
var nextMonth = parseInt(calendar.$months.eq(calendar.$months.length - 1).attr('data-month'), 10);
var nextYear = parseInt(calendar.$months.eq(calendar.$months.length - 1).attr('data-year'), 10);
var nextDate = new Date(nextYear, nextMonth);
var nextDateTime = nextDate.getTime();
var transitionEndCallback = !calendar.animating;
if (params.maxDate) {
if (nextDateTime > new Date(params.maxDate).getTime()) {
calendar.resetMonth();
return;
}
}
calendar.monthsTranslate -= 1;
if (nextMonth === calendar.currentMonth) {
var nextMonthTranslate = -calendar.monthsTranslate * 100 * inverter;
var nextMonthHtml = (0, _dom.default)(calendar.renderMonth(nextDateTime, 'next')).transform("translate3d(" + (isH ? nextMonthTranslate : 0) + "%, " + (isH ? 0 : nextMonthTranslate) + "%, 0)").addClass('calendar-month-next');
$wrapperEl.append(nextMonthHtml[0]);
calendar.$months = $wrapperEl.find('.calendar-month');
calendar.emit('local::monthAdd calendarMonthAdd', calendar.$months.eq(calendar.$months.length - 1)[0]);
}
calendar.animating = true;
calendar.onMonthChangeStart('next');
var translate = calendar.monthsTranslate * 100 * inverter;
$wrapperEl.transition(transition).transform("translate3d(" + (isH ? translate : 0) + "%, " + (isH ? 0 : translate) + "%, 0)");
if (transitionEndCallback) {
$wrapperEl.transitionEnd(function () {
calendar.onMonthChangeEnd('next');
});
}
if (!params.animate) {
calendar.onMonthChangeEnd('next');
}
};
_proto.prevMonth = function prevMonth(transition) {
var calendar = this;
var params = calendar.params,
$wrapperEl = calendar.$wrapperEl,
inverter = calendar.inverter,
isH = calendar.isHorizontal;
if (typeof transition === 'undefined' || typeof transition === 'object') {
transition = ''; // eslint-disable-line
if (!params.animate) transition = 0; // eslint-disable-line
}
var prevMonth = parseInt(calendar.$months.eq(0).attr('data-month'), 10);
var prevYear = parseInt(calendar.$months.eq(0).attr('data-year'), 10);
var prevDate = new Date(prevYear, prevMonth + 1, -1);
var prevDateTime = prevDate.getTime();
var transitionEndCallback = !calendar.animating;
if (params.minDate) {
var minDate = new Date(params.minDate);
minDate = new Date(minDate.getFullYear(), minDate.getMonth(), 1);
if (prevDateTime < minDate.getTime()) {
calendar.resetMonth();
return;
}
}
calendar.monthsTranslate += 1;
if (prevMonth === calendar.currentMonth) {
var prevMonthTranslate = -calendar.monthsTranslate * 100 * inverter;
var prevMonthHtml = (0, _dom.default)(calendar.renderMonth(prevDateTime, 'prev')).transform("translate3d(" + (isH ? prevMonthTranslate : 0) + "%, " + (isH ? 0 : prevMonthTranslate) + "%, 0)").addClass('calendar-month-prev');
$wrapperEl.prepend(prevMonthHtml[0]);
calendar.$months = $wrapperEl.find('.calendar-month');
calendar.emit('local::monthAdd calendarMonthAdd', calendar.$months.eq(0)[0]);
}
calendar.animating = true;
calendar.onMonthChangeStart('prev');
var translate = calendar.monthsTranslate * 100 * inverter;
$wrapperEl.transition(transition).transform("translate3d(" + (isH ? translate : 0) + "%, " + (isH ? 0 : translate) + "%, 0)");
if (transitionEndCallback) {
$wrapperEl.transitionEnd(function () {
calendar.onMonthChangeEnd('prev');
});
}
if (!params.animate) {
calendar.onMonthChangeEnd('prev');
}
};
_proto.resetMonth = function resetMonth(transition) {
if (transition === void 0) {
transition = '';
}
var calendar = this;
var $wrapperEl = calendar.$wrapperEl,
inverter = calendar.inverter,
isH = calendar.isHorizontal,
monthsTranslate = calendar.monthsTranslate;
var translate = monthsTranslate * 100 * inverter;
$wrapperEl.transition(transition).transform("translate3d(" + (isH ? translate : 0) + "%, " + (isH ? 0 : translate) + "%, 0)");
} // eslint-disable-next-line
;
_proto.setYearMonth = function setYearMonth(year, month, transition) {
var calendar = this;
var params = calendar.params,
isH = calendar.isHorizontal,
$wrapperEl = calendar.$wrapperEl,
inverter = calendar.inverter; // eslint-disable-next-line
if (typeof year === 'undefined') year = calendar.currentYear; // eslint-disable-next-line
if (typeof month === 'undefined') month = calendar.currentMonth;
if (typeof transition === 'undefined' || typeof transition === 'object') {
// eslint-disable-next-line
transition = ''; // eslint-disable-next-line
if (!params.animate) transition = 0;
}
var targetDate;
if (year < calendar.currentYear) {
targetDate = new Date(year, month + 1, -1).getTime();
} else {
targetDate = new Date(year, month).getTime();
}
if (params.maxDate && targetDate > new Date(params.maxDate).getTime()) {
return false;
}
if (params.minDate) {
var minDate = new Date(params.minDate);
minDate = new Date(minDate.getFullYear(), minDate.getMonth(), 1);
if (targetDate < minDate.getTime()) {
return false;
}
}
var currentDate = new Date(calendar.currentYear, calendar.currentMonth).getTime();
var dir = targetDate > currentDate ? 'next' : 'prev';
var newMonthHTML = calendar.renderMonth(new Date(year, month));
calendar.monthsTranslate = calendar.monthsTranslate || 0;
var prevTranslate = calendar.monthsTranslate;
var monthTranslate;
var transitionEndCallback = !calendar.animating && transition !== 0;
if (targetDate > currentDate) {
// To next
calendar.monthsTranslate -= 1;
if (!calendar.animating) calendar.$months.eq(calendar.$months.length - 1).remove();
$wrapperEl.append(newMonthHTML);
calendar.$months = $wrapperEl.find('.calendar-month');
monthTranslate = -(prevTranslate - 1) * 100 * inverter;
calendar.$months.eq(calendar.$months.length - 1).transform("translate3d(" + (isH ? monthTranslate : 0) + "%, " + (isH ? 0 : monthTranslate) + "%, 0)").addClass('calendar-month-next');
} else {
// To prev
calendar.monthsTranslate += 1;
if (!calendar.animating) calendar.$months.eq(0).remove();
$wrapperEl.prepend(newMonthHTML);
calendar.$months = $wrapperEl.find('.calendar-month');
monthTranslate = -(prevTranslate + 1) * 100 * inverter;
calendar.$months.eq(0).transform("translate3d(" + (isH ? monthTranslate : 0) + "%, " + (isH ? 0 : monthTranslate) + "%, 0)").addClass('calendar-month-prev');
}
calendar.emit('local::monthAdd calendarMonthAdd', dir === 'next' ? calendar.$months.eq(calendar.$months.length - 1)[0] : calendar.$months.eq(0)[0]);
calendar.animating = true;
calendar.onMonthChangeStart(dir);
var wrapperTranslate = calendar.monthsTranslate * 100 * inverter;
$wrapperEl.transition(transition).transform("translate3d(" + (isH ? wrapperTranslate : 0) + "%, " + (isH ? 0 : wrapperTranslate) + "%, 0)");
if (transitionEndCallback) {
$wrapperEl.transitionEnd(function () {
calendar.onMonthChangeEnd(dir, true);
});
}
if (!params.animate || transition === 0) {
calendar.onMonthChangeEnd(dir, true);
}
};
_proto.nextYear = function nextYear() {
var calendar = this;
calendar.setYearMonth(calendar.currentYear + 1);
};
_proto.prevYear = function prevYear() {
var calendar = this;
calendar.setYearMonth(calendar.currentYear - 1);
} // eslint-disable-next-line
;
_proto.dateInRange = function dateInRange(dayDate, range) {
var match = false;
var i;
if (!range) return false;
if (Array.isArray(range)) {
for (i = 0; i < range.length; i += 1) {
if (range[i].from || range[i].to) {
if (range[i].from && range[i].to) {
if (dayDate <= new Date(range[i].to).getTime() && dayDate >= new Date(range[i].from).getTime()) {
match = true;
}
} else if (range[i].from) {
if (dayDate >= new Date(range[i].from).getTime()) {
match = true;
}
} else if (range[i].to) {
if (dayDate <= new Date(range[i].to).getTime()) {
match = true;
}
}
} else if (range[i].date) {
if (dayDate === new Date(range[i].date).getTime()) {
match = true;
}
} else if (dayDate === new Date(range[i]).getTime()) {
match = true;
}
}
} else if (range.from || range.to) {
if (range.from && range.to) {
if (dayDate <= new Date(range.to).getTime() && dayDate >= new Date(range.from).getTime()) {
match = true;
}
} else if (range.from) {
if (dayDate >= new Date(range.from).getTime()) {
match = true;
}
} else if (range.to) {
if (dayDate <= new Date(range.to).getTime()) {
match = true;
}
}
} else if (range.date) {
match = dayDate === new Date(range.date).getTime();
} else if (typeof range === 'function') {
match = range(new Date(dayDate));
}
return match;
} // eslint-disable-next-line
;
_proto.daysInMonth = function daysInMonth(date) {
var d = new Date(date);
return new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();
};
_proto.renderMonths = function renderMonths(date) {
var calendar = this;
if (calendar.params.renderMonths) {
return calendar.params.renderMonths.call(calendar, date);
}
return (0, _$jsx.default)("div", {
class: "calendar-months-wrapper"
}, calendar.renderMonth(date, 'prev'), calendar.renderMonth(date), calendar.renderMonth(date, 'next'));
};
_proto.renderMonth = function renderMonth(d, offset) {
var calendar = this;
var params = calendar.params,
value = calendar.value;
if (params.renderMonth) {
return params.renderMonth.call(calendar, d, offset);
}
var date = new Date(d);
var year = date.getFullYear();
var month = date.getMonth();
var localeMonth = calendar.monthNames.indexOf(calendar.monthFormatter.format(date));
if (localeMonth < 0) localeMonth = month;
var localeYear = calendar.yearFormatter.format(date);
if (offset === 'next') {
if (month === 11) date = new Date(year + 1, 0);else date = new Date(year, month + 1, 1);
}
if (offset === 'prev') {
if (month === 0) date = new Date(year - 1, 11);else date = new Date(year, month - 1, 1);
}
if (offset === 'next' || offset === 'prev') {
month = date.getMonth();
year = date.getFullYear();
localeMonth = calendar.monthNames.indexOf(calendar.monthFormatter.format(date));
if (localeMonth < 0) localeMonth = month;
localeYear = calendar.yearFormatter.format(date);
}
var currentValues = [];
var today = new Date().setHours(0, 0, 0, 0);
var minDate = params.minDate ? new Date(params.minDate).getTime() : null;
var maxDate = params.maxDate ? new Date(params.maxDate).getTime() : null;
var rows = 6;
var cols = 7;
var daysInPrevMonth = calendar.daysInMonth(new Date(date.getFullYear(), date.getMonth()).getTime() - 10 * 24 * 60 * 60 * 1000);
var daysInMonth = calendar.daysInMonth(date);
var minDayNumber = params.firstDay === 6 ? 0 : 1;
var monthHtml = '';
var dayIndex = 0 + (params.firstDay - 1);
var disabled;
var hasEvents;
var firstDayOfMonthIndex = new Date(date.getFullYear(), date.getMonth()).getDay();
if (firstDayOfMonthIndex === 0) firstDayOfMonthIndex = 7;
if (value && value.length) {
for (var i = 0; i < value.length; i += 1) {
currentValues.push(new Date(value[i]).setHours(0, 0, 0, 0));
}
}
for (var row = 1; row <= rows; row += 1) {
var rowHtml = '';
var _loop = function _loop(col) {
dayIndex += 1;
var dayDate = void 0;
var dayNumber = dayIndex - firstDayOfMonthIndex;
var addClass = '';
if (row === 1 && col === 1 && dayNumber > minDayNumber && params.firstDay !== 1) {
dayIndex -= 7;
dayNumber = dayIndex - firstDayOfMonthIndex;
}
var weekDayIndex = col - 1 + params.firstDay > 6 ? col - 1 - 7 + params.firstDay : col - 1 + params.firstDay;
if (dayNumber < 0) {
dayNumber = daysInPrevMonth + dayNumber + 1;
addClass += ' calendar-day-prev';
dayDate = new Date(month - 1 < 0 ? year - 1 : year, month - 1 < 0 ? 11 : month - 1, dayNumber).getTime();
} else {
dayNumber += 1;
if (dayNumber > daysInMonth) {
dayNumber -= daysInMonth;
addClass += ' calendar-day-next';
dayDate = new Date(month + 1 > 11 ? year + 1 : year, month + 1 > 11 ? 0 : month + 1, dayNumber).getTime();
} else {
dayDate = new Date(year, month, dayNumber).getTime();
}
} // Today
if (dayDate === today) addClass += ' calendar-day-today'; // Selected
if (params.rangePicker && currentValues.length === 2) {
if (dayDate >= currentValues[0] && dayDate <= currentValues[1]) {
addClass += ' calendar-day-selected';
}
if (currentValues[0] !== currentValues[1]) {
if (dayDate > currentValues[0] && dayDate < currentValues[1]) {
addClass += ' calendar-day-selected-range';
}
if (dayDate === currentValues[0]) {
addClass += ' calendar-day-selected-left';
}
if (dayDate === currentValues[1]) {
addClass += ' calendar-day-selected-right';
}
}
} else if (currentValues.indexOf(dayDate) >= 0) addClass += ' calendar-day-selected'; // Weekend
if (params.weekendDays.indexOf(weekDayIndex) >= 0) {
addClass += ' calendar-day-weekend';
} // Events
var eventsHtml = '';
hasEvents = false;
if (params.events) {
if (calendar.dateInRange(dayDate, params.events)) {
hasEvents = true;
}
}
if (hasEvents) {
addClass += ' calendar-day-has-events'; // prettier-ignore
eventsHtml = "\n <span class=\"calendar-day-events\">\n <span class=\"calendar-day-event\"></span>\n </span>\n ";
if (Array.isArray(params.events)) {
var eventDots = [];
params.events.forEach(function (ev) {
var color = ev.color || '';
if (eventDots.indexOf(color) < 0 && calendar.dateInRange(dayDate, ev)) {
eventDots.push(color);
}
}); // prettier-ignore
eventsHtml = "\n <span class=\"calendar-day-events\">\n " + eventDots.map(function (color) {
return ("\n <span class=\"calendar-day-event\" style=\"" + (color ? "background-color: " + color : '') + "\"></span>\n ").trim();
}).join('') + "\n </span>\n ";
}
} // Custom Ranges
if (params.rangesClasses) {
for (var k = 0; k < params.rangesClasses.length; k += 1) {
if (calendar.dateInRange(dayDate, params.rangesClasses[k].range)) {
addClass += " " + params.rangesClasses[k].cssClass;
}
}
} // Disabled
disabled = false;
if (minDate && dayDate < minDate || maxDate && dayDate > maxDate) {
disabled = true;
}
if (params.disabled) {
if (calendar.dateInRange(dayDate, params.disabled)) {
disabled = true;
}
}
if (disabled) {
addClass += ' calendar-