dfx-bootstrap-table
Version:
Angular table CDK implementation for Bootstrap with filtering, sorting and pagination.
149 lines (145 loc) • 15.2 kB
JavaScript
/**
* @license
* Original work Copyright Google LLC All Rights Reserved.
* Modified work Copyright DatePoll-Systems
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { _DisposeViewRepeaterStrategy, _RecycleViewRepeaterStrategy, _VIEW_REPEATER_STRATEGY } from '@angular/cdk/collections';
import { CDK_TABLE, CdkTable, DataRowOutlet, FooterRowOutlet, HeaderRowOutlet, NoDataRowOutlet, STICKY_POSITIONING_LISTENER, } from '@angular/cdk/table';
import { ChangeDetectionStrategy, Component, Directive, HostBinding, Input, ViewEncapsulation, booleanAttribute } from '@angular/core';
import * as i0 from "@angular/core";
/**
* Enables the recycle view repeater strategy, which reduces rendering latency. Not compatible with
* tables that animate rows.
*/
export class NgbRecycleRows {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: NgbRecycleRows, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.2", type: NgbRecycleRows, isStandalone: true, selector: "ngb-table[recycleRows], table[ngb-table][recycleRows]", providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }], ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: NgbRecycleRows, decorators: [{
type: Directive,
args: [{
selector: 'ngb-table[recycleRows], table[ngb-table][recycleRows]',
providers: [{ provide: _VIEW_REPEATER_STRATEGY, useClass: _RecycleViewRepeaterStrategy }],
}]
}] });
/**
* Wrapper for the CdkTable with Bootstrap styles.
*/
export class NgbTable extends CdkTable {
constructor() {
super(...arguments);
/** Overrides the need to add position: sticky on every sticky cell element in `CdkTable`. */
this.needsPositionStickyOnElement = false;
this.cdkTable = true;
this.table = true;
this.hover = false;
this.striped = false;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: NgbTable, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.2", type: NgbTable, isStandalone: true, selector: "ngb-table, table[ngb-table]", inputs: { hover: ["hover", "hover", booleanAttribute], striped: ["striped", "striped", booleanAttribute] }, host: { properties: { "class.cdk-table": "this.cdkTable", "class.table": "this.table", "class.table-hover": "this.hover", "class.table-striped": "this.striped" } }, providers: [
{ provide: CdkTable, useExisting: NgbTable },
{ provide: CDK_TABLE, useExisting: NgbTable },
{ provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },
// Prevent nested tables from seeing this table's StickyPositioningListener.
{ provide: STICKY_POSITIONING_LISTENER, useValue: null },
], exportAs: ["ngbTable"], usesInheritance: true, ngImport: i0, template: `
<ng-content select="caption" />
<ng-content select="colgroup, col" />
<!--
Unprojected content throws a hydration error so we need this to capture it.
It gets removed on the client so it doesn't affect the layout.
-->
@if (_isServer) {
<ng-content />
}
@if (_isNativeHtmlTable) {
<thead role="rowgroup">
<ng-container headerRowOutlet />
</thead>
<tbody class="mdc-data-table__content" role="rowgroup">
<ng-container rowOutlet />
<ng-container noDataRowOutlet />
</tbody>
<tfoot role="rowgroup">
<ng-container footerRowOutlet />
</tfoot>
} @else {
<ng-container headerRowOutlet />
<ng-container rowOutlet />
<ng-container noDataRowOutlet />
<ng-container footerRowOutlet />
}
`, isInline: true, dependencies: [{ kind: "directive", type: HeaderRowOutlet, selector: "[headerRowOutlet]" }, { kind: "directive", type: DataRowOutlet, selector: "[rowOutlet]" }, { kind: "directive", type: NoDataRowOutlet, selector: "[noDataRowOutlet]" }, { kind: "directive", type: FooterRowOutlet, selector: "[footerRowOutlet]" }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: NgbTable, decorators: [{
type: Component,
args: [{
selector: 'ngb-table, table[ngb-table]',
exportAs: 'ngbTable',
// Note that according to MDN, the `caption` element has to be projected as the **first**
// element in the table. See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption
// We can't reuse `CDK_TABLE_TEMPLATE` because it's incompatible with local compilation mode.
template: `
<ng-content select="caption" />
<ng-content select="colgroup, col" />
<!--
Unprojected content throws a hydration error so we need this to capture it.
It gets removed on the client so it doesn't affect the layout.
-->
@if (_isServer) {
<ng-content />
}
@if (_isNativeHtmlTable) {
<thead role="rowgroup">
<ng-container headerRowOutlet />
</thead>
<tbody class="mdc-data-table__content" role="rowgroup">
<ng-container rowOutlet />
<ng-container noDataRowOutlet />
</tbody>
<tfoot role="rowgroup">
<ng-container footerRowOutlet />
</tfoot>
} @else {
<ng-container headerRowOutlet />
<ng-container rowOutlet />
<ng-container noDataRowOutlet />
<ng-container footerRowOutlet />
}
`,
providers: [
{ provide: CdkTable, useExisting: NgbTable },
{ provide: CDK_TABLE, useExisting: NgbTable },
{ provide: _VIEW_REPEATER_STRATEGY, useClass: _DisposeViewRepeaterStrategy },
// Prevent nested tables from seeing this table's StickyPositioningListener.
{ provide: STICKY_POSITIONING_LISTENER, useValue: null },
],
encapsulation: ViewEncapsulation.None,
// See note on CdkTable for explanation on why this uses the default change detection strategy.
// tslint:disable-next-line:validate-decorators
changeDetection: ChangeDetectionStrategy.Default,
imports: [HeaderRowOutlet, DataRowOutlet, NoDataRowOutlet, FooterRowOutlet],
}]
}], propDecorators: { cdkTable: [{
type: HostBinding,
args: ['class.cdk-table']
}], table: [{
type: HostBinding,
args: ['class.table']
}], hover: [{
type: HostBinding,
args: ['class.table-hover']
}, {
type: Input,
args: [{ transform: booleanAttribute }]
}], striped: [{
type: HostBinding,
args: ['class.table-striped']
}, {
type: Input,
args: [{ transform: booleanAttribute }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RmeC1ib290c3RyYXAtdGFibGUvc3JjL2xpYi90YWJsZS90YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBQ0gsT0FBTyxFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0gsT0FBTyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsYUFBYSxFQUNiLGVBQWUsRUFDZixlQUFlLEVBQ2YsZUFBZSxFQUNmLDJCQUEyQixHQUM1QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRXZJOzs7R0FHRztBQUtILE1BQU0sT0FBTyxjQUFjOzhHQUFkLGNBQWM7a0dBQWQsY0FBYyxvR0FGZCxDQUFDLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFFBQVEsRUFBRSw0QkFBNEIsRUFBRSxDQUFDOzsyRkFFOUUsY0FBYztrQkFKMUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdURBQXVEO29CQUNqRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLEVBQUUsQ0FBQztpQkFDMUY7O0FBR0Q7O0dBRUc7QUFrREgsTUFBTSxPQUFPLFFBQVksU0FBUSxRQUFXO0lBakQ1Qzs7UUFrREUsNkZBQTZGO1FBQzFFLGlDQUE0QixHQUFHLEtBQUssQ0FBQztRQUd4RCxhQUFRLEdBQUcsSUFBSSxDQUFDO1FBR2hCLFVBQUssR0FBRyxJQUFJLENBQUM7UUFJYixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBSWQsWUFBTyxHQUFHLEtBQUssQ0FBQztLQUNqQjs4R0FqQlksUUFBUTtrR0FBUixRQUFRLG1HQVdDLGdCQUFnQixtQ0FJaEIsZ0JBQWdCLHFMQTVCekI7WUFDVCxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRTtZQUM1QyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRTtZQUM3QyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLEVBQUU7WUFDNUUsNEVBQTRFO1lBQzVFLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7U0FDekQseUVBcENTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCVCw0REFZUyxlQUFlLDhEQUFFLGFBQWEsd0RBQUUsZUFBZSw4REFBRSxlQUFlOzsyRkFFL0QsUUFBUTtrQkFqRHBCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLHlGQUF5RjtvQkFDekYsOEZBQThGO29CQUM5Riw2RkFBNkY7b0JBQzdGLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2QlQ7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLFVBQVUsRUFBRTt3QkFDNUMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsVUFBVSxFQUFFO3dCQUM3QyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLEVBQUU7d0JBQzVFLDRFQUE0RTt3QkFDNUUsRUFBRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtxQkFDekQ7b0JBQ0QsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLCtGQUErRjtvQkFDL0YsK0NBQStDO29CQUMvQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsT0FBTztvQkFDaEQsT0FBTyxFQUFFLENBQUMsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDO2lCQUM1RTs4QkFNQyxRQUFRO3NCQURQLFdBQVc7dUJBQUMsaUJBQWlCO2dCQUk5QixLQUFLO3NCQURKLFdBQVc7dUJBQUMsYUFBYTtnQkFLMUIsS0FBSztzQkFGSixXQUFXO3VCQUFDLG1CQUFtQjs7c0JBQy9CLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBS3RDLE9BQU87c0JBRk4sV0FBVzt1QkFBQyxxQkFBcUI7O3NCQUNqQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogT3JpZ2luYWwgd29yayBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTW9kaWZpZWQgd29yayBDb3B5cmlnaHQgRGF0ZVBvbGwtU3lzdGVtc1xuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7IF9EaXNwb3NlVmlld1JlcGVhdGVyU3RyYXRlZ3ksIF9SZWN5Y2xlVmlld1JlcGVhdGVyU3RyYXRlZ3ksIF9WSUVXX1JFUEVBVEVSX1NUUkFURUdZIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7XG4gIENES19UQUJMRSxcbiAgQ2RrVGFibGUsXG4gIERhdGFSb3dPdXRsZXQsXG4gIEZvb3RlclJvd091dGxldCxcbiAgSGVhZGVyUm93T3V0bGV0LFxuICBOb0RhdGFSb3dPdXRsZXQsXG4gIFNUSUNLWV9QT1NJVElPTklOR19MSVNURU5FUixcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RhYmxlJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIERpcmVjdGl2ZSwgSG9zdEJpbmRpbmcsIElucHV0LCBWaWV3RW5jYXBzdWxhdGlvbiwgYm9vbGVhbkF0dHJpYnV0ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEVuYWJsZXMgdGhlIHJlY3ljbGUgdmlldyByZXBlYXRlciBzdHJhdGVneSwgd2hpY2ggcmVkdWNlcyByZW5kZXJpbmcgbGF0ZW5jeS4gTm90IGNvbXBhdGlibGUgd2l0aFxuICogdGFibGVzIHRoYXQgYW5pbWF0ZSByb3dzLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICduZ2ItdGFibGVbcmVjeWNsZVJvd3NdLCB0YWJsZVtuZ2ItdGFibGVdW3JlY3ljbGVSb3dzXScsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogX1ZJRVdfUkVQRUFURVJfU1RSQVRFR1ksIHVzZUNsYXNzOiBfUmVjeWNsZVZpZXdSZXBlYXRlclN0cmF0ZWd5IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2JSZWN5Y2xlUm93cyB7fVxuXG4vKipcbiAqIFdyYXBwZXIgZm9yIHRoZSBDZGtUYWJsZSB3aXRoIEJvb3RzdHJhcCBzdHlsZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nYi10YWJsZSwgdGFibGVbbmdiLXRhYmxlXScsXG4gIGV4cG9ydEFzOiAnbmdiVGFibGUnLFxuICAvLyBOb3RlIHRoYXQgYWNjb3JkaW5nIHRvIE1ETiwgdGhlIGBjYXB0aW9uYCBlbGVtZW50IGhhcyB0byBiZSBwcm9qZWN0ZWQgYXMgdGhlICoqZmlyc3QqKlxuICAvLyBlbGVtZW50IGluIHRoZSB0YWJsZS4gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9jYXB0aW9uXG4gIC8vIFdlIGNhbid0IHJldXNlIGBDREtfVEFCTEVfVEVNUExBVEVgIGJlY2F1c2UgaXQncyBpbmNvbXBhdGlibGUgd2l0aCBsb2NhbCBjb21waWxhdGlvbiBtb2RlLlxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImNhcHRpb25cIiAvPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImNvbGdyb3VwLCBjb2xcIiAvPlxuXG4gICAgPCEtLVxuICAgICAgVW5wcm9qZWN0ZWQgY29udGVudCB0aHJvd3MgYSBoeWRyYXRpb24gZXJyb3Igc28gd2UgbmVlZCB0aGlzIHRvIGNhcHR1cmUgaXQuXG4gICAgICBJdCBnZXRzIHJlbW92ZWQgb24gdGhlIGNsaWVudCBzbyBpdCBkb2Vzbid0IGFmZmVjdCB0aGUgbGF5b3V0LlxuICAgIC0tPlxuICAgIEBpZiAoX2lzU2VydmVyKSB7XG4gICAgICA8bmctY29udGVudCAvPlxuICAgIH1cblxuICAgIEBpZiAoX2lzTmF0aXZlSHRtbFRhYmxlKSB7XG4gICAgICA8dGhlYWQgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgaGVhZGVyUm93T3V0bGV0IC8+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5IGNsYXNzPVwibWRjLWRhdGEtdGFibGVfX2NvbnRlbnRcIiByb2xlPVwicm93Z3JvdXBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciByb3dPdXRsZXQgLz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBub0RhdGFSb3dPdXRsZXQgLz5cbiAgICAgIDwvdGJvZHk+XG4gICAgICA8dGZvb3Qgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgZm9vdGVyUm93T3V0bGV0IC8+XG4gICAgICA8L3Rmb290PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPG5nLWNvbnRhaW5lciBoZWFkZXJSb3dPdXRsZXQgLz5cbiAgICAgIDxuZy1jb250YWluZXIgcm93T3V0bGV0IC8+XG4gICAgICA8bmctY29udGFpbmVyIG5vRGF0YVJvd091dGxldCAvPlxuICAgICAgPG5nLWNvbnRhaW5lciBmb290ZXJSb3dPdXRsZXQgLz5cbiAgICB9XG4gIGAsXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogQ2RrVGFibGUsIHVzZUV4aXN0aW5nOiBOZ2JUYWJsZSB9LFxuICAgIHsgcHJvdmlkZTogQ0RLX1RBQkxFLCB1c2VFeGlzdGluZzogTmdiVGFibGUgfSxcbiAgICB7IHByb3ZpZGU6IF9WSUVXX1JFUEVBVEVSX1NUUkFURUdZLCB1c2VDbGFzczogX0Rpc3Bvc2VWaWV3UmVwZWF0ZXJTdHJhdGVneSB9LFxuICAgIC8vIFByZXZlbnQgbmVzdGVkIHRhYmxlcyBmcm9tIHNlZWluZyB0aGlzIHRhYmxlJ3MgU3RpY2t5UG9zaXRpb25pbmdMaXN0ZW5lci5cbiAgICB7IHByb3ZpZGU6IFNUSUNLWV9QT1NJVElPTklOR19MSVNURU5FUiwgdXNlVmFsdWU6IG51bGwgfSxcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgLy8gU2VlIG5vdGUgb24gQ2RrVGFibGUgZm9yIGV4cGxhbmF0aW9uIG9uIHdoeSB0aGlzIHVzZXMgdGhlIGRlZmF1bHQgY2hhbmdlIGRldGVjdGlvbiBzdHJhdGVneS5cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhbGlkYXRlLWRlY29yYXRvcnNcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5EZWZhdWx0LFxuICBpbXBvcnRzOiBbSGVhZGVyUm93T3V0bGV0LCBEYXRhUm93T3V0bGV0LCBOb0RhdGFSb3dPdXRsZXQsIEZvb3RlclJvd091dGxldF0sXG59KVxuZXhwb3J0IGNsYXNzIE5nYlRhYmxlPFQ+IGV4dGVuZHMgQ2RrVGFibGU8VD4ge1xuICAvKiogT3ZlcnJpZGVzIHRoZSBuZWVkIHRvIGFkZCBwb3NpdGlvbjogc3RpY2t5IG9uIGV2ZXJ5IHN0aWNreSBjZWxsIGVsZW1lbnQgaW4gYENka1RhYmxlYC4gKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG5lZWRzUG9zaXRpb25TdGlja3lPbkVsZW1lbnQgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNkay10YWJsZScpXG4gIGNka1RhYmxlID0gdHJ1ZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRhYmxlJylcbiAgdGFibGUgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MudGFibGUtaG92ZXInKVxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgaG92ZXIgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRhYmxlLXN0cmlwZWQnKVxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc3RyaXBlZCA9IGZhbHNlO1xufVxuIl19