@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
75 lines • 18.2 kB
JavaScript
var IgxGridRowComponent_1;
import { __decorate, __metadata } from "tslib";
import { Component, forwardRef, ChangeDetectionStrategy, ElementRef, ChangeDetectorRef, HostBinding, ViewChildren, QueryList } from '@angular/core';
import { IgxRowDirective } from '../row.directive';
import { GridBaseAPIService } from '../api.service';
import { IgxGridSelectionService, IgxGridCRUDService } from '../selection/selection.service';
let IgxGridRowComponent = IgxGridRowComponent_1 = class IgxGridRowComponent extends IgxRowDirective {
// R.K. TODO: Remove
constructor(gridAPI, crudService, selectionService, element, cdr) {
// D.P. constructor duplication due to es6 compilation, might be obsolete in the future
super(gridAPI, crudService, selectionService, element, cdr);
this.gridAPI = gridAPI;
this.crudService = crudService;
this.selectionService = selectionService;
this.element = element;
this.cdr = cdr;
}
get cells() {
const res = new QueryList();
if (!this._cells) {
return res;
}
const cList = this._cells.toArray().sort((item1, item2) => item1.column.visibleIndex - item2.column.visibleIndex);
res.reset(cList);
return res;
}
set cells(cells) {
}
get hasColumnLayouts() {
return this.grid.hasColumnLayouts;
}
getContext(col, row) {
return {
$implicit: col,
row: row
};
}
get expanded() {
const pk = this.grid.primaryKey;
const rowID = pk ? this.rowData[pk] : this.rowData;
return this.grid.expansionStates.get(rowID);
}
};
IgxGridRowComponent.ctorParameters = () => [
{ type: GridBaseAPIService },
{ type: IgxGridCRUDService },
{ type: IgxGridSelectionService },
{ type: ElementRef },
{ type: ChangeDetectorRef }
];
__decorate([
ViewChildren('cell'),
__metadata("design:type", QueryList)
], IgxGridRowComponent.prototype, "_cells", void 0);
__decorate([
HostBinding('class.igx-grid__tr--mrl'),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxGridRowComponent.prototype, "hasColumnLayouts", null);
IgxGridRowComponent = IgxGridRowComponent_1 = __decorate([
Component({
changeDetection: ChangeDetectionStrategy.OnPush,
preserveWhitespaces: false,
selector: 'igx-grid-row',
template: "<ng-container *ngIf=\"grid.groupingExpressions.length > 0\">\n <div class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{grid.groupingExpressions.length}}\"></div>\n</ng-container>\n<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=\"this.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\n<ng-container *ngIf=\"!grid.hasColumnLayouts\">\n <ng-container *ngIf=\"pinnedColumns.length > 0\">\n <ng-template ngFor let-col [ngForOf]=\"pinnedColumns | igxNotGrouped\">\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? expandableCellTemplate : cellTemplate; context: getContext(col, this)\"></ng-container>\n </ng-template>\n </ng-container>\n <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth' [igxForSizePropName]='\"calcPixelWidth\"' [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? expandableCellTemplate : cellTemplate; context: getContext(col, this)\"></ng-container>\n </ng-template>\n</ng-container>\n\n<ng-container *ngIf=\"grid.hasColumnLayouts\">\n <ng-container *ngIf=\"pinnedColumns.length > 0\">\n <div *ngFor=\"let col of pinnedColumns | igxTopLevel\" class=\"igx-grid__mrl-block\"\n [class.igx-grid__td--pinned-last]=\"col.hasLastPinnedChildColumn\"\n [ngStyle]=\"{\n 'grid-template-rows':col.getGridTemplate(true, false),\n 'grid-template-columns':col.getGridTemplate(false, false),\n 'z-index': col.pinned ? 1 : null,\n '-ms-grid-rows':col.getGridTemplate(true, true),\n '-ms-grid-columns':col.getGridTemplate(false, true)\n }\">\n <ng-template ngFor let-col [ngForOf]=\"col.children\">\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails? mrlExpandableCellTemplate : mrlCellTemplate; context: getContext(col, this)\"></ng-container>\n </ng-template>\n </div>\n </ng-container>\n <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxTopLevel\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth' [igxForSizePropName]='\"calcPixelWidth\"' [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <div class=\"igx-grid__mrl-block\" [ngStyle]=\"{\n 'grid-template-rows':col.getGridTemplate(true, false),\n 'grid-template-columns':col.getGridTemplate(false, false),\n '-ms-grid-rows':col.getGridTemplate(true, true),\n '-ms-grid-columns':col.getGridTemplate(false, true)\n }\">\n <ng-template ngFor let-col [ngForOf]=\"col.children\">\n <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? mrlExpandableCellTemplate : mrlCellTemplate; context: getContext(col, this)\"></ng-container>\n </ng-template>\n </div>\n </ng-template>\n</ng-container>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [checked]=\"selected\"\n [readonly]=\"true\"\n [disabled]=\"deleted\"\n disableRipple=\"true\"\n [disableTransitions]=\"grid.disableTransitions\"\n [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #cellTemplate let-col>\n <igx-grid-cell\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--pinned]=\"col.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.columnLayoutChild ? null : 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\" #cell>\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #expandableCellTemplate let-col>\n <igx-expandable-grid-cell\n [class.igx-grid__td--pinned]=\"col.pinned\"\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 [expanded]=\"expanded\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [lastPinned]=\"col.columnLayoutChild ? null : 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\" #cell>\n </igx-expandable-grid-cell>\n</ng-template>\n\n<ng-template #mrlCellTemplate let-col>\n <igx-grid-cell\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--pinned]=\"col.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 [style.-ms-grid-row-span]=\"col.gridRowSpan\"\n [style.-ms-grid-column-span]=\"col.girdColumnSpan\"\n [style.grid-row-end]=\"col.rowEnd\"\n [style.grid-column-end]=\"col.colEnd\"\n [style.-ms-grid-row]=\"col.rowStart\"\n [style.grid-row-start]=\"col.rowStart\"\n [style.-ms-grid-column]=\"col.colStart\"\n [style.grid-column-start]=\"col.colStart\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellSelectionMode]=\"grid.cellSelection\" #cell>\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #mrlExpandableCellTemplate let-col>\n <igx-expandable-grid-cell\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--pinned]=\"col.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 [expanded]=\"expanded\"\n [editMode]=\"col.editable && crudService.isInEditMode(index, col.index)\"\n [column]=\"col\"\n [style.-ms-grid-row-span]=\"col.gridRowSpan\"\n [style.-ms-grid-column-span]=\"col.girdColumnSpan\"\n [style.grid-row-end]=\"col.rowEnd\"\n [style.grid-column-end]=\"col.colEnd\"\n [style.-ms-grid-row]=\"col.rowStart\"\n [style.grid-row-start]=\"col.rowStart\"\n [style.-ms-grid-column]=\"col.colStart\"\n [style.grid-column-start]=\"col.colStart\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [formatter]=\"col.formatter\"\n [row]=\"this\"\n [style.min-height.px]=\"grid.rowHeight || 32\"\n [rowData]=\"rowData\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"rowData[col.field]\"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellSelectionMode]=\"grid.cellSelection\" #cell>\n </igx-expandable-grid-cell>\n</ng-template>\n",
providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxGridRowComponent_1) }]
}),
__metadata("design:paramtypes", [GridBaseAPIService,
IgxGridCRUDService,
IgxGridSelectionService,
ElementRef,
ChangeDetectorRef])
], IgxGridRowComponent);
export { IgxGridRowComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9ncmlkL2dyaWQtcm93LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLHVCQUF1QixFQUNsRCxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBUzdGLElBQWEsbUJBQW1CLDJCQUFoQyxNQUFhLG1CQUFvQixTQUFRLGVBQWlDO0lBRXRFLG9CQUFvQjtJQUNwQixZQUNXLE9BQTZDLEVBQzdDLFdBQStCLEVBQy9CLGdCQUF5QyxFQUN6QyxPQUFtQixFQUNuQixHQUFzQjtRQUN6Qix1RkFBdUY7UUFDdkYsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBTnpELFlBQU8sR0FBUCxPQUFPLENBQXNDO1FBQzdDLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ3pDLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFHN0IsQ0FBQztJQUtMLElBQVcsS0FBSztRQUNaLE1BQU0sR0FBRyxHQUFHLElBQUksU0FBUyxFQUFPLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZCxPQUFPLEdBQUcsQ0FBQztTQUNkO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xILEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBVyxLQUFLLENBQUMsS0FBSztJQUV0QixDQUFDO0lBR0QsSUFBSSxnQkFBZ0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ3RDLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUc7UUFDZixPQUFPO1lBQ0gsU0FBUyxFQUFFLEdBQUc7WUFDZCxHQUFHLEVBQUUsR0FBRztTQUNYLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDaEMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7Q0FDSixDQUFBOztZQTNDdUIsa0JBQWtCO1lBQ2Qsa0JBQWtCO1lBQ2IsdUJBQXVCO1lBQ2hDLFVBQVU7WUFDZCxpQkFBaUI7O0FBTWpDO0lBREMsWUFBWSxDQUFDLE1BQU0sQ0FBQzs4QkFDTCxTQUFTO21EQUFNO0FBaUIvQjtJQURDLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQzs7OzJEQUd0QztBQWpDUSxtQkFBbUI7SUFQL0IsU0FBUyxDQUFDO1FBQ1AsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07UUFDL0MsbUJBQW1CLEVBQUUsS0FBSztRQUMxQixRQUFRLEVBQUUsY0FBYztRQUN4Qiw0aVRBQXdDO1FBQ3hDLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHFCQUFtQixDQUFDLEVBQUUsQ0FBQztLQUNoRyxDQUFDO3FDQUtzQixrQkFBa0I7UUFDZCxrQkFBa0I7UUFDYix1QkFBdUI7UUFDaEMsVUFBVTtRQUNkLGlCQUFpQjtHQVJ4QixtQkFBbUIsQ0ErQy9CO1NBL0NZLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdG9yUmVmLCBIb3N0QmluZGluZywgVmlld0NoaWxkcmVuLCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElneFJvd0RpcmVjdGl2ZSB9IGZyb20gJy4uL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZEJhc2VBUElTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsIElneEdyaWRDUlVEU2VydmljZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIHNlbGVjdG9yOiAnaWd4LWdyaWQtcm93JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWd4Um93RGlyZWN0aXZlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJZ3hHcmlkUm93Q29tcG9uZW50KSB9XVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkUm93Q29tcG9uZW50IGV4dGVuZHMgSWd4Um93RGlyZWN0aXZlPElneEdyaWRDb21wb25lbnQ+IHtcblxuICAgIC8vIFIuSy4gVE9ETzogUmVtb3ZlXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZENvbXBvbmVudD4sXG4gICAgICAgIHB1YmxpYyBjcnVkU2VydmljZTogSWd4R3JpZENSVURTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgc2VsZWN0aW9uU2VydmljZTogSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICAgICAgLy8gRC5QLiBjb25zdHJ1Y3RvciBkdXBsaWNhdGlvbiBkdWUgdG8gZXM2IGNvbXBpbGF0aW9uLCBtaWdodCBiZSBvYnNvbGV0ZSBpbiB0aGUgZnV0dXJlXG4gICAgICAgICAgICBzdXBlcihncmlkQVBJLCBjcnVkU2VydmljZSwgc2VsZWN0aW9uU2VydmljZSwgZWxlbWVudCwgY2RyKTtcbiAgICAgICAgfVxuXG4gICAgQFZpZXdDaGlsZHJlbignY2VsbCcpXG4gICAgcHJpdmF0ZSBfY2VsbHM6IFF1ZXJ5TGlzdDxhbnk+O1xuXG4gICAgcHVibGljIGdldCBjZWxscygpIHtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFF1ZXJ5TGlzdDxhbnk+KCk7XG4gICAgICAgIGlmICghdGhpcy5fY2VsbHMpIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY0xpc3QgPSB0aGlzLl9jZWxscy50b0FycmF5KCkuc29ydCgoaXRlbTEsIGl0ZW0yKSA9PiBpdGVtMS5jb2x1bW4udmlzaWJsZUluZGV4IC0gaXRlbTIuY29sdW1uLnZpc2libGVJbmRleCk7XG4gICAgICAgIHJlcy5yZXNldChjTGlzdCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBjZWxscyhjZWxscykge1xuXG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtZ3JpZF9fdHItLW1ybCcpXG4gICAgZ2V0IGhhc0NvbHVtbkxheW91dHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuaGFzQ29sdW1uTGF5b3V0cztcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0KGNvbCwgcm93KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IGNvbCxcbiAgICAgICAgICAgIHJvdzogcm93XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGV4cGFuZGVkKCkge1xuICAgICAgICBjb25zdCBwayA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5O1xuICAgICAgICBjb25zdCByb3dJRCA9IHBrID8gdGhpcy5yb3dEYXRhW3BrXSA6IHRoaXMucm93RGF0YTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKTtcbiAgICB9XG59XG4iXX0=