igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
395 lines • 27.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { CommonModule } from '@angular/common';
import { ChangeDetectorRef, Component, EventEmitter, Input, NgModule, Output } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { IgxCheckboxModule } from '../checkbox/checkbox.component';
import { IgxButtonModule } from '../directives/button/button.directive';
import { IgxColumnHidingItemDirective } from './column-hiding-item.directive';
import { IgxInputGroupModule } from '../input-group/input-group.component';
import { ColumnChooserBase } from './column-chooser-base';
import { takeUntil } from 'rxjs/operators';
import { Subject } from 'rxjs';
var IgxColumnHidingComponent = /** @class */ (function (_super) {
tslib_1.__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: /**
* 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
* @return {?}
*/
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: /**
* Returns a boolean indicating whether the `SHOW ALL` button is disabled.
* ```typescript
* let isShowAlldisabled = this.columnHiding.disableShowAll;
* ```
* \@memberof IgxColumnHidingComponent
* @return {?}
*/
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: /**
* Gets the count of the hidden columns.
* ```typescript
* let hiddenColumnsCount = this.columnHiding.hiddenColumnsCount;
* ```
* \@memberof IgxColumnHidingComponent
* @return {?}
*/
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: /**
* @hidden
* @return {?}
*/
function () {
return this.columnItems.filter(function (col) { return !col.disabled; });
},
enumerable: true,
configurable: true
});
/**
*@hidden
*/
/**
* @hidden
* @protected
* @param {?} container
* @param {?} column
* @return {?}
*/
IgxColumnHidingComponent.prototype.createColumnItem = /**
* @hidden
* @protected
* @param {?} container
* @param {?} column
* @return {?}
*/
function (container, column) {
var _this = this;
/** @type {?} */
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
*/
/**
* Shows all columns in the grid.
* ```typescript
* this.columnHiding.showAllColumns();
* ```
* \@memberof IgxColumnHidingComponent
* @return {?}
*/
IgxColumnHidingComponent.prototype.showAllColumns = /**
* Shows all columns in the grid.
* ```typescript
* this.columnHiding.showAllColumns();
* ```
* \@memberof IgxColumnHidingComponent
* @return {?}
*/
function () {
var e_1, _a;
try {
for (var _b = tslib_1.__values(this.hidableColumns), _c = _b.next(); !_c.done; _c = _b.next()) {
var col = _c.value;
col.value = false;
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
};
/**
* Hides all columns in the grid.
* ```typescript
* this.columnHiding.hideAllColumns();
* ```
* @memberof IgxColumnHidingComponent
*/
/**
* Hides all columns in the grid.
* ```typescript
* this.columnHiding.hideAllColumns();
* ```
* \@memberof IgxColumnHidingComponent
* @return {?}
*/
IgxColumnHidingComponent.prototype.hideAllColumns = /**
* Hides all columns in the grid.
* ```typescript
* this.columnHiding.hideAllColumns();
* ```
* \@memberof IgxColumnHidingComponent
* @return {?}
*/
function () {
var e_2, _a;
try {
for (var _b = tslib_1.__values(this.hidableColumns), _c = _b.next(); !_c.done; _c = _b.next()) {
var col = _c.value;
col.value = true;
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_2) throw e_2.error; }
}
};
/**
* @hidden
*/
/**
* @hidden
* @param {?} args
* @return {?}
*/
IgxColumnHidingComponent.prototype.onVisibilityChanged = /**
* @hidden
* @param {?} args
* @return {?}
*/
function (args) {
this.onColumnVisibilityChanged.emit(args);
};
/**
*@hidden
*/
/**
* @hidden
* @return {?}
*/
IgxColumnHidingComponent.prototype.ngOnDestroy = /**
* @hidden
* @return {?}
*/
function () {
this.destroy$.next(true);
this.destroy$.complete();
};
IgxColumnHidingComponent.decorators = [
{ type: Component, args: [{
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"
}] }
];
/** @nocollapse */
IgxColumnHidingComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef }
]; };
IgxColumnHidingComponent.propDecorators = {
disableHideAll: [{ type: Input }],
disableShowAll: [{ type: Input }],
showAllText: [{ type: Input }],
hideAllText: [{ type: Input }],
onColumnVisibilityChanged: [{ type: Output }]
};
return IgxColumnHidingComponent;
}(ColumnChooserBase));
export { IgxColumnHidingComponent };
if (false) {
/**
* 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
* @type {?}
*/
IgxColumnHidingComponent.prototype.showAllText;
/**
* 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
* @type {?}
*/
IgxColumnHidingComponent.prototype.hideAllText;
/**
* 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
* @type {?}
*/
IgxColumnHidingComponent.prototype.onColumnVisibilityChanged;
/**
* @type {?}
* @private
*/
IgxColumnHidingComponent.prototype.destroy$;
/** @type {?} */
IgxColumnHidingComponent.prototype.cdr;
}
/**
* @hidden
*/
var IgxColumnHidingModule = /** @class */ (function () {
function IgxColumnHidingModule() {
}
IgxColumnHidingModule.decorators = [
{ type: NgModule, args: [{
declarations: [IgxColumnHidingComponent, IgxColumnHidingItemDirective],
exports: [IgxColumnHidingComponent],
imports: [
IgxButtonModule,
IgxCheckboxModule,
IgxInputGroupModule,
CommonModule,
FormsModule,
]
},] }
];
return IgxColumnHidingModule;
}());
export { IgxColumnHidingModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWhpZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL2dyaWRzL2NvbHVtbi1oaWRpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBcUMsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQjtJQUs4QyxvREFBaUI7SUE0RjNELGtDQUFtQixHQUFzQjtRQUF6QyxZQUNJLGtCQUFNLEdBQUcsQ0FBQyxTQUNiO1FBRmtCLFNBQUcsR0FBSCxHQUFHLENBQW1COzs7Ozs7Ozs7Ozs7UUFuQ2xDLGlCQUFXLEdBQUcsVUFBVSxDQUFDOzs7Ozs7Ozs7Ozs7UUFhekIsaUJBQVcsR0FBRyxVQUFVLENBQUM7Ozs7Ozs7OztRQVV6QiwrQkFBeUIsR0FBRyxJQUFJLFlBQVksRUFBcUMsQ0FBQztRQXVCakYsY0FBUSxHQUFHLElBQUksT0FB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SUFYOUIsdUNBQTZCOzs7OztBQXFFN0M7SUFBQTtJQVlBLENBQUM7O2dCQVpBLFFBQVEsU0FBQztvQkFDTixZQUFZLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSw0QkFBNEIsQ0FBQztvQkFDdEUsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUM7b0JBQ25DLE9BQU8sRUFBRTt3QkFDTCxlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLFdBQVc7cUJBQ2Q7aUJBQ0o7O0lBRUQsNEJBQUM7Q0FBQSxBQVpELElBWUM7U0FEWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIE91dHB1dCxcbiAgICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElneENoZWNrYm94TW9kdWxlIH0gZnJvbSAnLi4vY2hlY2tib3gvY2hlY2tib3guY29tcG9uZW50JztcbmltcG9ydCB7IElneEJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYnV0dG9uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSUNvbHVtblZpc2liaWxpdHlDaGFuZ2VkRXZlbnRBcmdzLCBJZ3hDb2x1bW5IaWRpbmdJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9jb2x1bW4taGlkaW5nLWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IElneElucHV0R3JvdXBNb2R1bGUgfSBmcm9tICcuLi9pbnB1dC1ncm91cC9pbnB1dC1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29sdW1uQ2hvb3NlckJhc2UgfSBmcm9tICcuL2NvbHVtbi1jaG9vc2VyLWJhc2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzOiBmYWxzZSxcbiAgICBzZWxlY3RvcjogJ2lneC1jb2x1bW4taGlkaW5nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29sdW1uLWhpZGluZy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q29sdW1uSGlkaW5nQ29tcG9uZW50IGV4dGVuZHMgQ29sdW1uQ2hvb3NlckJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgYEhJREUgQUxMYCBidXR0b24gaXMgZGlzYWJsZWQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29sdW1uLWhpZGluZyAjY29sdW1uSGlkaW5nVUlcbiAgICAgKiAgICAgW2NvbHVtbnNdPVwiZ3JpZC5jb2x1bW5zXCIgW3RpdGxlXT1cIidDb2x1bW4gSGlkaW5nJ1wiPlxuICAgICAqIDwvaWd4LWNvbHVtbi1oaWRpbmc+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCInY29sdW1uSGlkaW5nVUknXCIpXG4gICAgICogcHVibGljIGNvbHVtbkhpZGluZzogSWd4Q29sdW1uSGlkaW5nQ29tcG9uZW50O1xuICAgICAqIGxldCBpc0hpZGVBbGxkaXNhYmxlZCA9ICB0aGlzLmNvbHVtbkhpZGluZy5kaXNhYmxlSGlkZUFsbDtcbiAgICAgKiBgYGBcbiAgICAgKkBtZW1iZXJvZiBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBkaXNhYmxlSGlkZUFsbCgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbkl0ZW1zIHx8IHRoaXMuY29sdW1uSXRlbXMubGVuZ3RoIDwgMSB8fFxuICAgICAgICAgICAgdGhpcy5oaWRkZW5Db2x1bW5zQ291bnQgPT09IHRoaXMuY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaGlkYWJsZUNvbHVtbnMubGVuZ3RoIDwgMSB8fFxuICAgICAgICAgICAgdGhpcy5oaWRhYmxlQ29sdW1ucy5sZW5ndGggPT09IHRoaXMuaGlkYWJsZUNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC52YWx1ZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGBTSE9XIEFMTGAgYnV0dG9uIGlzIGRpc2FibGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNTaG93QWxsZGlzYWJsZWQgPSAgdGhpcy5jb2x1bW5IaWRpbmcuZGlzYWJsZVNob3dBbGw7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkhpZGluZ0NvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGRpc2FibGVTaG93QWxsKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1uSXRlbXMgfHwgdGhpcy5jb2x1bW5JdGVtcy5sZW5ndGggPCAxIHx8XG4gICAgICAgICAgICB0aGlzLmhpZGRlbkNvbHVtbnNDb3VudCA8IDEgfHwgdGhpcy5oaWRhYmxlQ29sdW1ucy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhpZGFibGVDb2x1bW5zLmxlbmd0aCA9PT0gdGhpcy5oaWRhYmxlQ29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gIWNvbC52YWx1ZSkubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiB0aGF0IHNob3dzIGFsbCBjb2x1bW5zIGlmIHRoZXkgYXJlIGhpZGRlbi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNob3dBbGxCdXR0b25UZXh0ID0gIHRoaXMuY29sdW1uSGlkaW5nLnNob3dBbGxUZXh0O1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29sdW1uLWhpZGluZyBbc2hvd0FsbFRleHRdID0gXCInU2hvdyBDb2x1bW5zJ1wiPjwvaWd4LWNvbHVtbi1oaWRpbmc+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkhpZGluZ0NvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dBbGxUZXh0ID0gJ1Nob3cgQWxsJztcbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIHRleHQgb2YgdGhlIGJ1dHRvbiB0aGF0IGhpZGVzIGFsbCBjb2x1bW5zIGlmIHRoZXkgYXJlIHNob3duLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaGlkZUFsbEJ1dHRvblRleHQgPSAgdGhpcy5jb2x1bW5IaWRpbmcuaGlkZUFsbFRleHQ7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb2x1bW4taGlkaW5nIFtoaWRlQWxsVGV4dF0gPSBcIidIaWRlIENvbHVtbnMnXCI+PC9pZ3gtY29sdW1uLWhpZGluZz5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uSGlkaW5nQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGlkZUFsbFRleHQgPSAnSGlkZSBBbGwnO1xuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgaXMgZW1pdHRlZCBhZnRlciB0aGUgY29sdW1ucyB2aXNpYmlsaXR5IGlzIGNoYW5nZWQuXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlcyB0byB0aGUgYGNvbHVtbmAgYW5kIHRoZSBgbmV3VmFsdWVgIHByb3BlcnRpZXMgYXMgZXZlbnQgYXJndW1lbnRzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1jb2x1bW4taGlkaW5nIChvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2VkKSA9IFwib25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlZCgkZXZlbnQpXCI+PC9pZ3gtY29sdW1uLWhpZGluZz5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uSGlkaW5nQ29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlZEV2ZW50QXJncz4oKTtcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb3VudCBvZiB0aGUgaGlkZGVuIGNvbHVtbnMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBoaWRkZW5Db2x1bW5zQ291bnQgPSAgdGhpcy5jb2x1bW5IaWRpbmcuaGlkZGVuQ29sdW1uc0NvdW50O1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGhpZGRlbkNvbHVtbnNDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmNvbHVtbnMpID8gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wuaGlkZGVuKS5sZW5ndGggOiAwO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgICAgIHN1cGVyKGNkcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBoaWRhYmxlQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uSXRlbXMuZmlsdGVyKChjb2wpID0+ICFjb2wuZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVDb2x1bW5JdGVtKGNvbnRhaW5lcjogYW55LCBjb2x1bW46IGFueSkge1xuICAgICAgICBjb25zdCBpdGVtID0gbmV3IElneENvbHVtbkhpZGluZ0l0ZW1EaXJlY3RpdmUoKTtcbiAgICAgICAgaXRlbS5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgIGl0ZW0uY29sdW1uID0gY29sdW1uO1xuXG4gICAgICAgIGl0ZW0udmFsdWVDaGFuZ2VkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25WaXNpYmlsaXR5Q2hhbmdlZCh7IGNvbHVtbjogaXRlbS5jb2x1bW4sIG5ld1ZhbHVlOiBhcmdzLm5ld1ZhbHVlIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2hvd3MgYWxsIGNvbHVtbnMgaW4gdGhlIGdyaWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uSGlkaW5nLnNob3dBbGxDb2x1bW5zKCk7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkhpZGluZ0NvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93QWxsQ29sdW1ucygpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5oaWRhYmxlQ29sdW1ucykge1xuICAgICAgICAgICAgY29sLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSGlkZXMgYWxsIGNvbHVtbnMgaW4gdGhlIGdyaWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uSGlkaW5nLmhpZGVBbGxDb2x1bW5zKCk7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkhpZGluZ0NvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlQWxsQ29sdW1ucygpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5oaWRhYmxlQ29sdW1ucykge1xuICAgICAgICAgICAgY29sLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uVmlzaWJpbGl0eUNoYW5nZWQoYXJnczogSUNvbHVtblZpc2liaWxpdHlDaGFuZ2VkRXZlbnRBcmdzKSB7XG4gICAgICAgIHRoaXMub25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlZC5lbWl0KGFyZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnQsIElneENvbHVtbkhpZGluZ0l0ZW1EaXJlY3RpdmVdLFxuICAgIGV4cG9ydHM6IFtJZ3hDb2x1bW5IaWRpbmdDb21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgSWd4QnV0dG9uTW9kdWxlLFxuICAgICAgICBJZ3hDaGVja2JveE1vZHVsZSxcbiAgICAgICAgSWd4SW5wdXRHcm91cE1vZHVsZSxcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElneENvbHVtbkhpZGluZ01vZHVsZSB7XG59XG4iXX0=