UNPKG

@anjuna/angular-core

Version:

<p align="center"> <img src="//cdn.zuora.com/theme/0.6.0/assets/anjuna/anjuna-logo.svg"/> <br/><br/> </p>

178 lines 23.9 kB
import { __decorate, __metadata } from "tslib"; import { ContentChildren, Directive, ElementRef, HostListener, OnDestroy, QueryList } from '@angular/core'; import { DomOutlet } from '../common/template/DomOutlet'; import { Template } from '../common/template/Template'; import { TemplateDirective } from '../common/template/template.directive'; /* tslint:disable:directive-selector */ var AnjTable = /** @class */ (function () { function AnjTable(elRef) { this.outletRows = []; this.element = elRef.nativeElement; this.element.renderer = this; } AnjTable_1 = AnjTable; AnjTable.rowContext = function (row, index, column) { return { $implicit: row, column: column, index: index }; }; AnjTable.updateContext = function (outlet, context) { outlet.updateContext(context); }; AnjTable.prototype.ngOnDestroy = function () { this.outletRows.map(function (rowMap) { for (var templateName in rowMap) { if (rowMap[templateName]) { rowMap[templateName] = rowMap[templateName].dispose(); } } return rowMap; }); }; /** * Fixes https://git.zias.io/ui-foundation/anjuna/issues/876 * When the columns change, destory all portals without killing the parent node */ AnjTable.prototype.onColumnsUpdated = function () { this.outletRows.map(function (rowMap) { for (var templateName in rowMap) { if (rowMap[templateName]) { rowMap[templateName] = rowMap[templateName].dispose(false); } } return rowMap; }); }; /* These next three methods are a mess of duplicated logic - they will probably stay that way until feature complete, then I'll clean em up */ AnjTable.prototype.cellTemplate = function (cell, offset, col, row, rowIndex, template) { var rowMap = this.outletRows[rowIndex] || {}; var outlet = rowMap[col.name]; if (!cell) { /** * Removing the line: * rowMap[col.name] = outlet ? outlet.dispose() : undefined; * which fixes https://git.zias.io/ui-foundation/anjuna/issues/850. * Like the detail situation, I do not understand why this works.. */ return; } if (outlet) { if (cell !== outlet.targetElement) { this.updateOutlet(outlet, template, cell, AnjTable_1.rowContext(row, rowIndex, col)); } else { AnjTable_1.updateContext(outlet, AnjTable_1.rowContext(row, rowIndex, col)); } } else { rowMap[col.name] = this.createOutlet(cell, template, AnjTable_1.rowContext(row, rowIndex, col)); this.outletRows[rowIndex] = rowMap; } col.initCell(cell, offset); }; AnjTable.prototype.rowTemplate = function (templateName, targetEl, row, rowIndex) { // Dispose row template no longer used for that index this.outletRows[rowIndex] = this.filterRowTemplates(this.outletRows[rowIndex], templateName); var outlet = this.outletRows[rowIndex][templateName]; if (!targetEl) { this.outletRows[rowIndex][templateName] = outlet ? outlet.dispose() : undefined; return; } if (outlet) { if (targetEl !== outlet.targetElement) { this.updateOutlet(outlet, templateName, targetEl, AnjTable_1.rowContext(row, rowIndex)); } else { AnjTable_1.updateContext(outlet, AnjTable_1.rowContext(row, rowIndex)); } } else { this.outletRows[rowIndex][templateName] = this.createOutlet(targetEl, templateName, AnjTable_1.rowContext(row, rowIndex)); this.outletRows[rowIndex] = this.outletRows[rowIndex]; } }; AnjTable.prototype.fromTemplate = function (templateName, targetEl, row, rowIndex) { var rowMap = this.outletRows[rowIndex] || {}; var outlet = rowMap[templateName]; if (!targetEl) { /** * Removing the line: * rowMap[templateName] = outlet ? outlet.dispose() : undefined; * is part of the fix for https://git.zias.io/ui-foundation/anjuna/issues/750 * However, I don't grok at all how/why this works. I don't buy it. * So when we eventually get an issue related to master detail, start here. * Put that line back, and fix it right. */ return; } if (outlet) { if (targetEl !== outlet.targetElement) { this.updateOutlet(outlet, templateName, targetEl, AnjTable_1.rowContext(row, rowIndex)); } else { AnjTable_1.updateContext(outlet, AnjTable_1.rowContext(row, rowIndex)); } } else { rowMap[templateName] = this.createOutlet(targetEl, templateName, AnjTable_1.rowContext(row, rowIndex)); this.outletRows[rowIndex] = rowMap; } }; AnjTable.prototype.createOutlet = function (target, templateName, context) { var outlet = new DomOutlet(target); outlet.attach(this.createTemplate(templateName, context)); return outlet; }; AnjTable.prototype.createTemplate = function (templateName, context) { var templateRef = this.templates.find(function (t) { return t.name === templateName; }); return new Template(templateRef, context); }; AnjTable.prototype.updateOutlet = function (outlet, templateName, targetEl, context) { outlet.targetElement = targetEl; outlet.detach(); outlet.attach(this.createTemplate(templateName, context)); }; /** * Disposes of row templates no longer used in a given row. This ONLY happens if they have specified more than one * Template and the end user sorts or filters or otherwise changes the order. If only one template is specified, * the output will always match the input -r */ AnjTable.prototype.filterRowTemplates = function (rowMap, templateName) { if (rowMap === void 0) { rowMap = {}; } var updated = {}; Object.keys(rowMap).forEach(function (k) { if (k === templateName) { updated[k] = rowMap[k]; } else { rowMap[k].dispose(false); } }); return updated; }; var AnjTable_1; AnjTable.ctorParameters = function () { return [ { type: ElementRef } ]; }; __decorate([ ContentChildren(TemplateDirective), __metadata("design:type", QueryList) ], AnjTable.prototype, "templates", void 0); __decorate([ HostListener('anjColumnsDidUpdate'), __metadata("design:type", Function), __metadata("design:paramtypes", []), __metadata("design:returntype", void 0) ], AnjTable.prototype, "onColumnsUpdated", null); AnjTable = AnjTable_1 = __decorate([ Directive({ selector: 'anj-table:not([anjIgnore])', }), __metadata("design:paramtypes", [ElementRef]) ], AnjTable); return AnjTable; }()); export { AnjTable }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFuanVuYS9hbmd1bGFyLWNvcmUvIiwic291cmNlcyI6WyJsaWIvdGFibGUvdGFibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0csT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQVUxRSx1Q0FBdUM7QUFJdkM7SUFrQkksa0JBQVksS0FBaUI7UUFkckIsZUFBVSxHQUFnQixFQUFFLENBQUM7UUFlakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNqQyxDQUFDO2lCQXJCUSxRQUFRO0lBTUYsbUJBQVUsR0FBekIsVUFBMEIsR0FBWSxFQUFFLEtBQWEsRUFBRSxNQUF5QjtRQUM1RSxPQUFPO1lBQ0gsU0FBUyxFQUFFLEdBQUc7WUFDZCxNQUFNLFFBQUE7WUFDTixLQUFLLE9BQUE7U0FDUixDQUFDO0lBQ04sQ0FBQztJQUVjLHNCQUFhLEdBQTVCLFVBQTZCLE1BQWlCLEVBQUUsT0FBbUI7UUFDL0QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBT00sOEJBQVcsR0FBbEI7UUFDSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFDLE1BQWlCO1lBQ2xDLEtBQUssSUFBTSxZQUFZLElBQUksTUFBTSxFQUFFO2dCQUMvQixJQUFJLE1BQU0sQ0FBQyxZQUFZLENB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b0I7UUFBNUMsdUJBQUEsRUFBQSxXQUFzQjtRQUM3QyxJQUFNLE9BQU8sR0FBYyxFQUFFLENBQUM7UUFFOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLFlBQVksRUFBRTtnQkFDcEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxQjtpQkFBTTtnQkFDSCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzVCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDOzs7Z0JBakprQixVQUFVOztJQWpCTztRQUFuQyxlQUFlLENBQUMsaUJBQWlCLENBQUM7a0NBQW9CLFNBQVM7K0NBQW9CO0lBc0NwRjtRQURDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQzs7OztvREFVbkM7SUFoRFEsUUFBUTtRQUhwQixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsNEJBQTRCO1NBQ3pDLENBQUM7eUNBbUJxQixVQUFVO09BbEJwQixRQUFRLENBb0twQjtJQUFELGVBQUM7Q0FBQSxBQXBLRCxJQW9LQztTQXBLWSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudENoaWxkcmVuLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95LCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ29sdW1uRGVmaW5pdGlvbiwgUm93RGF0YSB9IGZyb20gJ0Bhbmp1bmEvY29yZSc7XG5cbmltcG9ydCB7IERvbU91dGxldCB9IGZyb20gJy4uL2NvbW1vbi90ZW1wbGF0ZS9Eb21PdXRsZXQnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi9jb21tb24vdGVtcGxhdGUvVGVtcGxhdGUnO1xuaW1wb3J0IHsgVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuLi9jb21tb24vdGVtcGxhdGUvdGVtcGxhdGUuZGlyZWN0aXZlJztcblxuZXhwb3J0IGludGVyZmFjZSBSb3dDb250ZXh0IHtcbiAgICAkaW1wbGljaXQ6IFJvd0RhdGE7XG4gICAgY29sdW1uPzogQ29sdW1uRGVmaW5pdGlvbjtcbiAgICBpbmRleDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgT3V0bGV0TWFwIHtbdGVtcGxhdGVOYW1lOiBzdHJpbmddOiBEb21PdXRsZXQ7IH1cblxuLyogdHNsaW50OmRpc2FibGU6ZGlyZWN0aXZlLXNlbGVjdG9yICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2Fuai10YWJsZTpub3QoW2Fuaklnbm9yZV0pJyxcbn0pXG5leHBvcnQgY2xhc3MgQW5qVGFibGUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpIHByaXZhdGUgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8VGVtcGxhdGVEaXJlY3RpdmU+O1xuXG4gICAgcHVibGljIGVsZW1lbnQ6IEhUTUxBbmpUYWJsZUVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBvdXRsZXRSb3dzOiBPdXRsZXRNYXBbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcm93Q29udGV4dChyb3c6IFJvd0RhdGEsIGluZGV4OiBudW1iZXIsIGNvbHVtbj86IENvbHVtbkRlZmluaXRpb24pOiBSb3dDb250ZXh0IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogcm93LFxuICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgaW5kZXhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyB1cGRhdGVDb250ZXh0KG91dGxldDogRG9tT3V0bGV0LCBjb250ZXh0OiBSb3dDb250ZXh0KTogdm9pZCB7XG4gICAgICAgIG91dGxldC51cGRhdGVDb250ZXh0KGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGVsUmVmOiBFbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZWxlbWVudC5yZW5kZXJlciA9IHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm91dGxldFJvd3MubWFwKChyb3dNYXA6IE91dGxldE1hcCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCB0ZW1wbGF0ZU5hbWUgaW4gcm93TWFwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJvd01hcFt0ZW1wbGF0ZU5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd01hcFt0ZW1wbGF0ZU5hbWVdID0gcm93TWFwW3RlbXBsYXRlTmFtZV0uZGlzcG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByb3dNYXA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpeGVzIGh0dHBzOi8vZ2l0LnppYXMuaW8vdWktZm91bmRhdGlvbi9hbmp1bmEvaXNzdWVzLzg3NlxuICAgICAqIFdoZW4gdGhlIGNvbHVtbnMgY2hhbmdlLCBkZXN0b3J5IGFsbCBwb3J0YWxzIHdpdGhvdXQga2lsbGluZyB0aGUgcGFyZW50IG5vZGVcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdhbmpDb2x1bW5zRGlkVXBkYXRlJylcbiAgICBwdWJsaWMgb25Db2x1bW5zVXBkYXRlZCgpIHtcbiAgICAgICAgdGhpcy5vdXRsZXRSb3dzLm1hcCgocm93TWFwOiBPdXRsZXRNYXApID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdGVtcGxhdGVOYW1lIGluIHJvd01hcCkge1xuICAgICAgICAgICAgICAgIGlmIChyb3dNYXBbdGVtcGxhdGVOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICByb3dNYXBbdGVtcGxhdGVOYW1lXSA9IHJvd01hcFt0ZW1wbGF0ZU5hbWVdLmRpc3Bvc2UoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByb3dNYXA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qIFRoZXNlIG5leHQgdGhyZWUgbWV0aG9kcyBhcmUgYSBtZXNzIG9mIGR1cGxpY2F0ZWQgbG9naWMgLSB0aGV5IHdpbGwgcHJvYmFibHkgc3RheSB0aGF0IHdheSB1bnRpbCBmZWF0dXJlIGNvbXBsZXRlLCB0aGVuIEknbGwgY2xlYW4gZW0gdXAgKi9cbiAgICBwdWJsaWMgY2VsbFRlbXBsYXRlKGNlbGw6IEhUTUxFbGVtZW50LCBvZmZzZXQ6IHN0cmluZywgY29sOiBDb2x1bW5EZWZpbml0aW9uLCByb3c6IFJvd0RhdGEsIHJvd0luZGV4OiBudW1iZXIsIHRlbXBsYXRlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgcm93TWFwID0gdGhpcy5vdXRsZXRSb3dzW3Jvd0luZGV4XSB8fCB7fTtcbiAgICAgICAgY29uc3Qgb3V0bGV0ID0gcm93TWFwW2NvbC5uYW1lXTtcblxuICAgICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVtb3ZpbmcgdGhlIGxpbmU6XG4gICAgICAgICAgICAgKiByb3dNYXBbY29sLm5hbWVdID0gb3V0bGV0ID8gb3V0bGV0LmRpc3Bvc2UoKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAqIHdoaWNoIGZpeGVzIGh0dHBzOi8vZ2l0LnppYXMuaW8vdWktZm91bmRhdGlvbi9hbmp1bmEvaXNzdWVzLzg1MC5cbiAgICAgICAgICAgICAqIExpa2UgdGhlIGRldGFpbCBzaXR1YXRpb24sIEkgZG8gbm90IHVuZGVyc3RhbmQgd2h5IHRoaXMgd29ya3MuLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3V0bGV0KSB7XG4gICAgICAgICAgICBpZiAoY2VsbCAhPT0gb3V0bGV0LnRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU91dGxldChvdXRsZXQsIHRlbXBsYXRlLCBjZWxsLCBBbmpUYWJsZS5yb3dDb250ZXh0KHJvdywgcm93SW5kZXgsIGNvbCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBBbmpUYWJsZS51cGRhdGVDb250ZXh0KG91dGxldCwgQW5qVGFibGUucm93Q29udGV4dChyb3csIHJvd0luZGV4LCBjb2wpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvd01hcFtjb2wubmFtZV0gPSB0aGlzLmNyZWF0ZU91dGxldChjZWxsLCB0ZW1wbGF0ZSwgQW5qVGFibGUucm93Q29udGV4dChyb3csIHJvd0luZGV4LCBjb2wpKTtcbiAgICAgICAgICAgIHRoaXMub3V0bGV0Um93c1tyb3dJbmRleF0gPSByb3dNYXA7XG4gICAgICAgIH1cblxuICAgICAgICBjb2wuaW5pdENlbGwoY2VsbCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcm93VGVtcGxhdGUodGVtcGxhdGVOYW1lOiBzdHJpbmcsIHRhcmdldEVsOiBIVE1MRWxlbWVudCwgcm93OiBSb3dEYXRhLCByb3dJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIERpc3Bvc2Ugcm93IHRlbXBsYXRlIG5vIGxvbmdlciB1c2VkIGZvciB0aGF0IGluZGV4XG4gICAgICAgIHRoaXMub3V0bGV0Um93c1tyb3dJbmRleF0gPSB0aGlzLmZpbHRlclJvd1RlbXBsYXRlcyh0aGlzLm91dGxldFJvd3Nbcm93SW5kZXhdLCB0ZW1wbGF0ZU5hbWUpO1xuICAgICAgICBjb25zdCBvdXRsZXQgPSB0aGlzLm91dGxldFJvd3Nbcm93SW5kZXhdW3RlbXBsYXRlTmFtZV07XG5cbiAgICAgICAgaWYgKCF0YXJnZXRFbCkge1xuICAgICAgICAgICAgdGhpcy5vdXRsZXRSb3dzW3Jvd0luZGV4XVt0ZW1wbGF0ZU5hbWVdID0gb3V0bGV0ID8gb3V0bGV0LmRpc3Bvc2UoKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdXRsZXQpIHtcbiAgICAgICAgICAgIGlmICh0YXJnZXRFbCAhPT0gb3V0bGV0LnRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU91dGxldChvdXRsZXQsIHRlbXBsYXRlTmFtZSwgdGFyZ2V0RWwsIEFualRhYmxlLnJvd0NvbnRleHQocm93LCByb3dJbmRleCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBBbmpUYWJsZS51cGRhdGVDb250ZXh0KG91dGxldCwgQW5qVGFibGUucm93Q29udGV4dChyb3csIHJvd0luZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm91dGxldFJvd3Nbcm93SW5kZXhdW3RlbXBsYXRlTmFtZV0gPSB0aGlzLmNyZWF0ZU91dGxldCh0YXJnZXRFbCwgdGVtcGxhdGVOYW1lLCBBbmpUYWJsZS5yb3dDb250ZXh0KHJvdywgcm93SW5kZXgpKTtcbiAgICAgICAgICAgIHRoaXMub3V0bGV0Um93c1tyb3dJbmRleF0gPSB0aGlzLm91dGxldFJvd3Nbcm93SW5kZXhdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZyb21UZW1wbGF0ZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZywgdGFyZ2V0RWw6IEhUTUxFbGVtZW50LCByb3c6IFJvd0RhdGEsIHJvd0luZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgcm93TWFwID0gdGhpcy5vdXRsZXRSb3dzW3Jvd0luZGV4XSB8fCB7fTtcbiAgICAgICAgY29uc3Qgb3V0bGV0ID0gcm93TWFwW3RlbXBsYXRlTmFtZV07XG5cbiAgICAgICAgaWYgKCF0YXJnZXRFbCkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZW1vdmluZyB0aGUgbGluZTpcbiAgICAgICAgICAgICAqIHJvd01hcFt0ZW1wbGF0ZU5hbWVdID0gb3V0bGV0ID8gb3V0bGV0LmRpc3Bvc2UoKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAqIGlzIHBhcnQgb2YgdGhlIGZpeCBmb3IgaHR0cHM6Ly9naXQuemlhcy5pby91aS1mb3VuZGF0aW9uL2FuanVuYS9pc3N1ZXMvNzUwXG4gICAgICAgICAgICAgKiBIb3dldmVyLCBJIGRvbid0IGdyb2sgYXQgYWxsIGhvdy93aHkgdGhpcyB3b3Jrcy4gSSBkb24ndCBidXkgaXQuXG4gICAgICAgICAgICAgKiBTbyB3aGVuIHdlIGV2ZW50dWFsbHkgZ2V0IGFuIGlzc3VlIHJlbGF0ZWQgdG8gbWFzdGVyIGRldGFpbCwgc3RhcnQgaGVyZS5cbiAgICAgICAgICAgICAqIFB1dCB0aGF0IGxpbmUgYmFjaywgYW5kIGZpeCBpdCByaWdodC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG91dGxldCkge1xuICAgICAgICAgICAgaWYgKHRhcmdldEVsICE9PSBvdXRsZXQudGFyZ2V0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlT3V0bGV0KG91dGxldCwgdGVtcGxhdGVOYW1lLCB0YXJnZXRFbCwgQW5qVGFibGUucm93Q29udGV4dChyb3csIHJvd0luZGV4KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIEFualRhYmxlLnVwZGF0ZUNvbnRleHQob3V0bGV0LCBBbmpUYWJsZS5yb3dDb250ZXh0KHJvdywgcm93SW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvd01hcFt0ZW1wbGF0ZU5hbWVdID0gdGhpcy5jcmVhdGVPdXRsZXQodGFyZ2V0RWwsIHRlbXBsYXRlTmFtZSwgQW5qVGFibGUucm93Q29udGV4dChyb3csIHJvd0luZGV4KSk7XG4gICAgICAgICAgICB0aGlzLm91dGxldFJvd3Nbcm93SW5kZXhdID0gcm93TWFwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVPdXRsZXQodGFyZ2V0OiBFbGVtZW50LCB0ZW1wbGF0ZU5hbWU6IHN0cmluZywgY29udGV4dDogUm93Q29udGV4dCk6IERvbU91dGxldCB7XG4gICAgICAgIGNvbnN0IG91dGxldCA9IG5ldyBEb21PdXRsZXQodGFyZ2V0KTtcbiAgICAgICAgb3V0bGV0LmF0dGFjaCh0aGlzLmNyZWF0ZVRlbXBsYXRlKHRlbXBsYXRlTmFtZSwgY29udGV4dCkpO1xuICAgICAgICByZXR1cm4gb3V0bGV0O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVGVtcGxhdGUodGVtcGxhdGVOYW1lOiBzdHJpbmcsIGNvbnRleHQ6IFJvd0NvbnRleHQpOiBUZW1wbGF0ZSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlUmVmID0gdGhpcy50ZW1wbGF0ZXMuZmluZCh0ID0+IHQubmFtZSA9PT0gdGVtcGxhdGVOYW1lKTtcbiAgICAgICAgcmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZVJlZiwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVPdXRsZXQob3V0bGV0OiBEb21PdXRsZXQsIHRlbXBsYXRlTmFtZTogc3RyaW5nLCB0YXJnZXRFbDogSFRNTEVsZW1lbnQsIGNvbnRleHQ6IFJvd0NvbnRleHQpOiB2b2lkIHtcbiAgICAgICAgb3V0bGV0LnRhcmdldEVsZW1lbnQgPSB0YXJnZXRFbDtcbiAgICAgICAgb3V0bGV0LmRldGFjaCgpO1xuICAgICAgICBvdXRsZXQuYXR0YWNoKHRoaXMuY3JlYXRlVGVtcGxhdGUodGVtcGxhdGVOYW1lLCBjb250ZXh0KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcG9zZXMgb2Ygcm93IHRlbXBsYXRlcyBubyBsb25nZXIgdXNlZCBpbiBhIGdpdmVuIHJvdy4gVGhpcyBPTkxZIGhhcHBlbnMgaWYgdGhleSBoYXZlIHNwZWNpZmllZCBtb3JlIHRoYW4gb25lXG4gICAgICogVGVtcGxhdGUgYW5kIHRoZSBlbmQgdXNlciBzb3J0cyBvciBmaWx0ZXJzIG9yIG90aGVyd2lzZSBjaGFuZ2VzIHRoZSBvcmRlci4gSWYgb25seSBvbmUgdGVtcGxhdGUgaXMgc3BlY2lmaWVkLFxuICAgICAqIHRoZSBvdXRwdXQgd2lsbCBhbHdheXMgbWF0Y2ggdGhlIGlucHV0IC1yXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaWx0ZXJSb3dUZW1wbGF0ZXMocm93TWFwOiBPdXRsZXRNYXAgPSB7fSwgdGVtcGxhdGVOYW1lOiBzdHJpbmcpOiBPdXRsZXRNYXAge1xuICAgICAgICBjb25zdCB1cGRhdGVkOiBPdXRsZXRNYXAgPSB7fTtcblxuICAgICAgICBPYmplY3Qua2V5cyhyb3dNYXApLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICBpZiAoayA9PT0gdGVtcGxhdGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgdXBkYXRlZFtrXSA9IHJvd01hcFtrXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcm93TWFwW2tdLmRpc3Bvc2UoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9XG59XG4iXX0=