ng-devui
Version:
DevUI components based on Angular
167 lines • 26.6 kB
JavaScript
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==