carbon-components-angular
Version:
Next generation components
173 lines • 16.2 kB
JavaScript
import { Component, EventEmitter, Input, 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 "carbon-components-angular/button";
/**
* The table toolbar is reserved for global table actions such as table settings, complex filter, export, or editing table data.
*
* ## Basic usage
*
* ```html
* <cds-table-toolbar [model]="model">
* <cds-table-toolbar-actions>
* <button cdsButton="primary">
* Delete
* <svg cdsIcon="trash-can" size="16" class="cds--btn__icon"></svg>
* </button>
* <button cdsButton="primary">
* Save
* <svg cdsIcon="save" size="16" class="cds--btn__icon"></svg>
* </button>
* <button cdsButton="primary">
* Download
* <svg cdsIcon="download" size="16" class="cds--btn__icon"></svg>
* </button>
* </cds-table-toolbar-actions>
* <cds-table-toolbar-content>
* <cds-table-toolbar-search [expandable]="true"></cds-table-toolbar-search>
* <button cdsButton="toolbar-action">
* <svg cdsIcon="settings" size="16" class="cds--toolbar-action__icon"></svg>
* </button>
* <button cdsButton="primary" size="sm">
* Primary Button
* <svg cdsIcon="add" size="20" class="cds--btn__icon"></svg>
* </button>
* </cds-table-toolbar-content>
* </cds-table-toolbar>
* ```
*
*/
export class TableToolbar {
constructor(i18n) {
this.i18n = i18n;
this.size = "md";
this.cancel = new EventEmitter();
this.actionBarLabel = this.i18n.getOverridable("TABLE_TOOLBAR.ACTION_BAR");
this._cancelText = this.i18n.getOverridable("TABLE_TOOLBAR.CANCEL");
this._batchTextLegacy = this.i18n.getOverridable("TABLE_TOOLBAR.BATCH_TEXT");
this._batchTextSingle = this.i18n.getOverridable("TABLE_TOOLBAR.BATCH_TEXT_SINGLE");
this._batchTextMultiple = this.i18n.getOverridable("TABLE_TOOLBAR.BATCH_TEXT_MULTIPLE");
}
set batchText(value) {
if (typeof value === "object") {
this._batchTextSingle.override(value.SINGLE);
this._batchTextMultiple.override(value.MULTIPLE);
}
else {
// For compatibility with old code
this._batchTextLegacy.override(value);
}
}
set ariaLabel(value) {
this.actionBarLabel.override(value.ACTION_BAR);
}
set cancelText(value) {
this._cancelText.override(value.CANCEL);
}
get cancelText() {
return { CANCEL: this._cancelText.value };
}
get count() {
return this.model.totalDataLength > 0 ? this.model.rowsSelected.reduce((previous, current) => previous + (current ? 1 : 0), 0) : 0;
}
get selected() {
return this.model.totalDataLength > 0 ? this.model.rowsSelected.some(item => item) : false;
}
onCancel() {
this.model.selectAll(false);
this.cancel.emit();
}
}
TableToolbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableToolbar, deps: [{ token: i1.I18n }], target: i0.ɵɵFactoryTarget.Component });
TableToolbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableToolbar, selector: "cds-table-toolbar, ibm-table-toolbar", inputs: { model: "model", batchText: "batchText", ariaLabel: "ariaLabel", cancelText: "cancelText", size: "size" }, outputs: { cancel: "cancel" }, ngImport: i0, template: `
<section
class="cds--table-toolbar"
[ngClass]="{'cds--table-toolbar--sm' : size === 'sm'}"
[attr.aria-label]="actionBarLabel.subject | async">
<div
*ngIf="model"
class="cds--batch-actions"
[ngClass]="{
'cds--batch-actions--active': selected
}">
<div class="cds--batch-summary">
<p class="cds--batch-summary__para" *ngIf="count as n">
<ng-container *ngIf="_batchTextLegacy.subject | async as legacyText; else batchTextBlock">
<span>{{n}}</span> {{legacyText}}
</ng-container>
<ng-template #batchTextBlock>
<span *ngIf="n === 1">{{_batchTextSingle.subject | async}}</span>
<span *ngIf="n !== 1">{{_batchTextMultiple.subject | i18nReplace: {count: n} | async}}</span>
</ng-template>
</p>
</div>
<div class="cds--action-list">
<ng-content select="cds-table-toolbar-actions,ibm-table-toolbar-actions"></ng-content>
<button
cdsButton="primary"
class="cds--batch-summary__cancel"
[tabindex]="selected ? 0 : -1"
(click)="onCancel()">
{{_cancelText.subject | async}}
</button>
</div>
</div>
<ng-content></ng-content>
</section>
`, isInline: true, dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.ReplacePipe, name: "i18nReplace" }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableToolbar, decorators: [{
type: Component,
args: [{
selector: "cds-table-toolbar, ibm-table-toolbar",
template: `
<section
class="cds--table-toolbar"
[ngClass]="{'cds--table-toolbar--sm' : size === 'sm'}"
[attr.aria-label]="actionBarLabel.subject | async">
<div
*ngIf="model"
class="cds--batch-actions"
[ngClass]="{
'cds--batch-actions--active': selected
}">
<div class="cds--batch-summary">
<p class="cds--batch-summary__para" *ngIf="count as n">
<ng-container *ngIf="_batchTextLegacy.subject | async as legacyText; else batchTextBlock">
<span>{{n}}</span> {{legacyText}}
</ng-container>
<ng-template #batchTextBlock>
<span *ngIf="n === 1">{{_batchTextSingle.subject | async}}</span>
<span *ngIf="n !== 1">{{_batchTextMultiple.subject | i18nReplace: {count: n} | async}}</span>
</ng-template>
</p>
</div>
<div class="cds--action-list">
<ng-content select="cds-table-toolbar-actions,ibm-table-toolbar-actions"></ng-content>
<button
cdsButton="primary"
class="cds--batch-summary__cancel"
[tabindex]="selected ? 0 : -1"
(click)="onCancel()">
{{_cancelText.subject | async}}
</button>
</div>
</div>
<ng-content></ng-content>
</section>
`
}]
}], ctorParameters: function () { return [{ type: i1.I18n }]; }, propDecorators: { model: [{
type: Input
}], batchText: [{
type: Input
}], ariaLabel: [{
type: Input
}], cancelText: [{
type: Input
}], size: [{
type: Input
}], cancel: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdGFibGUvdG9vbGJhci90YWJsZS10b29sYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sZUFBZSxDQUFDOzs7OztBQUl2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQXdDSCxNQUFNLE9BQU8sWUFBWTtJQWdDeEIsWUFBc0IsSUFBVTtRQUFWLFNBQUksR0FBSixJQUFJLENBQU07UUFkdkIsU0FBSSxHQUFpQixJQUFJLENBQUM7UUFNekIsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFdEMsbUJBQWMsR0FBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUNuRixnQkFBVyxHQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzVFLHFCQUFnQixHQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3JGLHFCQUFnQixHQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQzVGLHVCQUFrQixHQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBRTdELENBQUM7SUE3QnBDLElBQWEsU0FBUyxDQUFFLEtBQW9EO1FBQzNFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzlCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2pEO2FBQU07WUFDTixrQ0FBa0M7WUFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QztJQUNGLENBQUM7SUFDRCxJQUFhLFNBQVMsQ0FBRSxLQUE2QjtRQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELElBQWEsVUFBVSxDQUFDLEtBQXlCO1FBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBR0QsSUFBSSxVQUFVO1FBQ2IsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQWUsRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFZRCxJQUFJLEtBQUs7UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEksQ0FBQztJQUNELElBQUksUUFBUTtRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzVGLENBQUM7SUFFRCxRQUFRO1FBQ1AsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDOzt5R0E1Q1csWUFBWTs2RkFBWixZQUFZLCtOQXJDZDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFtQ1Q7MkZBRVcsWUFBWTtrQkF2Q3hCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHNDQUFzQztvQkFDaEQsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW1DVDtpQkFDRDsyRkFFUyxLQUFLO3NCQUFiLEtBQUs7Z0JBRU8sU0FBUztzQkFBckIsS0FBSztnQkFTTyxTQUFTO3NCQUFyQixLQUFLO2dCQUdPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQU1JLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tIFwiLi4vdGFibGUtbW9kZWwuY2xhc3NcIjtcbmltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0RXZlbnRFbWl0dGVyLFxuXHRJbnB1dCxcblx0T3V0cHV0XG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJMThuLCBPdmVycmlkYWJsZSB9IGZyb20gXCJjYXJib24tY29tcG9uZW50cy1hbmd1bGFyL2kxOG5cIjtcbmltcG9ydCB7IFRhYmxlUm93U2l6ZSB9IGZyb20gXCIuLi90YWJsZS50eXBlc1wiO1xuXG4vKipcbiAqIFRoZSB0YWJsZSB0b29sYmFyIGlzIHJlc2VydmVkIGZvciBnbG9iYWwgdGFibGUgYWN0aW9ucyBzdWNoIGFzIHRhYmxlIHNldHRpbmdzLCBjb21wbGV4IGZpbHRlciwgZXhwb3J0LCBvciBlZGl0aW5nIHRhYmxlIGRhdGEuXG4gKlxuICogIyMgQmFzaWMgdXNhZ2VcbiAqXG4gKiBgYGBodG1sXG4gKiA8Y2RzLXRhYmxlLXRvb2xiYXIgW21vZGVsXT1cIm1vZGVsXCI+XG4gKlx0XHQ8Y2RzLXRhYmxlLXRvb2xiYXItYWN0aW9ucz5cbiAqXHRcdFx0PGJ1dHRvbiBjZHNCdXR0b249XCJwcmltYXJ5XCI+XG4gKlx0XHRcdFx0RGVsZXRlXG4gKlx0XHRcdFx0PHN2ZyBjZHNJY29uPVwidHJhc2gtY2FuXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICpcdFx0XHQ8L2J1dHRvbj5cbiAqXHRcdFx0PGJ1dHRvbiBjZHNCdXR0b249XCJwcmltYXJ5XCI+XG4gKlx0XHRcdFx0U2F2ZVxuICpcdFx0XHRcdDxzdmcgY2RzSWNvbj1cInNhdmVcIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG4gKlx0XHRcdDwvYnV0dG9uPlxuICpcdFx0XHQ8YnV0dG9uIGNkc0J1dHRvbj1cInByaW1hcnlcIj5cbiAqXHRcdFx0XHREb3dubG9hZFxuICpcdFx0XHRcdDxzdmcgY2RzSWNvbj1cImRvd25sb2FkXCIgc2l6ZT1cIjE2XCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICpcdFx0XHQ8L2J1dHRvbj5cbiAqXHRcdDwvY2RzLXRhYmxlLXRvb2xiYXItYWN0aW9ucz5cbiAqXHRcdFx0PGNkcy10YWJsZS10b29sYmFyLWNvbnRlbnQ+XG4gKlx0XHRcdDxjZHMtdGFibGUtdG9vbGJhci1zZWFyY2ggW2V4cGFuZGFibGVdPVwidHJ1ZVwiPjwvY2RzLXRhYmxlLXRvb2xiYXItc2VhcmNoPlxuICpcdFx0XHQ8YnV0dG9uIGNkc0J1dHRvbj1cInRvb2xiYXItYWN0aW9uXCI+XG4gKlx0XHRcdFx0PHN2ZyBjZHNJY29uPVwic2V0dGluZ3NcIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tdG9vbGJhci1hY3Rpb25fX2ljb25cIj48L3N2Zz5cbiAqXHRcdFx0PC9idXR0b24+XG4gKlx0XHRcdDxidXR0b24gY2RzQnV0dG9uPVwicHJpbWFyeVwiIHNpemU9XCJzbVwiPlxuICpcdFx0XHRcdFByaW1hcnkgQnV0dG9uXG4gKlx0XHRcdFx0PHN2ZyBjZHNJY29uPVwiYWRkXCIgc2l6ZT1cIjIwXCIgY2xhc3M9XCJjZHMtLWJ0bl9faWNvblwiPjwvc3ZnPlxuICpcdFx0XHQ8L2J1dHRvbj5cbiAqXHRcdDwvY2RzLXRhYmxlLXRvb2xiYXItY29udGVudD5cbiAqXHQ8L2Nkcy10YWJsZS10b29sYmFyPlxuICogYGBgXG4gKlxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6IFwiY2RzLXRhYmxlLXRvb2xiYXIsIGlibS10YWJsZS10b29sYmFyXCIsXG5cdHRlbXBsYXRlOiBgXG5cdDxzZWN0aW9uXG5cdFx0Y2xhc3M9XCJjZHMtLXRhYmxlLXRvb2xiYXJcIlxuXHRcdFtuZ0NsYXNzXT1cInsnY2RzLS10YWJsZS10b29sYmFyLS1zbScgOiBzaXplID09PSAnc20nfVwiXG5cdFx0W2F0dHIuYXJpYS1sYWJlbF09XCJhY3Rpb25CYXJMYWJlbC5zdWJqZWN0IHwgYXN5bmNcIj5cblx0XHQ8ZGl2XG5cdFx0XHQqbmdJZj1cIm1vZGVsXCJcblx0XHRcdGNsYXNzPVwiY2RzLS1iYXRjaC1hY3Rpb25zXCJcblx0XHRcdFtuZ0NsYXNzXT1cIntcblx0XHRcdFx0J2Nkcy0tYmF0Y2gtYWN0aW9ucy0tYWN0aXZlJzogc2VsZWN0ZWRcblx0XHRcdH1cIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJjZHMtLWJhdGNoLXN1bW1hcnlcIj5cblx0XHRcdFx0PHAgY2xhc3M9XCJjZHMtLWJhdGNoLXN1bW1hcnlfX3BhcmFcIiAqbmdJZj1cImNvdW50IGFzIG5cIj5cblx0XHRcdFx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiX2JhdGNoVGV4dExlZ2FjeS5zdWJqZWN0IHwgYXN5bmMgYXMgbGVnYWN5VGV4dDsgZWxzZSBiYXRjaFRleHRCbG9ja1wiPlxuXHRcdFx0XHRcdFx0PHNwYW4+e3tufX08L3NwYW4+IHt7bGVnYWN5VGV4dH19XG5cdFx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdFx0PG5nLXRlbXBsYXRlICNiYXRjaFRleHRCbG9jaz5cblx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwibiA9PT0gMVwiPnt7X2JhdGNoVGV4dFNpbmdsZS5zdWJqZWN0IHwgYXN5bmN9fTwvc3Bhbj5cblx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwibiAhPT0gMVwiPnt7X2JhdGNoVGV4dE11bHRpcGxlLnN1YmplY3QgfCBpMThuUmVwbGFjZToge2NvdW50OiBufSB8IGFzeW5jfX08L3NwYW4+XG5cdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0PC9wPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwiY2RzLS1hY3Rpb24tbGlzdFwiPlxuXHRcdFx0XHQ8bmctY29udGVudCBzZWxlY3Q9XCJjZHMtdGFibGUtdG9vbGJhci1hY3Rpb25zLGlibS10YWJsZS10b29sYmFyLWFjdGlvbnNcIj48L25nLWNvbnRlbnQ+XG5cdFx0XHRcdDxidXR0b25cblx0XHRcdFx0XHRjZHNCdXR0b249XCJwcmltYXJ5XCJcblx0XHRcdFx0XHRjbGFzcz1cImNkcy0tYmF0Y2gtc3VtbWFyeV9fY2FuY2VsXCJcblx0XHRcdFx0XHRbdGFiaW5kZXhdPVwic2VsZWN0ZWQgPyAwIDogLTFcIlxuXHRcdFx0XHRcdChjbGljayk9XCJvbkNhbmNlbCgpXCI+XG5cdFx0XHRcdFx0e3tfY2FuY2VsVGV4dC5zdWJqZWN0IHwgYXN5bmN9fVxuXHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHRcdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblx0PC9zZWN0aW9uPlxuXHRgXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlVG9vbGJhciB7XG5cdEBJbnB1dCgpIG1vZGVsOiBUYWJsZU1vZGVsO1xuXG5cdEBJbnB1dCgpIHNldCBiYXRjaFRleHQgKHZhbHVlOiBzdHJpbmcgfCB7IFNJTkdMRTogc3RyaW5nLCBNVUxUSVBMRTogc3RyaW5nIH0pIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHR0aGlzLl9iYXRjaFRleHRTaW5nbGUub3ZlcnJpZGUodmFsdWUuU0lOR0xFKTtcblx0XHRcdHRoaXMuX2JhdGNoVGV4dE11bHRpcGxlLm92ZXJyaWRlKHZhbHVlLk1VTFRJUExFKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgY29kZVxuXHRcdFx0dGhpcy5fYmF0Y2hUZXh0TGVnYWN5Lm92ZXJyaWRlKHZhbHVlKTtcblx0XHR9XG5cdH1cblx0QElucHV0KCkgc2V0IGFyaWFMYWJlbCAodmFsdWU6IHsgQUNUSU9OX0JBUjogc3RyaW5nIH0pIHtcblx0XHR0aGlzLmFjdGlvbkJhckxhYmVsLm92ZXJyaWRlKHZhbHVlLkFDVElPTl9CQVIpO1xuXHR9XG5cdEBJbnB1dCgpIHNldCBjYW5jZWxUZXh0KHZhbHVlOiB7IENBTkNFTDogc3RyaW5nIH0pIHtcblx0XHR0aGlzLl9jYW5jZWxUZXh0Lm92ZXJyaWRlKHZhbHVlLkNBTkNFTCk7XG5cdH1cblx0QElucHV0KCkgc2l6ZTogVGFibGVSb3dTaXplID0gXCJtZFwiO1xuXG5cdGdldCBjYW5jZWxUZXh0KCk6IHsgQ0FOQ0VMOiBzdHJpbmcgfSB7XG5cdFx0cmV0dXJuIHsgQ0FOQ0VMOiB0aGlzLl9jYW5jZWxUZXh0LnZhbHVlIGFzIHN0cmluZyB9O1xuXHR9XG5cblx0QE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHRhY3Rpb25CYXJMYWJlbDogT3ZlcnJpZGFibGUgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJUQUJMRV9UT09MQkFSLkFDVElPTl9CQVJcIik7XG5cdF9jYW5jZWxUZXh0OiBPdmVycmlkYWJsZSA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIlRBQkxFX1RPT0xCQVIuQ0FOQ0VMXCIpO1xuXHRfYmF0Y2hUZXh0TGVnYWN5OiBPdmVycmlkYWJsZSA9IHRoaXMuaTE4bi5nZXRPdmVycmlkYWJsZShcIlRBQkxFX1RPT0xCQVIuQkFUQ0hfVEVYVFwiKTtcblx0X2JhdGNoVGV4dFNpbmdsZTogT3ZlcnJpZGFibGUgPSB0aGlzLmkxOG4uZ2V0T3ZlcnJpZGFibGUoXCJUQUJMRV9UT09MQkFSLkJBVENIX1RFWFRfU0lOR0xFXCIpO1xuXHRfYmF0Y2hUZXh0TXVsdGlwbGU6IE92ZXJyaWRhYmxlID0gdGhpcy5pMThuLmdldE92ZXJyaWRhYmxlKFwiVEFCTEVfVE9PTEJBUi5CQVRDSF9URVhUX01VTFRJUExFXCIpO1xuXG5cdGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpMThuOiBJMThuKSB7fVxuXG5cdGdldCBjb3VudCgpIHtcblx0XHRyZXR1cm4gdGhpcy5tb2RlbC50b3RhbERhdGFMZW5ndGggPiAwID8gdGhpcy5tb2RlbC5yb3dzU2VsZWN0ZWQucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4gcHJldmlvdXMgKyAoY3VycmVudCA/IDEgOiAwKSwgMCkgOiAwO1xuXHR9XG5cdGdldCBzZWxlY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5tb2RlbC50b3RhbERhdGFMZW5ndGggPiAwID8gdGhpcy5tb2RlbC5yb3dzU2VsZWN0ZWQuc29tZShpdGVtID0+IGl0ZW0pIDogZmFsc2U7XG5cdH1cblxuXHRvbkNhbmNlbCgpIHtcblx0XHR0aGlzLm1vZGVsLnNlbGVjdEFsbChmYWxzZSk7XG5cdFx0dGhpcy5jYW5jZWwuZW1pdCgpO1xuXHR9XG59XG4iXX0=