UNPKG

@catull/igniteui-angular

Version:

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

185 lines 22.1 kB
import { __decorate, __metadata } from "tslib"; import { Directive, Input, OnDestroy, NgModule, TemplateRef } from '@angular/core'; import { IgxDragDirective } from '../directives/drag-drop/drag-drop.directive'; import { fromEvent } from 'rxjs'; const ghostBackgroundClass = 'igx-grid__tr--ghost'; const gridCellClass = 'igx-grid__td'; const rowSelectedClass = 'igx-grid__tr--selected'; const cellSelectedClass = 'igx-grid__td--selected'; const cellActiveClass = 'igx-grid__td--active'; /** * @hidden */ let IgxRowDragDirective = class IgxRowDragDirective extends IgxDragDirective { constructor() { super(...arguments); this._rowDragStarted = false; this.transitionEndEvent = (evt) => { if (this.ghostElement) { this.ghostElement.removeEventListener('transitionend', this.transitionEndEvent, false); } this.endDragging(); }; } set data(val) { this.row = val; } get data() { return this.row; } onPointerDown(event) { event.preventDefault(); this._rowDragStarted = false; this._removeOnDestroy = false; super.onPointerDown(event); } onPointerMove(event) { super.onPointerMove(event); if (this._dragStarted && !this._rowDragStarted) { this._rowDragStarted = true; const args = { dragDirective: this, dragData: this.row, cancel: false, owner: this.row.grid }; this.row.grid.onRowDragStart.emit(args); if (args.cancel) { this.ghostElement.parentNode.removeChild(this.ghostElement); this.ghostElement = null; this._dragStarted = false; this._clicked = false; return; } this.row.dragging = true; this.row.grid.rowDragging = true; this.row.grid.markForCheck(); this.subscription$ = fromEvent(this.row.grid.document.defaultView, 'keydown').subscribe((ev) => { if (ev.key === "Escape" /* ESCAPE */ || ev.key === "Esc" /* ESCAPE_IE */) { this._lastDropArea = false; this.onPointerUp(event); } }); } } onPointerUp(event) { if (!this._clicked) { return; } const args = { dragDirective: this, dragData: this.row, animation: false, owner: this.row.grid }; this.zone.run(() => { this.row.grid.onRowDragEnd.emit(args); }); const dropArea = this._lastDropArea; super.onPointerUp(event); if (!dropArea && this.ghostElement) { this.ghostElement.addEventListener('transitionend', this.transitionEndEvent, false); } else { this.endDragging(); } } createGhost(pageX, pageY) { this.row.grid.endEdit(true); this.row.grid.markForCheck(); this.ghostContext = { $implicit: this.row.rowData, data: this.row.rowData, grid: this.row.grid }; super.createGhost(pageX, pageY, this.row.nativeElement); // check if there is an expander icon and create the ghost at the corresponding position if (this.isHierarchicalGrid) { const row = this.row; if (row.expander) { const expanderWidth = row.expander.nativeElement.getBoundingClientRect().width; this._ghostHostX += expanderWidth; } } const ghost = this.ghostElement; const gridRect = this.row.grid.nativeElement.getBoundingClientRect(); const rowRect = this.row.nativeElement.getBoundingClientRect(); ghost.style.overflow = 'hidden'; ghost.style.width = gridRect.width + 'px'; ghost.style.height = rowRect.height + 'px'; this.renderer.addClass(ghost, ghostBackgroundClass); this.renderer.removeClass(ghost, rowSelectedClass); const ghostCells = ghost.getElementsByClassName(gridCellClass); for (let index = 0; index < ghostCells.length; index++) { this.renderer.removeClass(ghostCells[index], cellSelectedClass); this.renderer.removeClass(ghostCells[index], cellActiveClass); } } _unsubscribe() { if (this.subscription$ && !this.subscription$.closed) { this.subscription$.unsubscribe(); } } endDragging() { this.onTransitionEnd(null); this.row.dragging = false; this.row.grid.rowDragging = false; this.row.grid.markForCheck(); this._unsubscribe(); } get isHierarchicalGrid() { return this.row.grid.nativeElement.tagName.toLowerCase() === 'igx-hierarchical-grid'; } }; __decorate([ Input('igxRowDrag'), __metadata("design:type", Object), __metadata("design:paramtypes", [Object]) ], IgxRowDragDirective.prototype, "data", null); IgxRowDragDirective = __decorate([ Directive({ selector: '[igxRowDrag]' }) ], IgxRowDragDirective); export { IgxRowDragDirective }; /** * @hidden */ let IgxDragIndicatorIconDirective = class IgxDragIndicatorIconDirective { }; IgxDragIndicatorIconDirective = __decorate([ Directive({ selector: '[igxDragIndicatorIcon]' }) ], IgxDragIndicatorIconDirective); export { IgxDragIndicatorIconDirective }; /** * @hidden */ let IgxRowDragGhostDirective = class IgxRowDragGhostDirective { constructor(templateRef) { this.templateRef = templateRef; } }; IgxRowDragGhostDirective.ctorParameters = () => [ { type: TemplateRef } ]; IgxRowDragGhostDirective = __decorate([ Directive({ selector: '[igxRowDragGhost]' }), __metadata("design:paramtypes", [TemplateRef]) ], IgxRowDragGhostDirective); export { IgxRowDragGhostDirective }; let IgxRowDragModule = class IgxRowDragModule { }; IgxRowDragModule = __decorate([ NgModule({ declarations: [IgxRowDragDirective, IgxDragIndicatorIconDirective, IgxRowDragGhostDirective], entryComponents: [], exports: [IgxRowDragDirective, IgxDragIndicatorIconDirective, IgxRowDragGhostDirective], imports: [] }) ], IgxRowDragModule); export { IgxRowDragModule }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWRyYWcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9yb3ctZHJhZy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBRS9FLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBTy9DLE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUM7QUFDbkQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDO0FBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUM7QUFDbEQsTUFBTSxpQkFBaUIsR0FBRyx3QkFBd0IsQ0FBQztBQUNuRCxNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQztBQUUvQzs7R0FFRztBQUlILElBQWEsbUJBQW1CLEdBQWhDLE1BQWEsbUJBQW9CLFNBQVEsZ0JBQWdCO0lBQXpEOztRQUdZLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBOEh4Qix1QkFBa0IsR0FBRyxDQUFDLEdBQUksRUFBRSxFQUFFO1lBQ2xDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzFGO1lBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQTtJQUtMLENBQUM7SUFySUcsSUFBSSxJQUFJLENBQUMsR0FBRztRQUNSLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDcEIsQ0FBQztJQUVNLGFBQWEsQ0FBQyxLQUFLO1FBQ3RCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLGFBQWEsQ0FBQyxLQUFLO1FBQ3RCLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUM1QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixNQUFNLElBQUksR0FBMkI7Z0JBQ2pDLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ2xCLE1BQU0sRUFBRSxLQUFLO2dCQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUk7YUFDdkIsQ0FBQztZQUVGLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3RCLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBRTdCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBaUIsRUFBRSxFQUFFO2dCQUMxRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLDBCQUFnQixJQUFJLEVBQUUsQ0FBQyxHQUFHLDBCQUFtQixFQUFFO29CQUNyRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztvQkFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDM0I7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFLO1FBRXBCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLE9BQU87U0FDVjtRQUVELE1BQU0sSUFBSSxHQUF5QjtZQUMvQixhQUFhLEVBQUUsSUFBSTtZQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDbEIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSTtTQUN2QixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDcEMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3ZGO2FBQVE7WUFDTCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRVMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLO1FBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2hCLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU87WUFDM0IsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTztZQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJO1NBQ3RCLENBQUM7UUFDRixLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV4RCx3RkFBd0Y7UUFDeEYsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDekIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQWtDLENBQUM7WUFDcEQsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFO2dCQUNkLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUMvRSxJQUFJLENBQUMsV0FBVyxJQUFJLGFBQWEsQ0FBQzthQUNyQztTQUNKO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUVoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9ELEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUNoQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUMxQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUUzQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUVuRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0QsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1NBQ2pFO0lBQ0wsQ0FBQztJQUVPLFlBQVk7UUFDaEIsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUU7WUFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQztJQUNMLENBQUM7SUFFTyxXQUFXO1FBQ2YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQVNELElBQVksa0JBQWtCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyx1QkFBdUIsQ0FBQztJQUN6RixDQUFDO0NBQ0osQ0FBQTtBQXJJRztJQURDLEtBQUssQ0FBQyxZQUFZLENBQUM7OzsrQ0FHbkI7QUFSUSxtQkFBbUI7SUFIL0IsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLGNBQWM7S0FDM0IsQ0FBQztHQUNXLG1CQUFtQixDQTJJL0I7U0EzSVksbUJBQW1CO0FBNkloQzs7R0FFRztBQUtILElBQWEsNkJBQTZCLEdBQTFDLE1BQWEsNkJBQTZCO0NBQ3pDLENBQUE7QUFEWSw2QkFBNkI7SUFKekMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLHdCQUF3QjtLQUNyQyxDQUFDO0dBRVcsNkJBQTZCLENBQ3pDO1NBRFksNkJBQTZCO0FBRzFDOztHQUVHO0FBS0gsSUFBYSx3QkFBd0IsR0FBckMsTUFBYSx3QkFBd0I7SUFDakMsWUFBbUIsV0FBNkI7UUFBN0IsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO0lBQUksQ0FBQztDQUN4RCxDQUFBOztZQURtQyxXQUFXOztBQURsQyx3QkFBd0I7SUFKcEMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLG1CQUFtQjtLQUNoQyxDQUFDO3FDQUdrQyxXQUFXO0dBRGxDLHdCQUF3QixDQUVwQztTQUZZLHdCQUF3QjtBQVdyQyxJQUFhLGdCQUFnQixHQUE3QixNQUFhLGdCQUFnQjtDQUM1QixDQUFBO0FBRFksZ0JBQWdCO0lBUDVCLFFBQVEsQ0FBQztRQUNOLFlBQVksRUFBRSxDQUFDLG1CQUFtQixFQUFFLDZCQUE2QixFQUFFLHdCQUF3QixDQUFDO1FBQzVGLGVBQWUsRUFBRSxFQUFFO1FBQ25CLE9BQU8sRUFBRSxDQUFDLG1CQUFtQixFQUFFLDZCQUE2QixFQUFFLHdCQUF3QixDQUFDO1FBQ3ZGLE9BQU8sRUFBRSxFQUFFO0tBQ2QsQ0FBQztHQUVXLGdCQUFnQixDQUM1QjtTQURZLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIE9uRGVzdHJveSwgTmdNb2R1bGUsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hEcmFnRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kcmFnLWRyb3AvZHJhZy1kcm9wLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBLRVlTIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSWd4Um93RGlyZWN0aXZlLCBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vZ3JpZCc7XG5pbXBvcnQgeyBJUm93RHJhZ1N0YXJ0RXZlbnRBcmdzLCBJUm93RHJhZ0VuZEV2ZW50QXJncyB9IGZyb20gJy4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbFJvd0NvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLXJvdy5jb21wb25lbnQnO1xuXG5cbmNvbnN0IGdob3N0QmFja2dyb3VuZENsYXNzID0gJ2lneC1ncmlkX190ci0tZ2hvc3QnO1xuY29uc3QgZ3JpZENlbGxDbGFzcyA9ICdpZ3gtZ3JpZF9fdGQnO1xuY29uc3Qgcm93U2VsZWN0ZWRDbGFzcyA9ICdpZ3gtZ3JpZF9fdHItLXNlbGVjdGVkJztcbmNvbnN0IGNlbGxTZWxlY3RlZENsYXNzID0gJ2lneC1ncmlkX190ZC0tc2VsZWN0ZWQnO1xuY29uc3QgY2VsbEFjdGl2ZUNsYXNzID0gJ2lneC1ncmlkX190ZC0tYWN0aXZlJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneFJvd0RyYWddJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hSb3dEcmFnRGlyZWN0aXZlIGV4dGVuZHMgSWd4RHJhZ0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByb3c6IElneFJvd0RpcmVjdGl2ZTxJZ3hHcmlkQmFzZURpcmVjdGl2ZSAmIEdyaWRUeXBlPjtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbiQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9yb3dEcmFnU3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KCdpZ3hSb3dEcmFnJylcbiAgICBzZXQgZGF0YSh2YWwpIHtcbiAgICAgICAgdGhpcy5yb3cgPSB2YWw7XG4gICAgfVxuXG4gICAgZ2V0IGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdztcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Qb2ludGVyRG93bihldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9yb3dEcmFnU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9yZW1vdmVPbkRlc3Ryb3kgPSBmYWxzZTtcbiAgICAgICAgc3VwZXIub25Qb2ludGVyRG93bihldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUG9pbnRlck1vdmUoZXZlbnQpIHtcbiAgICAgICAgc3VwZXIub25Qb2ludGVyTW92ZShldmVudCk7XG4gICAgICAgIGlmICh0aGlzLl9kcmFnU3RhcnRlZCAmJiAhdGhpcy5fcm93RHJhZ1N0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jvd0RyYWdTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGFyZ3M6IElSb3dEcmFnU3RhcnRFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgZHJhZ0RpcmVjdGl2ZTogdGhpcyxcbiAgICAgICAgICAgICAgICBkcmFnRGF0YTogdGhpcy5yb3csXG4gICAgICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBvd25lcjogdGhpcy5yb3cuZ3JpZFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy5yb3cuZ3JpZC5vblJvd0RyYWdTdGFydC5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5naG9zdEVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmdob3N0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5naG9zdEVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RyYWdTdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xpY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucm93LmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucm93LmdyaWQucm93RHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5yb3cuZ3JpZC5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24kID0gZnJvbUV2ZW50KHRoaXMucm93LmdyaWQuZG9jdW1lbnQuZGVmYXVsdFZpZXcsICdrZXlkb3duJykuc3Vic2NyaWJlKChldjogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldi5rZXkgPT09IEtFWVMuRVNDQVBFIHx8IGV2LmtleSA9PT0gS0VZUy5FU0NBUEVfSUUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGFzdERyb3BBcmVhID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXAoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uUG9pbnRlclVwKGV2ZW50KSB7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jbGlja2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzOiBJUm93RHJhZ0VuZEV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIGRyYWdEaXJlY3RpdmU6IHRoaXMsXG4gICAgICAgICAgICBkcmFnRGF0YTogdGhpcy5yb3csXG4gICAgICAgICAgICBhbmltYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgb3duZXI6IHRoaXMucm93LmdyaWRcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJvdy5ncmlkLm9uUm93RHJhZ0VuZC5lbWl0KGFyZ3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkcm9wQXJlYSA9IHRoaXMuX2xhc3REcm9wQXJlYTtcbiAgICAgICAgc3VwZXIub25Qb2ludGVyVXAoZXZlbnQpO1xuICAgICAgICBpZiAoIWRyb3BBcmVhICYmIHRoaXMuZ2hvc3RFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmdob3N0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy50cmFuc2l0aW9uRW5kRXZlbnQsIGZhbHNlKTtcbiAgICAgICAgfSAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbmREcmFnZ2luZygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUdob3N0KHBhZ2VYLCBwYWdlWSkge1xuICAgICAgICB0aGlzLnJvdy5ncmlkLmVuZEVkaXQodHJ1ZSk7XG4gICAgICAgIHRoaXMucm93LmdyaWQubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZ2hvc3RDb250ZXh0ID0ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB0aGlzLnJvdy5yb3dEYXRhLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5yb3cucm93RGF0YSxcbiAgICAgICAgICAgIGdyaWQ6IHRoaXMucm93LmdyaWRcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIuY3JlYXRlR2hvc3QocGFnZVgsIHBhZ2VZLCB0aGlzLnJvdy5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhbiBleHBhbmRlciBpY29uIGFuZCBjcmVhdGUgdGhlIGdob3N0IGF0IHRoZSBjb3JyZXNwb25kaW5nIHBvc2l0aW9uXG4gICAgICAgIGlmICh0aGlzLmlzSGllcmFyY2hpY2FsR3JpZCkge1xuICAgICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5yb3cgYXMgSWd4SGllcmFyY2hpY2FsUm93Q29tcG9uZW50O1xuICAgICAgICAgICAgaWYgKHJvdy5leHBhbmRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVyV2lkdGggPSByb3cuZXhwYW5kZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgICAgICB0aGlzLl9naG9zdEhvc3RYICs9IGV4cGFuZGVyV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnaG9zdCA9IHRoaXMuZ2hvc3RFbGVtZW50O1xuXG4gICAgICAgIGNvbnN0IGdyaWRSZWN0ID0gdGhpcy5yb3cuZ3JpZC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCByb3dSZWN0ID0gdGhpcy5yb3cubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgZ2hvc3Quc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgZ2hvc3Quc3R5bGUud2lkdGggPSBncmlkUmVjdC53aWR0aCArICdweCc7XG4gICAgICAgIGdob3N0LnN0eWxlLmhlaWdodCA9IHJvd1JlY3QuaGVpZ2h0ICsgJ3B4JztcblxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGdob3N0LCBnaG9zdEJhY2tncm91bmRDbGFzcyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZ2hvc3QsIHJvd1NlbGVjdGVkQ2xhc3MpO1xuXG4gICAgICAgIGNvbnN0IGdob3N0Q2VsbHMgPSBnaG9zdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGdyaWRDZWxsQ2xhc3MpO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZ2hvc3RDZWxscy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZ2hvc3RDZWxsc1tpbmRleF0sIGNlbGxTZWxlY3RlZENsYXNzKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZ2hvc3RDZWxsc1tpbmRleF0sIGNlbGxBY3RpdmVDbGFzcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF91bnN1YnNjcmliZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uJCAmJiAhdGhpcy5zdWJzY3JpcHRpb24kLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24kLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVuZERyYWdnaW5nKCkge1xuICAgICAgICB0aGlzLm9uVHJhbnNpdGlvbkVuZChudWxsKTtcbiAgICAgICAgdGhpcy5yb3cuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yb3cuZ3JpZC5yb3dEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJvdy5ncmlkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNpdGlvbkVuZEV2ZW50ID0gKGV2dD8pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ2hvc3RFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmdob3N0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgdGhpcy50cmFuc2l0aW9uRW5kRXZlbnQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuZERyYWdnaW5nKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgaXNIaWVyYXJjaGljYWxHcmlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3cuZ3JpZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lneC1oaWVyYXJjaGljYWwtZ3JpZCc7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4RHJhZ0luZGljYXRvckljb25dJ1xufSlcblxuZXhwb3J0IGNsYXNzIElneERyYWdJbmRpY2F0b3JJY29uRGlyZWN0aXZlIHtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneFJvd0RyYWdHaG9zdF0nXG59KVxuXG5leHBvcnQgY2xhc3MgSWd4Um93RHJhZ0dob3N0RGlyZWN0aXZlICB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KSB7IH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtJZ3hSb3dEcmFnRGlyZWN0aXZlLCBJZ3hEcmFnSW5kaWNhdG9ySWNvbkRpcmVjdGl2ZSwgSWd4Um93RHJhZ0dob3N0RGlyZWN0aXZlXSxcbiAgICBlbnRyeUNvbXBvbmVudHM6IFtdLFxuICAgIGV4cG9ydHM6IFtJZ3hSb3dEcmFnRGlyZWN0aXZlLCBJZ3hEcmFnSW5kaWNhdG9ySWNvbkRpcmVjdGl2ZSwgSWd4Um93RHJhZ0dob3N0RGlyZWN0aXZlXSxcbiAgICBpbXBvcnRzOiBbXVxufSlcblxuZXhwb3J0IGNsYXNzIElneFJvd0RyYWdNb2R1bGUge1xufVxuIl19