UNPKG

ngx-material-timepicker

Version:
140 lines 19.5 kB
import * as tslib_1 from "tslib"; var NgxTimepickerFieldComponent_1; import { Component, forwardRef, Input, TemplateRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { NgxMaterialTimepickerService } from '../../services/ngx-material-timepicker.service'; import { Subject } from 'rxjs'; import { getHours, getMinutes } from '../../utils/timepicker-time.utils'; import { TimeUnit } from '../../models/time-unit.enum'; import { takeUntil } from 'rxjs/operators'; import { TimeFormatterPipe } from '../../pipes/time-formatter.pipe'; let NgxTimepickerFieldComponent = NgxTimepickerFieldComponent_1 = class NgxTimepickerFieldComponent { constructor(timepickerService) { this.timepickerService = timepickerService; this.minHour = 1; this.maxHour = 12; this.timeUnit = TimeUnit; this.buttonAlign = 'right'; this._format = 12; this.unsubscribe$ = new Subject(); this.onChange = () => { }; } set format(value) { this._format = value === 24 ? 24 : 12; this.minHour = this._format === 12 ? 1 : 0; this.maxHour = this._format === 12 ? 12 : 23; this.hoursList = getHours(this._format); } get format() { return this._format; } set defaultTime(val) { this.timepickerService.setDefaultTimeIfAvailable(val, null, null, this._format); this._defaultTime = val; this.timepickerTime = val; this.isDefaultTime = !!val; } get defaultTime() { return this._defaultTime; } ngOnInit() { this.period$ = this.timepickerService.selectedPeriod; this.timepickerService.selectedHour.pipe(takeUntil(this.unsubscribe$)) .subscribe(hour => this.hour = hour.time); this.timepickerService.selectedMinute.pipe(takeUntil(this.unsubscribe$)) .subscribe(minute => this.minute = minute.time); this.hoursList = getHours(this._format); this.minutesList = getMinutes(); } writeValue(val) { if (val) { this.defaultTime = val; } } registerOnTouched(fn) { } registerOnChange(fn) { this.onChange = fn; } setDisabledState(isDisabled) { this.disabled = isDisabled; } changeHour(hour) { this.timepickerService.hour = this.hoursList.find(h => h.time === hour); this.changeTime(); } changeMinute(minute) { this.timepickerService.minute = this.minutesList.find(m => m.time === minute); this.changeTime(); } changePeriod(period) { this.timepickerService.period = period; this.changeTime(); } onTimeSet(time) { this.defaultTime = time; this.onChange(time); this.formatTime(); } ngOnDestroy() { this.unsubscribe$.next(); } changeTime() { const time = this.timepickerService.getFullTime(this._format); this.timepickerTime = time; this.onChange(time); } formatTime() { this.hour = new TimeFormatterPipe().transform(this.hour, TimeUnit.HOUR); this.minute = new TimeFormatterPipe().transform(this.minute, TimeUnit.MINUTE); } }; tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Boolean) ], NgxTimepickerFieldComponent.prototype, "disabled", void 0); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", TemplateRef) ], NgxTimepickerFieldComponent.prototype, "toggleIcon", void 0); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", String) ], NgxTimepickerFieldComponent.prototype, "buttonAlign", void 0); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Object) ], NgxTimepickerFieldComponent.prototype, "clockTheme", void 0); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Boolean) ], NgxTimepickerFieldComponent.prototype, "controlOnly", void 0); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", Number), tslib_1.__metadata("design:paramtypes", [Number]) ], NgxTimepickerFieldComponent.prototype, "format", null); tslib_1.__decorate([ Input(), tslib_1.__metadata("design:type", String), tslib_1.__metadata("design:paramtypes", [String]) ], NgxTimepickerFieldComponent.prototype, "defaultTime", null); NgxTimepickerFieldComponent = NgxTimepickerFieldComponent_1 = tslib_1.__decorate([ Component({ selector: 'ngx-timepicker-field', template: "<div class=\"ngx-timepicker\" [ngClass]=\"{'ngx-timepicker--disabled': disabled}\">\n <ngx-timepicker-time-control\n class=\"ngx-timepicker__control--first\"\n [placeholder]=\"'HH'\"\n [time]=\"hour\"\n [min]=\"minHour\"\n [max]=\"maxHour\"\n [timeUnit]=\"timeUnit.HOUR\"\n [disabled]=\"disabled\"\n [isDefaultTimeSet]=\"isDefaultTime\"\n (timeChanged)=\"changeHour($event)\"></ngx-timepicker-time-control>\n <span class=\"ngx-timepicker__time-colon ngx-timepicker__control--second\">:</span>\n <ngx-timepicker-time-control\n class=\"ngx-timepicker__control--third\"\n [placeholder]=\"'MM'\"\n [time]=\"minute\"\n [min]=\"0\"\n [max]=\"59\"\n [timeUnit]=\"timeUnit.MINUTE\"\n [disabled]=\"disabled\"\n [isDefaultTimeSet]=\"isDefaultTime\"\n (timeChanged)=\"changeMinute($event)\"></ngx-timepicker-time-control>\n <ngx-timepicker-period-selector\n class=\"ngx-timepicker__control--forth\"\n [selectedPeriod]=\"period$|async\"\n [disabled]=\"disabled\"\n (periodSelected)=\"changePeriod($event)\"\n *ngIf=\"format !== 24\"></ngx-timepicker-period-selector>\n <ngx-material-timepicker-toggle\n class=\"ngx-timepicker__toggle\"\n *ngIf=\"!controlOnly\"\n [ngClass]=\"{'ngx-timepicker__toggle--left': buttonAlign === 'left'}\"\n [for]=\"timepicker\"\n [disabled]=\"disabled\">\n <span ngxMaterialTimepickerToggleIcon>\n <!--suppress HtmlUnknownAttribute -->\n <ng-container *ngTemplateOutlet=\"toggleIcon || defaultIcon\"></ng-container>\n </span>\n </ngx-material-timepicker-toggle>\n</div>\n<ngx-material-timepicker\n [ngxMaterialTimepickerTheme]=\"clockTheme\"\n [defaultTime]=\"timepickerTime\"\n [format]=\"format\"\n (timeSet)=\"onTimeSet($event)\" #timepicker></ngx-material-timepicker>\n\n<ng-template #defaultIcon>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24px\" height=\"24px\">\n <!--suppress CheckEmptyScriptTag -->\n <path\n d=\"M 12 2 C 6.4889971 2 2 6.4889971 2 12 C 2 17.511003 6.4889971 22 12 22 C 17.511003 22 22 17.511003 22 12 C 22 6.4889971 17.511003 2 12 2 z M 12 4 C 16.430123 4 20 7.5698774 20 12 C 20 16.430123 16.430123 20 12 20 C 7.5698774 20 4 16.430123 4 12 C 4 7.5698774 7.5698774 4 12 4 z M 11 6 L 11 12.414062 L 15.292969 16.707031 L 16.707031 15.292969 L 13 11.585938 L 13 6 L 11 6 z\"/>\n </svg>\n</ng-template>\n", providers: [ NgxMaterialTimepickerService, { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NgxTimepickerFieldComponent_1), multi: true } ], styles: [".ngx-timepicker{display:flex;align-items:center;height:100%;border-bottom:1px solid rgba(0,0,0,.12)}.ngx-timepicker--disabled{background:rgba(0,0,0,.07);pointer-events:none}.ngx-timepicker__time-colon{margin-left:10px}.ngx-timepicker__control--first{order:1}.ngx-timepicker__control--second{order:2}.ngx-timepicker__control--third{order:3}.ngx-timepicker__control--forth,.ngx-timepicker__toggle{order:4}.ngx-timepicker__toggle--left{order:0}"] }), tslib_1.__metadata("design:paramtypes", [NgxMaterialTimepickerService]) ], NgxTimepickerFieldComponent); export { NgxTimepickerFieldComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRpbWVwaWNrZXItZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hdGVyaWFsLXRpbWVwaWNrZXIvIiwic291cmNlcyI6WyJzcmMvYXBwL21hdGVyaWFsLXRpbWVwaWNrZXIvY29tcG9uZW50cy90aW1lcGlja2VyLWZpZWxkL25neC10aW1lcGlja2VyLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBcUIsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdGLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUM5RixPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRXZELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQWVwRSxJQUFhLDJCQUEyQixtQ0FBeEMsTUFBYSwyQkFBMkI7SUF3RHBDLFlBQW9CLGlCQUErQztRQUEvQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQThCO1FBakRuRSxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUViLGFBQVEsR0FBRyxRQUFRLENBQUM7UUFNWCxnQkFBVyxHQUFxQixPQUFPLENBQUM7UUE4QnpDLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFLYixpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFN0IsYUFBUSxHQUE0QixHQUFHLEVBQUU7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QztJQUFSLEtBQUssRUFBRTs7Z0VBQXlDO0FBQ3hDO0lBQVIsS0FBSyxFQUFFOzsrREFBd0M7QUFDdkM7SUFBUixLQUFLLEVBQUU7O2dFQUFzQjtBQUc5QjtJQURDLEtBQUssRUFBRTs7O3lEQU1QO0FBUUQ7SUFEQyxLQUFLLEVBQUU7Ozs4REFNUDtBQXZDUSwyQkFBMkI7SUFidkMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQyxzaUZBQW9EO1FBRXBELFNBQVMsRUFBRTtZQUNQLDRCQUE0QjtZQUM1QjtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDZCQUEyQixDQUFDO2dCQUMxRCxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0o7O0tBQ0osQ0FBQzs2Q0F5RHlDLDRCQUE0QjtHQXhEMUQsMkJBQTJCLENBNEh2QztTQTVIWSwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5neE1hdGVyaWFsVGltZXBpY2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZ3gtbWF0ZXJpYWwtdGltZXBpY2tlci5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENsb2NrRmFjZVRpbWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2xvY2stZmFjZS10aW1lLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUaW1lUGVyaW9kIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RpbWUtcGVyaW9kLmVudW0nO1xuaW1wb3J0IHsgZ2V0SG91cnMsIGdldE1pbnV0ZXMgfSBmcm9tICcuLi8uLi91dGlscy90aW1lcGlja2VyLXRpbWUudXRpbHMnO1xuaW1wb3J0IHsgVGltZVVuaXQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGltZS11bml0LmVudW0nO1xuaW1wb3J0IHsgTmd4TWF0ZXJpYWxUaW1lcGlja2VyVGhlbWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvbmd4LW1hdGVyaWFsLXRpbWVwaWNrZXItdGhlbWUuaW50ZXJmYWNlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRpbWVGb3JtYXR0ZXJQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvdGltZS1mb3JtYXR0ZXIucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd4LXRpbWVwaWNrZXItZmllbGQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3gtdGltZXBpY2tlci1maWVsZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbmd4LXRpbWVwaWNrZXItZmllbGQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgTmd4TWF0ZXJpYWxUaW1lcGlja2VyU2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBOZ3hUaW1lcGlja2VyRmllbGRDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTmd4VGltZXBpY2tlckZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICAgIHBlcmlvZCQ6IE9ic2VydmFibGU8VGltZVBlcmlvZD47XG5cbiAgICBob3VyOiBudW1iZXI7XG4gICAgbWludXRlOiBudW1iZXI7XG5cbiAgICBtaW5Ib3VyID0gMTtcbiAgICBtYXhIb3VyID0gMTI7XG5cbiAgICB0aW1lVW5pdCA9IFRpbWVVbml0O1xuICAgIHRpbWVwaWNrZXJUaW1lOiBzdHJpbmc7XG4gICAgaXNEZWZhdWx0VGltZTogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHRvZ2dsZUljb246IFRlbXBsYXRlUmVmPEhUTUxPYmplY3RFbGVtZW50PjtcbiAgICBASW5wdXQoKSBidXR0b25BbGlnbjogJ3JpZ2h0JyB8ICdsZWZ0JyA9ICdyaWdodCc7XG4gICAgQElucHV0KCkgY2xvY2tUaGVtZTogTmd4TWF0ZXJpYWxUaW1lcGlja2VyVGhlbWU7XG4gICAgQElucHV0KCkgY29udHJvbE9ubHk6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBmb3JtYXQodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9mb3JtYXQgPSB2YWx1ZSA9PT0gMjQgPyAyNCA6IDEyO1xuICAgICAgICB0aGlzLm1pbkhvdXIgPSB0aGlzLl9mb3JtYXQgPT09IDEyID8gMSA6IDA7XG4gICAgICAgIHRoaXMubWF4SG91ciA9IHRoaXMuX2Zvcm1hdCA9PT0gMTIgPyAxMiA6IDIzO1xuICAgICAgICB0aGlzLmhvdXJzTGlzdCA9IGdldEhvdXJzKHRoaXMuX2Zvcm1hdCk7XG4gICAgfVxuXG4gICAgZ2V0IGZvcm1hdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0O1xuICAgIH1cblxuXG4gICAgQElucHV0KClcbiAgICBzZXQgZGVmYXVsdFRpbWUodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy50aW1lcGlja2VyU2VydmljZS5zZXREZWZhdWx0VGltZUlmQXZhaWxhYmxlKHZhbCwgbnVsbCwgbnVsbCwgdGhpcy5fZm9ybWF0KTtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFRpbWUgPSB2YWw7XG4gICAgICAgIHRoaXMudGltZXBpY2tlclRpbWUgPSB2YWw7XG4gICAgICAgIHRoaXMuaXNEZWZhdWx0VGltZSA9ICEhdmFsO1xuICAgIH1cblxuICAgIGdldCBkZWZhdWx0VGltZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFRpbWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGVmYXVsdFRpbWU6IHN0cmluZztcbiAgICBwcml2YXRlIF9mb3JtYXQgPSAxMjtcblxuICAgIHByaXZhdGUgaG91cnNMaXN0OiBDbG9ja0ZhY2VUaW1lW107XG4gICAgcHJpdmF0ZSBtaW51dGVzTGlzdDogQ2xvY2tGYWNlVGltZVtdO1xuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB0aW1lcGlja2VyU2VydmljZTogTmd4TWF0ZXJpYWxUaW1lcGlja2VyU2VydmljZSkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnBlcmlvZCQgPSB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLnNlbGVjdGVkUGVyaW9kO1xuXG4gICAgICAgIHRoaXMudGltZXBpY2tlclNlcnZpY2Uuc2VsZWN0ZWRIb3VyLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoaG91ciA9PiB0aGlzLmhvdXIgPSBob3VyLnRpbWUpO1xuXG4gICAgICAgIHRoaXMudGltZXBpY2tlclNlcnZpY2Uuc2VsZWN0ZWRNaW51dGUucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShtaW51dGUgPT4gdGhpcy5taW51dGUgPSBtaW51dGUudGltZSk7XG5cbiAgICAgICAgdGhpcy5ob3Vyc0xpc3QgPSBnZXRIb3Vycyh0aGlzLl9mb3JtYXQpO1xuICAgICAgICB0aGlzLm1pbnV0ZXNMaXN0ID0gZ2V0TWludXRlcygpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0VGltZSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBjaGFuZ2VIb3VyKGhvdXI6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLmhvdXIgPSB0aGlzLmhvdXJzTGlzdC5maW5kKGggPT4gaC50aW1lID09PSBob3VyKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VUaW1lKCk7XG4gICAgfVxuXG4gICAgY2hhbmdlTWludXRlKG1pbnV0ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGltZXBpY2tlclNlcnZpY2UubWludXRlID0gdGhpcy5taW51dGVzTGlzdC5maW5kKG0gPT4gbS50aW1lID09PSBtaW51dGUpO1xuICAgICAgICB0aGlzLmNoYW5nZVRpbWUoKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VQZXJpb2QocGVyaW9kOiBUaW1lUGVyaW9kKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGltZXBpY2tlclNlcnZpY2UucGVyaW9kID0gcGVyaW9kO1xuICAgICAgICB0aGlzLmNoYW5nZVRpbWUoKTtcbiAgICB9XG5cbiAgICBvblRpbWVTZXQodGltZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFRpbWUgPSB0aW1lO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRpbWUpO1xuICAgICAgICB0aGlzLmZvcm1hdFRpbWUoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlVGltZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHRoaXMudGltZXBpY2tlclNlcnZpY2UuZ2V0RnVsbFRpbWUodGhpcy5fZm9ybWF0KTtcbiAgICAgICAgdGhpcy50aW1lcGlja2VyVGltZSA9IHRpbWU7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGltZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRUaW1lKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvdXIgPSBuZXcgVGltZUZvcm1hdHRlclBpcGUoKS50cmFuc2Zvcm0odGhpcy5ob3VyLCBUaW1lVW5pdC5IT1VSKTtcbiAgICAgICAgdGhpcy5taW51dGUgPSBuZXcgVGltZUZvcm1hdHRlclBpcGUoKS50cmFuc2Zvcm0odGhpcy5taW51dGUsIFRpbWVVbml0Lk1JTlVURSk7XG4gICAgfVxufVxuIl19