angular-mydatepicker
Version:
Angular datepicker and date range picker
1,171 lines • 97.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Injectable } from "@angular/core";
import { KeyCode } from "../enums/key-code.enum";
import { KeyName } from "../enums/key-name.enum";
import { D, DD, M, MM, MMM, YYYY, ORDINAL, ST, ND, RD, SU, MO, TU, WE, TH, FR, SA, ZERO_STR, EMPTY_STR, PIPE } from "../constants/constants";
var UtilService = /** @class */ (function () {
function UtilService() {
this.weekDays = [SU, MO, TU, WE, TH, FR, SA];
}
/**
* @param {?} dateStr
* @param {?} options
* @param {?} validateOpts
* @return {?}
*/
UtilService.prototype.isDateValid = /**
* @param {?} dateStr
* @param {?} options
* @param {?} validateOpts
* @return {?}
*/
function (dateStr, options, validateOpts) {
var e_1, _a;
var dateFormat = options.dateFormat, minYear = options.minYear, maxYear = options.maxYear, monthLabels = options.monthLabels;
/** @type {?} */
var returnDate = this.resetDate();
/** @type {?} */
var datesInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
/** @type {?} */
var isMonthStr = dateFormat.indexOf(MMM) !== -1;
/** @type {?} */
var delimeters = dateFormat.match(/[^(d#my)]{1,}/g);
if (!dateStr || dateStr === EMPTY_STR) {
return returnDate;
}
/** @type {?} */
var dateValues = this.getDateValue(dateStr, dateFormat, delimeters);
/** @type {?} */
var year = 0;
/** @type {?} */
var month = 0;
/** @type {?} */
var day = 0;
try {
for (var dateValues_1 = tslib_1.__values(dateValues), dateValues_1_1 = dateValues_1.next(); !dateValues_1_1.done; dateValues_1_1 = dateValues_1.next()) {
var dv = dateValues_1_1.value;
if (dv.format.indexOf(ORDINAL) != -1) {
/** @type {?} */
var dayNumber = parseInt(dv.value.replace(/\D/g, ''));
/** @type {?} */
var ordinalStr = dv.value.replace(/[0-9]/g, '');
/** @type {?} */
var ordinal = this.getOrdinal(dayNumber);
if (ordinal !== ordinalStr) {
return returnDate;
}
dv.value = dv.value.replace(ST, EMPTY_STR).replace(ND, EMPTY_STR).replace(RD, EMPTY_STR).replace(TH, EMPTY_STR);
dv.format = dv.format.replace(ORDINAL, EMPTY_STR);
}
var value = dv.value, format = dv.format;
if (value && /^\d+$/.test(value) && Number(value) === 0) {
return returnDate;
}
if (format.indexOf(YYYY) !== -1) {
year = this.getNumberByValue(dv);
}
else if (format.indexOf(M) !== -1) {
month = isMonthStr ? this.getMonthNumberByMonthName(dv, monthLabels) : this.getNumberByValue(dv);
}
else if (format.indexOf(D) !== -1) {
day = this.getNumberByValue(dv);
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (dateValues_1_1 && !dateValues_1_1.done && (_a = dateValues_1.return)) _a.call(dateValues_1);
}
finally { if (e_1) throw e_1.error; }
}
var validateDisabledDates = validateOpts.validateDisabledDates, selectedValue = validateOpts.selectedValue;
year = year === 0 && selectedValue ? selectedValue.year : year;
month = month === 0 && selectedValue ? selectedValue.month : month;
day = day === 0 && selectedValue ? selectedValue.day : day;
/** @type {?} */
var today = this.getToday();
if (year === 0 && (month !== 0 || day !== 0)) {
year = today.year;
}
if (month === 0 && (year !== 0 || day !== 0)) {
month = today.month;
}
if (day === 0 && (year !== 0 || month !== 0)) {
day = today.day;
}
if (month !== -1 && day !== -1 && year !== -1) {
if (year < minYear || year > maxYear || month < 1 || month > 12) {
return returnDate;
}
/** @type {?} */
var date = { year: year, month: month, day: day };
if (validateDisabledDates && this.isDisabledDate(date, options).disabled) {
return returnDate;
}
if (year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0)) {
datesInMonth[1] = 29;
}
if (day < 1 || day > datesInMonth[month - 1]) {
return returnDate;
}
// Valid date
return date;
}
return returnDate;
};
/**
* @param {?} dateRangeStr
* @param {?} options
* @param {?} validateOpts
* @return {?}
*/
UtilService.prototype.isDateValidDateRange = /**
* @param {?} dateRangeStr
* @param {?} options
* @param {?} validateOpts
* @return {?}
*/
function (dateRangeStr, options, validateOpts) {
/** @type {?} */
var dateRange = { begin: this.resetDate(), end: this.resetDate() };
if (dateRangeStr && dateRangeStr.length) {
/** @type {?} */
var dates = dateRangeStr.split(options.dateRangeDatesDelimiter);
if (dates && dates.length === 2) {
var _a = tslib_1.__read(dates, 2), beginDate = _a[0], endDate = _a[1];
var selectedValue = validateOpts.selectedValue;
if (selectedValue) {
validateOpts.selectedValue = selectedValue.begin;
}
/** @type {?} */
var begin = this.isDateValid(beginDate, options, validateOpts);
if (this.isInitializedDate(begin)) {
if (selectedValue) {
validateOpts.selectedValue = selectedValue.end;
}
/** @type {?} */
var end = this.isDateValid(endDate, options, validateOpts);
if (this.isInitializedDate(end) && this.isDateSameOrEarlier(begin, end)) {
dateRange = { begin: begin, end: end };
}
}
}
}
return dateRange;
};
/**
* @param {?} dateStr
* @param {?} dateFormat
* @param {?} delimeters
* @return {?}
*/
UtilService.prototype.getDateValue = /**
* @param {?} dateStr
* @param {?} dateFormat
* @param {?} delimeters
* @return {?}
*/
function (dateStr, dateFormat, delimeters) {
var e_2, _a;
/** @type {?} */
var del = EMPTY_STR;
if (delimeters) {
try {
for (var delimeters_1 = tslib_1.__values(delimeters), delimeters_1_1 = delimeters_1.next(); !delimeters_1_1.done; delimeters_1_1 = delimeters_1.next()) {
var d = delimeters_1_1.value;
if (del.indexOf(d) === -1) {
del += d;
}
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (delimeters_1_1 && !delimeters_1_1.done && (_a = delimeters_1.return)) _a.call(delimeters_1);
}
finally { if (e_2) throw e_2.error; }
}
}
/** @type {?} */
var re = new RegExp("[" + del + "]");
/** @type {?} */
var ds = dateStr.split(re);
/** @type {?} */
var df = dateFormat.split(re);
/** @type {?} */
var da = [];
for (var i = 0; i < df.length; i++) {
if (df[i].indexOf(YYYY) !== -1) {
da.push({ value: ds[i], format: df[i] });
}
if (df[i].indexOf(M) !== -1) {
da.push({ value: ds[i], format: df[i] });
}
if (df[i].indexOf(D) !== -1) {
da.push({ value: ds[i], format: df[i] });
}
}
return da;
};
/**
* @param {?} df
* @param {?} monthLabels
* @return {?}
*/
UtilService.prototype.getMonthNumberByMonthName = /**
* @param {?} df
* @param {?} monthLabels
* @return {?}
*/
function (df, monthLabels) {
if (df.value) {
for (var key = 1; key <= 12; key++) {
if (df.value.toLowerCase() === monthLabels[key].toLowerCase()) {
return key;
}
}
}
return -1;
};
/**
* @param {?} df
* @return {?}
*/
UtilService.prototype.getNumberByValue = /**
* @param {?} df
* @return {?}
*/
function (df) {
if (!/^\d+$/.test(df.value)) {
return -1;
}
/** @type {?} */
var nbr = Number(df.value);
if (df.format.length === 1 && df.value.length !== 1 && nbr < 10 || df.format.length === 1 && df.value.length !== 2 && nbr >= 10) {
nbr = -1;
}
else if (df.format.length === 2 && df.value.length > 2) {
nbr = -1;
}
return nbr;
};
/**
* @param {?} monthString
* @return {?}
*/
UtilService.prototype.parseDefaultMonth = /**
* @param {?} monthString
* @return {?}
*/
function (monthString) {
/** @type {?} */
var month = { monthTxt: EMPTY_STR, monthNbr: 0, year: 0 };
if (monthString !== EMPTY_STR) {
/** @type {?} */
var split = monthString.split(monthString.match(/[^0-9]/)[0]);
month.monthNbr = split[0].length === 2 ? Number(split[0]) : Number(split[1]);
month.year = split[0].length === 2 ? Number(split[1]) : Number(split[0]);
}
return month;
};
/**
* @param {?} date
* @param {?} options
* @return {?}
*/
UtilService.prototype.isDisabledDate = /**
* @param {?} date
* @param {?} options
* @return {?}
*/
function (date, options) {
var e_3, _a, e_4, _b;
var minYear = options.minYear, maxYear = options.maxYear, disableUntil = options.disableUntil, disableSince = options.disableSince, disableWeekends = options.disableWeekends, disableDates = options.disableDates, disableDateRanges = options.disableDateRanges, disableWeekdays = options.disableWeekdays, enableDates = options.enableDates;
if (this.dateMatchToDates(date, enableDates)) {
return this.getDisabledValue(false, EMPTY_STR);
}
if (date.year < minYear && date.month === 12 || date.year > maxYear && date.month === 1) {
return this.getDisabledValue(true, EMPTY_STR);
}
/** @type {?} */
var inputDates = (/** @type {?} */ (disableDates));
/** @type {?} */
var result = inputDates.find((/**
* @param {?} d
* @return {?}
*/
function (d) {
return d.dates;
}));
if (!result) {
if (this.dateMatchToDates(date, inputDates)) {
return this.getDisabledValue(true, EMPTY_STR);
}
}
else {
try {
for (var inputDates_1 = tslib_1.__values(inputDates), inputDates_1_1 = inputDates_1.next(); !inputDates_1_1.done; inputDates_1_1 = inputDates_1.next()) {
var dd = inputDates_1_1.value;
if (this.dateMatchToDates(date, dd.dates)) {
return this.getDisabledValue(true, dd.styleClass);
}
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (inputDates_1_1 && !inputDates_1_1.done && (_a = inputDates_1.return)) _a.call(inputDates_1);
}
finally { if (e_3) throw e_3.error; }
}
}
if (this.isDisabledByDisableUntil(date, disableUntil)) {
return this.getDisabledValue(true, EMPTY_STR);
}
if (this.isDisabledByDisableSince(date, disableSince)) {
return this.getDisabledValue(true, EMPTY_STR);
}
if (disableWeekends) {
/** @type {?} */
var dayNbr = this.getDayNumber(date);
if (dayNbr === 0 || dayNbr === 6) {
return this.getDisabledValue(true, EMPTY_STR);
}
}
/** @type {?} */
var dn = this.getDayNumber(date);
if (disableWeekdays.length > 0) {
try {
for (var disableWeekdays_1 = tslib_1.__values(disableWeekdays), disableWeekdays_1_1 = disableWeekdays_1.next(); !disableWeekdays_1_1.done; disableWeekdays_1_1 = disableWeekdays_1.next()) {
var wd = disableWeekdays_1_1.value;
if (dn === this.getWeekdayIndex(wd)) {
return this.getDisabledValue(true, EMPTY_STR);
}
}
}
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {
try {
if (disableWeekdays_1_1 && !disableWeekdays_1_1.done && (_b = disableWeekdays_1.return)) _b.call(disableWeekdays_1);
}
finally { if (e_4) throw e_4.error; }
}
}
if (this.isDisabledByDisableDateRange(date, date, disableDateRanges)) {
return this.getDisabledValue(true, EMPTY_STR);
}
return this.getDisabledValue(false, EMPTY_STR);
};
/**
* @param {?} disabled
* @param {?} styleClass
* @return {?}
*/
UtilService.prototype.getDisabledValue = /**
* @param {?} disabled
* @param {?} styleClass
* @return {?}
*/
function (disabled, styleClass) {
return { disabled: disabled, styleClass: styleClass };
};
/**
* @param {?} date
* @param {?} dates
* @return {?}
*/
UtilService.prototype.dateMatchToDates = /**
* @param {?} date
* @param {?} dates
* @return {?}
*/
function (date, dates) {
var e_5, _a;
try {
for (var dates_1 = tslib_1.__values(dates), dates_1_1 = dates_1.next(); !dates_1_1.done; dates_1_1 = dates_1.next()) {
var d = dates_1_1.value;
if ((d.year === 0 || d.year === date.year) && (d.month === 0 || d.month === date.month) && d.day === date.day) {
return true;
}
}
}
catch (e_5_1) { e_5 = { error: e_5_1 }; }
finally {
try {
if (dates_1_1 && !dates_1_1.done && (_a = dates_1.return)) _a.call(dates_1);
}
finally { if (e_5) throw e_5.error; }
}
return false;
};
/**
* @param {?} year
* @param {?} month
* @param {?} options
* @return {?}
*/
UtilService.prototype.isDisabledMonth = /**
* @param {?} year
* @param {?} month
* @param {?} options
* @return {?}
*/
function (year, month, options) {
var disableUntil = options.disableUntil, disableSince = options.disableSince, disableDateRanges = options.disableDateRanges, enableDates = options.enableDates;
/** @type {?} */
var dateEnd = { year: year, month: month, day: this.datesInMonth(month, year) };
/** @type {?} */
var dateBegin = { year: year, month: month, day: 1 };
if (this.isDatesEnabled(dateBegin, dateEnd, enableDates)) {
return false;
}
if (this.isDisabledByDisableUntil(dateEnd, disableUntil)) {
return true;
}
if (this.isDisabledByDisableSince(dateBegin, disableSince)) {
return true;
}
if (this.isDisabledByDisableDateRange(dateBegin, dateEnd, disableDateRanges)) {
return true;
}
return false;
};
/**
* @param {?} year
* @param {?} options
* @return {?}
*/
UtilService.prototype.isDisabledYear = /**
* @param {?} year
* @param {?} options
* @return {?}
*/
function (year, options) {
var disableUntil = options.disableUntil, disableSince = options.disableSince, disableDateRanges = options.disableDateRanges, enableDates = options.enableDates, minYear = options.minYear, maxYear = options.maxYear;
/** @type {?} */
var dateEnd = { year: year, month: 12, day: 31 };
/** @type {?} */
var dateBegin = { year: year, month: 1, day: 1 };
if (this.isDatesEnabled(dateBegin, dateEnd, enableDates)) {
return false;
}
if (this.isDisabledByDisableUntil(dateEnd, disableUntil)) {
return true;
}
if (this.isDisabledByDisableSince(dateBegin, disableSince)) {
return true;
}
if (this.isDisabledByDisableDateRange(dateBegin, dateEnd, disableDateRanges)) {
return true;
}
if (year < minYear || year > maxYear) {
return true;
}
return false;
};
/**
* @param {?} date
* @param {?} disableUntil
* @return {?}
*/
UtilService.prototype.isDisabledByDisableUntil = /**
* @param {?} date
* @param {?} disableUntil
* @return {?}
*/
function (date, disableUntil) {
return this.isInitializedDate(disableUntil) && this.getTimeInMilliseconds(date) <= this.getTimeInMilliseconds(disableUntil);
};
/**
* @param {?} date
* @param {?} disableSince
* @return {?}
*/
UtilService.prototype.isDisabledByDisableSince = /**
* @param {?} date
* @param {?} disableSince
* @return {?}
*/
function (date, disableSince) {
return this.isInitializedDate(disableSince) && this.getTimeInMilliseconds(date) >= this.getTimeInMilliseconds(disableSince);
};
/**
* @param {?} date
* @param {?} enableDates
* @return {?}
*/
UtilService.prototype.isPastDatesEnabled = /**
* @param {?} date
* @param {?} enableDates
* @return {?}
*/
function (date, enableDates) {
var e_6, _a;
try {
for (var enableDates_1 = tslib_1.__values(enableDates), enableDates_1_1 = enableDates_1.next(); !enableDates_1_1.done; enableDates_1_1 = enableDates_1.next()) {
var d = enableDates_1_1.value;
if (this.getTimeInMilliseconds(d) <= this.getTimeInMilliseconds(date)) {
return true;
}
}
}
catch (e_6_1) { e_6 = { error: e_6_1 }; }
finally {
try {
if (enableDates_1_1 && !enableDates_1_1.done && (_a = enableDates_1.return)) _a.call(enableDates_1);
}
finally { if (e_6) throw e_6.error; }
}
return false;
};
/**
* @param {?} date
* @param {?} enableDates
* @return {?}
*/
UtilService.prototype.isFutureDatesEnabled = /**
* @param {?} date
* @param {?} enableDates
* @return {?}
*/
function (date, enableDates) {
var e_7, _a;
try {
for (var enableDates_2 = tslib_1.__values(enableDates), enableDates_2_1 = enableDates_2.next(); !enableDates_2_1.done; enableDates_2_1 = enableDates_2.next()) {
var d = enableDates_2_1.value;
if (this.getTimeInMilliseconds(d) >= this.getTimeInMilliseconds(date)) {
return true;
}
}
}
catch (e_7_1) { e_7 = { error: e_7_1 }; }
finally {
try {
if (enableDates_2_1 && !enableDates_2_1.done && (_a = enableDates_2.return)) _a.call(enableDates_2);
}
finally { if (e_7) throw e_7.error; }
}
return false;
};
/**
* @param {?} dateBegin
* @param {?} dateEnd
* @param {?} enableDates
* @return {?}
*/
UtilService.prototype.isDatesEnabled = /**
* @param {?} dateBegin
* @param {?} dateEnd
* @param {?} enableDates
* @return {?}
*/
function (dateBegin, dateEnd, enableDates) {
var e_8, _a;
try {
for (var enableDates_3 = tslib_1.__values(enableDates), enableDates_3_1 = enableDates_3.next(); !enableDates_3_1.done; enableDates_3_1 = enableDates_3.next()) {
var d = enableDates_3_1.value;
if (this.getTimeInMilliseconds(d) >= this.getTimeInMilliseconds(dateBegin)
&& this.getTimeInMilliseconds(d) <= this.getTimeInMilliseconds(dateEnd)) {
return true;
}
}
}
catch (e_8_1) { e_8 = { error: e_8_1 }; }
finally {
try {
if (enableDates_3_1 && !enableDates_3_1.done && (_a = enableDates_3.return)) _a.call(enableDates_3);
}
finally { if (e_8) throw e_8.error; }
}
return false;
};
/**
* @param {?} dateBegin
* @param {?} dateEnd
* @param {?} disableDateRanges
* @return {?}
*/
UtilService.prototype.isDisabledByDisableDateRange = /**
* @param {?} dateBegin
* @param {?} dateEnd
* @param {?} disableDateRanges
* @return {?}
*/
function (dateBegin, dateEnd, disableDateRanges) {
var e_9, _a;
/** @type {?} */
var dateMsBegin = this.getTimeInMilliseconds(dateBegin);
/** @type {?} */
var dateMsEnd = this.getTimeInMilliseconds(dateEnd);
try {
for (var disableDateRanges_1 = tslib_1.__values(disableDateRanges), disableDateRanges_1_1 = disableDateRanges_1.next(); !disableDateRanges_1_1.done; disableDateRanges_1_1 = disableDateRanges_1.next()) {
var d = disableDateRanges_1_1.value;
if (this.isInitializedDate(d.begin) && this.isInitializedDate(d.end)
&& dateMsBegin >= this.getTimeInMilliseconds(d.begin) && dateMsEnd <= this.getTimeInMilliseconds(d.end)) {
return true;
}
}
}
catch (e_9_1) { e_9 = { error: e_9_1 }; }
finally {
try {
if (disableDateRanges_1_1 && !disableDateRanges_1_1.done && (_a = disableDateRanges_1.return)) _a.call(disableDateRanges_1);
}
finally { if (e_9) throw e_9.error; }
}
return false;
};
/**
* @param {?} date
* @param {?} options
* @return {?}
*/
UtilService.prototype.isMarkedDate = /**
* @param {?} date
* @param {?} options
* @return {?}
*/
function (date, options) {
var e_10, _a;
var markDates = options.markDates, markWeekends = options.markWeekends;
try {
for (var markDates_1 = tslib_1.__values(markDates), markDates_1_1 = markDates_1.next(); !markDates_1_1.done; markDates_1_1 = markDates_1.next()) {
var md = markDates_1_1.value;
if (this.dateMatchToDates(date, md.dates)) {
return this.getMarkedValue(true, md.color, md.styleClass);
}
}
}
catch (e_10_1) { e_10 = { error: e_10_1 }; }
finally {
try {
if (markDates_1_1 && !markDates_1_1.done && (_a = markDates_1.return)) _a.call(markDates_1);
}
finally { if (e_10) throw e_10.error; }
}
if (markWeekends && markWeekends.marked) {
/** @type {?} */
var dayNbr = this.getDayNumber(date);
if (dayNbr === 0 || dayNbr === 6) {
return this.getMarkedValue(true, markWeekends.color, EMPTY_STR);
}
}
return this.getMarkedValue(false, EMPTY_STR, EMPTY_STR);
};
/**
* @param {?} marked
* @param {?} color
* @param {?} styleClass
* @return {?}
*/
UtilService.prototype.getMarkedValue = /**
* @param {?} marked
* @param {?} color
* @param {?} styleClass
* @return {?}
*/
function (marked, color, styleClass) {
return { marked: marked, color: color ? color : EMPTY_STR, styleClass: styleClass ? styleClass : EMPTY_STR };
};
/**
* @param {?} date
* @param {?} options
* @return {?}
*/
UtilService.prototype.isHighlightedDate = /**
* @param {?} date
* @param {?} options
* @return {?}
*/
function (date, options) {
var sunHighlight = options.sunHighlight, satHighlight = options.satHighlight, highlightDates = options.highlightDates;
/** @type {?} */
var dayNbr = this.getDayNumber(date);
if (sunHighlight && dayNbr === 0 || satHighlight && dayNbr === 6) {
return true;
}
if (this.dateMatchToDates(date, highlightDates)) {
return true;
}
return false;
};
/**
* @param {?} date
* @return {?}
*/
UtilService.prototype.getWeekNumber = /**
* @param {?} date
* @return {?}
*/
function (date) {
/** @type {?} */
var d = new Date(date.year, date.month - 1, date.day, 0, 0, 0, 0);
d.setDate(d.getDate() + (d.getDay() === 0 ? -3 : 4 - d.getDay()));
return Math.round(((d.getTime() - new Date(d.getFullYear(), 0, 4).getTime()) / 86400000) / 7) + 1;
};
/**
* @param {?} date
* @param {?} dateRange
* @param {?} dateFormat
* @param {?} monthLabels
* @param {?} rangeDelimiter
* @param {?=} dateStr
* @return {?}
*/
UtilService.prototype.getDateModel = /**
* @param {?} date
* @param {?} dateRange
* @param {?} dateFormat
* @param {?} monthLabels
* @param {?} rangeDelimiter
* @param {?=} dateStr
* @return {?}
*/
function (date, dateRange, dateFormat, monthLabels, rangeDelimiter, dateStr) {
if (dateStr === void 0) { dateStr = EMPTY_STR; }
/** @type {?} */
var singleDateModel = null;
/** @type {?} */
var dateRangeModel = null;
if (date) {
singleDateModel = {
date: date,
jsDate: this.myDateToJsDate(date),
formatted: dateStr.length ? dateStr : this.formatDate(date, dateFormat, monthLabels),
epoc: this.getEpocTime(date)
};
}
else {
dateRangeModel = {
beginDate: dateRange.begin,
beginJsDate: this.myDateToJsDate(dateRange.begin),
beginEpoc: this.getEpocTime(dateRange.begin),
endDate: dateRange.end,
endJsDate: this.myDateToJsDate(dateRange.end),
endEpoc: this.getEpocTime(dateRange.end),
formatted: this.formatDate(dateRange.begin, dateFormat, monthLabels) + rangeDelimiter + this.formatDate(dateRange.end, dateFormat, monthLabels)
};
}
return {
isRange: date === null,
singleDate: singleDateModel,
dateRange: dateRangeModel
};
};
/**
* @param {?} date
* @param {?} dateFormat
* @param {?} monthLabels
* @return {?}
*/
UtilService.prototype.formatDate = /**
* @param {?} date
* @param {?} dateFormat
* @param {?} monthLabels
* @return {?}
*/
function (date, dateFormat, monthLabels) {
/** @type {?} */
var formatted = dateFormat.replace(YYYY, String(date.year));
if (dateFormat.indexOf(MMM) !== -1) {
formatted = formatted.replace(MMM, monthLabels[date.month]);
}
else if (dateFormat.indexOf(MM) !== -1) {
formatted = formatted.replace(MM, this.preZero(date.month));
}
else {
formatted = formatted.replace(M, String(date.month));
}
if (dateFormat.indexOf(DD) !== -1) {
formatted = formatted.replace(DD, this.preZero(date.day));
}
else {
formatted = formatted.replace(D, String(date.day));
}
if (dateFormat.indexOf(ORDINAL) !== -1) {
formatted = formatted.replace(ORDINAL, this.getOrdinal(date.day));
}
return formatted;
};
/**
* @param {?} date
* @return {?}
*/
UtilService.prototype.getOrdinal = /**
* @param {?} date
* @return {?}
*/
function (date) {
if (date > 3 && date < 21) {
return TH;
}
switch (date % 10) {
case 1:
return ST;
case 2:
return ND;
case 3:
return RD;
default:
return TH;
}
};
/**
* @param {?} model
* @return {?}
*/
UtilService.prototype.getFormattedDate = /**
* @param {?} model
* @return {?}
*/
function (model) {
return !model.isRange ? model.singleDate.formatted : model.dateRange.formatted;
};
/**
* @param {?} val
* @return {?}
*/
UtilService.prototype.preZero = /**
* @param {?} val
* @return {?}
*/
function (val) {
return val < 10 ? ZERO_STR + val : String(val);
};
/**
* @param {?} date
* @return {?}
*/
UtilService.prototype.isInitializedDate = /**
* @param {?} date
* @return {?}
*/
function (date) {
return date.year !== 0 && date.month !== 0 && date.day !== 0;
};
/**
* @param {?} firstDate
* @param {?} secondDate
* @return {?}
*/
UtilService.prototype.isDateEarlier = /**
* @param {?} firstDate
* @param {?} secondDate
* @return {?}
*/
function (firstDate, secondDate) {
return this.getTimeInMilliseconds(firstDate) < this.getTimeInMilliseconds(secondDate);
};
/**
* @param {?} firstDate
* @param {?} secondDate
* @return {?}
*/
UtilService.prototype.isDateSameOrEarlier = /**
* @param {?} firstDate
* @param {?} secondDate
* @return {?}
*/
function (firstDate, secondDate) {
return this.getTimeInMilliseconds(firstDate) <= this.getTimeInMilliseconds(secondDate);
};
/**
* @param {?} firstDate
* @param {?} secondDate
* @return {?}
*/
UtilService.prototype.isDateSame = /**
* @param {?} firstDate
* @param {?} secondDate
* @return {?}
*/
function (firstDate, secondDate) {
return this.getTimeInMilliseconds(firstDate) === this.getTimeInMilliseconds(secondDate);
};
/**
* @param {?} dateRange
* @param {?} date
* @return {?}
*/
UtilService.prototype.isDateRangeBeginOrEndSame = /**
* @param {?} dateRange
* @param {?} date
* @return {?}
*/
function (dateRange, date) {
/** @type {?} */
var dateMs = this.getTimeInMilliseconds(date);
return this.getTimeInMilliseconds(dateRange.begin) === dateMs || this.getTimeInMilliseconds(dateRange.end) === dateMs;
};
/**
* @param {?} dateRange
* @param {?} date
* @return {?}
*/
UtilService.prototype.isDateRangeBegin = /**
* @param {?} dateRange
* @param {?} date
* @return {?}
*/
function (dateRange, date) {
/** @type {?} */
var dateMs = this.getTimeInMilliseconds(date);
return this.getTimeInMilliseconds(dateRange.begin) === dateMs;
};
/**
* @param {?} dateRange
* @param {?} date
* @return {?}
*/
UtilService.prototype.isDateRangeEnd = /**
* @param {?} dateRange
* @param {?} date
* @return {?}
*/
function (dateRange, date) {
/** @type {?} */
var dateMs = this.getTimeInMilliseconds(date);
return this.getTimeInMilliseconds(dateRange.end) === dateMs;
};
/**
* @param {?} date
* @param {?} dateRange
* @return {?}
*/
UtilService.prototype.isDateInRange = /**
* @param {?} date
* @param {?} dateRange
* @return {?}
*/
function (date, dateRange) {
if (!this.isInitializedDate(dateRange.begin) || !this.isInitializedDate(dateRange.end)) {
return false;
}
return this.isDateSameOrEarlier(dateRange.begin, date) && this.isDateSameOrEarlier(date, dateRange.end);
};
/**
* @return {?}
*/
UtilService.prototype.resetDate = /**
* @return {?}
*/
function () {
return { year: 0, month: 0, day: 0 };
};
/**
* @param {?} date
* @return {?}
*/
UtilService.prototype.getTimeInMilliseconds = /**
* @param {?} date
* @return {?}
*/
function (date) {
return this.myDateToJsDate(date).getTime();
};
/**
* @return {?}
*/
UtilService.prototype.getToday = /**
* @return {?}
*/
function () {
/** @type {?} */
var date = new Date();
return { year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate() };
};
/**
* @param {?} date
* @return {?}
*/
UtilService.prototype.getDayNumber = /**
* @param {?} date
* @return {?}
*/
function (date) {
return new Date(date.year, date.month - 1, date.day, 0, 0, 0, 0).getDay();
};
/**
* @param {?} wd
* @return {?}
*/
UtilService.prototype.getWeekdayIndex = /**
* @param {?} wd
* @return {?}
*/
function (wd) {
return this.weekDays.indexOf(wd);
};
/**
* @param {?} date
* @return {?}
*/
UtilService.prototype.getEpocTime = /**
* @param {?} date
* @return {?}
*/
function (date) {
return Math.round(this.getTimeInMilliseconds(date) / 1000.0);
};
/**
* @param {?} date
* @return {?}
*/
UtilService.prototype.jsDateToMyDate = /**
* @param {?} date
* @return {?}
*/
function (date) {
return { year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate() };
};
/**
* @param {?} date
* @return {?}
*/
UtilService.prototype.myDateToJsDate = /**
* @param {?} date
* @return {?}
*/
function (date) {
var year = date.year, month = date.month, day = date.day;
return new Date(year, month - 1, day, 0, 0, 0, 0);
};
/**
* @param {?} m
* @param {?} y
* @return {?}
*/
UtilService.prototype.datesInMonth = /**
* @param {?} m
* @param {?} y
* @return {?}
*/
function (m, y) {
return new Date(y, m, 0).getDate();
};
/**
* @param {?} m
* @param {?} y
* @return {?}
*/
UtilService.prototype.datesInPrevMonth = /**
* @param {?} m
* @param {?} y
* @return {?}
*/
function (m, y) {
/** @type {?} */
var d = this.getJsDate(y, m, 1);
d.setMonth(d.getMonth() - 1);
return this.datesInMonth(d.getMonth() + 1, d.getFullYear());
};
/**
* @param {?} year
* @param {?} month
* @param {?} day
* @return {?}
*/
UtilService.prototype.getJsDate = /**
* @param {?} year
* @param {?} month
* @param {?} day
* @return {?}
*/
function (year, month, day) {
return new Date(year, month - 1, day, 0, 0, 0, 0);
};
/**
* @param {?} selectedValue
* @param {?} dateRange
* @return {?}
*/
UtilService.prototype.getSelectedValue = /**
* @param {?} selectedValue
* @param {?} dateRange
* @return {?}
*/
function (selectedValue, dateRange) {
if (!selectedValue) {
return null;
}
if (!dateRange) {
return selectedValue.date;
}
else {
var beginDate = selectedValue.beginDate, endDate = selectedValue.endDate;
return { begin: beginDate, end: endDate };
}
};
/**
* @param {?} event
* @return {?}
*/
UtilService.prototype.getKeyCodeFromEvent = /**
* @param {?} event
* @return {?}
*/
function (event) {
/** @type {?} */
var key = event.key || event.keyCode || event.which;
if (this.checkKeyName(key, KeyName.enter) || key === KeyCode.enter) {
return KeyCode.enter;
}
else if (this.checkKeyName(key, KeyName.esc) || key === KeyCode.esc) {
return KeyCode.esc;
}
else if (this.checkKeyName(key, KeyName.space) || key === KeyCode.space) {
return KeyCode.space;
}
else if (this.checkKeyName(key, KeyName.leftArrow) || key === KeyCode.leftArrow) {
return KeyCode.leftArrow;
}
else if (this.checkKeyName(key, KeyName.upArrow) || key === KeyCode.upArrow) {
return KeyCode.upArrow;
}
else if (this.checkKeyName(key, KeyName.rightArrow) || key === KeyCode.rightArrow) {
return KeyCode.rightArrow;
}
else if (this.checkKeyName(key, KeyName.downArrow) || key === KeyCode.downArrow) {
return KeyCode.downArrow;
}
else if (this.checkKeyName(key, KeyName.tab) || key === KeyCode.tab) {
return KeyCode.tab;
}
else if (this.checkKeyName(key, KeyName.shift) || key === KeyCode.shift) {
return KeyCode.shift;
}
else {
return null;
}
};
/**
* @param {?} key
* @param {?} keyName
* @return {?}
*/
UtilService.prototype.checkKeyName = /**
* @param {?} key
* @param {?} keyName
* @return {?}
*/
function (key, keyName) {
/** @type {?} */
var arr = keyName.split(PIPE);
return arr.indexOf(key) !== -1;
};
UtilService.decorators = [
{ type: Injectable }
];
return UtilService;
}());
export { UtilService };
if (false) {
/** @type {?} */
UtilService.prototype.weekDays;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1teWRhdGVwaWNrZXIudXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1teWRhdGVwaWNrZXIvIiwic291cmNlcyI6WyJsaWIvc2VydmljZXMvYW5ndWxhci1teWRhdGVwaWNrZXIudXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQWF6QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQy9DLE9BQU8sRUFBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFM0k7SUFBQTtRQUVFLGFBQVEsR0FBa0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQXVuQnpELENBQUM7Ozs7Ozs7SUFybkJDLGlDQUFXOzs7Ozs7SUFBWCxVQUFZLE9BQWUsRUFBRSxPQUFtQixFQUFFLFlBQWdDOztRQUN6RSxJQUFBLCtCQUFVLEVBQUUseUJBQU8sRUFBRSx5QkFBTyxFQUFFLGlDQUFXOztZQUUxQyxVQUFVLEdBQVksSUFBSSxDQUFDLFNBQVMsRUFBRTs7WUFDdEMsWUFBWSxHQUFrQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxF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