carbon-components-angular
Version:
Next generation components
226 lines • 20.6 kB
JavaScript
import { Component, Input, EventEmitter, Output } from "@angular/core";
import * as i0 from "@angular/core";
import * as i1 from "carbon-components-angular/i18n";
import * as i2 from "@angular/common";
import * as i3 from "../expanded-row-hover.directive";
import * as i4 from "./table-row.component";
import * as i5 from "./table-expanded-row.component";
export class TableBody {
constructor(i18n) {
this.i18n = i18n;
/**
* Controls whether to enable multiple or single row selection.
*/
this.enableSingleSelect = false;
/**
* Controls whether to show the selection checkboxes column or not.
*/
this.showSelectionColumn = true;
/**
* Size of the table rows.
*/
this.size = "md";
this.skeleton = false;
/**
* Emits if a single row is selected.
*
* @param ({model: this.model, selectedRowIndex: index})
*/
this.selectRow = new EventEmitter();
/**
* Emits if a single row is deselected.
*
* @param ({model: this.model, deselectedRowIndex: index})
*/
this.deselectRow = new EventEmitter();
/**
* Emits if a row item excluding expandButtons, checkboxes, or radios is clicked.
*/
this.rowClick = new EventEmitter();
this._checkboxRowLabel = this.i18n.getOverridable("TABLE.CHECKBOX_ROW");
this._expandButtonAriaLabel = this.i18n.getOverridable("TABLE.EXPAND_BUTTON");
}
set expandButtonAriaLabel(value) {
this._expandButtonAriaLabel.override(value);
}
get expandButtonAriaLabel() {
return this._expandButtonAriaLabel.value;
}
set checkboxRowLabel(value) {
this._checkboxRowLabel.override(value);
}
get checkboxRowLabel() {
return this._checkboxRowLabel.value;
}
/**
* Triggered when a single row is clicked.
* Updates the header checkbox state.
* Emits the `selectRow` or `deselectRow` event.
*/
onRowCheckboxChange(index) {
if (this.model.isRowSelected(index)) {
this.deselectRow.emit({ model: this.model, deselectedRowIndex: index });
}
else {
this.selectRow.emit({ model: this.model, selectedRowIndex: index });
}
}
onRowClick(index) {
this.rowClick.emit(index);
}
getCheckboxRowLabel() {
return this._checkboxRowLabel.subject;
}
getExpandButtonAriaLabel() {
return this._expandButtonAriaLabel.subject;
}
firstExpandedDataInRow(row) {
const found = row.find(d => d.expandedData);
if (found) {
return found.expandedData;
}
return found;
}
shouldExpandAsTable(row) {
return row.some(d => d.expandAsTable);
}
}
TableBody.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableBody, deps: [{ token: i1.I18n }], target: i0.ɵɵFactoryTarget.Component });
TableBody.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableBody, selector: "[cdsTableBody], [ibmTableBody]", inputs: { model: "model", enableSingleSelect: "enableSingleSelect", expandButtonAriaLabel: "expandButtonAriaLabel", checkboxRowLabel: "checkboxRowLabel", showSelectionColumn: "showSelectionColumn", size: "size", selectionLabelColumn: "selectionLabelColumn", skeleton: "skeleton" }, outputs: { selectRow: "selectRow", deselectRow: "deselectRow", rowClick: "rowClick" }, ngImport: i0, template: `
<ng-container *ngIf="model">
<ng-container *ngFor="let row of model.data; let i = index">
<tr
cdsTableRow
[model]="model"
[row]="row"
[size]="size"
[selected]="model.isRowSelected(i)"
[expandable]="model.isRowExpandable(i)"
[expanded]="model.isRowExpanded(i)"
[checkboxLabel]="getCheckboxRowLabel()"
[expandButtonAriaLabel]="getExpandButtonAriaLabel()"
[showSelectionColumn]="showSelectionColumn"
[enableSingleSelect]="enableSingleSelect"
[skeleton]="skeleton"
(selectRow)="onRowCheckboxChange(i)"
(deselectRow)="onRowCheckboxChange(i)"
(expandRow)="model.expandRow(i, !model.isRowExpanded(i))"
(rowClick)="onRowClick(i)"
*ngIf="!model.isRowFiltered(i)"
[class]="(model.rowsClass[i] ? model.rowsClass[i] : null)"
[ngClass]="{
'tbody_row--success': !model.isRowSelected(i) && model.getRowContext(i) === 'success',
'tbody_row--warning': !model.isRowSelected(i) && model.getRowContext(i) === 'warning',
'tbody_row--info': !model.isRowSelected(i) && model.getRowContext(i) === 'info',
'tbody_row--error': !model.isRowSelected(i) && model.getRowContext(i) === 'error'
}">
</tr>
<tr
*ngIf="model.isRowExpandable(i) && !shouldExpandAsTable(row) && !model.isRowFiltered(i)"
cdsTableExpandedRow
cdsExpandedRowHover
[row]="row"
[expanded]="model.isRowExpanded(i)"
[skeleton]="skeleton">
</tr>
<ng-container
*ngIf="model.isRowExpandable(i) && shouldExpandAsTable(row) && model.isRowExpanded(i) && !model.isRowFiltered(i)">
<tr
*ngFor="let expandedDataRow of firstExpandedDataInRow(row)"
cdsTableRow
[model]="model"
[showSelectionColumnCheckbox]="false"
[showSelectionColumn]="showSelectionColumn"
[row]="expandedDataRow"
[size]="size"
[skeleton]="skeleton">
</tr>
</ng-container>
</ng-container>
</ng-container>
<ng-content></ng-content>
`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ExpandedRowHover, selector: "[cdsExpandedRowHover], [ibmExpandedRowHover]" }, { kind: "component", type: i4.TableRowComponent, selector: "[cdsTableRow], [ibmTableRow]", inputs: ["model", "row", "expanded", "expandable", "selected", "size", "enableSingleSelect", "expandButtonAriaLabel", "checkboxLabel", "showSelectionColumn", "showSelectionColumnCheckbox", "selectionLabelColumn", "skeleton"], outputs: ["selectRow", "deselectRow", "expandRow", "rowClick"] }, { kind: "component", type: i5.TableExpandedRow, selector: "[cdsTableExpandedRow], [ibmTableExpandedRow]", inputs: ["row", "skeleton", "expanded"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableBody, decorators: [{
type: Component,
args: [{
// tslint:disable-next-line: component-selector
selector: "[cdsTableBody], [ibmTableBody]",
template: `
<ng-container *ngIf="model">
<ng-container *ngFor="let row of model.data; let i = index">
<tr
cdsTableRow
[model]="model"
[row]="row"
[size]="size"
[selected]="model.isRowSelected(i)"
[expandable]="model.isRowExpandable(i)"
[expanded]="model.isRowExpanded(i)"
[checkboxLabel]="getCheckboxRowLabel()"
[expandButtonAriaLabel]="getExpandButtonAriaLabel()"
[showSelectionColumn]="showSelectionColumn"
[enableSingleSelect]="enableSingleSelect"
[skeleton]="skeleton"
(selectRow)="onRowCheckboxChange(i)"
(deselectRow)="onRowCheckboxChange(i)"
(expandRow)="model.expandRow(i, !model.isRowExpanded(i))"
(rowClick)="onRowClick(i)"
*ngIf="!model.isRowFiltered(i)"
[class]="(model.rowsClass[i] ? model.rowsClass[i] : null)"
[ngClass]="{
'tbody_row--success': !model.isRowSelected(i) && model.getRowContext(i) === 'success',
'tbody_row--warning': !model.isRowSelected(i) && model.getRowContext(i) === 'warning',
'tbody_row--info': !model.isRowSelected(i) && model.getRowContext(i) === 'info',
'tbody_row--error': !model.isRowSelected(i) && model.getRowContext(i) === 'error'
}">
</tr>
<tr
*ngIf="model.isRowExpandable(i) && !shouldExpandAsTable(row) && !model.isRowFiltered(i)"
cdsTableExpandedRow
cdsExpandedRowHover
[row]="row"
[expanded]="model.isRowExpanded(i)"
[skeleton]="skeleton">
</tr>
<ng-container
*ngIf="model.isRowExpandable(i) && shouldExpandAsTable(row) && model.isRowExpanded(i) && !model.isRowFiltered(i)">
<tr
*ngFor="let expandedDataRow of firstExpandedDataInRow(row)"
cdsTableRow
[model]="model"
[showSelectionColumnCheckbox]="false"
[showSelectionColumn]="showSelectionColumn"
[row]="expandedDataRow"
[size]="size"
[skeleton]="skeleton">
</tr>
</ng-container>
</ng-container>
</ng-container>
<ng-content></ng-content>
`
}]
}], ctorParameters: function () { return [{ type: i1.I18n }]; }, propDecorators: { model: [{
type: Input
}], enableSingleSelect: [{
type: Input
}], expandButtonAriaLabel: [{
type: Input
}], checkboxRowLabel: [{
type: Input
}], showSelectionColumn: [{
type: Input
}], size: [{
type: Input
}], selectionLabelColumn: [{
type: Input
}], skeleton: [{
type: Input
}], selectRow: [{
type: Output
}], deselectRow: [{
type: Output
}], rowClick: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdGFibGUvYm9keS90YWJsZS1ib2R5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULEtBQUssRUFDTCxZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBZ0V2QixNQUFNLE9BQU8sU0FBUztJQXdFckIsWUFBc0IsSUFBVTtRQUFWLFNBQUksR0FBSixJQUFJLENBQU07UUFyRWhDOztXQUVHO1FBQ00sdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBb0JwQzs7V0FFRztRQUNNLHdCQUFtQixHQUFHLElBQUksQ0FBQztRQUVwQzs7V0FFRztRQUNNLFNBQUksR0FBaUIsSUFBSSxDQUFDO1FBYzFCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUI7Ozs7V0FJRztRQUNPLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRWpEOzs7O1dBSUc7UUFDTyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFbkQ7O1dBRUc7UUFDTyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV0QyxzQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ25FLDJCQUFzQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFL0MsQ0FBQztJQWhFckMsSUFDSSxxQkFBcUIsQ0FBQyxLQUFrQztRQUMzRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN4QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQ0ksZ0JBQWdCLENBQUMsS0FBa0M7UUFDdEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFrREQ7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLEtBQWE7UUFDaEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDeEU7YUFBTTtZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztTQUNwRTtJQUNGLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYTtRQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsbUJBQW1CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztJQUN2QyxDQUFDO0lBRUQsd0JBQXdCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQztJQUM1QyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsR0FBRztRQUN6QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVDLElBQUksS0FBSyxFQUFFO1lBQ1YsT0FBTyxLQUFLLENBQUMsWUFBWSxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsR0FBRztRQUN0QixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7c0dBN0dXLFNBQVM7MEZBQVQsU0FBUyx1YkF2RFg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBcURUOzJGQUVXLFNBQVM7a0JBMURyQixTQUFTO21CQUFDO29CQUNWLCtDQUErQztvQkFDL0MsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXFEVDtpQkFDRDsyRkFFUyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUdGLHFCQUFxQjtzQkFEeEIsS0FBSztnQkFVRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBWUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFZRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFPSSxTQUFTO3NCQUFsQixNQUFNO2dCQU9HLFdBQVc7c0JBQXBCLE1BQU07Z0JBS0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0SW5wdXQsXG5cdEV2ZW50RW1pdHRlcixcblx0T3V0cHV0XG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSBcIi4uL3RhYmxlLW1vZGVsLmNsYXNzXCI7XG5pbXBvcnQgeyBJMThuLCBPdmVycmlkYWJsZSB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2kxOG5cIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgVGFibGVSb3dTaXplIH0gZnJvbSBcIi4uL3RhYmxlLnR5cGVzXCI7XG5cbkBDb21wb25lbnQoe1xuXHQvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuXHRzZWxlY3RvcjogXCJbY2RzVGFibGVCb2R5XSwgW2libVRhYmxlQm9keV1cIixcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZWxcIj5cblx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBtb2RlbC5kYXRhOyBsZXQgaSA9IGluZGV4XCI+XG5cdFx0XHRcdDx0clxuXHRcdFx0XHRcdGNkc1RhYmxlUm93XG5cdFx0XHRcdFx0W21vZGVsXT1cIm1vZGVsXCJcblx0XHRcdFx0XHRbcm93XT1cInJvd1wiXG5cdFx0XHRcdFx0W3NpemVdPVwic2l6ZVwiXG5cdFx0XHRcdFx0W3NlbGVjdGVkXT1cIm1vZGVsLmlzUm93U2VsZWN0ZWQoaSlcIlxuXHRcdFx0XHRcdFtleHBhbmRhYmxlXT1cIm1vZGVsLmlzUm93RXhwYW5kYWJsZShpKVwiXG5cdFx0XHRcdFx0W2V4cGFuZGVkXT1cIm1vZGVsLmlzUm93RXhwYW5kZWQoaSlcIlxuXHRcdFx0XHRcdFtjaGVja2JveExhYmVsXT1cImdldENoZWNrYm94Um93TGFiZWwoKVwiXG5cdFx0XHRcdFx0W2V4cGFuZEJ1dHRvbkFyaWFMYWJlbF09XCJnZXRFeHBhbmRCdXR0b25BcmlhTGFiZWwoKVwiXG5cdFx0XHRcdFx0W3Nob3dTZWxlY3Rpb25Db2x1bW5dPVwic2hvd1NlbGVjdGlvbkNvbHVtblwiXG5cdFx0XHRcdFx0W2VuYWJsZVNpbmdsZVNlbGVjdF09XCJlbmFibGVTaW5nbGVTZWxlY3RcIlxuXHRcdFx0XHRcdFtza2VsZXRvbl09XCJza2VsZXRvblwiXG5cdFx0XHRcdFx0KHNlbGVjdFJvdyk9XCJvblJvd0NoZWNrYm94Q2hhbmdlKGkpXCJcblx0XHRcdFx0XHQoZGVzZWxlY3RSb3cpPVwib25Sb3dDaGVja2JveENoYW5nZShpKVwiXG5cdFx0XHRcdFx0KGV4cGFuZFJvdyk9XCJtb2RlbC5leHBhbmRSb3coaSwgIW1vZGVsLmlzUm93RXhwYW5kZWQoaSkpXCJcblx0XHRcdFx0XHQocm93Q2xpY2spPVwib25Sb3dDbGljayhpKVwiXG5cdFx0XHRcdFx0Km5nSWY9XCIhbW9kZWwuaXNSb3dGaWx0ZXJlZChpKVwiXG5cdFx0XHRcdFx0W2NsYXNzXT1cIihtb2RlbC5yb3dzQ2xhc3NbaV0gPyBtb2RlbC5yb3dzQ2xhc3NbaV0gOiBudWxsKVwiXG5cdFx0XHRcdFx0W25nQ2xhc3NdPVwie1xuXHRcdFx0XHRcdFx0J3Rib2R5X3Jvdy0tc3VjY2Vzcyc6ICFtb2RlbC5pc1Jvd1NlbGVjdGVkKGkpICYmIG1vZGVsLmdldFJvd0NvbnRleHQoaSkgPT09ICdzdWNjZXNzJyxcblx0XHRcdFx0XHRcdCd0Ym9keV9yb3ctLXdhcm5pbmcnOiAhbW9kZWwuaXNSb3dTZWxlY3RlZChpKSAmJiBtb2RlbC5nZXRSb3dDb250ZXh0KGkpID09PSAnd2FybmluZycsXG5cdFx0XHRcdFx0XHQndGJvZHlfcm93LS1pbmZvJzogIW1vZGVsLmlzUm93U2VsZWN0ZWQoaSkgJiYgbW9kZWwuZ2V0Um93Q29udGV4dChpKSA9PT0gJ2luZm8nLFxuXHRcdFx0XHRcdFx0J3Rib2R5X3Jvdy0tZXJyb3InOiAhbW9kZWwuaXNSb3dTZWxlY3RlZChpKSAmJiBtb2RlbC5nZXRSb3dDb250ZXh0KGkpID09PSAnZXJyb3InXG5cdFx0XHRcdFx0fVwiPlxuXHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHQ8dHJcblx0XHRcdFx0XHQqbmdJZj1cIm1vZGVsLmlzUm93RXhwYW5kYWJsZShpKSAmJiAhc2hvdWxkRXhwYW5kQXNUYWJsZShyb3cpICYmICFtb2RlbC5pc1Jvd0ZpbHRlcmVkKGkpXCJcblx0XHRcdFx0XHRjZHNUYWJsZUV4cGFuZGVkUm93XG5cdFx0XHRcdFx0Y2RzRXhwYW5kZWRSb3dIb3ZlclxuXHRcdFx0XHRcdFtyb3ddPVwicm93XCJcblx0XHRcdFx0XHRbZXhwYW5kZWRdPVwibW9kZWwuaXNSb3dFeHBhbmRlZChpKVwiXG5cdFx0XHRcdFx0W3NrZWxldG9uXT1cInNrZWxldG9uXCI+XG5cdFx0XHRcdDwvdHI+XG5cdFx0XHRcdDxuZy1jb250YWluZXJcblx0XHRcdFx0XHQqbmdJZj1cIm1vZGVsLmlzUm93RXhwYW5kYWJsZShpKSAmJiBzaG91bGRFeHBhbmRBc1RhYmxlKHJvdykgJiYgbW9kZWwuaXNSb3dFeHBhbmRlZChpKSAmJiAhbW9kZWwuaXNSb3dGaWx0ZXJlZChpKVwiPlxuXHRcdFx0XHRcdDx0clxuXHRcdFx0XHRcdFx0Km5nRm9yPVwibGV0IGV4cGFuZGVkRGF0YVJvdyBvZiBmaXJzdEV4cGFuZGVkRGF0YUluUm93KHJvdylcIlxuXHRcdFx0XHRcdFx0Y2RzVGFibGVSb3dcblx0XHRcdFx0XHRcdFttb2RlbF09XCJtb2RlbFwiXG5cdFx0XHRcdFx0XHRbc2hvd1NlbGVjdGlvbkNvbHVtbkNoZWNrYm94XT1cImZhbHNlXCJcblx0XHRcdFx0XHRcdFtzaG93U2VsZWN0aW9uQ29sdW1uXT1cInNob3dTZWxlY3Rpb25Db2x1bW5cIlxuXHRcdFx0XHRcdFx0W3Jvd109XCJleHBhbmRlZERhdGFSb3dcIlxuXHRcdFx0XHRcdFx0W3NpemVdPVwic2l6ZVwiXG5cdFx0XHRcdFx0XHRbc2tlbGV0b25dPVwic2tlbGV0b25cIj5cblx0XHRcdFx0XHQ8L3RyPlxuXHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdDwvbmctY29udGFpbmVyPlxuXHRcdDwvbmctY29udGFpbmVyPlxuXHRcdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblx0YFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUJvZHkge1xuXHRASW5wdXQoKSBtb2RlbDogVGFibGVNb2RlbDtcblxuXHQvKipcblx0ICogQ29udHJvbHMgd2hldGhlciB0byBlbmFibGUgbXVsdGlwbGUgb3Igc2luZ2xlIHJvdyBzZWxlY3Rpb24uXG5cdCAqL1xuXHRASW5wdXQoKSBlbmFibGVTaW5nbGVTZWxlY3QgPSBmYWxzZTtcblxuXHRASW5wdXQoKVxuXHRzZXQgZXhwYW5kQnV0dG9uQXJpYUxhYmVsKHZhbHVlOiBzdHJpbmcgfCBPYnNlcnZhYmxlPHN0cmluZz4pIHtcblx0XHR0aGlzLl9leHBhbmRCdXR0b25BcmlhTGFiZWwub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGV4cGFuZEJ1dHRvbkFyaWFMYWJlbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZXhwYW5kQnV0dG9uQXJpYUxhYmVsLnZhbHVlO1xuXHR9XG5cblx0QElucHV0KClcblx0c2V0IGNoZWNrYm94Um93TGFiZWwodmFsdWU6IHN0cmluZyB8IE9ic2VydmFibGU8c3RyaW5nPikge1xuXHRcdHRoaXMuX2NoZWNrYm94Um93TGFiZWwub3ZlcnJpZGUodmFsdWUpO1xuXHR9XG5cblx0Z2V0IGNoZWNrYm94Um93TGFiZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoZWNrYm94Um93TGFiZWwudmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogQ29udHJvbHMgd2hldGhlciB0byBzaG93IHRoZSBzZWxlY3Rpb24gY2hlY2tib3hlcyBjb2x1bW4gb3Igbm90LlxuXHQgKi9cblx0QElucHV0KCkgc2hvd1NlbGVjdGlvbkNvbHVtbiA9IHRydWU7XG5cblx0LyoqXG5cdCAqIFNpemUgb2YgdGhlIHRhYmxlIHJvd3MuXG5cdCAqL1xuXHRASW5wdXQoKSBzaXplOiBUYWJsZVJvd1NpemUgPSBcIm1kXCI7XG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gcG9wdWxhdGUgdGhlIHJvdyBzZWxlY3Rpb24gY2hlY2tib3ggbGFiZWwgd2l0aCBhIHVzZWZ1bCB2YWx1ZSBpZiBzZXQuXG5cdCAqXG5cdCAqIEV4YW1wbGU6XG5cdCAqIGBgYFxuXHQgKiA8Y2RzLXRhYmxlIFtzZWxlY3Rpb25MYWJlbENvbHVtbl09XCIwXCI+PC9jZHMtdGFibGU+XG5cdCAqIDwhLS0gcmVzdWx0cyBpbiBhcmlhLWxhYmVsPVwiU2VsZWN0IGZpcnN0IGNvbHVtbiB2YWx1ZVwiXG5cdCAqICh3aGVyZSBcImZpcnN0IGNvbHVtbiB2YWx1ZVwiIGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgY29sdW1uIGluIHRoZSByb3cgLS0+XG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KCkgc2VsZWN0aW9uTGFiZWxDb2x1bW46IG51bWJlcjtcblxuXHRASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBFbWl0cyBpZiBhIHNpbmdsZSByb3cgaXMgc2VsZWN0ZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSAoe21vZGVsOiB0aGlzLm1vZGVsLCBzZWxlY3RlZFJvd0luZGV4OiBpbmRleH0pXG5cdCAqL1xuXHRAT3V0cHV0KCkgc2VsZWN0Um93ID0gbmV3IEV2ZW50RW1pdHRlcjxPYmplY3Q+KCk7XG5cblx0LyoqXG5cdCAqIEVtaXRzIGlmIGEgc2luZ2xlIHJvdyBpcyBkZXNlbGVjdGVkLlxuXHQgKlxuXHQgKiBAcGFyYW0gKHttb2RlbDogdGhpcy5tb2RlbCwgZGVzZWxlY3RlZFJvd0luZGV4OiBpbmRleH0pXG5cdCAqL1xuXHRAT3V0cHV0KCkgZGVzZWxlY3RSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPE9iamVjdD4oKTtcblxuXHQvKipcblx0ICogRW1pdHMgaWYgYSByb3cgaXRlbSBleGNsdWRpbmcgZXhwYW5kQnV0dG9ucywgY2hlY2tib3hlcywgb3IgcmFkaW9zIGlzIGNsaWNrZWQuXG5cdCAqL1xuXHRAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuXHRwcm90ZWN0ZWQgX2NoZWNrYm94Um93TGFiZWwgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJUQUJMRS5DSEVDS0JPWF9ST1dcIik7XG5cdHByb3RlY3RlZCBfZXhwYW5kQnV0dG9uQXJpYUxhYmVsID0gdGhpcy5pMThuLmdldE92ZXJyaWRhYmxlKFwiVEFCTEUuRVhQQU5EX0JVVFRPTlwiKTtcblxuXHRjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaTE4bjogSTE4bikgeyB9XG5cblx0LyoqXG5cdCAqIFRyaWdnZXJlZCB3aGVuIGEgc2luZ2xlIHJvdyBpcyBjbGlja2VkLlxuXHQgKiBVcGRhdGVzIHRoZSBoZWFkZXIgY2hlY2tib3ggc3RhdGUuXG5cdCAqIEVtaXRzIHRoZSBgc2VsZWN0Um93YCBvciBgZGVzZWxlY3RSb3dgIGV2ZW50LlxuXHQgKi9cblx0b25Sb3dDaGVja2JveENoYW5nZShpbmRleDogbnVtYmVyKSB7XG5cdFx0aWYgKHRoaXMubW9kZWwuaXNSb3dTZWxlY3RlZChpbmRleCkpIHtcblx0XHRcdHRoaXMuZGVzZWxlY3RSb3cuZW1pdCh7IG1vZGVsOiB0aGlzLm1vZGVsLCBkZXNlbGVjdGVkUm93SW5kZXg6IGluZGV4IH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNlbGVjdFJvdy5lbWl0KHsgbW9kZWw6IHRoaXMubW9kZWwsIHNlbGVjdGVkUm93SW5kZXg6IGluZGV4IH0pO1xuXHRcdH1cblx0fVxuXG5cdG9uUm93Q2xpY2soaW5kZXg6IG51bWJlcikge1xuXHRcdHRoaXMucm93Q2xpY2suZW1pdChpbmRleCk7XG5cdH1cblxuXHRnZXRDaGVja2JveFJvd0xhYmVsKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG5cdFx0cmV0dXJuIHRoaXMuX2NoZWNrYm94Um93TGFiZWwuc3ViamVjdDtcblx0fVxuXG5cdGdldEV4cGFuZEJ1dHRvbkFyaWFMYWJlbCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuXHRcdHJldHVybiB0aGlzLl9leHBhbmRCdXR0b25BcmlhTGFiZWwuc3ViamVjdDtcblx0fVxuXG5cdGZpcnN0RXhwYW5kZWREYXRhSW5Sb3cocm93KSB7XG5cdFx0Y29uc3QgZm91bmQgPSByb3cuZmluZChkID0+IGQuZXhwYW5kZWREYXRhKTtcblx0XHRpZiAoZm91bmQpIHtcblx0XHRcdHJldHVybiBmb3VuZC5leHBhbmRlZERhdGE7XG5cdFx0fVxuXHRcdHJldHVybiBmb3VuZDtcblx0fVxuXG5cdHNob3VsZEV4cGFuZEFzVGFibGUocm93KSB7XG5cdFx0cmV0dXJuIHJvdy5zb21lKGQgPT4gZC5leHBhbmRBc1RhYmxlKTtcblx0fVxufVxuIl19