@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
302 lines • 25.1 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
*/
var IgxSliderThumbComponent = /** @class */ (function () {
function IgxSliderThumbComponent(_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;
}
Object.defineProperty(IgxSliderThumbComponent.prototype, "thumbPositionX", {
get: function () {
var thumbBounderies = this.nativeElement.getBoundingClientRect();
var thumbCenter = (thumbBounderies.right - thumbBounderies.left) / 2;
return thumbBounderies.left + thumbCenter;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxSliderThumbComponent.prototype, "thumbFromClass", {
get: function () {
return this.type === SliderHandle.FROM;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxSliderThumbComponent.prototype, "thumbToClass", {
get: function () {
return this.type === SliderHandle.TO;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxSliderThumbComponent.prototype, "thumbFromActiveClass", {
get: function () {
return this.type === SliderHandle.FROM && this._isActive;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxSliderThumbComponent.prototype, "thumbToActiveClass", {
get: function () {
return this.type === SliderHandle.TO && this._isActive;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxSliderThumbComponent.prototype, "thumbPressedClass", {
get: function () {
return this.isActive && this._isPressed;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxSliderThumbComponent.prototype, "nativeElement", {
get: function () {
return this._elementRef.nativeElement;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxSliderThumbComponent.prototype, "destroy", {
get: function () {
return this._destroy$;
},
enumerable: true,
configurable: true
});
/**
* @hidden
*/
IgxSliderThumbComponent.prototype.ngOnInit = function () {
var _this = this;
this.onPan
.pipe(takeUntil(this._destroy$))
.subscribe(function (mouseX) {
return _this.updateThumbValue(mouseX);
});
};
/**
* @hidden
*/
IgxSliderThumbComponent.prototype.ngOnDestroy = function () {
this._destroy$.next(true);
this._destroy$.complete();
};
IgxSliderThumbComponent.prototype.onPinterEnter = function () {
this.onHoverChange.emit(true);
};
IgxSliderThumbComponent.prototype.onPointerLeave = function () {
this.onHoverChange.emit(false);
};
IgxSliderThumbComponent.prototype.onKeyDown = function (event) {
if (this.disabled) {
return;
}
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);
};
IgxSliderThumbComponent.prototype.onBlur = function () {
this.isActive = false;
this.zIndex = 0;
};
IgxSliderThumbComponent.prototype.onFocusListener = function () {
this.isActive = true;
this.zIndex = 1;
};
/**
* Show thumb label and ripple.
*/
IgxSliderThumbComponent.prototype.showThumbIndicators = function () {
this.toggleThumbIndicators(true);
};
/**
* Hide thumb label and ripple.
*/
IgxSliderThumbComponent.prototype.hideThumbIndicators = function () {
this.toggleThumbIndicators(false);
};
IgxSliderThumbComponent.prototype.updateThumbValue = function (mouseX) {
var updateValue = this.calculateTrackUpdate(mouseX);
if (this.isActive && updateValue !== 0) {
this.onThumbValueChange.emit(updateValue);
}
};
IgxSliderThumbComponent.prototype.calculateTrackUpdate = function (mouseX) {
var scaleX = mouseX - this.thumbPositionX;
var stepDistanceCenter = this.stepDistance / 2;
// If the thumb scale range (slider update) is less thàn a half step,
// the position stays the same.
var scaleXPositive = Math.abs(scaleX);
if (scaleXPositive < stepDistanceCenter) {
return 0;
}
return this.stepToProceed(scaleX, this.stepDistance);
};
IgxSliderThumbComponent.prototype.stepToProceed = function (scaleX, stepDist) {
return Math.round(scaleX / stepDist) * this.step;
};
IgxSliderThumbComponent.prototype.toggleThumbIndicators = function (visible) {
this._isPressed = visible;
if (this.continuous || this.deactiveState) {
this._isActive = false;
}
else {
this._isActive = visible;
}
};
IgxSliderThumbComponent.ctorParameters = function () { return [
{ 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);
return IgxSliderThumbComponent;
}());
export { IgxSliderThumbComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGh1bWItc2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvc2xpZGVyL3RodW1iL3RodW1iLXNsaWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLE1BQU0sRUFDTixZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxXQUFXLEVBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9COztHQUVHO0FBS0g7SUErRkksaUNBQW9CLFdBQXVCO1FBQXZCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBN0ZuQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFRcEMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQW9DakIsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUdoRCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUduQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFHNUMsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUdiLFdBQU0sR0FBRyxDQUFDLENBQUM7SUFtQzZCLENBQUM7SUF6RmhELHNCQUFZLG1EQUFjO2FBQTFCO1lBQ0ksSUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ25FLElBQU0sV0FBVyxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUss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Q0FBb0MsQ0FBQzs7O3FFQUdqRDtJQUdEO1FBREMsV0FBVyxDQUFDLGtDQUFrQyxDQUFDOzs7b0VBRy9DO0lBZ0NEO1FBREMsWUFBWSxDQUFDLGNBQWMsQ0FBQzs7OztnRUFHNUI7SUFHRDtRQURDLFlBQVksQ0FBQyxjQUFjLENBQUM7Ozs7aUVBRzVCO0lBR0Q7UUFEQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7O3lDQUNaLGFBQWE7OzREQWdCcEM7SUFHRDtRQURDLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7eURBSXBCO0lBR0Q7UUFEQyxZQUFZLENBQUMsT0FBTyxDQUFDOzs7O2tFQUlyQjtJQTNKUSx1QkFBdUI7UUFKbkMsU0FBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLFdBQVc7WUFDckIsdUNBQTBDO1NBQzdDLENBQUM7eUNBZ0dtQyxVQUFVO09BL0ZsQyx1QkFBdUIsQ0E4TW5DO0lBQUQsOEJBQUM7Q0FBQSxBQTlNRCxJQThNQztTQTlNWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE9uSW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTbGlkZXJIYW5kbGUgfSBmcm9tICcuLi9zbGlkZXIuY29tbW9uJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXRodW1iJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3RodW1iLXNsaWRlci5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIElneFNsaWRlclRodW1iQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHJpdmF0ZSBfaXNBY3RpdmUgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9pc1ByZXNzZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBwcml2YXRlIGdldCB0aHVtYlBvc2l0aW9uWCgpIHtcbiAgICAgICAgY29uc3QgdGh1bWJCb3VuZGVyaWVzID0gdGhpcy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB0aHVtYkNlbnRlciA9ICh0aHVtYkJvdW5kZXJpZXMucmlnaHQgLSB0aHVtYkJvdW5kZXJpZXMubGVmdCkgLyAyO1xuICAgICAgICByZXR1cm4gdGh1bWJCb3VuZGVyaWVzLmxlZnQgKyB0aHVtYkNlbnRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHZhbHVlOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb250aW51b3VzOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGh1bWJMYWJlbFZpc2liaWxpdHlEdXJhdGlvbjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb25QYW46IFN1YmplY3Q8bnVtYmVyPjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHN0ZXBEaXN0YW5jZTogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3RlcDogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb250ZXh0OiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0eXBlOiBTbGlkZXJIYW5kbGU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkZWFjdGl2ZVN0YXRlOiBib29sZWFuO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uVGh1bWJWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25Ib3ZlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gICAgcHVibGljIHRhYmluZGV4ID0gMDtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci56LWluZGV4JylcbiAgICBwdWJsaWMgekluZGV4ID0gMDtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXNsaWRlcl9fdGh1bWItZnJvbScpXG4gICAgcHVibGljIGdldCB0aHVtYkZyb21DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gU2xpZGVySGFuZGxlLkZST007XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtc2xpZGVyX190aHVtYi10bycpXG4gICAgcHVibGljIGdldCB0aHVtYlRvQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09IFNsaWRlckhhbmRsZS5UTztcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1zbGlkZXJfX3RodW1iLWZyb20tLWFjdGl2ZScpXG4gICAgcHVibGljIGdldCB0aHVtYkZyb21BY3RpdmVDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gU2xpZGVySGFuZGxlLkZST00gJiYgdGhpcy5faXNBY3RpdmU7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtc2xpZGVyX190aHVtYi10by0tYWN0aXZlJylcbiAgICBwdWJsaWMgZ2V0IHRodW1iVG9BY3RpdmVDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gU2xpZGVySGFuZGxlLlRPICYmIHRoaXMuX2lzQWN0aXZlO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXNsaWRlcl9fdGh1bWItLXByZXNzZWQnKVxuICAgIHB1YmxpYyBnZXQgdGh1bWJQcmVzc2VkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQWN0aXZlICYmIHRoaXMuX2lzUHJlc3NlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZXN0cm95KCk6IFN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVzdHJveSQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm9uUGFuXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShtb3VzZVggPT5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRodW1iVmFsdWUobW91c2VYKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3BvaW50ZXJlbnRlcicpXG4gICAgcHVibGljIG9uUGludGVyRW50ZXIoKSB7XG4gICAgICAgIHRoaXMub25Ib3ZlckNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScpXG4gICAgcHVibGljIG9uUG9pbnRlckxlYXZlKCkge1xuICAgICAgICB0aGlzLm9uSG92ZXJDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGluY3JlbWVudCA9IDA7XG4gICAgICAgIGlmIChldmVudC5rZXkuZW5kc1dpdGgoJ0xlZnQnKSkge1xuICAgICAgICAgICAgaW5jcmVtZW50ID0gdGhpcy5zdGVwICogLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleS5lbmRzV2l0aCgnUmlnaHQnKSkge1xuICAgICAgICAgICAgaW5jcmVtZW50ID0gdGhpcy5zdGVwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KCk7XG4gICAgICAgIHRoaXMub25UaHVtYlZhbHVlQ2hhbmdlLmVtaXQoaW5jcmVtZW50KTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgICBwdWJsaWMgb25CbHVyKCkge1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuekluZGV4ID0gMDtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gICAgcHVibGljIG9uRm9jdXNMaXN0ZW5lcigpIHtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuekluZGV4ID0gMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRodW1iIGxhYmVsIGFuZCByaXBwbGUuXG4gICAgICovXG4gICAgcHVibGljIHNob3dUaHVtYkluZGljYXRvcnMoKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlVGh1bWJJbmRpY2F0b3JzKHRydWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGUgdGh1bWIgbGFiZWwgYW5kIHJpcHBsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZVRodW1iSW5kaWNhdG9ycygpIHtcbiAgICAgICAgdGhpcy50b2dnbGVUaHVtYkluZGljYXRvcnMoZmFsc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlVGh1bWJWYWx1ZShtb3VzZVg6IG51bWJlcikge1xuICAgICAgICBjb25zdCB1cGRhdGVWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlVHJhY2tVcGRhdGUobW91c2VYKTtcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUgJiYgdXBkYXRlVmFsdWUgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMub25UaHVtYlZhbHVlQ2hhbmdlLmVtaXQodXBkYXRlVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVUcmFja1VwZGF0ZShtb3VzZVg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHNjYWxlWCA9IG1vdXNlWCAtIHRoaXMudGh1bWJQb3NpdGlvblg7XG4gICAgICAgIGNvbnN0IHN0ZXBEaXN0YW5jZUNlbnRlciA9IHRoaXMuc3RlcERpc3RhbmNlIC8gMjtcblxuICAgICAgICAvLyBJZiB0aGUgdGh1bWIgc2NhbGUgcmFuZ2UgKHNsaWRlciB1cGRhdGUpIGlzIGxlc3MgdGjDoG4gYSBoYWxmIHN0ZXAsXG4gICAgICAgIC8vIHRoZSBwb3NpdGlvbiBzdGF5cyB0aGUgc2FtZS5cbiAgICAgICAgY29uc3Qgc2NhbGVYUG9zaXRpdmUgPSBNYXRoLmFicyhzY2FsZVgpO1xuICAgICAgICBpZiAoc2NhbGVYUG9zaXRpdmUgPCBzdGVwRGlzdGFuY2VDZW50ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcFRvUHJvY2VlZChzY2FsZVgsIHRoaXMuc3RlcERpc3RhbmNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0ZXBUb1Byb2NlZWQoc2NhbGVYLCBzdGVwRGlzdCkge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChzY2FsZVggLyBzdGVwRGlzdCkgKiB0aGlzLnN0ZXA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVUaHVtYkluZGljYXRvcnModmlzaWJsZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9pc1ByZXNzZWQgPSB2aXNpYmxlO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRpbnVvdXMgfHwgdGhpcy5kZWFjdGl2ZVN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNBY3RpdmUgPSB2aXNpYmxlO1xuICAgICAgICB9XG5cbiAgICB9XG59XG4iXX0=