UNPKG

igniteui-angular

Version:

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

302 lines • 23.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, HostBinding, Input, ViewChild, QueryList, ViewChildren, forwardRef, ChangeDetectionStrategy, ChangeDetectorRef, ElementRef, HostListener } from '@angular/core'; import { IgxColumnComponent } from './column.component'; import { IgxFilteringService } from './filtering/grid-filtering.service'; import { GridBaseAPIService } from './api.service'; import { IgxColumnResizingService } from './grid-column-resizing.service'; import { IgxGridHeaderComponent } from './grid-header.component'; import { IgxGridFilteringCellComponent } from './filtering/grid-filtering-cell.component'; /** @type {?} */ 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; } Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "width", { /** * Gets the width of the header group. * @memberof IgxGridHeaderGroupComponent */ get: /** * Gets the width of the header group. * \@memberof IgxGridHeaderGroupComponent * @return {?} */ 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: /** * Gets the style classes of the header group. * \@memberof IgxGridHeaderGroupComponent * @return {?} */ function () { /** @type {?} */ var defaultClasses = [ 'igx-grid__thead-item', this.column.headerGroupClasses ]; /** @type {?} */ 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 }; Object.entries(classList).forEach(function (_a) { var _b = tslib_1.__read(_a, 2), className = _b[0], value = _b[1]; if (value) { defaultClasses.push(className); } }); return defaultClasses.join(' '); }, enumerable: true, configurable: true }); Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "zIndex", { /** * @hidden */ get: /** * @hidden * @return {?} */ 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: /** * Gets the grid of the header group. * \@memberof IgxGridHeaderGroupComponent * @return {?} */ 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: /** * Gets whether the header group belongs to a column that is filtered. * \@memberof IgxGridHeaderGroupComponent * @return {?} */ 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: /** * Gets whether the header group is stored in the last column in the pinned area. * \@memberof IgxGridHeaderGroupComponent * @return {?} */ function () { return this.column.isLastPinned; }, enumerable: true, configurable: true }); Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "isPinned", { /** * Gets whether the header group is stored in a pinned column. * @memberof IgxGridHeaderGroupComponent */ get: /** * Gets whether the header group is stored in a pinned column. * \@memberof IgxGridHeaderGroupComponent * @return {?} */ 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: /** * Gets whether the header group belongs to a column that is moved. * \@memberof IgxGridHeaderGroupComponent * @return {?} */ function () { return this.grid.draggedColumn === this.column; }, enumerable: true, configurable: true }); Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "hasLastPinnedChildColumn", { /** * @hidden */ get: /** * @hidden * @return {?} */ function () { return this.column.allChildren.some(function (child) { return child.isLastPinned; }); }, enumerable: true, configurable: true }); Object.defineProperty(IgxGridHeaderGroupComponent.prototype, "height", { /** * @hidden */ get: /** * @hidden * @return {?} */ function () { return this.element.nativeElement.getBoundingClientRect().height; }, enumerable: true, configurable: true }); /** * @hidden */ /** * @hidden * @param {?} event * @return {?} */ IgxGridHeaderGroupComponent.prototype.onMouseDown = /** * @hidden * @param {?} event * @return {?} */ function (event) { // hack for preventing text selection in IE and Edge while dragging the resizer event.preventDefault(); }; /** * @return {?} */ IgxGridHeaderGroupComponent.prototype.ngDoCheck = /** * @return {?} */ function () { this.cdr.markForCheck(); }; IgxGridHeaderGroupComponent.decorators = [ { type: Component, args: [{ changeDetection: ChangeDetectionStrategy.OnPush, preserveWhitespaces: false, selector: 'igx-grid-header-group', template: "<ng-container *ngIf=\"column.columnGroup\">\n <span *ngIf=\"grid.hasMovableColumns\" class=\"igx-grid__th-drop-indicator-left\"></span>\n <div class=\"igx-grid__thead-title\"\n [ngClass]=\"{'igx-grid__th--pinned-last': hasLastPinnedChildColumn}\"\n [igxColumnMovingDrag]=\"column\"\n [dragGhostHost]=\"grid.outletDirective.nativeElement\"\n [attr.droppable]=\"true\"\n [igxColumnMovingDrop]=\"column\">{{ column.header }}</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.px]=\"grid.getHeaderGroupWidth(child)\"\n [style.flex-basis.px]=\"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\" [dragGhostHost]=\"grid.igxFilteringOverlayOutlet\" [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" }] } ]; /** @nocollapse */ IgxGridHeaderGroupComponent.ctorParameters = function () { return [ { type: ChangeDetectorRef }, { type: GridBaseAPIService }, { type: ElementRef }, { type: IgxColumnResizingService }, { type: IgxFilteringService } ]; }; IgxGridHeaderGroupComponent.propDecorators = { column: [{ type: Input }], gridID: [{ type: Input }], headerCell: [{ type: ViewChild, args: [IgxGridHeaderComponent,] }], filterCell: [{ type: ViewChild, args: [IgxGridFilteringCellComponent,] }], children: [{ type: ViewChildren, args: [forwardRef(function () { return IgxGridHeaderGroupComponent; }), { read: IgxGridHeaderGroupComponent },] }], width: [{ type: HostBinding, args: ['style.min-width',] }, { type: HostBinding, args: ['style.flex-basis',] }], styleClasses: [{ type: HostBinding, args: ['class',] }], zIndex: [{ type: HostBinding, args: ['style.z-index',] }], onMouseDown: [{ type: HostListener, args: ['mousedown', ['$event'],] }] }; return IgxGridHeaderGroupComponent; }()); export { IgxGridHeaderGroupComponent }; if (false) { /** * Gets the column of the header group. * \@memberof IgxGridHeaderGroupComponent * @type {?} */ IgxGridHeaderGroupComponent.prototype.column; /** * Gets the `id` of the grid in which the header group is stored. * \@memberof IgxGridHeaderGroupComponent * @type {?} */ IgxGridHeaderGroupComponent.prototype.gridID; /** * @hidden * @type {?} */ IgxGridHeaderGroupComponent.prototype.headerCell; /** * @hidden * @type {?} */ IgxGridHeaderGroupComponent.prototype.filterCell; /** * @hidden * @type {?} */ IgxGridHeaderGroupComponent.prototype.children; /** * @type {?} * @private */ IgxGridHeaderGroupComponent.prototype.cdr; /** @type {?} */ IgxGridHeaderGroupComponent.prototype.gridAPI; /** * @type {?} * @private */ IgxGridHeaderGroupComponent.prototype.element; /** @type {?} */ IgxGridHeaderGroupComponent.prototype.colResizingService; /** @type {?} */ IgxGridHeaderGroupComponent.prototype.filteringService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9ncmlkLWhlYWRlci1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLHVCQUF1QixFQUN2QixpQkFBaUIsRUFFakIsVUFBVSxFQUNWLFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7O0lBRXBGLE9BQU8sR0FBRyxJQUFJOzs7O0FBS3BCO0lBMEpJLHFDQUFvQixHQUFzQixFQUN2QixPQUFxRSxFQUNwRSxPQUFtQixFQUNwQixrQkFBNEMsRUFDNUMsZ0JBQXFDO1FBSnBDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQThEO1FBQ3BFLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDcEIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUEwQjtRQUM1QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXFCO0lBQUksQ0FBQztJQWxIN0Qsc0JBRUksOENBQUs7UUFOVDs7O1dBR0c7Ozs7OztRQUNIO1lBR0ksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxDQUFDOzs7T0FBQTtJQU1ELHNCQUNJLHFEQUFZO1FBTGhCOzs7V0FHRzs7Ozs7O1FBQ0g7O2dCQUVVLGNBQWMsR0FBRztnQkFDbkIsc0JBQXNCO2dCQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQjthQUNqQzs7Z0JBRUssU0FBUyxHQUFHO2dCQUNkLHNCQUFzQixFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUNyQywyQkFBMkIsRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDOUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLGVBQWU7Z0JBQ2pELHlCQUF5QixFQUFFLElBQUksQ0FBQyxVQUFVO2FBQzdDO1lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQyxFQUFrQjtvQkFBbEIsMEJBQWtCLEVBQWpCLGlCQUFTLEVBQUUsYUFBSztnQkFDaEQsSUFBSSxLQUFLLEVBQUU7b0JBQ1AsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDbEM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQyxDQUFDOzs7T0FBQTtJQUtELHNCQUNJLCtDQUFNO1FBSlY7O1dBRUc7Ozs7O1FBQ0g7WUFFSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxPQUFPLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xFLENBQUM7OztPQUFBO0lBTUQsc0JBQUksNkNBQUk7UUFKUjs7O1dBR0c7Ozs7OztRQUNIO1lBQ0ksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUM3QixDQUFDOzs7T0FBQTtJQU1ELHNCQUFJLG1EQUFVO1FBSmQ7OztXQUdHOzs7Ozs7UUFDSDtZQUNJLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2hFLENBQUM7OztPQUFBO0lBTUQsc0JBQUkscURBQVk7UUFKaEI7OztXQUdHOzs7Ozs7UUFDSDtZQUNJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDcEMsQ0FBQzs7O09BQUE7SUFNRCxzQkFBSSxpREFBUTtRQUpaOzs7V0FHRzs7Ozs7O1FBQ0g7WUFDSSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzlCLENBQUM7OztPQUFBO0lBTUQsc0JBQUksd0RBQWU7UUFKbkI7OztXQUdHOzs7Ozs7UUFDSDtZQUNJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNwRCxDQUFDOzs7T0FBQTtJQUtELHNCQUFJLGlFQUF3QjtRQUg1Qjs7V0FFRzs7Ozs7UUFDSDtZQUNJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSyxDQUFDLFlBQVksRUFBbEIsQ0FBa0IsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7OztPQUFBO0lBS0Qsc0JBQUksK0NBQU07UUFIVjs7V0FFRzs7Ozs7UUFDSDtZQUNJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDckUsQ0FBQzs7O09BQUE7SUFFRDs7T0FFRzs7Ozs7O0lBRUksaURBQVc7Ozs7O0lBRGxCLFVBQ21CLEtBQUs7UUFDcEIsK0VBQStFO1FBQy9FLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMzQixDQUFDOzs7O0lBRU0sK0NBQVM7OztJQUFoQjtRQUNJLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQzs7Z0JBeEpKLFNBQVMsU0FBQztvQkFDUCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsbUJBQW1CLEVBQUUsS0FBSztvQkFDMUIsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsNGhFQUFpRDtpQkFDcEQ7Ozs7Z0JBdkJHLGlCQUFpQjtnQkFPWixrQkFBa0I7Z0JBTHZCLFVBQVU7Z0JBT0wsd0JBQXdCO2dCQUh4QixtQkFBbUI7Ozt5QkF3QnZCLEtBQUs7eUJBT0wsS0FBSzs2QkFNTCxTQUFTLFNBQUMsc0JBQXNCOzZCQU1oQyxTQUFTLFNBQUMsNkJBQTZCOzJCQU12QyxZQUFZLFNBQUMsVUFBVSxDQUFDLGNBQU0sT0FBQSwyQkFBMkIsRUFBM0IsQ0FBMkIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLDJCQUEyQixFQUFFO3dCQU9qRyxXQUFXLFNBQUMsaUJBQWlCLGNBQzdCLFdBQVcsU0FBQyxrQkFBa0I7K0JBUzlCLFdBQVcsU0FBQyxPQUFPO3lCQXlCbkIsV0FBVyxTQUFDLGVBQWU7OEJBaUUzQixZQUFZLFNBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDOztJQWV6QyxrQ0FBQztDQUFBLEFBL0pELElBK0pDO1NBekpZLDJCQUEyQjs7Ozs7OztJQU1wQyw2Q0FDa0M7Ozs7OztJQU1sQyw2Q0FDc0I7Ozs7O0lBS3RCLGlEQUMwQzs7Ozs7SUFLMUMsaURBQ2lEOzs7OztJQUtqRCwrQ0FDd0Q7Ozs7O0lBb0g1QywwQ0FBOEI7O0lBQzlCLDhDQUE0RTs7Ozs7SUFDNUUsOENBQTJCOztJQUMzQix5REFBbUQ7O0lBQ25ELHVEQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIGZvcndhcmRSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hGaWx0ZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRCYXNlQ29tcG9uZW50LCBJR3JpZERhdGFCaW5kYWJsZSB9IGZyb20gJy4vZ3JpZC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSBmcm9tICcuL2dyaWQtY29sdW1uLXJlc2l6aW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRGaWx0ZXJpbmdDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9maWx0ZXJpbmcvZ3JpZC1maWx0ZXJpbmctY2VsbC5jb21wb25lbnQnO1xuXG5jb25zdCBaX0lOREVYID0gOTk5OTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtaGVhZGVyLWdyb3VwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1oZWFkZXItZ3JvdXAuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIERvQ2hlY2sge1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sdW1uIG9mIHRoZSBoZWFkZXIgZ3JvdXAuXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbjogSWd4Q29sdW1uQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgYGlkYCBvZiB0aGUgZ3JpZCBpbiB3aGljaCB0aGUgaGVhZGVyIGdyb3VwIGlzIHN0b3JlZC5cbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ3JpZElEOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZChJZ3hHcmlkSGVhZGVyQ29tcG9uZW50KVxuICAgIHB1YmxpYyBoZWFkZXJDZWxsOiBJZ3hHcmlkSGVhZGVyQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4R3JpZEZpbHRlcmluZ0NlbGxDb21wb25lbnQpXG4gICAgcHVibGljIGZpbHRlckNlbGw6IElneEdyaWRGaWx0ZXJpbmdDZWxsQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnQpLCB7IHJlYWQ6IElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudCB9KVxuICAgIHB1YmxpYyBjaGlsZHJlbjogUXVlcnlMaXN0PElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudD47XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgaGVhZGVyIGdyb3VwLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1pbi13aWR0aCcpXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5mbGV4LWJhc2lzJylcbiAgICBnZXQgd2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZ2V0SGVhZGVyR3JvdXBXaWR0aCh0aGlzLmNvbHVtbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc3R5bGUgY2xhc3NlcyBvZiB0aGUgaGVhZGVyIGdyb3VwLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBnZXQgc3R5bGVDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRDbGFzc2VzID0gW1xuICAgICAgICAgICAgJ2lneC1ncmlkX190aGVhZC1pdGVtJyxcbiAgICAgICAgICAgIHRoaXMuY29sdW1uLmhlYWRlckdyb3VwQ2xhc3Nlc1xuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHtcbiAgICAgICAgICAgICdpZ3gtZ3JpZF9fdGgtLXBpbm5lZCc6IHRoaXMuaXNQaW5uZWQsXG4gICAgICAgICAgICAnaWd4LWdyaWRfX3RoLS1waW5uZWQtbGFzdCc6IHRoaXMuaXNMYXN0UGlubmVkLFxuICAgICAgICAgICAgJ2lneC1ncmlkX19kcmFnLWNvbC1oZWFkZXInOiB0aGlzLmlzSGVhZGVyRHJhZ2dlZCxcbiAgICAgICAgICAgICdpZ3gtZ3JpZF9fdGgtLWZpbHRlcmluZyc6IHRoaXMuaXNGaWx0ZXJlZFxuICAgICAgICB9O1xuXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNsYXNzTGlzdCkuZm9yRWFjaCgoW2NsYXNzTmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q2xhc3Nlcy5wdXNoKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGVmYXVsdENsYXNzZXMuam9pbignICcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLnotaW5kZXgnKVxuICAgIGdldCB6SW5kZXgoKSB7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW4ucGlubmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWl9JTkRFWCAtIHRoaXMuZ3JpZC5waW5uZWRDb2x1bW5zLmluZGV4T2YodGhpcy5jb2x1bW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGdyaWQgb2YgdGhlIGhlYWRlciBncm91cC5cbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGdyaWQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZEFQSS5ncmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgaGVhZGVyIGdyb3VwIGJlbG9uZ3MgdG8gYSBjb2x1bW4gdGhhdCBpcyBmaWx0ZXJlZC5cbiAgICAgKiBAbWVtYmVyb2YgSWd4R3JpZEhlYWRlckdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGlzRmlsdGVyZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmluZ1NlcnZpY2UuZmlsdGVyZWRDb2x1bW4gPT09IHRoaXMuY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgaGVhZGVyIGdyb3VwIGlzIHN0b3JlZCBpbiB0aGUgbGFzdCBjb2x1bW4gaW4gdGhlIHBpbm5lZCBhcmVhLlxuICAgICAqIEBtZW1iZXJvZiBJZ3hHcmlkSGVhZGVyR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgaXNMYXN0UGlubmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uaXNMYXN0UGlubmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgaGVhZGVyIGdyb3VwIGlzIHN0b3JlZCBpbiBhIHBpbm5lZCBjb2x1bW4uXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCBpc1Bpbm5lZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLnBpbm5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGhlYWRlciBncm91cCBiZWxvbmdzIHRvIGEgY29sdW1uIHRoYXQgaXMgbW92ZWQuXG4gICAgICogQG1lbWJlcm9mIElneEdyaWRIZWFkZXJHcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCBpc0hlYWRlckRyYWdnZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZHJhZ2dlZENvbHVtbiA9PT0gIHRoaXMuY29sdW1uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaGFzTGFzdFBpbm5lZENoaWxkQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uYWxsQ2hpbGRyZW4uc29tZShjaGlsZCA9PiBjaGlsZC5pc0xhc3RQaW5uZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbk1vdXNlRG93bihldmVudCk6IHZvaWQge1xuICAgICAgICAvLyBoYWNrIGZvciBwcmV2ZW50aW5nIHRleHQgc2VsZWN0aW9uIGluIElFIGFuZCBFZGdlIHdoaWxlIGRyYWdnaW5nIHRoZSByZXNpemVyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICAgIHB1YmxpYyBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VDb21wb25lbnQgJiBJR3JpZERhdGFCaW5kYWJsZT4sXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHB1YmxpYyBjb2xSZXNpemluZ1NlcnZpY2U6IElneENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgICAgICAgICBwdWJsaWMgZmlsdGVyaW5nU2VydmljZTogSWd4RmlsdGVyaW5nU2VydmljZSkgeyB9XG59XG4iXX0=