theme-lib
Version:
This is a simple example Angular Library published to npm.
259 lines • 18 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/*
* @license
* Copyright Akveo. All Rights Reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
import { Inject, Injectable, LOCALE_ID } from '@angular/core';
import { DatePipe, FormStyle, getLocaleDayNames, getLocaleFirstDayOfWeek, getLocaleMonthNames, TranslationWidth, } from '@angular/common';
import { NbDateService } from './date.service';
/*
* The `NbNativeDateService` is basic implementation of `NbDateService` using
* native js date objects and angular localization services.
* */
export class NbNativeDateService extends NbDateService {
/**
* @param {?} locale
*/
constructor(locale) {
super();
this.setLocale(locale);
}
/**
* @param {?} locale
* @return {?}
*/
setLocale(locale) {
super.setLocale(locale);
this.datePipe = new DatePipe(locale);
}
/**
* @param {?} date
* @param {?} format
* @return {?}
*/
isValidDateString(date, format) {
return !isNaN(this.parse(date, format).getTime());
}
/**
* @return {?}
*/
today() {
return new Date();
}
/**
* @param {?} date
* @return {?}
*/
getDate(date) {
return date.getDate();
}
/**
* @param {?} date
* @return {?}
*/
getMonth(date) {
return date.getMonth();
}
/**
* @param {?} date
* @return {?}
*/
getYear(date) {
return date.getFullYear();
}
/**
* @param {?} date
* @return {?}
*/
getDayOfWeek(date) {
return date.getDay();
}
/*
* returns first day of the week, it can be 1 if week starts from monday
* and 0 if from sunday and so on.
* */
/**
* @return {?}
*/
getFirstDayOfWeek() {
return getLocaleFirstDayOfWeek(this.locale);
}
/**
* @param {?} date
* @param {?=} style
* @return {?}
*/
getMonthName(date, style = TranslationWidth.Abbreviated) {
/** @type {?} */
const index = date.getMonth();
return this.getMonthNameByIndex(index, style);
}
/**
* @param {?} index
* @param {?=} style
* @return {?}
*/
getMonthNameByIndex(index, style = TranslationWidth.Abbreviated) {
return getLocaleMonthNames(this.locale, FormStyle.Format, style)[index];
}
/**
* @return {?}
*/
getDayOfWeekNames() {
return getLocaleDayNames(this.locale, FormStyle.Format, TranslationWidth.Short);
}
/**
* @param {?} date
* @param {?} format
* @return {?}
*/
format(date, format) {
return this.datePipe.transform(date, format);
}
/*
* We haven't got capability to parse date using formatting without third party libraries.
* */
/**
* @param {?} date
* @param {?} format
* @return {?}
*/
parse(date, format) {
return new Date(Date.parse(date));
}
/**
* @param {?} date
* @param {?} num
* @return {?}
*/
addDay(date, num) {
return this.createDate(date.getFullYear(), date.getMonth(), date.getDate() + num);
}
/**
* @param {?} date
* @param {?} num
* @return {?}
*/
addMonth(date, num) {
return this.createDate(date.getFullYear(), date.getMonth() + num, date.getDate());
}
/**
* @param {?} date
* @param {?} num
* @return {?}
*/
addYear(date, num) {
return this.createDate(date.getFullYear() + num, date.getMonth(), date.getDate());
}
/**
* @param {?} date
* @return {?}
*/
clone(date) {
return new Date(date.getTime());
}
/**
* @param {?} date1
* @param {?} date2
* @return {?}
*/
compareDates(date1, date2) {
return date1.getTime() - date2.getTime();
}
/**
* @param {?} year
* @param {?} month
* @param {?} date
* @return {?}
*/
createDate(year, month, date) {
/** @type {?} */
const result = new Date(year, month, date);
// We need to correct for the fact that JS native Date treats years in range [0, 99] as
// abbreviations for 19xx.
if (year >= 0 && year < 100) {
result.setFullYear(result.getFullYear() - 1900);
}
return result;
}
/**
* @param {?} date
* @return {?}
*/
getMonthEnd(date) {
return this.createDate(date.getFullYear(), date.getMonth() + 1, 0);
}
/**
* @param {?} date
* @return {?}
*/
getMonthStart(date) {
return this.createDate(date.getFullYear(), date.getMonth(), 1);
}
/**
* @param {?} date
* @return {?}
*/
getNumberOfDaysInMonth(date) {
return this.getMonthEnd(date).getDate();
}
/**
* @param {?} date
* @return {?}
*/
getYearEnd(date) {
return this.createDate(date.getFullYear(), 11, 31);
}
/**
* @param {?} date
* @return {?}
*/
getYearStart(date) {
return this.createDate(date.getFullYear(), 0, 1);
}
/**
* @param {?} date1
* @param {?} date2
* @return {?}
*/
isSameDay(date1, date2) {
return this.isSameMonth(date1, date2) &&
date1.getDate() === date2.getDate();
}
/**
* @param {?} date1
* @param {?} date2
* @return {?}
*/
isSameMonth(date1, date2) {
return this.isSameYear(date1, date2) &&
date1.getMonth() === date2.getMonth();
}
/**
* @param {?} date1
* @param {?} date2
* @return {?}
*/
isSameYear(date1, date2) {
return date1.getFullYear() === date2.getFullYear();
}
}
NbNativeDateService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
NbNativeDateService.ctorParameters = () => [
{ type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] }
];
if (false) {
/**
* @type {?}
* @protected
*/
NbNativeDateService.prototype.datePipe;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWRhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RoZW1lLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NhbGVuZGFyLWtpdC9zZXJ2aWNlcy9uYXRpdmUtZGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixnQkFBZ0IsR0FDakIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBUS9DLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxhQUFtQjs7OztJQUcxRCxZQUErQixNQUFjO1FBQzNDLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QixDQUFDOzs7OztJQUVELFNBQVMsQ0FBQyxNQUFjO1FBQ3RCLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDOzs7Ozs7SUFFRCxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsTUFBYztRQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7OztJQUVELEtBQUs7UUFDSCxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7SUFDcEIsQ0FBQzs7Ozs7SUFFRCxPQUFPLENBQUMsSUFBVTtRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUs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QyxDQUFDOzs7Ozs7SUFFRCxXQUFXLENBQUMsS0FBVyxFQUFFLEtBQVc7UUFDbEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7WUFDbEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMxQyxDQUFDOzs7Ozs7SUFFRCxVQUFVLENBQUMsS0FBVyxFQUFFLEtBQVc7UUFDakMsT0FBTyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JELENBQUM7OztZQXJJRixVQUFVOzs7O3lDQUlJLE1BQU0sU0FBQyxTQUFTOzs7Ozs7O0lBRjdCLHVDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBBa3Zlby4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuICovXHJcblxyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIExPQ0FMRV9JRCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIERhdGVQaXBlLFxyXG4gIEZvcm1TdHlsZSxcclxuICBnZXRMb2NhbGVEYXlOYW1lcyxcclxuICBnZXRMb2NhbGVGaXJzdERheU9mV2VlayxcclxuICBnZXRMb2NhbGVNb250aE5hbWVzLFxyXG4gIFRyYW5zbGF0aW9uV2lkdGgsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmltcG9ydCB7IE5iRGF0ZVNlcnZpY2UgfSBmcm9tICcuL2RhdGUuc2VydmljZSc7XHJcblxyXG5cclxuLypcclxuICogVGhlIGBOYk5hdGl2ZURhdGVTZXJ2aWNlYCBpcyBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBgTmJEYXRlU2VydmljZWAgdXNpbmdcclxuICogbmF0aXZlIGpzIGRhdGUgb2JqZWN0cyBhbmQgYW5ndWxhciBsb2NhbGl6YXRpb24gc2VydmljZXMuXHJcbiAqICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5iTmF0aXZlRGF0ZVNlcnZpY2UgZXh0ZW5kcyBOYkRhdGVTZXJ2aWNlPERhdGU+IHtcclxuICBwcm90ZWN0ZWQgZGF0ZVBpcGU6IERhdGVQaXBlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KExPQ0FMRV9JRCkgbG9jYWxlOiBzdHJpbmcpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnNldExvY2FsZShsb2NhbGUpO1xyXG4gIH1cclxuXHJcbiAgc2V0TG9jYWxlKGxvY2FsZTogc3RyaW5nKSB7XHJcbiAgICBzdXBlci5zZXRMb2NhbGUobG9jYWxlKTtcclxuICAgIHRoaXMuZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUobG9jYWxlKTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWREYXRlU3RyaW5nKGRhdGU6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhaXNOYU4odGhpcy5wYXJzZShkYXRlLCBmb3JtYXQpLmdldFRpbWUoKSk7XHJcbiAgfVxyXG5cclxuICB0b2RheSgpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF0ZShkYXRlOiBEYXRlKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBkYXRlLmdldERhdGUoKTtcclxuICB9XHJcblxyXG4gIGdldE1vbnRoKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcclxuICB9XHJcblxyXG4gIGdldFllYXIoZGF0ZTogRGF0ZSk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGF5T2ZXZWVrKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGRhdGUuZ2V0RGF5KCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIHJldHVybnMgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLCBpdCBjYW4gYmUgMSBpZiB3ZWVrIHN0YXJ0cyBmcm9tIG1vbmRheVxyXG4gICAqIGFuZCAwIGlmIGZyb20gc3VuZGF5IGFuZCBzbyBvbi5cclxuICAgKiAqL1xyXG4gIGdldEZpcnN0RGF5T2ZXZWVrKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gZ2V0TG9jYWxlRmlyc3REYXlPZldlZWsodGhpcy5sb2NhbGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9udGhOYW1lKGRhdGU6IERhdGUsIHN0eWxlOiBUcmFuc2xhdGlvbldpZHRoID0gVHJhbnNsYXRpb25XaWR0aC5BYmJyZXZpYXRlZCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpbmRleDogbnVtYmVyID0gZGF0ZS5nZXRNb250aCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TW9udGhOYW1lQnlJbmRleChpbmRleCwgc3R5bGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9udGhOYW1lQnlJbmRleChpbmRleDogbnVtYmVyLCBzdHlsZTogVHJhbnNsYXRpb25XaWR0aCA9IFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGdldExvY2FsZU1vbnRoTmFtZXModGhpcy5sb2NhbGUsIEZvcm1TdHlsZS5Gb3JtYXQsIHN0eWxlKVtpbmRleF07XHJcbiAgfVxyXG5cclxuICBnZXREYXlPZldlZWtOYW1lcygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gZ2V0TG9jYWxlRGF5TmFtZXModGhpcy5sb2NhbGUsIEZvcm1TdHlsZS5Gb3JtYXQsIFRyYW5zbGF0aW9uV2lkdGguU2hvcnQpO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0KGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCBmb3JtYXQpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBXZSBoYXZlbid0IGdvdCBjYXBhYmlsaXR5IHRvIHBhcnNlIGRhdGUgdXNpbmcgZm9ybWF0dGluZyB3aXRob3V0IHRoaXJkIHBhcnR5IGxpYnJhcmllcy5cclxuICAgKiAqL1xyXG4gIHBhcnNlKGRhdGU6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLnBhcnNlKGRhdGUpKTtcclxuICB9XHJcblxyXG4gIGFkZERheShkYXRlOiBEYXRlLCBudW06IG51bWJlcik6IERhdGUge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkgKyBudW0pO1xyXG4gIH1cclxuXHJcbiAgYWRkTW9udGgoZGF0ZTogRGF0ZSwgbnVtOiBudW1iZXIpOiBEYXRlIHtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZURhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCkgKyBudW0sIGRhdGUuZ2V0RGF0ZSgpKTtcclxuICB9XHJcblxyXG4gIGFkZFllYXIoZGF0ZTogRGF0ZSwgbnVtOiBudW1iZXIpOiBEYXRlIHtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZURhdGUoZGF0ZS5nZXRGdWxsWWVhcigpICsgbnVtLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcclxuICB9XHJcblxyXG4gIGNsb25lKGRhdGU6IERhdGUpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XHJcbiAgfVxyXG5cclxuICBjb21wYXJlRGF0ZXMoZGF0ZTE6IERhdGUsIGRhdGUyOiBEYXRlKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBkYXRlMS5nZXRUaW1lKCkgLSBkYXRlMi5nZXRUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVEYXRlKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF0ZTogbnVtYmVyKTogRGF0ZSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSk7XHJcblxyXG4gICAgLy8gV2UgbmVlZCB0byBjb3JyZWN0IGZvciB0aGUgZmFjdCB0aGF0IEpTIG5hdGl2ZSBEYXRlIHRyZWF0cyB5ZWFycyBpbiByYW5nZSBbMCwgOTldIGFzXHJcbiAgICAvLyBhYmJyZXZpYXRpb25zIGZvciAxOXh4LlxyXG4gICAgaWYgKHllYXIgPj0gMCAmJiB5ZWFyIDwgMTAwKSB7XHJcbiAgICAgIHJlc3VsdC5zZXRGdWxsWWVhcihyZXN1bHQuZ2V0RnVsbFllYXIoKSAtIDE5MDApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGdldE1vbnRoRW5kKGRhdGU6IERhdGUpOiBEYXRlIHtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZURhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCkgKyAxLCAwKTtcclxuICB9XHJcblxyXG4gIGdldE1vbnRoU3RhcnQoZGF0ZTogRGF0ZSk6IERhdGUge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgMSk7XHJcbiAgfVxyXG5cclxuICBnZXROdW1iZXJPZkRheXNJbk1vbnRoKGRhdGU6IERhdGUpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TW9udGhFbmQoZGF0ZSkuZ2V0RGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0WWVhckVuZChkYXRlOiBEYXRlKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMTEsIDMxKTtcclxuICB9XHJcblxyXG4gIGdldFllYXJTdGFydChkYXRlOiBEYXRlKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgMSk7XHJcbiAgfVxyXG5cclxuICBpc1NhbWVEYXkoZGF0ZTE6IERhdGUsIGRhdGUyOiBEYXRlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc1NhbWVNb250aChkYXRlMSwgZGF0ZTIpICYmXHJcbiAgICAgIGRhdGUxLmdldERhdGUoKSA9PT0gZGF0ZTIuZ2V0RGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgaXNTYW1lTW9udGgoZGF0ZTE6IERhdGUsIGRhdGUyOiBEYXRlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc1NhbWVZZWFyKGRhdGUxLCBkYXRlMikgJiZcclxuICAgICAgZGF0ZTEuZ2V0TW9udGgoKSA9PT0gZGF0ZTIuZ2V0TW9udGgoKTtcclxuICB9XHJcblxyXG4gIGlzU2FtZVllYXIoZGF0ZTE6IERhdGUsIGRhdGUyOiBEYXRlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZGF0ZTEuZ2V0RnVsbFllYXIoKSA9PT0gZGF0ZTIuZ2V0RnVsbFllYXIoKTtcclxuICB9XHJcbn1cclxuIl19