@nova-ui/bits
Version:
SolarWinds Nova Framework
124 lines • 18.4 kB
JavaScript
// © 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==