UNPKG

@nova-ui/bits

Version:

SolarWinds Nova Framework

124 lines 18.4 kB
// © 2022 SolarWinds Worldwide, LLC. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import { CdkCell } from "@angular/cdk/table"; import { ChangeDetectorRef, Directive, ElementRef, HostBinding, HostListener, Input, } from "@angular/core"; import { filter } from "rxjs/operators"; import { TableColumnDefDirective } from "./table-column-def.directive"; import { TableStateHandlerService } from "../table-state-handler.service"; import * as i0 from "@angular/core"; import * as i1 from "./table-column-def.directive"; import * as i2 from "../table-state-handler.service"; /** * @ignore */ export class TableCellDirective extends CdkCell { get tooltip() { return this.tooltipText; } // Prevents dragging of table cells content mouseDown() { const selection = window.getSelection(); if (selection) { selection.removeAllRanges(); } } constructor(columnDef, elementRef, tableStateHandlerService, cd) { super(columnDef, elementRef); this.columnDef = columnDef; this.elementRef = elementRef; this.tableStateHandlerService = tableStateHandlerService; this.cd = cd; } ngOnInit() { const alignment = this.alignment ? `align-${this.alignment}` : this.tableStateHandlerService.getAlignment(this.columnDef.name); this.elementRef.nativeElement.classList.add(alignment); this.currentCellIndex = this.tableStateHandlerService.tableColumns.indexOf(this.columnDef.name); if (this.tableStateHandlerService.reorderable) { this.subscribeToDraggedOverCell = this.tableStateHandlerService.draggedOverCell.subscribe((draggedOverCell) => { this.rightEdgeActive = this.leftEdgeActive = false; if (draggedOverCell?.cellIndex === this.currentCellIndex) { this.rightEdgeActive = draggedOverCell?.dropAlignment === "right"; this.leftEdgeActive = draggedOverCell?.dropAlignment === "left"; this.cd.detectChanges(); } }); } if (this.tableStateHandlerService.resizable) { this.resizeSubscription = this.tableStateHandlerService.shouldHighlightEdge .pipe(filter((value) => value.columnIndex === this.currentCellIndex)) .subscribe(() => { // Anytime the event for this column is emitted state will change. this.rightEdgeActive = !this.rightEdgeActive; }); } } ngOnChanges(changes) { if (changes.alignment && !changes.alignment.firstChange) { const newAlignment = `align-${changes.alignment.currentValue}`; const oldAlignment = `align-${changes.alignment.previousValue}`; this.elementRef.nativeElement.classList.remove(oldAlignment); this.elementRef.nativeElement.classList.add(newAlignment); } } ngOnDestroy() { if (this.subscribeToDraggedOverCell) { this.subscribeToDraggedOverCell.unsubscribe(); } if (this.resizeSubscription) { this.resizeSubscription.unsubscribe(); } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableCellDirective, deps: [{ token: i1.TableColumnDefDirective }, { token: i0.ElementRef }, { token: i2.TableStateHandlerService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: TableCellDirective, selector: "nui-cell, td[nui-cell]", inputs: { tooltipText: "tooltipText", alignment: "alignment" }, host: { attributes: { "role": "gridcell" }, listeners: { "mousedown": "mouseDown()" }, properties: { "attr.title": "this.tooltip", "class.nui-table__table-cell--left-edge-action": "this.leftEdgeActive", "class.nui-table__table-cell--right-edge-action": "this.rightEdgeActive" }, classAttribute: "nui-table__table-cell" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableCellDirective, decorators: [{ type: Directive, args: [{ selector: "nui-cell, td[nui-cell]", host: { role: "gridcell", class: "nui-table__table-cell", }, }] }], ctorParameters: () => [{ type: i1.TableColumnDefDirective }, { type: i0.ElementRef }, { type: i2.TableStateHandlerService }, { type: i0.ChangeDetectorRef }], propDecorators: { tooltipText: [{ type: Input }], alignment: [{ type: Input }], tooltip: [{ type: HostBinding, args: ["attr.title"] }], leftEdgeActive: [{ type: HostBinding, args: ["class.nui-table__table-cell--left-edge-action"] }], rightEdgeActive: [{ type: HostBinding, args: ["class.nui-table__table-cell--right-edge-action"] }], mouseDown: [{ type: HostListener, args: ["mousedown"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY2VsbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3RhYmxlL3RhYmxlLWNlbGwvdGFibGUtY2VsbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseURBQXlEO0FBQ3pELEVBQUU7QUFDRiwrRUFBK0U7QUFDL0UsNEVBQTRFO0FBQzVFLDhFQUE4RTtBQUM5RSwrRUFBK0U7QUFDL0UsOEVBQThFO0FBQzlFLDREQUE0RDtBQUM1RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLHVEQUF1RDtBQUN2RCxFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSwrRUFBK0U7QUFDL0UsMEVBQTBFO0FBQzFFLGlGQUFpRjtBQUNqRiw2RUFBNkU7QUFDN0UsaUJBQWlCO0FBRWpCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEdBS1IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7O0FBRzFFOztHQUVHO0FBU0gsTUFBTSxPQUFPLGtCQUNULFNBQVEsT0FBTztJQVNmLElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBT0QsMkNBQTJDO0lBRTNDLFNBQVM7UUFDTCxNQUFNLFNBQVMsR0FBcUIsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFELElBQUksU0FBUyxFQUFFO1lBQ1gsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQy9CO0lB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RUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3pDO0lBQ0wsQ0FBQzsrR0FwR1Esa0JBQWtCO21HQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBUDlCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsSUFBSSxFQUFFO3dCQUNGLElBQUksRUFBRSxVQUFVO3dCQUNoQixLQUFLLEVBQUUsdUJBQXVCO3FCQUNqQztpQkFDSjs0TEFLWSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTUYsT0FBTztzQkFEVixXQUFXO3VCQUFDLFlBQVk7Z0JBTXpCLGNBQWM7c0JBRGIsV0FBVzt1QkFBQywrQ0FBK0M7Z0JBRzVELGVBQWU7c0JBRGQsV0FBVzt1QkFBQyxnREFBZ0Q7Z0JBSzdELFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLy8gwqkgMjAyMiBTb2xhcldpbmRzIFdvcmxkd2lkZSwgTExDLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0b1xuLy8gIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4vLyAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4vLyAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vICBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vICBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vICBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7IENka0NlbGwgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3RhYmxlXCI7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuXG5pbXBvcnQgeyBUYWJsZUNvbHVtbkRlZkRpcmVjdGl2ZSB9IGZyb20gXCIuL3RhYmxlLWNvbHVtbi1kZWYuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBUYWJsZVN0YXRlSGFuZGxlclNlcnZpY2UgfSBmcm9tIFwiLi4vdGFibGUtc3RhdGUtaGFuZGxlci5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBUYWJsZUFsaWdubWVudE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuLyoqXG4gKiBAaWdub3JlXG4gKi9cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6IFwibnVpLWNlbGwsIHRkW251aS1jZWxsXVwiLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgcm9sZTogXCJncmlkY2VsbFwiLFxuICAgICAgICBjbGFzczogXCJudWktdGFibGVfX3RhYmxlLWNlbGxcIixcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNlbGxEaXJlY3RpdmVcbiAgICBleHRlbmRzIENka0NlbGxcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXNcbntcbiAgICBASW5wdXQoKSB0b29sdGlwVGV4dDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGFsaWdubWVudDogVGFibGVBbGlnbm1lbnRPcHRpb25zO1xuICAgIHB1YmxpYyBjdXJyZW50Q2VsbEluZGV4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb0RyYWdnZWRPdmVyQ2VsbDogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgcmVzaXplU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBASG9zdEJpbmRpbmcoXCJhdHRyLnRpdGxlXCIpXG4gICAgZ2V0IHRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcFRleHQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3MubnVpLXRhYmxlX190YWJsZS1jZWxsLS1sZWZ0LWVkZ2UtYWN0aW9uXCIpXG4gICAgbGVmdEVkZ2VBY3RpdmU6IGJvb2xlYW47XG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3MubnVpLXRhYmxlX190YWJsZS1jZWxsLS1yaWdodC1lZGdlLWFjdGlvblwiKVxuICAgIHJpZ2h0RWRnZUFjdGl2ZTogYm9vbGVhbjtcblxuICAgIC8vIFByZXZlbnRzIGRyYWdnaW5nIG9mIHRhYmxlIGNlbGxzIGNvbnRlbnRcbiAgICBASG9zdExpc3RlbmVyKFwibW91c2Vkb3duXCIpXG4gICAgbW91c2VEb3duKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiB8IG51bGwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNvbHVtbkRlZjogVGFibGVDb2x1bW5EZWZEaXJlY3RpdmUsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSB0YWJsZVN0YXRlSGFuZGxlclNlcnZpY2U6IFRhYmxlU3RhdGVIYW5kbGVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY29sdW1uRGVmLCBlbGVtZW50UmVmKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsaWdubWVudCA9IHRoaXMuYWxpZ25tZW50XG4gICAgICAgICAgICA/IGBhbGlnbi0ke3RoaXMuYWxpZ25tZW50fWBcbiAgICAgICAgICAgIDogdGhpcy50YWJsZVN0YXRlSGFuZGxlclNlcnZpY2UuZ2V0QWxpZ25tZW50KHRoaXMuY29sdW1uRGVmLm5hbWUpO1xuXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYWxpZ25tZW50KTtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2VsbEluZGV4ID1cbiAgICAgICAgICAgIHRoaXMudGFibGVTdGF0ZUhhbmRsZXJTZXJ2aWNlLnRhYmxlQ29sdW1ucy5pbmRleE9mKFxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmLm5hbWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMudGFibGVTdGF0ZUhhbmRsZXJTZXJ2aWNlLnJlb3JkZXJhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvRHJhZ2dlZE92ZXJDZWxsID1cbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU3RhdGVIYW5kbGVyU2VydmljZS5kcmFnZ2VkT3ZlckNlbGwuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAoZHJhZ2dlZE92ZXJDZWxsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0RWRnZUFjdGl2ZSA9IHRoaXMubGVmdEVkZ2VBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkT3ZlckNlbGw/LmNlbGxJbmRleCA9PT0gdGhpcy5jdXJyZW50Q2VsbEluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0RWRnZUFjdGl2ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdnZWRPdmVyQ2VsbD8uZHJvcEFsaWdubWVudCA9PT0gXCJyaWdodFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVmdEVkZ2VBY3RpdmUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2VkT3ZlckNlbGw/LmRyb3BBbGlnbm1lbnQgPT09IFwibGVmdFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnRhYmxlU3RhdGVIYW5kbGVyU2VydmljZS5yZXNpemFibGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uID1cbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU3RhdGVIYW5kbGVyU2VydmljZS5zaG91bGRIaWdobGlnaHRFZGdlXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuY29sdW1uSW5kZXggPT09IHRoaXMuY3VycmVudENlbGxJbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW55dGltZSB0aGUgZXZlbnQgZm9yIHRoaXMgY29sdW1uIGlzIGVtaXR0ZWQgc3RhdGUgd2lsbCBjaGFuZ2UuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0RWRnZUFjdGl2ZSA9ICF0aGlzLnJpZ2h0RWRnZUFjdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5hbGlnbm1lbnQgJiYgIWNoYW5nZXMuYWxpZ25tZW50LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdBbGlnbm1lbnQgPSBgYWxpZ24tJHtjaGFuZ2VzLmFsaWdubWVudC5jdXJyZW50VmFsdWV9YDtcbiAgICAgICAgICAgIGNvbnN0IG9sZEFsaWdubWVudCA9IGBhbGlnbi0ke2NoYW5nZXMuYWxpZ25tZW50LnByZXZpb3VzVmFsdWV9YDtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUob2xkQWxpZ25tZW50KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQobmV3QWxpZ25tZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaWJlVG9EcmFnZ2VkT3ZlckNlbGwpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9EcmFnZ2VkT3ZlckNlbGwudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==