ngx-animating-datepicker
Version:
An Animating Datepicker for Angular 2+, for some smooth date picking :).
307 lines • 15.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
var DatepickerService = /** @class */ (function () {
function DatepickerService() {
}
/**
* Get the formatted weekdays
*
* @param language
* @param format
* @param start
*/
/**
* Get the formatted weekdays
*
* @param {?} language
* @param {?} format
* @param {?} start
* @return {?}
*/
DatepickerService.getWeekDays = /**
* Get the formatted weekdays
*
* @param {?} language
* @param {?} format
* @param {?} start
* @return {?}
*/
function (language, format, start) {
/** @type {?} */
var days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'];
/** @type {?} */
var index = days.indexOf(start.toLowerCase());
if (index < 0) {
throw new Error('Invalid week day start: ' + start);
}
/** @type {?} */
var weekdays = [];
for (var day = 5; day <= 11; day++) {
weekdays.push(new Date(1970, 1 - 1, day + index).toLocaleString(language, { weekday: format }));
}
return weekdays;
};
/**
* Checks if is a value iso code
*
* @param isoCode
*/
/**
* Checks if is a value iso code
*
* @param {?} isoCode
* @return {?}
*/
DatepickerService.isValidIsoCode = /**
* Checks if is a value iso code
*
* @param {?} isoCode
* @return {?}
*/
function (isoCode) {
/** @type {?} */
var pattern = new RegExp(/([a-z]{2})-([A-Z]{2})/);
return pattern.test(isoCode);
};
/**
* Create a week array from the merged day arrays
*
* @param dayArray
*/
/**
* Create a week array from the merged day arrays
*
* @param {?} dayArray
* @return {?}
*/
DatepickerService.createWeekArray = /**
* Create a week array from the merged day arrays
*
* @param {?} dayArray
* @return {?}
*/
function (dayArray) {
/** @type {?} */
var size = 7;
/** @type {?} */
var weeks = [];
while (dayArray.length) {
weeks.push({
days: dayArray.splice(0, size)
});
}
return weeks;
};
/**
* @param {?} year
* @param {?} month
* @return {?}
*/
DatepickerService.getDaysInMonth = /**
* @param {?} year
* @param {?} month
* @return {?}
*/
function (year, month) {
return [31, DatepickerService.isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
};
/**
* @param {?} value
* @return {?}
*/
DatepickerService.isValidDate = /**
* @param {?} value
* @return {?}
*/
function (value) {
/** @type {?} */
var validDate = true;
for (var i = 0; i < value.length; i++) {
if (!DatepickerService.isDate(value[i]) && validDate) {
validDate = false;
}
}
return validDate;
};
/**
* Check if year is a leap year
*
* @param year
*/
/**
* Check if year is a leap year
*
* @param {?} year
* @return {?}
*/
DatepickerService.isLeapYear = /**
* Check if year is a leap year
*
* @param {?} year
* @return {?}
*/
function (year) {
return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
};
/**
* Checks to see if value is a valid date
*
* @param value
*/
/**
* Checks to see if value is a valid date
*
* @param {?} value
* @return {?}
*/
DatepickerService.isDate = /**
* Checks to see if value is a valid date
*
* @param {?} value
* @return {?}
*/
function (value) {
return value instanceof Date;
};
/**
* Get the year of the next month
*
* @param year
* @param month
*/
/**
* Get the year of the next month
*
* @param {?} year
* @param {?} month
* @return {?}
*/
DatepickerService.getYearOfNextMonth = /**
* Get the year of the next month
*
* @param {?} year
* @param {?} month
* @return {?}
*/
function (year, month) {
return month === 11 ? year + 1 : year;
};
/**
* Get the next month
*
* @param month
*/
/**
* Get the next month
*
* @param {?} month
* @return {?}
*/
DatepickerService.getNextMonth = /**
* Get the next month
*
* @param {?} month
* @return {?}
*/
function (month) {
return month === 11 ? 0 : month + 1;
};
/**
* Get the year of the previous month
*
* @param year
* @param month
*/
/**
* Get the year of the previous month
*
* @param {?} year
* @param {?} month
* @return {?}
*/
DatepickerService.getYearOfPreviousMonth = /**
* Get the year of the previous month
*
* @param {?} year
* @param {?} month
* @return {?}
*/
function (year, month) {
return month === 0 ? year - 1 : year;
};
/**
* Get previous motnh
*
* @param month
*/
/**
* Get previous motnh
*
* @param {?} month
* @return {?}
*/
DatepickerService.getPreviousMonth = /**
* Get previous motnh
*
* @param {?} month
* @return {?}
*/
function (month) {
return month === 0 ? 11 : month - 1;
};
/**
* Check if a date is later
*
* @param date
* @param compareDate
*/
/**
* Check if a date is later
*
* @param {?} date
* @param {?} compareDate
* @return {?}
*/
DatepickerService.isLater = /**
* Check if a date is later
*
* @param {?} date
* @param {?} compareDate
* @return {?}
*/
function (date, compareDate) {
return date > compareDate;
};
/**
* Check if a date is ealrier
*
* @param date
* @param compareDate
*/
/**
* Check if a date is ealrier
*
* @param {?} date
* @param {?} compareDate
* @return {?}
*/
DatepickerService.isEarlier = /**
* Check if a date is ealrier
*
* @param {?} date
* @param {?} compareDate
* @return {?}
*/
function (date, compareDate) {
return date < compareDate;
};
DatepickerService.decorators = [
{ type: Injectable },
];
return DatepickerService;
}());
export { DatepickerService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWFuaW1hdGluZy1kYXRlcGlja2VyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2RhdGVwaWNrZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQztJQUFBO0lBOElBLENBQUM7SUE1SUE7Ozs7OztPQU1HOzs7Ozs7Ozs7SUFDSSw2QkFBVzs7Ozs7Ozs7SUFBbEIsVUFBbUIsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsS0FBYTs7WUFDM0QsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDOztZQUVyRixLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0MsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsR0FBRyxLQUFLLENBQUMsQ0FBQztTQUNwRDs7WUFFSyxRQUFRLEdBQUcsRUFBRTtRQUNuQixLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ25DLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hHO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7O09BSUc7Ozs7Ozs7SUFDSSxnQ0FBYzs7Ozs7O0lBQXJCLFVBQXNCLE9BQWU7O1lBQzlCLE9BQU8s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Ozs7Ozs7SUFDSSx5QkFBTzs7Ozs7OztJQUFkLFVBQWUsSUFBVSxFQUFFLFdBQWlCO1FBQzNDLE9BQU8sSUFBSSxHQUFHLFdBQVcsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7O09BS0c7Ozs7Ozs7O0lBQ0ksMkJBQVM7Ozs7Ozs7SUFBaEIsVUFBaUIsSUFBVSxFQUFFLFdBQWlCO1FBQzdDLE9BQU8sSUFBSSxHQUFHLFdBQVcsQ0FBQztJQUMzQixDQUFDOztnQkE3SUQsVUFBVTs7SUE4SVgsd0JBQUM7Q0FBQSxBQTlJRCxJQThJQztTQTdJWSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXksIFdlZWsgfSBmcm9tICcuLi9tb2RlbHMvZGF0ZXBpY2tlci5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYXRlcGlja2VyU2VydmljZSB7XG5cdC8qKlxuXHQgKiBHZXQgdGhlIGZvcm1hdHRlZCB3ZWVrZGF5c1xuXHQgKlxuXHQgKiBAcGFyYW0gbGFuZ3VhZ2Vcblx0ICogQHBhcmFtIGZvcm1hdFxuXHQgKiBAcGFyYW0gc3RhcnRcblx0ICovXG5cdHN0YXRpYyBnZXRXZWVrRGF5cyhsYW5ndWFnZTogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZywgc3RhcnQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBkYXlzID0gWydtb25kYXknLCAndHVlc2RheScsICd3ZWRuZXNkYXknLCAndGh1cnNkYXknLCAnZnJpZGF5JywgJ3NhdHVyZGF5JywgJ3N1bmRheSddO1xuXG5cdFx0Y29uc3QgaW5kZXggPSBkYXlzLmluZGV4T2Yoc3RhcnQudG9Mb3dlckNhc2UoKSk7XG5cdFx0aWYgKGluZGV4IDwgMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHdlZWsgZGF5IHN0YXJ0OiAnICsgc3RhcnQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHdlZWtkYXlzID0gW107XG5cdFx0Zm9yIChsZXQgZGF5ID0gNTsgZGF5IDw9IDExOyBkYXkrKykge1xuXHRcdFx0d2Vla2RheXMucHVzaChuZXcgRGF0ZSgxOTcwLCAxIC0gMSwgZGF5ICsgaW5kZXgpLnRvTG9jYWxlU3RyaW5nKGxhbmd1YWdlLCB7IHdlZWtkYXk6IGZvcm1hdCB9KSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdlZWtkYXlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBpcyBhIHZhbHVlIGlzbyBjb2RlXG5cdCAqXG5cdCAqIEBwYXJhbSBpc29Db2RlXG5cdCAqL1xuXHRzdGF0aWMgaXNWYWxpZElzb0NvZGUoaXNvQ29kZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoLyhbYS16XXsyfSktKFtBLVpdezJ9KS8pO1xuXHRcdHJldHVybiBwYXR0ZXJuLnRlc3QoaXNvQ29kZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIGEgd2VlayBhcnJheSBmcm9tIHRoZSBtZXJnZWQgZGF5IGFycmF5c1xuXHQgKlxuXHQgKiBAcGFyYW0gZGF5QXJyYXlcblx0ICovXG5cdHN0YXRpYyBjcmVhdGVXZWVrQXJyYXkoZGF5QXJyYXk6IERheVtdKTogV2Vla1tdIHtcblx0XHRjb25zdCBzaXplID0gNztcblx0XHRjb25zdCB3ZWVrcyA9IFtdO1xuXHRcdHdoaWxlIChkYXlBcnJheS5sZW5ndGgpIHtcblx0XHRcdHdlZWtzLnB1c2goe1xuXHRcdFx0XHRkYXlzOiBkYXlBcnJheS5zcGxpY2UoMCwgc2l6ZSlcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gd2Vla3M7XG5cdH1cblxuXHRzdGF0aWMgZ2V0RGF5c0luTW9udGgoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gWzMxLCBEYXRlcGlja2VyU2VydmljZS5pc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdW21vbnRoXTtcblx0fVxuXG5cdHN0YXRpYyBpc1ZhbGlkRGF0ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdFx0bGV0IHZhbGlkRGF0ZSA9IHRydWU7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoIURhdGVwaWNrZXJTZXJ2aWNlLmlzRGF0ZSh2YWx1ZVtpXSkgJiYgdmFsaWREYXRlKSB7XG5cdFx0XHRcdHZhbGlkRGF0ZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWxpZERhdGU7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgeWVhciBpcyBhIGxlYXAgeWVhclxuXHQgKlxuXHQgKiBAcGFyYW0geWVhclxuXHQgKi9cblx0c3RhdGljIGlzTGVhcFllYXIoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB0byBzZWUgaWYgdmFsdWUgaXMgYSB2YWxpZCBkYXRlXG5cdCAqXG5cdCAqIEBwYXJhbSB2YWx1ZVxuXHQgKi9cblx0c3RhdGljIGlzRGF0ZSh2YWx1ZTogRGF0ZSkge1xuXHRcdHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSB5ZWFyIG9mIHRoZSBuZXh0IG1vbnRoXG5cdCAqXG5cdCAqIEBwYXJhbSB5ZWFyXG5cdCAqIEBwYXJhbSBtb250aFxuXHQgKi9cblx0c3RhdGljIGdldFllYXJPZk5leHRNb250aCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiBtb250aCA9PT0gMTEgPyB5ZWFyICsgMSA6IHllYXI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBuZXh0IG1vbnRoXG5cdCAqXG5cdCAqIEBwYXJhbSBtb250aFxuXHQgKi9cblx0c3RhdGljIGdldE5leHRNb250aChtb250aDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gbW9udGggPT09IDExID8gMCA6IG1vbnRoICsgMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIHllYXIgb2YgdGhlIHByZXZpb3VzIG1vbnRoXG5cdCAqXG5cdCAqIEBwYXJhbSB5ZWFyXG5cdCAqIEBwYXJhbSBtb250aFxuXHQgKi9cblx0c3RhdGljIGdldFllYXJPZlByZXZpb3VzTW9udGgoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gbW9udGggPT09IDAgPyB5ZWFyIC0gMSA6IHllYXI7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHByZXZpb3VzIG1vdG5oXG5cdCAqXG5cdCAqIEBwYXJhbSBtb250aFxuXHQgKi9cblx0c3RhdGljIGdldFByZXZpb3VzTW9udGgobW9udGg6IG51bWJlcik6IG51bWJlciB7XG5cdFx0cmV0dXJuIG1vbnRoID09PSAwID8gMTEgOiBtb250aCAtIDE7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYSBkYXRlIGlzIGxhdGVyXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRlXG5cdCAqIEBwYXJhbSBjb21wYXJlRGF0ZVxuXHQgKi9cblx0c3RhdGljIGlzTGF0ZXIoZGF0ZTogRGF0ZSwgY29tcGFyZURhdGU6IERhdGUpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gZGF0ZSA+IGNvbXBhcmVEYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIGEgZGF0ZSBpcyBlYWxyaWVyXG5cdCAqXG5cdCAqIEBwYXJhbSBkYXRlXG5cdCAqIEBwYXJhbSBjb21wYXJlRGF0ZVxuXHQgKi9cblx0c3RhdGljIGlzRWFybGllcihkYXRlOiBEYXRlLCBjb21wYXJlRGF0ZTogRGF0ZSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBkYXRlIDwgY29tcGFyZURhdGU7XG5cdH1cbn1cbiJdfQ==