UNPKG

ngx-material-timepicker

Version:
151 lines 21.1 kB
import * as tslib_1 from "tslib"; 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'; var NgxTimepickerFieldComponent = /** @class */ (function () { function NgxTimepickerFieldComponent(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 = function () { }; } NgxTimepickerFieldComponent_1 = NgxTimepickerFieldComponent; Object.defineProperty(NgxTimepickerFieldComponent.prototype, "format", { get: function () { return this._format; }, set: function (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); }, enumerable: true, configurable: true }); Object.defineProperty(NgxTimepickerFieldComponent.prototype, "defaultTime", { get: function () { return this._defaultTime; }, set: function (val) { this.timepickerService.setDefaultTimeIfAvailable(val, null, null, this._format); this._defaultTime = val; this.timepickerTime = val; this.isDefaultTime = !!val; }, enumerable: true, configurable: true }); NgxTimepickerFieldComponent.prototype.ngOnInit = function () { var _this = this; this.period$ = this.timepickerService.selectedPeriod; this.timepickerService.selectedHour.pipe(takeUntil(this.unsubscribe$)) .subscribe(function (hour) { return _this.hour = hour.time; }); this.timepickerService.selectedMinute.pipe(takeUntil(this.unsubscribe$)) .subscribe(function (minute) { return _this.minute = minute.time; }); this.hoursList = getHours(this._format); this.minutesList = getMinutes(); }; NgxTimepickerFieldComponent.prototype.writeValue = function (val) { if (val) { this.defaultTime = val; } }; NgxTimepickerFieldComponent.prototype.registerOnTouched = function (fn) { }; NgxTimepickerFieldComponent.prototype.registerOnChange = function (fn) { this.onChange = fn; }; NgxTimepickerFieldComponent.prototype.setDisabledState = function (isDisabled) { this.disabled = isDisabled; }; NgxTimepickerFieldComponent.prototype.changeHour = function (hour) { this.timepickerService.hour = this.hoursList.find(function (h) { return h.time === hour; }); this.changeTime(); }; NgxTimepickerFieldComponent.prototype.changeMinute = function (minute) { this.timepickerService.minute = this.minutesList.find(function (m) { return m.time === minute; }); this.changeTime(); }; NgxTimepickerFieldComponent.prototype.changePeriod = function (period) { this.timepickerService.period = period; this.changeTime(); }; NgxTimepickerFieldComponent.prototype.onTimeSet = function (time) { this.defaultTime = time; this.onChange(time); this.formatTime(); }; NgxTimepickerFieldComponent.prototype.ngOnDestroy = function () { this.unsubscribe$.next(); }; NgxTimepickerFieldComponent.prototype.changeTime = function () { var time = this.timepickerService.getFullTime(this._format); this.timepickerTime = time; this.onChange(time); }; NgxTimepickerFieldComponent.prototype.formatTime = function () { this.hour = new TimeFormatterPipe().transform(this.hour, TimeUnit.HOUR); this.minute = new TimeFormatterPipe().transform(this.minute, TimeUnit.MINUTE); }; var NgxTimepickerFieldComponent_1; 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(function () { return 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); return NgxTimepickerFieldComponent; }()); export { NgxTimepickerFieldComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXRpbWVwaWNrZXItZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hdGVyaWFsLXRpbWVwaWNrZXIvIiwic291cmNlcyI6WyJzcmMvYXBwL21hdGVyaWFsLXRpbWVwaWNrZXIvY29tcG9uZW50cy90aW1lcGlja2VyLWZpZWxkL25neC10aW1lcGlja2VyLWZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzlGLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBZXBFO0lBd0RJLHFDQUFvQixpQkFBK0M7UUFBL0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUE4QjtRQWpEbkUsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNaLFlBQU8sR0FBRyxFQUFFLENBQUM7UUFFYixhQUFRLEdBQUcsUUFBUSxDQUFDO1FBTVgsZ0JBQVcsR0FBcUIsT0FBTyxDQUFDO1FBOEJ6QyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBS2IsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRTdCLGFBQVEsR0FBNEI7UUFDNUMsQ0FBQyxDQUFBO0lBR0QsQ0FBQztvQ0F6RFEsMkJBQTJCO0lB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QVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRixDQUFDOztJQTdHUTtRQUFSLEtBQUssRUFBRTs7aUVBQW1CO0lBQ2xCO1FBQVIsS0FBSyxFQUFFOzBDQUFhLFdBQVc7bUVBQW9CO0lBQzNDO1FBQVIsS0FBSyxFQUFFOztvRUFBeUM7SUFDeEM7UUFBUixLQUFLLEVBQUU7O21FQUF3QztJQUN2QztRQUFSLEtBQUssRUFBRTs7b0VBQXNCO0lBRzlCO1FBREMsS0FBSyxFQUFFOzs7NkRBTVA7SUFRRDtRQURDLEtBQUssRUFBRTs7O2tFQU1QO0lBdkNRLDJCQUEyQjtRQWJ2QyxTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsc0JBQXNCO1lBQ2hDLHNpRkFBb0Q7WUFFcEQsU0FBUyxFQUFFO2dCQUNQLDRCQUE0QjtnQkFDNUI7b0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFNLE9BQUEsNkJBQTJCLEVBQTNCLENBQTJCLENBQUM7b0JBQzFELEtBQUssRUFBRSxJQUFJO2lCQUNkO2FBQ0o7O1NBQ0osQ0FBQztpREF5RHlDLDRCQUE0QjtPQXhEMUQsMkJBQTJCLENBNEh2QztJQUFELGtDQUFDO0NBQUEsQUE1SEQsSUE0SEM7U0E1SFksMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ3hNYXRlcmlhbFRpbWVwaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbmd4LW1hdGVyaWFsLXRpbWVwaWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDbG9ja0ZhY2VUaW1lIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Nsb2NrLWZhY2UtdGltZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGltZVBlcmlvZCB9IGZyb20gJy4uLy4uL21vZGVscy90aW1lLXBlcmlvZC5lbnVtJztcbmltcG9ydCB7IGdldEhvdXJzLCBnZXRNaW51dGVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGltZXBpY2tlci10aW1lLnV0aWxzJztcbmltcG9ydCB7IFRpbWVVbml0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RpbWUtdW5pdC5lbnVtJztcbmltcG9ydCB7IE5neE1hdGVyaWFsVGltZXBpY2tlclRoZW1lIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25neC1tYXRlcmlhbC10aW1lcGlja2VyLXRoZW1lLmludGVyZmFjZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUaW1lRm9ybWF0dGVyUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3RpbWUtZm9ybWF0dGVyLnBpcGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC10aW1lcGlja2VyLWZpZWxkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd4LXRpbWVwaWNrZXItZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL25neC10aW1lcGlja2VyLWZpZWxkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIE5neE1hdGVyaWFsVGltZXBpY2tlclNlcnZpY2UsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTmd4VGltZXBpY2tlckZpZWxkQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE5neFRpbWVwaWNrZXJGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgICBwZXJpb2QkOiBPYnNlcnZhYmxlPFRpbWVQZXJpb2Q+O1xuXG4gICAgaG91cjogbnVtYmVyO1xuICAgIG1pbnV0ZTogbnVtYmVyO1xuXG4gICAgbWluSG91ciA9IDE7XG4gICAgbWF4SG91ciA9IDEyO1xuXG4gICAgdGltZVVuaXQgPSBUaW1lVW5pdDtcbiAgICB0aW1lcGlja2VyVGltZTogc3RyaW5nO1xuICAgIGlzRGVmYXVsdFRpbWU6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSB0b2dnbGVJY29uOiBUZW1wbGF0ZVJlZjxIVE1MT2JqZWN0RWxlbWVudD47XG4gICAgQElucHV0KCkgYnV0dG9uQWxpZ246ICdyaWdodCcgfCAnbGVmdCcgPSAncmlnaHQnO1xuICAgIEBJbnB1dCgpIGNsb2NrVGhlbWU6IE5neE1hdGVyaWFsVGltZXBpY2tlclRoZW1lO1xuICAgIEBJbnB1dCgpIGNvbnRyb2xPbmx5OiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgZm9ybWF0KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fZm9ybWF0ID0gdmFsdWUgPT09IDI0ID8gMjQgOiAxMjtcbiAgICAgICAgdGhpcy5taW5Ib3VyID0gdGhpcy5fZm9ybWF0ID09PSAxMiA/IDEgOiAwO1xuICAgICAgICB0aGlzLm1heEhvdXIgPSB0aGlzLl9mb3JtYXQgPT09IDEyID8gMTIgOiAyMztcbiAgICAgICAgdGhpcy5ob3Vyc0xpc3QgPSBnZXRIb3Vycyh0aGlzLl9mb3JtYXQpO1xuICAgIH1cblxuICAgIGdldCBmb3JtYXQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdDtcbiAgICB9XG5cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRlZmF1bHRUaW1lKHZhbDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMudGltZXBpY2tlclNlcnZpY2Uuc2V0RGVmYXVsdFRpbWVJZkF2YWlsYWJsZSh2YWwsIG51bGwsIG51bGwsIHRoaXMuX2Zvcm1hdCk7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRUaW1lID0gdmFsO1xuICAgICAgICB0aGlzLnRpbWVwaWNrZXJUaW1lID0gdmFsO1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFRpbWUgPSAhIXZhbDtcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdFRpbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRUaW1lO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2RlZmF1bHRUaW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfZm9ybWF0ID0gMTI7XG5cbiAgICBwcml2YXRlIGhvdXJzTGlzdDogQ2xvY2tGYWNlVGltZVtdO1xuICAgIHByaXZhdGUgbWludXRlc0xpc3Q6IENsb2NrRmFjZVRpbWVbXTtcblxuICAgIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHByaXZhdGUgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkID0gKCkgPT4ge1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdGltZXBpY2tlclNlcnZpY2U6IE5neE1hdGVyaWFsVGltZXBpY2tlclNlcnZpY2UpIHtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5wZXJpb2QkID0gdGhpcy50aW1lcGlja2VyU2VydmljZS5zZWxlY3RlZFBlcmlvZDtcblxuICAgICAgICB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLnNlbGVjdGVkSG91ci5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGhvdXIgPT4gdGhpcy5ob3VyID0gaG91ci50aW1lKTtcblxuICAgICAgICB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLnNlbGVjdGVkTWludXRlLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUobWludXRlID0+IHRoaXMubWludXRlID0gbWludXRlLnRpbWUpO1xuXG4gICAgICAgIHRoaXMuaG91cnNMaXN0ID0gZ2V0SG91cnModGhpcy5fZm9ybWF0KTtcbiAgICAgICAgdGhpcy5taW51dGVzTGlzdCA9IGdldE1pbnV0ZXMoKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFRpbWUgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgY2hhbmdlSG91cihob3VyOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50aW1lcGlja2VyU2VydmljZS5ob3VyID0gdGhpcy5ob3Vyc0xpc3QuZmluZChoID0+IGgudGltZSA9PT0gaG91cik7XG4gICAgICAgIHRoaXMuY2hhbmdlVGltZSgpO1xuICAgIH1cblxuICAgIGNoYW5nZU1pbnV0ZShtaW51dGU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLm1pbnV0ZSA9IHRoaXMubWludXRlc0xpc3QuZmluZChtID0+IG0udGltZSA9PT0gbWludXRlKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VUaW1lKCk7XG4gICAgfVxuXG4gICAgY2hhbmdlUGVyaW9kKHBlcmlvZDogVGltZVBlcmlvZCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLnBlcmlvZCA9IHBlcmlvZDtcbiAgICAgICAgdGhpcy5jaGFuZ2VUaW1lKCk7XG4gICAgfVxuXG4gICAgb25UaW1lU2V0KHRpbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlZmF1bHRUaW1lID0gdGltZTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aW1lKTtcbiAgICAgICAgdGhpcy5mb3JtYXRUaW1lKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZVRpbWUoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSB0aGlzLnRpbWVwaWNrZXJTZXJ2aWNlLmdldEZ1bGxUaW1lKHRoaXMuX2Zvcm1hdCk7XG4gICAgICAgIHRoaXMudGltZXBpY2tlclRpbWUgPSB0aW1lO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRpbWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0VGltZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3VyID0gbmV3IFRpbWVGb3JtYXR0ZXJQaXBlKCkudHJhbnNmb3JtKHRoaXMuaG91ciwgVGltZVVuaXQuSE9VUik7XG4gICAgICAgIHRoaXMubWludXRlID0gbmV3IFRpbWVGb3JtYXR0ZXJQaXBlKCkudHJhbnNmb3JtKHRoaXMubWludXRlLCBUaW1lVW5pdC5NSU5VVEUpO1xuICAgIH1cbn1cbiJdfQ==