UNPKG

igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

367 lines 23.8 kB
/** * @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