UNPKG

ng-devui

Version:

DevUI components based on Angular

167 lines 26.6 kB
import { DOCUMENT } from '@angular/common'; import { Directive, ElementRef, EventEmitter, HostListener, Inject, Input, NgZone, Output, Renderer2 } from '@angular/core'; import { fromEvent } from 'rxjs'; import * as i0 from "@angular/core"; export class ResizeHandleDirective { constructor(element, renderer2, zone, doc) { this.renderer2 = renderer2; this.zone = zone; this.doc = doc; this.resizeStartEvent = new EventEmitter(); this.resizingEvent = new EventEmitter(); this.resizeEndEvent = new EventEmitter(); this.collapseEvent = new EventEmitter(); this.preventRemoveHandle = false; this.bindMousemove = (e) => { this.move(e); }; this.element = element.nativeElement; this.document = this.doc; } onMouseEnter(event) { if (!this.resizeHandle) { this.resizeHandle = this.renderer2.createElement('div'); this.renderer2.appendChild(this.containerElement, this.resizeHandle); this.renderer2.addClass(this.resizeHandle, 'resize-handle'); const left = this.element.getBoundingClientRect().right - this.containerElement.getBoundingClientRect().left; this.renderer2.setStyle(this.resizeHandle, 'left', left + 'px'); this.resizeHandleEnter = this.renderer2.listen(this.resizeHandle, 'mouseenter', this.onHandleMouseEnter.bind(this)); this.resizeHandleLeave = this.renderer2.listen(this.resizeHandle, 'mouseleave', this.onHandleMouseLeave.bind(this)); this.resizeHandleClick = this.renderer2.listen(this.resizeHandle, 'mousedown', this.onMousedown.bind(this)); } } onMouseLeave(event) { setTimeout(() => { if (!this.preventRemoveHandle) { if (this.resizeHandle) { this.renderer2.removeChild(this.containerElement, this.resizeHandle); this.resizeHandle = null; } if (this.resizeHandleClick) { this.resizeHandleClick(); } } }, 100); } onHandleMouseEnter() { this.preventRemoveHandle = true; } onHandleMouseLeave() { this.preventRemoveHandle = false; if (this.resizeHandle) { this.renderer2.removeChild(this.containerElement, this.resizeHandle); this.resizeHandle = null; } if (this.resizeHandleClick) { this.resizeHandleClick(); } } onMousedown(event) { this.moveCount = 0; this.resizeStartEvent.emit(event); // emit begin resize event this.initialWidth = this.element.clientWidth; const initialOffset = this.element.getBoundingClientRect().left - this.containerElement.getBoundingClientRect().left; this.mouseDownScreenX = event.clientX; event.stopPropagation(); // create resizeOverlay this.resizeOverlay = this.renderer2.createElement('div'); this.renderer2.appendChild(this.containerElement, this.resizeOverlay); this.renderer2.addClass(this.resizeOverlay, 'resize-overlay'); this.renderer2.listen(this.resizeOverlay, 'click', (clickEvent) => clickEvent.stopPropagation()); const resizeBar = this.renderer2.createElement('div'); this.renderer2.addClass(resizeBar, 'resize-bar'); this.resizeBarRefElement = resizeBar; this.renderer2.appendChild(this.containerElement, resizeBar); this.renderer2.setStyle(this.resizeBarRefElement, 'display', 'block'); this.renderer2.setStyle(this.resizeBarRefElement, 'left', initialOffset + this.initialWidth + 'px'); const mouseup = fromEvent(document, 'mouseup'); this.mouseUpSubscription = mouseup.subscribe((ev) => this.onMouseup(ev)); this.zone.runOutsideAngular(() => { this.document.addEventListener('mousemove', this.bindMousemove); }); } onMouseup(event) { const movementX = event.clientX - this.mouseDownScreenX; const newWidth = this.initialWidth + movementX; const finalWidth = this.getFinalWidth(newWidth); // destroy overlay this.renderer2.removeChild(this.element, this.resizeOverlay); this.renderer2.removeChild(this.containerElement, this.resizeBarRefElement); this.resizeEndEvent.emit({ width: finalWidth }); if (this.mouseUpSubscription && !this.mouseUpSubscription.closed) { this._destroySubscription(); } this.document.removeEventListener('mousemove', this.bindMousemove); } move(event) { this.moveCount++; if (this.moveCount % 2 === 0) { return; } const movementX = event.clientX - this.mouseDownScreenX; const newWidth = this.initialWidth + movementX; const finalWidth = this.getFinalWidth(newWidth); this.renderer2.setStyle(this.resizeBarRefElement, 'left', `${finalWidth + this.element.getBoundingClientRect().left - this.containerElement.getBoundingClientRect().left}px`); this.resizingEvent.emit({ width: finalWidth }); } getFinalWidth(newWidth) { const minWidth = this.handleWidth(this.minWidth); const maxWidth = this.handleWidth(this.maxWidth); const overMinWidth = !this.minWidth || newWidth >= minWidth; const underMaxWidth = !this.maxWidth || newWidth <= maxWidth; const result = !underMaxWidth ? maxWidth : newWidth; const finalWidth = !overMinWidth ? minWidth : result; return finalWidth; } handleWidth(width) { if (!width) { return; } if (typeof width === 'number') { return width; } if (width.includes('%')) { const tableWidth = this.containerElement.clientWidth; return (tableWidth * parseInt(width, 10)) / 100; } return parseInt(width.replace(/[^\d]+/, ''), 10); } _destroySubscription() { if (this.mouseUpSubscription) { this.mouseUpSubscription.unsubscribe(); this.mouseUpSubscription = undefined; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResizeHandleDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ResizeHandleDirective, selector: "[dResizeHandle]", inputs: { containerElement: "containerElement", minWidth: "minWidth", maxWidth: "maxWidth" }, outputs: { resizeStartEvent: "resizeStartEvent", resizingEvent: "resizingEvent", resizeEndEvent: "resizeEndEvent", collapseEvent: "collapseEvent" }, host: { listeners: { "mouseenter": "onMouseEnter($event)", "mouseleave": "onMouseLeave($event)" } }, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResizeHandleDirective, decorators: [{ type: Directive, args: [{ selector: '[dResizeHandle]', }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }], propDecorators: { containerElement: [{ type: Input }], minWidth: [{ type: Input }], maxWidth: [{ type: Input }], resizeStartEvent: [{ type: Output }], resizingEvent: [{ type: Output }], resizeEndEvent: [{ type: Output }], collapseEvent: [{ type: Output }], onMouseEnter: [{ type: HostListener, args: ['mouseenter', ['$event']] }], onMouseLeave: [{ type: HostListener, args: ['mouseleave', ['$event']] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLWhhbmRsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9kZXZ1aS9nYW50dC9yZXNpemUtaGFuZGxlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUsvQyxNQUFNLE9BQU8scUJBQXFCO0lBeUJoQyxZQUFZLE9BQW1CLEVBQVUsU0FBb0IsRUFBVSxJQUFZLEVBQTRCLEdBQVE7UUFBOUUsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUFVLFNBQUksR0FBSixJQUFJLENBQVE7UUFBNEIsUUFBRyxHQUFILEdBQUcsQ0FBSztRQXJCN0cscUJBQWdCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDOUQsa0JBQWEsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMzRCxtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRTVELGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFjckUsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBdUc1QixrQkFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsQ0FBQztRQXJHQSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQzNCLENBQUM7SUFHRCxZQUFZLENBQUMs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QVMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQzsrR0FsTFUscUJBQXFCLDJGQXlCNkQsUUFBUTttR0F6QjFGLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFIakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2lCQUM1Qjs7MEJBMEJ1RixNQUFNOzJCQUFDLFFBQVE7eUNBeEI1RixnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkF1QlAsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFldEMsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgTmdab25lLCBPdXRwdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZFJlc2l6ZUhhbmRsZV0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVzaXplSGFuZGxlRGlyZWN0aXZlIHtcclxuICBASW5wdXQoKSBjb250YWluZXJFbGVtZW50OiBFbGVtZW50O1xyXG4gIEBJbnB1dCgpIG1pbldpZHRoOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWF4V2lkdGg6IHN0cmluZztcclxuICBAT3V0cHV0KCkgcmVzaXplU3RhcnRFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcmVzaXppbmdFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcmVzaXplRW5kRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBjb2xsYXBzZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcclxuICBtb3ZlQ291bnQ6IG51bWJlcjtcclxuICBpbml0aWFsV2lkdGg6IG51bWJlcjtcclxuICB0b3RhbFdpZHRoOiBudW1iZXI7XHJcbiAgbW91c2VEb3duU2NyZWVuWDogbnVtYmVyO1xyXG4gIHJlc2l6ZUhhbmRsZTogSFRNTEVsZW1lbnQ7XHJcbiAgcmVzaXplT3ZlcmxheTogSFRNTEVsZW1lbnQ7XHJcbiAgcmVzaXplQmFyUmVmRWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcbiAgbW91c2VVcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHJlc2l6ZUhhbmRsZUVudGVyOiBhbnk7XHJcbiAgcmVzaXplSGFuZGxlTGVhdmU6IGFueTtcclxuICByZXNpemVIYW5kbGVDbGljazogYW55O1xyXG4gIHByZXZlbnRSZW1vdmVIYW5kbGUgPSBmYWxzZTtcclxuICBkb2N1bWVudDogRG9jdW1lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjIsIHByaXZhdGUgem9uZTogTmdab25lLCBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvYzogYW55KSB7XHJcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLmRvY3VtZW50ID0gdGhpcy5kb2M7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJywgWyckZXZlbnQnXSlcclxuICBvbk1vdXNlRW50ZXIoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5yZXNpemVIYW5kbGUpIHtcclxuICAgICAgdGhpcy5yZXNpemVIYW5kbGUgPSB0aGlzLnJlbmRlcmVyMi5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgdGhpcy5yZW5kZXJlcjIuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXJFbGVtZW50LCB0aGlzLnJlc2l6ZUhhbmRsZSk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIyLmFkZENsYXNzKHRoaXMucmVzaXplSGFuZGxlLCAncmVzaXplLWhhbmRsZScpO1xyXG4gICAgICBjb25zdCBsZWZ0ID0gdGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0IC0gdGhpcy5jb250YWluZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIyLnNldFN0eWxlKHRoaXMucmVzaXplSGFuZGxlLCAnbGVmdCcsIGxlZnQgKyAncHgnKTtcclxuICAgICAgdGhpcy5yZXNpemVIYW5kbGVFbnRlciA9IHRoaXMucmVuZGVyZXIyLmxpc3Rlbih0aGlzLnJlc2l6ZUhhbmRsZSwgJ21vdXNlZW50ZXInLCB0aGlzLm9uSGFuZGxlTW91c2VFbnRlci5iaW5kKHRoaXMpKTtcclxuICAgICAgdGhpcy5yZXNpemVIYW5kbGVMZWF2ZSA9IHRoaXMucmVuZGVyZXIyLmxpc3Rlbih0aGlzLnJlc2l6ZUhhbmRsZSwgJ21vdXNlbGVhdmUnLCB0aGlzLm9uSGFuZGxlTW91c2VMZWF2ZS5iaW5kKHRoaXMpKTtcclxuICAgICAgdGhpcy5yZXNpemVIYW5kbGVDbGljayA9IHRoaXMucmVuZGVyZXIyLmxpc3Rlbih0aGlzLnJlc2l6ZUhhbmRsZSwgJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZWRvd24uYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJywgWyckZXZlbnQnXSlcclxuICBvbk1vdXNlTGVhdmUoZXZlbnQ6IGFueSkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy5wcmV2ZW50UmVtb3ZlSGFuZGxlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzaXplSGFuZGxlKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lckVsZW1lbnQsIHRoaXMucmVzaXplSGFuZGxlKTtcclxuICAgICAgICAgIHRoaXMucmVzaXplSGFuZGxlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucmVzaXplSGFuZGxlQ2xpY2spIHtcclxuICAgICAgICAgIHRoaXMucmVzaXplSGFuZGxlQ2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uSGFuZGxlTW91c2VFbnRlcigpIHtcclxuICAgIHRoaXMucHJldmVudFJlbW92ZUhhbmRsZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uSGFuZGxlTW91c2VMZWF2ZSgpIHtcclxuICAgIHRoaXMucHJldmVudFJlbW92ZUhhbmRsZSA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMucmVzaXplSGFuZGxlKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIyLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyRWxlbWVudCwgdGhpcy5yZXNpemVIYW5kbGUpO1xyXG4gICAgICB0aGlzLnJlc2l6ZUhhbmRsZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yZXNpemVIYW5kbGVDbGljaykge1xyXG4gICAgICB0aGlzLnJlc2l6ZUhhbmRsZUNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlZG93bihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5tb3ZlQ291bnQgPSAwO1xyXG5cclxuICAgIHRoaXMucmVzaXplU3RhcnRFdmVudC5lbWl0KGV2ZW50KTsgLy8gZW1pdCBiZWdpbiByZXNpemUgZXZlbnRcclxuXHJcbiAgICB0aGlzLmluaXRpYWxXaWR0aCA9IHRoaXMuZWxlbWVudC5jbGllbnRXaWR0aDtcclxuICAgIGNvbnN0IGluaXRpYWxPZmZzZXQgPSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHRoaXMuY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xyXG4gICAgdGhpcy5tb3VzZURvd25TY3JlZW5YID0gZXZlbnQuY2xpZW50WDtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIC8vIGNyZWF0ZSByZXNpemVPdmVybGF5XHJcbiAgICB0aGlzLnJlc2l6ZU92ZXJsYXkgPSB0aGlzLnJlbmRlcmVyMi5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHRoaXMucmVuZGVyZXIyLmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyRWxlbWVudCwgdGhpcy5yZXNpemVPdmVybGF5KTtcclxuICAgIHRoaXMucmVuZGVyZXIyLmFkZENsYXNzKHRoaXMucmVzaXplT3ZlcmxheSwgJ3Jlc2l6ZS1vdmVybGF5Jyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyMi5saXN0ZW4odGhpcy5yZXNpemVPdmVybGF5LCAnY2xpY2snLCAoY2xpY2tFdmVudDogRXZlbnQpID0+IGNsaWNrRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkpO1xyXG5cclxuICAgIGNvbnN0IHJlc2l6ZUJhciA9IHRoaXMucmVuZGVyZXIyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgdGhpcy5yZW5kZXJlcjIuYWRkQ2xhc3MocmVzaXplQmFyLCAncmVzaXplLWJhcicpO1xyXG4gICAgdGhpcy5yZXNpemVCYXJSZWZFbGVtZW50ID0gcmVzaXplQmFyO1xyXG4gICAgdGhpcy5yZW5kZXJlcjIuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXJFbGVtZW50LCByZXNpemVCYXIpO1xyXG4gICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5yZXNpemVCYXJSZWZFbGVtZW50LCAnZGlzcGxheScsICdibG9jaycpO1xyXG4gICAgdGhpcy5yZW5kZXJlcjIuc2V0U3R5bGUodGhpcy5yZXNpemVCYXJSZWZFbGVtZW50LCAnbGVmdCcsIGluaXRpYWxPZmZzZXQgKyB0aGlzLmluaXRpYWxXaWR0aCArICdweCcpO1xyXG5cclxuICAgIGNvbnN0IG1vdXNldXAgPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdtb3VzZXVwJyk7XHJcbiAgICB0aGlzLm1vdXNlVXBTdWJzY3JpcHRpb24gPSBtb3VzZXVwLnN1YnNjcmliZSgoZXY6IE1vdXNlRXZlbnQpID0+IHRoaXMub25Nb3VzZXVwKGV2KSk7XHJcblxyXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmJpbmRNb3VzZW1vdmUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNldXAoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1vdmVtZW50WCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLm1vdXNlRG93blNjcmVlblg7XHJcbiAgICBjb25zdCBuZXdXaWR0aCA9IHRoaXMuaW5pdGlhbFdpZHRoICsgbW92ZW1lbnRYO1xyXG5cclxuICAgIGNvbnN0IGZpbmFsV2lkdGggPSB0aGlzLmdldEZpbmFsV2lkdGgobmV3V2lkdGgpO1xyXG5cclxuICAgIC8vIGRlc3Ryb3kgb3ZlcmxheVxyXG4gICAgdGhpcy5yZW5kZXJlcjIucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50LCB0aGlzLnJlc2l6ZU92ZXJsYXkpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIyLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyRWxlbWVudCwgdGhpcy5yZXNpemVCYXJSZWZFbGVtZW50KTtcclxuXHJcbiAgICB0aGlzLnJlc2l6ZUVuZEV2ZW50LmVtaXQoeyB3aWR0aDogZmluYWxXaWR0aCB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5tb3VzZVVwU3Vic2NyaXB0aW9uICYmICF0aGlzLm1vdXNlVXBTdWJzY3JpcHRpb24uY2xvc2VkKSB7XHJcbiAgICAgIHRoaXMuX2Rlc3Ryb3lTdWJzY3JpcHRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuYmluZE1vdXNlbW92ZSk7XHJcbiAgfVxyXG5cclxuICBiaW5kTW91c2Vtb3ZlID0gKGUpID0+IHtcclxuICAgIHRoaXMubW92ZShlKTtcclxuICB9O1xyXG5cclxuICBtb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLm1vdmVDb3VudCsrO1xyXG4gICAgaWYgKHRoaXMubW92ZUNvdW50ICUgMiA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbW92ZW1lbnRYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMubW91c2VEb3duU2NyZWVuWDtcclxuICAgIGNvbnN0IG5ld1dpZHRoID0gdGhpcy5pbml0aWFsV2lkdGggKyBtb3ZlbWVudFg7XHJcblxyXG4gICAgY29uc3QgZmluYWxXaWR0aCA9IHRoaXMuZ2V0RmluYWxXaWR0aChuZXdXaWR0aCk7XHJcbiAgICB0aGlzLnJlbmRlcmVyMi5zZXRTdHlsZShcclxuICAgICAgdGhpcy5yZXNpemVCYXJSZWZFbGVtZW50LFxyXG4gICAgICAnbGVmdCcsXHJcbiAgICAgIGAke2ZpbmFsV2lkdGggKyB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIHRoaXMuY29udGFpbmVyRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fXB4YFxyXG4gICAgKTtcclxuICAgIHRoaXMucmVzaXppbmdFdmVudC5lbWl0KHsgd2lkdGg6IGZpbmFsV2lkdGggfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZpbmFsV2lkdGgobmV3V2lkdGg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBjb25zdCBtaW5XaWR0aCA9IHRoaXMuaGFuZGxlV2lkdGgodGhpcy5taW5XaWR0aCk7XHJcbiAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuaGFuZGxlV2lkdGgodGhpcy5tYXhXaWR0aCk7XHJcblxyXG4gICAgY29uc3Qgb3Zlck1pbldpZHRoID0gIXRoaXMubWluV2lkdGggfHwgbmV3V2lkdGggPj0gbWluV2lkdGg7XHJcbiAgICBjb25zdCB1bmRlck1heFdpZHRoID0gIXRoaXMubWF4V2lkdGggfHwgbmV3V2lkdGggPD0gbWF4V2lkdGg7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gIXVuZGVyTWF4V2lkdGggPyBtYXhXaWR0aCA6IG5ld1dpZHRoO1xyXG4gICAgY29uc3QgZmluYWxXaWR0aCA9ICFvdmVyTWluV2lkdGggPyBtaW5XaWR0aCA6IHJlc3VsdDtcclxuICAgIHJldHVybiBmaW5hbFdpZHRoO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVXaWR0aCh3aWR0aDogc3RyaW5nIHwgbnVtYmVyKSB7XHJcbiAgICBpZiAoIXdpZHRoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiB3aWR0aDtcclxuICAgIH1cclxuICAgIGlmICh3aWR0aC5pbmNsdWRlcygnJScpKSB7XHJcbiAgICAgIGNvbnN0IHRhYmxlV2lkdGggPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgICAgIHJldHVybiAodGFibGVXaWR0aCAqIHBhcnNlSW50KHdpZHRoLCAxMCkpIC8gMTAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhcnNlSW50KHdpZHRoLnJlcGxhY2UoL1teXFxkXSsvLCAnJyksIDEwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Rlc3Ryb3lTdWJzY3JpcHRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5tb3VzZVVwU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMubW91c2VVcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB0aGlzLm1vdXNlVXBTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==