@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
153 lines • 20.5 kB
JavaScript
var IgxHierarchicalRowComponent_1;
import { __decorate, __metadata } from "tslib";
import { ChangeDetectionStrategy, Component, HostBinding, forwardRef, ElementRef, ViewChildren, QueryList, ViewChild, TemplateRef } from '@angular/core';
import { IgxRowDirective } from '../row.directive';
import { IgxHierarchicalGridCellComponent } from './hierarchical-cell.component';
let IgxHierarchicalRowComponent = IgxHierarchicalRowComponent_1 = class IgxHierarchicalRowComponent extends IgxRowDirective {
constructor() {
super(...arguments);
/**
* @hidden
*/
this.tabindex = 0;
/**
* @hidden
* @internal
*/
this.select = () => {
this.grid.selectRows([this.rowID]);
};
/**
* @hidden
* @internal
*/
this.deselect = () => {
this.grid.deselectRows([this.rowID]);
};
}
get viewIndex() {
return this.index + this.grid.page * this.grid.perPage;
}
/**
* Returns whether the row is expanded.
* ```typescript
* const RowExpanded = this.grid1.rowList.first.expanded;
* ```
*/
get expanded() {
return this.grid.isExpanded(this.rowData);
}
get hasChildren() {
return !!this.grid.childLayoutKeys.length;
}
/**
* @hidden
*/
get highlighted() {
return this.grid && this.grid.highlightedRowID === this.rowID;
}
/**
* @hidden
*/
expanderClick(event) {
event.stopPropagation();
this.toggle();
}
/**
* Toggles the hierarchical row.
* ```typescript
* this.grid1.rowList.first.toggle()
* ```
*/
toggle() {
if (this.added) {
return;
}
const grid = this.gridAPI.grid;
this.endEdit(grid.rootGrid);
const state = this.gridAPI.grid.hierarchicalState;
if (!this.expanded) {
state.push({ rowID: this.rowID });
grid.hierarchicalState = [...state];
}
else {
grid.hierarchicalState = state.filter(v => {
return v.rowID !== this.rowID;
});
}
grid.cdr.detectChanges();
}
/**
* @hidden
*/
get iconTemplate() {
let expandable = true;
if (this.grid.hasChildrenKey) {
expandable = this.rowData[this.grid.hasChildrenKey];
}
if (!expandable) {
return this.defaultEmptyTemplate;
}
if (this.expanded) {
return this.grid.rowExpandedIndicatorTemplate || this.defaultExpandedTemplate;
}
else {
return this.grid.rowCollapsedIndicatorTemplate || this.defaultCollapsedTemplate;
}
}
endEdit(grid) {
if (grid.crudService.inEditMode) {
grid.endEdit();
}
grid.hgridAPI.getChildGrids(true).forEach(g => {
if (g.crudService.inEditMode) {
g.endEdit();
}
});
}
};
__decorate([
ViewChildren(forwardRef(() => IgxHierarchicalGridCellComponent), { read: IgxHierarchicalGridCellComponent }),
__metadata("design:type", QueryList)
], IgxHierarchicalRowComponent.prototype, "cells", void 0);
__decorate([
ViewChild('expander', { read: ElementRef }),
__metadata("design:type", ElementRef)
], IgxHierarchicalRowComponent.prototype, "expander", void 0);
__decorate([
ViewChild('defaultExpandedTemplate', { read: TemplateRef, static: true }),
__metadata("design:type", TemplateRef)
], IgxHierarchicalRowComponent.prototype, "defaultExpandedTemplate", void 0);
__decorate([
ViewChild('defaultEmptyTemplate', { read: TemplateRef, static: true }),
__metadata("design:type", TemplateRef)
], IgxHierarchicalRowComponent.prototype, "defaultEmptyTemplate", void 0);
__decorate([
ViewChild('defaultCollapsedTemplate', { read: TemplateRef, static: true }),
__metadata("design:type", TemplateRef)
], IgxHierarchicalRowComponent.prototype, "defaultCollapsedTemplate", void 0);
__decorate([
HostBinding('attr.tabindex'),
__metadata("design:type", Object)
], IgxHierarchicalRowComponent.prototype, "tabindex", void 0);
__decorate([
HostBinding('class.igx-grid__tr--expanded'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], IgxHierarchicalRowComponent.prototype, "expanded", null);
__decorate([
HostBinding('class.igx-grid__tr--highlighted'),
__metadata("design:type", Object),
__metadata("design:paramtypes", [])
], IgxHierarchicalRowComponent.prototype, "highlighted", null);
IgxHierarchicalRowComponent = IgxHierarchicalRowComponent_1 = __decorate([
Component({
changeDetection: ChangeDetectionStrategy.OnPush,
preserveWhitespaces: false,
selector: 'igx-hierarchical-grid-row',
template: "<div (click)=\"expanderClick($event)\" class=\"igx-grid__hierarchical-expander\" [tabIndex]=\"tabindex\" *ngIf=\"hasChildren\" #expander>\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\">\n </ng-container>\n</div>\n<ng-template #defaultExpandedTemplate>\n <igx-icon [isActive]='!added' fontSet=\"material\">expand_more</igx-icon>\n </ng-template>\n\n<ng-template #defaultCollapsedTemplate>\n <igx-icon [isActive]='!added' fontSet=\"material\">chevron_right</igx-icon>\n </ng-template>\n\n <ng-template #defaultEmptyTemplate>\n <igx-icon fontSet=\"material\"></igx-icon>\n</ng-template>\n\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=\"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: {\n index: viewIndex,\n rowID: rowID,\n selected: selected,\n select: select,\n deselect: deselect }}\">\n </ng-template>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"pinnedColumns.length > 0\">\n <igx-hierarchical-grid-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\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\">\n </igx-hierarchical-grid-cell>\n</ng-container>\n\n<ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForSizePropName]='\"calcPixelWidth\"' [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth' [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <igx-hierarchical-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\">\n </igx-hierarchical-grid-cell>\n</ng-template>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [readonly]=\"true\"\n [checked]=\"selected\"\n disableRipple=\"true\"\n [disabled]=\"deleted\"\n [disableTransitions]=\"grid.disableTransitions\"\n [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n",
providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxHierarchicalRowComponent_1) }]
})
], IgxHierarchicalRowComponent);
export { IgxHierarchicalRowComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1yb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsV0FBVyxFQUNYLFVBQVUsRUFDVixVQUFVLEVBQ1YsWUFBWSxFQUNaLFNBQVMsRUFDVCxTQUFTLEVBQ1QsV0FBVyxFQUNkLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQVNqRixJQUFhLDJCQUEyQixtQ0FBeEMsTUFBYSwyQkFBNEIsU0FBUSxlQUE2QztJQUE5Rjs7UUFxQ0k7O1dBRUc7UUFFSSxhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBeURwQjs7O1dBR0c7UUFDSSxXQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFBO1FBRUQ7OztXQUdHO1FBQ0ksYUFBUSxHQUFHLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQTtJQTZCTCxDQUFDO0lBOUhHLElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMzRCxDQUFDO0lBMEJHOzs7OztHQUtEO0lBRUgsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQVcsV0FBVztRQUNsQixPQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBRUgsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDbEUsQ0FBQztJQUVEOztNQUVFO0lBQ0ksYUFBYSxDQUFDLEtBQUs7UUFDckIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNO1FBQ1QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osT0FBTztTQUNWO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDO2FBQU07WUFDSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdEMsT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQWtCRDs7TUFFRTtJQUNGLElBQVcsWUFBWTtRQUNuQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUMxQixVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztTQUNqRjthQUFNO1lBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixJQUFJLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztTQUNuRjtJQUNMLENBQUM7SUFFTyxPQUFPLENBQUMsSUFBa0M7UUFDOUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRTtZQUM3QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDbEI7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRTtnQkFDOUIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2Y7UUFBQSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7Q0FDSixDQUFBO0FBbklHO0lBREMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdDQUFnQyxFQUFFLENBQUM7OEJBQy9GLFNBQVM7MERBQW1DO0FBRzFEO0lBREMsU0FBUyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQzs4QkFDM0IsVUFBVTs2REFBYztBQVUxQztJQURDLFNBQVMsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDOzhCQUN2QyxXQUFXOzRFQUFNO0FBTXBEO0lBREMsU0FBUyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7OEJBQ3ZDLFdBQVc7eUVBQU07QUFNakQ7SUFEQyxTQUFTLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQzs4QkFDdkMsV0FBVzs2RUFBTTtBQU1wRDtJQURDLFdBQVcsQ0FBQyxlQUFlLENBQUM7OzZEQUNUO0FBU3BCO0lBREMsV0FBVyxDQUFDLDhCQUE4QixDQUFDOzs7MkRBRzNDO0FBVUQ7SUFEQyxXQUFXLENBQUMsaUNBQWlDLENBQUM7Ozs4REFHOUM7QUFoRVEsMkJBQTJCO0lBUHZDLFNBQVMsQ0FBQztRQUNQLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1FBQy9DLG1CQUFtQixFQUFFLEtBQUs7UUFDMUIsUUFBUSxFQUFFLDJCQUEyQjtRQUNyQyxxaUpBQWdEO1FBQ2hELFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDZCQUEyQixDQUFDLEVBQUUsQ0FBQztLQUN4RyxDQUFDO0dBQ1csMkJBQTJCLENBNkl2QztTQTdJWSwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBmb3J3YXJkUmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Um93RGlyZWN0aXZlIH0gZnJvbSAnLi4vcm93LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWNlbGwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgc2VsZWN0b3I6ICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQtcm93JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaGllcmFyY2hpY2FsLXJvdy5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJZ3hSb3dEaXJlY3RpdmUsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElneEhpZXJhcmNoaWNhbFJvd0NvbXBvbmVudCkgfV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4SGllcmFyY2hpY2FsUm93Q29tcG9uZW50IGV4dGVuZHMgSWd4Um93RGlyZWN0aXZlPElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQ+IHtcbiAgICAvKipcbiAgICAgKiBUaGUgcmVuZGVyZWQgY2VsbHMgaW4gdGhlIHJvdyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gZ2V0IHRoZSBjZWxscyBvZiB0aGUgdGhpcmQgc2VsZWN0ZWQgcm93XG4gICAgICogbGV0IHNlbGVjdGVkUm93Q2VsbHMgPSB0aGlzLmdyaWQuc2VsZWN0ZWRSb3dzWzJdLmNlbGxzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudCksIHsgcmVhZDogSWd4SGllcmFyY2hpY2FsR3JpZENlbGxDb21wb25lbnQgfSlcbiAgICBwdWJsaWMgY2VsbHM6IFF1ZXJ5TGlzdDxJZ3hIaWVyYXJjaGljYWxHcmlkQ2VsbENvbXBvbmVudD47XG5cbiAgICBAVmlld0NoaWxkKCdleHBhbmRlcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHB1YmxpYyBleHBhbmRlcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBnZXQgdmlld0luZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV4ICsgdGhpcy5ncmlkLnBhZ2UgKiB0aGlzLmdyaWQucGVyUGFnZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqL1xuICAgQFZpZXdDaGlsZCgnZGVmYXVsdEV4cGFuZGVkVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgIHByb3RlY3RlZCBkZWZhdWx0RXhwYW5kZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICogQGhpZGRlblxuICAgICovXG4gICBAVmlld0NoaWxkKCdkZWZhdWx0RW1wdHlUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgcHJvdGVjdGVkIGRlZmF1bHRFbXB0eVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKi9cbiAgIEBWaWV3Q2hpbGQoJ2RlZmF1bHRDb2xsYXBzZWRUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgcHJvdGVjdGVkIGRlZmF1bHRDb2xsYXBzZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICAgIHB1YmxpYyB0YWJpbmRleCA9IDA7XG5cbiAgICAgICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSByb3cgaXMgZXhwYW5kZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IFJvd0V4cGFuZGVkID0gdGhpcy5ncmlkMS5yb3dMaXN0LmZpcnN0LmV4cGFuZGVkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWdyaWRfX3RyLS1leHBhbmRlZCcpXG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5pc0V4cGFuZGVkKHRoaXMucm93RGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNDaGlsZHJlbigpIHtcbiAgICAgICAgcmV0dXJuICAhIXRoaXMuZ3JpZC5jaGlsZExheW91dEtleXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1ncmlkX190ci0taGlnaGxpZ2h0ZWQnKVxuICAgIHB1YmxpYyBnZXQgaGlnaGxpZ2h0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQgJiYgdGhpcy5ncmlkLmhpZ2hsaWdodGVkUm93SUQgPT09IHRoaXMucm93SUQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBAaGlkZGVuXG4gICAgKi9cbiAgIHB1YmxpYyBleHBhbmRlckNsaWNrKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIGhpZXJhcmNoaWNhbCByb3cuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuZ3JpZDEucm93TGlzdC5maXJzdC50b2dnbGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmFkZGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZEFQSS5ncmlkO1xuICAgICAgICB0aGlzLmVuZEVkaXQoZ3JpZC5yb290R3JpZCk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5ncmlkQVBJLmdyaWQuaGllcmFyY2hpY2FsU3RhdGU7XG4gICAgICAgIGlmICghdGhpcy5leHBhbmRlZCkge1xuICAgICAgICAgICAgc3RhdGUucHVzaCh7IHJvd0lEOiB0aGlzLnJvd0lEIH0pO1xuICAgICAgICAgICAgZ3JpZC5oaWVyYXJjaGljYWxTdGF0ZSA9IFsuLi5zdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBncmlkLmhpZXJhcmNoaWNhbFN0YXRlID0gc3RhdGUuZmlsdGVyKHYgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB2LnJvd0lEICE9PSB0aGlzLnJvd0lEO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmdyaWQuc2VsZWN0Um93cyhbdGhpcy5yb3dJRF0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JpZC5kZXNlbGVjdFJvd3MoW3RoaXMucm93SURdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAqIEBoaWRkZW5cbiAgICAqL1xuICAgIHB1YmxpYyBnZXQgaWNvblRlbXBsYXRlKCkge1xuICAgICAgICBsZXQgZXhwYW5kYWJsZSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaGFzQ2hpbGRyZW5LZXkpIHtcbiAgICAgICAgICAgIGV4cGFuZGFibGUgPSB0aGlzLnJvd0RhdGFbdGhpcy5ncmlkLmhhc0NoaWxkcmVuS2V5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4cGFuZGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRFbXB0eVRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0V4cGFuZGVkSW5kaWNhdG9yVGVtcGxhdGUgfHwgdGhpcy5kZWZhdWx0RXhwYW5kZWRUZW1wbGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93Q29sbGFwc2VkSW5kaWNhdG9yVGVtcGxhdGUgfHwgdGhpcy5kZWZhdWx0Q29sbGFwc2VkVGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVuZEVkaXQoZ3JpZDogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCkge1xuICAgICAgICBpZiAoZ3JpZC5jcnVkU2VydmljZS5pbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICBncmlkLmVuZEVkaXQoKTtcbiAgICAgICAgfVxuICAgICAgICBncmlkLmhncmlkQVBJLmdldENoaWxkR3JpZHModHJ1ZSkuZm9yRWFjaChnID0+IHtcbiAgICAgICAgICAgIGlmIChnLmNydWRTZXJ2aWNlLmluRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIGcuZW5kRWRpdCgpO1xuICAgICAgICB9fSk7XG4gICAgfVxufVxuIl19