igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
367 lines • 23.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { NgModule, Component, Input, HostListener, ElementRef, HostBinding, Output, EventEmitter, TemplateRef } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Subject } from 'rxjs';
import { takeUntil } from 'rxjs/operators';
import { SliderHandle } from '../slider.component';
/**
* @hidden
*/
var IgxSliderThumbComponent = /** @class */ (function () {
function IgxSliderThumbComponent(_elementRef) {
this._elementRef = _elementRef;
this._isActiveLabel = false;
this._destroy$ = new Subject();
this.isActive = false;
this.onThumbValueChange = new EventEmitter();
this.onChange = new EventEmitter();
this.tabindex = 0;
}
Object.defineProperty(IgxSliderThumbComponent.prototype, "thumbFromClass", {
get: /**
* @return {?}
*/
function () {
return this.fromHandler;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxSliderThumbComponent.prototype, "thumbToClass", {
get: /**
* @return {?}
*/
function () {
return !this.fromHandler;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxSliderThumbComponent.prototype, "thumbFromActiveClass", {
get: /**
* @return {?}
*/
function () {
return this.fromHandler && this._isActiveLabel;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxSliderThumbComponent.prototype, "thumbToActiveClass", {
get: /**
* @return {?}
*/
function () {
return !this.fromHandler && this._isActiveLabel;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxSliderThumbComponent.prototype, "nativeElement", {
get: /**
* @return {?}
*/
function () {
return this._elementRef.nativeElement;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxSliderThumbComponent.prototype, "thumbPositionX", {
get: /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var thumbBounderies = this.nativeElement.getBoundingClientRect();
/** @type {?} */
var thumbCenter = (thumbBounderies.right - thumbBounderies.left) / 2;
return thumbBounderies.left + thumbCenter;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxSliderThumbComponent.prototype, "destroy", {
get: /**
* @return {?}
*/
function () {
return this._destroy$;
},
enumerable: true,
configurable: true
});
/**
* @hidden
*/
/**
* @hidden
* @return {?}
*/
IgxSliderThumbComponent.prototype.ngOnInit = /**
* @hidden
* @return {?}
*/
function () {
var _this = this;
this.onPan
.pipe(takeUntil(this._destroy$))
.subscribe(function (mouseX) {
return _this.updateThumbValue(mouseX);
});
};
/**
* @hidden
*/
/**
* @hidden
* @return {?}
*/
IgxSliderThumbComponent.prototype.ngOnDestroy = /**
* @hidden
* @return {?}
*/
function () {
this._destroy$.next(true);
this._destroy$.complete();
};
/**
* @param {?} event
* @return {?}
*/
IgxSliderThumbComponent.prototype.onKeyDown = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (this.disabled) {
return;
}
/** @type {?} */
var increment = 0;
if (event.key.endsWith('Left')) {
increment = this.step * -1;
}
else if (event.key.endsWith('Right')) {
increment = this.step;
}
else {
return;
}
this.onChange.emit();
this.onThumbValueChange.emit(increment);
};
/**
* @return {?}
*/
IgxSliderThumbComponent.prototype.onBlur = /**
* @return {?}
*/
function () {
this.isActive = false;
};
/**
* @return {?}
*/
IgxSliderThumbComponent.prototype.onFocusListener = /**
* @return {?}
*/
function () {
this.isActive = true;
};
/**
* @return {?}
*/
IgxSliderThumbComponent.prototype.showThumbLabel = /**
* @return {?}
*/
function () {
if (this.disabled) {
return;
}
if (this.continuous) {
return;
}
if (this._timer !== null) {
clearTimeout(this._timer);
}
this._isActiveLabel = true;
};
/**
* @return {?}
*/
IgxSliderThumbComponent.prototype.hideThumbLabel = /**
* @return {?}
*/
function () {
var _this = this;
if (this.disabled) {
return;
}
if (this.continuous) {
return;
}
this._timer = setTimeout(function () { return _this._isActiveLabel = false; }, this.thumbLabelVisibilityDuration);
};
/**
* @private
* @param {?} mouseX
* @return {?}
*/
IgxSliderThumbComponent.prototype.updateThumbValue = /**
* @private
* @param {?} mouseX
* @return {?}
*/
function (mouseX) {
/** @type {?} */
var updateValue = this.calculateTrackUpdate(mouseX);
if (this.isActive && updateValue !== 0) {
this.onThumbValueChange.emit(updateValue);
}
};
/**
* @private
* @param {?} mouseX
* @return {?}
*/
IgxSliderThumbComponent.prototype.calculateTrackUpdate = /**
* @private
* @param {?} mouseX
* @return {?}
*/
function (mouseX) {
/** @type {?} */
var scaleX = mouseX - this.thumbPositionX;
/** @type {?} */
var stepDistanceCenter = this.stepDistance / 2;
// If the thumb scale range (slider update) is less thàn a half step,
// the position stays the same.
/** @type {?} */
var scaleXPositive = Math.abs(scaleX);
if (scaleXPositive < stepDistanceCenter) {
return 0;
}
return this.stepToProceed(scaleX, this.stepDistance);
};
/**
* @private
* @param {?} scaleX
* @param {?} stepDist
* @return {?}
*/
IgxSliderThumbComponent.prototype.stepToProceed = /**
* @private
* @param {?} scaleX
* @param {?} stepDist
* @return {?}
*/
function (scaleX, stepDist) {
return Math.round(scaleX / stepDist) * this.step;
};
IgxSliderThumbComponent.decorators = [
{ type: Component, args: [{
selector: 'igx-thumb',
template: "<span class=\"label\">\n <ng-container *ngTemplateOutlet=\"templateRef ? templateRef : thumbFromDefaultTemplate; context: context\"></ng-container>\n</span>\n<span class=\"dot\"></span>\n\n\n<ng-template #thumbFromDefaultTemplate>\n {{ value }}\n</ng-template>\n"
}] }
];
/** @nocollapse */
IgxSliderThumbComponent.ctorParameters = function () { return [
{ type: ElementRef }
]; };
IgxSliderThumbComponent.propDecorators = {
value: [{ type: Input }],
continuous: [{ type: Input }],
thumbLabelVisibilityDuration: [{ type: Input }],
disabled: [{ type: Input }],
onPan: [{ type: Input }],
stepDistance: [{ type: Input }],
step: [{ type: Input }],
fromHandler: [{ type: Input }],
templateRef: [{ type: Input }],
context: [{ type: Input }],
type: [{ type: Input }],
onThumbValueChange: [{ type: Output }],
onChange: [{ type: Output }],
tabindex: [{ type: HostBinding, args: ['attr.tabindex',] }],
thumbFromClass: [{ type: HostBinding, args: ['class.igx-slider__thumb-from',] }],
thumbToClass: [{ type: HostBinding, args: ['class.igx-slider__thumb-to',] }],
thumbFromActiveClass: [{ type: HostBinding, args: ['class.igx-slider__thumb-from--active',] }],
thumbToActiveClass: [{ type: HostBinding, args: ['class.igx-slider__thumb-to--active',] }],
onKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }],
onBlur: [{ type: HostListener, args: ['blur',] }],
onFocusListener: [{ type: HostListener, args: ['focus',] }]
};
return IgxSliderThumbComponent;
}());
export { IgxSliderThumbComponent };
if (false) {
/**
* @type {?}
* @private
*/
IgxSliderThumbComponent.prototype._timer;
/**
* @type {?}
* @private
*/
IgxSliderThumbComponent.prototype._isActiveLabel;
/**
* @type {?}
* @private
*/
IgxSliderThumbComponent.prototype._destroy$;
/** @type {?} */
IgxSliderThumbComponent.prototype.isActive;
/** @type {?} */
IgxSliderThumbComponent.prototype.value;
/** @type {?} */
IgxSliderThumbComponent.prototype.continuous;
/** @type {?} */
IgxSliderThumbComponent.prototype.thumbLabelVisibilityDuration;
/** @type {?} */
IgxSliderThumbComponent.prototype.disabled;
/** @type {?} */
IgxSliderThumbComponent.prototype.onPan;
/** @type {?} */
IgxSliderThumbComponent.prototype.stepDistance;
/** @type {?} */
IgxSliderThumbComponent.prototype.step;
/** @type {?} */
IgxSliderThumbComponent.prototype.fromHandler;
/** @type {?} */
IgxSliderThumbComponent.prototype.templateRef;
/** @type {?} */
IgxSliderThumbComponent.prototype.context;
/** @type {?} */
IgxSliderThumbComponent.prototype.type;
/** @type {?} */
IgxSliderThumbComponent.prototype.onThumbValueChange;
/** @type {?} */
IgxSliderThumbComponent.prototype.onChange;
/** @type {?} */
IgxSliderThumbComponent.prototype.tabindex;
/**
* @type {?}
* @private
*/
IgxSliderThumbComponent.prototype._elementRef;
}
var IgxSliderThumbModule = /** @class */ (function () {
function IgxSliderThumbModule() {
}
IgxSliderThumbModule.decorators = [
{ type: NgModule, args: [{
declarations: [IgxSliderThumbComponent],
imports: [CommonModule],
exports: [IgxSliderThumbComponent]
},] }
];
return IgxSliderThumbModule;
}());
export { IgxSliderThumbModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGh1bWItc2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvc2xpZGVyL3RodW1iL3RodW1iLXNsaWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDSCxRQUFRLEVBQ1IsU0FBUyxFQUNULEtBQUssRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxNQUFNLEVBQ04sWUFBWSxFQUdaLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBS25EO0lBd0ZJLGlDQUFxQixXQUF1QjtRQUF2QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQWpGcEMsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFFcEMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQW9DakIsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUdoRCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUduQyxhQUFRLEdBQUcsQ0FBQyxDQUFDO0lBb0M0QixDQUFDO0lBbENqRCxzQkFDVyxtREFBYzs7OztRQUR6QjtZQUVJLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM1QixDQUFDOzs7T0FBQTtJQUVELHNCQUNXLGlEQUFZOzs7O1FBRHZCO1lBRUksT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDN0IsQ0FBQzs7O09BQUE7SUFFRCxzQkFDVyx5REFBb0I7Ozs7UUFEL0I7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ZW50LFxuICAgIElucHV0LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2xpZGVySGFuZGxlIH0gZnJvbSAnLi4vc2xpZGVyLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC10aHVtYicsXG4gICAgdGVtcGxhdGVVcmw6ICd0aHVtYi1zbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIHByaXZhdGUgX3RpbWVyO1xuICAgIHByaXZhdGUgX2lzQWN0aXZlTGFiZWwgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBwdWJsaWMgaXNBY3RpdmUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZhbHVlOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb250aW51b3VzOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGh1bWJMYWJlbFZpc2liaWxpdHlEdXJhdGlvbjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb25QYW46IFN1YmplY3Q8bnVtYmVyPjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHN0ZXBEaXN0YW5jZTogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3RlcDogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZnJvbUhhbmRsZXI6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbnRleHQ6IGFueTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHR5cGU6IFNsaWRlckhhbmRsZTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvblRodW1iVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgICBwdWJsaWMgdGFiaW5kZXggPSAwO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtc2xpZGVyX190aHVtYi1mcm9tJylcbiAgICBwdWJsaWMgZ2V0IHRodW1iRnJvbUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tSGFuZGxlcjtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1zbGlkZXJfX3RodW1iLXRvJylcbiAgICBwdWJsaWMgZ2V0IHRodW1iVG9DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmZyb21IYW5kbGVyO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXNsaWRlcl9fdGh1bWItZnJvbS0tYWN0aXZlJylcbiAgICBwdWJsaWMgZ2V0IHRodW1iRnJvbUFjdGl2ZUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tSGFuZGxlciAmJiB0aGlzLl9pc0FjdGl2ZUxhYmVsO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXNsaWRlcl9fdGh1bWItdG8tLWFjdGl2ZScpXG4gICAgcHVibGljIGdldCB0aHVtYlRvQWN0aXZlQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5mcm9tSGFuZGxlciAmJiB0aGlzLl9pc0FjdGl2ZUxhYmVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCB0aHVtYlBvc2l0aW9uWCgpIHtcbiAgICAgICAgY29uc3QgdGh1bWJCb3VuZGVyaWVzID0gdGhpcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB0aHVtYkNlbnRlciA9ICh0aHVtYkJvdW5kZXJpZXMucmlnaHQgLSB0aHVtYkJvdW5kZXJpZXMubGVmdCkgLyAyO1xuICAgICAgICByZXR1cm4gdGh1bWJCb3VuZGVyaWVzLmxlZnQgKyB0aHVtYkNlbnRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlc3Ryb3koKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZXN0cm95JDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvciAocHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm9uUGFuXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShtb3VzZVggPT5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRodW1iVmFsdWUobW91c2VYKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpbmNyZW1lbnQgPSAwO1xuICAgICAgICBpZiAoZXZlbnQua2V5LmVuZHNXaXRoKCdMZWZ0JykpIHtcbiAgICAgICAgICAgIGluY3JlbWVudCA9IHRoaXMuc3RlcCAqIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkuZW5kc1dpdGgoJ1JpZ2h0JykpIHtcbiAgICAgICAgICAgIGluY3JlbWVudCA9IHRoaXMuc3RlcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCgpO1xuICAgICAgICB0aGlzLm9uVGh1bWJWYWx1ZUNoYW5nZS5lbWl0KGluY3JlbWVudCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignYmx1cicpXG4gICAgcHVibGljIG9uQmx1cigpIHtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgICBwdWJsaWMgb25Gb2N1c0xpc3RlbmVyKCkge1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd1RodW1iTGFiZWwoKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250aW51b3VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fdGltZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pc0FjdGl2ZUxhYmVsID0gdHJ1ZTtcbiAgICB9XG5cblxuICAgIHB1YmxpYyBoaWRlVGh1bWJMYWJlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbnRpbnVvdXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChcbiAgICAgICAgICAgICgpID0+IHRoaXMuX2lzQWN0aXZlTGFiZWwgPSBmYWxzZSxcbiAgICAgICAgICAgIHRoaXMudGh1bWJMYWJlbFZpc2liaWxpdHlEdXJhdGlvblxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVGh1bWJWYWx1ZShtb3VzZVg6IG51bWJlcikge1xuICAgICAgICBjb25zdCB1cGRhdGVWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlVHJhY2tVcGRhdGUobW91c2VYKTtcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUgJiYgdXBkYXRlVmFsdWUgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMub25UaHVtYlZhbHVlQ2hhbmdlLmVtaXQodXBkYXRlVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVUcmFja1VwZGF0ZShtb3VzZVg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHNjYWxlWCA9IG1vdXNlWCAtIHRoaXMudGh1bWJQb3NpdGlvblg7XG4gICAgICAgIGNvbnN0IHN0ZXBEaXN0YW5jZUNlbnRlciA9IHRoaXMuc3RlcERpc3RhbmNlIC8gMjtcblxuICAgICAgICAvLyBJZiB0aGUgdGh1bWIgc2NhbGUgcmFuZ2UgKHNsaWRlciB1cGRhdGUpIGlzIGxlc3MgdGjDoG4gYSBoYWxmIHN0ZXAsXG4gICAgICAgIC8vIHRoZSBwb3NpdGlvbiBzdGF5cyB0aGUgc2FtZS5cbiAgICAgICAgY29uc3Qgc2NhbGVYUG9zaXRpdmUgPSBNYXRoLmFicyhzY2FsZVgpO1xuICAgICAgICBpZiAoc2NhbGVYUG9zaXRpdmUgPCBzdGVwRGlzdGFuY2VDZW50ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcFRvUHJvY2VlZChzY2FsZVgsIHRoaXMuc3RlcERpc3RhbmNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0ZXBUb1Byb2NlZWQoc2NhbGVYLCBzdGVwRGlzdCkge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChzY2FsZVggLyBzdGVwRGlzdCkgKiB0aGlzLnN0ZXA7XG4gICAgfVxufVxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gICAgZXhwb3J0czogW0lneFNsaWRlclRodW1iQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hTbGlkZXJUaHVtYk1vZHVsZSB7fVxuIl19