@angular-mdl/core
Version:
Angular components, directives and styles based on material design lite https://getmdl.io.
110 lines • 16.6 kB
JavaScript
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==