@radial-color-picker/angular-color-picker
Version:
Radial Color Picker - Angular
161 lines • 22.1 kB
JavaScript
import { __decorate } from "tslib";
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { Platform } from '@angular/cdk/platform';
import { AfterViewInit, Directive, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges } from '@angular/core';
import { fromEvent, merge } from 'rxjs';
import { filter, takeUntil, tap } from 'rxjs/operators';
import { calculateQuadrant, determineCSSRotationAngle } from '../helpers/helpers';
var RotatableDirective = /** @class */ (function () {
function RotatableDirective(el, renderer, platform) {
this.el = el;
this.renderer = renderer;
this.platform = platform;
this.dragging = false;
this.rotateStart = new EventEmitter();
this.rotating = new EventEmitter();
this.rotateStop = new EventEmitter();
if (this.platform.IOS || this.platform.ANDROID) {
this.mouseDownEv = 'touchstart';
this.mouseUpEv = 'touchend';
this.mouseMoveEv = 'touchmove';
this.cancelEv = 'touchcancel';
}
else {
this.mouseDownEv = 'mousedown';
this.mouseUpEv = 'mouseup';
this.mouseMoveEv = 'mousemove';
this.cancelEv = 'mouseout';
}
}
Object.defineProperty(RotatableDirective.prototype, "isDisabled", {
get: function () {
return this.disable ? coerceBooleanProperty(this.disable) : false;
},
enumerable: true,
configurable: true
});
RotatableDirective.prototype.ngOnInit = function () {
};
RotatableDirective.prototype.ngOnChanges = function (changes) {
if (changes.angle && changes.angle.currentValue) {
// console.log(changes.angle.currentValue);
var angle = changes.angle.currentValue + 90;
this.renderer.setStyle(this.el.nativeElement, 'transform', "rotate(" + angle + "deg)");
}
};
RotatableDirective.prototype.ngAfterViewInit = function () {
var _this = this;
// console.log(this.isDisabled);
requestAnimationFrame(this.initialRender.bind(this));
this.rect = this.el.nativeElement.getBoundingClientRect();
this.mouseUp$ = fromEvent(this.el.nativeElement, this.mouseUpEv, { passive: true });
this.mouseOut$ = fromEvent(this.el.nativeElement, this.cancelEv, { passive: true });
this.mouseDownSub = fromEvent(this.el.nativeElement, this.mouseDownEv, { passive: true })
.pipe(filter(function (val) {
return _this.active && !_this.isDisabled;
}))
.subscribe(function (downEvent) {
_this.dragging = true;
_this.rect = _this.el.nativeElement.getBoundingClientRect();
// console.log('mouse down', downEvent, this.rect);
_this.point = _this.createPoint(downEvent);
_this.rotateStart.emit(_this.point);
_this.applyRotation();
_this.mouseMoveSub = fromEvent(_this.el.nativeElement, _this.mouseMoveEv).pipe(takeUntil(merge(_this.mouseOut$, _this.mouseUp$).pipe(tap(function (upEvent) {
_this.rect = _this.el.nativeElement.getBoundingClientRect();
// console.log('mouse up', upEvent, this.rect);
_this.dragging = false;
_this.mouseMoveSub.unsubscribe();
_this.rotateStop.emit(_this.point);
})))).subscribe(function (moveEvent) {
_this.rect = _this.el.nativeElement.getBoundingClientRect();
// console.log('mouse move', moveEvent, this.rect);
_this.point = _this.createPoint(moveEvent);
// console.log(this.point);
_this.applyRotation();
});
});
};
RotatableDirective.prototype.initialRender = function () {
var angle = this.angle + 90;
this.renderer.setStyle(this.el.nativeElement, 'transform', "rotate(" + angle + "deg)");
};
RotatableDirective.prototype.rotationRender = function () {
// console.log(this.rotation);
this.renderer.setStyle(this.el.nativeElement, 'transform', "rotate(" + this.rotation + "deg)");
};
RotatableDirective.prototype.ngOnDestroy = function () {
if (this.mouseDownSub) {
this.mouseDownSub.unsubscribe();
}
if (this.mouseMoveSub) {
this.mouseMoveSub.unsubscribe();
}
if (this.mouseUpSub) {
this.mouseUpSub.unsubscribe();
}
// console.log('directive destroy');
};
RotatableDirective.prototype.applyRotation = function () {
var quadrant = calculateQuadrant(this.point);
var rotation = determineCSSRotationAngle(this.point, quadrant);
// console.log(rotation);
this.rotating.emit(rotation);
this.rotation = rotation;
requestAnimationFrame(this.rotationRender.bind(this));
};
RotatableDirective.prototype.createPoint = function (mouseEvent) {
var point;
if (mouseEvent.targetTouches) {
point = {
x: this._normalizeX(mouseEvent.targetTouches[0].clientX),
y: this._normalizeY(mouseEvent.targetTouches[0].clientY)
};
}
else {
point = {
x: this._normalizeX(mouseEvent.clientX),
y: this._normalizeY(mouseEvent.clientY)
};
}
// console.log('point', point);
return point;
};
RotatableDirective.prototype._normalizeX = function (coordX) {
return coordX - this.rect.left - this.rect.width / 2;
};
RotatableDirective.prototype._normalizeY = function (coordY) {
return ((coordY - this.rect.top) * -1) + this.rect.height / 2;
};
RotatableDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 },
{ type: Platform }
]; };
__decorate([
Input()
], RotatableDirective.prototype, "angle", void 0);
__decorate([
Input()
], RotatableDirective.prototype, "disable", void 0);
__decorate([
Input()
], RotatableDirective.prototype, "active", void 0);
__decorate([
Output()
], RotatableDirective.prototype, "rotateStart", void 0);
__decorate([
Output()
], RotatableDirective.prototype, "rotating", void 0);
__decorate([
Output()
], RotatableDirective.prototype, "rotateStop", void 0);
RotatableDirective = __decorate([
Directive({
selector: '[rcpRotatable]'
})
], RotatableDirective);
return RotatableDirective;
}());
export { RotatableDirective };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0ByYWRpYWwtY29sb3ItcGlja2VyL2FuZ3VsYXItY29sb3ItcGlja2VyLyIsInNvdXJjZXMiOlsibGliL2RpcmVjdGl2ZXMvcm90YXRhYmxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFDTCxhQUFhLEVBQ2IsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsYUFBYSxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQTRCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUtsRjtJQTZCRSw0QkFDVSxFQUFjLEVBQ2QsUUFBbUIsRUFDbkIsUUFBa0I7UUFGbEIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTlCckIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQW1CUCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFXcEQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxD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ZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBtZXJnZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBjYWxjdWxhdGVRdWFkcmFudCwgZGV0ZXJtaW5lQ1NTUm90YXRpb25BbmdsZSB9IGZyb20gJy4uL2hlbHBlcnMvaGVscGVycyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tyY3BSb3RhdGFibGVdJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUm90YXRhYmxlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgcHVibGljIHJvdGF0aW9uOiBhbnk7XHJcbiAgcHVibGljIGRyYWdnaW5nID0gZmFsc2U7XHJcbiAgcHVibGljIG1vdXNlRG93blN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIHB1YmxpYyBtb3VzZU1vdmVTdWI6IFN1YnNjcmlwdGlvbjtcclxuICBwdWJsaWMgbW91c2VVcFN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIHB1YmxpYyByZWN0OiBhbnk7XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxFdjogc3RyaW5nO1xyXG4gIHB1YmxpYyBtb3VzZURvd25Fdjogc3RyaW5nO1xyXG4gIHB1YmxpYyBtb3VzZU1vdmVFdjogc3RyaW5nO1xyXG4gIHB1YmxpYyBtb3VzZVVwRXY6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgYW5nbGU6IG51bWJlcjtcclxuICBASW5wdXQoKSBkaXNhYmxlOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGFjdGl2ZTogYm9vbGVhbjtcclxuXHJcbiAgZ2V0IGlzRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlID8gY29lcmNlQm9vbGVhblByb3BlcnR5KHRoaXMuZGlzYWJsZSkgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBwdWJsaWMgcm90YXRlU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcHVibGljIHJvdGF0aW5nID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHB1YmxpYyByb3RhdGVTdG9wID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgcG9pbnQ6IGFueTtcclxuICBwcml2YXRlIG1vdXNlVXAkOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgcHJpdmF0ZSBtb3VzZU91dCQ6IE9ic2VydmFibGU8YW55PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm1cclxuICApIHtcclxuICAgIGlmICh0aGlzLnBsYXRmb3JtLklPUyB8fCB0aGlzLnBsYXRmb3JtLkFORFJPSUQpIHtcclxuICAgICAgdGhpcy5tb3VzZURvd25FdiA9ICd0b3VjaHN0YXJ0JztcclxuICAgICAgdGhpcy5tb3VzZVVwRXYgPSAndG91Y2hlbmQnO1xyXG4gICAgICB0aGlzLm1vdXNlTW92ZUV2ID0gJ3RvdWNobW92ZSc7XHJcbiAgICAgIHRoaXMuY2FuY2VsRXYgPSAndG91Y2hjYW5jZWwnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tb3VzZURvd25FdiA9ICdtb3VzZWRvd24nO1xyXG4gICAgICB0aGlzLm1vdXNlVXBFdiA9ICdtb3VzZXVwJztcclxuICAgICAgdGhpcy5tb3VzZU1vdmVFdiA9ICdtb3VzZW1vdmUnO1xyXG4gICAgICB0aGlzLmNhbmNlbEV2ID0gJ21vdXNlb3V0JztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlcy5hbmdsZSAmJiBjaGFuZ2VzLmFuZ2xlLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhjaGFuZ2VzLmFuZ2xlLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIGNvbnN0IGFuZ2xlID0gY2hhbmdlcy5hbmdsZS5jdXJyZW50VmFsdWUgKyA5MDtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2Zvcm0nLCBgcm90YXRlKCR7YW5nbGV9ZGVnKWApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5pc0Rpc2FibGVkKTtcclxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLmluaXRpYWxSZW5kZXIuYmluZCh0aGlzKSk7XHJcbiAgICB0aGlzLnJlY3QgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICB0aGlzLm1vdXNlVXAkID0gZnJvbUV2ZW50KHRoaXMuZWwubmF0aXZlRWxlbWVudCwgdGhpcy5tb3VzZVVwRXYsIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcclxuICAgIHRoaXMubW91c2VPdXQkID0gZnJvbUV2ZW50KHRoaXMuZWwubmF0aXZlRWxlbWVudCwgdGhpcy5jYW5jZWxFdiwgeyBwYXNzaXZlOiB0cnVlIH0pO1xyXG5cclxuICAgIHRoaXMubW91c2VEb3duU3ViID0gZnJvbUV2ZW50KHRoaXMuZWwubmF0aXZlRWxlbWVudCwgdGhpcy5tb3VzZURvd25FdiwgeyBwYXNzaXZlOiB0cnVlIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcigodmFsKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmUgJiYgIXRoaXMuaXNEaXNhYmxlZDtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGRvd25FdmVudCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVjdCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnbW91c2UgZG93bicsIGRvd25FdmVudCwgdGhpcy5yZWN0KTtcclxuICAgICAgICB0aGlzLnBvaW50ID0gdGhpcy5jcmVhdGVQb2ludChkb3duRXZlbnQpO1xyXG4gICAgICAgIHRoaXMucm90YXRlU3RhcnQuZW1pdCh0aGlzLnBvaW50KTtcclxuICAgICAgICB0aGlzLmFwcGx5Um90YXRpb24oKTtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubW91c2VNb3ZlU3ViID0gZnJvbUV2ZW50KHRoaXMuZWwubmF0aXZlRWxlbWVudCwgdGhpcy5tb3VzZU1vdmVFdikucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbChtZXJnZSh0aGlzLm1vdXNlT3V0JCwgdGhpcy5tb3VzZVVwJCkucGlwZShcclxuICAgICAgICAgICAgdGFwKCh1cEV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWN0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdtb3VzZSB1cCcsIHVwRXZlbnQsIHRoaXMucmVjdCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMubW91c2VNb3ZlU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yb3RhdGVTdG9wLmVtaXQodGhpcy5wb2ludCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVjdCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdtb3VzZSBtb3ZlJywgbW92ZUV2ZW50LCB0aGlzLnJlY3QpO1xyXG5cclxuICAgICAgICAgIHRoaXMucG9pbnQgPSB0aGlzLmNyZWF0ZVBvaW50KG1vdmVFdmVudCk7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnBvaW50KTtcclxuICAgICAgICAgIHRoaXMuYXBwbHlSb3RhdGlvbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0aWFsUmVuZGVyKCkge1xyXG4gICAgY29uc3QgYW5nbGUgPSB0aGlzLmFuZ2xlICsgOTA7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ3RyYW5zZm9ybScsIGByb3RhdGUoJHthbmdsZX1kZWcpYCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcm90YXRpb25SZW5kZXIoKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnJvdGF0aW9uKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCAndHJhbnNmb3JtJywgYHJvdGF0ZSgke3RoaXMucm90YXRpb259ZGVnKWApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5tb3VzZURvd25TdWIpIHtcclxuICAgICAgdGhpcy5tb3VzZURvd25TdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vdXNlTW92ZVN1Yikge1xyXG4gICAgICB0aGlzLm1vdXNlTW92ZVN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW91c2VVcFN1Yikge1xyXG4gICAgICB0aGlzLm1vdXNlVXBTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKCdkaXJlY3RpdmUgZGVzdHJveScpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBwcml2YXRlIGFwcGx5Um90YXRpb24oKSB7XHJcbiAgICBjb25zdCBxdWFkcmFudCA9IGNhbGN1bGF0ZVF1YWRyYW50KHRoaXMucG9pbnQpO1xyXG4gICAgY29uc3Qgcm90YXRpb24gPSBkZXRlcm1pbmVDU1NSb3RhdGlvbkFuZ2xlKHRoaXMucG9pbnQsIHF1YWRyYW50KTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJvdGF0aW9uKTtcclxuICAgIHRoaXMucm90YXRpbmcuZW1pdChyb3RhdGlvbik7XHJcbiAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb247XHJcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yb3RhdGlvblJlbmRlci5iaW5kKHRoaXMpKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVBvaW50KG1vdXNlRXZlbnQpIHtcclxuICAgIGxldCBwb2ludDtcclxuICAgIGlmIChtb3VzZUV2ZW50LnRhcmdldFRvdWNoZXMpIHtcclxuICAgICAgcG9pbnQgPSB7XHJcbiAgICAgICAgeDogdGhpcy5fbm9ybWFsaXplWChtb3VzZUV2ZW50LnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WCksXHJcbiAgICAgICAgeTogdGhpcy5fbm9ybWFsaXplWShtb3VzZUV2ZW50LnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WSlcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBvaW50ID0ge1xyXG4gICAgICAgIHg6IHRoaXMuX25vcm1hbGl6ZVgobW91c2VFdmVudC5jbGllbnRYKSxcclxuICAgICAgICB5OiB0aGlzLl9ub3JtYWxpemVZKG1vdXNlRXZlbnQuY2xpZW50WSlcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKCdwb2ludCcsIHBvaW50KTtcclxuICAgIHJldHVybiBwb2ludDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25vcm1hbGl6ZVgoY29vcmRYKSB7XHJcbiAgICByZXR1cm4gY29vcmRYIC0gdGhpcy5yZWN0LmxlZnQgLSB0aGlzLnJlY3Qud2lkdGggLyAyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbm9ybWFsaXplWShjb29yZFkpIHtcclxuICAgIHJldHVybiAoKGNvb3JkWSAtIHRoaXMucmVjdC50b3ApICogLTEpICsgdGhpcy5yZWN0LmhlaWdodCAvIDI7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=