UNPKG

@catull/igniteui-angular

Version:

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

125 lines 19.7 kB
import { __decorate, __extends, __metadata } from "tslib"; import { Component, forwardRef, Input, ViewChildren, QueryList, HostBinding, ChangeDetectionStrategy } from '@angular/core'; import { IgxRowDirective } from '../row.directive'; var IgxTreeGridRowComponent = /** @class */ (function (_super) { __extends(IgxTreeGridRowComponent, _super); function IgxTreeGridRowComponent() { return _super !== null && _super.apply(this, arguments) || this; } IgxTreeGridRowComponent_1 = IgxTreeGridRowComponent; Object.defineProperty(IgxTreeGridRowComponent.prototype, "treeRow", { /** * The `ITreeGridRecord` passed to the row component. * * ```typescript * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent; * const treeRow = row.treeRow; * ``` */ get: function () { return this._treeRow; }, set: function (value) { if (this._treeRow !== value) { this._treeRow = value; this.rowData = this._treeRow.data; } }, enumerable: true, configurable: true }); Object.defineProperty(IgxTreeGridRowComponent.prototype, "expanded", { /** * Returns a value indicating whether the row component is expanded. * * ```typescript * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent; * const expanded = row.expanded; * ``` */ get: function () { return this._treeRow.expanded; }, /** * Sets a value indicating whether the row component is expanded. * * ```typescript * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent; * row.expanded = true; * ``` */ set: function (value) { this.gridAPI.trigger_row_expansion_toggle(this._treeRow, value); }, enumerable: true, configurable: true }); Object.defineProperty(IgxTreeGridRowComponent.prototype, "viewIndex", { /** * @hidden * @internal */ get: function () { return this.index + this.grid.page * this.grid.perPage; }, enumerable: true, configurable: true }); Object.defineProperty(IgxTreeGridRowComponent.prototype, "showIndicator", { /** * @hidden */ get: function () { return this.grid.loadChildrenOnDemand ? this.grid.expansionStates.has(this.rowID) ? this.treeRow.children && this.treeRow.children.length : this.grid.hasChildrenKey ? this.rowData[this.grid.hasChildrenKey] : true : this.treeRow.children && this.treeRow.children.length; }, enumerable: true, configurable: true }); /** * @hidden */ IgxTreeGridRowComponent.prototype.resolveClasses = function () { var classes = _super.prototype.resolveClasses.call(this); var filteredClass = this.treeRow.isFilteredOutParent ? 'igx-grid__tr--filtered' : ''; return classes + " " + filteredClass; }; /** * @hidden */ IgxTreeGridRowComponent.prototype.ngDoCheck = function () { this.isLoading = this.grid.loadChildrenOnDemand ? this.grid.loadingRows.has(this.rowID) : false; _super.prototype.ngDoCheck.call(this); }; var IgxTreeGridRowComponent_1; __decorate([ ViewChildren('treeCell'), __metadata("design:type", QueryList) ], IgxTreeGridRowComponent.prototype, "cells", void 0); __decorate([ Input(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object]) ], IgxTreeGridRowComponent.prototype, "treeRow", null); __decorate([ HostBinding('attr.aria-expanded'), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean]) ], IgxTreeGridRowComponent.prototype, "expanded", null); IgxTreeGridRowComponent = IgxTreeGridRowComponent_1 = __decorate([ Component({ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-tree-grid-row', template: "<ng-container *ngIf=\"rowDraggable\">\n <div [class]=\"resolveDragIndicatorClasses\" [igxRowDrag]=\"this\" (click)=\"$event.stopPropagation()\" [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()\">\n <ng-container *ngTemplateOutlet=\"this.grid.dragIndicatorIconTemplate ? this.grid.dragIndicatorIconTemplate : this.grid.dragIndicatorIconBase\"></ng-container>\n </div>\n</ng-container>\n<ng-container *ngIf=\"showRowSelectors\">\n <div class=\"igx-grid__cbx-selection\" (click)=\"onRowSelectorClick($event)\">\n <ng-template *ngTemplateOutlet=\"\n this.grid.rowSelectorTemplate ? this.grid.rowSelectorTemplate : rowSelectorBaseTemplate;\n context: { $implicit: { index: viewIndex, rowID: rowID, selected: selected }}\">\n </ng-template>\n </div>\n</ng-container>\n<ng-container *ngIf=\"pinnedColumns.length > 0\">\n <ng-template ngFor let-col [ngForOf]=\"pinnedColumns | igxNotGrouped\">\n <ng-template #cellTemplate>\n <igx-grid-cell\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--pinned\"\n [class.igx-grid__td--number]=\"col.dataType === 'number'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:rowData[col.field]:rowData:col.field:viewIndex\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:rowData[col.field]:rowData:col.field:viewIndex\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [lastPinned]=\"col.isLastPinned\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellSelectionMode]=\"grid.cellSelection\" #treeCell>\n </igx-grid-cell>\n </ng-template>\n <ng-template #treeCellTemplate>\n <igx-tree-grid-cell\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell igx-grid__td--pinned\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' && col.visibleIndex !== 0\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:rowData[col.field]:rowData:col.field:viewIndex\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:rowData[col.field]:rowData:col.field:viewIndex\"\n [level]=\"treeRow.level\"\n [expanded]=\"treeRow.expanded\"\n [showIndicator]=\"showIndicator\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [lastPinned]=\"col.isLastPinned\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [isLoading]=\"isLoading\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellSelectionMode]=\"grid.cellSelection\" #treeCell>\n </igx-tree-grid-cell>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate\"></ng-container>\n </ng-template>\n</ng-container>\n<ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth' [igxForSizePropName]=\"'calcPixelWidth'\" [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <ng-template #cellTemplate>\n <igx-grid-cell\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--number]=\"col.dataType === 'number'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:rowData[col.field]:rowData:col.field:viewIndex\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:rowData[col.field]:rowData:col.field:viewIndex\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellSelectionMode]=\"grid.cellSelection\" #treeCell>\n </igx-grid-cell>\n </ng-template>\n <ng-template #treeCellTemplate>\n <igx-tree-grid-cell\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' && col.visibleIndex !== 0\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:rowData[col.field]:rowData:col.field:viewIndex\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:rowData[col.field]:rowData:col.field:viewIndex\"\n [level]=\"treeRow.level\"\n [expanded]=\"treeRow.expanded\"\n [showIndicator]=\"showIndicator\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [style.min-width]=\"col.width\"\n [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [isLoading]=\"isLoading\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellSelectionMode]=\"grid.cellSelection\" #treeCell>\n </igx-tree-grid-cell>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate\"></ng-container>\n</ng-template>\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [readonly]=\"true\"\n [checked]=\"selected\"\n [disabled]=\"deleted\"\n disableRipple=\"true\"\n [disableTransitions]=\"grid.disableTransitions\"\n [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n", providers: [{ provide: IgxRowDirective, useExisting: forwardRef(function () { return IgxTreeGridRowComponent_1; }) }] }) ], IgxTreeGridRowComponent); return IgxTreeGridRowComponent; }(IgxRowDirective)); export { IgxTreeGridRowComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQtcm93LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFXLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVVuRDtJQUE2QywyQ0FBcUM7SUFBbEY7O0lBcUdBLENBQUM7Z0NBckdZLHVCQUF1QjtJQXVCaEMsc0JBQVcsNENBQU87UUFUbEI7Ozs7Ozs7V0FPRzthQUVIO1lBQ0ksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3pCLENBQUM7YUFFRCxVQUFtQixLQUFzQjtZQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO2dCQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzthQUNyQztRQUNMLENBQUM7OztPQVBBO0lBa0JELHNCQUFJLDZDQUFRO1FBVFo7Ozs7Ozs7V0FPRzthQUVIO1lBQ0ksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxDQUFDO1FBRUQ7Ozs7Ozs7V0FPRzthQUNILFVBQWEsS0FBYztZQUN0QixJQUFJLENBQUMsT0FBaUMsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9GLENBQUM7OztPQVpBO0lBdUJELHNCQUFJLDhDQUFTO1FBSmI7OztXQUdHO2FBQ0g7WUFDSSxPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDM0QsQ0FBQzs7O09BQUE7SUFLRCxzQkFBVyxrREFBYTtRQUh4Qjs7V0FFRzthQUNIO1lBQ0ksT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztvQkFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO3dCQUN4QyxJQUFJLENBQUMsQ0FBQztnQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDOUQsQ0FBQzs7O09BQUE7SUFFRDs7T0FFRztJQUNPLGdEQUFjLEdBQXhCO1FBQ0ksSUFBTSxPQUFPLEdBQUcsaUJBQU0sY0FBYyxXQUFFLENBQUM7UUFDdkMsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN2RixPQUFVLE9BQU8sU0FBSSxhQUFlLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksMkNBQVMsR0FBaEI7UUFDSSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNoRyxpQkFBTSxTQUFTLFdBQUUsQ0FBQztJQUN0QixDQUFDOztJQXhGRDtRQURDLFlBQVksQ0FBQyxVQUFVLENBQUM7a0NBQ1gsU0FBUzswREFBTTtJQVc3QjtRQURDLEtBQUssRUFBRTs7OzBEQUdQO0lBa0JEO1FBREMsV0FBVyxDQUFDLG9CQUFvQixDQUFDOzs7MkRBR2pDO0lBN0NRLHVCQUF1QjtRQU5uQyxTQUFTLENBQUM7WUFDUCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtZQUMvQyxRQUFRLEVBQUUsbUJBQW1CO1lBQzdCLHVvT0FBMkM7WUFDM0MsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsY0FBTSxPQUFBLHlCQUF1QixFQUF2QixDQUF1QixDQUFDLEVBQUUsQ0FBQztTQUNwRyxDQUFDO09BQ1csdUJBQXVCLENBcUduQztJQUFELDhCQUFDO0NBQUEsQUFyR0QsQ0FBNkMsZUFBZSxHQXFHM0Q7U0FyR1ksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QsIEhvc3RCaW5kaW5nLCBEb0NoZWNrLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4VHJlZUdyaWRDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Um93RGlyZWN0aXZlIH0gZnJvbSAnLi4vcm93LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJVHJlZUdyaWRSZWNvcmQgfSBmcm9tICcuL3RyZWUtZ3JpZC5pbnRlcmZhY2VzJztcbmltcG9ydCB7IElneFRyZWVHcmlkQVBJU2VydmljZSB9IGZyb20gJy4vdHJlZS1ncmlkLWFwaS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc2VsZWN0b3I6ICdpZ3gtdHJlZS1ncmlkLXJvdycsXG4gICAgdGVtcGxhdGVVcmw6ICd0cmVlLWdyaWQtcm93LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IElneFJvd0RpcmVjdGl2ZSwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSWd4VHJlZUdyaWRSb3dDb21wb25lbnQpIH1dXG59KVxuZXhwb3J0IGNsYXNzIElneFRyZWVHcmlkUm93Q29tcG9uZW50IGV4dGVuZHMgSWd4Um93RGlyZWN0aXZlPElneFRyZWVHcmlkQ29tcG9uZW50PiBpbXBsZW1lbnRzIERvQ2hlY2sge1xuICAgIHByaXZhdGUgX3RyZWVSb3c6IElUcmVlR3JpZFJlY29yZDtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZW5kZXJlZCBjZWxscyBpbiB0aGUgcm93IGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCByb3cgPSB0aGlzLmdyaWQuZ2V0Um93QnlLZXkoMSk7XG4gICAgICogY29uc3QgY2VsbHMgPSByb3cuY2VsbHM7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQFZpZXdDaGlsZHJlbigndHJlZUNlbGwnKVxuICAgIHB1YmxpYyBjZWxsczogUXVlcnlMaXN0PGFueT47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYElUcmVlR3JpZFJlY29yZGAgcGFzc2VkIHRvIHRoZSByb3cgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5nZXRSb3dCeUtleSgxKSBhcyBJZ3hUcmVlR3JpZFJvd0NvbXBvbmVudDtcbiAgICAgKiBjb25zdCB0cmVlUm93ID0gcm93LnRyZWVSb3c7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHRyZWVSb3coKTogSVRyZWVHcmlkUmVjb3JkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyZWVSb3c7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB0cmVlUm93KHZhbHVlOiBJVHJlZUdyaWRSZWNvcmQpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RyZWVSb3cgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl90cmVlUm93ID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLnJvd0RhdGEgPSB0aGlzLl90cmVlUm93LmRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByb3cgY29tcG9uZW50IGlzIGV4cGFuZGVkLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5nZXRSb3dCeUtleSgxKSBhcyBJZ3hUcmVlR3JpZFJvd0NvbXBvbmVudDtcbiAgICAgKiBjb25zdCBleHBhbmRlZCA9IHJvdy5leHBhbmRlZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1leHBhbmRlZCcpXG4gICAgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJlZVJvdy5leHBhbmRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByb3cgY29tcG9uZW50IGlzIGV4cGFuZGVkLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5nZXRSb3dCeUtleSgxKSBhcyBJZ3hUcmVlR3JpZFJvd0NvbXBvbmVudDtcbiAgICAgKiByb3cuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICAodGhpcy5ncmlkQVBJIGFzIElneFRyZWVHcmlkQVBJU2VydmljZSkudHJpZ2dlcl9yb3dfZXhwYW5zaW9uX3RvZ2dsZSh0aGlzLl90cmVlUm93LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgZ2V0IHZpZXdJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCArIHRoaXMuZ3JpZC5wYWdlICogdGhpcy5ncmlkLnBlclBhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2hvd0luZGljYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5sb2FkQ2hpbGRyZW5PbkRlbWFuZCA/XG4gICAgICAgICAgICB0aGlzLmdyaWQuZXhwYW5zaW9uU3RhdGVzLmhhcyh0aGlzLnJvd0lEKSA/XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlUm93LmNoaWxkcmVuICYmIHRoaXMudHJlZVJvdy5jaGlsZHJlbi5sZW5ndGggOlxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5oYXNDaGlsZHJlbktleSA/XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93RGF0YVt0aGlzLmdyaWQuaGFzQ2hpbGRyZW5LZXldIDpcbiAgICAgICAgICAgICAgICAgICAgdHJ1ZSA6XG4gICAgICAgICAgICB0aGlzLnRyZWVSb3cuY2hpbGRyZW4gJiYgdGhpcy50cmVlUm93LmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlc29sdmVDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBzdXBlci5yZXNvbHZlQ2xhc3NlcygpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZENsYXNzID0gdGhpcy50cmVlUm93LmlzRmlsdGVyZWRPdXRQYXJlbnQgPyAnaWd4LWdyaWRfX3RyLS1maWx0ZXJlZCcgOiAnJztcbiAgICAgICAgcmV0dXJuIGAke2NsYXNzZXN9ICR7ZmlsdGVyZWRDbGFzc31gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdEb0NoZWNrKCkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRoaXMuZ3JpZC5sb2FkQ2hpbGRyZW5PbkRlbWFuZCA/IHRoaXMuZ3JpZC5sb2FkaW5nUm93cy5oYXModGhpcy5yb3dJRCkgOiBmYWxzZTtcbiAgICAgICAgc3VwZXIubmdEb0NoZWNrKCk7XG4gICAgfVxufVxuIl19