ng-fancy-gui
Version:
This package contains components, for creating userinterfaces in a Angular app.
151 lines • 23.6 kB
JavaScript
import { __decorate } from "tslib";
import { Component, EventEmitter, Output, ViewChild, HostListener } from '@angular/core';
import { HorizontalLine } from './classes/horizontalLine';
import { Mouse } from './classes/mouse';
let SliderInfiniteComponent = class SliderInfiniteComponent {
constructor() {
this.change = new EventEmitter();
this.horizontalLines = [];
this.value = 0;
this.renderingValue = '0.00';
this.spaceing = 30;
this.lineThikness = 3;
this.lineColor = 'gray';
this.horizontalLinesMarginTop = 25;
this.horizontalLineMove = 0;
}
ngAfterViewInit() {
this.canvas = this.canvasVc.nativeElement;
this.ctx = this.canvas.getContext('2d');
this.init();
}
ngOnDestroy() {
window.cancelAnimationFrame(this.animationFrameHandler);
}
clear() {
this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);
}
init() {
this.mouse = new Mouse(this);
this.resize();
this.initRenderingLoop();
this.initMouseEvents();
}
initRenderingLoop() {
const step = () => {
this.render();
window.requestAnimationFrame(step);
};
this.animationFrameHandler = window.requestAnimationFrame(step);
}
initMouseEvents() {
this.canvas.onmousemove = (evt) => {
const delta = (this.mouse.lastX - this.mouse.x);
if (this.mouse.isDown) {
this.addMissingLines();
this.horizontalLineMove += delta;
this.value = (Math.round((this.horizontalLineMove / this.spaceing) * 100) / 100);
this.renderingValue = (Math.round((this.horizontalLineMove / this.spaceing) * 100) / 100).toFixed(2);
if (delta > 0) {
this.change.emit(1);
}
else if (delta < 0) {
this.change.emit(-1);
}
}
this.mouse.syncPosition(evt);
};
this.canvas.ontouchmove = (evt) => {
evt.preventDefault();
const delta = (this.mouse.lastX - this.mouse.x);
if (this.mouse.isDown) {
this.addMissingLines();
this.horizontalLineMove += delta;
this.value = (Math.round((this.horizontalLineMove / this.spaceing) * 100) / 100);
this.renderingValue = (Math.round((this.horizontalLineMove / this.spaceing) * 100) / 100).toFixed(2);
if (delta > 0) {
this.change.emit(1);
}
else {
this.change.emit(-1);
}
}
this.mouse.syncTouchPosition(evt);
};
}
addMissingLines() {
//console.log(this.horizontalLineMove)
// console.log(this.horizontalLines.filter( x=> x.x - this.horizontalLineMove > this.canvas.width).length);
let offsetRight = this.horizontalLines.filter(x => x.x - this.horizontalLineMove > this.canvas.width).length;
let offsetLeft = this.horizontalLines.filter(x => x.x - this.horizontalLineMove < 0).length;
//console.log(offsetRight);
while (offsetRight <= 1) {
const lastLine = this.horizontalLines[this.horizontalLines.length - 1];
this.horizontalLines.push(new HorizontalLine(this.lineThikness, 100, lastLine.x + this.spaceing, this.horizontalLinesMarginTop, null, this));
this.horizontalLines.shift();
offsetRight = this.horizontalLines.filter(x => x.x - this.horizontalLineMove > this.canvas.width).length;
//console.log(offsetRight);
}
;
while (offsetLeft <= 1) {
const lastLine = this.horizontalLines[0];
this.horizontalLines.unshift(new HorizontalLine(this.lineThikness, 100, lastLine.x - this.spaceing, this.horizontalLinesMarginTop, null, this));
this.horizontalLines.pop();
offsetLeft = this.horizontalLines.filter(x => x.x - this.horizontalLineMove < 0).length;
// console.log(offsetRight);
}
;
}
resize() {
//console.log("resize slider infinite")
const parent = this.canvas.parentElement;
this.canvas.width = parent.clientWidth;
// this.canvas.height = parent.clientHeight;
this.horizontalLines = [];
this.horizontalLineMove = 0;
this.addHorizontalLines();
}
render() {
this.clear();
this.ctx.beginPath();
this.ctx.arc(this.canvas.width / 2, 10, 5, 0, 2 * Math.PI);
this.ctx.fillStyle = this.lineColor;
this.ctx.fill();
this.ctx.closePath();
this.horizontalLines.forEach(x => {
x.render();
});
}
addHorizontalLines() {
for (let i = 0; i <= ((this.canvas.width / 2) / (this.lineThikness + this.spaceing)) + 2; i++) {
this.horizontalLines.push(new HorizontalLine(this.lineThikness, 100, (this.canvas.width / 2) + (i * this.spaceing), this.horizontalLinesMarginTop, i, this));
}
for (let i = 0; i >= -((this.canvas.width / 2) / (this.lineThikness + this.spaceing)) - 2; i--) {
this.horizontalLines.push(new HorizontalLine(this.lineThikness, 100, (this.canvas.width / 2) - ((i * (-1)) * this.spaceing), this.horizontalLinesMarginTop, i, this));
}
}
resetValue() {
this.value = 0;
this.horizontalLineMove = 0;
this.renderingValue = '0.00';
this.change.emit(this.value);
}
};
__decorate([
Output()
], SliderInfiniteComponent.prototype, "change", void 0);
__decorate([
ViewChild('canvas')
], SliderInfiniteComponent.prototype, "canvasVc", void 0);
__decorate([
HostListener('window:resize')
], SliderInfiniteComponent.prototype, "resize", null);
SliderInfiniteComponent = __decorate([
Component({
selector: 'fg-slider-infinite',
template: "<div class=\"rotationSliderCanvasWrap\">\n <canvas #canvas></canvas>\n</div>\n",
styles: [":host{display:block;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative}.valueOuterWrapper{position:absolute;top:0;left:50%;transform:translate(-50%,0)}.valueOuterWrapper .valueWrapper{border-radius:7px;padding:5px 15px 5px 18px;position:relative;width:25px;height:25px;margin:0 auto;transition:width .5s,background-color .5s}.valueOuterWrapper .valueWrapper svg{width:25px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.valueOuterWrapper .valueWrapper .value{margin-top:5px;text-align:center;display:none;font-size:13px;font-weight:700}.valueOuterWrapper .valueWrapper .resetButton{position:absolute;display:none;color:#fff;background-color:#000;width:15px;height:15px;border-radius:20px;border:none;outline:0;right:8px;font-size:9px;top:50%;transform:translate(0,-50%)}.valueOuterWrapper .valueWrapper.visible{background-color:#aaa9a9;width:100px}.valueOuterWrapper .valueWrapper.visible svg{position:absolute;left:17px;width:20px;display:block}.valueOuterWrapper .valueWrapper.visible .resetButton,.valueOuterWrapper .valueWrapper.visible .value{display:block}"]
})
], SliderInfiniteComponent);
export { SliderInfiniteComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLWluZmluaXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWZhbmN5LWd1aS8iLCJzb3VyY2VzIjpbImxpYi9zbGlkZXItaW5maW5pdGUvc2xpZGVyLWluZmluaXRlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsWUFBWSxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQTRCLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3SSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBT3hDLElBQWEsdUJBQXVCLEdBQXBDLE1BQWEsdUJBQXVCO0lBb0JsQztRQWpCVSxXQUFNLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFNNUQsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBQ3ZDLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixtQkFBYyxHQUFXLE1BQU0sQ0FBQztRQUNoQyxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDakIsY0FBUyxHQUFHLE1BQU0sQ0FBQztRQUNuQiw2QkFBd0IsR0FBRyxFQUFFLENBQUM7UUFDOUIsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO0lBSVIsQ0FBQztJQUdoQixlQUFlO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztRQUMxQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFF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O3FEQVM3QjtBQXhJVSx1QkFBdUI7SUFMbkMsU0FBUyxDQUFDO1FBQ1QsUUFBUSxFQUFFLG9CQUFvQjtRQUM5QiwyRkFBK0M7O0tBRWhELENBQUM7R0FDVyx1QkFBdUIsQ0FxTG5DO1NBckxZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSG9yaXpvbnRhbExpbmUgfSBmcm9tICcuL2NsYXNzZXMvaG9yaXpvbnRhbExpbmUnO1xuaW1wb3J0IHsgTW91c2UgfSBmcm9tICcuL2NsYXNzZXMvbW91c2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmZy1zbGlkZXItaW5maW5pdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2xpZGVyLWluZmluaXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2xpZGVyLWluZmluaXRlLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU2xpZGVySW5maW5pdGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG5cbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgnY2FudmFzJykgY2FudmFzVmM7XG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuICBtb3VzZTogTW91c2U7XG4gIGhvcml6b250YWxMaW5lczogSG9yaXpvbnRhbExpbmVbXSA9IFtdO1xuICB2YWx1ZSA9IDA7XG4gIHJlbmRlcmluZ1ZhbHVlOiBzdHJpbmcgPSAnMC4wMCc7XG4gIHNwYWNlaW5nID0gMzA7XG4gIGxpbmVUaGlrbmVzcyA9IDM7XG4gIGxpbmVDb2xvciA9ICdncmF5JztcbiAgaG9yaXpvbnRhbExpbmVzTWFyZ2luVG9wID0gMjU7XG4gIGhvcml6b250YWxMaW5lTW92ZSA9IDA7XG4gIHByaXZhdGUgYW5pbWF0aW9uRnJhbWVIYW5kbGVyO1xuXG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuY2FudmFzID0gdGhpcy5jYW52YXNWYy5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1hdGlvbkZyYW1lSGFuZGxlcik7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG4gIH1cblxuICBpbml0KCkge1xuICAgIHRoaXMubW91c2UgPSBuZXcgTW91c2UodGhpcyk7XG4gICAgdGhpcy5yZXNpemUoKTtcbiAgICB0aGlzLmluaXRSZW5kZXJpbmdMb29wKCk7XG4gICAgdGhpcy5pbml0TW91c2VFdmVudHMoKTtcbiAgfVxuXG4gIGluaXRSZW5kZXJpbmdMb29wKCkge1xuXG4gICAgY29uc3Qgc3RlcCA9ICgpPT4ge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCk7XG4gICAgfVxuXG4gICAgdGhpcy5hbmltYXRpb25GcmFtZUhhbmRsZXIgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApO1xuICB9XG5cbiAgaW5pdE1vdXNlRXZlbnRzKCkge1xuICAgIHRoaXMuY2FudmFzLm9ubW91c2Vtb3ZlID0gKGV2dCkgPT4ge1xuXG4gICAgICBjb25zdCBkZWx0YSA9ICh0aGlzLm1vdXNlLmxhc3RYIC0gdGhpcy5tb3VzZS54KTtcblxuICAgICAgaWYgKHRoaXMubW91c2UuaXNEb3duKSB7XG4gICAgICAgIHRoaXMuYWRkTWlzc2luZ0xpbmVzKCk7XG4gICAgICAgIHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlICs9IGRlbHRhO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52YWx1ZSA9IChNYXRoLnJvdW5kKCh0aGlzLmhvcml6b250YWxMaW5lTW92ZSAvIHRoaXMuc3BhY2VpbmcpICogMTAwKSAvIDEwMCk7XG4gICAgICAgIHRoaXMucmVuZGVyaW5nVmFsdWUgPSAoTWF0aC5yb3VuZCgodGhpcy5ob3Jpem9udGFsTGluZU1vdmUgLyB0aGlzLnNwYWNlaW5nKSAqIDEwMCkgLyAxMDApLnRvRml4ZWQoMik7XG5cblxuICAgICAgICBpZihkZWx0YSA+IDApe1xuICAgICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoMSk7XG4gICAgICAgIH1lbHNlIGlmKGRlbHRhIDwgMCl7XG4gICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCgtMSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICB9XG4gICAgICB0aGlzLm1vdXNlLnN5bmNQb3NpdGlvbihldnQpO1xuICAgIH07XG5cbiAgICB0aGlzLmNhbnZhcy5vbnRvdWNobW92ZSA9IChldnQpID0+IHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBjb25zdCBkZWx0YSA9ICh0aGlzLm1vdXNlLmxhc3RYIC0gdGhpcy5tb3VzZS54KTtcblxuICAgICAgaWYgKHRoaXMubW91c2UuaXNEb3duKSB7XG4gICAgICAgIHRoaXMuYWRkTWlzc2luZ0xpbmVzKCk7XG4gICAgICAgIHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlICs9IGRlbHRhO1xuICAgICAgICBcbiAgICAgICAgdGhpcy52YWx1ZSA9IChNYXRoLnJvdW5kKCh0aGlzLmhvcml6b250YWxMaW5lTW92ZSAvIHRoaXMuc3BhY2VpbmcpICogMTAwKSAvIDEwMCk7XG4gICAgICAgIHRoaXMucmVuZGVyaW5nVmFsdWUgPSAoTWF0aC5yb3VuZCgodGhpcy5ob3Jpem9udGFsTGluZU1vdmUgLyB0aGlzLnNwYWNlaW5nKSAqIDEwMCkgLyAxMDApLnRvRml4ZWQoMik7XG5cbiAgICAgICAgaWYoZGVsdGEgPiAwKXtcbiAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KDEpO1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KC0xKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5tb3VzZS5zeW5jVG91Y2hQb3NpdGlvbihldnQpO1xuICAgIH07XG4gIH1cblxuXG4gIGFkZE1pc3NpbmdMaW5lcygpIHtcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlKVxuICAgLy8gY29uc29sZS5sb2codGhpcy5ob3Jpem9udGFsTGluZXMuZmlsdGVyKCB4PT4geC54IC0gdGhpcy5ob3Jpem9udGFsTGluZU1vdmUgPiB0aGlzLmNhbnZhcy53aWR0aCkubGVuZ3RoKTtcblxuXG4gICAgbGV0IG9mZnNldFJpZ2h0ID0gdGhpcy5ob3Jpem9udGFsTGluZXMuZmlsdGVyKCB4PT4geC54IC0gdGhpcy5ob3Jpem9udGFsTGluZU1vdmUgPiB0aGlzLmNhbnZhcy53aWR0aCkubGVuZ3RoO1xuICAgIGxldCBvZmZzZXRMZWZ0ID0gdGhpcy5ob3Jpem9udGFsTGluZXMuZmlsdGVyKCB4PT4geC54IC0gdGhpcy5ob3Jpem9udGFsTGluZU1vdmUgPCAwKS5sZW5ndGg7XG5cbiAgICAvL2NvbnNvbGUubG9nKG9mZnNldFJpZ2h0KTtcbiAgICB3aGlsZSAob2Zmc2V0UmlnaHQgPD0gMSl7XG4gICAgICBjb25zdCBsYXN0TGluZSA9IHRoaXMuaG9yaXpvbnRhbExpbmVzW3RoaXMuaG9yaXpvbnRhbExpbmVzLmxlbmd0aCAtIDFdO1xuICAgICAgdGhpcy5ob3Jpem9udGFsTGluZXMucHVzaChuZXcgSG9yaXpvbnRhbExpbmUodGhpcy5saW5lVGhpa25lc3MsIDEwMCwgbGFzdExpbmUueCArIHRoaXMuc3BhY2VpbmcsIHRoaXMuaG9yaXpvbnRhbExpbmVzTWFyZ2luVG9wLCBudWxsLCB0aGlzKSk7XG4gICAgICB0aGlzLmhvcml6b250YWxMaW5lcy5zaGlmdCgpOyBcbiAgICAgIG9mZnNldFJpZ2h0ID0gdGhpcy5ob3Jpem9udGFsTGluZXMuZmlsdGVyKCB4PT4geC54IC0gdGhpcy5ob3Jpem9udGFsTGluZU1vdmUgPiB0aGlzLmNhbnZhcy53aWR0aCkubGVuZ3RoO1xuICAgICAgLy9jb25zb2xlLmxvZyhvZmZzZXRSaWdodCk7XG4gICAgfTtcblxuICAgIHdoaWxlIChvZmZzZXRMZWZ0IDw9IDEpe1xuICAgICAgY29uc3QgbGFzdExpbmUgPSB0aGlzLmhvcml6b250YWxMaW5lc1swXTtcbiAgICAgIHRoaXMuaG9yaXpvbnRhbExpbmVzLnVuc2hpZnQobmV3IEhvcml6b250YWxMaW5lKHRoaXMubGluZVRoaWtuZXNzLCAxMDAsIGxhc3RMaW5lLnggLXRoaXMuc3BhY2VpbmcsIHRoaXMuaG9yaXpvbnRhbExpbmVzTWFyZ2luVG9wLCBudWxsLCB0aGlzKSk7XG4gICAgICB0aGlzLmhvcml6b250YWxMaW5lcy5wb3AoKTsgXG4gICAgICBvZmZzZXRMZWZ0ID0gdGhpcy5ob3Jpem9udGFsTGluZXMuZmlsdGVyKCB4PT4geC54IC0gdGhpcy5ob3Jpem9udGFsTGluZU1vdmUgPCAwKS5sZW5ndGg7XG4gICAgIC8vIGNvbnNvbGUubG9nKG9mZnNldFJpZ2h0KTtcbiAgICB9O1xuICBcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICByZXNpemUoKSB7XG4gICAgLy9jb25zb2xlLmxvZyhcInJlc2l6ZSBzbGlkZXIgaW5maW5pdGVcIilcbiAgICBjb25zdCBwYXJlbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5jYW52YXMucGFyZW50RWxlbWVudDtcbiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHBhcmVudC5jbGllbnRXaWR0aDtcbiAgICAvLyB0aGlzLmNhbnZhcy5oZWlnaHQgPSBwYXJlbnQuY2xpZW50SGVpZ2h0O1xuICAgIHRoaXMuaG9yaXpvbnRhbExpbmVzID0gW107XG4gICAgdGhpcy5ob3Jpem9udGFsTGluZU1vdmU9MDtcbiAgICB0aGlzLmFkZEhvcml6b250YWxMaW5lcygpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICB0aGlzLmN0eC5hcmModGhpcy5jYW52YXMud2lkdGggLyAyLCAxMCwgNSwgMCwgMiAqIE1hdGguUEkpO1xuICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IHRoaXMubGluZUNvbG9yO1xuICAgIHRoaXMuY3R4LmZpbGwoKTtcbiAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcblxuICAgIHRoaXMuaG9yaXpvbnRhbExpbmVzLmZvckVhY2goeCA9PiB7XG4gICAgICB4LnJlbmRlcigpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkSG9yaXpvbnRhbExpbmVzKCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9ICgodGhpcy5jYW52YXMud2lkdGggLyAyKSAvICh0aGlzLmxpbmVUaGlrbmVzcyArIHRoaXMuc3BhY2VpbmcpKSArIDI7IGkrKykge1xuICAgICAgdGhpcy5ob3Jpem9udGFsTGluZXMucHVzaChcbiAgICAgICAgbmV3IEhvcml6b250YWxMaW5lKHRoaXMubGluZVRoaWtuZXNzLFxuICAgICAgICAgIDEwMCxcbiAgICAgICAgICAodGhpcy5jYW52YXMud2lkdGggLyAyKSArIChpICogdGhpcy5zcGFjZWluZyksXG4gICAgICAgICAgdGhpcy5ob3Jpem9udGFsTGluZXNNYXJnaW5Ub3AsXG4gICAgICAgICAgaSxcbiAgICAgICAgICB0aGlzKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA+PSAtKCh0aGlzLmNhbnZhcy53aWR0aCAvIDIpIC8gKHRoaXMubGluZVRoaWtuZXNzICsgdGhpcy5zcGFjZWluZykpIC0gMjsgaS0tKSB7XG4gICAgICB0aGlzLmhvcml6b250YWxMaW5lcy5wdXNoKFxuICAgICAgICBuZXcgSG9yaXpvbnRhbExpbmUoXG4gICAgICAgICAgdGhpcy5saW5lVGhpa25lc3MsXG4gICAgICAgICAgMTAwLFxuICAgICAgICAgICh0aGlzLmNhbnZhcy53aWR0aCAvIDIpIC0gKChpICogKC0xKSkgKiB0aGlzLnNwYWNlaW5nKSxcbiAgICAgICAgICB0aGlzLmhvcml6b250YWxMaW5lc01hcmdpblRvcCwgaSxcbiAgICAgICAgICB0aGlzKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXNldFZhbHVlKCkge1xuICAgIHRoaXMudmFsdWUgPSAwO1xuICAgIHRoaXMuaG9yaXpvbnRhbExpbmVNb3ZlID0gMDtcbiAgICB0aGlzLnJlbmRlcmluZ1ZhbHVlID0gJzAuMDAnO1xuICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gIH1cbn1cbiJdfQ==