UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

441 lines 31.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, Output, EventEmitter, HostBinding, forwardRef } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; export class StepperComponent { constructor() { this.prefixCls = 'am-stepper'; this._max = Infinity; this._min = -Infinity; this._step = 1; this._disabled = false; this._readOnly = false; this._showNumber = false; this._upDisabled = false; this._downDisabled = false; this._isUpClick = false; this._isDownClick = false; this.onChange = new EventEmitter(); this.clsStepper = true; this.clsStpDisabled = this._disabled; this.clsShowNum = this._showNumber; this.onChangeFn = (/** * @return {?} */ () => { }); this.onTouchFn = (/** * @return {?} */ () => { }); } /** * @return {?} */ get max() { return this._max; } /** * @param {?} value * @return {?} */ set max(value) { this._max = value; } /** * @return {?} */ get min() { return this._min; } /** * @param {?} value * @return {?} */ set min(value) { this._min = value; } /** * @return {?} */ get value() { return this._value; } /** * @param {?} v * @return {?} */ set value(v) { this._value = v; } /** * @param {?} value * @return {?} */ set step(value) { this._step = value; } /** * @param {?} value * @return {?} */ set defaultValue(value) { if (value) { this._defaultValue = value; this._value = value; } } /** * @return {?} */ get disabled() { return this._disabled; } /** * @param {?} value * @return {?} */ set disabled(value) { if (value) { this._downDisabled = value; this._upDisabled = value; } this._disabled = value; this.clsStpDisabled = value; } /** * @return {?} */ get readOnly() { return this._readOnly; } /** * @param {?} value * @return {?} */ set readOnly(value) { this._readOnly = value; } /** * @param {?} value * @return {?} */ set showNumber(value) { this._showNumber = value; this.clsShowNum = value; } /** * @return {?} */ onIncrease() { if (!this._upDisabled) { this._value = this.plus(this._value, this._step); this.onChange.emit(this._value); this.onChangeFn(this._value); if (this.plus(this._value, this._step) > this._max) { this._upDisabled = true; } if (this.minus(this._value, this._step) >= this._min) { this._downDisabled = false; } this._isUpClick = true; this.setCls(); setTimeout((/** * @return {?} */ () => { this._isUpClick = false; this.setCls(); }), 100); } } /** * @return {?} */ onDecrease() { if (!this._downDisabled) { this._value = this.minus(this._value, this._step); this.onChange.emit(this._value); this.onChangeFn(this._value); if (this.minus(this._value, this._step) < this._min) { this._downDisabled = true; } if (this.plus(this._value, this._step) <= this._max) { this._upDisabled = false; } this._isDownClick = true; this.setCls(); setTimeout((/** * @return {?} */ () => { this._isDownClick = false; this.setCls(); }), 100); } } /** * @param {?} event * @return {?} */ inputChange(event) { /** @type {?} */ const value = event; this._value = value ? +value : 0; if (this._value < this._min) { this._value = this._min; } if (this._value > this._max) { this._value = this._max; } this._upDisabled = this.plus(this._value, this._step) > this._max ? true : false; this._downDisabled = this.minus(this._value, this._step) < this._min ? true : false; this.setCls(); this.onChange.emit(this._value); this.onChangeFn(this._value); } /** * @return {?} */ setCls() { this.upDisableCls = { [`${this.prefixCls}-handler-up-disabled`]: this._upDisabled, [`${this.prefixCls}-handler-active`]: this._isUpClick }; this.downDisableCls = { [`${this.prefixCls}-handler-down-disabled`]: this._downDisabled, [`${this.prefixCls}-handler-active`]: this._isDownClick }; } /** * @return {?} */ ngOnChanges() { if (this._disabled) { this._downDisabled = true; this._upDisabled = true; } else { this._upDisabled = this.plus(this._value, this._step) > this._max ? true : false; this._downDisabled = this.minus(this._value, this._step) < this._min ? true : false; } this.setCls(); } /** * @param {?} value * @return {?} */ writeValue(value) { this._value = value; this.ngOnChanges(); } /** * @param {?} fn * @return {?} */ registerOnChange(fn) { this.onChangeFn = fn; } /** * @param {?} fn * @return {?} */ registerOnTouched(fn) { this.onTouchFn = fn; } /** * @param {?} num1 * @param {?} num2 * @return {?} */ plus(num1, num2) { if (num1 === undefined || num1 === null || num2 === undefined || num2 === null) { return; } /** @type {?} */ const baseNum = Math.pow(10, Math.max(this.digitLength(num1), this.digitLength(num2))); return (this.times(num1, baseNum) + this.times(num2, baseNum)) / baseNum; } /** * @param {?} num1 * @param {?} num2 * @return {?} */ minus(num1, num2) { if (num1 === undefined || num1 === null || num2 === undefined || num2 === null) { return; } /** @type {?} */ const baseNum = Math.pow(10, Math.max(this.digitLength(num1), this.digitLength(num2))); return (this.times(num1, baseNum) - this.times(num2, baseNum)) / baseNum; } /** * @param {?} num * @return {?} */ digitLength(num) { /** @type {?} */ const eSplit = num.toString().split(/[eE]/); /** @type {?} */ const len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0); return len > 0 ? len : 0; } /** * @param {?} num1 * @param {?} num2 * @return {?} */ times(num1, num2) { /** @type {?} */ const num1Changed = this.floatToFixed(num1); /** @type {?} */ const num2Changed = this.floatToFixed(num2); /** @type {?} */ const baseNum = this.digitLength(num1) + this.digitLength(num2); /** @type {?} */ const leftValue = num1Changed * num2Changed; return leftValue / Math.pow(10, baseNum); } /** * @param {?} num * @return {?} */ floatToFixed(num) { if (num.toString().indexOf('e') === -1) { return Number(num.toString().replace('.', '')); } /** @type {?} */ const dLen = this.digitLength(num); return dLen > 0 ? this.strip(num * Math.pow(10, dLen)) : num; } /** * @param {?} num * @param {?=} precision * @return {?} */ strip(num, precision = 12) { return +parseFloat(num.toPrecision(precision)); } } StepperComponent.decorators = [ { type: Component, args: [{ selector: 'Stepper, nzm-stepper', template: "<div class=\"{{ prefixCls }}-handler-wrap\">\n <span\n role=\"button\"\n class=\"{{ prefixCls }}-handler {{ prefixCls }}-handler-up\"\n style=\"line-height:28px;\"\n [ngClass]=\"upDisableCls\"\n (click)=\"onIncrease()\"\n >\n <Icon [type]=\"'plus'\" [size]=\"'xxs'\"> </Icon>\n </span>\n <span\n role=\"button\"\n class=\"{{ prefixCls }}-handler {{ prefixCls }}-handler-down\"\n style=\"line-height:28px;\"\n [ngClass]=\"downDisableCls\"\n (click)=\"onDecrease()\"\n >\n <Icon [type]=\"'minus'\" [size]=\"'xxs'\"> </Icon>\n </span>\n</div>\n<div class=\"{{ prefixCls }}-input-wrap\">\n <input\n class=\"{{ prefixCls }}-input\"\n style=\"outline:none\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [autocomplete]=\"'off'\"\n [max]=\"max\"\n [min]=\"min\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"inputChange($event)\"\n />\n</div>\n", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ () => StepperComponent)), multi: true } ] }] } ]; /** @nocollapse */ StepperComponent.ctorParameters = () => []; StepperComponent.propDecorators = { max: [{ type: Input }], min: [{ type: Input }], value: [{ type: Input }], step: [{ type: Input }], defaultValue: [{ type: Input }], disabled: [{ type: Input }], readOnly: [{ type: Input }], showNumber: [{ type: Input }], onChange: [{ type: Output }], clsStepper: [{ type: HostBinding, args: ['class.am-stepper',] }], clsStpDisabled: [{ type: HostBinding, args: ['class.am-stepper-disabled',] }], clsShowNum: [{ type: HostBinding, args: ['class.showNumber',] }] }; if (false) { /** @type {?} */ StepperComponent.prototype.prefixCls; /** @type {?} */ StepperComponent.prototype.upDisableCls; /** @type {?} */ StepperComponent.prototype.downDisableCls; /** @type {?} */ StepperComponent.prototype.stepperCls; /** * @type {?} * @private */ StepperComponent.prototype._max; /** * @type {?} * @private */ StepperComponent.prototype._min; /** * @type {?} * @private */ StepperComponent.prototype._value; /** * @type {?} * @private */ StepperComponent.prototype._step; /** * @type {?} * @private */ StepperComponent.prototype._defaultValue; /** * @type {?} * @private */ StepperComponent.prototype._disabled; /** * @type {?} * @private */ StepperComponent.prototype._readOnly; /** * @type {?} * @private */ StepperComponent.prototype._showNumber; /** * @type {?} * @private */ StepperComponent.prototype._upDisabled; /** * @type {?} * @private */ StepperComponent.prototype._downDisabled; /** * @type {?} * @private */ StepperComponent.prototype._isUpClick; /** * @type {?} * @private */ StepperComponent.prototype._isDownClick; /** @type {?} */ StepperComponent.prototype.onChange; /** @type {?} */ StepperComponent.prototype.clsStepper; /** @type {?} */ StepperComponent.prototype.clsStpDisabled; /** @type {?} */ StepperComponent.prototype.clsShowNum; /** * @type {?} * @private */ StepperComponent.prototype.onChangeFn; /** * @type {?} * @private */ StepperComponent.prototype.onTouchFn; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZy16b3Jyby1hbnRkLW1vYmlsZS8iLCJzb3VyY2VzIjpbInN0ZXBwZXIvc3RlcHBlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQWEsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFhekUsTUFBTSxPQUFPLGdCQUFnQjtJQXVGM0I7UUF0RkEsY0FBUyxHQUFXLFlBQVksQ0FBQztRQUt6QixTQUFJLEdBQVcsUUFBUSxDQUFDO1FBQ3hCLFNBQUksR0FBVyxDQUFDLFFBQVEsQ0FBQztRQUV6QixVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBRWxCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUMvQixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBMkR0QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUduQyxlQUFVLEdBQVksSUFBSSxDQUFDO1FBRTNCLG1CQUFjLEdBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUV6QyxlQUFVLEdBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMvQixlQUFVOzs7UUFBNEIsR0FBRyxFQUFFLEdBQUUsQ0FBQyxFQUFDO1FBQy9DLGNBQVM7OztRQUE0QixHQUFHLEVBQUUsR0FBRSxDQUFDLEVBQUM7SUFFdkMsQ0FBQzs7OztJQXBFaEIsSUFDSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFD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RUFBRSxTQUFTLEdBQUcsRUFBRTtRQUMvQixPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDOzs7WUF2T0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLDg1QkFBdUM7Z0JBQ3ZDLFNBQVMsRUFBRTtvQkFDVDt3QkFDRSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVTs7O3dCQUFDLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFDO3dCQUMvQyxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjthQUNGOzs7OztrQkFvQkUsS0FBSztrQkFPTCxLQUFLO29CQU9MLEtBQUs7bUJBT0wsS0FBSzsyQkFJTCxLQUFLO3VCQU9MLEtBQUs7dUJBWUwsS0FBSzt5QkFPTCxLQUFLO3VCQUtMLE1BQU07eUJBR04sV0FBVyxTQUFDLGtCQUFrQjs2QkFFOUIsV0FBVyxTQUFDLDJCQUEyQjt5QkFFdkMsV0FBVyxTQUFDLGtCQUFrQjs7OztJQWpGL0IscUNBQWlDOztJQUNqQyx3Q0FBcUI7O0lBQ3JCLDBDQUF1Qjs7SUFDdkIsc0NBQW1COzs7OztJQUVuQixnQ0FBZ0M7Ozs7O0lBQ2hDLGdDQUFpQzs7Ozs7SUFDakMsa0NBQXVCOzs7OztJQUN2QixpQ0FBMEI7Ozs7O0lBQzFCLHlDQUE4Qjs7Ozs7SUFDOUIscUNBQW1DOzs7OztJQUNuQyxxQ0FBbUM7Ozs7O0lBQ25DLHVDQUFxQzs7Ozs7SUFDckMsdUNBQXFDOzs7OztJQUNyQyx5Q0FBdUM7Ozs7O0lBQ3ZDLHNDQUFvQzs7Ozs7SUFDcEMsd0NBQXNDOztJQTBEdEMsb0NBQ21DOztJQUVuQyxzQ0FDMkI7O0lBQzNCLDBDQUN5Qzs7SUFDekMsc0NBQ3VDOzs7OztJQUN2QyxzQ0FBdUQ7Ozs7O0lBQ3ZELHFDQUFzRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIEhvc3RCaW5kaW5nLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1N0ZXBwZXIsIG56bS1zdGVwcGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N0ZXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFN0ZXBwZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1zdGVwcGVyJztcbiAgdXBEaXNhYmxlQ2xzOiBvYmplY3Q7XG4gIGRvd25EaXNhYmxlQ2xzOiBvYmplY3Q7XG4gIHN0ZXBwZXJDbHM6IG9iamVjdDtcblxuICBwcml2YXRlIF9tYXg6IG51bWJlciA9IEluZmluaXR5O1xuICBwcml2YXRlIF9taW46IG51bWJlciA9IC1JbmZpbml0eTtcbiAgcHJpdmF0ZSBfdmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RlcDogbnVtYmVyID0gMTtcbiAgcHJpdmF0ZSBfZGVmYXVsdFZhbHVlOiBudW1iZXI7XG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3JlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nob3dOdW1iZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdXBEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9kb3duRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaXNVcENsaWNrOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2lzRG93bkNsaWNrOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IG1heCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tYXg7XG4gIH1cbiAgc2V0IG1heCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWF4ID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG1pbigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH1cbiAgc2V0IG1pbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWluID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHZhbHVlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZSh2OiBudW1iZXIpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHY7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHN0ZXAodmFsdWUpIHtcbiAgICB0aGlzLl9zdGVwID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGRlZmF1bHRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fZG93bkRpc2FibGVkID0gdmFsdWU7XG4gICAgICB0aGlzLl91cERpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy5jbHNTdHBEaXNhYmxlZCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCByZWFkT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHk7XG4gIH1cbiAgc2V0IHJlYWRPbmx5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVhZE9ubHkgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgc2hvd051bWJlcih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dOdW1iZXIgPSB2YWx1ZTtcbiAgICB0aGlzLmNsc1Nob3dOdW0gPSB2YWx1ZTtcbiAgfVxuICBAT3V0cHV0KClcbiAgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLXN0ZXBwZXInKVxuICBjbHNTdGVwcGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1zdGVwcGVyLWRpc2FibGVkJylcbiAgY2xzU3RwRGlzYWJsZWQ6IGJvb2xlYW4gPSB0aGlzLl9kaXNhYmxlZDtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zaG93TnVtYmVyJylcbiAgY2xzU2hvd051bTogYm9vbGVhbiA9IHRoaXMuX3Nob3dOdW1iZXI7XG4gIHByaXZhdGUgb25DaGFuZ2VGbjogKHZhbHVlOiBudW1iZXIpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoRm46ICh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG9uSW5jcmVhc2UoKSB7XG4gICAgaWYgKCF0aGlzLl91cERpc2FibGVkKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMucGx1cyh0aGlzLl92YWx1ZSwgdGhpcy5fc3RlcCk7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5fdmFsdWUpO1xuICAgICAgdGhpcy5vbkNoYW5nZUZuKHRoaXMuX3ZhbHVlKTtcbiAgICAgIGlmICh0aGlzLnBsdXModGhpcy5fdmFsdWUsIHRoaXMuX3N0ZXApID4gdGhpcy5fbWF4KSB7XG4gICAgICAgIHRoaXMuX3VwRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubWludXModGhpcy5fdmFsdWUsIHRoaXMuX3N0ZXApID49IHRoaXMuX21pbikge1xuICAgICAgICB0aGlzLl9kb3duRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2lzVXBDbGljayA9IHRydWU7XG4gICAgICB0aGlzLnNldENscygpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2lzVXBDbGljayA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldENscygpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICBvbkRlY3JlYXNlKCkge1xuICAgIGlmICghdGhpcy5fZG93bkRpc2FibGVkKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMubWludXModGhpcy5fdmFsdWUsIHRoaXMuX3N0ZXApO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMuX3ZhbHVlKTtcbiAgICAgIHRoaXMub25DaGFuZ2VGbih0aGlzLl92YWx1ZSk7XG4gICAgICBpZiAodGhpcy5taW51cyh0aGlzLl92YWx1ZSwgdGhpcy5fc3RlcCkgPCB0aGlzLl9taW4pIHtcbiAgICAgICAgdGhpcy5fZG93bkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnBsdXModGhpcy5fdmFsdWUsIHRoaXMuX3N0ZXApIDw9IHRoaXMuX21heCkge1xuICAgICAgICB0aGlzLl91cERpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLl9pc0Rvd25DbGljayA9IHRydWU7XG4gICAgICB0aGlzLnNldENscygpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2lzRG93bkNsaWNrID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0Q2xzKCk7XG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIGlucHV0Q2hhbmdlKGV2ZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSBldmVudDtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlID8gK3ZhbHVlIDogMDtcbiAgICBpZiAodGhpcy5fdmFsdWUgPCB0aGlzLl9taW4pIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fbWluO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdmFsdWUgPiB0aGlzLl9tYXgpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fbWF4O1xuICAgIH1cbiAgICB0aGlzLl91cERpc2FibGVkID0gdGhpcy5wbHVzKHRoaXMuX3ZhbHVlLCB0aGlzLl9zdGVwKSA+IHRoaXMuX21heCA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLl9kb3duRGlzYWJsZWQgPSB0aGlzLm1pbnVzKHRoaXMuX3ZhbHVlLCB0aGlzLl9zdGVwKSA8IHRoaXMuX21pbiA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLnNldENscygpO1xuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLl92YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZUZuKHRoaXMuX3ZhbHVlKTtcbiAgfVxuXG4gIHNldENscygpIHtcbiAgICB0aGlzLnVwRGlzYWJsZUNscyA9IHtcbiAgICAgIFtgJHt0aGlzLnByZWZpeENsc30taGFuZGxlci11cC1kaXNhYmxlZGBdOiB0aGlzLl91cERpc2FibGVkLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1oYW5kbGVyLWFjdGl2ZWBdOiB0aGlzLl9pc1VwQ2xpY2tcbiAgICB9O1xuICAgIHRoaXMuZG93bkRpc2FibGVDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWhhbmRsZXItZG93bi1kaXNhYmxlZGBdOiB0aGlzLl9kb3duRGlzYWJsZWQsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LWhhbmRsZXItYWN0aXZlYF06IHRoaXMuX2lzRG93bkNsaWNrXG4gICAgfTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgdGhpcy5fZG93bkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3VwRGlzYWJsZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl91cERpc2FibGVkID0gdGhpcy5wbHVzKHRoaXMuX3ZhbHVlLCB0aGlzLl9zdGVwKSA+IHRoaXMuX21heCA/IHRydWUgOiBmYWxzZTtcbiAgICAgIHRoaXMuX2Rvd25EaXNhYmxlZCA9IHRoaXMubWludXModGhpcy5fdmFsdWUsIHRoaXMuX3N0ZXApIDwgdGhpcy5fbWluID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnNldENscygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm5nT25DaGFuZ2VzKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoRm4gPSBmbjtcbiAgfVxuXG4gIHBsdXMobnVtMTogbnVtYmVyLCBudW0yOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChudW0xID09PSB1bmRlZmluZWQgfHwgbnVtMSA9PT0gbnVsbCB8fCBudW0yID09PSB1bmRlZmluZWQgfHwgbnVtMiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXNlTnVtID0gTWF0aC5wb3coMTAsIE1hdGgubWF4KHRoaXMuZGlnaXRMZW5ndGgobnVtMSksIHRoaXMuZGlnaXRMZW5ndGgobnVtMikpKTtcbiAgICByZXR1cm4gKHRoaXMudGltZXMobnVtMSwgYmFzZU51bSkgKyB0aGlzLnRpbWVzKG51bTIsIGJhc2VOdW0pKSAvIGJhc2VOdW07XG4gIH1cblxuICBtaW51cyhudW0xOiBudW1iZXIsIG51bTI6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKG51bTEgPT09IHVuZGVmaW5lZCB8fCBudW0xID09PSBudWxsIHx8IG51bTIgPT09IHVuZGVmaW5lZCB8fCBudW0yID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhc2VOdW0gPSBNYXRoLnBvdygxMCwgTWF0aC5tYXgodGhpcy5kaWdpdExlbmd0aChudW0xKSwgdGhpcy5kaWdpdExlbmd0aChudW0yKSkpO1xuICAgIHJldHVybiAodGhpcy50aW1lcyhudW0xLCBiYXNlTnVtKSAtIHRoaXMudGltZXMobnVtMiwgYmFzZU51bSkpIC8gYmFzZU51bTtcbiAgfVxuXG4gIGRpZ2l0TGVuZ3RoKG51bTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBlU3BsaXQgPSBudW0udG9TdHJpbmcoKS5zcGxpdCgvW2VFXS8pO1xuICAgIGNvbnN0IGxlbiA9IChlU3BsaXRbMF0uc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoIC0gKyhlU3BsaXRbMV0gfHwgMCk7XG4gICAgcmV0dXJuIGxlbiA+IDAgPyBsZW4gOiAwO1xuICB9XG5cbiAgdGltZXMobnVtMTogbnVtYmVyLCBudW0yOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IG51bTFDaGFuZ2VkID0gdGhpcy5mbG9hdFRvRml4ZWQobnVtMSk7XG4gICAgY29uc3QgbnVtMkNoYW5nZWQgPSB0aGlzLmZsb2F0VG9GaXhlZChudW0yKTtcbiAgICBjb25zdCBiYXNlTnVtID0gdGhpcy5kaWdpdExlbmd0aChudW0xKSArIHRoaXMuZGlnaXRMZW5ndGgobnVtMik7XG4gICAgY29uc3QgbGVmdFZhbHVlID0gbnVtMUNoYW5nZWQgKiBudW0yQ2hhbmdlZDtcbiAgICByZXR1cm4gbGVmdFZhbHVlIC8gTWF0aC5wb3coMTAsIGJhc2VOdW0pO1xuICB9XG5cbiAgZmxvYXRUb0ZpeGVkKG51bTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAobnVtLnRvU3RyaW5nKCkuaW5kZXhPZignZScpID09PSAtMSkge1xuICAgICAgcmV0dXJuIE51bWJlcihudW0udG9TdHJpbmcoKS5yZXBsYWNlKCcuJywgJycpKTtcbiAgICB9XG4gICAgY29uc3QgZExlbiA9IHRoaXMuZGlnaXRMZW5ndGgobnVtKTtcbiAgICByZXR1cm4gZExlbiA+IDAgPyB0aGlzLnN0cmlwKG51bSAqIE1hdGgucG93KDEwLCBkTGVuKSkgOiBudW07XG4gIH1cblxuICBzdHJpcChudW06IG51bWJlciwgcHJlY2lzaW9uID0gMTIpOiBudW1iZXIge1xuICAgIHJldHVybiArcGFyc2VGbG9hdChudW0udG9QcmVjaXNpb24ocHJlY2lzaW9uKSk7XG4gIH1cbn1cbiJdfQ==