@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
234 lines • 26.6 kB
JavaScript
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=