UNPKG

@catull/igniteui-angular

Version:

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

234 lines 26.6 kB
var IgxGridHeaderGroupComponent_1; import { __decorate, __metadata } from "tslib"; import { Component, HostBinding, Input, ViewChild, QueryList, ViewChildren, forwardRef, ChangeDetectionStrategy, ChangeDetectorRef, DoCheck, ElementRef, HostListener } from '@angular/core'; import { IgxColumnComponent } from '../columns/column.component'; import { IgxFilteringService } from '../filtering/grid-filtering.service'; import { GridBaseAPIService } from '../api.service'; import { IgxColumnResizingService } from '../resizing/resizing.service'; import { IgxGridHeaderComponent } from './grid-header.component'; import { IgxGridFilteringCellComponent } from '../filtering/base/grid-filtering-cell.component'; import { isIE } from '../../core/utils'; const Z_INDEX = 9999; /** * @hidden */ let IgxGridHeaderGroupComponent = IgxGridHeaderGroupComponent_1 = class IgxGridHeaderGroupComponent { constructor(cdr, gridAPI, element, colResizingService, filteringService) { this.cdr = cdr; this.gridAPI = gridAPI; this.element = element; this.colResizingService = colResizingService; this.filteringService = filteringService; } get gridRowSpan() { return this.column.gridRowSpan; } get gridColumnSpan() { return this.column.gridColumnSpan; } get rowEnd() { return this.column.rowEnd; } get colEnd() { return this.column.colEnd; } get rowStart() { return this.column.rowStart; } get colStart() { return this.column.colStart; } /** * Gets the width of the header group. * @memberof IgxGridHeaderGroupComponent */ get width() { return this.grid.getHeaderGroupWidth(this.column); } /** * Gets the style classes of the header group. * @memberof IgxGridHeaderGroupComponent */ get styleClasses() { const defaultClasses = [ 'igx-grid__thead-item', this.column.headerGroupClasses ]; const classList = { 'igx-grid__th--pinned': this.isPinned, 'igx-grid__th--pinned-last': this.isLastPinned, 'igx-grid__drag-col-header': this.isHeaderDragged, 'igx-grid__th--filtering': this.isFiltered }; for (const className of Object.keys(classList)) { if (classList[className]) { defaultClasses.push(className); } } return defaultClasses.join(' '); } /** * @hidden */ get zIndex() { if (!this.column.pinned) { return null; } return Z_INDEX - this.grid.pinnedColumns.indexOf(this.column); } /** * Gets the grid of the header group. * @memberof IgxGridHeaderGroupComponent */ get grid() { return this.gridAPI.grid; } /** * Gets whether the header group belongs to a column that is filtered. * @memberof IgxGridHeaderGroupComponent */ get isFiltered() { return this.filteringService.filteredColumn === this.column; } /** * Gets whether the header group is stored in the last column in the pinned area. * @memberof IgxGridHeaderGroupComponent */ get isLastPinned() { return !this.grid.hasColumnLayouts ? this.column.isLastPinned : false; } get groupDisplayStyle() { return this.grid.hasColumnLayouts && this.column.children && !isIE() ? 'flex' : ''; } /** * Gets whether the header group is stored in a pinned column. * @memberof IgxGridHeaderGroupComponent */ get isPinned() { return this.column.pinned; } /** * Gets whether the header group belongs to a column that is moved. * @memberof IgxGridHeaderGroupComponent */ get isHeaderDragged() { return this.grid.draggedColumn === this.column; } /** * @hidden */ get hasLastPinnedChildColumn() { return this.column.allChildren.some(child => child.isLastPinned); } /** * @hidden */ get height() { return this.element.nativeElement.getBoundingClientRect().height; } /** * @hidden */ onMouseDown(event) { // hack for preventing text selection in IE and Edge while dragging the resizer event.preventDefault(); } ngDoCheck() { this.cdr.markForCheck(); } }; IgxGridHeaderGroupComponent.ctorParameters = () => [ { type: ChangeDetectorRef }, { type: GridBaseAPIService }, { type: ElementRef }, { type: IgxColumnResizingService }, { type: IgxFilteringService } ]; __decorate([ HostBinding('style.-ms-grid-row-span'), __metadata("design:type", Number), __metadata("design:paramtypes", []) ], IgxGridHeaderGroupComponent.prototype, "gridRowSpan", null); __decorate([ HostBinding('style.-ms-grid-column-span'), __metadata("design:type", Number), __metadata("design:paramtypes", []) ], IgxGridHeaderGroupComponent.prototype, "gridColumnSpan", null); __decorate([ HostBinding('style.grid-row-end'), __metadata("design:type", Number), __metadata("design:paramtypes", []) ], IgxGridHeaderGroupComponent.prototype, "rowEnd", null); __decorate([ HostBinding('style.grid-column-end'), __metadata("design:type", Number), __metadata("design:paramtypes", []) ], IgxGridHeaderGroupComponent.prototype, "colEnd", null); __decorate([ HostBinding('style.-ms-grid-row'), HostBinding('style.grid-row-start'), __metadata("design:type", Number), __metadata("design:paramtypes", []) ], IgxGridHeaderGroupComponent.prototype, "rowStart", null); __decorate([ HostBinding('style.-ms-grid-column'), HostBinding('style.grid-column-start'), __metadata("design:type", Number), __metadata("design:paramtypes", []) ], IgxGridHeaderGroupComponent.prototype, "colStart", null); __decorate([ Input(), __metadata("design:type", IgxColumnComponent) ], IgxGridHeaderGroupComponent.prototype, "column", void 0); __decorate([ Input(), __metadata("design:type", String) ], IgxGridHeaderGroupComponent.prototype, "gridID", void 0); __decorate([ ViewChild(IgxGridHeaderComponent), __metadata("design:type", IgxGridHeaderComponent) ], IgxGridHeaderGroupComponent.prototype, "headerCell", void 0); __decorate([ ViewChild(IgxGridFilteringCellComponent), __metadata("design:type", IgxGridFilteringCellComponent) ], IgxGridHeaderGroupComponent.prototype, "filterCell", void 0); __decorate([ ViewChildren(forwardRef(() => IgxGridHeaderGroupComponent_1), { read: IgxGridHeaderGroupComponent_1 }), __metadata("design:type", QueryList) ], IgxGridHeaderGroupComponent.prototype, "children", void 0); __decorate([ HostBinding('class'), __metadata("design:type", String), __metadata("design:paramtypes", []) ], IgxGridHeaderGroupComponent.prototype, "styleClasses", null); __decorate([ HostBinding('style.z-index'), __metadata("design:type", Object), __metadata("design:paramtypes", []) ], IgxGridHeaderGroupComponent.prototype, "zIndex", null); __decorate([ HostBinding('style.display'), __metadata("design:type", String), __metadata("design:paramtypes", []) ], IgxGridHeaderGroupComponent.prototype, "groupDisplayStyle", null); __decorate([ HostListener('mousedown', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], IgxGridHeaderGroupComponent.prototype, "onMouseDown", null); IgxGridHeaderGroupComponent = IgxGridHeaderGroupComponent_1 = __decorate([ Component({ changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, selector: 'igx-grid-header-group', template: "<ng-container *ngIf=\"grid.hasColumnLayouts && column.columnGroup\">\n <span *ngIf=\"grid.hasMovableColumns\" class=\"igx-grid__th-drop-indicator-left\"></span>\n <div class=\"igx-grid__thead-group igx-grid__mrl-block\"\n [ngClass]=\"{'igx-grid__th--pinned-last': hasLastPinnedChildColumn}\"\n [ngStyle]=\"{'grid-template-rows':column.getGridTemplate(true, false),\n 'grid-template-columns':column.getGridTemplate(false, false),\n '-ms-grid-rows':column.getGridTemplate(true, true),\n '-ms-grid-columns':column.getGridTemplate(false, true)}\">\n <ng-container *ngFor=\"let child of column.children\" >\n <igx-grid-header-group *ngIf=\"!child.hidden\" class=\"igx-grid__thead-subgroup\"\n [column]=\"child\"\n [gridID]=\"child.gridID\"\n [igxColumnMovingDrag]=\"child\"\n [ghostHost]=\"grid.outletDirective.nativeElement\"\n [attr.droppable]=\"true\"\n [igxColumnMovingDrop]=\"child\">\n </igx-grid-header-group>\n </ng-container>\n </div>\n <span *ngIf=\"grid.hasMovableColumns\" class=\"igx-grid__th-drop-indicator-right\"></span>\n</ng-container>\n\n\n<ng-template #defaultColumn>\n <span class=\"igx-grid__th-group-title\" [attr.title]=\"column.header\">{{column.header}}</span>\n</ng-template>\n\n<ng-template #defaultCollapseIndicator>\n <igx-icon [attr.draggable]=\"false\" >\n {{column.expanded ? 'expand_more' : 'chevron_right'}} </igx-icon>\n</ng-template>\n\n<ng-container *ngIf=\"!grid.hasColumnLayouts && column.columnGroup\">\n <span *ngIf=\"grid.hasMovableColumns\" class=\"igx-grid__th-drop-indicator-left\"></span>\n <div class=\"igx-grid__thead-title\"\n role=\"columnheader\"\n [attr.aria-label]=\"column.header || column.field\"\n [attr.aria-expanded]=\"column.expanded\"\n tabindex=\"0\"\n [ngClass]=\"{'igx-grid__th--pinned-last': hasLastPinnedChildColumn, 'igx-grid__th--collapsible': column.collapsible}\"\n [igxColumnMovingDrag]=\"column\"\n [ghostHost]=\"grid.outletDirective.nativeElement\"\n [attr.droppable]=\"true\"\n [igxColumnMovingDrop]=\"column\">\n <ng-container *ngIf=\"column.collapsible\">\n <div class=\"igx-grid__th-expander\" (click)=\"column.expanded = !column.expanded\">\n <ng-container\n *ngTemplateOutlet=\"column.collapsibleIndicatorTemplate ? column.collapsibleIndicatorTemplate : defaultCollapseIndicator; context: {$implicit: column, column: column}\">\n </ng-container>\n </div>\n </ng-container>\n <ng-container *ngTemplateOutlet=\"column.headerTemplate ? column.headerTemplate : defaultColumn; context: { $implicit: column, column: column}\">\n </ng-container>\n </div>\n <div class=\"igx-grid__thead-group\">\n <ng-container *ngFor=\"let child of column.children\">\n <igx-grid-header-group *ngIf=\"!child.hidden\" class=\"igx-grid__thead-subgroup\"\n [column]=\"child\"\n [gridID]=\"child.grid.id\"\n [style.min-width]=\"grid.getHeaderGroupWidth(child)\"\n [style.flex-basis]=\"grid.getHeaderGroupWidth(child)\">\n </igx-grid-header-group>\n </ng-container>\n </div>\n <span *ngIf=\"grid.hasMovableColumns\" class=\"igx-grid__th-drop-indicator-right\"></span>\n</ng-container>\n\n<ng-container *ngIf=\"!column.columnGroup\">\n <span *ngIf=\"grid.hasMovableColumns\" class=\"igx-grid__th-drop-indicator-left\"></span>\n <igx-grid-header [igxColumnMovingDrag]=\"column\" [ghostHost]=\"grid.outletDirective.nativeElement\" [attr.droppable]=\"true\" [igxColumnMovingDrop]=\"column\" [gridID]=\"column.grid.id\" [column]=\"column\"></igx-grid-header>\n <igx-grid-filtering-cell *ngIf=\"grid.allowFiltering && grid.filterMode == 'quickFilter'\" [column]=\"column\" [attr.draggable]=\"false\"></igx-grid-filtering-cell>\n <span *ngIf=\"!column.columnGroup && column.resizable\" class=\"igx-grid__th-resize-handle\"\n [igxResizeHandle]=\"column\"\n [attr.draggable]=\"false\"\n [style.cursor]=\"colResizingService.resizeCursor\">\n </span>\n <span *ngIf=\"grid.hasMovableColumns\" class=\"igx-grid__th-drop-indicator-right\"></span>\n</ng-container>\n" }), __metadata("design:paramtypes", [ChangeDetectorRef, GridBaseAPIService, ElementRef, IgxColumnResizingService, IgxFilteringService]) ], IgxGridHeaderGroupComponent); export { IgxGridHeaderGroupComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9oZWFkZXJzL2dyaWQtaGVhZGVyLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixPQUFPLEVBQ1AsVUFBVSxFQUNWLFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNoRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBRXJCOztHQUVHO0FBT0gsSUFBYSwyQkFBMkIsbUNBQXhDLE1BQWEsMkJBQTJCO0lBd0xwQyxZQUFvQixHQUFzQixFQUN2QixPQUE0RCxFQUM1RCxPQUFtQixFQUNuQixrQkFBNEMsRUFDNUMsZ0JBQXFDO1FBSnBDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQXFEO1FBQzVELFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsdUJBQWtCLEdBQWxCLGtCQUFr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OzsyREFDYztBQU10QjtJQURDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQzs4QkFDZixzQkFBc0I7K0RBQUM7QUFNMUM7SUFEQyxTQUFTLENBQUMsNkJBQTZCLENBQUM7OEJBQ3RCLDZCQUE2QjsrREFBQztBQU1qRDtJQURDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsNkJBQTJCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSw2QkFBMkIsRUFBRSxDQUFDOzhCQUNsRixTQUFTOzZEQUE4QjtBQWV4RDtJQURDLFdBQVcsQ0FBQyxPQUFPLENBQUM7OzsrREFvQnBCO0FBTUQ7SUFEQyxXQUFXLENBQUMsZUFBZSxDQUFDOzs7eURBTTVCO0FBMkJEO0lBREMsV0FBVyxDQUFDLGVBQWUsQ0FBQzs7O29FQUc1QjtBQW9DRDtJQURDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7Ozs4REFJckM7QUFsTFEsMkJBQTJCO0lBTnZDLFNBQVMsQ0FBQztRQUNQLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1FBQy9DLG1CQUFtQixFQUFFLEtBQUs7UUFDMUIsUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxxM0lBQWlEO0tBQ3BELENBQUM7cUNBeUwyQixpQkFBaUI7UUFDZCxrQkFBa0I7UUFDbEIsVUFBVTtRQUNDLHdCQUF3QjtRQUMxQixtQkFBbUI7R0E1TC9DLDJCQUEyQixDQTZMdkM7U0E3TFksMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgZm9yd2FyZFJlZixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IElneEZpbHRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2dyaWQtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzaXppbmcvcmVzaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZEZpbHRlcmluZ0NlbGxDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXJpbmcvYmFzZS9ncmlkLWZpbHRlcmluZy1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpc0lFIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cbmNvbnN0IFpfSU5ERVggPSA5OTk5O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgc2VsZWN0b3I6ICdpZ3gtZ3JpZC1oZWFkZXItZ3JvdXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLWhlYWRlci1ncm91cC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjayB7XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLi1tcy1ncmlkLXJvdy1zcGFuJylcbiAgICBnZXQgZ3JpZFJvd1NwYW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmdyaWRSb3dTcGFuO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuLW1zLWdyaWQtY29sdW1uLXNwYW4nKVxuICAgIGdldCBncmlkQ29sdW1uU3BhbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZ3JpZENvbHVtblNwYW47XG4gICAgfVxuXG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmdyaWQtcm93LWVuZCcpXG4gICAgZ2V0IHJvd0VuZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4ucm93RW5kO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuZ3JpZC1jb2x1bW4tZW5kJylcbiAgICBnZXQgY29sRW5kKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5jb2xFbmQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS4tbXMtZ3JpZC1yb3cnKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuZ3JpZC1yb3ctc3RhcnQnKVxuICAgIGdldCByb3dTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4ucm93U3RhcnQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS4tbXMtZ3JpZC1jb2x1bW4nKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuZ3JpZC1jb2x1bW4tc3RhcnQnKVxuICAgIGdldCBjb2xTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uY29sU3RhcnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sdW1uIG9mIHRoZSBoZWFkZXIgZ3JvdXAuXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogSWd4Q29sdW1uQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYGlkYCBvZiB0aGUgZ3JpZCBpbiB3aGljaCB0aGUgaGVhZGVyIGdyb3VwIGlzIHN0b3JlZC5cbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ3JpZElEOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChJZ3hHcmlkSGVhZGVyQ29tcG9uZW50KVxuICAgIHB1YmxpYyBoZWFkZXJDZWxsOiBJZ3hHcmlkSGVhZGVyQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4R3JpZEZpbHRlcmluZ0NlbGxDb21wb25lbnQpXG4gICAgcHVibGljIGZpbHRlckNlbGw6IElneEdyaWRGaWx0ZXJpbmdDZWxsQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnQpLCB7IHJlYWQ6IElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBjaGlsZHJlbjogUXVlcnlMaXN0PElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgaGVhZGVyIGdyb3VwLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgd2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ2V0SGVhZGVyR3JvdXBXaWR0aCh0aGlzLmNvbHVtbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3R5bGUgY2xhc3NlcyBvZiB0aGUgaGVhZGVyIGdyb3VwLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBnZXQgc3R5bGVDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDbGFzc2VzID0gW1xuICAgICAgICAgICAgJ2lneC1ncmlkX190aGVhZC1pdGVtJyxcbiAgICAgICAgICAgIHRoaXMuY29sdW1uLmhlYWRlckdyb3VwQ2xhc3Nlc1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHtcbiAgICAgICAgICAgICdpZ3gtZ3JpZF9fdGgtLXBpbm5lZCc6IHRoaXMuaXNQaW5uZWQsXG4gICAgICAgICAgICAnaWd4LWdyaWRfX3RoLS1waW5uZWQtbGFzdCc6IHRoaXMuaXNMYXN0UGlubmVkLFxuICAgICAgICAgICAgJ2lneC1ncmlkX19kcmFnLWNvbC1oZWFkZXInOiB0aGlzLmlzSGVhZGVyRHJhZ2dlZCxcbiAgICAgICAgICAgICdpZ3gtZ3JpZF9fdGgtLWZpbHRlcmluZyc6IHRoaXMuaXNGaWx0ZXJlZFxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIG9mIE9iamVjdC5rZXlzKGNsYXNzTGlzdCkpIHtcbiAgICAgICAgICAgIGlmIChjbGFzc0xpc3RbY2xhc3NOYW1lXSkge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRDbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdENsYXNzZXMuam9pbignICcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnotaW5kZXgnKVxuICAgIGdldCB6SW5kZXgoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW4ucGlubmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWl9JTkRFWCAtIHRoaXMuZ3JpZC5waW5uZWRDb2x1bW5zLmluZGV4T2YodGhpcy5jb2x1bW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGdyaWQgb2YgdGhlIGhlYWRlciBncm91cC5cbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGdyaWQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZEFQSS5ncmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgaGVhZGVyIGdyb3VwIGJlbG9uZ3MgdG8gYSBjb2x1bW4gdGhhdCBpcyBmaWx0ZXJlZC5cbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGlzRmlsdGVyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZmlsdGVyZWRDb2x1bW4gPT09IHRoaXMuY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgaGVhZGVyIGdyb3VwIGlzIHN0b3JlZCBpbiB0aGUgbGFzdCBjb2x1bW4gaW4gdGhlIHBpbm5lZCBhcmVhLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgaXNMYXN0UGlubmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZ3JpZC5oYXNDb2x1bW5MYXlvdXRzID8gdGhpcy5jb2x1bW4uaXNMYXN0UGlubmVkIDogZmFsc2U7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JylcbiAgICBnZXQgZ3JvdXBEaXNwbGF5U3R5bGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5oYXNDb2x1bW5MYXlvdXRzICYmIHRoaXMuY29sdW1uLmNoaWxkcmVuICYmICFpc0lFKCkgPyAnZmxleCcgOiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGhlYWRlciBncm91cCBpcyBzdG9yZWQgaW4gYSBwaW5uZWQgY29sdW1uLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgaXNQaW5uZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5waW5uZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBoZWFkZXIgZ3JvdXAgYmVsb25ncyB0byBhIGNvbHVtbiB0aGF0IGlzIG1vdmVkLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgaXNIZWFkZXJEcmFnZ2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmRyYWdnZWRDb2x1bW4gPT09ICB0aGlzLmNvbHVtbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhhc0xhc3RQaW5uZWRDaGlsZENvbHVtbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmFsbENoaWxkcmVuLnNvbWUoY2hpbGQgPT4gY2hpbGQuaXNMYXN0UGlubmVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Nb3VzZURvd24oZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gaGFjayBmb3IgcHJldmVudGluZyB0ZXh0IHNlbGVjdGlvbiBpbiBJRSBhbmQgRWRnZSB3aGlsZSBkcmFnZ2luZyB0aGUgcmVzaXplclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgICBwdWJsaWMgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+LFxuICAgICAgICAgICAgICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb2xSZXNpemluZ1NlcnZpY2U6IElneENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgICAgICAgICBwdWJsaWMgZmlsdGVyaW5nU2VydmljZTogSWd4RmlsdGVyaW5nU2VydmljZSkgeyB9XG59XG4iXX0=