@igo2/context 18.0.0-next.9 → 18.0.0
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/lib/context-import-export/context-import-export/context-import-export.component.mjs +3 -9
- package/esm2022/lib/context-import-export/shared/context-export.interface.mjs +1 -1
- package/esm2022/lib/context-import-export/shared/context-import.utils.mjs +3 -3
- package/esm2022/lib/context-manager/context-list/context-list-binding.directive.mjs +1 -1
- package/esm2022/lib/context-manager/context-list/context-list.component.mjs +1 -3
- package/esm2022/lib/context-manager/shared/context.interface.mjs +1 -1
- package/esm2022/lib/context-manager/shared/context.service.mjs +26 -66
- package/esm2022/lib/context-manager/shared/layer-context.directive.mjs +27 -16
- package/esm2022/lib/context-manager/shared/map-context.directive.mjs +1 -13
- package/esm2022/lib/share-map/shared/share-map.service.mjs +3 -2
- package/fesm2022/igo2-context.mjs +56 -104
- package/fesm2022/igo2-context.mjs.map +1 -1
- package/lib/context-import-export/context-import-export/context-import-export.component.d.ts +5 -8
- package/lib/context-import-export/shared/context-export.interface.d.ts +2 -2
- package/lib/context-manager/shared/context.interface.d.ts +2 -9
- package/lib/context-manager/shared/context.service.d.ts +4 -4
- package/lib/context-manager/shared/layer-context.directive.d.ts +1 -0
- package/package.json +6 -6
|
@@ -32,18 +32,6 @@ export class MapContextDirective {
|
|
|
32
32
|
if (context.map === undefined) {
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
-
// This creates a new ol.Map when the context changes. Doing that
|
|
36
|
-
// allows the print tool to work properly even when the map's canvas
|
|
37
|
-
// has been tainted (CORS) with the layers of another context. This could
|
|
38
|
-
// have some side effects such as unbinding all listeners on the first map.
|
|
39
|
-
// A better solution would be to create a new map (preview) before
|
|
40
|
-
// printing and avoid the tainted canvas issue. This will come later so
|
|
41
|
-
// this snippet of code is kept here in case it takes too long becomes
|
|
42
|
-
// an issue
|
|
43
|
-
// const target = this.component.map.ol.getTarget();
|
|
44
|
-
// this.component.map.ol.setTarget(undefined);
|
|
45
|
-
// this.component.map.init();
|
|
46
|
-
// this.component.map.ol.setTarget(target);
|
|
47
35
|
const viewContext = context.map.view;
|
|
48
36
|
if (!this.component.view ||
|
|
49
37
|
viewContext.keepCurrentView !== true ||
|
|
@@ -77,4 +65,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
77
65
|
standalone: true
|
|
78
66
|
}]
|
|
79
67
|
}], ctorParameters: () => [{ type: i1.MapBrowserComponent }, { type: i2.ContextService }, { type: i3.MediaService }] });
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWNvbnRleHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGV4dC9zcmMvbGliL2NvbnRleHQtbWFuYWdlci9zaGFyZWQvbWFwLWNvbnRleHQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsbUJBQW1CLEVBSXBCLE1BQU0sV0FBVyxDQUFDO0FBSW5CLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBTW5ELE1BQU0sT0FBTyxtQkFBbUI7SUFVcEI7SUFDQTtJQVZGLFNBQVMsQ0FBc0I7SUFDL0IsU0FBUyxDQUFlO0lBRWhDLElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQ0UsU0FBOEIsRUFDdEIsY0FBOEIsRUFDOUIsWUFBMEI7UUFEMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBRWxDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVE7YUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDO2FBQ2hELFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxPQUF3QjtRQUNsRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBbUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDckQsSUFDRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSTtZQUNwQixXQUFXLENBQUMsZUFBZSxLQUFLLElBQUk7WUFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUNuRCxDQUFDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsV0FBNkIsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixDQUMvRCxXQUFXLENBQ1osQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBdUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFDakUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2hELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLE9BQU8sZUFBZSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDbkQsTUFBTSxlQUFlLEdBQ25CLGVBQWUsQ0FBQyxTQUFnQyxDQUFDO29CQUNuRCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUM5QixlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDbEUsZUFBZSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUM7b0JBQzlDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUM7d0dBM0RVLG1CQUFtQjs0RkFBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUovQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTWVkaWFTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9tZWRpYSc7XG5pbXBvcnQge1xuICBNYXBCcm93c2VyQ29tcG9uZW50LFxuICBNYXBDb250cm9sc09wdGlvbnMsXG4gIE1hcFNjYWxlTGluZU9wdGlvbnMsXG4gIE1hcFZpZXdPcHRpb25zXG59IGZyb20gJ0BpZ28yL2dlbyc7XG5pbXBvcnQgdHlwZSB7IElnb01hcCB9IGZyb20gJ0BpZ28yL2dlbyc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb250ZXh0TWFwVmlldywgRGV0YWlsZWRDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJy4vY29udGV4dC5zZXJ2aWNlJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2lnb01hcENvbnRleHRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBNYXBDb250ZXh0RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGNvbXBvbmVudDogTWFwQnJvd3NlckNvbXBvbmVudDtcbiAgcHJpdmF0ZSBjb250ZXh0JCQ6IFN1YnNjcmlwdGlvbjtcblxuICBnZXQgbWFwKCk6IElnb01hcCB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50Lm1hcDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbXBvbmVudDogTWFwQnJvd3NlckNvbXBvbmVudCxcbiAgICBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIG1lZGlhU2VydmljZTogTWVkaWFTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb250ZXh0JCQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLmNvbnRleHQkXG4gICAgICAucGlwZShmaWx0ZXIoKGNvbnRleHQpID0+IGNvbnRleHQgIT09IHVuZGVmaW5lZCkpXG4gICAgICAuc3Vic2NyaWJlKChjb250ZXh0KSA9PiB0aGlzLmhhbmRsZUNvbnRleHRDaGFuZ2UoY29udGV4dCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jb250ZXh0JCQudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ29udGV4dENoYW5nZShjb250ZXh0OiBEZXRhaWxlZENvbnRleHQpIHtcbiAgICBpZiAoY29udGV4dC5tYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZpZXdDb250ZXh0OiBDb250ZXh0TWFwVmlldyA9IGNvbnRleHQubWFwLnZpZXc7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuY29tcG9uZW50LnZpZXcgfHxcbiAgICAgIHZpZXdDb250ZXh0LmtlZXBDdXJyZW50VmlldyAhPT0gdHJ1ZSB8fFxuICAgICAgY29udGV4dC5tYXAudmlldy5wcm9qZWN0aW9uICE9PSB0aGlzLm1hcC5wcm9qZWN0aW9uXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudC52aWV3ID0gdmlld0NvbnRleHQgYXMgTWFwVmlld09wdGlvbnM7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbXBvbmVudC5tYXAuZ2VvbG9jYXRpb25Db250cm9sbGVyKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudC5tYXAuZ2VvbG9jYXRpb25Db250cm9sbGVyLnVwZGF0ZUdlb2xvY2F0aW9uT3B0aW9ucyhcbiAgICAgICAgdmlld0NvbnRleHRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbHNDb250ZXh0OiBNYXBDb250cm9sc09wdGlvbnMgPSBjb250ZXh0Lm1hcC5jb250cm9scztcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50LmNvbnRyb2xzICYmIGNvbnRyb2xzQ29udGV4dCkge1xuICAgICAgaWYgKHRoaXMubWVkaWFTZXJ2aWNlLmlzTW9iaWxlKCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb250cm9sc0NvbnRleHQuc2NhbGVMaW5lICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBjb25zdCBzY2FsZUxpbmVPcHRpb24gPVxuICAgICAgICAgICAgY29udHJvbHNDb250ZXh0LnNjYWxlTGluZSBhcyBNYXBTY2FsZUxpbmVPcHRpb25zO1xuICAgICAgICAgIGlmICghc2NhbGVMaW5lT3B0aW9uLm1pbldpZHRoKSB7XG4gICAgICAgICAgICBzY2FsZUxpbmVPcHRpb24ubWluV2lkdGggPSBNYXRoLm1pbig2NCwgc2NhbGVMaW5lT3B0aW9uLm1pbldpZHRoKTtcbiAgICAgICAgICAgIGNvbnRyb2xzQ29udGV4dC5zY2FsZUxpbmUgPSBzY2FsZUxpbmVPcHRpb247XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNvbXBvbmVudC5jb250cm9scyA9IGNvbnRyb2xzQ29udGV4dDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Injectable, Optional } from '@angular/core';
|
|
2
2
|
import { RouteService } from '@igo2/core/route';
|
|
3
|
+
import { isLayerItem } from '@igo2/geo';
|
|
3
4
|
import { ContextService } from '../../context-manager/shared/context.service';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
import * as i1 from "../../context-manager/shared/context.service";
|
|
@@ -46,7 +47,7 @@ export class ShareMapService {
|
|
|
46
47
|
const llc = publicShareOption.layerlistControls.querystring;
|
|
47
48
|
let visibleKey = this.route.options.visibleOnLayersKey;
|
|
48
49
|
let invisibleKey = this.route.options.visibleOffLayersKey;
|
|
49
|
-
const layers = map.
|
|
50
|
+
const layers = map.layerController.all.filter((layer) => isLayerItem(layer));
|
|
50
51
|
const visibleLayers = layers.filter((lay) => lay.visible && !lay.isIgoInternalLayer);
|
|
51
52
|
const invisibleLayers = layers.filter((lay) => !lay.visible && !lay.isIgoInternalLayer);
|
|
52
53
|
if (visibleLayers.length === 0) {
|
|
@@ -219,4 +220,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
219
220
|
}], ctorParameters: () => [{ type: i1.ContextService }, { type: i2.RouteService, decorators: [{
|
|
220
221
|
type: Optional
|
|
221
222
|
}] }] });
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmUtbWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvc2hhcmUtbWFwL3NoYXJlZC9zaGFyZS1tYXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFLaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7O0FBSzlFLE1BQU0sT0FBTyxlQUFlO0lBSWhCO0lBQ1k7SUFKZCxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBRXRCLFlBQ1UsY0FBOEIsRUFDbEIsS0FBbUI7UUFEL0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ2xCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFFdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDMUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFVO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFFBQVE7WUFDbEIsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsUUFBUSxZQUNwQyxVQUFVLENBQUMsR0FDYixTQUFTLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDMUIsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsUUFBUSxZQUFZLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN6RSxDQUFD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b0JBQ2hCLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDbkIsQ0FBQztZQUVELElBQUksa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1lBQzVCLElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1lBQzNCLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN2QyxrQkFBa0IsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDeEMsaUJBQWlCLElBQUksSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3hELENBQUMsQ0FBQyxDQUFDO1lBQ0gsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztZQUN2QixpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2dCQUNqRCxDQUFDLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO1lBQ3RCLHNCQUFzQixHQUFHLEdBQUcsVUFBVSxJQUFJLGtCQUFrQixJQUFJLFNBQVMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ25HLENBQUM7UUFFRCxPQUFPLHNCQUFzQixDQUFDO0lBQ2hDLENBQUM7d0dBdlFVLGVBQWU7NEdBQWYsZUFBZSxjQUZkLE1BQU07OzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFNSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUm91dGVTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9yb3V0ZSc7XG5pbXBvcnQgeyBMYXllciwgV01TRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICdAaWdvMi9nZW8nO1xuaW1wb3J0IHR5cGUgeyBJZ29NYXAgfSBmcm9tICdAaWdvMi9nZW8nO1xuXG5pbXBvcnQgeyBEZXRhaWxlZENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0LW1hbmFnZXIvc2hhcmVkL2NvbnRleHQuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29udGV4dC1tYW5hZ2VyL3NoYXJlZC9jb250ZXh0LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTaGFyZU1hcFNlcnZpY2Uge1xuICBwcml2YXRlIGxhbmd1YWdlID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByb3V0ZTogUm91dGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcbiAgICAgIGlmIChwYXJhbXNbJ2xhbmcnXSkge1xuICAgICAgICB0aGlzLmxhbmd1YWdlID0gcGFyYW1zWydsYW5nJ107XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRVcmxXaXRoQXBpKGZvcm1WYWx1ZXMpIHtcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZVxuICAgICAgPyBgJHtsb2NhdGlvbi5vcmlnaW4gKyBsb2NhdGlvbi5wYXRobmFtZX0/Y29udGV4dD0ke1xuICAgICAgICAgIGZvcm1WYWx1ZXMudXJpXG4gICAgICAgIH0mbGFuZz0ke3RoaXMubGFuZ3VhZ2V9YFxuICAgICAgOiBgJHtsb2NhdGlvbi5vcmlnaW4gKyBsb2NhdGlvbi5wYXRobmFtZX0/Y29udGV4dD0ke2Zvcm1WYWx1ZXMudXJpfWA7XG4gIH1cblxuICBjcmVhdGVDb250ZXh0U2hhcmVkKG1hcDogSWdvTWFwLCBmb3JtVmFsdWVzKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dFNlcnZpY2UuZ2V0Q29udGV4dEZyb21NYXAobWFwKTtcbiAgICBjb250ZXh0LnNjb3BlID0gJ3B1YmxpYyc7XG4gICAgY29udGV4dC50aXRsZSA9IGZvcm1WYWx1ZXMudGl0bGU7XG4gICAgY29udGV4dC51cmkgPSBmb3JtVmFsdWVzLnVyaTtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZS5jcmVhdGUoY29udGV4dCk7XG4gIH1cblxuICB1cGRhdGVDb250ZXh0U2hhcmVkKG1hcDogSWdvTWFwLCBmb3JtVmFsdWVzLCBpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dFNlcnZpY2UuZ2V0Q29udGV4dEZyb21NYXAobWFwKTtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoaWQsIHtcbiAgICAgIHRpdGxlOiBmb3JtVmFsdWVzLnRpdGxlLFxuICAgICAgbWFwOiBjb250ZXh0Lm1hcFxuICAgIH0gYXMgRGV0YWlsZWRDb250ZXh0KTtcbiAgfVxuXG4gIGdldFVybFdpdGhvdXRBcGkobWFwOiBJZ29NYXAsIHB1YmxpY1NoYXJlT3B0aW9uKSB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMucm91dGUgfHxcbiAgICAgICF0aGlzLnJvdXRlLm9wdGlvbnMudmlzaWJsZU9uTGF5ZXJzS2V5IHx8XG4gICAgICAhdGhpcy5yb3V0ZS5vcHRpb25zLnZpc2libGVPZmZMYXllcnNLZXkgfHxcbiAgICAgICFtYXAudmlld0NvbnRyb2xsZXIuZ2V0Wm9vbSgpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxsYyA9IHB1YmxpY1NoYXJlT3B0aW9uLmxheWVybGlzdENvbnRyb2xzLnF1ZXJ5c3RyaW5nO1xuXG4gICAgbGV0IHZpc2libGVLZXkgPSB0aGlzLnJvdXRlLm9wdGlvbnMudmlzaWJsZU9uTGF5ZXJzS2V5O1xuICAgIGxldCBpbnZpc2libGVLZXkgPSB0aGlzLnJvdXRlLm9wdGlvbnMudmlzaWJsZU9mZkxheWVyc0tleTtcbiAgICBjb25zdCBsYXllcnMgPSBtYXAubGF5ZXJzO1xuXG4gICAgY29uc3QgdmlzaWJsZUxheWVycyA9IGxheWVycy5maWx0ZXIoXG4gICAgICAobGF5KSA9PiBsYXkudmlzaWJsZSAmJiAhbGF5LmlzSWdvSW50ZXJuYWxMYXllclxuICAgICk7XG4gICAgY29uc3QgaW52aXNpYmxlTGF5ZXJzID0gbGF5ZXJzLmZpbHRlcihcbiAgICAgIChsYXkpID0+ICFsYXkudmlzaWJsZSAmJiAhbGF5LmlzSWdvSW50ZXJuYWxMYXllclxuICAgICk7XG5cbiAgICBpZiAodmlzaWJsZUxheWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHZpc2libGVLZXkgPSAnJztcbiAgICB9XG4gICAgaWYgKGludmlzaWJsZUxheWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIGludmlzaWJsZUtleSA9ICcnO1xuICAgIH1cblxuICAgIGxldCBsYXllcnNVcmwgPSAnJztcbiAgICBsZXQgbGF5ZXJzVG9Mb29wID0gW107XG4gICAgaWYgKHZpc2libGVMYXllcnMubGVuZ3RoID4gaW52aXNpYmxlTGF5ZXJzLmxlbmd0aCkge1xuICAgICAgbGF5ZXJzVXJsID0gYCR7dmlzaWJsZUtleX09KiYke2ludmlzaWJsZUtleX09YDtcbiAgICAgIGxheWVyc1RvTG9vcCA9IGludmlzaWJsZUxheWVycztcbiAgICB9IGVsc2Uge1xuICAgICAgbGF5ZXJzVXJsID0gYCR7aW52aXNpYmxlS2V5fT0qJiR7dmlzaWJsZUtleX09YDtcbiAgICAgIGxheWVyc1RvTG9vcCA9IHZpc2libGVMYXllcnM7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBsYXllciBvZiBsYXllcnNUb0xvb3ApIHtcbiAgICAgIGlmIChsYXllci5pZCkge1xuICAgICAgICBsYXllcnNVcmwgKz0gbGF5ZXIuaWQgKyAnLCc7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbnRleHRMYXllcnNJRCA9IFtdO1xuICAgIGNvbnN0IGNvbnRleHRMYXllcnMgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLmNvbnRleHQkLnZhbHVlLmxheWVycztcbiAgICBmb3IgKGNvbnN0IGNvbnRleHRMYXllciBvZiBjb250ZXh0TGF5ZXJzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBjb250ZXh0TGF5ZXIuaWQgIT09ICd1bmRlZmluZWQnIHx8XG4gICAgICAgIHR5cGVvZiBjb250ZXh0TGF5ZXIuc291cmNlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgKSB7XG4gICAgICAgIGNvbnRleHRMYXllcnNJRC5wdXNoKGNvbnRleHRMYXllci5pZCB8fCBjb250ZXh0TGF5ZXIuc291cmNlLmlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhZGRlZExheWVyc1F1ZXJ5UGFyYW1zV21zID0gdGhpcy5tYWtlTGF5ZXJzQnlTZXJ2aWNlKFxuICAgICAgbGF5ZXJzLFxuICAgICAgY29udGV4dExheWVyc0lELFxuICAgICAgJ3dtcydcbiAgICApO1xuICAgIGNvbnN0IGFkZGVkTGF5ZXJzUXVlcnlQYXJhbXNXbXRzID0gdGhpcy5tYWtlTGF5ZXJzQnlTZXJ2aWNlKFxuICAgICAgbGF5ZXJzLFxuICAgICAgY29udGV4dExheWVyc0lELFxuICAgICAgJ3dtdHMnXG4gICAgKTtcbiAgICBjb25zdCBhZGRlZExheWVyc1F1ZXJ5UGFyYW1zQXJjZ2lzUmVzdCA9IHRoaXMubWFrZUxheWVyc0J5U2VydmljZShcbiAgICAgIGxheWVycyxcbiAgICAgIGNvbnRleHRMYXllcnNJRCxcbiAgICAgICdhcmNnaXNyZXN0J1xuICAgICk7XG4gICAgY29uc3QgYWRkZWRMYXllcnNRdWVyeVBhcmFtc0ltYWdlQXJjZ2lzUmVzdCA9IHRoaXMubWFrZUxheWVyc0J5U2VydmljZShcbiAgICAgIGxheWVycyxcbiAgICAgIGNvbnRleHRMYXllcnNJRCxcbiAgICAgICdpbWFnZWFyY2dpc3Jlc3QnXG4gICAgKTtcbiAgICBjb25zdCBhZGRlZExheWVyc1F1ZXJ5UGFyYW1zVGlsZUFyY2dpc1Jlc3QgPSB0aGlzLm1ha2VMYXllcnNCeVNlcnZpY2UoXG4gICAgICBsYXllcnMsXG4gICAgICBjb250ZXh0TGF5ZXJzSUQsXG4gICAgICAndGlsZWFyY2dpc3Jlc3QnXG4gICAgKTtcblxuICAgIGxheWVyc1VybCA9IGxheWVyc1VybC5zdWJzdHIoMCwgbGF5ZXJzVXJsLmxlbmd0aCAtIDEpO1xuXG4gICAgY29uc3Qgem9vbUtleSA9IHRoaXMucm91dGUub3B0aW9ucy56b29tS2V5O1xuICAgIGNvbnN0IGNlbnRlcktleSA9IHRoaXMucm91dGUub3B0aW9ucy5jZW50ZXJLZXk7XG4gICAgY29uc3QgY29udGV4dEtleSA9IHRoaXMucm91dGUub3B0aW9ucy5jb250ZXh0S2V5O1xuXG4gICAgY29uc3Qgem9vbSA9IGAke3pvb21LZXl9PSR7bWFwLnZpZXdDb250cm9sbGVyLmdldFpvb20oKX1gO1xuICAgIGNvbnN0IGFycmF5Q2VudGVyID0gbWFwLnZpZXdDb250cm9sbGVyLmdldENlbnRlcignRVBTRzo0MzI2JykgfHwgW107XG4gICAgY29uc3QgbG9uZyA9IGFycmF5Q2VudGVyWzBdLnRvRml4ZWQoNSkucmVwbGFjZSgvXFwuKFteMF0rKTArJC8sICcuJDEnKTtcbiAgICBjb25zdCBsYXQgPSBhcnJheUNlbnRlclsxXS50b0ZpeGVkKDUpLnJlcGxhY2UoL1xcLihbXjBdKykwKyQvLCAnLiQxJyk7XG4gICAgY29uc3QgY2VudGVyID0gYCR7Y2VudGVyS2V5fT0ke2xvbmd9LCR7bGF0fWAucmVwbGFjZSgvLjAwMDAwL2csICcnKTtcbiAgICBsZXQgY29udGV4dCA9ICcnO1xuICAgIGlmICh0aGlzLmNvbnRleHRTZXJ2aWNlLmNvbnRleHQkLnZhbHVlKSB7XG4gICAgICBjb250ZXh0ID0gYCR7Y29udGV4dEtleX09JHt0aGlzLmNvbnRleHRTZXJ2aWNlLmNvbnRleHQkLnZhbHVlLnVyaX1gO1xuICAgIH1cblxuICAgIGxldCB1cmwgPSB0aGlzLmxhbmd1YWdlXG4gICAgICA/IGAke2xvY2F0aW9uLm9yaWdpbn0ke2xvY2F0aW9uLnBhdGhuYW1lfT8ke2NvbnRleHR9JiR7em9vbX0mJHtjZW50ZXJ9JiR7bGF5ZXJzVXJsfSYke2xsY30mJHthZGRlZExheWVyc1F1ZXJ5UGFyYW1zV21zfSYke2xsY30mJHthZGRlZExheWVyc1F1ZXJ5UGFyYW1zV210c30mJHthZGRlZExheWVyc1F1ZXJ5UGFyYW1zQXJjZ2lzUmVzdH0mJHthZGRlZExheWVyc1F1ZXJ5UGFyYW1zSW1hZ2VBcmNnaXNSZXN0fSYke2FkZGVkTGF5ZXJzUXVlcnlQYXJhbXNUaWxlQXJjZ2lzUmVzdH0mbGFuZz0ke3RoaXMubGFuZ3VhZ2V9YFxuICAgICAgOiBgJHtsb2NhdGlvbi5vcmlnaW59JHtsb2NhdGlvbi5wYXRobmFtZX0/JHtjb250ZXh0fSYke3pvb219JiR7Y2VudGVyfSYke2xheWVyc1VybH0mJHtsbGN9JiR7YWRkZWRMYXllcnNRdWVyeVBhcmFtc1dtc30mJHtsbGN9JiR7YWRkZWRMYXllcnNRdWVyeVBhcmFtc1dtdHN9JiR7YWRkZWRMYXllcnNRdWVyeVBhcmFtc0FyY2dpc1Jlc3R9JiR7YWRkZWRMYXllcnNRdWVyeVBhcmFtc0ltYWdlQXJjZ2lzUmVzdH0mJHthZGRlZExheWVyc1F1ZXJ5UGFyYW1zVGlsZUFyY2dpc1Jlc3R9YDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xuICAgICAgdXJsID0gdXJsLnJlcGxhY2UoLyYmL2csICcmJyk7XG4gICAgICB1cmwgPSB1cmwuZW5kc1dpdGgoJyYnKSA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG4gICAgfVxuICAgIHVybCA9IHVybC5lbmRzV2l0aCgnJicpID8gdXJsLnNsaWNlKDAsIC0xKSA6IHVybDtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgnPyZ3bScsICcmd20nKTtcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgnPyYnLCAnPycpO1xuXG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZUxheWVyc0J5U2VydmljZShcbiAgICBsYXllcnM6IExheWVyW10sXG4gICAgY29udGV4dExheWVyc0lEOiBhbnlbXSxcbiAgICB0eXBlU2VydmljZTogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgYWRkZWRMYXllcnNCeVNlcnZpY2UgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGxheWVyIG9mIGxheWVycy5maWx0ZXIoXG4gICAgICAobCkgPT4gbC5kYXRhU291cmNlLm9wdGlvbnM/LnR5cGUgPT09IHR5cGVTZXJ2aWNlXG4gICAgKSkge1xuICAgICAgaWYgKGNvbnRleHRMYXllcnNJRC5pbmRleE9mKGxheWVyLmlkKSA9PT0gLTEpIHtcbiAgICAgICAgbGV0IGxpbmtVcmwgPSBlbmNvZGVVUklDb21wb25lbnQoKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucyBhcyBhbnkpLnVybCk7XG4gICAgICAgIGxldCBhZGRlZExheWVyID0gJyc7XG4gICAgICAgIGxldCBsYXllclZlcnNpb246IHN0cmluZztcbiAgICAgICAgc3dpdGNoIChsYXllci5kYXRhU291cmNlLm9wdGlvbnMudHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAnd21zJzoge1xuICAgICAgICAgICAgY29uc3QgZGF0YXNvdXJjZU9wdGlvbnMgPSBsYXllci5kYXRhU291cmNlXG4gICAgICAgICAgICAgIC5vcHRpb25zIGFzIFdNU0RhdGFTb3VyY2VPcHRpb25zO1xuICAgICAgICAgICAgYWRkZWRMYXllciA9IGVuY29kZVVSSUNvbXBvbmVudChkYXRhc291cmNlT3B0aW9ucy5wYXJhbXMuTEFZRVJTKTtcbiAgICAgICAgICAgIGxheWVyVmVyc2lvbiA9XG4gICAgICAgICAgICAgIGRhdGFzb3VyY2VPcHRpb25zLnBhcmFtcy5WRVJTSU9OID09PSAnMS4zLjAnXG4gICAgICAgICAgICAgICAgPyBsYXllclZlcnNpb25cbiAgICAgICAgICAgICAgICA6IGRhdGFzb3VyY2VPcHRpb25zLnBhcmFtcy5WRVJTSU9OO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3dtdHMnOlxuICAgICAgICAgIGNhc2UgJ2FyY2dpc3Jlc3QnOlxuICAgICAgICAgIGNhc2UgJ2ltYWdlYXJjZ2lzcmVzdCc6XG4gICAgICAgICAgY2FzZSAndGlsZWFyY2dpc3Jlc3QnOlxuICAgICAgICAgICAgYWRkZWRMYXllciA9IGVuY29kZVVSSUNvbXBvbmVudChcbiAgICAgICAgICAgICAgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucyBhcyBhbnkpLmxheWVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWRkZWRMYXllclBvc2l0aW9uID0gYCR7YWRkZWRMYXllcn06aWdveiR7bGF5ZXIuekluZGV4fWA7XG5cbiAgICAgICAgbGV0IHZlcnNpb24gPSAnJztcbiAgICAgICAgaWYgKGxheWVyVmVyc2lvbikge1xuICAgICAgICAgIGNvbnN0IG9wZXJhdG9yID1cbiAgICAgICAgICAgIChsYXllci5kYXRhU291cmNlLm9wdGlvbnMgYXMgYW55KS51cmwuaW5kZXhPZignPycpID09PSAtMVxuICAgICAgICAgICAgICA/ICc/J1xuICAgICAgICAgICAgICA6ICcmJztcbiAgICAgICAgICB2ZXJzaW9uID0gZW5jb2RlVVJJQ29tcG9uZW50KGAke29wZXJhdG9yfVZFUlNJT049JHtsYXllclZlcnNpb259YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGlua1VybCA9IGAke2xpbmtVcmx9JHt2ZXJzaW9ufWA7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFhZGRlZExheWVyc0J5U2VydmljZS5maW5kKChkZWZpbmVkVXJsKSA9PiBkZWZpbmVkVXJsLnVybCA9PT0gbGlua1VybClcbiAgICAgICAgKSB7XG4gICAgICAgICAgYWRkZWRMYXllcnNCeVNlcnZpY2UucHVzaCh7XG4gICAgICAgICAgICB1cmw6IGxpbmtVcmwsXG4gICAgICAgICAgICBsYXllcnM6IFthZGRlZExheWVyUG9zaXRpb25dXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWRkZWRMYXllcnNCeVNlcnZpY2UuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNlcnZpY2UudXJsID09PSBsaW5rVXJsKSB7XG4gICAgICAgICAgICAgIHNlcnZpY2UubGF5ZXJzLnB1c2goYWRkZWRMYXllclBvc2l0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBhZGRlZExheWVyc1F1ZXJ5UGFyYW1zID0gJyc7XG4gICAgaWYgKGFkZGVkTGF5ZXJzQnlTZXJ2aWNlLmxlbmd0aCA+PSAxKSB7XG4gICAgICBsZXQgbGlua1VybEtleTtcbiAgICAgIGxldCBsYXllcnNLZXk7XG4gICAgICAvKlxuICAgICAgY29uc3QgbGlua1VybEtleSA9ICh0eXBlU2VydmljZSA9PT0gJ3dtcycpID8gdGhpcy5yb3V0ZS5vcHRpb25zLndtc1VybEtleSA6XG4gICAgICAgICh0eXBlU2VydmljZSA9PT0gJ3dtdHMnKSA/IHRoaXMucm91dGUub3B0aW9ucy53bXRzVXJsS2V5IDogJycgO1xuICAgICAgY29uc3QgbGF5ZXJzS2V5ID0gKHR5cGVTZXJ2aWNlID09PSAnd21zJykgPyB0aGlzLnJvdXRlLm9wdGlvbnMud21zTGF5ZXJzS2V5IDpcbiAgICAgICAgKHR5cGVTZXJ2aWNlID09PSAnd210cycpID8gdGhpcy5yb3V0ZS5vcHRpb25zLndtdHNMYXllcnNLZXkgOiAnJyA7XG4qL1xuICAgICAgc3dpdGNoICh0eXBlU2VydmljZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgJ3dtcyc6XG4gICAgICAgICAgbGlua1VybEtleSA9IHRoaXMucm91dGUub3B0aW9ucy53bXNVcmxLZXk7XG4gICAgICAgICAgbGF5ZXJzS2V5ID0gdGhpcy5yb3V0ZS5vcHRpb25zLndtc0xheWVyc0tleTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd210cyc6XG4gICAgICAgICAgbGlua1VybEtleSA9IHRoaXMucm91dGUub3B0aW9ucy53bXRzVXJsS2V5O1xuICAgICAgICAgIGxheWVyc0tleSA9IHRoaXMucm91dGUub3B0aW9ucy53bXRzTGF5ZXJzS2V5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhcmNnaXNyZXN0JzpcbiAgICAgICAgICBsaW5rVXJsS2V5ID0gdGhpcy5yb3V0ZS5vcHRpb25zLmFyY2dpc1VybEtleTtcbiAgICAgICAgICBsYXllcnNLZXkgPSB0aGlzLnJvdXRlLm9wdGlvbnMuYXJjZ2lzTGF5ZXJzS2V5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdpbWFnZWFyY2dpc3Jlc3QnOlxuICAgICAgICAgIGxpbmtVcmxLZXkgPSB0aGlzLnJvdXRlLm9wdGlvbnMuaWFyY2dpc1VybEtleTtcbiAgICAgICAgICBsYXllcnNLZXkgPSB0aGlzLnJvdXRlLm9wdGlvbnMuaWFyY2dpc0xheWVyc0tleTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndGlsZWFyY2dpc3Jlc3QnOlxuICAgICAgICAgIGxpbmtVcmxLZXkgPSB0aGlzLnJvdXRlLm9wdGlvbnMudGFyY2dpc1VybEtleTtcbiAgICAgICAgICBsYXllcnNLZXkgPSB0aGlzLnJvdXRlLm9wdGlvbnMudGFyY2dpc0xheWVyc0tleTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBsaW5rVXJsS2V5ID0gJyc7XG4gICAgICAgICAgbGF5ZXJzS2V5ID0gJyc7XG4gICAgICB9XG5cbiAgICAgIGxldCBsaW5rVXJsUXVlcnlQYXJhbXMgPSAnJztcbiAgICAgIGxldCBsYXllcnNRdWVyeVBhcmFtcyA9ICcnO1xuICAgICAgYWRkZWRMYXllcnNCeVNlcnZpY2UuZm9yRWFjaCgoc2VydmljZSkgPT4ge1xuICAgICAgICBsaW5rVXJsUXVlcnlQYXJhbXMgKz0gYCR7c2VydmljZS51cmx9LGA7XG4gICAgICAgIGxheWVyc1F1ZXJ5UGFyYW1zICs9IGAoJHtzZXJ2aWNlLmxheWVycy5qb2luKCcsJyl9KSxgO1xuICAgICAgfSk7XG4gICAgICBsaW5rVXJsUXVlcnlQYXJhbXMgPSBsaW5rVXJsUXVlcnlQYXJhbXMuZW5kc1dpdGgoJywnKVxuICAgICAgICA/IGxpbmtVcmxRdWVyeVBhcmFtcy5zbGljZSgwLCAtMSlcbiAgICAgICAgOiBsaW5rVXJsUXVlcnlQYXJhbXM7XG4gICAgICBsYXllcnNRdWVyeVBhcmFtcyA9IGxheWVyc1F1ZXJ5UGFyYW1zLmVuZHNXaXRoKCcsJylcbiAgICAgICAgPyBsYXllcnNRdWVyeVBhcmFtcy5zbGljZSgwLCAtMSlcbiAgICAgICAgOiBsYXllcnNRdWVyeVBhcmFtcztcbiAgICAgIGFkZGVkTGF5ZXJzUXVlcnlQYXJhbXMgPSBgJHtsaW5rVXJsS2V5fT0ke2xpbmtVcmxRdWVyeVBhcmFtc30mJHtsYXllcnNLZXl9PSR7bGF5ZXJzUXVlcnlQYXJhbXN9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkZWRMYXllcnNRdWVyeVBhcmFtcztcbiAgfVxufVxuIl19
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmUtbWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvc2hhcmUtbWFwL3NoYXJlZC9zaGFyZS1tYXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUF3QixXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7O0FBSzlFLE1BQU0sT0FBTyxlQUFlO0lBSWhCO0lBQ1k7SUFKZCxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBRXRCLFlBQ1UsY0FBOEIsRUFDbEIsS0FBbUI7UUFEL0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ2xCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFFdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDMUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFVO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFFBQVE7WUFDbEIsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsUUFBUSxZQUNwQyxVQUFVLENBQUMsR0FDYixTQUFTLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDMUIsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsUUFB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aUJBQ25COzswQkFNSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUm91dGVTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9yb3V0ZSc7XG5pbXBvcnQgeyBXTVNEYXRhU291cmNlT3B0aW9ucywgaXNMYXllckl0ZW0gfSBmcm9tICdAaWdvMi9nZW8nO1xuaW1wb3J0IHR5cGUgeyBJZ29NYXAsIExheWVyIH0gZnJvbSAnQGlnbzIvZ2VvJztcblxuaW1wb3J0IHsgRGV0YWlsZWRDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC1tYW5hZ2VyL3NoYXJlZC9jb250ZXh0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvbnRleHQtbWFuYWdlci9zaGFyZWQvY29udGV4dC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2hhcmVNYXBTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBsYW5ndWFnZSA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcm91dGU6IFJvdXRlU2VydmljZVxuICApIHtcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XG4gICAgICBpZiAocGFyYW1zWydsYW5nJ10pIHtcbiAgICAgICAgdGhpcy5sYW5ndWFnZSA9IHBhcmFtc1snbGFuZyddO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXJsV2l0aEFwaShmb3JtVmFsdWVzKSB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VcbiAgICAgID8gYCR7bG9jYXRpb24ub3JpZ2luICsgbG9jYXRpb24ucGF0aG5hbWV9P2NvbnRleHQ9JHtcbiAgICAgICAgICBmb3JtVmFsdWVzLnVyaVxuICAgICAgICB9Jmxhbmc9JHt0aGlzLmxhbmd1YWdlfWBcbiAgICAgIDogYCR7bG9jYXRpb24ub3JpZ2luICsgbG9jYXRpb24ucGF0aG5hbWV9P2NvbnRleHQ9JHtmb3JtVmFsdWVzLnVyaX1gO1xuICB9XG5cbiAgY3JlYXRlQ29udGV4dFNoYXJlZChtYXA6IElnb01hcCwgZm9ybVZhbHVlcykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLmdldENvbnRleHRGcm9tTWFwKG1hcCk7XG4gICAgY29udGV4dC5zY29wZSA9ICdwdWJsaWMnO1xuICAgIGNvbnRleHQudGl0bGUgPSBmb3JtVmFsdWVzLnRpdGxlO1xuICAgIGNvbnRleHQudXJpID0gZm9ybVZhbHVlcy51cmk7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dFNlcnZpY2UuY3JlYXRlKGNvbnRleHQpO1xuICB9XG5cbiAgdXBkYXRlQ29udGV4dFNoYXJlZChtYXA6IElnb01hcCwgZm9ybVZhbHVlcywgaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLmdldENvbnRleHRGcm9tTWFwKG1hcCk7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dFNlcnZpY2UudXBkYXRlKGlkLCB7XG4gICAgICB0aXRsZTogZm9ybVZhbHVlcy50aXRsZSxcbiAgICAgIG1hcDogY29udGV4dC5tYXBcbiAgICB9IGFzIERldGFpbGVkQ29udGV4dCk7XG4gIH1cblxuICBnZXRVcmxXaXRob3V0QXBpKG1hcDogSWdvTWFwLCBwdWJsaWNTaGFyZU9wdGlvbikge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnJvdXRlIHx8XG4gICAgICAhdGhpcy5yb3V0ZS5vcHRpb25zLnZpc2libGVPbkxheWVyc0tleSB8fFxuICAgICAgIXRoaXMucm91dGUub3B0aW9ucy52aXNpYmxlT2ZmTGF5ZXJzS2V5IHx8XG4gICAgICAhbWFwLnZpZXdDb250cm9sbGVyLmdldFpvb20oKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsbGMgPSBwdWJsaWNTaGFyZU9wdGlvbi5sYXllcmxpc3RDb250cm9scy5xdWVyeXN0cmluZztcblxuICAgIGxldCB2aXNpYmxlS2V5ID0gdGhpcy5yb3V0ZS5vcHRpb25zLnZpc2libGVPbkxheWVyc0tleTtcbiAgICBsZXQgaW52aXNpYmxlS2V5ID0gdGhpcy5yb3V0ZS5vcHRpb25zLnZpc2libGVPZmZMYXllcnNLZXk7XG4gICAgY29uc3QgbGF5ZXJzID0gbWFwLmxheWVyQ29udHJvbGxlci5hbGwuZmlsdGVyKChsYXllcikgPT5cbiAgICAgIGlzTGF5ZXJJdGVtKGxheWVyKVxuICAgICkgYXMgTGF5ZXJbXTtcblxuICAgIGNvbnN0IHZpc2libGVMYXllcnMgPSBsYXllcnMuZmlsdGVyKFxuICAgICAgKGxheSkgPT4gbGF5LnZpc2libGUgJiYgIWxheS5pc0lnb0ludGVybmFsTGF5ZXJcbiAgICApO1xuICAgIGNvbnN0IGludmlzaWJsZUxheWVycyA9IGxheWVycy5maWx0ZXIoXG4gICAgICAobGF5KSA9PiAhbGF5LnZpc2libGUgJiYgIWxheS5pc0lnb0ludGVybmFsTGF5ZXJcbiAgICApO1xuXG4gICAgaWYgKHZpc2libGVMYXllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB2aXNpYmxlS2V5ID0gJyc7XG4gICAgfVxuICAgIGlmIChpbnZpc2libGVMYXllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbnZpc2libGVLZXkgPSAnJztcbiAgICB9XG5cbiAgICBsZXQgbGF5ZXJzVXJsID0gJyc7XG4gICAgbGV0IGxheWVyc1RvTG9vcCA9IFtdO1xuICAgIGlmICh2aXNpYmxlTGF5ZXJzLmxlbmd0aCA+IGludmlzaWJsZUxheWVycy5sZW5ndGgpIHtcbiAgICAgIGxheWVyc1VybCA9IGAke3Zpc2libGVLZXl9PSomJHtpbnZpc2libGVLZXl9PWA7XG4gICAgICBsYXllcnNUb0xvb3AgPSBpbnZpc2libGVMYXllcnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxheWVyc1VybCA9IGAke2ludmlzaWJsZUtleX09KiYke3Zpc2libGVLZXl9PWA7XG4gICAgICBsYXllcnNUb0xvb3AgPSB2aXNpYmxlTGF5ZXJzO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzVG9Mb29wKSB7XG4gICAgICBpZiAobGF5ZXIuaWQpIHtcbiAgICAgICAgbGF5ZXJzVXJsICs9IGxheWVyLmlkICsgJywnO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb250ZXh0TGF5ZXJzSUQgPSBbXTtcbiAgICBjb25zdCBjb250ZXh0TGF5ZXJzID0gdGhpcy5jb250ZXh0U2VydmljZS5jb250ZXh0JC52YWx1ZS5sYXllcnM7XG4gICAgZm9yIChjb25zdCBjb250ZXh0TGF5ZXIgb2YgY29udGV4dExheWVycykge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgY29udGV4dExheWVyLmlkICE9PSAndW5kZWZpbmVkJyB8fFxuICAgICAgICB0eXBlb2YgKGNvbnRleHRMYXllciBhcyBhbnkpLnNvdXJjZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICkge1xuICAgICAgICBjb250ZXh0TGF5ZXJzSUQucHVzaChcbiAgICAgICAgICBjb250ZXh0TGF5ZXIuaWQgfHwgKGNvbnRleHRMYXllciBhcyBhbnkpLnNvdXJjZS5pZFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFkZGVkTGF5ZXJzUXVlcnlQYXJhbXNXbXMgPSB0aGlzLm1ha2VMYXllcnNCeVNlcnZpY2UoXG4gICAgICBsYXllcnMsXG4gICAgICBjb250ZXh0TGF5ZXJzSUQsXG4gICAgICAnd21zJ1xuICAgICk7XG4gICAgY29uc3QgYWRkZWRMYXllcnNRdWVyeVBhcmFtc1dtdHMgPSB0aGlzLm1ha2VMYXllcnNCeVNlcnZpY2UoXG4gICAgICBsYXllcnMsXG4gICAgICBjb250ZXh0TGF5ZXJzSUQsXG4gICAgICAnd210cydcbiAgICApO1xuICAgIGNvbnN0IGFkZGVkTGF5ZXJzUXVlcnlQYXJhbXNBcmNnaXNSZXN0ID0gdGhpcy5tYWtlTGF5ZXJzQnlTZXJ2aWNlKFxuICAgICAgbGF5ZXJzLFxuICAgICAgY29udGV4dExheWVyc0lELFxuICAgICAgJ2FyY2dpc3Jlc3QnXG4gICAgKTtcbiAgICBjb25zdCBhZGRlZExheWVyc1F1ZXJ5UGFyYW1zSW1hZ2VBcmNnaXNSZXN0ID0gdGhpcy5tYWtlTGF5ZXJzQnlTZXJ2aWNlKFxuICAgICAgbGF5ZXJzLFxuICAgICAgY29udGV4dExheWVyc0lELFxuICAgICAgJ2ltYWdlYXJjZ2lzcmVzdCdcbiAgICApO1xuICAgIGNvbnN0IGFkZGVkTGF5ZXJzUXVlcnlQYXJhbXNUaWxlQXJjZ2lzUmVzdCA9IHRoaXMubWFrZUxheWVyc0J5U2VydmljZShcbiAgICAgIGxheWVycyxcbiAgICAgIGNvbnRleHRMYXllcnNJRCxcbiAgICAgICd0aWxlYXJjZ2lzcmVzdCdcbiAgICApO1xuXG4gICAgbGF5ZXJzVXJsID0gbGF5ZXJzVXJsLnN1YnN0cigwLCBsYXllcnNVcmwubGVuZ3RoIC0gMSk7XG5cbiAgICBjb25zdCB6b29tS2V5ID0gdGhpcy5yb3V0ZS5vcHRpb25zLnpvb21LZXk7XG4gICAgY29uc3QgY2VudGVyS2V5ID0gdGhpcy5yb3V0ZS5vcHRpb25zLmNlbnRlcktleTtcbiAgICBjb25zdCBjb250ZXh0S2V5ID0gdGhpcy5yb3V0ZS5vcHRpb25zLmNvbnRleHRLZXk7XG5cbiAgICBjb25zdCB6b29tID0gYCR7em9vbUtleX09JHttYXAudmlld0NvbnRyb2xsZXIuZ2V0Wm9vbSgpfWA7XG4gICAgY29uc3QgYXJyYXlDZW50ZXIgPSBtYXAudmlld0NvbnRyb2xsZXIuZ2V0Q2VudGVyKCdFUFNHOjQzMjYnKSB8fCBbXTtcbiAgICBjb25zdCBsb25nID0gYXJyYXlDZW50ZXJbMF0udG9GaXhlZCg1KS5yZXBsYWNlKC9cXC4oW14wXSspMCskLywgJy4kMScpO1xuICAgIGNvbnN0IGxhdCA9IGFycmF5Q2VudGVyWzFdLnRvRml4ZWQoNSkucmVwbGFjZSgvXFwuKFteMF0rKTArJC8sICcuJDEnKTtcbiAgICBjb25zdCBjZW50ZXIgPSBgJHtjZW50ZXJLZXl9PSR7bG9uZ30sJHtsYXR9YC5yZXBsYWNlKC8uMDAwMDAvZywgJycpO1xuICAgIGxldCBjb250ZXh0ID0gJyc7XG4gICAgaWYgKHRoaXMuY29udGV4dFNlcnZpY2UuY29udGV4dCQudmFsdWUpIHtcbiAgICAgIGNvbnRleHQgPSBgJHtjb250ZXh0S2V5fT0ke3RoaXMuY29udGV4dFNlcnZpY2UuY29udGV4dCQudmFsdWUudXJpfWA7XG4gICAgfVxuXG4gICAgbGV0IHVybCA9IHRoaXMubGFuZ3VhZ2VcbiAgICAgID8gYCR7bG9jYXRpb24ub3JpZ2lufSR7bG9jYXRpb24ucGF0aG5hbWV9PyR7Y29udGV4dH0mJHt6b29tfSYke2NlbnRlcn0mJHtsYXllcnNVcmx9JiR7bGxjfSYke2FkZGVkTGF5ZXJzUXVlcnlQYXJhbXNXbXN9JiR7bGxjfSYke2FkZGVkTGF5ZXJzUXVlcnlQYXJhbXNXbXRzfSYke2FkZGVkTGF5ZXJzUXVlcnlQYXJhbXNBcmNnaXNSZXN0fSYke2FkZGVkTGF5ZXJzUXVlcnlQYXJhbXNJbWFnZUFyY2dpc1Jlc3R9JiR7YWRkZWRMYXllcnNRdWVyeVBhcmFtc1RpbGVBcmNnaXNSZXN0fSZsYW5nPSR7dGhpcy5sYW5ndWFnZX1gXG4gICAgICA6IGAke2xvY2F0aW9uLm9yaWdpbn0ke2xvY2F0aW9uLnBhdGhuYW1lfT8ke2NvbnRleHR9JiR7em9vbX0mJHtjZW50ZXJ9JiR7bGF5ZXJzVXJsfSYke2xsY30mJHthZGRlZExheWVyc1F1ZXJ5UGFyYW1zV21zfSYke2xsY30mJHthZGRlZExheWVyc1F1ZXJ5UGFyYW1zV210c30mJHthZGRlZExheWVyc1F1ZXJ5UGFyYW1zQXJjZ2lzUmVzdH0mJHthZGRlZExheWVyc1F1ZXJ5UGFyYW1zSW1hZ2VBcmNnaXNSZXN0fSYke2FkZGVkTGF5ZXJzUXVlcnlQYXJhbXNUaWxlQXJjZ2lzUmVzdH1gO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG4gICAgICB1cmwgPSB1cmwucmVwbGFjZSgvJiYvZywgJyYnKTtcbiAgICAgIHVybCA9IHVybC5lbmRzV2l0aCgnJicpID8gdXJsLnNsaWNlKDAsIC0xKSA6IHVybDtcbiAgICB9XG4gICAgdXJsID0gdXJsLmVuZHNXaXRoKCcmJykgPyB1cmwuc2xpY2UoMCwgLTEpIDogdXJsO1xuICAgIHVybCA9IHVybC5yZXBsYWNlKCc/JndtJywgJyZ3bScpO1xuICAgIHVybCA9IHVybC5yZXBsYWNlKCc/JicsICc/Jyk7XG5cbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlTGF5ZXJzQnlTZXJ2aWNlKFxuICAgIGxheWVyczogTGF5ZXJbXSxcbiAgICBjb250ZXh0TGF5ZXJzSUQ6IGFueVtdLFxuICAgIHR5cGVTZXJ2aWNlOiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBhZGRlZExheWVyc0J5U2VydmljZSA9IFtdO1xuICAgIGZvciAoY29uc3QgbGF5ZXIgb2YgbGF5ZXJzLmZpbHRlcihcbiAgICAgIChsKSA9PiBsLmRhdGFTb3VyY2Uub3B0aW9ucz8udHlwZSA9PT0gdHlwZVNlcnZpY2VcbiAgICApKSB7XG4gICAgICBpZiAoY29udGV4dExheWVyc0lELmluZGV4T2YobGF5ZXIuaWQpID09PSAtMSkge1xuICAgICAgICBsZXQgbGlua1VybCA9IGVuY29kZVVSSUNvbXBvbmVudCgobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zIGFzIGFueSkudXJsKTtcbiAgICAgICAgbGV0IGFkZGVkTGF5ZXIgPSAnJztcbiAgICAgICAgbGV0IGxheWVyVmVyc2lvbjogc3RyaW5nO1xuICAgICAgICBzd2l0Y2ggKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy50eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjYXNlICd3bXMnOiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhc291cmNlT3B0aW9ucyA9IGxheWVyLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgLm9wdGlvbnMgYXMgV01TRGF0YVNvdXJjZU9wdGlvbnM7XG4gICAgICAgICAgICBhZGRlZExheWVyID0gZW5jb2RlVVJJQ29tcG9uZW50KGRhdGFzb3VyY2VPcHRpb25zLnBhcmFtcy5MQVlFUlMpO1xuICAgICAgICAgICAgbGF5ZXJWZXJzaW9uID1cbiAgICAgICAgICAgICAgZGF0YXNvdXJjZU9wdGlvbnMucGFyYW1zLlZFUlNJT04gPT09ICcxLjMuMCdcbiAgICAgICAgICAgICAgICA/IGxheWVyVmVyc2lvblxuICAgICAgICAgICAgICAgIDogZGF0YXNvdXJjZU9wdGlvbnMucGFyYW1zLlZFUlNJT047XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAnd210cyc6XG4gICAgICAgICAgY2FzZSAnYXJjZ2lzcmVzdCc6XG4gICAgICAgICAgY2FzZSAnaW1hZ2VhcmNnaXNyZXN0JzpcbiAgICAgICAgICBjYXNlICd0aWxlYXJjZ2lzcmVzdCc6XG4gICAgICAgICAgICBhZGRlZExheWVyID0gZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICAgICAgICAobGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zIGFzIGFueSkubGF5ZXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZGRlZExheWVyUG9zaXRpb24gPSBgJHthZGRlZExheWVyfTppZ296JHtsYXllci56SW5kZXh9YDtcblxuICAgICAgICBsZXQgdmVyc2lvbiA9ICcnO1xuICAgICAgICBpZiAobGF5ZXJWZXJzaW9uKSB7XG4gICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPVxuICAgICAgICAgICAgKGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucyBhcyBhbnkpLnVybC5pbmRleE9mKCc/JykgPT09IC0xXG4gICAgICAgICAgICAgID8gJz8nXG4gICAgICAgICAgICAgIDogJyYnO1xuICAgICAgICAgIHZlcnNpb24gPSBlbmNvZGVVUklDb21wb25lbnQoYCR7b3BlcmF0b3J9VkVSU0lPTj0ke2xheWVyVmVyc2lvbn1gKTtcbiAgICAgICAgfVxuICAgICAgICBsaW5rVXJsID0gYCR7bGlua1VybH0ke3ZlcnNpb259YDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWFkZGVkTGF5ZXJzQnlTZXJ2aWNlLmZpbmQoKGRlZmluZWRVcmwpID0+IGRlZmluZWRVcmwudXJsID09PSBsaW5rVXJsKVxuICAgICAgICApIHtcbiAgICAgICAgICBhZGRlZExheWVyc0J5U2VydmljZS5wdXNoKHtcbiAgICAgICAgICAgIHVybDogbGlua1VybCxcbiAgICAgICAgICAgIGxheWVyczogW2FkZGVkTGF5ZXJQb3NpdGlvbl1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRlZExheWVyc0J5U2VydmljZS5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VydmljZS51cmwgPT09IGxpbmtVcmwpIHtcbiAgICAgICAgICAgICAgc2VydmljZS5sYXllcnMucHVzaChhZGRlZExheWVyUG9zaXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGFkZGVkTGF5ZXJzUXVlcnlQYXJhbXMgPSAnJztcbiAgICBpZiAoYWRkZWRMYXllcnNCeVNlcnZpY2UubGVuZ3RoID49IDEpIHtcbiAgICAgIGxldCBsaW5rVXJsS2V5O1xuICAgICAgbGV0IGxheWVyc0tleTtcbiAgICAgIC8qXG4gICAgICBjb25zdCBsaW5rVXJsS2V5ID0gKHR5cGVTZXJ2aWNlID09PSAnd21zJykgPyB0aGlzLnJvdXRlLm9wdGlvbnMud21zVXJsS2V5IDpcbiAgICAgICAgKHR5cGVTZXJ2aWNlID09PSAnd210cycpID8gdGhpcy5yb3V0ZS5vcHRpb25zLndtdHNVcmxLZXkgOiAnJyA7XG4gICAgICBjb25zdCBsYXllcnNLZXkgPSAodHlwZVNlcnZpY2UgPT09ICd3bXMnKSA/IHRoaXMucm91dGUub3B0aW9ucy53bXNMYXllcnNLZXkgOlxuICAgICAgICAodHlwZVNlcnZpY2UgPT09ICd3bXRzJykgPyB0aGlzLnJvdXRlLm9wdGlvbnMud210c0xheWVyc0tleSA6ICcnIDtcbiovXG4gICAgICBzd2l0Y2ggKHR5cGVTZXJ2aWNlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnd21zJzpcbiAgICAgICAgICBsaW5rVXJsS2V5ID0gdGhpcy5yb3V0ZS5vcHRpb25zLndtc1VybEtleTtcbiAgICAgICAgICBsYXllcnNLZXkgPSB0aGlzLnJvdXRlLm9wdGlvbnMud21zTGF5ZXJzS2V5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd3bXRzJzpcbiAgICAgICAgICBsaW5rVXJsS2V5ID0gdGhpcy5yb3V0ZS5vcHRpb25zLndtdHNVcmxLZXk7XG4gICAgICAgICAgbGF5ZXJzS2V5ID0gdGhpcy5yb3V0ZS5vcHRpb25zLndtdHNMYXllcnNLZXk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2FyY2dpc3Jlc3QnOlxuICAgICAgICAgIGxpbmtVcmxLZXkgPSB0aGlzLnJvdXRlLm9wdGlvbnMuYXJjZ2lzVXJsS2V5O1xuICAgICAgICAgIGxheWVyc0tleSA9IHRoaXMucm91dGUub3B0aW9ucy5hcmNnaXNMYXllcnNLZXk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ltYWdlYXJjZ2lzcmVzdCc6XG4gICAgICAgICAgbGlua1VybEtleSA9IHRoaXMucm91dGUub3B0aW9ucy5pYXJjZ2lzVXJsS2V5O1xuICAgICAgICAgIGxheWVyc0tleSA9IHRoaXMucm91dGUub3B0aW9ucy5pYXJjZ2lzTGF5ZXJzS2V5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0aWxlYXJjZ2lzcmVzdCc6XG4gICAgICAgICAgbGlua1VybEtleSA9IHRoaXMucm91dGUub3B0aW9ucy50YXJjZ2lzVXJsS2V5O1xuICAgICAgICAgIGxheWVyc0tleSA9IHRoaXMucm91dGUub3B0aW9ucy50YXJjZ2lzTGF5ZXJzS2V5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGxpbmtVcmxLZXkgPSAnJztcbiAgICAgICAgICBsYXllcnNLZXkgPSAnJztcbiAgICAgIH1cblxuICAgICAgbGV0IGxpbmtVcmxRdWVyeVBhcmFtcyA9ICcnO1xuICAgICAgbGV0IGxheWVyc1F1ZXJ5UGFyYW1zID0gJyc7XG4gICAgICBhZGRlZExheWVyc0J5U2VydmljZS5mb3JFYWNoKChzZXJ2aWNlKSA9PiB7XG4gICAgICAgIGxpbmtVcmxRdWVyeVBhcmFtcyArPSBgJHtzZXJ2aWNlLnVybH0sYDtcbiAgICAgICAgbGF5ZXJzUXVlcnlQYXJhbXMgKz0gYCgke3NlcnZpY2UubGF5ZXJzLmpvaW4oJywnKX0pLGA7XG4gICAgICB9KTtcbiAgICAgIGxpbmtVcmxRdWVyeVBhcmFtcyA9IGxpbmtVcmxRdWVyeVBhcmFtcy5lbmRzV2l0aCgnLCcpXG4gICAgICAgID8gbGlua1VybFF1ZXJ5UGFyYW1zLnNsaWNlKDAsIC0xKVxuICAgICAgICA6IGxpbmtVcmxRdWVyeVBhcmFtcztcbiAgICAgIGxheWVyc1F1ZXJ5UGFyYW1zID0gbGF5ZXJzUXVlcnlQYXJhbXMuZW5kc1dpdGgoJywnKVxuICAgICAgICA/IGxheWVyc1F1ZXJ5UGFyYW1zLnNsaWNlKDAsIC0xKVxuICAgICAgICA6IGxheWVyc1F1ZXJ5UGFyYW1zO1xuICAgICAgYWRkZWRMYXllcnNRdWVyeVBhcmFtcyA9IGAke2xpbmtVcmxLZXl9PSR7bGlua1VybFF1ZXJ5UGFyYW1zfSYke2xheWVyc0tleX09JHtsYXllcnNRdWVyeVBhcmFtc31gO1xuICAgIH1cblxuICAgIHJldHVybiBhZGRlZExheWVyc1F1ZXJ5UGFyYW1zO1xuICB9XG59XG4iXX0=
|
|
@@ -22,14 +22,14 @@ import * as i1$1 from '@igo2/core/config';
|
|
|
22
22
|
import * as i4 from '@igo2/core/language';
|
|
23
23
|
import { IgoLanguageModule } from '@igo2/core/language';
|
|
24
24
|
import * as i3 from '@igo2/core/message';
|
|
25
|
-
import { BehaviorSubject, Subject, of, Observable, ReplaySubject, timer,
|
|
26
|
-
import { skip, first, catchError, tap, map, mergeMap, debounceTime, take, debounce, filter
|
|
25
|
+
import { BehaviorSubject, Subject, of, Observable, ReplaySubject, timer, EMPTY, combineLatest } from 'rxjs';
|
|
26
|
+
import { skip, first, catchError, tap, map, mergeMap, debounceTime, take, debounce, filter } from 'rxjs/operators';
|
|
27
27
|
import * as i1 from '@angular/common/http';
|
|
28
28
|
import * as i2 from '@igo2/auth';
|
|
29
29
|
import * as i8 from '@igo2/core/route';
|
|
30
30
|
import * as i6 from '@igo2/core/storage';
|
|
31
31
|
import * as i1$2 from '@igo2/geo';
|
|
32
|
-
import { FeatureDataSource, featureRandomStyleFunction, featureRandomStyle, VectorLayer, ClusterDataSource, moveToOlFeatures, FeatureMotion, FeatureDetailsComponent } from '@igo2/geo';
|
|
32
|
+
import { isLayerGroup, FeatureDataSource, featureRandomStyleFunction, featureRandomStyle, VectorLayer, ClusterDataSource, isLayerGroupOptions, sortLayersByZindex, isLayerItem, moveToOlFeatures, FeatureMotion, FeatureDetailsComponent } from '@igo2/geo';
|
|
33
33
|
import { ObjectUtils, uuid, downloadContent, Clipboard } from '@igo2/utils';
|
|
34
34
|
import GeoJSON from 'ol/format/GeoJSON';
|
|
35
35
|
import olPoint from 'ol/geom/Point';
|
|
@@ -417,30 +417,17 @@ class ContextService {
|
|
|
417
417
|
layers: [],
|
|
418
418
|
tools: []
|
|
419
419
|
};
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
.filter((lay) => !lay.id.includes('WfsWorkspaceTableDest'))
|
|
432
|
-
.sort((a, b) => a.zIndex - b.zIndex);
|
|
433
|
-
}
|
|
434
|
-
for (const layer of layers) {
|
|
435
|
-
const opts = {
|
|
436
|
-
id: layer.options.id ? String(layer.options.id) : undefined,
|
|
437
|
-
layerOptions: layer.saveableOptions,
|
|
438
|
-
sourceOptions: layer.dataSource.saveableOptions
|
|
439
|
-
};
|
|
440
|
-
if (opts.sourceOptions.type) {
|
|
441
|
-
context.layers.push(opts);
|
|
442
|
-
}
|
|
443
|
-
}
|
|
420
|
+
const layers = empty
|
|
421
|
+
? []
|
|
422
|
+
: [...igoMap.layerController.treeLayers];
|
|
423
|
+
const baseLayer = igoMap.layerController.baseLayer;
|
|
424
|
+
if (baseLayer) {
|
|
425
|
+
layers.unshift(baseLayer);
|
|
426
|
+
}
|
|
427
|
+
// Remove null for the first level, the LayerGroup is already doing that for it's children
|
|
428
|
+
context.layers = layers
|
|
429
|
+
.map((layer) => layer.saveableOptions)
|
|
430
|
+
.filter(Boolean);
|
|
444
431
|
context.tools = this.tools.map((tool) => {
|
|
445
432
|
return {
|
|
446
433
|
id: String(tool.id),
|
|
@@ -450,7 +437,6 @@ class ContextService {
|
|
|
450
437
|
return context;
|
|
451
438
|
}
|
|
452
439
|
getContextFromLayers(igoMap, layers, name, keepCurrentView) {
|
|
453
|
-
const currentContext = this.context$.getValue();
|
|
454
440
|
const view = igoMap.ol.getView();
|
|
455
441
|
const proj = view.getProjection().getCode();
|
|
456
442
|
const center = new olPoint(view.getCenter()).transform(proj, 'EPSG:4326');
|
|
@@ -470,10 +456,7 @@ class ContextService {
|
|
|
470
456
|
tools: [],
|
|
471
457
|
extraFeatures: []
|
|
472
458
|
};
|
|
473
|
-
|
|
474
|
-
context.layers = currentLayers
|
|
475
|
-
.filter((l) => l.baseLayer)
|
|
476
|
-
.map((l) => {
|
|
459
|
+
context.layers = igoMap.layerController.baseLayers.map((l) => {
|
|
477
460
|
return {
|
|
478
461
|
baseLayer: true,
|
|
479
462
|
sourceOptions: l.options.sourceOptions,
|
|
@@ -482,32 +465,16 @@ class ContextService {
|
|
|
482
465
|
};
|
|
483
466
|
});
|
|
484
467
|
layers.forEach((layer) => {
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
}
|
|
496
|
-
else if (layerFoundAs.igoStyle?.clusterBaseStyle) {
|
|
497
|
-
layerStyle = undefined;
|
|
498
|
-
delete layerFound.sourceOptions[`source`];
|
|
499
|
-
delete layerFound.sourceOptions[`format`];
|
|
500
|
-
}
|
|
501
|
-
delete layerFound.source;
|
|
502
|
-
const opts = {
|
|
503
|
-
...layerFound,
|
|
504
|
-
title: layer.options.title,
|
|
505
|
-
zIndex: layer.zIndex,
|
|
506
|
-
style: layerStyle,
|
|
507
|
-
visible: layer.visible,
|
|
508
|
-
opacity: layer.opacity
|
|
509
|
-
};
|
|
510
|
-
context.layers.push(opts);
|
|
468
|
+
if (isLayerGroup(layer)) {
|
|
469
|
+
return context.layers.push(layer.options);
|
|
470
|
+
}
|
|
471
|
+
if (!(layer.ol.getSource() instanceof olVectorSource)) {
|
|
472
|
+
const layerOptions = layer.options;
|
|
473
|
+
layerOptions.zIndex = layer.zIndex;
|
|
474
|
+
layerOptions.visible = layer.visible;
|
|
475
|
+
layerOptions.opacity = layer.opacity;
|
|
476
|
+
delete layerOptions.source;
|
|
477
|
+
context.layers.push(layerOptions);
|
|
511
478
|
}
|
|
512
479
|
else {
|
|
513
480
|
if (!(layer.ol.getSource() instanceof olVectorSource)) {
|
|
@@ -598,15 +565,8 @@ class ContextService {
|
|
|
598
565
|
return this.getLocalContext(uri);
|
|
599
566
|
}
|
|
600
567
|
}
|
|
601
|
-
getContextLayers(
|
|
602
|
-
|
|
603
|
-
const mapLayers = igoMap.layers$.getValue();
|
|
604
|
-
mapLayers.forEach((layer) => {
|
|
605
|
-
if (!layer.baseLayer && layer.options.id !== 'searchPointerSummaryId') {
|
|
606
|
-
layers.push(layer);
|
|
607
|
-
}
|
|
608
|
-
});
|
|
609
|
-
return layers;
|
|
568
|
+
getContextLayers(map) {
|
|
569
|
+
return map.layerController.treeLayers;
|
|
610
570
|
}
|
|
611
571
|
readParamsFromRoute() {
|
|
612
572
|
if (!this.route) {
|
|
@@ -891,7 +851,7 @@ function addImportedFeaturesToMap(extraFeatures, map) {
|
|
|
891
851
|
visible: extraFeatures.visible,
|
|
892
852
|
opacity: extraFeatures.opacity
|
|
893
853
|
});
|
|
894
|
-
map.
|
|
854
|
+
map.layerController.add(layer);
|
|
895
855
|
return layer;
|
|
896
856
|
}
|
|
897
857
|
function addImportedFeaturesStyledToMap(extraFeatures, map, styleListService, styleService) {
|
|
@@ -944,7 +904,7 @@ function addImportedFeaturesStyledToMap(extraFeatures, map, styleListService, st
|
|
|
944
904
|
opacity: extraFeatures.opacity,
|
|
945
905
|
visible: extraFeatures.visible
|
|
946
906
|
});
|
|
947
|
-
map.
|
|
907
|
+
map.layerController.add(layer);
|
|
948
908
|
return layer;
|
|
949
909
|
}
|
|
950
910
|
function collectFeaturesFromExtraFeatures(featureCollection) {
|
|
@@ -1049,7 +1009,6 @@ class ContextImportExportComponent {
|
|
|
1049
1009
|
clientSideFileSizeMax;
|
|
1050
1010
|
fileSizeMb;
|
|
1051
1011
|
activeImportExport = 'import';
|
|
1052
|
-
layers$$;
|
|
1053
1012
|
map;
|
|
1054
1013
|
constructor(contextImportService, contextExportService, messageService, formBuilder, config, contextService) {
|
|
1055
1014
|
this.contextImportService = contextImportService;
|
|
@@ -1065,10 +1024,8 @@ class ContextImportExportComponent {
|
|
|
1065
1024
|
this.clientSideFileSizeMax =
|
|
1066
1025
|
(configFileSizeMb ? configFileSizeMb : 30) * Math.pow(1024, 2);
|
|
1067
1026
|
this.fileSizeMb = this.clientSideFileSizeMax / Math.pow(1024, 2);
|
|
1068
|
-
this.
|
|
1069
|
-
|
|
1070
|
-
this.userControlledLayerList = this.layerList.filter((layer) => layer.showInLayerList);
|
|
1071
|
-
});
|
|
1027
|
+
this.layerList = this.map.layerController.all;
|
|
1028
|
+
this.userControlledLayerList = this.map.layerController.treeLayers;
|
|
1072
1029
|
}
|
|
1073
1030
|
importFiles(files) {
|
|
1074
1031
|
this.loading$.next(true);
|
|
@@ -1128,9 +1085,6 @@ class ContextImportExportComponent {
|
|
|
1128
1085
|
onImportExportChange(event) {
|
|
1129
1086
|
this.activeImportExport = event.value;
|
|
1130
1087
|
}
|
|
1131
|
-
ngOnDestroy() {
|
|
1132
|
-
this.layers$$.unsubscribe();
|
|
1133
|
-
}
|
|
1134
1088
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContextImportExportComponent, deps: [{ token: ContextImportService }, { token: ContextExportService }, { token: i3.MessageService }, { token: i1$3.UntypedFormBuilder }, { token: i1$1.ConfigService }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1135
1089
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ContextImportExportComponent, isStandalone: true, selector: "igo-context-import-export", inputs: { map: "map" }, ngImport: i0, template: "<div class=\"import-export-toggle mat-typography\">\n <mat-button-toggle-group\n [value]=\"activeImportExport\"\n (change)=\"onImportExportChange($event)\"\n >\n <mat-button-toggle [value]=\"'import'\">\n {{ 'igo.geo.importExportForm.importTabTitle' | translate }}\n </mat-button-toggle>\n <mat-button-toggle [value]=\"'export'\">\n {{ 'igo.geo.importExportForm.exportTabTitle' | translate }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n</div>\n\n<div *ngIf=\"activeImportExport === 'import'\">\n <form class=\"igo-form\">\n <div class=\"igo-form-button-group\">\n <button\n mat-raised-button\n type=\"button\"\n (click)=\"fileInput.click()\"\n [disabled]=\"loading$ | async\"\n >\n {{ 'igo.geo.importExportForm.importButton' | translate }}\n </button>\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\n <input\n #fileInput\n type=\"file\"\n [style.display]=\"'none'\"\n (click)=\"fileInput.value = null\"\n (change)=\"importFiles($any($event.target).files)\"\n />\n </div>\n </form>\n <section class=\"mat-typography\">\n <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\n <ul>\n <li>\n {{\n 'igo.geo.importExportForm.importSizeMax'\n | translate: { size: fileSizeMb }\n }}\n </li>\n </ul>\n </section>\n</div>\n\n<form\n class=\"igo-form\"\n *ngIf=\"activeImportExport === 'export'\"\n [formGroup]=\"form\"\n>\n <div class=\"igo-input-container\">\n <mat-form-field class=\"example-full-width\">\n <mat-label>{{\n 'igo.context.contextImportExport.export.exportContextName' | translate\n }}</mat-label>\n <input formControlName=\"name\" matInput [value]=\"\" />\n </mat-form-field>\n </div>\n <div class=\"igo-input-container\">\n <mat-form-field>\n <mat-label>{{\n 'igo.context.contextImportExport.export.exportPlaceHolder' | translate\n }}</mat-label>\n <mat-select formControlName=\"layers\" multiple>\n <mat-option [value]=\"1\" (click)=\"selectAll(e)\" #e>\n {{\n 'igo.context.contextImportExport.export.exportSelectAll' | translate\n }}\n </mat-option>\n <mat-divider></mat-divider>\n <mat-option\n *ngFor=\"let layer of userControlledLayerList\"\n [value]=\"layer\"\n >{{ layer.title }}</mat-option\n >\n </mat-select>\n </mat-form-field>\n </div>\n <div class=\"igo-form-button-group\">\n <button\n mat-raised-button\n type=\"button\"\n [disabled]=\"!form.valid || (loading$ | async)\"\n (click)=\"handleExportFormSubmit(form.value)\"\n >\n {{ 'igo.geo.importExportForm.exportButton' | translate }}\n </button>\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\n </div>\n</form>\n", styles: [".import-export-toggle{padding:10px;text-align:center}.import-export-toggle mat-button-toggle-group{width:100%}.import-export-toggle mat-button-toggle-group mat-button-toggle{width:50%}.igo-input-container{padding:10px}.igo-input-container mat-form-field{width:100%}h4{padding:0 5px}.igo-form{padding:15px 5px}.igo-form-button-group{text-align:center;padding-top:10px}igo-spinner{position:absolute;padding-left:10px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i7.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: SpinnerComponent, selector: "igo-spinner", inputs: ["shown"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i13.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
|
|
1136
1090
|
}
|
|
@@ -1647,11 +1601,9 @@ class ContextListComponent {
|
|
|
1647
1601
|
return false;
|
|
1648
1602
|
default: {
|
|
1649
1603
|
let totalLength = this.contexts.ours.length;
|
|
1650
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
1651
1604
|
this.contexts.public
|
|
1652
1605
|
? (totalLength += this.contexts.public.length)
|
|
1653
1606
|
: (totalLength += 0);
|
|
1654
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
1655
1607
|
this.contexts.shared
|
|
1656
1608
|
? (totalLength += this.contexts.shared.length)
|
|
1657
1609
|
: (totalLength += 0);
|
|
@@ -2364,23 +2316,20 @@ class LayerContextDirective {
|
|
|
2364
2316
|
return;
|
|
2365
2317
|
}
|
|
2366
2318
|
if (this.removeLayersOnContextChange === true) {
|
|
2367
|
-
this.map.
|
|
2319
|
+
this.map.layerController.reset();
|
|
2368
2320
|
}
|
|
2369
2321
|
else {
|
|
2370
|
-
this.map.
|
|
2322
|
+
this.map.layerController.remove(...this.contextLayers);
|
|
2371
2323
|
}
|
|
2372
2324
|
this.contextLayers = [];
|
|
2373
2325
|
this.layerService.unavailableLayers = [];
|
|
2374
|
-
const
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
layersAndIndex$
|
|
2378
|
-
.pipe(buffer(layersAndIndex$.pipe(debounceTime(500))))
|
|
2326
|
+
const importExportOptions = this.configService.getConfig('importExport');
|
|
2327
|
+
this.layerService
|
|
2328
|
+
.createLayers(context.layers, context.uri)
|
|
2379
2329
|
.subscribe((layers) => {
|
|
2380
2330
|
this.handleAddLayers(layers);
|
|
2381
2331
|
if (context.extraFeatures) {
|
|
2382
2332
|
context.extraFeatures.forEach((featureCollection) => {
|
|
2383
|
-
const importExportOptions = this.configService.getConfig('importExport');
|
|
2384
2333
|
if (!importExportOptions?.importWithStyle) {
|
|
2385
2334
|
addImportedFeaturesToMap(featureCollection, this.map);
|
|
2386
2335
|
}
|
|
@@ -2397,15 +2346,30 @@ class LayerContextDirective {
|
|
|
2397
2346
|
.subscribe((layers) => this.handleAddLayers(layers));
|
|
2398
2347
|
}
|
|
2399
2348
|
}
|
|
2349
|
+
getFlattenOptions(options) {
|
|
2350
|
+
return options.reduce((accumulator, option) => {
|
|
2351
|
+
if (isLayerGroupOptions(option)) {
|
|
2352
|
+
const children = option.children
|
|
2353
|
+
? this.getFlattenOptions(option.children)
|
|
2354
|
+
: [];
|
|
2355
|
+
accumulator.push(option, ...children);
|
|
2356
|
+
}
|
|
2357
|
+
else {
|
|
2358
|
+
accumulator.push(option);
|
|
2359
|
+
}
|
|
2360
|
+
return accumulator;
|
|
2361
|
+
}, []);
|
|
2362
|
+
}
|
|
2400
2363
|
handleAddLayers(layers) {
|
|
2401
|
-
|
|
2402
|
-
.filter((layer) => layer
|
|
2364
|
+
const layersFiltrered = layers
|
|
2365
|
+
.filter((layer) => layer)
|
|
2403
2366
|
.map((layer) => {
|
|
2404
2367
|
layer.visible = this.computeLayerVisibilityFromUrl(layer);
|
|
2405
2368
|
return layer;
|
|
2406
2369
|
});
|
|
2407
|
-
|
|
2408
|
-
this.
|
|
2370
|
+
const layersSorted = sortLayersByZindex(layersFiltrered, 'asc');
|
|
2371
|
+
this.contextLayers.concat(layersSorted);
|
|
2372
|
+
this.map.layerController.add(...layersSorted);
|
|
2409
2373
|
}
|
|
2410
2374
|
computeLayerVisibilityFromUrl(layer) {
|
|
2411
2375
|
const params = this.queryParams;
|
|
@@ -2493,18 +2457,6 @@ class MapContextDirective {
|
|
|
2493
2457
|
if (context.map === undefined) {
|
|
2494
2458
|
return;
|
|
2495
2459
|
}
|
|
2496
|
-
// This creates a new ol.Map when the context changes. Doing that
|
|
2497
|
-
// allows the print tool to work properly even when the map's canvas
|
|
2498
|
-
// has been tainted (CORS) with the layers of another context. This could
|
|
2499
|
-
// have some side effects such as unbinding all listeners on the first map.
|
|
2500
|
-
// A better solution would be to create a new map (preview) before
|
|
2501
|
-
// printing and avoid the tainted canvas issue. This will come later so
|
|
2502
|
-
// this snippet of code is kept here in case it takes too long becomes
|
|
2503
|
-
// an issue
|
|
2504
|
-
// const target = this.component.map.ol.getTarget();
|
|
2505
|
-
// this.component.map.ol.setTarget(undefined);
|
|
2506
|
-
// this.component.map.init();
|
|
2507
|
-
// this.component.map.ol.setTarget(target);
|
|
2508
2460
|
const viewContext = context.map.view;
|
|
2509
2461
|
if (!this.component.view ||
|
|
2510
2462
|
viewContext.keepCurrentView !== true ||
|
|
@@ -3028,7 +2980,7 @@ class ShareMapService {
|
|
|
3028
2980
|
const llc = publicShareOption.layerlistControls.querystring;
|
|
3029
2981
|
let visibleKey = this.route.options.visibleOnLayersKey;
|
|
3030
2982
|
let invisibleKey = this.route.options.visibleOffLayersKey;
|
|
3031
|
-
const layers = map.
|
|
2983
|
+
const layers = map.layerController.all.filter((layer) => isLayerItem(layer));
|
|
3032
2984
|
const visibleLayers = layers.filter((lay) => lay.visible && !lay.isIgoInternalLayer);
|
|
3033
2985
|
const invisibleLayers = layers.filter((lay) => !lay.visible && !lay.isIgoInternalLayer);
|
|
3034
2986
|
if (visibleLayers.length === 0) {
|