@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
328 lines • 29.5 kB
JavaScript
var IgxColumnGroupComponent_1;
import { __decorate, __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';
let IgxColumnGroupComponent = IgxColumnGroupComponent_1 = class IgxColumnGroupComponent extends IgxColumnComponent {
constructor() {
super(...arguments);
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();
// 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);
// }
}
/**
* Set if the column group is collapsible.
* Default value is `false`
* ```html
* <igx-column-group [collapsible] = "true"></igx-column-group>
* ```
* @memberof IgxColumnGroupComponent
*/
set collapsible(value) {
this._collapsible = value;
this.collapsibleChange.emit(this._collapsible);
if (this.children && !this.hidden) {
if (this._collapsible) {
this.setExpandCollapseState();
}
else {
this.children.forEach(child => child.hidden = false);
}
}
}
get collapsible() {
return this._collapsible && this.checkCollapsibleState();
}
/**
* 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 expanded(value) {
this._expanded = value;
this.expandedChange.emit(this._expanded);
if (!this.collapsible) {
return;
}
if (!this.hidden && this.children) {
this.setExpandCollapseState();
}
}
get expanded() {
return this._expanded;
}
/**
* Gets the column group `summaries`.
* ```typescript
* let columnGroupSummaries = this.columnGroup.summaries;
* ```
* @memberof IgxColumnGroupComponent
*/
get summaries() {
return this._summaries;
}
/**
* Sets the column group `summaries`.
* ```typescript
* this.columnGroup.summaries = IgxNumberSummaryOperand;
* ```
* @memberof IgxColumnGroupComponent
*/
set summaries(classRef) { }
/**
* Gets the column group `filters`.
* ```typescript
* let columnGroupFilters = this.columnGroup.filters;
* ```
* @memberof IgxColumnGroupComponent
*/
get filters() {
return this._filters;
}
/**
* Sets the column group `filters`.
* ```typescript
* this.columnGroup.filters = IgxStringFilteringOperand;
* ```
* @memberof IgxColumnGroupComponent
*/
set filters(classRef) { }
/**
* Returns a reference to the body template.
* ```typescript
* let bodyTemplate = this.columnGroup.bodyTemplate;
* ```
* @memberof IgxColumnGroupComponent
*/
get bodyTemplate() {
return this._bodyTemplate;
}
/**
* @hidden
*/
set bodyTemplate(template) { }
/**
* Allows you to define a custom template for expand/collapse indicator
* @memberof IgxColumnGroupComponent
*/
get collapsibleIndicatorTemplate() {
return this._collapseIndicatorTemplate;
}
set collapsibleIndicatorTemplate(template) {
this._collapseIndicatorTemplate = template;
}
/**
* Returns a reference to the inline editor template.
* ```typescript
* let inlineEditorTemplate = this.columnGroup.inlineEditorTemplate;
* ```
* @memberof IgxColumnGroupComponent
*/
get inlineEditorTemplate() {
return this._inlineEditorTemplate;
}
/**
* @hidden
*/
set inlineEditorTemplate(template) { }
/**
* Gets the column group cells.
* ```typescript
* let columnCells = this.columnGroup.cells;
* ```
* @memberof IgxColumnGroupComponent
*/
get cells() {
return [];
}
/**
* Gets whether the column group is hidden.
* ```typescript
* let isHidden = this.columnGroup.hidden;
* ```
* @memberof IgxColumnGroupComponent
*/
get hidden() {
return this.allChildren.every(c => 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 hidden(value) {
this._hidden = value;
this.hiddenChange.emit(this._hidden);
if (this._hidden || !this.collapsible) {
this.children.forEach(child => child.hidden = this._hidden);
}
else {
this.children.forEach(c => {
if (c.visibleWhenCollapsed === undefined) {
c.hidden = false;
return;
}
c.hidden = this.expanded ? c.visibleWhenCollapsed : !c.visibleWhenCollapsed;
});
}
}
/**
*@hidden
*/
ngAfterContentInit() {
/*
@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(child => {
child.parent = this;
});
if (this.collapsible) {
this.setExpandCollapseState();
}
}
/**
* Returns the children columns collection.
* ```typescript
* let columns = this.columnGroup.allChildren;
* ```
* @memberof IgxColumnGroupComponent
*/
get allChildren() {
return flatten(this.children.toArray());
}
/**
* Returns a boolean indicating if the column is a `ColumnGroup`.
* ```typescript
* let isColumnGroup = this.columnGroup.columnGroup
* ```
* @memberof IgxColumnGroupComponent
*/
get columnGroup() {
return true;
}
/**
* Returns a boolean indicating if the column is a `ColumnLayout` for multi-row layout.
* ```typescript
* let columnGroup = this.column.columnGroup;
* ```
* @memberof IgxColumnComponent
*/
get columnLayout() {
return false;
}
/**
* Gets the width of the column group.
* ```typescript
* let columnGroupWidth = this.columnGroup.width;
* ```
* @memberof IgxColumnGroupComponent
*/
get width() {
let isChildrenWidthInPercent = false, width;
width = `${this.children.reduce((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 width(val) { }
};
__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(() => IgxColumnGroupComponent_1) }],
selector: 'igx-column-group',
template: ``
})
], IgxColumnGroupComponent);
export { IgxColumnGroupComponent };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvZ3JpZHMvY29sdW1ucy9jb2x1bW4tZ3JvdXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLEtBQUssRUFDTCxVQUFVLEVBQ1YsU0FBUyxFQUNULFdBQVcsRUFDWCxNQUFNLEVBQ04sWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVMzQyxJQUFhLHVCQUF1QiwrQkFBcEMsTUFBYSx1QkFBd0IsU0FBUSxrQkFBa0I7SUFBL0Q7O1FBR0ksYUFBUSxHQUFHLElBQUksU0FBUyxFQUFzQixDQUFDO1FBb0UvQzs7Ozs7Ozs7OztXQVVHO1FBRUksZUFBVSxHQUFHLElBQUksQ0FBQztRQTRHekI7O1dBRUc7UUFFSSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFrRmxELDZIQUE2SDtRQUM3SCw4RkFBOEY7UUFDOUYsMkJBQTJCO1FBQzNCLElBQUk7SUFDUixDQUFDO0lBcFJHOzs7Ozs7O09BT0c7SUFFSCxJQUFXLFdBQVcsQ0FBQyxLQUFjO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDL0IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNuQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQzthQUNqQztpQkFB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OzswREFXUDtBQWdCRDtJQURDLEtBQUssRUFBRTs7O3VEQVFQO0FBYUQ7SUFEQyxLQUFLLEVBQUU7Ozt3REFHUDtBQXFCRDtJQURDLEtBQUssRUFBRTs7MkRBQ2lCO0FBU3pCO0lBREMsS0FBSyxFQUFFOzs7c0RBR1A7QUE4QkQ7SUFEQyxLQUFLLEVBQUU7OEJBSW1DLFdBQVc7cUNBQVgsV0FBVzsyRUFEckQ7QUFxQ0Q7SUFEQyxLQUFLLEVBQUU7OztxREFHUDtBQThCRDtJQURDLE1BQU0sRUFBRTs7NkRBQ3lDO0FBbk16Qyx1QkFBdUI7SUFObkMsU0FBUyxDQUFDO1FBQ1AsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07UUFDL0MsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx5QkFBdUIsQ0FBQyxFQUFFLENBQUM7UUFDcEcsUUFBUSxFQUFFLGtCQUFrQjtRQUM1QixRQUFRLEVBQUUsRUFBRTtLQUNmLENBQUM7R0FDVyx1QkFBdUIsQ0F5Um5DO1NBelJZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIElucHV0LFxuICAgIGZvcndhcmRSZWYsXG4gICAgUXVlcnlMaXN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hHcmlkQ2VsbENvbXBvbmVudCB9IGZyb20gJy4uL2NlbGwuY29tcG9uZW50JztcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IElneENvbHVtbkNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSWd4Q29sdW1uR3JvdXBDb21wb25lbnQpIH1dLFxuICAgIHNlbGVjdG9yOiAnaWd4LWNvbHVtbi1ncm91cCcsXG4gICAgdGVtcGxhdGU6IGBgXG59KVxuZXhwb3J0IGNsYXNzIElneENvbHVtbkdyb3VwQ29tcG9uZW50IGV4dGVuZHMgSWd4Q29sdW1uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKElneENvbHVtbkNvbXBvbmVudCwgeyByZWFkOiBJZ3hDb2x1bW5Db21wb25lbnQgfSlcbiAgICBjaGlsZHJlbiA9IG5ldyBRdWVyeUxpc3Q8SWd4Q29sdW1uQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogU2V0IGlmIHRoZSBjb2x1bW4gZ3JvdXAgaXMgY29sbGFwc2libGUuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWNvbHVtbi1ncm91cCBbY29sbGFwc2libGVdID0gXCJ0cnVlXCI+PC9pZ3gtY29sdW1uLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBjb2xsYXBzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9jb2xsYXBzaWJsZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNvbGxhcHNpYmxlQ2hhbmdlLmVtaXQodGhpcy5fY29sbGFwc2libGUpO1xuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbiAmJiAhdGhpcy5oaWRkZW4pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RXhwYW5kQ29sbGFwc2VTdGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4gY2hpbGQuaGlkZGVuID0gZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgY29sbGFwc2libGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsYXBzaWJsZSAmJiB0aGlzLmNoZWNrQ29sbGFwc2libGVTdGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCB3aGV0aGVyIHRoZSBncm91cCBpcyBleHBhbmRlZCBvciBjb2xsYXBzZWQgaW5pdGlhbGx5LlxuICAgICAqIEFwcGxpZWQgb25seSBpZiB0aGUgY29sbGFwc2libGUgcHJvcGVydHkgaXMgc2V0IHRvIGB0cnVlYFxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgXG4gICAgICogYGBgaHRtbFxuICAgICAqICBjb25zdCBzdGF0ZSA9IGZhbHNlXG4gICAgICogIDxpZ3gtY29sdW1uLWdyb3VwIFsoZXhwYW5kKV0gPSBcInN0YXRlXCI+PC9pZ3gtY29sdW1uLWdyb3VwPlxuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBleHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9leHBhbmRlZCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5fZXhwYW5kZWQpO1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2libGUpIHsgcmV0dXJuOyB9XG4gICAgICAgIGlmICghdGhpcy5oaWRkZW4gJiYgdGhpcy5jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5zZXRFeHBhbmRDb2xsYXBzZVN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGdldCBleHBhbmRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvbHVtbiBncm91cCBgc3VtbWFyaWVzYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGNvbHVtbkdyb3VwU3VtbWFyaWVzID0gdGhpcy5jb2x1bW5Hcm91cC5zdW1tYXJpZXM7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHN1bW1hcmllcygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3VtbWFyaWVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2x1bW4gZ3JvdXAgYHN1bW1hcmllc2AuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29sdW1uR3JvdXAuc3VtbWFyaWVzID0gSWd4TnVtYmVyU3VtbWFyeU9wZXJhbmQ7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNldCBzdW1tYXJpZXMoY2xhc3NSZWY6IGFueSkgeyB9XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIGNvbHVtbiBncm91cCBpcyBgc2VhcmNoYWJsZWAuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc1NlYXJjaGFibGUgPSAgdGhpcy5jb2x1bW5Hcm91cC5zZWFyY2hhYmxlO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1jb2x1bW4tZ3JvdXAgW3NlYXJjaGFibGVdID0gXCJmYWxzZVwiPjwvaWd4LWNvbHVtbi1ncm91cD5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZWFyY2hhYmxlID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb2x1bW4gZ3JvdXAgYGZpbHRlcnNgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1uR3JvdXBGaWx0ZXJzID0gdGhpcy5jb2x1bW5Hcm91cC5maWx0ZXJzO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBmaWx0ZXJzKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2x1bW4gZ3JvdXAgYGZpbHRlcnNgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNvbHVtbkdyb3VwLmZpbHRlcnMgPSBJZ3hTdHJpbmdGaWx0ZXJpbmdPcGVyYW5kO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgZmlsdGVycyhjbGFzc1JlZjogYW55KSB7IH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGJvZHkgdGVtcGxhdGUuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBib2R5VGVtcGxhdGUgPSB0aGlzLmNvbHVtbkdyb3VwLmJvZHlUZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgYm9keVRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYm9keVRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGJvZHlUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgeyB9XG5cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgeW91IHRvIGRlZmluZSBhIGN1c3RvbSB0ZW1wbGF0ZSBmb3IgZXhwYW5kL2NvbGxhcHNlIGluZGljYXRvclxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGNvbGxhcHNpYmxlSW5kaWNhdG9yVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsYXBzZUluZGljYXRvclRlbXBsYXRlO1xuICAgIH1cbiAgICBzZXQgY29sbGFwc2libGVJbmRpY2F0b3JUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICB0aGlzLl9jb2xsYXBzZUluZGljYXRvclRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgaW5saW5lIGVkaXRvciB0ZW1wbGF0ZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGlubGluZUVkaXRvclRlbXBsYXRlID0gdGhpcy5jb2x1bW5Hcm91cC5pbmxpbmVFZGl0b3JUZW1wbGF0ZTtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgaW5saW5lRWRpdG9yVGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmxpbmVFZGl0b3JUZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBpbmxpbmVFZGl0b3JUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PikgeyB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sdW1uIGdyb3VwIGNlbGxzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1uQ2VsbHMgPSB0aGlzLmNvbHVtbkdyb3VwLmNlbGxzO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCBjZWxscygpOiBJZ3hHcmlkQ2VsbENvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgdGhlIGNvbHVtbiBncm91cCBpcyBoaWRkZW4uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc0hpZGRlbiA9IHRoaXMuY29sdW1uR3JvdXAuaGlkZGVuO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsQ2hpbGRyZW4uZXZlcnkoYyA9PiBjLmhpZGRlbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbHVtbiBncm91cCBoaWRkZW4gcHJvcGVydHkuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY29sdW1uIFtoaWRkZW5dID0gXCJ0cnVlXCI+PC9pZ3gtY29sdW1uPlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVHdvLXdheSBkYXRhIGJpbmRpbmdcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jb2x1bW4gWyhoaWRkZW4pXSA9IFwibW9kZWwuY29sdW1uc1swXS5pc0hpZGRlblwiPjwvaWd4LWNvbHVtbj5cbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uR3JvdXBDb21wb25lbnRcbiAgICAgKi9cbiAgICBzZXQgaGlkZGVuKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hpZGRlbiA9IHZhbHVlO1xuICAgICAgICB0aGlzLmhpZGRlbkNoYW5nZS5lbWl0KHRoaXMuX2hpZGRlbik7XG4gICAgICAgIGlmICh0aGlzLl9oaWRkZW4gfHwgIXRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiBjaGlsZC5oaWRkZW4gPSB0aGlzLl9oaWRkZW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGMgPT4gIHtcbiAgICAgICAgICAgICAgICBpZiAoYy52aXNpYmxlV2hlbkNvbGxhcHNlZCA9PT0gdW5kZWZpbmVkKSB7Yy5oaWRkZW4gPSBmYWxzZTsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgYy5oaWRkZW4gPSB0aGlzLmV4cGFuZGVkID8gYy52aXNpYmxlV2hlbkNvbGxhcHNlZCA6ICFjLnZpc2libGVXaGVuQ29sbGFwc2VkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKkBoaWRkZW5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaGlkZGVuQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICAvKlxuICAgICAgICAgICAgQENvbnRlbnRDaGlsZHJlbiB3aXRoIGRlc2NlbmRhbnRzIHN0aWxsIHJldHVybnMgdGhlIGBwYXJlbnRgXG4gICAgICAgICAgICBjb21wb25lbnQgaW4gdGhlIHF1ZXJ5IGxpc3QuXG4gICAgICAgICovXG4gICAgICAgIGlmICh0aGlzLmhlYWRUZW1wbGF0ZSAmJiB0aGlzLmhlYWRUZW1wbGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2hlYWRlclRlbXBsYXRlID0gdGhpcy5oZWFkVGVtcGxhdGUudG9BcnJheSgpWzBdLnRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNlSW5kaWNhdG9yVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbGxhcHNlSW5kaWNhdG9yVGVtcGxhdGUgPSB0aGlzLmNvbGxhcHNlSW5kaWNhdG9yVGVtcGxhdGUudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3VycmVudGx5IG9ubHkgaXZ5IGZpeGVzIHRoZSBpc3N1ZSwgd2UgaGF2ZSB0byBzbGljZSBvbmx5IGlmIHRoZSBmaXJzdCBjaGlsZCBpcyBncm91cFxuICAgICAgICBpZiAodGhpcy5jaGlsZHJlbi5maXJzdCA9PT0gdGhpcykge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5yZXNldCh0aGlzLmNoaWxkcmVuLnRvQXJyYXkoKS5zbGljZSgxKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGNoaWxkLnBhcmVudCA9IHRoaXM7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRFeHBhbmRDb2xsYXBzZVN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjaGlsZHJlbiBjb2x1bW5zIGNvbGxlY3Rpb24uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5zID0gIHRoaXMuY29sdW1uR3JvdXAuYWxsQ2hpbGRyZW47XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGFsbENoaWxkcmVuKCk6IElneENvbHVtbkNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIGZsYXR0ZW4odGhpcy5jaGlsZHJlbi50b0FycmF5KCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBjb2x1bW4gaXMgYSBgQ29sdW1uR3JvdXBgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNDb2x1bW5Hcm91cCA9ICB0aGlzLmNvbHVtbkdyb3VwLmNvbHVtbkdyb3VwXG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGNvbHVtbkdyb3VwKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgY29sdW1uIGlzIGEgYENvbHVtbkxheW91dGAgZm9yIG11bHRpLXJvdyBsYXlvdXQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBjb2x1bW5Hcm91cCA9ICB0aGlzLmNvbHVtbi5jb2x1bW5Hcm91cDtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4Q29sdW1uQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGNvbHVtbkxheW91dCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGdyb3VwLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgY29sdW1uR3JvdXBXaWR0aCA9IHRoaXMuY29sdW1uR3JvdXAud2lkdGg7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneENvbHVtbkdyb3VwQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IHdpZHRoKCkge1xuICAgICAgICBsZXQgaXNDaGlsZHJlbldpZHRoSW5QZXJjZW50ID0gZmFsc2UsIHdpZHRoO1xuICAgICAgICB3aWR0aCA9IGAke3RoaXMuY2hpbGRyZW4ucmVkdWNlKChhY2MsIHZhbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbC5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwud2lkdGggPT09ICdzdHJpbmcnICYmIHZhbC53aWR0aC5pbmRleE9mKCclJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaXNDaGlsZHJlbldpZHRoSW5QZXJjZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjICsgcGFyc2VJbnQodmFsLndpZHRoLCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjICsgcGFyc2VJbnQodmFsLmNhbGNXaWR0aCwgMTApO1xuICAgICAgICB9LCAwKX1gO1xuICAgICAgICByZXR1cm4gaXNDaGlsZHJlbldpZHRoSW5QZXJjZW50ID8gd2lkdGggKyAnJScgOiB3aWR0aCArICdweCc7XG4gICAgfVxuXG4gICAgc2V0IHdpZHRoKHZhbCkgeyB9XG5cbiAgICAvLyBjb25zdHJ1Y3RvcihwdWJsaWMgZ3JpZEFQSTogR3JpZEJhc2VBUElTZXJ2aWNlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgSUdyaWREYXRhQmluZGFibGU+LCBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIC8vICAgICAvLyBELlAuIGNvbnN0cnVjdG9yIGR1cGxpY2F0aW9uIGR1ZSB0byBlczYgY29tcGlsYXRpb24sIG1pZ2h0IGJlIG9ic29sZXRlIGluIHRoZSBmdXR1cmVcbiAgICAvLyAgICAgc3VwZXIoZ3JpZEFQSSwgY2RyKTtcbiAgICAvLyB9XG59XG4iXX0=