@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
266 lines • 22.4 kB
JavaScript
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==