@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
103 lines • 18.3 kB
JavaScript
var IgxTreeGridRowComponent_1;
import { __decorate, __metadata } from "tslib";
import { Component, forwardRef, Input, ViewChildren, QueryList, HostBinding, ChangeDetectionStrategy } from '@angular/core';
import { IgxRowDirective } from '../row.directive';
let IgxTreeGridRowComponent = IgxTreeGridRowComponent_1 = class IgxTreeGridRowComponent extends IgxRowDirective {
/**
* The `ITreeGridRecord` passed to the row component.
*
* ```typescript
* const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;
* const treeRow = row.treeRow;
* ```
*/
get treeRow() {
return this._treeRow;
}
set treeRow(value) {
if (this._treeRow !== value) {
this._treeRow = value;
this.rowData = this._treeRow.data;
}
}
/**
* Returns a value indicating whether the row component is expanded.
*
* ```typescript
* const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;
* const expanded = row.expanded;
* ```
*/
get expanded() {
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 expanded(value) {
this.gridAPI.trigger_row_expansion_toggle(this._treeRow, value);
}
/**
* @hidden
* @internal
*/
get viewIndex() {
return this.index + this.grid.page * this.grid.perPage;
}
/**
* @hidden
*/
get showIndicator() {
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;
}
/**
* @hidden
*/
resolveClasses() {
const classes = super.resolveClasses();
const filteredClass = this.treeRow.isFilteredOutParent ? 'igx-grid__tr--filtered' : '';
return `${classes} ${filteredClass}`;
}
/**
* @hidden
*/
ngDoCheck() {
this.isLoading = this.grid.loadChildrenOnDemand ? this.grid.loadingRows.has(this.rowID) : false;
super.ngDoCheck();
}
};
__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(() => IgxTreeGridRowComponent_1) }]
})
], IgxTreeGridRowComponent);
export { IgxTreeGridRowComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ncmlkLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL3RyZWUtZ3JpZC90cmVlLWdyaWQtcm93LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBVyx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVySSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFVbkQsSUFBYSx1QkFBdUIsK0JBQXBDLE1BQWEsdUJBQXdCLFNBQVEsZUFBcUM7SUFjOUU7Ozs7Ozs7T0FPRztJQUVILElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxPQUFPLENBQUMsS0FBc0I7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtZQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3JDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFFSCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsSUFBSSxRQUFRLENBQUMsS0FBYztRQUN0QixJQUFJLENBQUMsT0FBaUMsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFPRDs7O09BR0c7SUFDSCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDM0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO29CQUN4QyxJQUFJLENBQUMsQ0FBQztZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUM5RCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxjQUFjO1FBQ3BCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZGLE9BQU8sR0FBRyxPQUFPLElBQUksYUFBYSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2hHLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN0QixDQUFDO0NBQ0osQ0FBQTtBQXpGRztJQURDLFlBQVksQ0FBQyxVQUFVLENBQUM7OEJBQ1gsU0FBUztzREFBTTtBQVc3QjtJQURDLEtBQUssRUFBRTs7O3NEQUdQO0FBa0JEO0lBREMsV0FBVyxDQUFDLG9CQUFvQixDQUFDOzs7dURBR2pDO0FBN0NRLHVCQUF1QjtJQU5uQyxTQUFTLENBQUM7UUFDUCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtRQUMvQyxRQUFRLEVBQUUsbUJBQW1CO1FBQzdCLHVvT0FBMkM7UUFDM0MsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMseUJBQXVCLENBQUMsRUFBRSxDQUFDO0tBQ3BHLENBQUM7R0FDVyx1QkFBdUIsQ0FxR25DO1NBckdZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBIb3N0QmluZGluZywgRG9DaGVjaywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneFRyZWVHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElneFJvd0RpcmVjdGl2ZSB9IGZyb20gJy4uL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSVRyZWVHcmlkUmVjb3JkIH0gZnJvbSAnLi90cmVlLWdyaWQuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJZ3hUcmVlR3JpZEFQSVNlcnZpY2UgfSBmcm9tICcuL3RyZWUtZ3JpZC1hcGkuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHNlbGVjdG9yOiAnaWd4LXRyZWUtZ3JpZC1yb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAndHJlZS1ncmlkLXJvdy5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJZ3hSb3dEaXJlY3RpdmUsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElneFRyZWVHcmlkUm93Q29tcG9uZW50KSB9XVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hUcmVlR3JpZFJvd0NvbXBvbmVudCBleHRlbmRzIElneFJvd0RpcmVjdGl2ZTxJZ3hUcmVlR3JpZENvbXBvbmVudD4gaW1wbGVtZW50cyBEb0NoZWNrIHtcbiAgICBwcml2YXRlIF90cmVlUm93OiBJVHJlZUdyaWRSZWNvcmQ7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZWQgY2VsbHMgaW4gdGhlIHJvdyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3Qgcm93ID0gdGhpcy5ncmlkLmdldFJvd0J5S2V5KDEpO1xuICAgICAqIGNvbnN0IGNlbGxzID0gcm93LmNlbGxzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oJ3RyZWVDZWxsJylcbiAgICBwdWJsaWMgY2VsbHM6IFF1ZXJ5TGlzdDxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogVGhlIGBJVHJlZUdyaWRSZWNvcmRgIHBhc3NlZCB0byB0aGUgcm93IGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCByb3cgPSB0aGlzLmdyaWQuZ2V0Um93QnlLZXkoMSkgYXMgSWd4VHJlZUdyaWRSb3dDb21wb25lbnQ7XG4gICAgICogY29uc3QgdHJlZVJvdyA9IHJvdy50cmVlUm93O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB0cmVlUm93KCk6IElUcmVlR3JpZFJlY29yZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmVlUm93O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdHJlZVJvdyh2YWx1ZTogSVRyZWVHcmlkUmVjb3JkKSB7XG4gICAgICAgIGlmICh0aGlzLl90cmVlUm93ICE9PSB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fdHJlZVJvdyA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5yb3dEYXRhID0gdGhpcy5fdHJlZVJvdy5kYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgcm93IGNvbXBvbmVudCBpcyBleHBhbmRlZC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCByb3cgPSB0aGlzLmdyaWQuZ2V0Um93QnlLZXkoMSkgYXMgSWd4VHJlZUdyaWRSb3dDb21wb25lbnQ7XG4gICAgICogY29uc3QgZXhwYW5kZWQgPSByb3cuZXhwYW5kZWQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZXhwYW5kZWQnKVxuICAgIGdldCBleHBhbmRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyZWVSb3cuZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgcm93IGNvbXBvbmVudCBpcyBleHBhbmRlZC5cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCByb3cgPSB0aGlzLmdyaWQuZ2V0Um93QnlLZXkoMSkgYXMgSWd4VHJlZUdyaWRSb3dDb21wb25lbnQ7XG4gICAgICogcm93LmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzZXQgZXhwYW5kZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgKHRoaXMuZ3JpZEFQSSBhcyBJZ3hUcmVlR3JpZEFQSVNlcnZpY2UpLnRyaWdnZXJfcm93X2V4cGFuc2lvbl90b2dnbGUodGhpcy5fdHJlZVJvdywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXggKyB0aGlzLmdyaWQucGFnZSAqIHRoaXMuZ3JpZC5wZXJQYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dJbmRpY2F0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQubG9hZENoaWxkcmVuT25EZW1hbmQgP1xuICAgICAgICAgICAgdGhpcy5ncmlkLmV4cGFuc2lvblN0YXRlcy5oYXModGhpcy5yb3dJRCkgP1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZVJvdy5jaGlsZHJlbiAmJiB0aGlzLnRyZWVSb3cuY2hpbGRyZW4ubGVuZ3RoIDpcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuaGFzQ2hpbGRyZW5LZXkgP1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0RhdGFbdGhpcy5ncmlkLmhhc0NoaWxkcmVuS2V5XSA6XG4gICAgICAgICAgICAgICAgICAgIHRydWUgOlxuICAgICAgICAgICAgdGhpcy50cmVlUm93LmNoaWxkcmVuICYmIHRoaXMudHJlZVJvdy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZXNvbHZlQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gc3VwZXIucmVzb2x2ZUNsYXNzZXMoKTtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRDbGFzcyA9IHRoaXMudHJlZVJvdy5pc0ZpbHRlcmVkT3V0UGFyZW50ID8gJ2lneC1ncmlkX190ci0tZmlsdGVyZWQnIDogJyc7XG4gICAgICAgIHJldHVybiBgJHtjbGFzc2VzfSAke2ZpbHRlcmVkQ2xhc3N9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0aGlzLmdyaWQubG9hZENoaWxkcmVuT25EZW1hbmQgPyB0aGlzLmdyaWQubG9hZGluZ1Jvd3MuaGFzKHRoaXMucm93SUQpIDogZmFsc2U7XG4gICAgICAgIHN1cGVyLm5nRG9DaGVjaygpO1xuICAgIH1cbn1cbiJdfQ==