UNPKG

@catull/igniteui-angular

Version:

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

266 lines 22.4 kB
import { __decorate, __metadata } from "tslib"; import { Component, Input, HostListener, ElementRef, HostBinding, Output, EventEmitter, OnInit, OnDestroy, TemplateRef } from '@angular/core'; import { takeUntil } from 'rxjs/operators'; import { SliderHandle } from '../slider.common'; import { Subject } from 'rxjs'; /** * @hidden */ let IgxSliderThumbComponent = class IgxSliderThumbComponent { constructor(_elementRef) { this._elementRef = _elementRef; this._isActive = false; this._isPressed = false; this._destroy$ = new Subject(); this.isActive = false; this.onThumbValueChange = new EventEmitter(); this.onChange = new EventEmitter(); this.onHoverChange = new EventEmitter(); this.tabindex = 0; this.zIndex = 0; } get thumbPositionX() { const thumbBounderies = this.nativeElement.getBoundingClientRect(); const thumbCenter = (thumbBounderies.right - thumbBounderies.left) / 2; return thumbBounderies.left + thumbCenter; } get thumbFromClass() { return this.type === SliderHandle.FROM; } get thumbToClass() { return this.type === SliderHandle.TO; } get thumbFromActiveClass() { return this.type === SliderHandle.FROM && this._isActive; } get thumbToActiveClass() { return this.type === SliderHandle.TO && this._isActive; } get thumbPressedClass() { return this.isActive && this._isPressed; } get nativeElement() { return this._elementRef.nativeElement; } get destroy() { return this._destroy$; } /** * @hidden */ ngOnInit() { this.onPan .pipe(takeUntil(this._destroy$)) .subscribe(mouseX => this.updateThumbValue(mouseX)); } /** * @hidden */ ngOnDestroy() { this._destroy$.next(true); this._destroy$.complete(); } onPinterEnter() { this.onHoverChange.emit(true); } onPointerLeave() { this.onHoverChange.emit(false); } onKeyDown(event) { if (this.disabled) { return; } let 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); } onBlur() { this.isActive = false; this.zIndex = 0; } onFocusListener() { this.isActive = true; this.zIndex = 1; } /** * Show thumb label and ripple. */ showThumbIndicators() { this.toggleThumbIndicators(true); } /** * Hide thumb label and ripple. */ hideThumbIndicators() { this.toggleThumbIndicators(false); } updateThumbValue(mouseX) { const updateValue = this.calculateTrackUpdate(mouseX); if (this.isActive && updateValue !== 0) { this.onThumbValueChange.emit(updateValue); } } calculateTrackUpdate(mouseX) { const scaleX = mouseX - this.thumbPositionX; const stepDistanceCenter = this.stepDistance / 2; // If the thumb scale range (slider update) is less thàn a half step, // the position stays the same. const scaleXPositive = Math.abs(scaleX); if (scaleXPositive < stepDistanceCenter) { return 0; } return this.stepToProceed(scaleX, this.stepDistance); } stepToProceed(scaleX, stepDist) { return Math.round(scaleX / stepDist) * this.step; } toggleThumbIndicators(visible) { this._isPressed = visible; if (this.continuous || this.deactiveState) { this._isActive = false; } else { this._isActive = visible; } } }; IgxSliderThumbComponent.ctorParameters = () => [ { type: ElementRef } ]; __decorate([ Input(), __metadata("design:type", Number) ], IgxSliderThumbComponent.prototype, "value", void 0); __decorate([ Input(), __metadata("design:type", Boolean) ], IgxSliderThumbComponent.prototype, "continuous", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxSliderThumbComponent.prototype, "thumbLabelVisibilityDuration", void 0); __decorate([ Input(), __metadata("design:type", Boolean) ], IgxSliderThumbComponent.prototype, "disabled", void 0); __decorate([ Input(), __metadata("design:type", Subject) ], IgxSliderThumbComponent.prototype, "onPan", void 0); __decorate([ Input(), __metadata("design:type", Number) ], IgxSliderThumbComponent.prototype, "stepDistance", void 0); __decorate([ Input(), __metadata("design:type", Number) ], IgxSliderThumbComponent.prototype, "step", void 0); __decorate([ Input(), __metadata("design:type", TemplateRef) ], IgxSliderThumbComponent.prototype, "templateRef", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxSliderThumbComponent.prototype, "context", void 0); __decorate([ Input(), __metadata("design:type", Number) ], IgxSliderThumbComponent.prototype, "type", void 0); __decorate([ Input(), __metadata("design:type", Boolean) ], IgxSliderThumbComponent.prototype, "deactiveState", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxSliderThumbComponent.prototype, "onThumbValueChange", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxSliderThumbComponent.prototype, "onChange", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxSliderThumbComponent.prototype, "onHoverChange", void 0); __decorate([ HostBinding('attr.tabindex'), __metadata("design:type", Object) ], IgxSliderThumbComponent.prototype, "tabindex", void 0); __decorate([ HostBinding('attr.z-index'), __metadata("design:type", Object) ], IgxSliderThumbComponent.prototype, "zIndex", void 0); __decorate([ HostBinding('class.igx-slider__thumb-from'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], IgxSliderThumbComponent.prototype, "thumbFromClass", null); __decorate([ HostBinding('class.igx-slider__thumb-to'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], IgxSliderThumbComponent.prototype, "thumbToClass", null); __decorate([ HostBinding('class.igx-slider__thumb-from--active'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], IgxSliderThumbComponent.prototype, "thumbFromActiveClass", null); __decorate([ HostBinding('class.igx-slider__thumb-to--active'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], IgxSliderThumbComponent.prototype, "thumbToActiveClass", null); __decorate([ HostBinding('class.igx-slider__thumb--pressed'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], IgxSliderThumbComponent.prototype, "thumbPressedClass", null); __decorate([ HostListener('pointerenter'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], IgxSliderThumbComponent.prototype, "onPinterEnter", null); __decorate([ HostListener('pointerleave'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], IgxSliderThumbComponent.prototype, "onPointerLeave", null); __decorate([ HostListener('keydown', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [KeyboardEvent]), __metadata("design:returntype", void 0) ], IgxSliderThumbComponent.prototype, "onKeyDown", null); __decorate([ HostListener('blur'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], IgxSliderThumbComponent.prototype, "onBlur", null); __decorate([ HostListener('focus'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], IgxSliderThumbComponent.prototype, "onFocusListener", null); IgxSliderThumbComponent = __decorate([ Component({ selector: 'igx-thumb', template: "<div class=\"dot\"></div>\n" }), __metadata("design:paramtypes", [ElementRef]) ], IgxSliderThumbComponent); export { IgxSliderThumbComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGh1bWItc2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvc2xpZGVyL3RodW1iL3RodW1iLXNsaWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxXQUFXLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9COztHQUVHO0FBS0gsSUFBYSx1QkFBdUIsR0FBcEMsTUFBYSx1QkFBdUI7SUErRmhDLFlBQW9CLFdBQXVCO1FBQXZCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBN0ZuQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFRcEMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQW9DakIsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUdoRCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUduQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFHNUMsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUdiLFdBQU0sR0FBRyxDQUFDLENBQUM7SUFtQzZCLENBQUM7SUF6RmhELElBQVksY0FBYztRQUN0QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDbkUsTUFBTSxXQUFXLEdB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UUFBUSxDQUFDLENBQUM7O3FDQUNaLGFBQWE7O3dEQWdCcEM7QUFHRDtJQURDLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7cURBSXBCO0FBR0Q7SUFEQyxZQUFZLENBQUMsT0FBTyxDQUFDOzs7OzhEQUlyQjtBQTNKUSx1QkFBdUI7SUFKbkMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLFdBQVc7UUFDckIsdUNBQTBDO0tBQzdDLENBQUM7cUNBZ0dtQyxVQUFVO0dBL0ZsQyx1QkFBdUIsQ0E4TW5DO1NBOU1ZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNsaWRlckhhbmRsZSB9IGZyb20gJy4uL3NsaWRlci5jb21tb24nO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtdGh1bWInLFxuICAgIHRlbXBsYXRlVXJsOiAndGh1bWItc2xpZGVyLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgSWd4U2xpZGVyVGh1bWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBwcml2YXRlIF9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2lzUHJlc3NlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICAgIHByaXZhdGUgZ2V0IHRodW1iUG9zaXRpb25YKCkge1xuICAgICAgICBjb25zdCB0aHVtYkJvdW5kZXJpZXMgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRodW1iQ2VudGVyID0gKHRodW1iQm91bmRlcmllcy5yaWdodCAtIHRodW1iQm91bmRlcmllcy5sZWZ0KSAvIDI7XG4gICAgICAgIHJldHVybiB0aHVtYkJvdW5kZXJpZXMubGVmdCArIHRodW1iQ2VudGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmFsdWU6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbnRpbnVvdXM6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0aHVtYkxhYmVsVmlzaWJpbGl0eUR1cmF0aW9uO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBvblBhbjogU3ViamVjdDxudW1iZXI+O1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3RlcERpc3RhbmNlOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzdGVwOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbnRleHQ6IGFueTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHR5cGU6IFNsaWRlckhhbmRsZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRlYWN0aXZlU3RhdGU6IGJvb2xlYW47XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25UaHVtYlZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkhvdmVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcbiAgICBwdWJsaWMgdGFiaW5kZXggPSAwO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnotaW5kZXgnKVxuICAgIHB1YmxpYyB6SW5kZXggPSAwO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtc2xpZGVyX190aHVtYi1mcm9tJylcbiAgICBwdWJsaWMgZ2V0IHRodW1iRnJvbUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBTbGlkZXJIYW5kbGUuRlJPTTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1zbGlkZXJfX3RodW1iLXRvJylcbiAgICBwdWJsaWMgZ2V0IHRodW1iVG9DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gU2xpZGVySGFuZGxlLlRPO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXNsaWRlcl9fdGh1bWItZnJvbS0tYWN0aXZlJylcbiAgICBwdWJsaWMgZ2V0IHRodW1iRnJvbUFjdGl2ZUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBTbGlkZXJIYW5kbGUuRlJPTSAmJiB0aGlzLl9pc0FjdGl2ZTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1zbGlkZXJfX3RodW1iLXRvLS1hY3RpdmUnKVxuICAgIHB1YmxpYyBnZXQgdGh1bWJUb0FjdGl2ZUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBTbGlkZXJIYW5kbGUuVE8gJiYgdGhpcy5faXNBY3RpdmU7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtc2xpZGVyX190aHVtYi0tcHJlc3NlZCcpXG4gICAgcHVibGljIGdldCB0aHVtYlByZXNzZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBY3RpdmUgJiYgdGhpcy5faXNQcmVzc2VkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlc3Ryb3koKTogU3ViamVjdDxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZXN0cm95JDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMub25QYW5cbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKG1vdXNlWCA9PlxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVGh1bWJWYWx1ZShtb3VzZVgpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigncG9pbnRlcmVudGVyJylcbiAgICBwdWJsaWMgb25QaW50ZXJFbnRlcigpIHtcbiAgICAgICAgdGhpcy5vbkhvdmVyQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigncG9pbnRlcmxlYXZlJylcbiAgICBwdWJsaWMgb25Qb2ludGVyTGVhdmUoKSB7XG4gICAgICAgIHRoaXMub25Ib3ZlckNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaW5jcmVtZW50ID0gMDtcbiAgICAgICAgaWYgKGV2ZW50LmtleS5lbmRzV2l0aCgnTGVmdCcpKSB7XG4gICAgICAgICAgICBpbmNyZW1lbnQgPSB0aGlzLnN0ZXAgKiAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5LmVuZHNXaXRoKCdSaWdodCcpKSB7XG4gICAgICAgICAgICBpbmNyZW1lbnQgPSB0aGlzLnN0ZXA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoKTtcbiAgICAgICAgdGhpcy5vblRodW1iVmFsdWVDaGFuZ2UuZW1pdChpbmNyZW1lbnQpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2JsdXInKVxuICAgIHB1YmxpYyBvbkJsdXIoKSB7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy56SW5kZXggPSAwO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgICBwdWJsaWMgb25Gb2N1c0xpc3RlbmVyKCkge1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy56SW5kZXggPSAxO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgdGh1bWIgbGFiZWwgYW5kIHJpcHBsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvd1RodW1iSW5kaWNhdG9ycygpIHtcbiAgICAgICAgdGhpcy50b2dnbGVUaHVtYkluZGljYXRvcnModHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZSB0aHVtYiBsYWJlbCBhbmQgcmlwcGxlLlxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlVGh1bWJJbmRpY2F0b3JzKCkge1xuICAgICAgICB0aGlzLnRvZ2dsZVRodW1iSW5kaWNhdG9ycyhmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUaHVtYlZhbHVlKG1vdXNlWDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZVZhbHVlID0gdGhpcy5jYWxjdWxhdGVUcmFja1VwZGF0ZShtb3VzZVgpO1xuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZSAmJiB1cGRhdGVWYWx1ZSAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5vblRodW1iVmFsdWVDaGFuZ2UuZW1pdCh1cGRhdGVWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVRyYWNrVXBkYXRlKG1vdXNlWDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgc2NhbGVYID0gbW91c2VYIC0gdGhpcy50aHVtYlBvc2l0aW9uWDtcbiAgICAgICAgY29uc3Qgc3RlcERpc3RhbmNlQ2VudGVyID0gdGhpcy5zdGVwRGlzdGFuY2UgLyAyO1xuXG4gICAgICAgIC8vIElmIHRoZSB0aHVtYiBzY2FsZSByYW5nZSAoc2xpZGVyIHVwZGF0ZSkgaXMgbGVzcyB0aMOgbiBhIGhhbGYgc3RlcCxcbiAgICAgICAgLy8gdGhlIHBvc2l0aW9uIHN0YXlzIHRoZSBzYW1lLlxuICAgICAgICBjb25zdCBzY2FsZVhQb3NpdGl2ZSA9IE1hdGguYWJzKHNjYWxlWCk7XG4gICAgICAgIGlmIChzY2FsZVhQb3NpdGl2ZSA8IHN0ZXBEaXN0YW5jZUNlbnRlcikge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zdGVwVG9Qcm9jZWVkKHNjYWxlWCwgdGhpcy5zdGVwRGlzdGFuY2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RlcFRvUHJvY2VlZChzY2FsZVgsIHN0ZXBEaXN0KSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHNjYWxlWCAvIHN0ZXBEaXN0KSAqIHRoaXMuc3RlcDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZVRodW1iSW5kaWNhdG9ycyh2aXNpYmxlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2lzUHJlc3NlZCA9IHZpc2libGU7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGludW91cyB8fCB0aGlzLmRlYWN0aXZlU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IHZpc2libGU7XG4gICAgICAgIH1cblxuICAgIH1cbn1cbiJdfQ==