UNPKG

@angular-mdl/core

Version:

Angular components, directives and styles based on material design lite https://getmdl.io.

110 lines 16.6 kB
import { Component, EventEmitter, Input, Output, ViewEncapsulation, } from "@angular/core"; import * as i0 from "@angular/core"; import * as i1 from "../checkbox/mdl-checkbox.component"; import * as i2 from "@angular/common"; import * as i3 from "@angular/forms"; export class MdlDefaultTableModel { constructor(columns) { this.data = []; this.columns = columns; } addAll(data) { this.data.push(...data); } } const template = ` <table class="mdl-data-table"> <thead> <tr> <th *ngIf="selectable"> <mdl-checkbox mdl-ripple [ngModel]="isAllSelected()" (ngModelChange)="toggleAll()"></mdl-checkbox> </th> <th *ngFor="let column of model?.columns" [ngClass]="{'mdl-data-table__cell--non-numeric': !column.numeric}"> {{column.name}} </th> </tr> </thead> <tbody> <tr *ngFor="let data of model?.data; let i = index" [ngClass]="{'is-selected': selectable && data.selected}"> <td *ngIf="selectable"> <mdl-checkbox mdl-ripple [(ngModel)]="data.selected" (ngModelChange)="selectionChanged()"></mdl-checkbox> </td> <td *ngFor="let column of model?.columns" [ngClass]="{'mdl-data-table__cell--non-numeric': !column.numeric}" [innerHTML]="$any(data)[column.key]"> </td> </tr> </tbody> </table> `; const styles = ` :host{ display:inline-block; } `; export class MdlTableComponent { constructor() { this.selectable = false; } isAllSelected() { return false; } // eslint-disable-next-line @typescript-eslint/no-empty-function toggleAll() { } // eslint-disable-next-line @typescript-eslint/no-empty-function selectionChanged() { } } MdlTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MdlTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); MdlTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: MdlTableComponent, selector: "mdl-table", inputs: { model: ["table-model", "model"] }, ngImport: i0, template: "\n <table class=\"mdl-data-table\">\n <thead>\n <tr>\n <th *ngIf=\"selectable\">\n <mdl-checkbox mdl-ripple [ngModel]=\"isAllSelected()\" (ngModelChange)=\"toggleAll()\"></mdl-checkbox>\n </th>\n <th *ngFor=\"let column of model?.columns\"\n [ngClass]=\"{'mdl-data-table__cell--non-numeric': !column.numeric}\">\n {{column.name}}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let data of model?.data; let i = index\" [ngClass]=\"{'is-selected': selectable && data.selected}\">\n <td *ngIf=\"selectable\">\n <mdl-checkbox mdl-ripple\n [(ngModel)]=\"data.selected\"\n (ngModelChange)=\"selectionChanged()\"></mdl-checkbox>\n </td>\n <td *ngFor=\"let column of model?.columns\"\n [ngClass]=\"{'mdl-data-table__cell--non-numeric': !column.numeric}\"\n [innerHTML]=\"$any(data)[column.key]\">\n </td>\n </tr>\n </tbody>\n </table>\n ", isInline: true, styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "component", type: i1.MdlCheckboxComponent, selector: "mdl-checkbox", inputs: ["tabindex", "value", "disabled"], outputs: ["change"] }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MdlTableComponent, decorators: [{ type: Component, args: [{ selector: "mdl-table", template: template, encapsulation: ViewEncapsulation.None, styles: [":host{display:inline-block}\n"] }] }], propDecorators: { model: [{ type: Input, args: ["table-model"] }] } }); export class MdlSelectableTableComponent extends MdlTableComponent { constructor() { super(...arguments); // eslint-disable-next-line this.selected = []; // eslint-disable-next-line this.selectionChange = new EventEmitter(); this.selectable = true; this.allSelected = false; } isAllSelected() { return this.model?.data.every((data) => data.selected) ?? false; } toggleAll() { const selected = !this.isAllSelected(); this.model?.data.forEach((data) => (data.selected = selected)); this.updateSelected(); } selectionChanged() { this.updateSelected(); } updateSelected() { this.selected = this.model?.data.filter((data) => data.selected) ?? []; this.selectionChange.emit({ value: this.selected }); } } MdlSelectableTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MdlSelectableTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); MdlSelectableTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: MdlSelectableTableComponent, selector: "mdl-table-selectable", inputs: { model: ["table-model", "model"], selected: ["table-model-selected", "selected"] }, outputs: { selectionChange: "table-model-selectionChanged" }, usesInheritance: true, ngImport: i0, template: "\n <table class=\"mdl-data-table\">\n <thead>\n <tr>\n <th *ngIf=\"selectable\">\n <mdl-checkbox mdl-ripple [ngModel]=\"isAllSelected()\" (ngModelChange)=\"toggleAll()\"></mdl-checkbox>\n </th>\n <th *ngFor=\"let column of model?.columns\"\n [ngClass]=\"{'mdl-data-table__cell--non-numeric': !column.numeric}\">\n {{column.name}}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let data of model?.data; let i = index\" [ngClass]=\"{'is-selected': selectable && data.selected}\">\n <td *ngIf=\"selectable\">\n <mdl-checkbox mdl-ripple\n [(ngModel)]=\"data.selected\"\n (ngModelChange)=\"selectionChanged()\"></mdl-checkbox>\n </td>\n <td *ngFor=\"let column of model?.columns\"\n [ngClass]=\"{'mdl-data-table__cell--non-numeric': !column.numeric}\"\n [innerHTML]=\"$any(data)[column.key]\">\n </td>\n </tr>\n </tbody>\n </table>\n ", isInline: true, styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "component", type: i1.MdlCheckboxComponent, selector: "mdl-checkbox", inputs: ["tabindex", "value", "disabled"], outputs: ["change"] }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MdlSelectableTableComponent, decorators: [{ type: Component, args: [{ selector: "mdl-table-selectable", template: template, encapsulation: ViewEncapsulation.None, styles: [":host{display:inline-block}\n"] }] }], propDecorators: { model: [{ type: Input, args: ["table-model"] }], selected: [{ type: Input, args: ["table-model-selected"] }], selectionChange: [{ type: Output, args: ["table-model-selectionChanged"] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWRsLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi90YWJsZS9tZGwtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDOzs7OztBQWlCdkIsTUFBTSxPQUFPLG9CQUFvQjtJQUkvQixZQUFZLE9BQTBCO1FBRi9CLFNBQUksR0FBeUIsRUFBRSxDQUFDO1FBR3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBMEI7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFFBQVEsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBMkJaLENBQUM7QUFFTixNQUFNLE1BQU0sR0FBRzs7OztLQUlWLENBQUM7QUFRTixNQUFNLE9BQU8saUJBQWlCO0lBTjlCO1FBV0UsZUFBVSxHQUFHLEtBQUssQ0FBQztLQVdwQjtJQVRDLGFBQWE7UUFDWCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxnRUFBZ0U7SUFDaEUsU0FBUyxLQUFVLENBQUM7SUFFcEIsZ0VBQWdFO0lBQ2hFLGdCQUFnQixLQUFVLENBQUM7OzhHQWZoQixpQkFBaUI7a0dBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQU43QixTQUFTOytCQUNFLFdBQVcsWUFDckIsUUFBUSxpQkFFTyxpQkFBaUIsQ0FBQyxJQUFJOzhCQUtyQyxLQUFLO3NCQURKLEtBQUs7dUJBQUMsYUFBYTs7QUFzQnRCLE1BQU0sT0FBTywyQkFBNEIsU0FBUSxpQkFBaUI7SUFObEU7O1FBVUUsMkJBQTJCO1FBRTNCLGFBQVEsR0FBeUIsRUFBRSxDQUFDO1FBQ3BDLDJCQUEyQjtRQUUzQixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFckIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUMzQixnQkFBVyxHQUFHLEtBQUssQ0FBQztLQW9CNUI7SUFsQlUsYUFBYTtRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNsRSxDQUFDO0lBRVEsU0FBUztRQUNoQixNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRVEsZ0JBQWdCO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2RSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDOzt3SEEvQlUsMkJBQTJCOzRHQUEzQiwyQkFBMkI7MkZBQTNCLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDRSxzQkFBc0IsWUFDaEMsUUFBUSxpQkFFTyxpQkFBaUIsQ0FBQyxJQUFJOzhCQUs1QixLQUFLO3NCQURiLEtBQUs7dUJBQUMsYUFBYTtnQkFJcEIsUUFBUTtzQkFEUCxLQUFLO3VCQUFDLHNCQUFzQjtnQkFJN0IsZUFBZTtzQkFEZCxNQUFNO3VCQUFDLDhCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJTWRsVGFibGVDb2x1bW4ge1xuICBrZXk6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1lcmljPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWRsVGFibGVNb2RlbEl0ZW0ge1xuICBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWRsVGFibGVNb2RlbCB7XG4gIGNvbHVtbnM6IElNZGxUYWJsZUNvbHVtbltdO1xuICBkYXRhOiBJTWRsVGFibGVNb2RlbEl0ZW1bXTtcbn1cblxuZXhwb3J0IGNsYXNzIE1kbERlZmF1bHRUYWJsZU1vZGVsIGltcGxlbWVudHMgSU1kbFRhYmxlTW9kZWwge1xuICBwdWJsaWMgY29sdW1uczogSU1kbFRhYmxlQ29sdW1uW107XG4gIHB1YmxpYyBkYXRhOiBJTWRsVGFibGVNb2RlbEl0ZW1bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbHVtbnM6IElNZGxUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucztcbiAgfVxuXG4gIGFkZEFsbChkYXRhOiBJTWRsVGFibGVNb2RlbEl0ZW1bXSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YS5wdXNoKC4uLmRhdGEpO1xuICB9XG59XG5cbmNvbnN0IHRlbXBsYXRlID0gYFxuICAgICAgICA8dGFibGUgY2xhc3M9XCJtZGwtZGF0YS10YWJsZVwiPlxuICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRoICpuZ0lmPVwic2VsZWN0YWJsZVwiPlxuICAgICAgICAgICAgICAgICA8bWRsLWNoZWNrYm94IG1kbC1yaXBwbGUgW25nTW9kZWxdPVwiaXNBbGxTZWxlY3RlZCgpXCIgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlQWxsKClcIj48L21kbC1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgbW9kZWw/LmNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydtZGwtZGF0YS10YWJsZV9fY2VsbC0tbm9uLW51bWVyaWMnOiAhY29sdW1uLm51bWVyaWN9XCI+XG4gICAgICAgICAgICAgICAgIHt7Y29sdW1uLm5hbWV9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBtb2RlbD8uZGF0YTsgbGV0IGkgPSBpbmRleFwiIFtuZ0NsYXNzXT1cInsnaXMtc2VsZWN0ZWQnOiBzZWxlY3RhYmxlICYmIGRhdGEuc2VsZWN0ZWR9XCI+XG4gICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNlbGVjdGFibGVcIj5cbiAgICAgICAgICAgICAgICAgPG1kbC1jaGVja2JveCBtZGwtcmlwcGxlXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJkYXRhLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3Rpb25DaGFuZ2VkKClcIj48L21kbC1jaGVja2JveD5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgbW9kZWw/LmNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydtZGwtZGF0YS10YWJsZV9fY2VsbC0tbm9uLW51bWVyaWMnOiAhY29sdW1uLm51bWVyaWN9XCJcbiAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiJGFueShkYXRhKVtjb2x1bW4ua2V5XVwiPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgIGA7XG5cbmNvbnN0IHN0eWxlcyA9IGBcbiAgICA6aG9zdHtcbiAgICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrO1xuICAgIH1cbiAgICBgO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibWRsLXRhYmxlXCIsXG4gIHRlbXBsYXRlLFxuICBzdHlsZXM6IFtzdHlsZXNdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBNZGxUYWJsZUNvbXBvbmVudCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBASW5wdXQoXCJ0YWJsZS1tb2RlbFwiKVxuICBtb2RlbDogSU1kbFRhYmxlTW9kZWwgfCB1bmRlZmluZWQ7XG5cbiAgc2VsZWN0YWJsZSA9IGZhbHNlO1xuXG4gIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICB0b2dnbGVBbGwoKTogdm9pZCB7fVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgc2VsZWN0aW9uQ2hhbmdlZCgpOiB2b2lkIHt9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtZGwtdGFibGUtc2VsZWN0YWJsZVwiLFxuICB0ZW1wbGF0ZSxcbiAgc3R5bGVzOiBbc3R5bGVzXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgTWRsU2VsZWN0YWJsZVRhYmxlQ29tcG9uZW50IGV4dGVuZHMgTWRsVGFibGVDb21wb25lbnQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgQElucHV0KFwidGFibGUtbW9kZWxcIilcbiAgb3ZlcnJpZGUgbW9kZWw6IElNZGxUYWJsZU1vZGVsIHwgdW5kZWZpbmVkO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgQElucHV0KFwidGFibGUtbW9kZWwtc2VsZWN0ZWRcIilcbiAgc2VsZWN0ZWQ6IElNZGxUYWJsZU1vZGVsSXRlbVtdID0gW107XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBAT3V0cHV0KFwidGFibGUtbW9kZWwtc2VsZWN0aW9uQ2hhbmdlZFwiKVxuICBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIG92ZXJyaWRlIHNlbGVjdGFibGUgPSB0cnVlO1xuICBwdWJsaWMgYWxsU2VsZWN0ZWQgPSBmYWxzZTtcblxuICBvdmVycmlkZSBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGVsPy5kYXRhLmV2ZXJ5KChkYXRhKSA9PiBkYXRhLnNlbGVjdGVkKSA/PyBmYWxzZTtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvZ2dsZUFsbCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9ICF0aGlzLmlzQWxsU2VsZWN0ZWQoKTtcbiAgICB0aGlzLm1vZGVsPy5kYXRhLmZvckVhY2goKGRhdGEpID0+IChkYXRhLnNlbGVjdGVkID0gc2VsZWN0ZWQpKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkKCk7XG4gIH1cblxuICBvdmVycmlkZSBzZWxlY3Rpb25DaGFuZ2VkKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWQoKSB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMubW9kZWw/LmRhdGEuZmlsdGVyKChkYXRhKSA9PiBkYXRhLnNlbGVjdGVkKSA/PyBbXTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHsgdmFsdWU6IHRoaXMuc2VsZWN0ZWQgfSk7XG4gIH1cbn1cbiJdfQ==