@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
239 lines • 22.6 kB
JavaScript
import { __decorate, __extends, __metadata, __values } from "tslib";
import { ChangeDetectorRef, Component, EventEmitter, Input, Output, OnDestroy } from '@angular/core';
import { IgxColumnHidingItemDirective } from './column-hiding-item.directive';
import { ColumnChooserBaseDirective } from '../column-chooser-base';
import { takeUntil } from 'rxjs/operators';
import { Subject } from 'rxjs';
var IgxColumnHidingComponent = /** @class */ (function (_super) {
__extends(IgxColumnHidingComponent, _super);
function IgxColumnHidingComponent(cdr) {
var _this = _super.call(this, cdr) || this;
_this.cdr = cdr;
/**
* Sets/gets the text of the button that shows all columns if they are hidden.
* ```typescript
* let showAllButtonText = this.columnHiding.showAllText;
* ```
*
* ```html
* <igx-column-hiding [showAllText] = "'Show Columns'"></igx-column-hiding>
* ```
* @memberof IgxColumnHidingComponent
*/
_this.showAllText = 'Show All';
/**
* Sets/gets the text of the button that hides all columns if they are shown.
* ```typescript
* let hideAllButtonText = this.columnHiding.hideAllText;
* ```
*
* ```html
* <igx-column-hiding [hideAllText] = "'Hide Columns'"></igx-column-hiding>
* ```
* @memberof IgxColumnHidingComponent
*/
_this.hideAllText = 'Hide All';
/**
* An event that is emitted after the columns visibility is changed.
* Provides references to the `column` and the `newValue` properties as event arguments.
* ```html
* <igx-column-hiding (onColumnVisibilityChanged) = "onColumnVisibilityChanged($event)"></igx-column-hiding>
* ```
* @memberof IgxColumnHidingComponent
*/
_this.onColumnVisibilityChanged = new EventEmitter();
_this.destroy$ = new Subject();
return _this;
}
Object.defineProperty(IgxColumnHidingComponent.prototype, "disableHideAll", {
/**
* Returns a boolean indicating whether the `HIDE ALL` button is disabled.
* ```html
* <igx-column-hiding #columnHidingUI
* [columns]="grid.columns" [title]="'Column Hiding'">
* </igx-column-hiding>
* ```
* ```typescript
* @ViewChild("'columnHidingUI'")
* public columnHiding: IgxColumnHidingComponent;
* let isHideAlldisabled = this.columnHiding.disableHideAll;
* ```
*@memberof IgxColumnHidingComponent
*/
get: function () {
if (!this.columnItems || this.columnItems.length < 1 ||
this.hiddenColumnsCount === this.columns.length) {
return true;
}
else if (this.hidableColumns.length < 1 ||
this.hidableColumns.length === this.hidableColumns.filter(function (col) { return col.value; }).length) {
return true;
}
else {
return false;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxColumnHidingComponent.prototype, "disableShowAll", {
/**
* Returns a boolean indicating whether the `SHOW ALL` button is disabled.
* ```typescript
* let isShowAlldisabled = this.columnHiding.disableShowAll;
* ```
* @memberof IgxColumnHidingComponent
*/
get: function () {
if (!this.columnItems || this.columnItems.length < 1 ||
this.hiddenColumnsCount < 1 || this.hidableColumns.length < 1) {
return true;
}
else if (this.hidableColumns.length === this.hidableColumns.filter(function (col) { return !col.value; }).length) {
return true;
}
else {
return false;
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxColumnHidingComponent.prototype, "hiddenColumnsCount", {
/**
* Gets the count of the hidden columns.
* ```typescript
* let hiddenColumnsCount = this.columnHiding.hiddenColumnsCount;
* ```
* @memberof IgxColumnHidingComponent
*/
get: function () {
return (this.columns) ? this.columns.filter(function (col) { return col.hidden; }).length : 0;
},
enumerable: true,
configurable: true
});
Object.defineProperty(IgxColumnHidingComponent.prototype, "hidableColumns", {
/**
*@hidden
*/
get: function () {
return this.columnItems.filter(function (col) { return !col.disabled; });
},
enumerable: true,
configurable: true
});
/**
*@hidden
*/
IgxColumnHidingComponent.prototype.createColumnItem = function (container, column) {
var _this = this;
if (column.grid.hasColumnLayouts && !column.columnLayout) {
return null;
}
var item = new IgxColumnHidingItemDirective();
item.container = container;
item.column = column;
item.valueChanged.pipe(takeUntil(this.destroy$)).subscribe(function (args) {
_this.onVisibilityChanged({ column: item.column, newValue: args.newValue });
});
return item;
};
/**
* Shows all columns in the grid.
* ```typescript
* this.columnHiding.showAllColumns();
* ```
* @memberof IgxColumnHidingComponent
*/
IgxColumnHidingComponent.prototype.showAllColumns = function () {
var e_1, _a;
var collection = this.hidableColumns;
try {
for (var collection_1 = __values(collection), collection_1_1 = collection_1.next(); !collection_1_1.done; collection_1_1 = collection_1.next()) {
var col = collection_1_1.value;
col.value = false;
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (collection_1_1 && !collection_1_1.done && (_a = collection_1.return)) _a.call(collection_1);
}
finally { if (e_1) throw e_1.error; }
}
};
/**
* Hides all columns in the grid.
* ```typescript
* this.columnHiding.hideAllColumns();
* ```
* @memberof IgxColumnHidingComponent
*/
IgxColumnHidingComponent.prototype.hideAllColumns = function () {
var e_2, _a;
var collection = this.hidableColumns;
try {
for (var collection_2 = __values(collection), collection_2_1 = collection_2.next(); !collection_2_1.done; collection_2_1 = collection_2.next()) {
var col = collection_2_1.value;
col.value = true;
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (collection_2_1 && !collection_2_1.done && (_a = collection_2.return)) _a.call(collection_2);
}
finally { if (e_2) throw e_2.error; }
}
};
/**
* @hidden
*/
IgxColumnHidingComponent.prototype.onVisibilityChanged = function (args) {
this.onColumnVisibilityChanged.emit(args);
};
/**
*@hidden
*/
IgxColumnHidingComponent.prototype.ngOnDestroy = function () {
this.destroy$.next(true);
this.destroy$.complete();
};
IgxColumnHidingComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef }
]; };
__decorate([
Input(),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxColumnHidingComponent.prototype, "disableHideAll", null);
__decorate([
Input(),
__metadata("design:type", Boolean),
__metadata("design:paramtypes", [])
], IgxColumnHidingComponent.prototype, "disableShowAll", null);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxColumnHidingComponent.prototype, "showAllText", void 0);
__decorate([
Input(),
__metadata("design:type", Object)
], IgxColumnHidingComponent.prototype, "hideAllText", void 0);
__decorate([
Output(),
__metadata("design:type", Object)
], IgxColumnHidingComponent.prototype, "onColumnVisibilityChanged", void 0);
IgxColumnHidingComponent = __decorate([
Component({
preserveWhitespaces: false,
selector: 'igx-column-hiding',
template: "<div class=\"igx-column-hiding__header\">\n <h4 class=\"igx-column-hiding__header-title\" *ngIf=\"title\">{{ title }}</h4>\n\n <igx-input-group class=\"igx-column-hiding__header-input\" *ngIf=\"!disableFilter\">\n <input igxInput\n type=\"text\"\n [(ngModel)]=\"filterCriteria\"\n [placeholder]=\"filterColumnsPrompt\"\n autocomplete=\"off\" />\n </igx-input-group>\n</div>\n\n<div class=\"igx-column-hiding__columns\"\n [style.max-height]=\"columnsAreaMaxHeight\">\n <igx-checkbox\n *ngFor=\"let columnItem of hidableColumns\"\n class=\"igx-column-hiding__columns-item\"\n (onColumnVisibilityChanged)=\"onVisibilityChanged($event)\"\n (change)=\"columnItem.value = !columnItem.value\"\n [checked]=\"columnItem.value\"\n [disabled]=\"columnItem.disabled\"\n [style.margin-left.px]=\"columnItem.calcIndent\">\n {{ columnItem.name }}\n </igx-checkbox>\n</div>\n\n<div class=\"igx-column-hiding__buttons\">\n <button igxButton igxRipple (click)=\"showAllColumns()\" [disabled]=\"disableShowAll\">{{ showAllText }}</button>\n <button igxButton igxRipple (click)=\"hideAllColumns()\" [disabled]=\"disableHideAll\">{{ hideAllText }}</button>\n</div>\n"
}),
__metadata("design:paramtypes", [ChangeDetectorRef])
], IgxColumnHidingComponent);
return IgxColumnHidingComponent;
}(ColumnChooserBaseDirective));
export { IgxColumnHidingComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWhpZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2hpZGluZy9jb2x1bW4taGlkaW5nLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBcUMsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU8vQjtJQUE4Qyw0Q0FBMEI7SUE0RnBFLGtDQUFtQixHQUFzQjtRQUF6QyxZQUNJLGtCQUFNLEdBQUcsQ0FBQyxTQUNiO1FBRmtCLFNBQUcsR0FBSCxHQUFHLENBQW1CO1FBL0N6Qzs7Ozs7Ozs7OztXQVVHO1FBRUksaUJBQVcsR0FBRyxVQUFVLENBQUM7UUFDaEM7Ozs7Ozs7Ozs7V0FVRztRQUVJLGlCQUFXLEdBQUcsVUFBVSxDQUFDO1FBQ2hDOzs7Ozs7O1dBT0c7UUFFSSwrQkFBeUIsR0FBRyxJQUFJLFlBQVksRUFBcUMsQ0FBQztRQXVCakYsY0FBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7O0lBVDFDLENBQUM7SUE5RUQsc0JBQUksb0RBQWM7UUFmbEI7Ozs7Ozs7Ozs7Ozs7V0FhRzthQUVIO1lBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLGtCQUFrQixLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFB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Q3JCOzs7Ozs7Ozs7SUFDTCxDQUFDO0lBQ0Q7Ozs7OztPQU1HO0lBQ0ksaURBQWMsR0FBckI7O1FBQ0ksSUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQzs7WUFDdkMsS0FBa0IsSUFBQSxlQUFBLFNBQUEsVUFBVSxDQUFBLHNDQUFBLDhEQUFFO2dCQUF6QixJQUFNLEdBQUcsdUJBQUE7Z0JBQ1YsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7YUFDcEI7Ozs7Ozs7OztJQUNMLENBQUM7SUFDRDs7T0FFRztJQUNJLHNEQUFtQixHQUExQixVQUEyQixJQUF1QztRQUM5RCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7T0FFRztJQUNJLDhDQUFXLEdBQWxCO1FBQ0ksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDOztnQkFwRXVCLGlCQUFpQjs7SUE1RXpDO1FBREMsS0FBSyxFQUFFOzs7a0VBV1A7SUFTRDtRQURDLEtBQUssRUFBRTs7O2tFQVVQO0lBYUQ7UUFEQyxLQUFLLEVBQUU7O2lFQUN3QjtJQWFoQztRQURDLEtBQUssRUFBRTs7aUVBQ3dCO0lBVWhDO1FBREMsTUFBTSxFQUFFOzsrRUFDZ0Y7SUFoRmhGLHdCQUF3QjtRQUxwQyxTQUFTLENBQUM7WUFDUCxtQkFBbUIsRUFBRSxLQUFLO1lBQzFCLFFBQVEsRUFBRSxtQkFBbUI7WUFDN0Isd3dDQUE2QztTQUNoRCxDQUFDO3lDQTZGMEIsaUJBQWlCO09BNUZoQyx3QkFBd0IsQ0FpS3BDO0lBQUQsK0JBQUM7Q0FBQSxBQWpLRCxDQUE4QywwQkFBMEIsR0FpS3ZFO1NBaktZLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgT25EZXN0cm95XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSUNvbHVtblZpc2liaWxpdHlDaGFuZ2VkRXZlbnRBcmdzLCBJZ3hDb2x1bW5IaWRpbmdJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9jb2x1bW4taGlkaW5nLWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IENvbHVtbkNob29zZXJCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vY29sdW1uLWNob29zZXItYmFzZSc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICAgIHNlbGVjdG9yOiAnaWd4LWNvbHVtbi1oaWRpbmcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb2x1bW4taGlkaW5nLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnQgZXh0ZW5kcyBDb2x1bW5DaG9vc2VyQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBgSElERSBBTExgIGJ1dHRvbiBpcyBkaXNhYmxlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb2x1bW4taGlkaW5nICNjb2x1bW5IaWRpbmdVSVxuICAgICAqICAgICBbY29sdW1uc109XCJncmlkLmNvbHVtbnNcIiBbdGl0bGVdPVwiJ0NvbHVtbiBIaWRpbmcnXCI+XG4gICAgICogPC9pZ3gtY29sdW1uLWhpZGluZz5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcIidjb2x1bW5IaWRpbmdVSSdcIilcbiAgICAgKiBwdWJsaWMgY29sdW1uSGlkaW5nOiBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnQ7XG4gICAgICogbGV0IGlzSGlkZUFsbGRpc2FibGVkID0gIHRoaXMuY29sdW1uSGlkaW5nLmRpc2FibGVIaWRlQWxsO1xuICAgICAqIGBgYFxuICAgICAqQG1lbWJlcm9mIElneENvbHVtbkhpZGluZ0NvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGRpc2FibGVIaWRlQWxsKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1uSXRlbXMgfHwgdGhpcy5jb2x1bW5JdGVtcy5sZW5ndGggPCAxIHx8XG4gICAgICAgICAgICB0aGlzLmhpZGRlbkNvbHVtbnNDb3VudCA9PT0gdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5oaWRhYmxlQ29sdW1ucy5sZW5ndGggPCAxIHx8XG4gICAgICAgICAgICB0aGlzLmhpZGFibGVDb2x1bW5zLmxlbmd0aCA9PT0gdGhpcy5oaWRhYmxlQ29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLnZhbHVlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYFNIT1cgQUxMYCBidXR0b24gaXMgZGlzYWJsZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc1Nob3dBbGxkaXNhYmxlZCA9ICB0aGlzLmNvbHVtbkhpZGluZy5kaXNhYmxlU2hvd0FsbDtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uSGlkaW5nQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgZGlzYWJsZVNob3dBbGwoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5JdGVtcyB8fCB0aGlzLmNvbHVtbkl0ZW1zLmxlbmd0aCA8IDEgfHxcbiAgICAgICAgICAgIHRoaXMuaGlkZGVuQ29sdW1uc0NvdW50IDwgMSB8fCB0aGlzLmhpZGFibGVDb2x1bW5zLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGlkYWJsZUNvbHVtbnMubGVuZ3RoID09PSB0aGlzLmhpZGFibGVDb2x1bW5zLmZpbHRlcigoY29sKSA9PiAhY29sLnZhbHVlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHRoYXQgc2hvd3MgYWxsIGNvbHVtbnMgaWYgdGhleSBhcmUgaGlkZGVuLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgc2hvd0FsbEJ1dHRvblRleHQgPSAgdGhpcy5jb2x1bW5IaWRpbmcuc2hvd0FsbFRleHQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb2x1bW4taGlkaW5nIFtzaG93QWxsVGV4dF0gPSBcIidTaG93IENvbHVtbnMnXCI+PC9pZ3gtY29sdW1uLWhpZGluZz5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uSGlkaW5nQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd0FsbFRleHQgPSAnU2hvdyBBbGwnO1xuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgdGV4dCBvZiB0aGUgYnV0dG9uIHRoYXQgaGlkZXMgYWxsIGNvbHVtbnMgaWYgdGhleSBhcmUgc2hvd24uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBoaWRlQWxsQnV0dG9uVGV4dCA9ICB0aGlzLmNvbHVtbkhpZGluZy5oaWRlQWxsVGV4dDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbi1oaWRpbmcgW2hpZGVBbGxUZXh0XSA9IFwiJ0hpZGUgQ29sdW1ucydcIj48L2lneC1jb2x1bW4taGlkaW5nPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoaWRlQWxsVGV4dCA9ICdIaWRlIEFsbCc7XG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIHRoZSBjb2x1bW5zIHZpc2liaWxpdHkgaXMgY2hhbmdlZC5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2VzIHRvIHRoZSBgY29sdW1uYCBhbmQgdGhlIGBuZXdWYWx1ZWAgcHJvcGVydGllcyBhcyBldmVudCBhcmd1bWVudHMuXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWNvbHVtbi1oaWRpbmcgKG9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWQpID0gXCJvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2VkKCRldmVudClcIj48L2lneC1jb2x1bW4taGlkaW5nPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUNvbHVtblZpc2liaWxpdHlDaGFuZ2VkRXZlbnRBcmdzPigpO1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvdW50IG9mIHRoZSBoaWRkZW4gY29sdW1ucy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGhpZGRlbkNvbHVtbnNDb3VudCA9ICB0aGlzLmNvbHVtbkhpZGluZy5oaWRkZW5Db2x1bW5zQ291bnQ7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkhpZGluZ0NvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaGlkZGVuQ29sdW1uc0NvdW50KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuY29sdW1ucykgPyB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5oaWRkZW4pLmxlbmd0aCA6IDA7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIoY2RyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhpZGFibGVDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5JdGVtcy5maWx0ZXIoKGNvbCkgPT4gIWNvbC5kaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNvbHVtbkl0ZW0oY29udGFpbmVyOiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgICAgIGlmIChjb2x1bW4uZ3JpZC5oYXNDb2x1bW5MYXlvdXRzICYmICFjb2x1bW4uY29sdW1uTGF5b3V0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtID0gbmV3IElneENvbHVtbkhpZGluZ0l0ZW1EaXJlY3RpdmUoKTtcbiAgICAgICAgaXRlbS5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgIGl0ZW0uY29sdW1uID0gY29sdW1uO1xuXG4gICAgICAgIGl0ZW0udmFsdWVDaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlZCh7IGNvbHVtbjogaXRlbS5jb2x1bW4sIG5ld1ZhbHVlOiBhcmdzLm5ld1ZhbHVlIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2hvd3MgYWxsIGNvbHVtbnMgaW4gdGhlIGdyaWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uSGlkaW5nLnNob3dBbGxDb2x1bW5zKCk7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkhpZGluZ0NvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93QWxsQ29sdW1ucygpIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHRoaXMuaGlkYWJsZUNvbHVtbnM7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhpZGVzIGFsbCBjb2x1bW5zIGluIHRoZSBncmlkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNvbHVtbkhpZGluZy5oaWRlQWxsQ29sdW1ucygpO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZUFsbENvbHVtbnMoKSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmhpZGFibGVDb2x1bW5zO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICBjb2wudmFsdWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25WaXNpYmlsaXR5Q2hhbmdlZChhcmdzOiBJQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWRFdmVudEFyZ3MpIHtcbiAgICAgICAgdGhpcy5vbkNvbHVtblZpc2liaWxpdHlDaGFuZ2VkLmVtaXQoYXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG59XG5cbiJdfQ==