UNPKG

ngx-timeago

Version:

Live updating timestamps in Angular 6+.

1 lines 30.5 kB
{"version":3,"file":"ngx-timeago.mjs","sources":["../../../lib/src/util.ts","../../../lib/src/timeago.intl.ts","../../../lib/src/timeago.formatter.ts","../../../lib/src/timeago.clock.ts","../../../lib/src/timeago.directive.ts","../../../lib/src/timeago.pipe.ts","../../../lib/src/timeago.module.ts","../../../lib/src/timeago.providers.ts","../../../lib/src/ngx-timeago.ts"],"sourcesContent":["export function isDefined(value: any): boolean {\n return typeof value !== 'undefined' && value !== null;\n}\n\nexport function coerceBooleanProperty(value: any): boolean {\n return value != null && `${value}` !== 'false';\n}\n\nexport function dateParser(date: any): Date {\n const parsed = new Date(date);\n if (!Number.isNaN(parsed.valueOf())) {\n return parsed;\n }\n\n const parts: string[] = String(date).match(/\\d+/g);\n if (parts === null || parts.length <= 2) {\n return parsed;\n } else {\n const [firstP, secondP, ...restPs] = parts.map(x => parseInt(x, 10));\n return new Date(Date.UTC(firstP, secondP - 1, ...restPs));\n }\n}\n\nexport const MINUTE = 60;\nexport const HOUR = MINUTE * 60;\nexport const DAY = HOUR * 24;\nexport const WEEK = DAY * 7;\nexport const MONTH = DAY * 30;\nexport const YEAR = DAY * 365;\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { StringOrFn, NumberArray } from './timeago.formatter';\n\nexport interface IL10nsStrings {\n prefixAgo?: StringOrFn;\n prefixFromNow?: StringOrFn;\n suffixAgo?: StringOrFn;\n suffixFromNow?: StringOrFn;\n second?: StringOrFn;\n seconds?: StringOrFn;\n minute?: StringOrFn;\n minutes?: StringOrFn;\n hour?: StringOrFn;\n hours?: StringOrFn;\n day?: StringOrFn;\n days?: StringOrFn;\n week?: StringOrFn;\n weeks?: StringOrFn;\n month?: StringOrFn;\n months?: StringOrFn;\n year?: StringOrFn;\n years?: StringOrFn;\n wordSeparator?: string;\n numbers?: NumberArray;\n}\n\n/**\n * To modify the text displayed, create a new instance of TimeagoIntl and\n * include it in a custom provider\n */\n@Injectable()\nexport class TimeagoIntl {\n strings: IL10nsStrings;\n\n /**\n * Stream that emits whenever the l10n strings are changed\n * Use this to notify directives if the l10n strings have changed after initialization.\n */\n readonly changes: Subject<void> = new Subject<void>();\n}\n","import { Injectable } from '@angular/core';\nimport { TimeagoIntl } from './timeago.intl';\nimport { MINUTE, HOUR, DAY, WEEK, MONTH, YEAR } from './util';\n\nexport type Unit = 'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'year';\n\nexport type Suffix = 'ago' | 'from now';\n\nexport type StringOrFn = ((value: number, millisDelta: number) => string) | string;\n\nexport type NumberArray = [\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n string,\n];\n\nconst defaultFormattter = function (then: number): { value: number; unit: Unit; suffix: Suffix } {\n const now = Date.now();\n const seconds = Math.round(Math.abs(now - then) / 1000);\n const suffix: Suffix = then < now ? 'ago' : 'from now';\n\n const [value, unit]: [number, Unit] =\n seconds < MINUTE\n ? [Math.round(seconds), 'second']\n : seconds < HOUR\n ? [Math.round(seconds / MINUTE), 'minute']\n : seconds < DAY\n ? [Math.round(seconds / HOUR), 'hour']\n : seconds < WEEK\n ? [Math.round(seconds / DAY), 'day']\n : seconds < MONTH\n ? [Math.round(seconds / WEEK), 'week']\n : seconds < YEAR\n ? [Math.round(seconds / MONTH), 'month']\n : [Math.round(seconds / YEAR), 'year'];\n\n return { value, unit, suffix };\n};\n\nexport abstract class TimeagoFormatter {\n abstract format(then: number): string;\n}\n\n@Injectable()\nexport class TimeagoDefaultFormatter extends TimeagoFormatter {\n format(then: number): string {\n const { suffix, value, unit } = defaultFormattter(then);\n return this.parse(value, unit, suffix);\n }\n\n private parse(value: number, unit: Unit, suffix: Suffix): string {\n if (value !== 1) {\n unit += 's';\n }\n return value + ' ' + unit + ' ' + suffix;\n }\n}\n\n@Injectable()\nexport class TimeagoCustomFormatter extends TimeagoFormatter {\n constructor(private intl: TimeagoIntl) {\n super();\n }\n\n format(then: number): string {\n const { suffix, value, unit } = defaultFormattter(then);\n return this.parse(value, unit, suffix, Date.now(), then);\n }\n\n private parse(value: number, unit: Unit, suffix: Suffix, now: number, then: number) {\n /** convert weeks to days if strings don't handle weeks */\n if (unit === 'week' && !this.intl.strings.week && !this.intl.strings.weeks) {\n const days = Math.round(Math.abs(now - then) / (1000 * 60 * 60 * 24));\n value = days;\n unit = 'day';\n }\n\n /** create a normalize function for given value */\n const normalize = this.normalizeFn(value, now - then, this.intl.strings.numbers);\n\n /** The eventual return value stored in an array so that the wordSeparator can be used */\n const dateString: string[] = [];\n\n /** handle prefixes */\n if (suffix === 'ago' && this.intl.strings.prefixAgo) {\n dateString.push(normalize(this.intl.strings.prefixAgo));\n }\n if (suffix === 'from now' && this.intl.strings.prefixFromNow) {\n dateString.push(normalize(this.intl.strings.prefixFromNow));\n }\n\n /** Handle Main number and unit */\n const isPlural = value > 1;\n if (isPlural) {\n const stringFn: StringOrFn =\n this.intl.strings[unit + 's'] || this.intl.strings[unit] || '%d ' + unit;\n dateString.push(normalize(stringFn));\n } else {\n const stringFn: StringOrFn =\n this.intl.strings[unit] || this.intl.strings[unit + 's'] || '%d ' + unit;\n dateString.push(normalize(stringFn));\n }\n\n /** Handle Suffixes */\n if (suffix === 'ago' && this.intl.strings.suffixAgo) {\n dateString.push(normalize(this.intl.strings.suffixAgo));\n }\n if (suffix === 'from now' && this.intl.strings.suffixFromNow) {\n dateString.push(normalize(this.intl.strings.suffixFromNow));\n }\n\n /** join the array into a string and return it */\n const wordSeparator =\n typeof this.intl.strings.wordSeparator === 'string' ? this.intl.strings.wordSeparator : ' ';\n return dateString.join(wordSeparator);\n }\n\n /**\n * If the numbers array is present, format numbers with it,\n * otherwise just cast the number to a string and return it\n */\n private normalizeNumber(numbers: NumberArray, value: number) {\n return numbers && numbers.length === 10\n ? String(value)\n .split('')\n .map((digit: string) => (digit.match(/^[0-9]$/) ? numbers[parseInt(digit, 10)] : digit))\n .join('')\n : String(value);\n }\n\n /**\n * Take a string or a function that takes number of days and returns a string\n * and provide a uniform API to create string parts\n */\n private normalizeFn(value: number, millisDelta: number, numbers?: NumberArray) {\n return (stringOrFn: StringOrFn) =>\n typeof stringOrFn === 'function'\n ? stringOrFn(value, millisDelta).replace(/%d/g, this.normalizeNumber(numbers, value))\n : stringOrFn.replace(/%d/g, this.normalizeNumber(numbers, value));\n }\n}\n","import { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { Observable, of, empty, timer, EMPTY } from 'rxjs';\nimport { expand, skip } from 'rxjs/operators';\nimport { MINUTE, HOUR, DAY } from './util';\nimport { isPlatformBrowser } from '@angular/common';\n\nexport abstract class TimeagoClock {\n abstract tick(then: number): Observable<any>;\n}\n\n@Injectable()\nexport class TimeagoDefaultClock extends TimeagoClock {\n constructor(@Inject(PLATFORM_ID) private platformId: Object) {\n super();\n }\n\n tick(then: number): Observable<any> {\n return isPlatformBrowser(this.platformId) ? this.browserTick(then) : EMPTY;\n }\n\n private browserTick(then: number): Observable<any> {\n return of(0).pipe(\n expand(() => {\n const now = Date.now();\n const seconds = Math.round(Math.abs(now - then) / 1000);\n\n const period =\n seconds < MINUTE\n ? 1000\n : seconds < HOUR\n ? 1000 * MINUTE\n : seconds < DAY\n ? 1000 * HOUR\n : 0;\n\n return period ? timer(period) : EMPTY;\n }),\n skip(1)\n );\n }\n}\n","import {\n Directive,\n Input,\n ElementRef,\n Optional,\n OnChanges,\n OnDestroy,\n ChangeDetectorRef,\n NgZone,\n} from '@angular/core';\nimport { Subscription, Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { TimeagoClock } from './timeago.clock';\nimport { TimeagoFormatter } from './timeago.formatter';\nimport { TimeagoIntl } from './timeago.intl';\nimport { isDefined, coerceBooleanProperty, dateParser } from './util';\n\n@Directive({\n selector: '[timeago]',\n exportAs: 'timeago',\n standalone: true,\n})\nexport class TimeagoDirective implements OnChanges, OnDestroy {\n private intlSubscription: Subscription;\n private clockSubscription: Subscription;\n\n /**\n * Emits on:\n * - Input change\n * - Intl change\n * - Clock tick\n */\n stateChanges = new Subject<void>();\n\n /** The Date to display. An actual Date object or something that can be fed to new Date. */\n @Input()\n get date(): any {\n return this._date;\n }\n set date(date: any) {\n this._date = dateParser(date).valueOf();\n if (this._date) {\n if (this.clockSubscription) {\n this.clockSubscription.unsubscribe();\n this.clockSubscription = undefined;\n }\n this.clockSubscription = this.clock\n .tick(this.date)\n .pipe(filter(() => this.live, this))\n .subscribe(() => this.stateChanges.next());\n } else {\n throw new SyntaxError(\n `Wrong parameter in TimeagoDirective. Expected a valid date, received: ${date}`\n );\n }\n }\n private _date: number;\n\n /** If the directive should update itself over time */\n @Input()\n get live(): boolean {\n return this._live;\n }\n set live(live: boolean) {\n this._live = coerceBooleanProperty(live);\n }\n private _live = true;\n\n constructor(\n @Optional() intl: TimeagoIntl,\n formatter: TimeagoFormatter,\n element: ElementRef,\n private cd: ChangeDetectorRef,\n private clock: TimeagoClock,\n private ngZone: NgZone\n ) {\n if (intl) {\n this.intlSubscription = intl.changes.subscribe(() => this.stateChanges.next());\n }\n this.ngZone.runOutsideAngular(() => {\n this.stateChanges.subscribe(() => {\n this.setContent(element.nativeElement, formatter.format(this.date));\n this.ngZone.run(() => this.cd.markForCheck());\n });\n });\n }\n\n ngOnChanges() {\n this.stateChanges.next();\n }\n\n setContent(node: any, content: string) {\n if (isDefined(node.textContent)) {\n node.textContent = content;\n } else {\n node.data = content;\n }\n }\n\n ngOnDestroy() {\n if (this.intlSubscription) {\n this.intlSubscription.unsubscribe();\n this.intlSubscription = undefined;\n }\n if (this.clockSubscription) {\n this.clockSubscription.unsubscribe();\n this.clockSubscription = undefined;\n }\n this.stateChanges.complete();\n }\n}\n","import {\n Injectable,\n OnDestroy,\n Pipe,\n PipeTransform,\n Optional,\n ChangeDetectorRef,\n NgZone,\n} from '@angular/core';\nimport { Subscription, Subject } from 'rxjs';\nimport { TimeagoClock } from './timeago.clock';\nimport { TimeagoFormatter } from './timeago.formatter';\nimport { TimeagoIntl } from './timeago.intl';\nimport { isDefined, coerceBooleanProperty, dateParser } from './util';\nimport { filter } from 'rxjs/operators';\n\n@Injectable()\n@Pipe({\n name: 'timeago',\n pure: false,\n standalone: true,\n})\nexport class TimeagoPipe implements PipeTransform, OnDestroy {\n private intlSubscription: Subscription;\n private clockSubscription: Subscription;\n\n private date: number;\n private value: string;\n private live = true;\n\n /**\n * Emits on:\n * - Input change\n * - Intl change\n * - Clock tick\n */\n stateChanges = new Subject<void>();\n\n constructor(\n @Optional() intl: TimeagoIntl,\n cd: ChangeDetectorRef,\n formatter: TimeagoFormatter,\n private clock: TimeagoClock,\n private ngZone: NgZone\n ) {\n if (intl) {\n this.intlSubscription = intl.changes.subscribe(() => this.stateChanges.next());\n }\n this.ngZone.runOutsideAngular(() => {\n this.stateChanges.subscribe(() => {\n this.value = formatter.format(this.date);\n this.ngZone.run(() => cd.markForCheck());\n });\n });\n }\n\n transform(date: any, ...args: any[]) {\n const _date = dateParser(date).valueOf();\n let _live: boolean;\n\n _live = isDefined(args[0]) ? coerceBooleanProperty(args[0]) : this.live;\n\n if (this.date === _date && this.live === _live) {\n return this.value;\n }\n\n this.date = _date;\n this.live = _live;\n\n if (this.date) {\n if (this.clockSubscription) {\n this.clockSubscription.unsubscribe();\n this.clockSubscription = undefined;\n }\n this.clockSubscription = this.clock\n .tick(this.date)\n .pipe(filter(() => this.live, this))\n .subscribe(() => this.stateChanges.next());\n this.stateChanges.next();\n } else {\n throw new SyntaxError(\n `Wrong parameter in TimeagoPipe. Expected a valid date, received: ${date}`\n );\n }\n\n return this.value;\n }\n\n ngOnDestroy() {\n if (this.intlSubscription) {\n this.intlSubscription.unsubscribe();\n this.intlSubscription = undefined;\n }\n if (this.clockSubscription) {\n this.clockSubscription.unsubscribe();\n this.clockSubscription = undefined;\n }\n this.stateChanges.complete();\n }\n}\n","import { NgModule, ModuleWithProviders, Provider } from '@angular/core';\nimport { TimeagoDirective } from './timeago.directive';\nimport { TimeagoPipe } from './timeago.pipe';\nimport { TimeagoClock, TimeagoDefaultClock } from './timeago.clock';\nimport { TimeagoFormatter, TimeagoDefaultFormatter } from './timeago.formatter';\n\nexport interface TimeagoModuleConfig {\n clock?: Provider;\n intl?: Provider;\n formatter?: Provider;\n}\n\n@NgModule({\n imports: [TimeagoDirective, TimeagoPipe],\n exports: [TimeagoDirective, TimeagoPipe],\n})\nexport class TimeagoModule {\n /**\n * Use this method in your root module to provide the TimeagoModule\n */\n static forRoot(config: TimeagoModuleConfig = {}): ModuleWithProviders<TimeagoModule> {\n return {\n ngModule: TimeagoModule,\n providers: [\n config.clock || { provide: TimeagoClock, useClass: TimeagoDefaultClock },\n config.intl || [],\n config.formatter || { provide: TimeagoFormatter, useClass: TimeagoDefaultFormatter },\n ],\n };\n }\n\n /**\n * Use this method in your other (non root) modules to import the directive/pipe\n */\n static forChild(config: TimeagoModuleConfig = {}): ModuleWithProviders<TimeagoModule> {\n return {\n ngModule: TimeagoModule,\n providers: [\n config.clock || { provide: TimeagoClock, useClass: TimeagoDefaultClock },\n config.intl || [],\n config.formatter || { provide: TimeagoFormatter, useClass: TimeagoDefaultFormatter },\n ],\n };\n }\n}\n","import { Provider, EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { TimeagoClock, TimeagoDefaultClock } from './timeago.clock';\nimport { TimeagoFormatter, TimeagoDefaultFormatter } from './timeago.formatter';\n\nexport interface TimeagoConfig {\n clock?: Provider;\n intl?: Provider;\n formatter?: Provider;\n}\n\n/**\n * Provides the TimeagoModule services for standalone components.\n * Use this function in your application config when using standalone components.\n *\n * @example\n * ```ts\n * import { provideTimeago } from 'ngx-timeago';\n *\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideTimeago({ clock: { provide: TimeagoClock, useClass: MyClock } })\n * ]\n * };\n * ```\n */\nexport function provideTimeago(config: TimeagoConfig = {}): EnvironmentProviders {\n const providers: Provider[] = [\n config.clock || { provide: TimeagoClock, useClass: TimeagoDefaultClock },\n config.formatter || { provide: TimeagoFormatter, useClass: TimeagoDefaultFormatter },\n ];\n\n if (config.intl) {\n providers.push(config.intl);\n }\n\n return makeEnvironmentProviders(providers);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.TimeagoIntl","i2.TimeagoFormatter","i3.TimeagoClock"],"mappings":"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"}