UNPKG

@catull/igniteui-angular

Version:

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

386 lines 33 kB
import { __decorate, __extends, __metadata } from "tslib"; import { Component, ContentChildren, ChangeDetectionStrategy, Input, forwardRef, QueryList, TemplateRef, Output, EventEmitter } from '@angular/core'; import { IgxColumnComponent } from './column.component'; import { flatten } from '../../core/utils'; var IgxColumnGroupComponent = /** @class */ (function (_super) { __extends(IgxColumnGroupComponent, _super); function IgxColumnGroupComponent() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.children = new QueryList(); /** * Sets/gets whether the column group is `searchable`. * Default value is `true`. * ```typescript * let isSearchable = this.columnGroup.searchable; * ``` * ```html * <igx-column-group [searchable] = "false"></igx-column-group> * ``` * @memberof IgxColumnGroupComponent */ _this.searchable = true; /** *@hidden */ _this.hiddenChange = new EventEmitter(); return _this; // constructor(public gridAPI: GridBaseAPIService<IgxGridBaseDirective & IGridDataBindable>, public cdr: ChangeDetectorRef) { // // D.P. constructor duplication due to es6 compilation, might be obsolete in the future // super(gridAPI, cdr); // } } IgxColumnGroupComponent_1 = IgxColumnGroupComponent; Object.defineProperty(IgxColumnGroupComponent.prototype, "collapsible", { get: function () { return this._collapsible && this.checkCollapsibleState(); }, /** * Set if the column group is collapsible. * Default value is `false` * ```html * <igx-column-group [collapsible] = "true"></igx-column-group> * ``` * @memberof IgxColumnGroupComponent */ set: function (value) { this._collapsible = value; this.collapsibleChange.emit(this._collapsible); if (this.children && !this.hidden) { if (this._collapsible) { this.setExpandCollapseState(); } else { this.children.forEach(function (child) { return child.hidden = false; }); } } }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnGroupComponent.prototype, "expanded", { get: function () { return this._expanded; }, /** * Set whether the group is expanded or collapsed initially. * Applied only if the collapsible property is set to `true` * Default value is `true` * ```html * const state = false * <igx-column-group [(expand)] = "state"></igx-column-group> * ``` * @memberof IgxColumnGroupComponent */ set: function (value) { this._expanded = value; this.expandedChange.emit(this._expanded); if (!this.collapsible) { return; } if (!this.hidden && this.children) { this.setExpandCollapseState(); } }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnGroupComponent.prototype, "summaries", { /** * Gets the column group `summaries`. * ```typescript * let columnGroupSummaries = this.columnGroup.summaries; * ``` * @memberof IgxColumnGroupComponent */ get: function () { return this._summaries; }, /** * Sets the column group `summaries`. * ```typescript * this.columnGroup.summaries = IgxNumberSummaryOperand; * ``` * @memberof IgxColumnGroupComponent */ set: function (classRef) { }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnGroupComponent.prototype, "filters", { /** * Gets the column group `filters`. * ```typescript * let columnGroupFilters = this.columnGroup.filters; * ``` * @memberof IgxColumnGroupComponent */ get: function () { return this._filters; }, /** * Sets the column group `filters`. * ```typescript * this.columnGroup.filters = IgxStringFilteringOperand; * ``` * @memberof IgxColumnGroupComponent */ set: function (classRef) { }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnGroupComponent.prototype, "bodyTemplate", { /** * Returns a reference to the body template. * ```typescript * let bodyTemplate = this.columnGroup.bodyTemplate; * ``` * @memberof IgxColumnGroupComponent */ get: function () { return this._bodyTemplate; }, /** * @hidden */ set: function (template) { }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnGroupComponent.prototype, "collapsibleIndicatorTemplate", { /** * Allows you to define a custom template for expand/collapse indicator * @memberof IgxColumnGroupComponent */ get: function () { return this._collapseIndicatorTemplate; }, set: function (template) { this._collapseIndicatorTemplate = template; }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnGroupComponent.prototype, "inlineEditorTemplate", { /** * Returns a reference to the inline editor template. * ```typescript * let inlineEditorTemplate = this.columnGroup.inlineEditorTemplate; * ``` * @memberof IgxColumnGroupComponent */ get: function () { return this._inlineEditorTemplate; }, /** * @hidden */ set: function (template) { }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnGroupComponent.prototype, "cells", { /** * Gets the column group cells. * ```typescript * let columnCells = this.columnGroup.cells; * ``` * @memberof IgxColumnGroupComponent */ get: function () { return []; }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnGroupComponent.prototype, "hidden", { /** * Gets whether the column group is hidden. * ```typescript * let isHidden = this.columnGroup.hidden; * ``` * @memberof IgxColumnGroupComponent */ get: function () { return this.allChildren.every(function (c) { return c.hidden; }); }, /** * Sets the column group hidden property. * ```html * <igx-column [hidden] = "true"></igx-column> * ``` * * Two-way data binding * ```html * <igx-column [(hidden)] = "model.columns[0].isHidden"></igx-column> * ``` * @memberof IgxColumnGroupComponent */ set: function (value) { var _this = this; this._hidden = value; this.hiddenChange.emit(this._hidden); if (this._hidden || !this.collapsible) { this.children.forEach(function (child) { return child.hidden = _this._hidden; }); } else { this.children.forEach(function (c) { if (c.visibleWhenCollapsed === undefined) { c.hidden = false; return; } c.hidden = _this.expanded ? c.visibleWhenCollapsed : !c.visibleWhenCollapsed; }); } }, enumerable: true, configurable: true }); /** *@hidden */ IgxColumnGroupComponent.prototype.ngAfterContentInit = function () { var _this = this; /* @ContentChildren with descendants still returns the `parent` component in the query list. */ if (this.headTemplate && this.headTemplate.length) { this._headerTemplate = this.headTemplate.toArray()[0].template; } if (this.collapseIndicatorTemplate) { this._collapseIndicatorTemplate = this.collapseIndicatorTemplate.template; } // currently only ivy fixes the issue, we have to slice only if the first child is group if (this.children.first === this) { this.children.reset(this.children.toArray().slice(1)); } this.children.forEach(function (child) { child.parent = _this; }); if (this.collapsible) { this.setExpandCollapseState(); } }; Object.defineProperty(IgxColumnGroupComponent.prototype, "allChildren", { /** * Returns the children columns collection. * ```typescript * let columns = this.columnGroup.allChildren; * ``` * @memberof IgxColumnGroupComponent */ get: function () { return flatten(this.children.toArray()); }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnGroupComponent.prototype, "columnGroup", { /** * Returns a boolean indicating if the column is a `ColumnGroup`. * ```typescript * let isColumnGroup = this.columnGroup.columnGroup * ``` * @memberof IgxColumnGroupComponent */ get: function () { return true; }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnGroupComponent.prototype, "columnLayout", { /** * Returns a boolean indicating if the column is a `ColumnLayout` for multi-row layout. * ```typescript * let columnGroup = this.column.columnGroup; * ``` * @memberof IgxColumnComponent */ get: function () { return false; }, enumerable: true, configurable: true }); Object.defineProperty(IgxColumnGroupComponent.prototype, "width", { /** * Gets the width of the column group. * ```typescript * let columnGroupWidth = this.columnGroup.width; * ``` * @memberof IgxColumnGroupComponent */ get: function () { var isChildrenWidthInPercent = false, width; width = "" + this.children.reduce(function (acc, val) { if (val.hidden) { return acc; } if (typeof val.width === 'string' && val.width.indexOf('%') !== -1) { isChildrenWidthInPercent = true; return acc + parseInt(val.width, 10); } return acc + parseInt(val.calcWidth, 10); }, 0); return isChildrenWidthInPercent ? width + '%' : width + 'px'; }, set: function (val) { }, enumerable: true, configurable: true }); var IgxColumnGroupComponent_1; __decorate([ ContentChildren(IgxColumnComponent, { read: IgxColumnComponent }), __metadata("design:type", Object) ], IgxColumnGroupComponent.prototype, "children", void 0); __decorate([ Input(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean]) ], IgxColumnGroupComponent.prototype, "collapsible", null); __decorate([ Input(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean]) ], IgxColumnGroupComponent.prototype, "expanded", null); __decorate([ Input(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object]) ], IgxColumnGroupComponent.prototype, "summaries", null); __decorate([ Input(), __metadata("design:type", Object) ], IgxColumnGroupComponent.prototype, "searchable", void 0); __decorate([ Input(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object]) ], IgxColumnGroupComponent.prototype, "filters", null); __decorate([ Input(), __metadata("design:type", TemplateRef), __metadata("design:paramtypes", [TemplateRef]) ], IgxColumnGroupComponent.prototype, "collapsibleIndicatorTemplate", null); __decorate([ Input(), __metadata("design:type", Boolean), __metadata("design:paramtypes", [Boolean]) ], IgxColumnGroupComponent.prototype, "hidden", null); __decorate([ Output(), __metadata("design:type", Object) ], IgxColumnGroupComponent.prototype, "hiddenChange", void 0); IgxColumnGroupComponent = IgxColumnGroupComponent_1 = __decorate([ Component({ changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: IgxColumnComponent, useExisting: forwardRef(function () { return IgxColumnGroupComponent_1; }) }], selector: 'igx-column-group', template: "" }) ], IgxColumnGroupComponent); return IgxColumnGroupComponent; }(IgxColumnComponent)); export { IgxColumnGroupComponent }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZ3JpZHMvY29sdW1ucy9jb2x1bW4tZ3JvdXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsS0FBSyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsV0FBVyxFQUNYLE1BQU0sRUFDTixZQUFZLEVBQ2YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFeEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBUzNDO0lBQTZDLDJDQUFrQjtJQUEvRDtRQUFBLHFFQXlSQztRQXRSRyxjQUFRLEdBQUcsSUFBSSxTQUFTLEVBQXNCLENBQUM7UUFvRS9DOzs7Ozs7Ozs7O1dBVUc7UUFFSSxnQkFBVSxHQUFHLElBQUksQ0FBQztRQTRHekI7O1dBRUc7UUFFSSxrQkFBWSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7O1FBa0ZsRCw2SEFBNkg7UUFDN0gsOEZBQThGO1FBQzlGLDJCQUEyQjtRQUMzQixJQUFJO0lBQ1IsQ0FBQztnQ0F6UlksdUJBQXVCO0lBY2hDLHNCQUFXLGdEQUFXO2FBV3RCO1lBQ0ksT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdELENBQUM7UUF0QkQ7Ozs7Ozs7V0FPRzthQUVILFVBQXVCLEtBQWM7WUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDL0MsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0s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LENBQUM7UUFDakUsQ0FBQzthQUVELFVBQVUsR0FBRyxJQUFJLENBQUM7OztPQUZqQjs7SUE5UUQ7UUFEQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQzs7NkRBQ25CO0lBVy9DO1FBREMsS0FBSyxFQUFFOzs7OERBV1A7SUFnQkQ7UUFEQyxLQUFLLEVBQUU7OzsyREFRUDtJQWFEO1FBREMsS0FBSyxFQUFFOzs7NERBR1A7SUFxQkQ7UUFEQyxLQUFLLEVBQUU7OytEQUNpQjtJQVN6QjtRQURDLEtBQUssRUFBRTs7OzBEQUdQO0lBOEJEO1FBREMsS0FBSyxFQUFFO2tDQUltQyxXQUFXO3lDQUFYLFdBQVc7K0VBRHJEO0lBcUNEO1FBREMsS0FBSyxFQUFFOzs7eURBR1A7SUE4QkQ7UUFEQyxNQUFNLEVBQUU7O2lFQUN5QztJQW5NekMsdUJBQXVCO1FBTm5DLFNBQVMsQ0FBQztZQUNQLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1lBQy9DLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsY0FBTSxPQUFBLHlCQUF1QixFQUF2QixDQUF1QixDQUFDLEVBQUUsQ0FBQztZQUNwRyxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLFFBQVEsRUFBRSxFQUFFO1NBQ2YsQ0FBQztPQUNXLHVCQUF1QixDQXlSbkM7SUFBRCw4QkFBQztDQUFBLEFBelJELENBQTZDLGtCQUFrQixHQXlSOUQ7U0F6UlksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgSW5wdXQsXG4gICAgZm9yd2FyZFJlZixcbiAgICBRdWVyeUxpc3QsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IElneEdyaWRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmxhdHRlbiB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWd4Q29sdW1uQ29tcG9uZW50LCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCkgfV0sXG4gICAgc2VsZWN0b3I6ICdpZ3gtY29sdW1uLWdyb3VwJyxcbiAgICB0ZW1wbGF0ZTogYGBcbn0pXG5leHBvcnQgY2xhc3MgSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBJZ3hDb2x1bW5Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4Q29sdW1uQ29tcG9uZW50LCB7IHJlYWQ6IElneENvbHVtbkNvbXBvbmVudCB9KVxuICAgIGNoaWxkcmVuID0gbmV3IFF1ZXJ5TGlzdDxJZ3hDb2x1bW5Db21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBTZXQgaWYgdGhlIGNvbHVtbiBncm91cCBpcyBjb2xsYXBzaWJsZS5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGBmYWxzZWBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIDxpZ3gtY29sdW1uLWdyb3VwIFtjb2xsYXBzaWJsZV0gPSBcInRydWVcIj48L2lneC1jb2x1bW4tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGNvbGxhcHNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2NvbGxhcHNpYmxlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY29sbGFwc2libGVDaGFuZ2UuZW1pdCh0aGlzLl9jb2xsYXBzaWJsZSk7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuICYmICF0aGlzLmhpZGRlbikge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2NvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFeHBhbmRDb2xsYXBzZVN0YXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiBjaGlsZC5oaWRkZW4gPSBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGdldCBjb2xsYXBzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxhcHNpYmxlICYmIHRoaXMuY2hlY2tDb2xsYXBzaWJsZVN0YXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHdoZXRoZXIgdGhlIGdyb3VwIGlzIGV4cGFuZGVkIG9yIGNvbGxhcHNlZCBpbml0aWFsbHkuXG4gICAgICogQXBwbGllZCBvbmx5IGlmIHRoZSBjb2xsYXBzaWJsZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYHRydWVgXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWBcbiAgICAgKiBgYGBodG1sXG4gICAgICogIGNvbnN0IHN0YXRlID0gZmFsc2VcbiAgICAgKiAgPGlneC1jb2x1bW4tZ3JvdXAgWyhleHBhbmQpXSA9IFwic3RhdGVcIj48L2lneC1jb2x1bW4tZ3JvdXA+XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGV4cGFuZGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLl9leHBhbmRlZCk7XG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzaWJsZSkgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKCF0aGlzLmhpZGRlbiAmJiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICB0aGlzLnNldEV4cGFuZENvbGxhcHNlU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGV4cGFuZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sdW1uIGdyb3VwIGBzdW1tYXJpZXNgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1uR3JvdXBTdW1tYXJpZXMgPSB0aGlzLmNvbHVtbkdyb3VwLnN1bW1hcmllcztcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgc3VtbWFyaWVzKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdW1tYXJpZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbHVtbiBncm91cCBgc3VtbWFyaWVzYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb2x1bW5Hcm91cC5zdW1tYXJpZXMgPSBJZ3hOdW1iZXJTdW1tYXJ5T3BlcmFuZDtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHN1bW1hcmllcyhjbGFzc1JlZjogYW55KSB7IH1cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY29sdW1uIGdyb3VwIGlzIGBzZWFyY2hhYmxlYC5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzU2VhcmNoYWJsZSA9ICB0aGlzLmNvbHVtbkdyb3VwLnNlYXJjaGFibGU7XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWNvbHVtbi1ncm91cCBbc2VhcmNoYWJsZV0gPSBcImZhbHNlXCI+PC9pZ3gtY29sdW1uLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlYXJjaGFibGUgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbHVtbiBncm91cCBgZmlsdGVyc2AuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5Hcm91cEZpbHRlcnMgPSB0aGlzLmNvbHVtbkdyb3VwLmZpbHRlcnM7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGZpbHRlcnMoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcnM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbHVtbiBncm91cCBgZmlsdGVyc2AuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uR3JvdXAuZmlsdGVycyA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQ7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBmaWx0ZXJzKGNsYXNzUmVmOiBhbnkpIHsgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgYm9keSB0ZW1wbGF0ZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGJvZHlUZW1wbGF0ZSA9IHRoaXMuY29sdW1uR3JvdXAuYm9keVRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCBib2R5VGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ib2R5VGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgYm9keVRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7IH1cblxuICAgIC8qKlxuICAgICAqIEFsbG93cyB5b3UgdG8gZGVmaW5lIGEgY3VzdG9tIHRlbXBsYXRlIGZvciBleHBhbmQvY29sbGFwc2UgaW5kaWNhdG9yXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgY29sbGFwc2libGVJbmRpY2F0b3JUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxhcHNlSW5kaWNhdG9yVGVtcGxhdGU7XG4gICAgfVxuICAgIHNldCBjb2xsYXBzaWJsZUluZGljYXRvclRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgICAgIHRoaXMuX2NvbGxhcHNlSW5kaWNhdG9yVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBpbmxpbmUgZWRpdG9yIHRlbXBsYXRlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaW5saW5lRWRpdG9yVGVtcGxhdGUgPSB0aGlzLmNvbHVtbkdyb3VwLmlubGluZUVkaXRvclRlbXBsYXRlO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCBpbmxpbmVFZGl0b3JUZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubGluZUVkaXRvclRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGlubGluZUVkaXRvclRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7IH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb2x1bW4gZ3JvdXAgY2VsbHMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5DZWxscyA9IHRoaXMuY29sdW1uR3JvdXAuY2VsbHM7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGNlbGxzKCk6IElneEdyaWRDZWxsQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciB0aGUgY29sdW1uIGdyb3VwIGlzIGhpZGRlbi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlzSGlkZGVuID0gdGhpcy5jb2x1bW5Hcm91cC5oaWRkZW47XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgaGlkZGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxDaGlsZHJlbi5ldmVyeShjID0+IGMuaGlkZGVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29sdW1uIGdyb3VwIGhpZGRlbiBwcm9wZXJ0eS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb2x1bW4gW2hpZGRlbl0gPSBcInRydWVcIj48L2lneC1jb2x1bW4+XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUd28td2F5IGRhdGEgYmluZGluZ1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWNvbHVtbiBbKGhpZGRlbildID0gXCJtb2RlbC5jb2x1bW5zWzBdLmlzSGlkZGVuXCI+PC9pZ3gtY29sdW1uPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHNldCBoaWRkZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faGlkZGVuID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGlkZGVuQ2hhbmdlLmVtaXQodGhpcy5faGlkZGVuKTtcbiAgICAgICAgaWYgKHRoaXMuX2hpZGRlbiB8fCAhdGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLmhpZGRlbiA9IHRoaXMuX2hpZGRlbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goYyA9PiAge1xuICAgICAgICAgICAgICAgIGlmIChjLnZpc2libGVXaGVuQ29sbGFwc2VkID09PSB1bmRlZmluZWQpIHtjLmhpZGRlbiA9IGZhbHNlOyByZXR1cm47IH1cbiAgICAgICAgICAgICAgICBjLmhpZGRlbiA9IHRoaXMuZXhwYW5kZWQgPyBjLnZpc2libGVXaGVuQ29sbGFwc2VkIDogIWMudmlzaWJsZVdoZW5Db2xsYXBzZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBoaWRkZW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAgICBAQ29udGVudENoaWxkcmVuIHdpdGggZGVzY2VuZGFudHMgc3RpbGwgcmV0dXJucyB0aGUgYHBhcmVudGBcbiAgICAgICAgICAgIGNvbXBvbmVudCBpbiB0aGUgcXVlcnkgbGlzdC5cbiAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMuaGVhZFRlbXBsYXRlICYmIHRoaXMuaGVhZFRlbXBsYXRlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5faGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRUZW1wbGF0ZS50b0FycmF5KClbMF0udGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VJbmRpY2F0b3JUZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fY29sbGFwc2VJbmRpY2F0b3JUZW1wbGF0ZSA9IHRoaXMuY29sbGFwc2VJbmRpY2F0b3JUZW1wbGF0ZS50ZW1wbGF0ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjdXJyZW50bHkgb25seSBpdnkgZml4ZXMgdGhlIGlzc3VlLCB3ZSBoYXZlIHRvIHNsaWNlIG9ubHkgaWYgdGhlIGZpcnN0IGNoaWxkIGlzIGdyb3VwXG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmZpcnN0ID09PSB0aGlzKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnJlc2V0KHRoaXMuY2hpbGRyZW4udG9BcnJheSgpLnNsaWNlKDEpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNldEV4cGFuZENvbGxhcHNlU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNoaWxkcmVuIGNvbHVtbnMgY29sbGVjdGlvbi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbnMgPSAgdGhpcy5jb2x1bW5Hcm91cC5hbGxDaGlsZHJlbjtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgYWxsQ2hpbGRyZW4oKTogSWd4Q29sdW1uQ29tcG9uZW50W10ge1xuICAgICAgICByZXR1cm4gZmxhdHRlbih0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGNvbHVtbiBpcyBhIGBDb2x1bW5Hcm91cGAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0NvbHVtbkdyb3VwID0gIHRoaXMuY29sdW1uR3JvdXAuY29sdW1uR3JvdXBcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgY29sdW1uR3JvdXAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBjb2x1bW4gaXMgYSBgQ29sdW1uTGF5b3V0YCBmb3IgbXVsdGktcm93IGxheW91dC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkdyb3VwID0gIHRoaXMuY29sdW1uLmNvbHVtbkdyb3VwO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Db21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgY29sdW1uTGF5b3V0KCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4gZ3JvdXAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5Hcm91cFdpZHRoID0gdGhpcy5jb2x1bW5Hcm91cC53aWR0aDtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgd2lkdGgoKSB7XG4gICAgICAgIGxldCBpc0NoaWxkcmVuV2lkdGhJblBlcmNlbnQgPSBmYWxzZSwgd2lkdGg7XG4gICAgICAgIHdpZHRoID0gYCR7dGhpcy5jaGlsZHJlbi5yZWR1Y2UoKGFjYywgdmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsLmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbC53aWR0aCA9PT0gJ3N0cmluZycgJiYgdmFsLndpZHRoLmluZGV4T2YoJyUnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBpc0NoaWxkcmVuV2lkdGhJblBlcmNlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2MgKyBwYXJzZUludCh2YWwud2lkdGgsIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhY2MgKyBwYXJzZUludCh2YWwuY2FsY1dpZHRoLCAxMCk7XG4gICAgICAgIH0sIDApfWA7XG4gICAgICAgIHJldHVybiBpc0NoaWxkcmVuV2lkdGhJblBlcmNlbnQgPyB3aWR0aCArICclJyA6IHdpZHRoICsgJ3B4JztcbiAgICB9XG5cbiAgICBzZXQgd2lkdGgodmFsKSB7IH1cblxuICAgIC8vIGNvbnN0cnVjdG9yKHB1YmxpYyBncmlkQVBJOiBHcmlkQmFzZUFQSVNlcnZpY2U8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBJR3JpZERhdGFCaW5kYWJsZT4sIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgLy8gICAgIC8vIEQuUC4gY29uc3RydWN0b3IgZHVwbGljYXRpb24gZHVlIHRvIGVzNiBjb21waWxhdGlvbiwgbWlnaHQgYmUgb2Jzb2xldGUgaW4gdGhlIGZ1dHVyZVxuICAgIC8vICAgICBzdXBlcihncmlkQVBJLCBjZHIpO1xuICAgIC8vIH1cbn1cbiJdfQ==