UNPKG

ngx-timeago

Version:

Live updating timestamps in Angular 6+.

94 lines 10.8 kB
import { Directive, Input, Optional } from '@angular/core'; import { Subject } from 'rxjs'; import { filter } from 'rxjs/operators'; import { isDefined, coerceBooleanProperty, dateParser } from './util'; import * as i0 from "@angular/core"; import * as i1 from "./timeago.intl"; import * as i2 from "./timeago.formatter"; import * as i3 from "./timeago.clock"; class TimeagoDirective { /** The Date to display. An actual Date object or something that can be fed to new Date. */ get date() { return this._date; } set date(date) { this._date = dateParser(date).valueOf(); if (this._date) { if (this.clockSubscription) { this.clockSubscription.unsubscribe(); this.clockSubscription = undefined; } this.clockSubscription = this.clock.tick(this.date) .pipe(filter(() => this.live, this)) .subscribe(() => this.stateChanges.next()); } else { throw new SyntaxError(`Wrong parameter in TimeagoDirective. Expected a valid date, received: ${date}`); } } /** If the directive should update itself over time */ get live() { return this._live; } set live(live) { this._live = coerceBooleanProperty(live); } constructor(intl, cd, formatter, element, clock) { this.cd = cd; this.clock = clock; /** * Emits on: * - Input change * - Intl change * - Clock tick */ this.stateChanges = new Subject(); this._live = true; if (intl) { this.intlSubscription = intl.changes.subscribe(() => this.stateChanges.next()); } this.stateChanges.subscribe(() => { this.setContent(element.nativeElement, formatter.format(this.date)); this.cd.markForCheck(); }); } ngOnChanges() { this.stateChanges.next(); } setContent(node, content) { if (isDefined(node.textContent)) { node.textContent = content; } else { node.data = content; } } ngOnDestroy() { if (this.intlSubscription) { this.intlSubscription.unsubscribe(); this.intlSubscription = undefined; } if (this.clockSubscription) { this.clockSubscription.unsubscribe(); this.clockSubscription = undefined; } this.stateChanges.complete(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: TimeagoDirective, deps: [{ token: i1.TimeagoIntl, optional: true }, { token: i0.ChangeDetectorRef }, { token: i2.TimeagoFormatter }, { token: i0.ElementRef }, { token: i3.TimeagoClock }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.1", type: TimeagoDirective, selector: "[timeago]", inputs: { date: "date", live: "live" }, exportAs: ["timeago"], usesOnChanges: true, ngImport: i0 }); } } export { TimeagoDirective }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: TimeagoDirective, decorators: [{ type: Directive, args: [{ selector: '[timeago]', exportAs: 'timeago', }] }], ctorParameters: function () { return [{ type: i1.TimeagoIntl, decorators: [{ type: Optional }] }, { type: i0.ChangeDetectorRef }, { type: i2.TimeagoFormatter }, { type: i0.ElementRef }, { type: i3.TimeagoClock }]; }, propDecorators: { date: [{ type: Input }], live: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWFnby5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvc3JjL3RpbWVhZ28uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFjLFFBQVEsRUFBMkMsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFnQixPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXhDLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7OztBQUV0RSxNQUlhLGdCQUFnQjtJQVkzQiwyRkFBMkY7SUFDM0YsSUFDSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxJQUFTO1FBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7YUFDcEM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztpQkFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNuQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQzlDO2FBQU07WUFDTCxNQUFNLElBQUksV0FBVyxDQUFDLHlFQUF5RSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3hHO0lBQ0gsQ0FBQztJQUdELHNEQUFzRDtJQUN0RCxJQUNJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQUksSUFBSSxDQUFDLElBQWE7UUFDcEIsSUFBSSxDQUFDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBR0QsWUFBd0IsSUFBaUIsRUFDckIsRUFBcUIsRUFDN0IsU0FBMkIsRUFDM0IsT0FBbUIsRUFDWCxLQUFtQjtRQUhuQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUdyQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBM0N2Qzs7Ozs7VUFLRTtRQUNGLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQStCM0IsVUFBSyxHQUFHLElBQUksQ0FBQztRQU9uQixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7U0FDaEY7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVMsRUFBRSxPQUFlO1FBQ25DLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztTQUM1QjthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7U0FDcEM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7OEdBL0VVLGdCQUFnQjtrR0FBaEIsZ0JBQWdCOztTQUFoQixnQkFBZ0I7MkZBQWhCLGdCQUFnQjtrQkFKNUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsUUFBUSxFQUFFLFNBQVM7aUJBQ3BCOzswQkE0Q2MsUUFBUTsrSkE3QmpCLElBQUk7c0JBRFAsS0FBSztnQkFzQkYsSUFBSTtzQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgRWxlbWVudFJlZiwgT3B0aW9uYWwsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUaW1lYWdvQ2xvY2sgfSBmcm9tICcuL3RpbWVhZ28uY2xvY2snO1xuaW1wb3J0IHsgVGltZWFnb0Zvcm1hdHRlciB9IGZyb20gJy4vdGltZWFnby5mb3JtYXR0ZXInO1xuaW1wb3J0IHsgVGltZWFnb0ludGwgfSBmcm9tICcuL3RpbWVhZ28uaW50bCc7XG5pbXBvcnQgeyBpc0RlZmluZWQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgZGF0ZVBhcnNlciB9IGZyb20gJy4vdXRpbCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0aW1lYWdvXScsXG4gIGV4cG9ydEFzOiAndGltZWFnbycsXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVhZ29EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgaW50bFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGNsb2NrU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIEVtaXRzIG9uOlxuICAgKiAtIElucHV0IGNoYW5nZVxuICAgKiAtIEludGwgY2hhbmdlXG4gICAqIC0gQ2xvY2sgdGlja1xuICAqL1xuICBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKiBUaGUgRGF0ZSB0byBkaXNwbGF5LiBBbiBhY3R1YWwgRGF0ZSBvYmplY3Qgb3Igc29tZXRoaW5nIHRoYXQgY2FuIGJlIGZlZCB0byBuZXcgRGF0ZS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGRhdGUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZTtcbiAgfVxuICBzZXQgZGF0ZShkYXRlOiBhbnkpIHtcbiAgICB0aGlzLl9kYXRlID0gZGF0ZVBhcnNlcihkYXRlKS52YWx1ZU9mKCk7XG4gICAgaWYgKHRoaXMuX2RhdGUpIHtcbiAgICAgIGlmICh0aGlzLmNsb2NrU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuY2xvY2tTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5jbG9ja1N1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xvY2tTdWJzY3JpcHRpb24gPSB0aGlzLmNsb2NrLnRpY2sodGhpcy5kYXRlKVxuICAgICAgICAucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5saXZlLCB0aGlzKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoYFdyb25nIHBhcmFtZXRlciBpbiBUaW1lYWdvRGlyZWN0aXZlLiBFeHBlY3RlZCBhIHZhbGlkIGRhdGUsIHJlY2VpdmVkOiAke2RhdGV9YCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2RhdGU6IG51bWJlcjtcblxuICAvKiogSWYgdGhlIGRpcmVjdGl2ZSBzaG91bGQgdXBkYXRlIGl0c2VsZiBvdmVyIHRpbWUgKi9cbiAgQElucHV0KClcbiAgZ2V0IGxpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2xpdmU7XG4gIH1cbiAgc2V0IGxpdmUobGl2ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2xpdmUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkobGl2ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfbGl2ZSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgaW50bDogVGltZWFnb0ludGwsXG4gICAgICAgICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICBmb3JtYXR0ZXI6IFRpbWVhZ29Gb3JtYXR0ZXIsXG4gICAgICAgICAgICAgIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgIHByaXZhdGUgY2xvY2s6IFRpbWVhZ29DbG9jaykge1xuICAgIGlmIChpbnRsKSB7XG4gICAgICB0aGlzLmludGxTdWJzY3JpcHRpb24gPSBpbnRsLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKSk7XG4gICAgfVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnNldENvbnRlbnQoZWxlbWVudC5uYXRpdmVFbGVtZW50LCBmb3JtYXR0ZXIuZm9ybWF0KHRoaXMuZGF0ZSkpO1xuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHNldENvbnRlbnQobm9kZTogYW55LCBjb250ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAoaXNEZWZpbmVkKG5vZGUudGV4dENvbnRlbnQpKSB7XG4gICAgICBub2RlLnRleHRDb250ZW50ID0gY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5kYXRhID0gY29udGVudDtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5pbnRsU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmludGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuaW50bFN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvY2tTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2xvY2tTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuY2xvY2tTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==