@provoly/dashboard 0.15.8 → 0.15.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.mjs +7 -6
- package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +5 -4
- package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +3 -3
- package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +2 -2
- package/esm2022/admin/i18n/fr.translations.mjs +2 -2
- package/esm2022/dataset/i18n/fr.translations.mjs +2 -2
- package/esm2022/lib/core/auth/geoAuth.service.mjs +8 -15
- package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +1 -1
- package/esm2022/presentation/components/presentation.component.mjs +3 -3
- package/esm2022/presentation/i18n/en.translations.mjs +3 -2
- package/esm2022/presentation/i18n/fr.translations.mjs +6 -5
- package/esm2022/presentation/style/css.component.mjs +2 -2
- package/esm2022/restitution/i18n/fr.translations.mjs +2 -2
- package/esm2022/restitution/style/css.component.mjs +2 -2
- package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +19 -10
- package/esm2022/widgets/widget-map/component/widget-map.component.mjs +18 -11
- package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +36 -1
- package/esm2022/widgets/widget-table/component/widget-table.component.mjs +3 -3
- package/fesm2022/provoly-dashboard-admin.mjs +14 -12
- package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-dataset.mjs +1 -1
- package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-presentation.mjs +11 -9
- package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-restitution.mjs +3 -3
- package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +18 -9
- package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +52 -10
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +7 -15
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/lib/core/auth/geoAuth.service.d.ts +3 -1
- package/lib/core/model/widget-map-manifest.interface.d.ts +1 -0
- package/package.json +30 -30
- package/presentation/i18n/en.translations.d.ts +1 -0
- package/presentation/i18n/fr.translations.d.ts +1 -0
- package/presentation/style/_o-pry-presentation.scss +7 -2
- package/tooltips/attribute/attribute-tooltip.component.d.ts +5 -1
- package/widgets/widget-map/component/widget-map.component.d.ts +3 -4
- package/widgets/widget-map/utils/widget-map.utils.d.ts +1 -0
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
|
-
import { BaseTooltipComponent } from '@provoly/dashboard';
|
|
3
|
-
import { map, of } from 'rxjs';
|
|
2
|
+
import { BaseTooltipComponent, ClassSelectors } from '@provoly/dashboard';
|
|
3
|
+
import { map, of, switchMap } from 'rxjs';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@provoly/dashboard";
|
|
6
|
-
import * as i2 from "@
|
|
6
|
+
import * as i2 from "@ngrx/store";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
7
8
|
export class AttributeTooltipComponent extends BaseTooltipComponent {
|
|
8
|
-
constructor(translateIdPipe) {
|
|
9
|
+
constructor(translateIdPipe, store) {
|
|
9
10
|
super();
|
|
10
11
|
this.translateIdPipe = translateIdPipe;
|
|
12
|
+
this.store = store;
|
|
11
13
|
this.context = this.context ?? { attributes: [] };
|
|
14
|
+
this.classes$ = this.store.select(ClassSelectors.classes);
|
|
15
|
+
}
|
|
16
|
+
getAttributeName(attribute) {
|
|
17
|
+
return this.classes$.pipe(map((classes) => classes
|
|
18
|
+
.map((clazz) => clazz.attributes)
|
|
19
|
+
.flat()
|
|
20
|
+
.find((attr) => attr.id === attribute)?.name ?? attribute));
|
|
12
21
|
}
|
|
13
22
|
getValue(attribute, limit = 9999) {
|
|
14
|
-
return this.
|
|
23
|
+
return this.getAttributeName(attribute).pipe(switchMap((attribute) => this._getValue(attribute)), map((value) => {
|
|
15
24
|
switch (typeof value) {
|
|
16
25
|
case 'undefined':
|
|
17
26
|
return '';
|
|
@@ -45,11 +54,11 @@ export class AttributeTooltipComponent extends BaseTooltipComponent {
|
|
|
45
54
|
return of(this.data.item.properties.find((prop) => prop.key === attribute)?.value);
|
|
46
55
|
}
|
|
47
56
|
}
|
|
48
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AttributeTooltipComponent, deps: [{ token: i1.TranslateIdPipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
49
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AttributeTooltipComponent, selector: "pry-attribute-tooltip", usesInheritance: true, ngImport: i0, template: "<div class=\"m-tooltip__item__content\">\n <h3 class=\"a-h3 -attribute\">\n <img\n [src]=\"data.item | translateItemToSymbol | async\"\n [alt]=\"data.item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n [title]=\"data.item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n width=\"32\"\n aria-hidden=\"true\"\n />\n <span [title]=\"data.item.oClass | translateId : { type: 'class', output: 'name' } | async\">{{\n data.item.oClass | translateId : { type: 'class', output: 'name' } | async\n }}</span>\n </h3>\n <ng-container *ngFor=\"let attribute of context.attributes\">\n <p [title]=\"getValue(attribute) | async\">\n <span>{{ attribute }}:</span> {{ getValue(attribute, 40) | async }}\n </p>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type:
|
|
57
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AttributeTooltipComponent, deps: [{ token: i1.TranslateIdPipe }, { token: i2.Store }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
58
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: AttributeTooltipComponent, selector: "pry-attribute-tooltip", usesInheritance: true, ngImport: i0, template: "<div class=\"m-tooltip__item__content\">\n <h3 class=\"a-h3 -attribute\">\n <img\n [src]=\"data.item | translateItemToSymbol | async\"\n [alt]=\"data.item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n [title]=\"data.item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n width=\"32\"\n aria-hidden=\"true\"\n />\n <span [title]=\"data.item.oClass | translateId : { type: 'class', output: 'name' } | async\">{{\n data.item.oClass | translateId : { type: 'class', output: 'name' } | async\n }}</span>\n </h3>\n <ng-container *ngFor=\"let attribute of context.attributes\">\n <p [title]=\"getValue(attribute) | async\">\n <span>{{ getAttributeName(attribute) | async }}:</span> {{ getValue(attribute, 40) | async }}\n </p>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i1.TranslateItemToSymbolPipe, name: "translateItemToSymbol" }] }); }
|
|
50
59
|
}
|
|
51
60
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: AttributeTooltipComponent, decorators: [{
|
|
52
61
|
type: Component,
|
|
53
|
-
args: [{ selector: 'pry-attribute-tooltip', template: "<div class=\"m-tooltip__item__content\">\n <h3 class=\"a-h3 -attribute\">\n <img\n [src]=\"data.item | translateItemToSymbol | async\"\n [alt]=\"data.item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n [title]=\"data.item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n width=\"32\"\n aria-hidden=\"true\"\n />\n <span [title]=\"data.item.oClass | translateId : { type: 'class', output: 'name' } | async\">{{\n data.item.oClass | translateId : { type: 'class', output: 'name' } | async\n }}</span>\n </h3>\n <ng-container *ngFor=\"let attribute of context.attributes\">\n <p [title]=\"getValue(attribute) | async\">\n <span>{{ attribute }}:</span> {{ getValue(attribute, 40) | async }}\n </p>\n </ng-container>\n</div>\n" }]
|
|
54
|
-
}], ctorParameters: function () { return [{ type: i1.TranslateIdPipe }]; } });
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
args: [{ selector: 'pry-attribute-tooltip', template: "<div class=\"m-tooltip__item__content\">\n <h3 class=\"a-h3 -attribute\">\n <img\n [src]=\"data.item | translateItemToSymbol | async\"\n [alt]=\"data.item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n [title]=\"data.item.oClass | translateId : { type: 'class', output: 'name' } | async\"\n width=\"32\"\n aria-hidden=\"true\"\n />\n <span [title]=\"data.item.oClass | translateId : { type: 'class', output: 'name' } | async\">{{\n data.item.oClass | translateId : { type: 'class', output: 'name' } | async\n }}</span>\n </h3>\n <ng-container *ngFor=\"let attribute of context.attributes\">\n <p [title]=\"getValue(attribute) | async\">\n <span>{{ getAttributeName(attribute) | async }}:</span> {{ getValue(attribute, 40) | async }}\n </p>\n </ng-container>\n</div>\n" }]
|
|
63
|
+
}], ctorParameters: function () { return [{ type: i1.TranslateIdPipe }, { type: i2.Store }]; } });
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLXRvb2x0aXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvdG9vbHRpcHMvYXR0cmlidXRlL2F0dHJpYnV0ZS10b29sdGlwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3Rvb2x0aXBzL2F0dHJpYnV0ZS9hdHRyaWJ1dGUtdG9vbHRpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBUyxjQUFjLEVBQW1CLE1BQU0sb0JBQW9CLENBQUM7QUFDbEcsT0FBTyxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQU90RCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsb0JBQW9CO0lBR2pFLFlBQW9CLGVBQWdDLEVBQVUsS0FBaUI7UUFDN0UsS0FBSyxFQUFFLENBQUM7UUFEVSxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBRTdFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBaUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDdkIsR0FBRyxDQUNELENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDVixPQUFPO2FBQ0osR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2FBQ2hDLElBQUksRUFBRTthQUNOLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsRUFBRSxJQUFJLElBQUksU0FBUyxDQUM5RCxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLFNBQWlCLEVBQUUsS0FBSyxHQUFHLElBQUk7UUFDdEMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUMxQyxTQUFTLENBQUMsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQzNELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osUUFBUSxPQUFPLEtBQUssRUFBRTtnQkFDcEIsS0FBSyxXQUFXO29CQUNkLE9BQU8sRUFBRSxDQUFDO2dCQUNaLEtBQUssUUFBUTtvQkFDWCxPQUFPLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDMUIsS0FBSyxRQUFRO29CQUNYLE9BQU8sS0FBSyxDQUFDO2dCQUNmO29CQUNFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3JDLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2FBQzlFO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLENBQUMsU0FBaUI7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUM5QixpQ0FBaUM7WUFDakMsUUFBUSxTQUFTLEVBQUU7Z0JBQ2pCLEtBQUssSUFBSTtvQkFDUCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxLQUFLLFFBQVE7b0JBQ1gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRTt3QkFDL0QsSUFBSSxFQUFFLE9BQU87d0JBQ2IsTUFBTSxFQUFFLE1BQU07cUJBQ2YsQ0FBdUIsQ0FBQztnQkFDM0I7b0JBQ0UsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzFEO1NBQ0Y7YUFBTTtZQUNMLDRDQUE0QztZQUM1QyxPQUFPLEVBQUUsQ0FDUCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBb0MsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQ3hHLENBQUM7U0FDSDtJQUNILENBQUM7OEdBNURVLHlCQUF5QjtrR0FBekIseUJBQXlCLG9GQ1R0QyxnMUJBbUJBOzsyRkRWYSx5QkFBeUI7a0JBSnJDLFNBQVM7K0JBQ0UsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlVG9vbHRpcENvbXBvbmVudCwgQ2xhc3MsIENsYXNzU2VsZWN0b3JzLCBUcmFuc2xhdGVJZFBpcGUgfSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LWF0dHJpYnV0ZS10b29sdGlwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F0dHJpYnV0ZS10b29sdGlwLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGVUb29sdGlwQ29tcG9uZW50IGV4dGVuZHMgQmFzZVRvb2x0aXBDb21wb25lbnQge1xuICBwcml2YXRlIGNsYXNzZXMkOiBPYnNlcnZhYmxlPENsYXNzW10+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlSWRQaXBlOiBUcmFuc2xhdGVJZFBpcGUsIHByaXZhdGUgc3RvcmU6IFN0b3JlPGFueT4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29udGV4dCA9IHRoaXMuY29udGV4dCA/PyB7IGF0dHJpYnV0ZXM6IFtdIH07XG4gICAgdGhpcy5jbGFzc2VzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpO1xuICB9XG5cbiAgZ2V0QXR0cmlidXRlTmFtZShhdHRyaWJ1dGU6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY2xhc3NlcyQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKGNsYXNzZXMpID0+XG4gICAgICAgICAgY2xhc3Nlc1xuICAgICAgICAgICAgLm1hcCgoY2xhenopID0+IGNsYXp6LmF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgICAuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gYXR0cmlidXRlKT8ubmFtZSA/PyBhdHRyaWJ1dGVcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgZ2V0VmFsdWUoYXR0cmlidXRlOiBzdHJpbmcsIGxpbWl0ID0gOTk5OSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlTmFtZShhdHRyaWJ1dGUpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGF0dHJpYnV0ZTogc3RyaW5nKSA9PiB0aGlzLl9nZXRWYWx1ZShhdHRyaWJ1dGUpKSxcbiAgICAgIG1hcCgodmFsdWUpID0+IHtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA+IGxpbWl0ID8gYCR7cmVzdWx0LnN1YnN0cmluZygwLCBsaW1pdCl9Li4uYCA6IHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgX2dldFZhbHVlKGF0dHJpYnV0ZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQgfCBudW1iZXI+IHtcbiAgICBpZiAoIXRoaXMuZGF0YS5pdGVtLnByb3BlcnRpZXMpIHtcbiAgICAgIC8vIFRoaXMgaXMgZm9yIFByb3ZvbHktbGlrZSBpdGVtc1xuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgY2FzZSAnaWQnOlxuICAgICAgICAgIHJldHVybiBvZih0aGlzLmRhdGEuaXRlbVthdHRyaWJ1dGVdKTtcbiAgICAgICAgY2FzZSAnb0NsYXNzJzpcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVJZFBpcGUudHJhbnNmb3JtKHRoaXMuZGF0YS5pdGVtW2F0dHJpYnV0ZV0sIHtcbiAgICAgICAgICAgIHR5cGU6ICdjbGFzcycsXG4gICAgICAgICAgICBvdXRwdXQ6ICduYW1lJ1xuICAgICAgICAgIH0pIGFzIE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gb2YodGhpcy5kYXRhLml0ZW0uYXR0cmlidXRlc1thdHRyaWJ1dGVdPy52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgZm9yIG90aGVyIGl0ZW1zLCBsaWtlIFdNU0ZlYXR1cmVzXG4gICAgICByZXR1cm4gb2YoXG4gICAgICAgIHRoaXMuZGF0YS5pdGVtLnByb3BlcnRpZXMuZmluZCgocHJvcDogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9KSA9PiBwcm9wLmtleSA9PT0gYXR0cmlidXRlKT8udmFsdWVcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibS10b29sdGlwX19pdGVtX19jb250ZW50XCI+XG4gIDxoMyBjbGFzcz1cImEtaDMgLWF0dHJpYnV0ZVwiPlxuICAgIDxpbWdcbiAgICAgIFtzcmNdPVwiZGF0YS5pdGVtIHwgdHJhbnNsYXRlSXRlbVRvU3ltYm9sIHwgYXN5bmNcIlxuICAgICAgW2FsdF09XCJkYXRhLml0ZW0ub0NsYXNzIHwgdHJhbnNsYXRlSWQgOiB7IHR5cGU6ICdjbGFzcycsIG91dHB1dDogJ25hbWUnIH0gfCBhc3luY1wiXG4gICAgICBbdGl0bGVdPVwiZGF0YS5pdGVtLm9DbGFzcyB8IHRyYW5zbGF0ZUlkIDogeyB0eXBlOiAnY2xhc3MnLCBvdXRwdXQ6ICduYW1lJyB9IHwgYXN5bmNcIlxuICAgICAgd2lkdGg9XCIzMlwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIC8+XG4gICAgPHNwYW4gW3RpdGxlXT1cImRhdGEuaXRlbS5vQ2xhc3MgfCB0cmFuc2xhdGVJZCA6IHsgdHlwZTogJ2NsYXNzJywgb3V0cHV0OiAnbmFtZScgfSB8IGFzeW5jXCI+e3tcbiAgICAgIGRhdGEuaXRlbS5vQ2xhc3MgfCB0cmFuc2xhdGVJZCA6IHsgdHlwZTogJ2NsYXNzJywgb3V0cHV0OiAnbmFtZScgfSB8IGFzeW5jXG4gICAgfX08L3NwYW4+XG4gIDwvaDM+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGF0dHJpYnV0ZSBvZiBjb250ZXh0LmF0dHJpYnV0ZXNcIj5cbiAgICA8cCBbdGl0bGVdPVwiZ2V0VmFsdWUoYXR0cmlidXRlKSB8IGFzeW5jXCI+XG4gICAgICA8c3Bhbj57eyBnZXRBdHRyaWJ1dGVOYW1lKGF0dHJpYnV0ZSkgfCBhc3luYyB9fTo8L3NwYW4+IHt7IGdldFZhbHVlKGF0dHJpYnV0ZSwgNDApIHwgYXN5bmMgfX1cbiAgICA8L3A+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
|