UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

158 lines 21.8 kB
import { __decorate, __metadata } from "tslib"; import { Directive, Input, OnDestroy, ElementRef, Renderer2, NgZone } from '@angular/core'; import { IgxColumnComponent } from '../columns/column.component'; import { DropPosition, IgxColumnMovingService } from './moving.service'; import { Subject, interval } from 'rxjs'; import { IgxColumnMovingDragDirective } from './moving.drag.directive'; import { takeUntil } from 'rxjs/operators'; import { IgxDropDirective } from '../../directives/drag-drop/drag-drop.directive'; import { IgxGridForOfDirective } from '../../directives/for-of/for_of.directive'; let IgxColumnMovingDropDirective = class IgxColumnMovingDropDirective extends IgxDropDirective { constructor(elementRef, renderer, zone, cms) { super(elementRef, renderer, zone); this.elementRef = elementRef; this.renderer = renderer; this.zone = zone; this.cms = cms; this._dropIndicator = null; this._lastDropIndicator = null; this._dragLeave = new Subject(); this._dropIndicatorClass = 'igx-grid__th-drop-indicator--active'; } set data(val) { if (val instanceof IgxColumnComponent) { this._column = val; } if (val instanceof IgxGridForOfDirective) { this._hVirtDir = val; } } get column() { return this._column; } get isDropTarget() { return this._column && this._column.grid.hasMovableColumns && this.cms.column.movable && ((!this._column.pinned && this.cms.column.disablePinning) || !this.cms.column.disablePinning); } get horizontalScroll() { if (this._hVirtDir) { return this._hVirtDir; } } ngOnDestroy() { this._dragLeave.next(true); this._dragLeave.complete(); } onDragOver(event) { const drag = event.detail.owner; if (!(drag instanceof IgxColumnMovingDragDirective)) { return; } if (this.isDropTarget && this.cms.column !== this.column && this.cms.column.level === this.column.level && this.cms.column.parent === this.column.parent) { if (this._lastDropIndicator) { this.renderer.removeClass(this._dropIndicator, this._dropIndicatorClass); } const clientRect = this.elementRef.nativeElement.getBoundingClientRect(); const pos = clientRect.left + clientRect.width / 2; const parent = this.elementRef.nativeElement.parentElement; if (event.detail.pageX < pos) { this._dropPos = DropPosition.BeforeDropTarget; this._lastDropIndicator = this._dropIndicator = parent.firstElementChild; } else { this._dropPos = DropPosition.AfterDropTarget; this._lastDropIndicator = this._dropIndicator = parent.lastElementChild; } if (this.cms.icon.innerText !== 'block') { this.renderer.addClass(this._dropIndicator, this._dropIndicatorClass); } } } onDragEnter(event) { const drag = event.detail.owner; if (!(drag instanceof IgxColumnMovingDragDirective)) { return; } if (this.column && this.cms.column.grid.id !== this.column.grid.id) { this.cms.icon.innerText = 'block'; return; } if (this.isDropTarget && this.cms.column !== this.column && this.cms.column.level === this.column.level && this.cms.column.parent === this.column.parent) { if (!this.column.pinned || (this.column.pinned && this.cms.column.pinned)) { this.cms.icon.innerText = 'swap_horiz'; } this.cms.icon.innerText = 'lock'; } else { this.cms.icon.innerText = 'block'; } if (this.horizontalScroll) { this.cms.icon.innerText = event.target.id === 'right' ? 'arrow_forward' : 'arrow_back'; interval(100).pipe(takeUntil(this._dragLeave)).subscribe(() => { this.cms.column.grid.wheelHandler(); event.target.id === 'right' ? this.horizontalScroll.scrollPosition += 15 : this.horizontalScroll.scrollPosition -= 15; }); } } onDragLeave(event) { const drag = event.detail.owner; if (!(drag instanceof IgxColumnMovingDragDirective)) { return; } this.cms.icon.innerText = 'block'; if (this._dropIndicator) { this.renderer.removeClass(this._dropIndicator, this._dropIndicatorClass); } if (this.horizontalScroll) { this._dragLeave.next(true); } } onDragDrop(event) { event.preventDefault(); const drag = event.detail.owner; if (!(drag instanceof IgxColumnMovingDragDirective)) { return; } if (this.column && (this.cms.column.grid.id !== this.column.grid.id)) { return; } if (this.horizontalScroll) { this._dragLeave.next(true); } if (this.isDropTarget) { const args = { source: this.cms.column, target: this.column }; this.column.grid.moveColumn(this.cms.column, this.column, this._dropPos); this.column.grid.draggedColumn = null; this.column.grid.cdr.detectChanges(); } } }; IgxColumnMovingDropDirective.ctorParameters = () => [ { type: ElementRef }, { type: Renderer2 }, { type: NgZone }, { type: IgxColumnMovingService } ]; __decorate([ Input('igxColumnMovingDrop'), __metadata("design:type", Object), __metadata("design:paramtypes", [Object]) ], IgxColumnMovingDropDirective.prototype, "data", null); IgxColumnMovingDropDirective = __decorate([ Directive({ selector: '[igxColumnMovingDrop]' }), __metadata("design:paramtypes", [ElementRef, Renderer2, NgZone, IgxColumnMovingService]) ], IgxColumnMovingDropDirective); export { IgxColumnMovingDropDirective }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92aW5nLmRyb3AuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9tb3ZpbmcvbW92aW5nLmRyb3AuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNsRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQU1qRixJQUFhLDRCQUE0QixHQUF6QyxNQUFhLDRCQUE2QixTQUFRLGdCQUFnQjtJQW9DOUQsWUFBb0IsVUFBc0IsRUFBVSxRQUFtQixFQUFVLElBQVksRUFBVSxHQUEyQjtRQUM5SCxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQURsQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLFNBQUksR0FBSixJQUFJLENBQVE7UUFBVSxRQUFHLEdBQUgsR0FBRyxDQUF3QjtRQVAxSCxtQkFBYyxHQUFRLElBQUksQ0FBQztRQUMzQix1QkFBa0IsR0FBUSxJQUFJLENBQUM7UUFHL0IsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDcEMsd0JBQW1CLEdBQUcscUNBQXFDLENBQUM7SUFJcEUsQ0FBQztJQW5DRCxJQUFJLElBQUksQ0FBQyxHQUFRO1FBQ2IsSUFBSSxHQUFHLFlBQVksa0JBQWtCLEVBQUU7WUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7U0FDdEI7UUFFRCxJQUFJLEdBQUcsWUFBWSxxQkFBcUIsRUFBRTtZQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztTQUN4QjtJQUNMLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPO1lBQ2pGLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEcsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2hCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDekI7SUFDTCxDQUFDO0lBY00sV0FBVztRQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVNLFVBQVUsQ0FBQyxLQUFLO1FBQ25CLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSw0QkFBNEIsQ0FBQyxFQUFFO1lBQ2pELE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLFlBQVk7WUFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU07WUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSztZQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFFL0MsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDNUU7WUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7WUFFbkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO1lBQzNELElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFO2dCQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO2FBQzVFO2lCQUFNO2dCQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLGVBQWUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO2FBQzNFO1lBRUQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssT0FBTyxFQUFFO2dCQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2FBQ3pFO1NBQ0o7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQUs7UUFDcEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLDRCQUE0QixDQUFDLEVBQUU7WUFDakQsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ2hFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7WUFDbEMsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWTtZQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTTtZQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUUzQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDdkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQzthQUMxQztZQUVELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7U0FDcEM7YUFBTTtZQUNILElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7U0FDckM7UUFFRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUV2RixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUMxRCxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDdEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7WUFDbkQsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNULENBQUM7SUFFTSxXQUFXLENBQUMsS0FBSztRQUNwQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFlBQVksNEJBQTRCLENBQUMsRUFBRTtZQUNqRCxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBRWxDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQzVFO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDOUI7SUFDTCxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQUs7UUFDbkIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSw0QkFBNEIsQ0FBQyxFQUFFO1lBQ2pELE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDbEUsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDOUI7UUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEdBQUc7Z0JBQ1QsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTTtnQkFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2FBQ3RCLENBQUM7WUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFekUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztZQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDeEM7SUFDTCxDQUFDO0NBQ0osQ0FBQTs7WUExSG1DLFVBQVU7WUFBb0IsU0FBUztZQUFnQixNQUFNO1lBQWUsc0JBQXNCOztBQWpDbEk7SUFEQyxLQUFLLENBQUMscUJBQXFCLENBQUM7Ozt3REFTNUI7QUFYUSw0QkFBNEI7SUFIeEMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLHVCQUF1QjtLQUNwQyxDQUFDO3FDQXFDa0MsVUFBVSxFQUFvQixTQUFTLEVBQWdCLE1BQU0sRUFBZSxzQkFBc0I7R0FwQ3pILDRCQUE0QixDQThKeEM7U0E5SlksNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT25EZXN0cm95LCBFbGVtZW50UmVmLCBSZW5kZXJlcjIsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IERyb3BQb3NpdGlvbiwgSWd4Q29sdW1uTW92aW5nU2VydmljZSB9IGZyb20gJy4vbW92aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ViamVjdCwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElneENvbHVtbk1vdmluZ0RyYWdEaXJlY3RpdmUgfSBmcm9tICcuL21vdmluZy5kcmFnLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hEcm9wRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9kcmFnLWRyb3AvZHJhZy1kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hHcmlkRm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcblxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hDb2x1bW5Nb3ZpbmdEcm9wXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q29sdW1uTW92aW5nRHJvcERpcmVjdGl2ZSBleHRlbmRzIElneERyb3BEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgQElucHV0KCdpZ3hDb2x1bW5Nb3ZpbmdEcm9wJylcbiAgICBzZXQgZGF0YSh2YWw6IGFueSkge1xuICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgSWd4Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9jb2x1bW4gPSB2YWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsIGluc3RhbmNlb2YgSWd4R3JpZEZvck9mRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLl9oVmlydERpciA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBjb2x1bW4oKTogSWd4Q29sdW1uQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbjtcbiAgICB9XG5cbiAgICBnZXQgaXNEcm9wVGFyZ2V0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1uICYmIHRoaXMuX2NvbHVtbi5ncmlkLmhhc01vdmFibGVDb2x1bW5zICYmIHRoaXMuY21zLmNvbHVtbi5tb3ZhYmxlICYmXG4gICAgICAgICAgICAoKCF0aGlzLl9jb2x1bW4ucGlubmVkICYmIHRoaXMuY21zLmNvbHVtbi5kaXNhYmxlUGlubmluZykgfHwgIXRoaXMuY21zLmNvbHVtbi5kaXNhYmxlUGlubmluZyk7XG4gICAgfVxuXG4gICAgZ2V0IGhvcml6b250YWxTY3JvbGwoKTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuX2hWaXJ0RGlyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faFZpcnREaXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9kcm9wUG9zOiBEcm9wUG9zaXRpb247XG4gICAgcHJpdmF0ZSBfZHJvcEluZGljYXRvcjogYW55ID0gbnVsbDtcbiAgICBwcml2YXRlIF9sYXN0RHJvcEluZGljYXRvcjogYW55ID0gbnVsbDtcbiAgICBwcml2YXRlIF9jb2x1bW46IElneENvbHVtbkNvbXBvbmVudDtcbiAgICBwcml2YXRlIF9oVmlydERpcjogSWd4R3JpZEZvck9mRGlyZWN0aXZlPGFueT47XG4gICAgcHJpdmF0ZSBfZHJhZ0xlYXZlID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIF9kcm9wSW5kaWNhdG9yQ2xhc3MgPSAnaWd4LWdyaWRfX3RoLWRyb3AtaW5kaWNhdG9yLS1hY3RpdmUnO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgem9uZTogTmdab25lLCBwcml2YXRlIGNtczogSWd4Q29sdW1uTW92aW5nU2VydmljZSkge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmLCByZW5kZXJlciwgem9uZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9kcmFnTGVhdmUubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5fZHJhZ0xlYXZlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRHJhZ092ZXIoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZHJhZyA9IGV2ZW50LmRldGFpbC5vd25lcjtcbiAgICAgICAgaWYgKCEoZHJhZyBpbnN0YW5jZW9mIElneENvbHVtbk1vdmluZ0RyYWdEaXJlY3RpdmUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0Ryb3BUYXJnZXQgJiZcbiAgICAgICAgICAgIHRoaXMuY21zLmNvbHVtbiAhPT0gdGhpcy5jb2x1bW4gJiZcbiAgICAgICAgICAgIHRoaXMuY21zLmNvbHVtbi5sZXZlbCA9PT0gdGhpcy5jb2x1bW4ubGV2ZWwgJiZcbiAgICAgICAgICAgIHRoaXMuY21zLmNvbHVtbi5wYXJlbnQgPT09IHRoaXMuY29sdW1uLnBhcmVudCkge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fbGFzdERyb3BJbmRpY2F0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX2Ryb3BJbmRpY2F0b3IsIHRoaXMuX2Ryb3BJbmRpY2F0b3JDbGFzcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IGNsaWVudFJlY3QubGVmdCArIGNsaWVudFJlY3Qud2lkdGggLyAyO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRldGFpbC5wYWdlWCA8IHBvcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Ryb3BQb3MgPSBEcm9wUG9zaXRpb24uQmVmb3JlRHJvcFRhcmdldDtcbiAgICAgICAgICAgICAgICB0aGlzLl9sYXN0RHJvcEluZGljYXRvciA9IHRoaXMuX2Ryb3BJbmRpY2F0b3IgPSBwYXJlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Ryb3BQb3MgPSBEcm9wUG9zaXRpb24uQWZ0ZXJEcm9wVGFyZ2V0O1xuICAgICAgICAgICAgICAgIHRoaXMuX2xhc3REcm9wSW5kaWNhdG9yID0gdGhpcy5fZHJvcEluZGljYXRvciA9IHBhcmVudC5sYXN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5jbXMuaWNvbi5pbm5lclRleHQgIT09ICdibG9jaycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2Ryb3BJbmRpY2F0b3IsIHRoaXMuX2Ryb3BJbmRpY2F0b3JDbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25EcmFnRW50ZXIoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZHJhZyA9IGV2ZW50LmRldGFpbC5vd25lcjtcbiAgICAgICAgaWYgKCEoZHJhZyBpbnN0YW5jZW9mIElneENvbHVtbk1vdmluZ0RyYWdEaXJlY3RpdmUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb2x1bW4gJiYgdGhpcy5jbXMuY29sdW1uLmdyaWQuaWQgIT09IHRoaXMuY29sdW1uLmdyaWQuaWQpIHtcbiAgICAgICAgICAgIHRoaXMuY21zLmljb24uaW5uZXJUZXh0ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRHJvcFRhcmdldCAmJlxuICAgICAgICAgICAgdGhpcy5jbXMuY29sdW1uICE9PSB0aGlzLmNvbHVtbiAmJlxuICAgICAgICAgICAgdGhpcy5jbXMuY29sdW1uLmxldmVsID09PSB0aGlzLmNvbHVtbi5sZXZlbCAmJlxuICAgICAgICAgICAgdGhpcy5jbXMuY29sdW1uLnBhcmVudCA9PT0gdGhpcy5jb2x1bW4ucGFyZW50KSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29sdW1uLnBpbm5lZCB8fCAodGhpcy5jb2x1bW4ucGlubmVkICYmIHRoaXMuY21zLmNvbHVtbi5waW5uZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY21zLmljb24uaW5uZXJUZXh0ID0gJ3N3YXBfaG9yaXonO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuY21zLmljb24uaW5uZXJUZXh0ID0gJ2xvY2snO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNtcy5pY29uLmlubmVyVGV4dCA9ICdibG9jayc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmhvcml6b250YWxTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNtcy5pY29uLmlubmVyVGV4dCA9IGV2ZW50LnRhcmdldC5pZCA9PT0gJ3JpZ2h0JyA/ICdhcnJvd19mb3J3YXJkJyA6ICdhcnJvd19iYWNrJztcblxuICAgICAgICAgICAgICAgIGludGVydmFsKDEwMCkucGlwZSh0YWtlVW50aWwodGhpcy5fZHJhZ0xlYXZlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbXMuY29sdW1uLmdyaWQud2hlZWxIYW5kbGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldC5pZCA9PT0gJ3JpZ2h0JyA/IHRoaXMuaG9yaXpvbnRhbFNjcm9sbC5zY3JvbGxQb3NpdGlvbiArPSAxNSA6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvcml6b250YWxTY3JvbGwuc2Nyb2xsUG9zaXRpb24gLT0gMTU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uRHJhZ0xlYXZlKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGRyYWcgPSBldmVudC5kZXRhaWwub3duZXI7XG4gICAgICAgIGlmICghKGRyYWcgaW5zdGFuY2VvZiBJZ3hDb2x1bW5Nb3ZpbmdEcmFnRGlyZWN0aXZlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbXMuaWNvbi5pbm5lclRleHQgPSAnYmxvY2snO1xuXG4gICAgICAgIGlmICh0aGlzLl9kcm9wSW5kaWNhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX2Ryb3BJbmRpY2F0b3IsIHRoaXMuX2Ryb3BJbmRpY2F0b3JDbGFzcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ob3Jpem9udGFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLl9kcmFnTGVhdmUubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkRyYWdEcm9wKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGRyYWcgPSBldmVudC5kZXRhaWwub3duZXI7XG4gICAgICAgIGlmICghKGRyYWcgaW5zdGFuY2VvZiBJZ3hDb2x1bW5Nb3ZpbmdEcmFnRGlyZWN0aXZlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uICYmICh0aGlzLmNtcy5jb2x1bW4uZ3JpZC5pZCAhPT0gdGhpcy5jb2x1bW4uZ3JpZC5pZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhvcml6b250YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2RyYWdMZWF2ZS5uZXh0KHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEcm9wVGFyZ2V0KSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcy5jbXMuY29sdW1uLFxuICAgICAgICAgICAgICAgIHRhcmdldDogdGhpcy5jb2x1bW5cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuY29sdW1uLmdyaWQubW92ZUNvbHVtbih0aGlzLmNtcy5jb2x1bW4sIHRoaXMuY29sdW1uLCB0aGlzLl9kcm9wUG9zKTtcblxuICAgICAgICAgICAgdGhpcy5jb2x1bW4uZ3JpZC5kcmFnZ2VkQ29sdW1uID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==