UNPKG

@catull/igniteui-angular

Version:

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

202 lines 27.5 kB
import { __decorate, __extends, __metadata, __param } from "tslib"; import { ElementRef, NgZone, ChangeDetectorRef, IterableDiffers, ViewContainerRef, Inject, ComponentFactoryResolver, Optional, Input, ViewChild, TemplateRef, Directive } from '@angular/core'; import { IgxGridBaseDirective, IgxGridTransaction } from '../grid-base.directive'; import { GridBaseAPIService } from '../api.service'; import { IgxFilteringService } from '../filtering/grid-filtering.service'; import { DisplayDensityToken } from '../../core/displayDensity'; import { IgxSummaryOperand } from '../summaries/grid-summary'; import { IgxOverlayService, IgxTransactionService, Transaction, TransactionService, State } from '../../services/index'; import { DOCUMENT } from '@angular/common'; import { IgxHierarchicalGridNavigationService } from './hierarchical-grid-navigation.service'; import { IgxGridSummaryService } from '../summaries/grid-summary.service'; import { IgxGridSelectionService, IgxGridCRUDService } from '../selection/selection.service'; import { IgxColumnResizingService } from '../resizing/resizing.service'; import { IgxColumnGroupComponent } from '../columns/column-group.component'; import { IgxColumnComponent } from '../columns/column.component'; export var IgxHierarchicalTransactionServiceFactory = { provide: IgxGridTransaction, useFactory: hierarchicalTransactionServiceFactory }; export function hierarchicalTransactionServiceFactory() { return new IgxTransactionService(); } var IgxHierarchicalGridBaseDirective = /** @class */ (function (_super) { __extends(IgxHierarchicalGridBaseDirective, _super); function IgxHierarchicalGridBaseDirective(selectionService, crudService, colResizingService, gridAPI, transactionFactory, elementRef, zone, document, cdr, resolver, differs, viewRef, navigation, filteringService, overlayService, summaryService, _displayDensityOptions) { var _this = _super.call(this, selectionService, crudService, colResizingService, gridAPI, transactionFactory, elementRef, zone, document, cdr, resolver, differs, viewRef, navigation, filteringService, overlayService, summaryService, _displayDensityOptions) || this; _this.selectionService = selectionService; _this.colResizingService = colResizingService; _this.transactionFactory = transactionFactory; _this.document = document; _this.overlayService = overlayService; _this.summaryService = summaryService; _this._displayDensityOptions = _displayDensityOptions; _this.showExpandAll = false; _this._expandChildren = false; _this.hgridAPI = gridAPI; return _this; } Object.defineProperty(IgxHierarchicalGridBaseDirective.prototype, "maxLevelHeaderDepth", { /** * @hidden */ get: function () { if (this._maxLevelHeaderDepth === null) { this._maxLevelHeaderDepth = this.columnList.reduce(function (acc, col) { return Math.max(acc, col.level); }, 0); } return this._maxLevelHeaderDepth; }, enumerable: true, configurable: true }); Object.defineProperty(IgxHierarchicalGridBaseDirective.prototype, "outlet", { /** * @hidden */ get: function () { return this.rootGrid ? this.rootGrid.outletDirective : this.outletDirective; }, enumerable: true, configurable: true }); /** * @hidden */ IgxHierarchicalGridBaseDirective.prototype.createColumnsList = function (cols) { var _this = this; var columns = []; var topLevelCols = this.onlyTopLevel(cols); topLevelCols.forEach(function (col) { var ref = _this._createColumn(col); ref.changeDetectorRef.detectChanges(); columns.push(ref.instance); }); var result = flatten(columns); this.columnList.reset(result); this.columnList.notifyOnChanges(); this.initPinning(); }; IgxHierarchicalGridBaseDirective.prototype._createColumn = function (col) { var ref; if (col instanceof IgxColumnGroupComponent) { ref = this._createColGroupComponent(col); } else { ref = this._createColComponent(col); } return ref; }; IgxHierarchicalGridBaseDirective.prototype._createColGroupComponent = function (col) { var _this = this; var factoryGroup = this.resolver.resolveComponentFactory(IgxColumnGroupComponent); var ref = this.viewRef.createComponent(factoryGroup, null, this.viewRef.injector); ref.changeDetectorRef.detectChanges(); factoryGroup.inputs.forEach(function (input) { var propName = input.propName; ref.instance[propName] = col[propName]; }); if (col.children.length > 0) { var newChildren_1 = []; col.children.forEach(function (child) { var newCol = _this._createColumn(child).instance; newCol.parent = ref.instance; newChildren_1.push(newCol); }); ref.instance.children.reset(newChildren_1); ref.instance.children.notifyOnChanges(); } return ref; }; IgxHierarchicalGridBaseDirective.prototype._createColComponent = function (col) { var factoryColumn = this.resolver.resolveComponentFactory(IgxColumnComponent); var ref = this.viewRef.createComponent(factoryColumn, null, this.viewRef.injector); factoryColumn.inputs.forEach(function (input) { var propName = input.propName; if (!(col[propName] instanceof IgxSummaryOperand)) { ref.instance[propName] = col[propName]; } else { ref.instance[propName] = col[propName].constructor; } }); return ref; }; IgxHierarchicalGridBaseDirective.prototype.getGridsForIsland = function (rowIslandID) { return this.hgridAPI.getChildGridsForRowIsland(rowIslandID); }; IgxHierarchicalGridBaseDirective.prototype.getChildGrid = function (path) { if (!path) { return; } return this.hgridAPI.getChildGrid(path); }; IgxHierarchicalGridBaseDirective.ctorParameters = function () { return [ { type: IgxGridSelectionService }, { type: IgxGridCRUDService }, { type: IgxColumnResizingService }, { type: GridBaseAPIService }, { type: undefined, decorators: [{ type: Inject, args: [IgxGridTransaction,] }] }, { type: ElementRef }, { type: NgZone }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }, { type: ChangeDetectorRef }, { type: ComponentFactoryResolver }, { type: IterableDiffers }, { type: ViewContainerRef }, { type: IgxHierarchicalGridNavigationService }, { type: IgxFilteringService }, { type: IgxOverlayService, decorators: [{ type: Inject, args: [IgxOverlayService,] }] }, { type: IgxGridSummaryService }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DisplayDensityToken,] }] } ]; }; __decorate([ Input(), __metadata("design:type", Boolean) ], IgxHierarchicalGridBaseDirective.prototype, "expandChildren", void 0); __decorate([ Input(), __metadata("design:type", String) ], IgxHierarchicalGridBaseDirective.prototype, "hasChildrenKey", void 0); __decorate([ Input(), __metadata("design:type", Object) ], IgxHierarchicalGridBaseDirective.prototype, "showExpandAll", void 0); __decorate([ ViewChild('dragIndicatorIconBase', { read: TemplateRef, static: true }), __metadata("design:type", TemplateRef) ], IgxHierarchicalGridBaseDirective.prototype, "dragIndicatorIconBase", void 0); IgxHierarchicalGridBaseDirective = __decorate([ Directive({ selector: '[igxHierarchicalGridBase]' }), __param(4, Inject(IgxGridTransaction)), __param(7, Inject(DOCUMENT)), __param(14, Inject(IgxOverlayService)), __param(16, Optional()), __param(16, Inject(DisplayDensityToken)), __metadata("design:paramtypes", [IgxGridSelectionService, IgxGridCRUDService, IgxColumnResizingService, GridBaseAPIService, Object, ElementRef, NgZone, Object, ChangeDetectorRef, ComponentFactoryResolver, IterableDiffers, ViewContainerRef, IgxHierarchicalGridNavigationService, IgxFilteringService, IgxOverlayService, IgxGridSummaryService, Object]) ], IgxHierarchicalGridBaseDirective); return IgxHierarchicalGridBaseDirective; }(IgxGridBaseDirective)); export { IgxHierarchicalGridBaseDirective }; function flatten(arr) { var result = []; arr.forEach(function (el) { result.push(el); if (el.children) { result = result.concat(flatten(el.children.toArray())); } }); return result; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpY2FsLWdyaWQtYmFzZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLWJhc2UuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsVUFBVSxFQUNWLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixNQUFNLEVBQ04sd0JBQXdCLEVBQ3hCLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHcEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUEwQixtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTdGLE9BQU8sRUFBRSx3QkFBd0IsRUFB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O1FBRzFCLFdBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBT2hCLFlBQUEsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFFekIsWUFBQSxRQUFRLEVBQUUsQ0FBQSxFQUFFLFlBQUEsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUE7eUNBaEJmLHVCQUF1QjtZQUNuQyxrQkFBa0I7WUFDSix3QkFBd0I7WUFDMUMsa0JBQWtCLFVBRWYsVUFBVTtZQUNoQixNQUFNLFVBRVAsaUJBQWlCO1lBQ1osd0JBQXdCO1lBQ3pCLGVBQWU7WUFDZixnQkFBZ0I7WUFDYixvQ0FBb0M7WUFDOUIsbUJBQW1CO1lBQ2dCLGlCQUFpQjtZQUMvQyxxQkFBcUI7T0FyRXZDLGdDQUFnQyxDQW9LNUM7SUFBRCx1Q0FBQztDQUFBLEFBcEtELENBQXNELG9CQUFvQixHQW9LekU7U0FwS1ksZ0NBQWdDO0FBc0s3QyxTQUFTLE9BQU8sQ0FBQyxHQUFVO0lBQ3ZCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUVoQixHQUFHLENBQUMsT0FBTyxDQUFDLFVBQUEsRUFBRTtRQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEIsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQ2IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzFEO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBFbGVtZW50UmVmLFxuICAgIE5nWm9uZSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBJdGVyYWJsZURpZmZlcnMsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBJbmplY3QsXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIE9wdGlvbmFsLFxuICAgIElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBEaXJlY3RpdmVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSwgSWd4R3JpZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBHcmlkQmFzZUFQSVNlcnZpY2UgfSBmcm9tICcuLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQVBJU2VydmljZSB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4Um93SXNsYW5kQ29tcG9uZW50IH0gZnJvbSAnLi9yb3ctaXNsYW5kLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hGaWx0ZXJpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsdGVyaW5nL2dyaWQtZmlsdGVyaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgSURpc3BsYXlEZW5zaXR5T3B0aW9ucywgRGlzcGxheURlbnNpdHlUb2tlbiB9IGZyb20gJy4uLy4uL2NvcmUvZGlzcGxheURlbnNpdHknO1xuaW1wb3J0IHsgSWd4U3VtbWFyeU9wZXJhbmQgfSBmcm9tICcuLi9zdW1tYXJpZXMvZ3JpZC1zdW1tYXJ5JztcbmltcG9ydCB7IElneE92ZXJsYXlTZXJ2aWNlLCBJZ3hUcmFuc2FjdGlvblNlcnZpY2UsIFRyYW5zYWN0aW9uLCBUcmFuc2FjdGlvblNlcnZpY2UsIFN0YXRlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaW5kZXgnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4R3JpZFN1bW1hcnlTZXJ2aWNlIH0gZnJvbSAnLi4vc3VtbWFyaWVzL2dyaWQtc3VtbWFyeS5zZXJ2aWNlJztcbmltcG9ydCB7IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlLCBJZ3hHcmlkQ1JVRFNlcnZpY2UgfSBmcm9tICcuLi9zZWxlY3Rpb24vc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWd4Q2hpbGRHcmlkUm93Q29tcG9uZW50IH0gZnJvbSAnLi9jaGlsZC1ncmlkLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlIH0gZnJvbSAnLi4vcmVzaXppbmcvcmVzaXppbmcuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCB9IGZyb20gJy4uL2NvbHVtbnMvY29sdW1uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgSWd4SGllcmFyY2hpY2FsVHJhbnNhY3Rpb25TZXJ2aWNlRmFjdG9yeSA9IHtcbiAgICBwcm92aWRlOiBJZ3hHcmlkVHJhbnNhY3Rpb24sXG4gICAgdXNlRmFjdG9yeTogaGllcmFyY2hpY2FsVHJhbnNhY3Rpb25TZXJ2aWNlRmFjdG9yeVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGhpZXJhcmNoaWNhbFRyYW5zYWN0aW9uU2VydmljZUZhY3RvcnkoKSB7XG4gICAgcmV0dXJuIG5ldyBJZ3hUcmFuc2FjdGlvblNlcnZpY2UoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUGF0aFNlZ21lbnQge1xuICAgIHJvd0lEOiBhbnk7XG4gICAgcm93SXNsYW5kS2V5OiBzdHJpbmc7XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2lneEhpZXJhcmNoaWNhbEdyaWRCYXNlXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4SGllcmFyY2hpY2FsR3JpZEJhc2VEaXJlY3RpdmUgZXh0ZW5kcyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB7XG4gICAgcHVibGljIHJvb3RHcmlkO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZXhwYW5kQ2hpbGRyZW46IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoYXNDaGlsZHJlbktleTogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd0V4cGFuZEFsbCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBtYXhMZXZlbEhlYWRlckRlcHRoKCkge1xuICAgICAgICBpZiAodGhpcy5fbWF4TGV2ZWxIZWFkZXJEZXB0aCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fbWF4TGV2ZWxIZWFkZXJEZXB0aCA9IHRoaXMuY29sdW1uTGlzdC5yZWR1Y2UoKGFjYywgY29sKSA9PiBNYXRoLm1heChhY2MsIGNvbC5sZXZlbCksIDApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhMZXZlbEhlYWRlckRlcHRoO1xuICAgIH1cblxuICAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGdldCBvdXRsZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3RHcmlkID8gdGhpcy5yb290R3JpZC5vdXRsZXREaXJlY3RpdmUgOiB0aGlzLm91dGxldERpcmVjdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGhncmlkQVBJOiBJZ3hIaWVyYXJjaGljYWxHcmlkQVBJU2VydmljZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGFyZW50SXNsYW5kOiBJZ3hSb3dJc2xhbmRDb21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgKi9cbiAgICBwdWJsaWMgY2hpbGRSb3c6IElneENoaWxkR3JpZFJvd0NvbXBvbmVudDtcblxuICAgIHByb3RlY3RlZCBfZXhwYW5kQ2hpbGRyZW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkcmFnSW5kaWNhdG9ySWNvbkJhc2UnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgZHJhZ0luZGljYXRvckljb25CYXNlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgY3J1ZFNlcnZpY2U6IElneEdyaWRDUlVEU2VydmljZSxcbiAgICAgICAgcHVibGljIGNvbFJlc2l6aW5nU2VydmljZTogSWd4Q29sdW1uUmVzaXppbmdTZXJ2aWNlLFxuICAgICAgICBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4sXG4gICAgICAgIEBJbmplY3QoSWd4R3JpZFRyYW5zYWN0aW9uKSBwcm90ZWN0ZWQgdHJhbnNhY3Rpb25GYWN0b3J5OiBUcmFuc2FjdGlvblNlcnZpY2U8VHJhbnNhY3Rpb24sIFN0YXRlPixcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgem9uZTogTmdab25lLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwdWJsaWMgZG9jdW1lbnQsXG4gICAgICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgICAgICAgdmlld1JlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgbmF2aWdhdGlvbjogSWd4SGllcmFyY2hpY2FsR3JpZE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBmaWx0ZXJpbmdTZXJ2aWNlOiBJZ3hGaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KElneE92ZXJsYXlTZXJ2aWNlKSBwcm90ZWN0ZWQgb3ZlcmxheVNlcnZpY2U6IElneE92ZXJsYXlTZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgc3VtbWFyeVNlcnZpY2U6IElneEdyaWRTdW1tYXJ5U2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9ucykge1xuICAgICAgICBzdXBlcihcbiAgICAgICAgICAgIHNlbGVjdGlvblNlcnZpY2UsXG4gICAgICAgICAgICBjcnVkU2VydmljZSxcbiAgICAgICAgICAgIGNvbFJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgICAgIGdyaWRBUEksXG4gICAgICAgICAgICB0cmFuc2FjdGlvbkZhY3RvcnksXG4gICAgICAgICAgICBlbGVtZW50UmVmLFxuICAgICAgICAgICAgem9uZSxcbiAgICAgICAgICAgIGRvY3VtZW50LFxuICAgICAgICAgICAgY2RyLFxuICAgICAgICAgICAgcmVzb2x2ZXIsXG4gICAgICAgICAgICBkaWZmZXJzLFxuICAgICAgICAgICAgdmlld1JlZixcbiAgICAgICAgICAgIG5hdmlnYXRpb24sXG4gICAgICAgICAgICBmaWx0ZXJpbmdTZXJ2aWNlLFxuICAgICAgICAgICAgb3ZlcmxheVNlcnZpY2UsXG4gICAgICAgICAgICBzdW1tYXJ5U2VydmljZSxcbiAgICAgICAgICAgIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMpO1xuICAgICAgICB0aGlzLmhncmlkQVBJID0gPElneEhpZXJhcmNoaWNhbEdyaWRBUElTZXJ2aWNlPmdyaWRBUEk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVDb2x1bW5zTGlzdChjb2xzOiBBcnJheTxhbnk+KSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBbXTtcbiAgICAgICAgY29uc3QgdG9wTGV2ZWxDb2xzID0gdGhpcy5vbmx5VG9wTGV2ZWwoY29scyk7XG4gICAgICAgIHRvcExldmVsQ29scy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX2NyZWF0ZUNvbHVtbihjb2wpO1xuICAgICAgICAgICAgcmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGNvbHVtbnMucHVzaChyZWYuaW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZmxhdHRlbihjb2x1bW5zKTtcbiAgICAgICAgdGhpcy5jb2x1bW5MaXN0LnJlc2V0KHJlc3VsdCk7XG4gICAgICAgIHRoaXMuY29sdW1uTGlzdC5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5pbml0UGlubmluZygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfY3JlYXRlQ29sdW1uKGNvbCkge1xuICAgICAgICBsZXQgcmVmO1xuICAgICAgICBpZiAoY29sIGluc3RhbmNlb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJlZiA9IHRoaXMuX2NyZWF0ZUNvbEdyb3VwQ29tcG9uZW50KGNvbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWYgPSB0aGlzLl9jcmVhdGVDb2xDb21wb25lbnQoY29sKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVmO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfY3JlYXRlQ29sR3JvdXBDb21wb25lbnQoY29sOiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBmYWN0b3J5R3JvdXAgPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KElneENvbHVtbkdyb3VwQ29tcG9uZW50KTtcbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy52aWV3UmVmLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5R3JvdXAsIG51bGwsIHRoaXMudmlld1JlZi5pbmplY3Rvcik7XG4gICAgICAgIHJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIGZhY3RvcnlHcm91cC5pbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BOYW1lID0gaW5wdXQucHJvcE5hbWU7XG4gICAgICAgICAgICAoPGFueT5yZWYuaW5zdGFuY2UpW3Byb3BOYW1lXSA9ICg8YW55PmNvbClbcHJvcE5hbWVdO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdDaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgY29sLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbCA9IHRoaXMuX2NyZWF0ZUNvbHVtbihjaGlsZCkuaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgbmV3Q29sLnBhcmVudCA9IHJlZi5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5wdXNoKG5ld0NvbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICg8SWd4Q29sdW1uR3JvdXBDb21wb25lbnQ+cmVmLmluc3RhbmNlKS5jaGlsZHJlbi5yZXNldChuZXdDaGlsZHJlbik7XG4gICAgICAgICAgICAoPElneENvbHVtbkdyb3VwQ29tcG9uZW50PnJlZi5pbnN0YW5jZSkuY2hpbGRyZW4ubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2NyZWF0ZUNvbENvbXBvbmVudChjb2wpIHtcbiAgICAgICAgY29uc3QgZmFjdG9yeUNvbHVtbiA9IHRoaXMucmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoSWd4Q29sdW1uQ29tcG9uZW50KTtcbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy52aWV3UmVmLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5Q29sdW1uLCBudWxsLCB0aGlzLnZpZXdSZWYuaW5qZWN0b3IpO1xuICAgICAgICBmYWN0b3J5Q29sdW1uLmlucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBpbnB1dC5wcm9wTmFtZTtcbiAgICAgICAgICAgIGlmICghKCg8YW55PmNvbClbcHJvcE5hbWVdIGluc3RhbmNlb2YgSWd4U3VtbWFyeU9wZXJhbmQpKSB7XG4gICAgICAgICAgICAgICAgKDxhbnk+cmVmLmluc3RhbmNlKVtwcm9wTmFtZV0gPSAoPGFueT5jb2wpW3Byb3BOYW1lXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKDxhbnk+cmVmLmluc3RhbmNlKVtwcm9wTmFtZV0gPSBjb2xbcHJvcE5hbWVdLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlZjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0R3JpZHNGb3JJc2xhbmQocm93SXNsYW5kSUQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5oZ3JpZEFQSS5nZXRDaGlsZEdyaWRzRm9yUm93SXNsYW5kKHJvd0lzbGFuZElEKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0Q2hpbGRHcmlkKHBhdGg6IEFycmF5PElQYXRoU2VnbWVudD4pIHtcbiAgICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaGdyaWRBUEkuZ2V0Q2hpbGRHcmlkKHBhdGgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZmxhdHRlbihhcnI6IGFueVtdKSB7XG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuXG4gICAgYXJyLmZvckVhY2goZWwgPT4ge1xuICAgICAgICByZXN1bHQucHVzaChlbCk7XG4gICAgICAgIGlmIChlbC5jaGlsZHJlbikge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmNvbmNhdChmbGF0dGVuKGVsLmNoaWxkcmVuLnRvQXJyYXkoKSkpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==