@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
315 lines • 31 kB
JavaScript
import { __decorate, __metadata, __values } 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';
var Z_INDEX = 9999;
/**
* @hidden
*/
var IgxGridHeaderGroupComponent = /** @class */ (function () {
function IgxGridHeaderGroupComponent(cdr, gridAPI, element, colResizingService, filteringService) {
this.cdr = cdr;
this.gridAPI = gridAPI;
this.element = element;
this.colResizingService = colResizingService;
this.filteringService = filteringService;
}
IgxGridHeaderGroupComponent_1 = IgxGridHeaderGroupComponent;
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "gridRowSpan", {
get: function () {
return this.column.gridRowSpan;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "gridColumnSpan", {
get: function () {
return this.column.gridColumnSpan;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "rowEnd", {
get: function () {
return this.column.rowEnd;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "colEnd", {
get: function () {
return this.column.colEnd;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "rowStart", {
get: function () {
return this.column.rowStart;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "colStart", {
get: function () {
return this.column.colStart;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "width", {
/**
* Gets the width of the header group.
* @memberof IgxGridHeaderGroupComponent
*/
get: function () {
return this.grid.getHeaderGroupWidth(this.column);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "styleClasses", {
/**
* Gets the style classes of the header group.
* @memberof IgxGridHeaderGroupComponent
*/
get: function () {
var e_1, _a;
var defaultClasses = [
'igx-grid__thead-item',
this.column.headerGroupClasses
];
var 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
};
try {
for (var _b = __values(Object.keys(classList)), _c = _b.next(); !_c.done; _c = _b.next()) {
var className = _c.value;
if (classList[className]) {
defaultClasses.push(className);
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
return defaultClasses.join(' ');
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "zIndex", {
/**
* @hidden
*/
get: function () {
if (!this.column.pinned) {
return null;
}
return Z_INDEX - this.grid.pinnedColumns.indexOf(this.column);
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "grid", {
/**
* Gets the grid of the header group.
* @memberof IgxGridHeaderGroupComponent
*/
get: function () {
return this.gridAPI.grid;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "isFiltered", {
/**
* Gets whether the header group belongs to a column that is filtered.
* @memberof IgxGridHeaderGroupComponent
*/
get: function () {
return this.filteringService.filteredColumn === this.column;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "isLastPinned", {
/**
* Gets whether the header group is stored in the last column in the pinned area.
* @memberof IgxGridHeaderGroupComponent
*/
get: function () {
return !this.grid.hasColumnLayouts ? this.column.isLastPinned : false;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "groupDisplayStyle", {
get: function () {
return this.grid.hasColumnLayouts && this.column.children && !isIE() ? 'flex' : '';
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "isPinned", {
/**
* Gets whether the header group is stored in a pinned column.
* @memberof IgxGridHeaderGroupComponent
*/
get: function () {
return this.column.pinned;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "isHeaderDragged", {
/**
* Gets whether the header group belongs to a column that is moved.
* @memberof IgxGridHeaderGroupComponent
*/
get: function () {
return this.grid.draggedColumn === this.column;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "hasLastPinnedChildColumn", {
/**
* @hidden
*/
get: function () {
return this.column.allChildren.some(function (child) { return child.isLastPinned; });
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "height", {
/**
* @hidden
*/
get: function () {
return this.element.nativeElement.getBoundingClientRect().height;
},
enumerable: true,
configurable: true
});
/**
* @hidden
*/
IgxGridHeaderGroupComponent.prototype.onMouseDown = function (event) {
// hack for preventing text selection in IE and Edge while dragging the resizer
event.preventDefault();
};
IgxGridHeaderGroupComponent.prototype.ngDoCheck = function () {
this.cdr.markForCheck();
};
var IgxGridHeaderGroupComponent_1;
IgxGridHeaderGroupComponent.ctorParameters = function () { return [
{ 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(function () { return 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);
return IgxGridHeaderGroupComponent;
}());
export { IgxGridHeaderGroupComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9oZWFkZXJzL2dyaWQtaGVhZGVyLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxVQUFVLEVBQ1YsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUd4QyxJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFFckI7O0dBRUc7QUFPSDtJQXdMSSxxQ0FBb0IsR0FBc0IsRUFDdkIsT0FBNEQsRUFDNUQsT0FBbUIsRUFDbkIsa0JBQTRDLEVBQzVDLGdCQUFxQztRQUpwQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFxRDtRQUM1RCxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBMEI7UUFDNUMscUJBQWdCLEdBQWhCLGdCQUFn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QzFCLG1CQUFtQjtPQTVML0MsMkJBQTJCLENBNkx2QztJQUFELGtDQUFDO0NBQUEsQUE3TEQsSUE2TEM7U0E3TFksMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgVmlld0NoaWxkLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgZm9yd2FyZFJlZixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IElneEZpbHRlcmluZ1NlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2dyaWQtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzaXppbmcvcmVzaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hHcmlkSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4R3JpZEZpbHRlcmluZ0NlbGxDb21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXJpbmcvYmFzZS9ncmlkLWZpbHRlcmluZy1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpc0lFIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cbmNvbnN0IFpfSU5ERVggPSA5OTk5O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgc2VsZWN0b3I6ICdpZ3gtZ3JpZC1oZWFkZXItZ3JvdXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLWhlYWRlci1ncm91cC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgRG9DaGVjayB7XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLi1tcy1ncmlkLXJvdy1zcGFuJylcbiAgICBnZXQgZ3JpZFJvd1NwYW4oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmdyaWRSb3dTcGFuO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuLW1zLWdyaWQtY29sdW1uLXNwYW4nKVxuICAgIGdldCBncmlkQ29sdW1uU3BhbigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZ3JpZENvbHVtblNwYW47XG4gICAgfVxuXG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmdyaWQtcm93LWVuZCcpXG4gICAgZ2V0IHJvd0VuZCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4ucm93RW5kO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuZ3JpZC1jb2x1bW4tZW5kJylcbiAgICBnZXQgY29sRW5kKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5jb2xFbmQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS4tbXMtZ3JpZC1yb3cnKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuZ3JpZC1yb3ctc3RhcnQnKVxuICAgIGdldCByb3dTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4ucm93U3RhcnQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS4tbXMtZ3JpZC1jb2x1bW4nKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuZ3JpZC1jb2x1bW4tc3RhcnQnKVxuICAgIGdldCBjb2xTdGFydCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uY29sU3RhcnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sdW1uIG9mIHRoZSBoZWFkZXIgZ3JvdXAuXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogSWd4Q29sdW1uQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYGlkYCBvZiB0aGUgZ3JpZCBpbiB3aGljaCB0aGUgaGVhZGVyIGdyb3VwIGlzIHN0b3JlZC5cbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ3JpZElEOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChJZ3hHcmlkSGVhZGVyQ29tcG9uZW50KVxuICAgIHB1YmxpYyBoZWFkZXJDZWxsOiBJZ3hHcmlkSGVhZGVyQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4R3JpZEZpbHRlcmluZ0NlbGxDb21wb25lbnQpXG4gICAgcHVibGljIGZpbHRlckNlbGw6IElneEdyaWRGaWx0ZXJpbmdDZWxsQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnQpLCB7IHJlYWQ6IElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBjaGlsZHJlbjogUXVlcnlMaXN0PElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgaGVhZGVyIGdyb3VwLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgd2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ2V0SGVhZGVyR3JvdXBXaWR0aCh0aGlzLmNvbHVtbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3R5bGUgY2xhc3NlcyBvZiB0aGUgaGVhZGVyIGdyb3VwLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBnZXQgc3R5bGVDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDbGFzc2VzID0gW1xuICAgICAgICAgICAgJ2lneC1ncmlkX190aGVhZC1pdGVtJyxcbiAgICAgICAgICAgIHRoaXMuY29sdW1uLmhlYWRlckdyb3VwQ2xhc3Nlc1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHtcbiAgICAgICAgICAgICdpZ3gtZ3JpZF9fdGgtLXBpbm5lZCc6IHRoaXMuaXNQaW5uZWQsXG4gICAgICAgICAgICAnaWd4LWdyaWRfX3RoLS1waW5uZWQtbGFzdCc6IHRoaXMuaXNMYXN0UGlubmVkLFxuICAgICAgICAgICAgJ2lneC1ncmlkX19kcmFnLWNvbC1oZWFkZXInOiB0aGlzLmlzSGVhZGVyRHJhZ2dlZCxcbiAgICAgICAgICAgICdpZ3gtZ3JpZF9fdGgtLWZpbHRlcmluZyc6IHRoaXMuaXNGaWx0ZXJlZFxuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIG9mIE9iamVjdC5rZXlzKGNsYXNzTGlzdCkpIHtcbiAgICAgICAgICAgIGlmIChjbGFzc0xpc3RbY2xhc3NOYW1lXSkge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRDbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVmYXVsdENsYXNzZXMuam9pbignICcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnotaW5kZXgnKVxuICAgIGdldCB6SW5kZXgoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW4ucGlubmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWl9JTkRFWCAtIHRoaXMuZ3JpZC5waW5uZWRDb2x1bW5zLmluZGV4T2YodGhpcy5jb2x1bW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGdyaWQgb2YgdGhlIGhlYWRlciBncm91cC5cbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGdyaWQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZEFQSS5ncmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgaGVhZGVyIGdyb3VwIGJlbG9uZ3MgdG8gYSBjb2x1bW4gdGhhdCBpcyBmaWx0ZXJlZC5cbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGlzRmlsdGVyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZmlsdGVyZWRDb2x1bW4gPT09IHRoaXMuY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgaGVhZGVyIGdyb3VwIGlzIHN0b3JlZCBpbiB0aGUgbGFzdCBjb2x1bW4gaW4gdGhlIHBpbm5lZCBhcmVhLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgaXNMYXN0UGlubmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZ3JpZC5oYXNDb2x1bW5MYXlvdXRzID8gdGhpcy5jb2x1bW4uaXNMYXN0UGlubmVkIDogZmFsc2U7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JylcbiAgICBnZXQgZ3JvdXBEaXNwbGF5U3R5bGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5oYXNDb2x1bW5MYXlvdXRzICYmIHRoaXMuY29sdW1uLmNoaWxkcmVuICYmICFpc0lFKCkgPyAnZmxleCcgOiAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGhlYWRlciBncm91cCBpcyBzdG9yZWQgaW4gYSBwaW5uZWQgY29sdW1uLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgaXNQaW5uZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5waW5uZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB3aGV0aGVyIHRoZSBoZWFkZXIgZ3JvdXAgYmVsb25ncyB0byBhIGNvbHVtbiB0aGF0IGlzIG1vdmVkLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgaXNIZWFkZXJEcmFnZ2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmRyYWdnZWRDb2x1bW4gPT09ICB0aGlzLmNvbHVtbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhhc0xhc3RQaW5uZWRDaGlsZENvbHVtbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmFsbENoaWxkcmVuLnNvbWUoY2hpbGQgPT4gY2hpbGQuaXNMYXN0UGlubmVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25Nb3VzZURvd24oZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gaGFjayBmb3IgcHJldmVudGluZyB0ZXh0IHNlbGVjdGlvbiBpbiBJRSBhbmQgRWRnZSB3aGlsZSBkcmFnZ2luZyB0aGUgcmVzaXplclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgICBwdWJsaWMgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+LFxuICAgICAgICAgICAgICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb2xSZXNpemluZ1NlcnZpY2U6IElneENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgICAgICAgICBwdWJsaWMgZmlsdGVyaW5nU2VydmljZTogSWd4RmlsdGVyaW5nU2VydmljZSkgeyB9XG59XG4iXX0=