@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
150 lines • 20.3 kB
JavaScript
import { __decorate, __extends, __metadata, __read, __spread } from "tslib";
import { IgxGridCellComponent } from '../cell.component';
import { GridBaseAPIService } from '../api.service';
import { ChangeDetectorRef, ElementRef, ChangeDetectionStrategy, Component, OnInit, HostListener, NgZone } from '@angular/core';
import { IgxGridSelectionService, IgxGridCRUDService } from '../selection/selection.service';
import { HammerGesturesManager } from '../../core/touch';
import { PlatformUtil } from '../../core/utils';
var IgxHierarchicalGridCellComponent = /** @class */ (function (_super) {
__extends(IgxHierarchicalGridCellComponent, _super);
function IgxHierarchicalGridCellComponent(selectionService, crudService, gridAPI, cdr, helement, zone, touchManager, platformUtil) {
var _this = _super.call(this, selectionService, crudService, gridAPI, cdr, helement, zone, touchManager, platformUtil) || this;
_this.selectionService = selectionService;
_this.crudService = crudService;
_this.gridAPI = gridAPI;
_this.cdr = cdr;
_this.helement = helement;
_this.zone = zone;
_this.platformUtil = platformUtil;
return _this;
}
IgxHierarchicalGridCellComponent.prototype.ngOnInit = function () {
_super.prototype.ngOnInit.call(this);
this._rootGrid = this._getRootGrid();
};
IgxHierarchicalGridCellComponent.prototype._getRootGrid = function () {
var currGrid = this.grid;
while (currGrid.parent) {
currGrid = currGrid.parent;
}
return currGrid;
};
// TODO: Extend the new selection service to avoid complete traversal
IgxHierarchicalGridCellComponent.prototype._clearAllHighlights = function () {
__spread([this._rootGrid], this._rootGrid.getChildGrids(true)).forEach(function (grid) {
grid.selectionService.clear();
grid.selectionService.activeElement = null;
grid.nativeElement.classList.remove('igx-grid__tr--highlighted');
grid.highlightedRowID = null;
grid.cdr.markForCheck();
});
};
/**
* @hidden
* @internal
*/
IgxHierarchicalGridCellComponent.prototype.onFocus = function (event) {
if (this.focused) {
return;
}
this._clearAllHighlights();
var currentElement = this.grid.nativeElement;
var parentGrid = this.grid;
var childGrid;
// add highligh to the current grid
if (this._rootGrid.id !== currentElement.id) {
currentElement.classList.add('igx-grid__tr--highlighted');
}
// add highligh to the current grid
while (this._rootGrid.id !== parentGrid.id) {
childGrid = parentGrid;
parentGrid = parentGrid.parent;
var parentRowID = parentGrid.hgridAPI.getParentRowId(childGrid);
parentGrid.highlightedRowID = parentRowID;
}
_super.prototype.onFocus.call(this, event);
};
// TODO: Refactor
/**
* @hidden
* @internal
*/
IgxHierarchicalGridCellComponent.prototype.dispatchEvent = function (event) {
var _this = this;
var key = event.key.toLowerCase();
if (event.altKey && !this.row.added) {
var grid = this.gridAPI.grid;
var state = this.gridAPI.grid.hierarchicalState;
var collapse = this.row.expanded && (key === 'left' || key === 'arrowleft' || key === 'up' || key === 'arrowup');
var expand = !this.row.expanded && (key === 'right' || key === 'arrowright' || key === 'down' || key === 'arrowdown');
if (collapse) {
grid.hierarchicalState = state.filter(function (v) {
return v.rowID !== _this.row.rowID;
});
}
else if (expand) {
state.push({ rowID: this.row.rowID });
grid.hierarchicalState = __spread(state);
}
if (expand || collapse) {
var rowID = this.cellID.rowID;
grid.cdr.detectChanges();
this.persistFocusedCell(rowID);
}
return;
}
_super.prototype.dispatchEvent.call(this, event);
};
IgxHierarchicalGridCellComponent.prototype.persistFocusedCell = function (rowID) {
var _this = this;
requestAnimationFrame(function () {
// TODO: Test it out
var cell = _this.gridAPI.get_cell_by_key(rowID, _this.column.field);
if (cell) {
cell.nativeElement.focus();
}
});
};
IgxHierarchicalGridCellComponent.ctorParameters = function () { return [
{ type: IgxGridSelectionService },
{ type: IgxGridCRUDService },
{ type: GridBaseAPIService },
{ type: ChangeDetectorRef },
{ type: ElementRef },
{ type: NgZone },
{ type: HammerGesturesManager },
{ type: PlatformUtil }
]; };
__decorate([
HostListener('focus', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", void 0)
], IgxHierarchicalGridCellComponent.prototype, "onFocus", null);
__decorate([
HostListener('keydown', ['$event']),
__metadata("design:type", Function),
__metadata("design:paramtypes", [KeyboardEvent]),
__metadata("design:returntype", void 0)
], IgxHierarchicalGridCellComponent.prototype, "dispatchEvent", null);
IgxHierarchicalGridCellComponent = __decorate([
Component({
changeDetection: ChangeDetectionStrategy.OnPush,
preserveWhitespaces: false,
selector: 'igx-hierarchical-grid-cell',
template: "<ng-template #defaultCell>\n <div igxTextHighlight style=\"pointer-events: none\" [cssClass]=\"highlightClass\" [activeCssClass]=\"activeHighlightClass\" [groupName]=\"gridID\"\n [value]=\"formatter ? formatter(value) : column.dataType === 'number' ? (value | igxdecimal: grid.locale) : column.dataType === 'date' ? (value | igxdate: grid.locale) : value\"\n [row]=\"rowData\" [column]=\"this.column.field\" [containerClass]=\"'igx-grid__td-text'\"\n class=\"igx-grid__td-text\">{{ formatter ? formatter(value) : column.dataType === 'number' ? (value | igxdecimal:\n grid.locale) : column.dataType === 'date' ? (value | igxdate: grid.locale) : value }}</div>\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n <ng-container *ngIf=\"column.dataType === 'string'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [value]=\"editValue\" (input)=\"editValue = $event.target.value\" [igxFocus]=\"focused\" />\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'number'\">\n <igx-input-group displayDensity=\"compact\">\n <input igxInput [value]=\"editValue\" (input)=\"editValue = $event.target.value\" [igxFocus]=\"focused\" type=\"number\">\n </igx-input-group>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'boolean'\">\n <igx-checkbox (change)=\"editValue = $event.checked\" [value]=\"editValue\" [checked]=\"editValue\"\n [igxFocus]=\"focused\" [disableRipple]=\"true\"></igx-checkbox>\n </ng-container>\n <ng-container *ngIf=\"column.dataType === 'date'\">\n <igx-date-picker [style.width.%]=\"100\" [outlet]=\"grid.outletDirective\" mode=\"dropdown\"\n [locale]=\"grid.locale\" [(value)]=\"editValue\" [igxFocus]=\"focused\" [labelVisibility]=\"false\">\n </igx-date-picker>\n </ng-container>\n</ng-template>\n<ng-container *ngTemplateOutlet=\"template; context: context\">\n</ng-container>\n",
providers: [HammerGesturesManager]
}),
__metadata("design:paramtypes", [IgxGridSelectionService,
IgxGridCRUDService,
GridBaseAPIService,
ChangeDetectorRef,
ElementRef,
NgZone,
HammerGesturesManager,
PlatformUtil])
], IgxHierarchicalGridCellComponent);
return IgxHierarchicalGridCellComponent;
}(IgxGridCellComponent));
export { IgxHierarchicalGridCellComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLWNlbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9ncmlkcy9oaWVyYXJjaGljYWwtZ3JpZC9oaWVyYXJjaGljYWwtY2VsbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUNyRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFTaEQ7SUFBc0Qsb0RBQW9CO0lBS3RFLDBDQUNjLGdCQUF5QyxFQUN6QyxXQUErQixFQUNsQyxPQUF5RCxFQUN6RCxHQUFzQixFQUNyQixRQUFvQixFQUNsQixJQUFZLEVBQ3RCLFlBQW1DLEVBQ3pCLFlBQTBCO1FBUnhDLFlBVVEsa0JBQU0sZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLFNBQ2hHO1FBVlEsc0JBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQUN6QyxpQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDbEMsYUFBTyxHQUFQLE9BQU8sQ0FBa0Q7UUFDekQsU0FBRyxHQUFILEdBQUcsQ0FBbUI7UUFDckIsY0FBUSxHQUFSLFFBQVEsQ0FBWTtRQUNsQixV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TixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzlCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztnQkF4RytCLHVCQUF1QjtnQkFDNUIsa0JBQWtCO2dCQUN6QixrQkFBa0I7Z0JBQ3RCLGlCQUFpQjtnQkFDWCxVQUFVO2dCQUNaLE1BQU07Z0JBQ1IscUJBQXFCO2dCQUNYLFlBQVk7O0lBa0N4QztRQURDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7OzttRUF1QmpDO0lBUUQ7UUFEQyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7O3lDQUNmLGFBQWE7O3lFQXVCakM7SUFwR1EsZ0NBQWdDO1FBUDVDLFNBQVMsQ0FBQztZQUNQLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1lBQy9DLG1CQUFtQixFQUFFLEtBQUs7WUFDMUIsUUFBUSxFQUFFLDRCQUE0QjtZQUN0QyxpL0RBQXVDO1lBQ3ZDLFNBQVMsRUFBRSxDQUFDLHFCQUFxQixDQUFDO1NBQ3JDLENBQUM7eUNBT2tDLHVCQUF1QjtZQUM1QixrQkFBa0I7WUFDekIsa0JBQWtCO1lBQ3RCLGlCQUFpQjtZQUNYLFVBQVU7WUFDWixNQUFNO1lBQ1IscUJBQXFCO1lBQ1gsWUFBWTtPQWIvQixnQ0FBZ0MsQ0ErRzVDO0lBQUQsdUNBQUM7Q0FBQSxBQS9HRCxDQUFzRCxvQkFBb0IsR0ErR3pFO1NBL0dZLGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElneEdyaWRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZEJhc2VBUElTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVsZW1lbnRSZWYsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsXG4gICAgIE9uSW5pdCwgSG9zdExpc3RlbmVyLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSwgSWd4R3JpZENSVURTZXJ2aWNlIH0gZnJvbSAnLi4vc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEhhbW1lckdlc3R1cmVzTWFuYWdlciB9IGZyb20gJy4uLy4uL2NvcmUvdG91Y2gnO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIHNlbGVjdG9yOiAnaWd4LWhpZXJhcmNoaWNhbC1ncmlkLWNlbGwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi8uLi9jZWxsLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtIYW1tZXJHZXN0dXJlc01hbmFnZXJdXG59KVxuZXhwb3J0IGNsYXNzIElneEhpZXJhcmNoaWNhbEdyaWRDZWxsQ29tcG9uZW50IGV4dGVuZHMgSWd4R3JpZENlbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgLy8gcHJvdGVjdGVkIGhTZWxlY3Rpb247XG4gICAgcHJvdGVjdGVkIF9yb290R3JpZDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgc2VsZWN0aW9uU2VydmljZTogSWd4R3JpZFNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBjcnVkU2VydmljZTogSWd4R3JpZENSVURTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQ+LFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBoZWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHJvdGVjdGVkIHpvbmU6IE5nWm9uZSxcbiAgICAgICAgdG91Y2hNYW5hZ2VyOiBIYW1tZXJHZXN0dXJlc01hbmFnZXIsXG4gICAgICAgIHByb3RlY3RlZCBwbGF0Zm9ybVV0aWw6IFBsYXRmb3JtVXRpbFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHN1cGVyKHNlbGVjdGlvblNlcnZpY2UsIGNydWRTZXJ2aWNlLCBncmlkQVBJLCBjZHIsIGhlbGVtZW50LCB6b25lLCB0b3VjaE1hbmFnZXIsIHBsYXRmb3JtVXRpbCk7XG4gICAgICAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5fcm9vdEdyaWQgPSB0aGlzLl9nZXRSb290R3JpZCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFJvb3RHcmlkKCkge1xuICAgICAgICBsZXQgY3VyckdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIHdoaWxlIChjdXJyR3JpZC5wYXJlbnQpIHtcbiAgICAgICAgICAgIGN1cnJHcmlkID0gY3VyckdyaWQucGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyR3JpZDtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBFeHRlbmQgdGhlIG5ldyBzZWxlY3Rpb24gc2VydmljZSB0byBhdm9pZCBjb21wbGV0ZSB0cmF2ZXJzYWxcbiAgICBfY2xlYXJBbGxIaWdobGlnaHRzKCkge1xuICAgICAgICBbdGhpcy5fcm9vdEdyaWQsIC4uLnRoaXMuX3Jvb3RHcmlkLmdldENoaWxkR3JpZHModHJ1ZSldLmZvckVhY2goZ3JpZCA9PiB7XG4gICAgICAgICAgICBncmlkLnNlbGVjdGlvblNlcnZpY2UuY2xlYXIoKTtcbiAgICAgICAgICAgIGdyaWQuc2VsZWN0aW9uU2VydmljZS5hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIGdyaWQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpZ3gtZ3JpZF9fdHItLWhpZ2hsaWdodGVkJyk7XG4gICAgICAgICAgICBncmlkLmhpZ2hsaWdodGVkUm93SUQgPSBudWxsO1xuICAgICAgICAgICAgZ3JpZC5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycsIFsnJGV2ZW50J10pXG4gICAgb25Gb2N1cyhldmVudCkge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2xlYXJBbGxIaWdobGlnaHRzKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50ID0gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCBwYXJlbnRHcmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBsZXQgY2hpbGRHcmlkO1xuICAgICAgICAvLyBhZGQgaGlnaGxpZ2ggdG8gdGhlIGN1cnJlbnQgZ3JpZFxuICAgICAgICBpZiAodGhpcy5fcm9vdEdyaWQuaWQgIT09IGN1cnJlbnRFbGVtZW50LmlkKSB7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpZ3gtZ3JpZF9fdHItLWhpZ2hsaWdodGVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgaGlnaGxpZ2ggdG8gdGhlIGN1cnJlbnQgZ3JpZFxuICAgICAgICB3aGlsZSAodGhpcy5fcm9vdEdyaWQuaWQgIT09IHBhcmVudEdyaWQuaWQpIHtcbiAgICAgICAgICAgIGNoaWxkR3JpZCA9IHBhcmVudEdyaWQ7XG4gICAgICAgICAgICBwYXJlbnRHcmlkID0gcGFyZW50R3JpZC5wYXJlbnQ7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFJvd0lEID0gcGFyZW50R3JpZC5oZ3JpZEFQSS5nZXRQYXJlbnRSb3dJZChjaGlsZEdyaWQpO1xuICAgICAgICAgICAgcGFyZW50R3JpZC5oaWdobGlnaHRlZFJvd0lEID0gcGFyZW50Um93SUQ7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIub25Gb2N1cyhldmVudCk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogUmVmYWN0b3JcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgZGlzcGF0Y2hFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGV2ZW50LmFsdEtleSAmJiAhdGhpcy5yb3cuYWRkZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWRBUEkuZ3JpZDtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5ncmlkQVBJLmdyaWQuaGllcmFyY2hpY2FsU3RhdGU7XG4gICAgICAgICAgICBjb25zdCBjb2xsYXBzZSA9IHRoaXMucm93LmV4cGFuZGVkICYmIChrZXkgPT09ICdsZWZ0JyB8fCBrZXkgPT09ICdhcnJvd2xlZnQnIHx8IGtleSA9PT0gJ3VwJyB8fCBrZXkgPT09ICdhcnJvd3VwJyk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmQgPSAhdGhpcy5yb3cuZXhwYW5kZWQgJiYgKGtleSA9PT0gJ3JpZ2h0JyB8fCBrZXkgPT09ICdhcnJvd3JpZ2h0JyB8fCBrZXkgPT09ICdkb3duJyB8fCBrZXkgPT09ICdhcnJvd2Rvd24nKTtcbiAgICAgICAgICAgIGlmIChjb2xsYXBzZSkge1xuICAgICAgICAgICAgICAgIGdyaWQuaGllcmFyY2hpY2FsU3RhdGUgPSBzdGF0ZS5maWx0ZXIodiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2LnJvd0lEICE9PSB0aGlzLnJvdy5yb3dJRDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUucHVzaCh7IHJvd0lEOiB0aGlzLnJvdy5yb3dJRCB9KTtcbiAgICAgICAgICAgICAgICBncmlkLmhpZXJhcmNoaWNhbFN0YXRlID0gWy4uLnN0YXRlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChleHBhbmQgfHwgY29sbGFwc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuY2VsbElELnJvd0lEO1xuICAgICAgICAgICAgICAgIGdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNpc3RGb2N1c2VkQ2VsbChyb3dJRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHBlcnNpc3RGb2N1c2VkQ2VsbChyb3dJRCkge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgLy8gVE9ETzogVGVzdCBpdCBvdXRcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmdyaWRBUEkuZ2V0X2NlbGxfYnlfa2V5KHJvd0lELCB0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgICAgIGNlbGwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=