@igo2/integration 1.11.1 → 1.13.0-alpha.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/{esm2015/igo2-integration.js → esm2020/igo2-integration.mjs} +0 -0
- package/esm2020/lib/about/about-tool/about-tool.component.mjs +185 -0
- package/{esm2015/lib/about/about-tool/index.js → esm2020/lib/about/about-tool/index.mjs} +1 -1
- package/{esm2015/lib/about/about.module.js → esm2020/lib/about/about.module.mjs} +9 -11
- package/{esm2015/lib/about/index.js → esm2020/lib/about/index.mjs} +1 -1
- package/{esm2015/lib/analytics/analytics-listener.service.js → esm2020/lib/analytics/analytics-listener.service.mjs} +1 -1
- package/{esm2015/lib/analytics/analytics.module.js → esm2020/lib/analytics/analytics.module.mjs} +2 -2
- package/{esm2015/lib/analytics/index.js → esm2020/lib/analytics/index.mjs} +1 -1
- package/{esm2015/lib/catalog/catalog-browser-tool/catalog-browser-tool.component.js → esm2020/lib/catalog/catalog-browser-tool/catalog-browser-tool.component.mjs} +3 -7
- package/{esm2015/lib/catalog/catalog-browser-tool/catalog-browser-tool.module.js → esm2020/lib/catalog/catalog-browser-tool/catalog-browser-tool.module.mjs} +3 -5
- package/{esm2015/lib/catalog/catalog-library-tool/catalog-library-tool.component.js → esm2020/lib/catalog/catalog-library-tool/catalog-library-tool.component.mjs} +3 -7
- package/{esm2015/lib/catalog/catalog-library-tool/catalog-library-tool.module.js → esm2020/lib/catalog/catalog-library-tool/catalog-library-tool.module.mjs} +3 -5
- package/{esm2015/lib/catalog/catalog.module.js → esm2020/lib/catalog/catalog.module.mjs} +2 -2
- package/{esm2015/lib/catalog/catalog.state.js → esm2020/lib/catalog/catalog.state.mjs} +1 -1
- package/{esm2015/lib/catalog/index.js → esm2020/lib/catalog/index.mjs} +1 -1
- package/{esm2015/lib/context/context-editor-tool/context-editor-tool.component.js → esm2020/lib/context/context-editor-tool/context-editor-tool.component.mjs} +3 -6
- package/{esm2015/lib/context/context-manager-tool/context-manager-tool.component.js → esm2020/lib/context/context-manager-tool/context-manager-tool.component.mjs} +3 -6
- package/{esm2015/lib/context/context-permission-manager-tool/context-permission-manager-tool.component.js → esm2020/lib/context/context-permission-manager-tool/context-permission-manager-tool.component.mjs} +3 -6
- package/{esm2015/lib/context/context-share-tool/context-share-tool.component.js → esm2020/lib/context/context-share-tool/context-share-tool.component.mjs} +3 -6
- package/{esm2015/lib/context/context.module.js → esm2020/lib/context/context.module.mjs} +2 -2
- package/{esm2015/lib/context/context.state.js → esm2020/lib/context/context.state.mjs} +1 -1
- package/{esm2015/lib/context/index.js → esm2020/lib/context/index.mjs} +1 -1
- package/{esm2015/lib/directions/directions-tool/directions-tool.component.js → esm2020/lib/directions/directions-tool/directions-tool.component.mjs} +3 -6
- package/{esm2015/lib/directions/directions-tool/index.js → esm2020/lib/directions/directions-tool/index.mjs} +1 -1
- package/{esm2015/lib/directions/directions.module.js → esm2020/lib/directions/directions.module.mjs} +2 -2
- package/esm2020/lib/directions/directions.state.mjs +64 -0
- package/{esm2015/lib/directions/index.js → esm2020/lib/directions/index.mjs} +1 -1
- package/{esm2015/lib/draw/draw.module.js → esm2020/lib/draw/draw.module.mjs} +2 -2
- package/{esm2015/lib/draw/draw.state.js → esm2020/lib/draw/draw.state.mjs} +1 -1
- package/{esm2015/lib/draw/drawing-tool/drawing-tool.component.js → esm2020/lib/draw/drawing-tool/drawing-tool.component.mjs} +3 -7
- package/{esm2015/lib/draw/index.js → esm2020/lib/draw/index.mjs} +1 -1
- package/{esm2015/lib/filter/active-ogc-filter-tool/active-ogc-filter-tool.animation.js → esm2020/lib/filter/active-ogc-filter-tool/active-ogc-filter-tool.animation.mjs} +1 -1
- package/{esm2015/lib/filter/active-ogc-filter-tool/active-ogc-filter-tool.component.js → esm2020/lib/filter/active-ogc-filter-tool/active-ogc-filter-tool.component.mjs} +3 -7
- package/{esm2015/lib/filter/active-ogc-filter-tool/index.js → esm2020/lib/filter/active-ogc-filter-tool/index.mjs} +1 -1
- package/{esm2015/lib/filter/active-time-filter-tool/active-time-filter-tool.animation.js → esm2020/lib/filter/active-time-filter-tool/active-time-filter-tool.animation.mjs} +1 -1
- package/{esm2015/lib/filter/active-time-filter-tool/active-time-filter-tool.component.js → esm2020/lib/filter/active-time-filter-tool/active-time-filter-tool.component.mjs} +3 -7
- package/{esm2015/lib/filter/active-time-filter-tool/index.js → esm2020/lib/filter/active-time-filter-tool/index.mjs} +1 -1
- package/{esm2015/lib/filter/filter.module.js → esm2020/lib/filter/filter.module.mjs} +2 -2
- package/{esm2015/lib/filter/index.js → esm2020/lib/filter/index.mjs} +1 -1
- package/{esm2015/lib/filter/ogc-filter-tool/index.js → esm2020/lib/filter/ogc-filter-tool/index.mjs} +1 -1
- package/{esm2015/lib/filter/ogc-filter-tool/ogc-filter-tool.component.js → esm2020/lib/filter/ogc-filter-tool/ogc-filter-tool.component.mjs} +3 -6
- package/{esm2015/lib/filter/spatial-filter-tool/index.js → esm2020/lib/filter/spatial-filter-tool/index.mjs} +1 -1
- package/esm2020/lib/filter/spatial-filter-tool/spatial-filter-tool.component.mjs +535 -0
- package/{esm2015/lib/filter/time-filter-tool/index.js → esm2020/lib/filter/time-filter-tool/index.mjs} +1 -1
- package/{esm2015/lib/filter/time-filter-tool/time-filter-tool.component.js → esm2020/lib/filter/time-filter-tool/time-filter-tool.component.mjs} +3 -6
- package/esm2020/lib/import-export/import-export-tool/import-export-tool.component.mjs +137 -0
- package/{esm2015/lib/import-export/import-export-tool/index.js → esm2020/lib/import-export/import-export-tool/index.mjs} +1 -1
- package/{esm2015/lib/import-export/import-export.module.js → esm2020/lib/import-export/import-export.module.mjs} +7 -9
- package/{esm2015/lib/import-export/import-export.state.js → esm2020/lib/import-export/import-export.state.mjs} +1 -1
- package/{esm2015/lib/import-export/index.js → esm2020/lib/import-export/index.mjs} +1 -1
- package/{esm2015/lib/integration.module.js → esm2020/lib/integration.module.mjs} +2 -2
- package/esm2020/lib/map/advanced-map-tool/advanced-coordinates/advanced-coordinates.component.mjs +473 -0
- package/esm2020/lib/map/advanced-map-tool/advanced-map-tool.component.mjs +89 -0
- package/esm2020/lib/map/advanced-map-tool/advanced-swipe/advanced-swipe.component.mjs +218 -0
- package/{esm2015/lib/map/advanced-map-tool/index.js → esm2020/lib/map/advanced-map-tool/index.mjs} +1 -1
- package/esm2020/lib/map/index.mjs +9 -0
- package/{esm2015/lib/map/layer-list-tool.state.js → esm2020/lib/map/layer-list-tool.state.mjs} +1 -1
- package/{esm2015/lib/map/map-details-tool/index.js → esm2020/lib/map/map-details-tool/index.mjs} +1 -1
- package/esm2020/lib/map/map-details-tool/map-details-tool.component.mjs +256 -0
- package/{esm2015/lib/map/map-legend/index.js → esm2020/lib/map/map-legend/index.mjs} +1 -1
- package/esm2020/lib/map/map-legend/map-legend-tool.component.mjs +275 -0
- package/esm2020/lib/map/map-proximity-tool/index.mjs +2 -0
- package/esm2020/lib/map/map-proximity-tool/map-proximity-tool.component.mjs +206 -0
- package/esm2020/lib/map/map-proximity.state.mjs +163 -0
- package/{esm2015/lib/map/map-tool/index.js → esm2020/lib/map/map-tool/index.mjs} +1 -1
- package/esm2020/lib/map/map-tool/map-tool.component.mjs +130 -0
- package/{esm2015/lib/map/map-tools/index.js → esm2020/lib/map/map-tools/index.mjs} +1 -1
- package/esm2020/lib/map/map-tools/map-tools.component.mjs +478 -0
- package/esm2020/lib/map/map.module.mjs +141 -0
- package/esm2020/lib/map/map.state.mjs +47 -0
- package/{esm2015/lib/measure/index.js → esm2020/lib/measure/index.mjs} +1 -1
- package/{esm2015/lib/measure/measure.module.js → esm2020/lib/measure/measure.module.mjs} +2 -2
- package/{esm2015/lib/measure/measure.state.js → esm2020/lib/measure/measure.state.mjs} +1 -1
- package/{esm2015/lib/measure/measurer-tool/measurer-tool.component.js → esm2020/lib/measure/measurer-tool/measurer-tool.component.mjs} +3 -7
- package/{esm2015/lib/measure/measurer-tool/measurer-tool.module.js → esm2020/lib/measure/measurer-tool/measurer-tool.module.mjs} +2 -4
- package/{esm2015/lib/print/index.js → esm2020/lib/print/index.mjs} +1 -1
- package/{esm2015/lib/print/print-tool/index.js → esm2020/lib/print/print-tool/index.mjs} +1 -1
- package/{esm2015/lib/print/print-tool/print-tool.component.js → esm2020/lib/print/print-tool/print-tool.component.mjs} +3 -6
- package/{esm2015/lib/print/print.module.js → esm2020/lib/print/print.module.mjs} +2 -2
- package/{esm2015/lib/search/index.js → esm2020/lib/search/index.mjs} +1 -1
- package/{esm2015/lib/search/query.state.js → esm2020/lib/search/query.state.mjs} +1 -1
- package/{esm2015/lib/search/search-bar/search-bar-binding.directive.js → esm2020/lib/search/search-bar/search-bar-binding.directive.mjs} +1 -1
- package/{esm2015/lib/search/search-bar/search-bar.module.js → esm2020/lib/search/search-bar/search-bar.module.mjs} +2 -2
- package/esm2020/lib/search/search-results-tool/search-results-tool.component.mjs +577 -0
- package/{esm2015/lib/search/search-results-tool/search-results-tool.module.js → esm2020/lib/search/search-results-tool/search-results-tool.module.mjs} +13 -15
- package/{esm2015/lib/search/search.module.js → esm2020/lib/search/search.module.mjs} +2 -2
- package/{esm2015/lib/search/search.state.js → esm2020/lib/search/search.state.mjs} +1 -1
- package/{esm2015/lib/storage/index.js → esm2020/lib/storage/index.mjs} +1 -1
- package/{esm2015/lib/storage/storage.module.js → esm2020/lib/storage/storage.module.mjs} +2 -2
- package/{esm2015/lib/storage/storage.state.js → esm2020/lib/storage/storage.state.mjs} +1 -1
- package/{esm2015/lib/tool/index.js → esm2020/lib/tool/index.mjs} +1 -1
- package/{esm2015/lib/tool/tool.module.js → esm2020/lib/tool/tool.module.mjs} +2 -2
- package/{esm2015/lib/tool/tool.state.js → esm2020/lib/tool/tool.state.mjs} +1 -1
- package/{esm2015/lib/workspace/index.js → esm2020/lib/workspace/index.mjs} +1 -1
- package/esm2020/lib/workspace/shared/edition-actions.service.mjs +156 -0
- package/{esm2015/lib/workspace/shared/feature-actions.service.js → esm2020/lib/workspace/shared/feature-actions.service.mjs} +1 -1
- package/{esm2015/lib/workspace/shared/index.js → esm2020/lib/workspace/shared/index.mjs} +1 -1
- package/esm2020/lib/workspace/shared/wfs-actions.service.mjs +158 -0
- package/{esm2015/lib/workspace/shared/workspace.utils.js → esm2020/lib/workspace/shared/workspace.utils.mjs} +1 -1
- package/{esm2015/lib/workspace/workspace-button/index.js → esm2020/lib/workspace/workspace-button/index.mjs} +1 -1
- package/esm2020/lib/workspace/workspace-button/workspace-button.component.mjs +69 -0
- package/{esm2015/lib/workspace/workspace.module.js → esm2020/lib/workspace/workspace.module.mjs} +6 -8
- package/esm2020/lib/workspace/workspace.state.mjs +188 -0
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +1 -1
- package/fesm2015/igo2-integration.mjs +6606 -0
- package/fesm2015/igo2-integration.mjs.map +1 -0
- package/{fesm2015/igo2-integration.js → fesm2020/igo2-integration.mjs} +816 -589
- package/fesm2020/igo2-integration.mjs.map +1 -0
- package/{igo2-integration.d.ts → index.d.ts} +0 -0
- package/lib/about/about-tool/about-tool.component.d.ts +1 -1
- package/lib/catalog/catalog-browser-tool/catalog-browser-tool.component.d.ts +1 -1
- package/lib/catalog/catalog-library-tool/catalog-library-tool.component.d.ts +1 -1
- package/lib/context/context-editor-tool/context-editor-tool.component.d.ts +1 -1
- package/lib/context/context-manager-tool/context-manager-tool.component.d.ts +1 -1
- package/lib/context/context-permission-manager-tool/context-permission-manager-tool.component.d.ts +1 -1
- package/lib/context/context-share-tool/context-share-tool.component.d.ts +1 -1
- package/lib/directions/directions-tool/directions-tool.component.d.ts +1 -1
- package/lib/draw/drawing-tool/drawing-tool.component.d.ts +1 -1
- package/lib/filter/active-ogc-filter-tool/active-ogc-filter-tool.component.d.ts +1 -1
- package/lib/filter/active-time-filter-tool/active-time-filter-tool.component.d.ts +1 -1
- package/lib/filter/ogc-filter-tool/ogc-filter-tool.component.d.ts +1 -1
- package/lib/filter/spatial-filter-tool/spatial-filter-tool.component.d.ts +3 -1
- package/lib/filter/time-filter-tool/time-filter-tool.component.d.ts +1 -1
- package/lib/import-export/import-export-tool/import-export-tool.component.d.ts +1 -1
- package/lib/map/advanced-map-tool/advanced-coordinates/advanced-coordinates.component.d.ts +4 -4
- package/lib/map/advanced-map-tool/advanced-map-tool.component.d.ts +8 -1
- package/lib/map/advanced-map-tool/advanced-swipe/advanced-swipe.component.d.ts +4 -4
- package/lib/map/index.d.ts +2 -0
- package/lib/map/map-details-tool/map-details-tool.component.d.ts +1 -1
- package/lib/map/map-legend/map-legend-tool.component.d.ts +1 -1
- package/lib/map/map-proximity-tool/index.d.ts +1 -0
- package/lib/map/map-proximity-tool/map-proximity-tool.component.d.ts +36 -0
- package/lib/map/map-proximity.state.d.ts +28 -0
- package/lib/map/map-tool/map-tool.component.d.ts +1 -1
- package/lib/map/map-tools/map-tools.component.d.ts +1 -1
- package/lib/map/map.module.d.ts +30 -28
- package/lib/map/map.state.d.ts +5 -1
- package/lib/measure/measurer-tool/measurer-tool.component.d.ts +1 -1
- package/lib/print/print-tool/print-tool.component.d.ts +1 -1
- package/lib/search/search-bar/search-bar-binding.directive.d.ts +1 -1
- package/lib/search/search-results-tool/search-results-tool.component.d.ts +7 -1
- package/lib/workspace/workspace-button/workspace-button.component.d.ts +1 -1
- package/lib/workspace/workspace.state.d.ts +4 -2
- package/ngcc.config.js +3 -3
- package/package.json +24 -11
- package/bundles/igo2-integration.umd.js +0 -7357
- package/bundles/igo2-integration.umd.js.map +0 -1
- package/esm2015/lib/about/about-tool/about-tool.component.js +0 -190
- package/esm2015/lib/directions/directions.state.js +0 -66
- package/esm2015/lib/filter/spatial-filter-tool/spatial-filter-tool.component.js +0 -544
- package/esm2015/lib/import-export/import-export-tool/import-export-tool.component.js +0 -145
- package/esm2015/lib/map/advanced-map-tool/advanced-coordinates/advanced-coordinates.component.js +0 -481
- package/esm2015/lib/map/advanced-map-tool/advanced-map-tool.component.js +0 -50
- package/esm2015/lib/map/advanced-map-tool/advanced-swipe/advanced-swipe.component.js +0 -234
- package/esm2015/lib/map/index.js +0 -7
- package/esm2015/lib/map/map-details-tool/map-details-tool.component.js +0 -274
- package/esm2015/lib/map/map-legend/map-legend-tool.component.js +0 -289
- package/esm2015/lib/map/map-tool/map-tool.component.js +0 -142
- package/esm2015/lib/map/map-tools/map-tools.component.js +0 -496
- package/esm2015/lib/map/map.module.js +0 -133
- package/esm2015/lib/map/map.state.js +0 -44
- package/esm2015/lib/search/search-results-tool/search-results-tool.component.js +0 -574
- package/esm2015/lib/workspace/shared/edition-actions.service.js +0 -157
- package/esm2015/lib/workspace/shared/wfs-actions.service.js +0 -159
- package/esm2015/lib/workspace/workspace-button/workspace-button.component.js +0 -74
- package/esm2015/lib/workspace/workspace.state.js +0 -172
- package/fesm2015/igo2-integration.js.map +0 -1
package/esm2020/lib/map/advanced-map-tool/advanced-coordinates/advanced-coordinates.component.mjs
ADDED
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { formatScale } from '@igo2/geo';
|
|
3
|
+
import { Clipboard } from '@igo2/utils';
|
|
4
|
+
import { StorageScope } from '@igo2/core';
|
|
5
|
+
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
6
|
+
import { Validators } from '@angular/forms';
|
|
7
|
+
import { debounceTime } from 'rxjs/operators';
|
|
8
|
+
import { zoneMtm, zoneUtm, computeProjectionsConstraints } from '@igo2/geo';
|
|
9
|
+
import * as olproj from 'ol/proj';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "../../map.state";
|
|
12
|
+
import * as i2 from "@igo2/core";
|
|
13
|
+
import * as i3 from "@angular/forms";
|
|
14
|
+
import * as i4 from "@angular/material/form-field";
|
|
15
|
+
import * as i5 from "@angular/material/select";
|
|
16
|
+
import * as i6 from "@angular/material/core";
|
|
17
|
+
import * as i7 from "@angular/material/input";
|
|
18
|
+
import * as i8 from "@angular/common";
|
|
19
|
+
import * as i9 from "@angular/material/icon";
|
|
20
|
+
import * as i10 from "@angular/material/slide-toggle";
|
|
21
|
+
import * as i11 from "@angular/material/button";
|
|
22
|
+
import * as i12 from "@ngx-translate/core";
|
|
23
|
+
function AdvancedCoordinatesComponent_mat_form_field_0_Template(rf, ctx) { if (rf & 1) {
|
|
24
|
+
i0.ɵɵelementStart(0, "mat-form-field", 12);
|
|
25
|
+
i0.ɵɵelement(1, "textarea", 13, 14);
|
|
26
|
+
i0.ɵɵpipe(3, "translate");
|
|
27
|
+
i0.ɵɵelementEnd();
|
|
28
|
+
} if (rf & 2) {
|
|
29
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
30
|
+
i0.ɵɵadvance(1);
|
|
31
|
+
i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(3, 2, "igo.integration.advanced-map-tool.advanced-coordinates.lon"))("value", ctx_r0.coordinates[0]);
|
|
32
|
+
} }
|
|
33
|
+
function AdvancedCoordinatesComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
34
|
+
i0.ɵɵelementStart(0, "mat-form-field", 12);
|
|
35
|
+
i0.ɵɵelement(1, "textarea", 13, 14);
|
|
36
|
+
i0.ɵɵpipe(3, "translate");
|
|
37
|
+
i0.ɵɵelementEnd();
|
|
38
|
+
} if (rf & 2) {
|
|
39
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
40
|
+
i0.ɵɵadvance(1);
|
|
41
|
+
i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(3, 2, "igo.integration.advanced-map-tool.advanced-coordinates.est"))("value", ctx_r2.coordinates[0]);
|
|
42
|
+
} }
|
|
43
|
+
function AdvancedCoordinatesComponent_mat_form_field_3_Template(rf, ctx) { if (rf & 1) {
|
|
44
|
+
i0.ɵɵelementStart(0, "mat-form-field", 15);
|
|
45
|
+
i0.ɵɵelement(1, "textarea", 13, 14);
|
|
46
|
+
i0.ɵɵpipe(3, "translate");
|
|
47
|
+
i0.ɵɵelementEnd();
|
|
48
|
+
} if (rf & 2) {
|
|
49
|
+
const ctx_r3 = i0.ɵɵnextContext();
|
|
50
|
+
i0.ɵɵadvance(1);
|
|
51
|
+
i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(3, 2, "igo.integration.advanced-map-tool.advanced-coordinates.lat"))("value", ctx_r3.coordinates[1]);
|
|
52
|
+
} }
|
|
53
|
+
function AdvancedCoordinatesComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) {
|
|
54
|
+
i0.ɵɵelementStart(0, "mat-form-field", 15);
|
|
55
|
+
i0.ɵɵelement(1, "textarea", 13, 14);
|
|
56
|
+
i0.ɵɵpipe(3, "translate");
|
|
57
|
+
i0.ɵɵelementEnd();
|
|
58
|
+
} if (rf & 2) {
|
|
59
|
+
const ctx_r5 = i0.ɵɵnextContext();
|
|
60
|
+
i0.ɵɵadvance(1);
|
|
61
|
+
i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(3, 2, "igo.integration.advanced-map-tool.advanced-coordinates.nord"))("value", ctx_r5.coordinates[1]);
|
|
62
|
+
} }
|
|
63
|
+
function AdvancedCoordinatesComponent_mat_option_16_Template(rf, ctx) { if (rf & 1) {
|
|
64
|
+
i0.ɵɵelementStart(0, "mat-option", 16);
|
|
65
|
+
i0.ɵɵlistener("click", function AdvancedCoordinatesComponent_mat_option_16_Template_mat_option_click_0_listener($event) { return $event.stopPropagation(); });
|
|
66
|
+
i0.ɵɵtext(1);
|
|
67
|
+
i0.ɵɵelementEnd();
|
|
68
|
+
} if (rf & 2) {
|
|
69
|
+
const projection_r11 = ctx.$implicit;
|
|
70
|
+
i0.ɵɵproperty("value", projection_r11);
|
|
71
|
+
i0.ɵɵadvance(1);
|
|
72
|
+
i0.ɵɵtextInterpolate1(" ", projection_r11.translatedValue || projection_r11.alias, " ");
|
|
73
|
+
} }
|
|
74
|
+
/**
|
|
75
|
+
* Tool to display the coordinates and a cursor of the center of the map
|
|
76
|
+
*/
|
|
77
|
+
export class AdvancedCoordinatesComponent {
|
|
78
|
+
constructor(mapState, languageService, messageService, cdRef, storageService, config, formBuilder) {
|
|
79
|
+
this.mapState = mapState;
|
|
80
|
+
this.languageService = languageService;
|
|
81
|
+
this.messageService = messageService;
|
|
82
|
+
this.cdRef = cdRef;
|
|
83
|
+
this.storageService = storageService;
|
|
84
|
+
this.config = config;
|
|
85
|
+
this.formBuilder = formBuilder;
|
|
86
|
+
this.formattedScale$ = new BehaviorSubject('');
|
|
87
|
+
this.projections$ = new BehaviorSubject([]);
|
|
88
|
+
this.center = this.storageService.get('centerToggle');
|
|
89
|
+
this.inMtmZone = true;
|
|
90
|
+
this.inLambert2 = { 32198: true, 3798: true };
|
|
91
|
+
this._projectionsLimitations = {};
|
|
92
|
+
this.defaultProj = {
|
|
93
|
+
translatedValue: this.languageService.translate.instant('igo.geo.importExportForm.projections.wgs84', { code: 'EPSG:4326' }),
|
|
94
|
+
translateKey: 'wgs84', alias: 'WGS84', code: 'EPSG:4326', zone: ''
|
|
95
|
+
};
|
|
96
|
+
this.currentZones = { utm: undefined, mtm: undefined };
|
|
97
|
+
this.units = true;
|
|
98
|
+
this.computeProjections();
|
|
99
|
+
this.buildForm();
|
|
100
|
+
}
|
|
101
|
+
get map() {
|
|
102
|
+
return this.mapState.map;
|
|
103
|
+
}
|
|
104
|
+
get inputProj() {
|
|
105
|
+
return this.form.get('inputProj').value;
|
|
106
|
+
}
|
|
107
|
+
set inputProj(value) {
|
|
108
|
+
this.form.patchValue({ inputProj: value });
|
|
109
|
+
}
|
|
110
|
+
get projectionsLimitations() {
|
|
111
|
+
return this._projectionsLimitations || {};
|
|
112
|
+
}
|
|
113
|
+
set projectionsLimitations(value) {
|
|
114
|
+
this._projectionsLimitations = value;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Listen a state of the map, a state of a form, update the coordinates
|
|
118
|
+
*/
|
|
119
|
+
ngOnInit() {
|
|
120
|
+
this.mapState$$ = combineLatest([this.map.viewController.state$.pipe(debounceTime(50)), this.form.valueChanges])
|
|
121
|
+
.subscribe(() => {
|
|
122
|
+
this.setScaleValue(this.map);
|
|
123
|
+
this.currentCenterDefaultProj = this.map.viewController.getCenter(this.defaultProj.code);
|
|
124
|
+
const currentMtmZone = zoneMtm(this.currentCenterDefaultProj[0]);
|
|
125
|
+
const currentUtmZone = zoneUtm(this.currentCenterDefaultProj[0]);
|
|
126
|
+
if (!this.inMtmZone && currentMtmZone !== this.currentZones.mtm) {
|
|
127
|
+
this.back2quebec();
|
|
128
|
+
}
|
|
129
|
+
let zoneChange = false;
|
|
130
|
+
if (currentMtmZone !== this.currentZones.mtm) {
|
|
131
|
+
this.currentZones.mtm = currentMtmZone;
|
|
132
|
+
zoneChange = true;
|
|
133
|
+
}
|
|
134
|
+
if (currentUtmZone !== this.currentZones.utm) {
|
|
135
|
+
this.currentZones.utm = currentUtmZone;
|
|
136
|
+
zoneChange = true;
|
|
137
|
+
}
|
|
138
|
+
if (zoneChange) {
|
|
139
|
+
this.updateProjectionsZoneChange();
|
|
140
|
+
}
|
|
141
|
+
this.checkLambert(this.currentCenterDefaultProj);
|
|
142
|
+
this.coordinates = this.getCoordinates();
|
|
143
|
+
this.cdRef.detectChanges();
|
|
144
|
+
this.storageService.set('currentProjection', this.inputProj, StorageScope.SESSION);
|
|
145
|
+
});
|
|
146
|
+
const tempInputProj = this.storageService.get('currentProjection');
|
|
147
|
+
this.inputProj = this.projections$.value[0];
|
|
148
|
+
if (tempInputProj !== null) {
|
|
149
|
+
const pos = this.positionInList(tempInputProj);
|
|
150
|
+
this.inputProj = this.projections$.value[pos];
|
|
151
|
+
this.updateZoneMtmUtm();
|
|
152
|
+
}
|
|
153
|
+
this.map.mapCenter$.next(this.center);
|
|
154
|
+
this.coordinates = this.getCoordinates();
|
|
155
|
+
this.currentCenterDefaultProj = this.map.viewController.getCenter(this.defaultProj.code);
|
|
156
|
+
}
|
|
157
|
+
ngOnDestroy() {
|
|
158
|
+
this.map.mapCenter$.next(false);
|
|
159
|
+
this.mapState$$.unsubscribe();
|
|
160
|
+
}
|
|
161
|
+
setScaleValue(map) {
|
|
162
|
+
this.formattedScale$.next(': ~ 1 / ' + formatScale(map.viewController.getScale()));
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Coordinates of the center of the map on the appropriate systeme of coordinates
|
|
166
|
+
* @returns Array of two numbers
|
|
167
|
+
*/
|
|
168
|
+
getCoordinates() {
|
|
169
|
+
this.currentZones.mtm = zoneMtm(this.currentCenterDefaultProj[0]);
|
|
170
|
+
this.currentZones.utm = zoneUtm(this.currentCenterDefaultProj[0]);
|
|
171
|
+
let coord;
|
|
172
|
+
const code = this.inputProj.code;
|
|
173
|
+
let decimal = 2;
|
|
174
|
+
if (code.includes('EPSG:4326') || code.includes('EPSG:4269')) {
|
|
175
|
+
decimal = 5;
|
|
176
|
+
}
|
|
177
|
+
this.units = (code === 'EPSG:4326' || code === 'EPSG:4269');
|
|
178
|
+
coord = this.map.viewController.getCenter(code).map(c => c.toFixed(decimal));
|
|
179
|
+
return coord;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Copy the coordinates to a clipboard
|
|
183
|
+
*/
|
|
184
|
+
copyTextToClipboard() {
|
|
185
|
+
const successful = Clipboard.copy(this.coordinates.toString());
|
|
186
|
+
if (successful) {
|
|
187
|
+
const translate = this.languageService.translate;
|
|
188
|
+
const title = translate.instant('igo.integration.advanced-map-tool.advanced-coordinates.copyTitle');
|
|
189
|
+
const msg = translate.instant('igo.integration.advanced-map-tool.advanced-coordinates.copyMsg');
|
|
190
|
+
this.messageService.success(msg, title);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Display a cursor on the center of the map
|
|
195
|
+
*/
|
|
196
|
+
displayCenter(toggle) {
|
|
197
|
+
this.center = toggle;
|
|
198
|
+
this.map.mapCenter$.next(toggle);
|
|
199
|
+
this.storageService.set('centerToggle', toggle, StorageScope.SESSION);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Builder of the form
|
|
203
|
+
*/
|
|
204
|
+
buildForm() {
|
|
205
|
+
this.form = this.formBuilder.group({
|
|
206
|
+
inputProj: ['', [Validators.required]]
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Update list of projections after changing of the state of the map
|
|
211
|
+
*/
|
|
212
|
+
updateProjectionsZoneChange() {
|
|
213
|
+
let modifiedProj = this.projections$.value;
|
|
214
|
+
const translate = this.languageService.translate;
|
|
215
|
+
modifiedProj.map(p => {
|
|
216
|
+
if (p.translateKey === 'mtm') {
|
|
217
|
+
const zone = zoneMtm(this.currentCenterDefaultProj[0]);
|
|
218
|
+
if (zone) {
|
|
219
|
+
const code = zone < 10 ? `EPSG:3218${zone}` : `EPSG:321${80 + zone}`;
|
|
220
|
+
p.alias = `MTM ${zone}`;
|
|
221
|
+
p.code = code;
|
|
222
|
+
p.zone = `${zone}`;
|
|
223
|
+
p.translatedValue = translate.instant('igo.geo.importExportForm.projections.mtm', p);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
p.alias = '';
|
|
227
|
+
this.inMtmZone = false;
|
|
228
|
+
if (this.inputProj.translateKey === 'mtm') {
|
|
229
|
+
this.inputProj = this.projections$.value[0];
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (p.translateKey === 'utm') {
|
|
234
|
+
const zone = zoneUtm(this.currentCenterDefaultProj[0]);
|
|
235
|
+
const code = `EPSG:326${zone}`;
|
|
236
|
+
p.alias = `UTM ${zone}`;
|
|
237
|
+
p.code = code;
|
|
238
|
+
p.zone = `${zone}`;
|
|
239
|
+
p.translatedValue = translate.instant('igo.geo.importExportForm.projections.utm', p);
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
modifiedProj = modifiedProj.filter(p => p.alias !== '');
|
|
243
|
+
this.projections$.next(modifiedProj);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Create a list of currents projections
|
|
247
|
+
*/
|
|
248
|
+
computeProjections() {
|
|
249
|
+
this.projectionsConstraints = computeProjectionsConstraints(this.projectionsLimitations);
|
|
250
|
+
const projections = [];
|
|
251
|
+
if (!this.currentCenterDefaultProj) {
|
|
252
|
+
this.currentCenterDefaultProj = this.map.viewController.getCenter(this.defaultProj.code);
|
|
253
|
+
}
|
|
254
|
+
const translate = this.languageService.translate;
|
|
255
|
+
if (this.projectionsConstraints.wgs84) {
|
|
256
|
+
projections.push({
|
|
257
|
+
translatedValue: translate.instant('igo.geo.importExportForm.projections.wgs84', { code: 'EPSG:4326' }),
|
|
258
|
+
translateKey: 'wgs84', alias: 'WGS84', code: 'EPSG:4326', zone: ''
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
if (this.projectionsConstraints.nad83) {
|
|
262
|
+
projections.push({
|
|
263
|
+
translatedValue: translate.instant('igo.geo.importExportForm.projections.nad83', { code: 'EPSG:4269' }),
|
|
264
|
+
translateKey: 'nad83', alias: 'NAD83', code: 'EPSG:4269', zone: ''
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
if (this.projectionsConstraints.webMercator) {
|
|
268
|
+
projections.push({
|
|
269
|
+
translatedValue: translate.instant('igo.geo.importExportForm.projections.webMercator', { code: 'EPSG:3857' }),
|
|
270
|
+
translateKey: 'webMercator', alias: 'Web Mercator', code: 'EPSG:3857', zone: ''
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
if (this.projectionsConstraints.mtm) {
|
|
274
|
+
// Quebec
|
|
275
|
+
const zone = zoneMtm(this.currentCenterDefaultProj[0]);
|
|
276
|
+
if (zone) {
|
|
277
|
+
this.inMtmZone = true;
|
|
278
|
+
const code = zone < 10 ? `EPSG:3218${zone}` : `EPSG:321${80 + zone}`;
|
|
279
|
+
projections.splice(3, 0, {
|
|
280
|
+
translatedValue: this.languageService.translate.instant('igo.geo.importExportForm.projections.mtm', { code, zone }),
|
|
281
|
+
translateKey: 'mtm', alias: `MTM ${zone}`, code, zone: `${zone}`
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
this.inMtmZone = false;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
if (this.projectionsConstraints.utm) {
|
|
289
|
+
const order = this.inMtmZone ? 4 : 3;
|
|
290
|
+
const zone = zoneUtm(this.currentCenterDefaultProj[0]);
|
|
291
|
+
const code = zone < 10 ? `EPSG:3260${zone}` : `EPSG:326${zone}`;
|
|
292
|
+
projections.splice(order, 0, {
|
|
293
|
+
translatedValue: this.languageService.translate.instant('igo.geo.importExportForm.projections.utm', { code, zone }),
|
|
294
|
+
translateKey: 'utm', alias: `UTM ${zone}`, code, zone: `${zone}`
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
let configProjection = [];
|
|
298
|
+
if (this.projectionsConstraints.projFromConfig) {
|
|
299
|
+
configProjection = this.config.getConfig('projections') || [];
|
|
300
|
+
}
|
|
301
|
+
this.projections$.next(projections.concat(configProjection));
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Push the MTM in the array of systeme of coordinates
|
|
305
|
+
* @param projections Array of the InputProjections
|
|
306
|
+
*/
|
|
307
|
+
pushMtm(projections) {
|
|
308
|
+
if (this.projectionsConstraints.mtm) {
|
|
309
|
+
const zone = zoneMtm(this.currentCenterDefaultProj[0]);
|
|
310
|
+
const code = zone < 10 ? `EPSG:3218${zone}` : `EPSG:321${80 + zone}`;
|
|
311
|
+
projections.splice(3, 0, {
|
|
312
|
+
translatedValue: this.languageService.translate.instant('igo.geo.importExportForm.projections.mtm', { code, zone }),
|
|
313
|
+
translateKey: 'mtm', alias: `MTM ${zone}`, code, zone: `${zone}`
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Updates the list of systems of coordinates for territory of Quebec
|
|
319
|
+
* push MTM and UTM in the Array
|
|
320
|
+
*/
|
|
321
|
+
back2quebec() {
|
|
322
|
+
const projections = this.projections$.value;
|
|
323
|
+
this.pushMtm(projections);
|
|
324
|
+
this.inMtmZone = true;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Update the numbers of the zones when application is restarted
|
|
328
|
+
*/
|
|
329
|
+
updateZoneMtmUtm() {
|
|
330
|
+
if (this.inputProj.translateKey === 'mtm') {
|
|
331
|
+
const zone = zoneMtm(this.currentCenterDefaultProj[0]);
|
|
332
|
+
this.inputProj.alias = `MTM ${zone}`;
|
|
333
|
+
const code = zone < 10 ? `EPSG:3218${zone}` : `EPSG:321${80 + zone}`;
|
|
334
|
+
this.inputProj.code = code;
|
|
335
|
+
this.inputProj.zone = `${zone}`;
|
|
336
|
+
this.inputProj.translatedValue = this.languageService.translate.instant('igo.geo.importExportForm.projections.mtm', { code, zone });
|
|
337
|
+
}
|
|
338
|
+
if (this.inputProj.translateKey === 'utm') {
|
|
339
|
+
const zone = zoneUtm(this.currentCenterDefaultProj[0]);
|
|
340
|
+
this.inputProj.alias = `UTM ${zone}`;
|
|
341
|
+
const code = zone < 10 ? `EPSG:3260${zone}` : `EPSG:326${zone}`;
|
|
342
|
+
this.inputProj.code = code;
|
|
343
|
+
this.inputProj.zone = `${zone}`;
|
|
344
|
+
this.inputProj.translatedValue = this.languageService.translate.instant('igo.geo.importExportForm.projections.utm', { code, zone });
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Compute the position of a current projection in a list. 0 if the projection is not in the list
|
|
349
|
+
* @param translateKey string, translate key of a projection
|
|
350
|
+
* @returns numeric, position of an element in the array
|
|
351
|
+
*/
|
|
352
|
+
positionInList(tempInputProj) {
|
|
353
|
+
const tk = tempInputProj.translateKey;
|
|
354
|
+
const alias = tempInputProj.alias;
|
|
355
|
+
let position; // = undefined;
|
|
356
|
+
let iter = 0;
|
|
357
|
+
this.projections$.value.map((projection) => {
|
|
358
|
+
if (tk) {
|
|
359
|
+
if (tk === projection.translateKey) {
|
|
360
|
+
position = iter;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
else if (alias === projection.alias) {
|
|
364
|
+
position = iter;
|
|
365
|
+
}
|
|
366
|
+
iter++;
|
|
367
|
+
});
|
|
368
|
+
position = position ? position : 0;
|
|
369
|
+
return position;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Change the list of projections depending on the projections of Lambert
|
|
373
|
+
* @param coordinates An array of numbers, longitude and latitude
|
|
374
|
+
*/
|
|
375
|
+
checkLambert(coordinates) {
|
|
376
|
+
const lambertProjections = this.config.getConfig('projections');
|
|
377
|
+
lambertProjections.forEach(projection => {
|
|
378
|
+
let modifiedProj = this.projections$.value;
|
|
379
|
+
const extent = projection.extent;
|
|
380
|
+
const code = projection.code.match(/\d+/);
|
|
381
|
+
const currentExtentWGS = olproj.transformExtent(extent, projection.code, this.defaultProj.code);
|
|
382
|
+
if (coordinates[0] < currentExtentWGS[0] || coordinates[0] > currentExtentWGS[2] ||
|
|
383
|
+
coordinates[1] < currentExtentWGS[1] || coordinates[1] > currentExtentWGS[3]) {
|
|
384
|
+
this.inLambert2[code] = false;
|
|
385
|
+
if (this.inputProj.alias === projection.alias) {
|
|
386
|
+
this.inputProj = this.projections$.value[0];
|
|
387
|
+
}
|
|
388
|
+
modifiedProj = modifiedProj.filter(p => p.alias !== projection.alias);
|
|
389
|
+
this.projections$.next(modifiedProj);
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
if (!this.inLambert2[code]) {
|
|
393
|
+
this.projections$.next(modifiedProj.concat(projection));
|
|
394
|
+
this.inLambert2[code] = true;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
AdvancedCoordinatesComponent.ɵfac = function AdvancedCoordinatesComponent_Factory(t) { return new (t || AdvancedCoordinatesComponent)(i0.ɵɵdirectiveInject(i1.MapState), i0.ɵɵdirectiveInject(i2.LanguageService), i0.ɵɵdirectiveInject(i2.MessageService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i2.StorageService), i0.ɵɵdirectiveInject(i2.ConfigService), i0.ɵɵdirectiveInject(i3.UntypedFormBuilder)); };
|
|
401
|
+
AdvancedCoordinatesComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AdvancedCoordinatesComponent, selectors: [["igo-advanced-coordinates"]], inputs: { projectionsLimitations: "projectionsLimitations" }, decls: 32, vars: 37, consts: [["class", "coordinates", 4, "ngIf", "ngIfElse"], ["elseBlock", ""], ["class", "coordinates2", 4, "ngIf", "ngIfElse"], ["elseBlock2", ""], ["mat-raised-button", "", 1, "igo-form-button-group", 3, "click"], ["svgIcon", "content-copy"], [1, "igo-form", 3, "formGroup"], [1, "igo-input-container"], [3, "value", "valueChange"], ["matTooltipShowDelay", "500", 3, "value", "click", 4, "ngFor", "ngForOf"], [1, "center-toggle", "mat-typography", 3, "checked", "labelPosition", "change"], [1, "igo-zoom", "mat-typography"], [1, "coordinates"], ["matInput", "", "readonly", "", "rows", "1", 3, "placeholder", "value"], ["textArea", ""], [1, "coordinates2"], ["matTooltipShowDelay", "500", 3, "value", "click"]], template: function AdvancedCoordinatesComponent_Template(rf, ctx) { if (rf & 1) {
|
|
402
|
+
i0.ɵɵtemplate(0, AdvancedCoordinatesComponent_mat_form_field_0_Template, 4, 4, "mat-form-field", 0);
|
|
403
|
+
i0.ɵɵtemplate(1, AdvancedCoordinatesComponent_ng_template_1_Template, 4, 4, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor);
|
|
404
|
+
i0.ɵɵtemplate(3, AdvancedCoordinatesComponent_mat_form_field_3_Template, 4, 4, "mat-form-field", 2);
|
|
405
|
+
i0.ɵɵtemplate(4, AdvancedCoordinatesComponent_ng_template_4_Template, 4, 4, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
|
|
406
|
+
i0.ɵɵelementStart(6, "button", 4);
|
|
407
|
+
i0.ɵɵlistener("click", function AdvancedCoordinatesComponent_Template_button_click_6_listener() { return ctx.copyTextToClipboard(); });
|
|
408
|
+
i0.ɵɵelement(7, "mat-icon", 5);
|
|
409
|
+
i0.ɵɵtext(8);
|
|
410
|
+
i0.ɵɵpipe(9, "translate");
|
|
411
|
+
i0.ɵɵelementEnd();
|
|
412
|
+
i0.ɵɵelementStart(10, "form", 6)(11, "mat-form-field", 7)(12, "mat-label");
|
|
413
|
+
i0.ɵɵtext(13);
|
|
414
|
+
i0.ɵɵpipe(14, "translate");
|
|
415
|
+
i0.ɵɵelementEnd();
|
|
416
|
+
i0.ɵɵelementStart(15, "mat-select", 8);
|
|
417
|
+
i0.ɵɵlistener("valueChange", function AdvancedCoordinatesComponent_Template_mat_select_valueChange_15_listener($event) { return ctx.inputProj = $event; });
|
|
418
|
+
i0.ɵɵtemplate(16, AdvancedCoordinatesComponent_mat_option_16_Template, 2, 2, "mat-option", 9);
|
|
419
|
+
i0.ɵɵpipe(17, "async");
|
|
420
|
+
i0.ɵɵelementEnd()();
|
|
421
|
+
i0.ɵɵelementStart(18, "mat-slide-toggle", 10);
|
|
422
|
+
i0.ɵɵlistener("change", function AdvancedCoordinatesComponent_Template_mat_slide_toggle_change_18_listener($event) { return ctx.displayCenter($event.checked); });
|
|
423
|
+
i0.ɵɵtext(19);
|
|
424
|
+
i0.ɵɵpipe(20, "translate");
|
|
425
|
+
i0.ɵɵelementEnd()();
|
|
426
|
+
i0.ɵɵelementStart(21, "p", 11);
|
|
427
|
+
i0.ɵɵtext(22);
|
|
428
|
+
i0.ɵɵpipe(23, "translate");
|
|
429
|
+
i0.ɵɵelementEnd();
|
|
430
|
+
i0.ɵɵelementStart(24, "p", 11);
|
|
431
|
+
i0.ɵɵtext(25);
|
|
432
|
+
i0.ɵɵpipe(26, "translate");
|
|
433
|
+
i0.ɵɵpipe(27, "async");
|
|
434
|
+
i0.ɵɵelementEnd();
|
|
435
|
+
i0.ɵɵelementStart(28, "p", 11);
|
|
436
|
+
i0.ɵɵtext(29);
|
|
437
|
+
i0.ɵɵpipe(30, "translate");
|
|
438
|
+
i0.ɵɵpipe(31, "number");
|
|
439
|
+
i0.ɵɵelementEnd();
|
|
440
|
+
} if (rf & 2) {
|
|
441
|
+
const _r1 = i0.ɵɵreference(2);
|
|
442
|
+
const _r4 = i0.ɵɵreference(5);
|
|
443
|
+
i0.ɵɵproperty("ngIf", ctx.units)("ngIfElse", _r1);
|
|
444
|
+
i0.ɵɵadvance(3);
|
|
445
|
+
i0.ɵɵproperty("ngIf", ctx.units)("ngIfElse", _r4);
|
|
446
|
+
i0.ɵɵadvance(5);
|
|
447
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(9, 18, "igo.integration.advanced-map-tool.advanced-coordinates.copy"), "\n");
|
|
448
|
+
i0.ɵɵadvance(2);
|
|
449
|
+
i0.ɵɵproperty("formGroup", ctx.form);
|
|
450
|
+
i0.ɵɵadvance(3);
|
|
451
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 20, "igo.integration.advanced-map-tool.advanced-coordinates.coordSystem"));
|
|
452
|
+
i0.ɵɵadvance(2);
|
|
453
|
+
i0.ɵɵproperty("value", ctx.inputProj);
|
|
454
|
+
i0.ɵɵadvance(1);
|
|
455
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(17, 22, ctx.projections$));
|
|
456
|
+
i0.ɵɵadvance(2);
|
|
457
|
+
i0.ɵɵproperty("checked", ctx.center)("labelPosition", "before");
|
|
458
|
+
i0.ɵɵadvance(1);
|
|
459
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(20, 24, "igo.integration.advanced-map-tool.advanced-coordinates.center"), " ");
|
|
460
|
+
i0.ɵɵadvance(3);
|
|
461
|
+
i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind1(23, 26, "igo.integration.advanced-map-tool.advanced-coordinates.zoom"), " ", ctx.map.viewController.getZoom(), "");
|
|
462
|
+
i0.ɵɵadvance(3);
|
|
463
|
+
i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind1(26, 28, "igo.integration.advanced-map-tool.advanced-coordinates.scale"), " ", i0.ɵɵpipeBind1(27, 30, ctx.formattedScale$), "");
|
|
464
|
+
i0.ɵɵadvance(4);
|
|
465
|
+
i0.ɵɵtextInterpolate2("", i0.ɵɵpipeBind1(30, 32, "igo.integration.advanced-map-tool.advanced-coordinates.resolution"), " ", i0.ɵɵpipeBind2(31, 34, ctx.map.viewController.getResolution(), "1.0-0"), "");
|
|
466
|
+
} }, dependencies: [i3.ɵNgNoValidate, i3.NgControlStatusGroup, i3.FormGroupDirective, i4.MatFormField, i4.MatLabel, i5.MatSelect, i6.MatOption, i7.MatInput, i8.NgForOf, i8.NgIf, i9.MatIcon, i10.MatSlideToggle, i11.MatButton, i8.AsyncPipe, i8.DecimalPipe, i12.TranslatePipe], styles: ["textarea[_ngcontent-%COMP%]{resize:none}mat-form-field[_ngcontent-%COMP%]{padding:10px 15px}mat-form-field.coordinates[_ngcontent-%COMP%]{width:120px}mat-form-field.coordinates2[_ngcontent-%COMP%]{width:120px;padding:0 10px 0 3px}mat-form-field.igo-input-container[_ngcontent-%COMP%]{width:60%;padding:0 15px}.igo-form-button-group[_ngcontent-%COMP%]{padding:0 10px;margin:0 10px}.center-toggle[_ngcontent-%COMP%]{padding:10px 15px 35px}mat-slide-toggle[_ngcontent-%COMP%]{font-size:small}.igo-zoom[_ngcontent-%COMP%]{padding:0 15px}"] });
|
|
467
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AdvancedCoordinatesComponent, [{
|
|
468
|
+
type: Component,
|
|
469
|
+
args: [{ selector: 'igo-advanced-coordinates', template: "<mat-form-field *ngIf=\"units; else elseBlock\" class=\"coordinates\">\r\n <textarea #textArea matInput readonly rows=\"1\"\r\n [placeholder]=\"'igo.integration.advanced-map-tool.advanced-coordinates.lon' | translate\"\r\n [value]=\"coordinates[0]\"></textarea>\r\n</mat-form-field>\r\n<ng-template #elseBlock >\r\n <mat-form-field class=\"coordinates\">\r\n <textarea #textArea matInput readonly rows=\"1\"\r\n [placeholder]=\"'igo.integration.advanced-map-tool.advanced-coordinates.est' | translate\"\r\n [value]=\"coordinates[0]\"></textarea></mat-form-field>\r\n</ng-template>\r\n\r\n<mat-form-field *ngIf=\"units; else elseBlock2\" class=\"coordinates2\">\r\n <textarea #textArea matInput readonly rows=\"1\"\r\n [placeholder]=\"'igo.integration.advanced-map-tool.advanced-coordinates.lat' | translate\"\r\n [value]=\"coordinates[1]\"></textarea>\r\n</mat-form-field>\r\n<ng-template #elseBlock2 >\r\n <mat-form-field class=\"coordinates2\"> <textarea #textArea matInput readonly rows=\"1\"\r\n [placeholder]=\"'igo.integration.advanced-map-tool.advanced-coordinates.nord' | translate\"\r\n [value]=\"coordinates[1]\"></textarea></mat-form-field>\r\n</ng-template>\r\n\r\n<button class=\"igo-form-button-group\"\r\n mat-raised-button\r\n (click)=\"copyTextToClipboard()\">\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n {{ 'igo.integration.advanced-map-tool.advanced-coordinates.copy' | translate }}\r\n</button>\r\n\r\n<form class=\"igo-form\" [formGroup]=\"form\">\r\n <mat-form-field class=\"igo-input-container\">\r\n <mat-label>{{'igo.integration.advanced-map-tool.advanced-coordinates.coordSystem' | translate}}</mat-label>\r\n <mat-select [(value)]=\"inputProj\">\r\n <mat-option matTooltipShowDelay=\"500\"\r\n *ngFor=\"let projection of (projections$ | async)\"\r\n [value]=\"projection\"\r\n (click)=\"$event.stopPropagation()\">\r\n {{projection.translatedValue || projection.alias }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-slide-toggle class=\"center-toggle mat-typography\"\r\n [checked]=\"center\"\r\n [labelPosition]=\"'before'\"\r\n (change)=\"displayCenter($event.checked)\">\r\n {{'igo.integration.advanced-map-tool.advanced-coordinates.center' | translate}}\r\n </mat-slide-toggle> \r\n</form>\r\n\r\n<p class=\"igo-zoom mat-typography\">{{'igo.integration.advanced-map-tool.advanced-coordinates.zoom' | translate}} {{map.viewController.getZoom() }}</p>\r\n<p class=\"igo-zoom mat-typography\">{{'igo.integration.advanced-map-tool.advanced-coordinates.scale' | translate}} {{ formattedScale$ | async }}</p>\r\n<p class=\"igo-zoom mat-typography\">{{'igo.integration.advanced-map-tool.advanced-coordinates.resolution' | translate}} {{map.viewController.getResolution() | number: '1.0-0' }}</p>", styles: ["textarea{resize:none}mat-form-field{padding:10px 15px}mat-form-field.coordinates{width:120px}mat-form-field.coordinates2{width:120px;padding:0 10px 0 3px}mat-form-field.igo-input-container{width:60%;padding:0 15px}.igo-form-button-group{padding:0 10px;margin:0 10px}.center-toggle{padding:10px 15px 35px}mat-slide-toggle{font-size:small}.igo-zoom{padding:0 15px}\n"] }]
|
|
470
|
+
}], function () { return [{ type: i1.MapState }, { type: i2.LanguageService }, { type: i2.MessageService }, { type: i0.ChangeDetectorRef }, { type: i2.StorageService }, { type: i2.ConfigService }, { type: i3.UntypedFormBuilder }]; }, { projectionsLimitations: [{
|
|
471
|
+
type: Input
|
|
472
|
+
}] }); })();
|
|
473
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvaW50ZWdyYXRpb24vc3JjL2xpYi9tYXAvYWR2YW5jZWQtbWFwLXRvb2wvYWR2YW5jZWQtY29vcmRpbmF0ZXMvYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvaW50ZWdyYXRpb24vc3JjL2xpYi9tYXAvYWR2YW5jZWQtbWFwLXRvb2wvYWR2YW5jZWQtY29vcmRpbmF0ZXMvYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQXFCLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsV0FBVyxFQUEyRCxNQUFNLFdBQVcsQ0FBQztBQUVqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBbUQsWUFBWSxFQUFpQixNQUFNLFlBQVksQ0FBQztBQUMxRyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDcEUsT0FBTyxFQUF3QyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUUsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQ1RsQywwQ0FBa0U7SUFDOUQsbUNBRXNDOztJQUMxQyxpQkFBaUI7OztJQUZYLGVBQXdGO0lBQXhGLGdIQUF3RixnQ0FBQTs7O0lBSTVGLDBDQUFvQztJQUNsQyxtQ0FFa0M7O0lB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Qyx5R0FBUyx5QkFBcUIsSUFBQztRQUMvQiw4QkFBNEM7UUFDNUMsWUFDSjs7UUFBQSxpQkFBUztRQUVULGdDQUEwQyx5QkFBQSxpQkFBQTtRQUUzQixhQUFvRjs7UUFBQSxpQkFBWTtRQUMzRyxzQ0FBa0M7UUFBdEIsMEpBQXFCO1FBQy9CLDZGQUthOztRQUNmLGlCQUFhLEVBQUE7UUFFZiw2Q0FHMkM7UUFBekMsNEhBQVUsaUNBQTZCLElBQUM7UUFDeEMsYUFDRjs7UUFBQSxpQkFBbUIsRUFBQTtRQUdyQiw4QkFBbUM7UUFBQSxhQUErRzs7UUFBQSxpQkFBSTtRQUN0Siw4QkFBbUM7UUFBQSxhQUE0Rzs7O1FBQUEsaUJBQUk7UUFDbkosOEJBQW1DO1FBQUEsYUFBNkk7OztRQUFBLGlCQUFJOzs7O1FBcERuSyxnQ0FBYSxpQkFBQTtRQVliLGVBQWE7UUFBYixnQ0FBYSxpQkFBQTtRQWUxQixlQUNKO1FBREksc0hBQ0o7UUFFdUIsZUFBa0I7UUFBbEIsb0NBQWtCO1FBRTFCLGVBQW9GO1FBQXBGLGtIQUFvRjtRQUNuRixlQUFxQjtRQUFyQixxQ0FBcUI7UUFFTixlQUF5QjtRQUF6QixrRUFBeUI7UUFRcEQsZUFBa0I7UUFBbEIsb0NBQWtCLDJCQUFBO1FBR2xCLGVBQ0Y7UUFERSx3SEFDRjtRQUdpQyxlQUErRztRQUEvRywySkFBK0c7UUFDL0csZUFBNEc7UUFBNUcsdUtBQTRHO1FBQzVHLGVBQTZJO1FBQTdJLHdNQUE2STs7dUZEbENuSyw0QkFBNEI7Y0FMeEMsU0FBUzsyQkFDRSwwQkFBMEI7Z1BBcUNoQyxzQkFBc0I7a0JBRHpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZm9ybWF0U2NhbGUsIElnb01hcCwgSW5wdXRQcm9qZWN0aW9ucywgUHJvamVjdGlvbnNMaW1pdGF0aW9uc09wdGlvbnMgfSBmcm9tICdAaWdvMi9nZW8nO1xyXG5pbXBvcnQgeyBNYXBTdGF0ZSB9IGZyb20gJy4uLy4uL21hcC5zdGF0ZSc7XHJcbmltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0BpZ28yL3V0aWxzJztcclxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UsIExhbmd1YWdlU2VydmljZSwgU3RvcmFnZVNlcnZpY2UsIFN0b3JhZ2VTY29wZSwgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgem9uZU10bSwgem9uZVV0bSwgY29tcHV0ZVByb2plY3Rpb25zQ29uc3RyYWludHMgfSBmcm9tICdAaWdvMi9nZW8nO1xyXG5pbXBvcnQgKiBhcyBvbHByb2ogZnJvbSAnb2wvcHJvaic7XHJcbi8qKlxyXG4gKiBUb29sIHRvIGRpc3BsYXkgdGhlIGNvb3JkaW5hdGVzIGFuZCBhIGN1cnNvciBvZiB0aGUgY2VudGVyIG9mIHRoZSBtYXBcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWFkdmFuY2VkLWNvb3JkaW5hdGVzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FkdmFuY2VkLWNvb3JkaW5hdGVzLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQ29vcmRpbmF0ZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIGZvcm1hdHRlZFNjYWxlJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcclxuICBwdWJsaWMgcHJvamVjdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8SW5wdXRQcm9qZWN0aW9uc1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG4gIHB1YmxpYyBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gIHB1YmxpYyBjb29yZGluYXRlczogc3RyaW5nW107XHJcbiAgcHJpdmF0ZSBjdXJyZW50Q2VudGVyRGVmYXVsdFByb2o6IFtudW1iZXIsIG51bWJlcl07XHJcbiAgcHVibGljIGNlbnRlcjogYm9vbGVhbiA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdjZW50ZXJUb2dnbGUnKSBhcyBib29sZWFuO1xyXG4gIHByaXZhdGUgaW5NdG1ab25lOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIGluTGFtYmVydDIgPSB7MzIxOTg6IHRydWUsIDM3OTg6IHRydWV9O1xyXG4gIHByaXZhdGUgbWFwU3RhdGUkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgX3Byb2plY3Rpb25zTGltaXRhdGlvbnM6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zID0ge307XHJcbiAgcHJpdmF0ZSBwcm9qZWN0aW9uc0NvbnN0cmFpbnRzOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucztcclxuICBwcml2YXRlIGRlZmF1bHRQcm9qOiBJbnB1dFByb2plY3Rpb25zID0ge1xyXG4gICAgdHJhbnNsYXRlZFZhbHVlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLndnczg0JywgeyBjb2RlOiAnRVBTRzo0MzI2JyB9KSxcclxuICAgIHRyYW5zbGF0ZUtleTogJ3dnczg0JywgYWxpYXM6ICdXR1M4NCcsIGNvZGU6ICdFUFNHOjQzMjYnLCB6b25lOiAnJ1xyXG4gIH07XHJcbiAgcHJpdmF0ZSBjdXJyZW50Wm9uZXMgPSB7IHV0bTogdW5kZWZpbmVkLCBtdG06IHVuZGVmaW5lZCB9O1xyXG4gIHB1YmxpYyB1bml0czogYm9vbGVhbiA9IHRydWU7XHJcbiAgZ2V0IG1hcCgpOiBJZ29NYXAge1xyXG4gICAgcmV0dXJuIHRoaXMubWFwU3RhdGUubWFwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlucHV0UHJvaigpOiBJbnB1dFByb2plY3Rpb25zIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdpbnB1dFByb2onKS52YWx1ZTtcclxuICB9XHJcbiAgc2V0IGlucHV0UHJvaih2YWx1ZTogSW5wdXRQcm9qZWN0aW9ucykge1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoeyBpbnB1dFByb2o6IHZhbHVlIH0pO1xyXG4gIH1cclxuICBnZXQgcHJvamVjdGlvbnNMaW1pdGF0aW9ucygpOiBQcm9qZWN0aW9uc0xpbWl0YXRpb25zT3B0aW9ucyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHJvamVjdGlvbnNMaW1pdGF0aW9ucyB8fCB7fTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHByb2plY3Rpb25zTGltaXRhdGlvbnModmFsdWU6IFByb2plY3Rpb25zTGltaXRhdGlvbnNPcHRpb25zKSB7XHJcbiAgICB0aGlzLl9wcm9qZWN0aW9uc0xpbWl0YXRpb25zID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBtYXBTdGF0ZTogTWFwU3RhdGUsXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maWc6IENvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIpIHtcclxuICAgICAgdGhpcy5jb21wdXRlUHJvamVjdGlvbnMoKTtcclxuICAgICAgdGhpcy5idWlsZEZvcm0oKTtcclxuICAgIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIGEgc3RhdGUgb2YgdGhlIG1hcCwgYSBzdGF0ZSBvZiBhIGZvcm0sIHVwZGF0ZSB0aGUgY29vcmRpbmF0ZXNcclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWFwU3RhdGUkJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMubWFwLnZpZXdDb250cm9sbGVyLnN0YXRlJC5waXBlKGRlYm91bmNlVGltZSg1MCkpLCB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzXSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5zZXRTY2FsZVZhbHVlKHRoaXMubWFwKTtcclxuICAgICAgdGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2ogPSB0aGlzLm1hcC52aWV3Q29udHJvbGxlci5nZXRDZW50ZXIodGhpcy5kZWZhdWx0UHJvai5jb2RlKTtcclxuICAgICAgY29uc3QgY3VycmVudE10bVpvbmUgPSB6b25lTXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgICAgY29uc3QgY3VycmVudFV0bVpvbmUgPSB6b25lVXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgICAgaWYgKCF0aGlzLmluTXRtWm9uZSAmJiBjdXJyZW50TXRtWm9uZSAhPT0gdGhpcy5jdXJyZW50Wm9uZXMubXRtKSB7XHJcbiAgICAgICAgdGhpcy5iYWNrMnF1ZWJlYygpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCB6b25lQ2hhbmdlID0gZmFsc2U7XHJcbiAgICAgIGlmIChjdXJyZW50TXRtWm9uZSAhPT0gdGhpcy5jdXJyZW50Wm9uZXMubXRtKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Wm9uZXMubXRtID0gY3VycmVudE10bVpvbmU7XHJcbiAgICAgICAgem9uZUNoYW5nZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGN1cnJlbnRVdG1ab25lICE9PSB0aGlzLmN1cnJlbnRab25lcy51dG0pIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRab25lcy51dG0gPSBjdXJyZW50VXRtWm9uZTtcclxuICAgICAgICB6b25lQ2hhbmdlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoem9uZUNoYW5nZSkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHJvamVjdGlvbnNab25lQ2hhbmdlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jaGVja0xhbWJlcnQodGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2opO1xyXG4gICAgICB0aGlzLmNvb3JkaW5hdGVzID0gdGhpcy5nZXRDb29yZGluYXRlcygpO1xyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2N1cnJlbnRQcm9qZWN0aW9uJywgdGhpcy5pbnB1dFByb2osIFN0b3JhZ2VTY29wZS5TRVNTSU9OKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRlbXBJbnB1dFByb2ogPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgnY3VycmVudFByb2plY3Rpb24nKSBhcyBJbnB1dFByb2plY3Rpb25zO1xyXG4gICAgdGhpcy5pbnB1dFByb2ogPSB0aGlzLnByb2plY3Rpb25zJC52YWx1ZVswXTtcclxuICAgIGlmICh0ZW1wSW5wdXRQcm9qICE9PSBudWxsKVxyXG4gICAge1xyXG4gICAgICBjb25zdCBwb3MgPSB0aGlzLnBvc2l0aW9uSW5MaXN0KHRlbXBJbnB1dFByb2opO1xyXG4gICAgICB0aGlzLmlucHV0UHJvaiA9IHRoaXMucHJvamVjdGlvbnMkLnZhbHVlW3Bvc107XHJcbiAgICAgIHRoaXMudXBkYXRlWm9uZU10bVV0bSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tYXAubWFwQ2VudGVyJC5uZXh0KHRoaXMuY2VudGVyKTtcclxuICAgIHRoaXMuY29vcmRpbmF0ZXMgPSB0aGlzLmdldENvb3JkaW5hdGVzKCk7XHJcbiAgICB0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvaiA9IHRoaXMubWFwLnZpZXdDb250cm9sbGVyLmdldENlbnRlcih0aGlzLmRlZmF1bHRQcm9qLmNvZGUpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLm1hcC5tYXBDZW50ZXIkLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5tYXBTdGF0ZSQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBzZXRTY2FsZVZhbHVlKG1hcDogSWdvTWFwKSB7XHJcbiAgICB0aGlzLmZvcm1hdHRlZFNjYWxlJC5uZXh0KCc6IH4gMSAvICcgKyBmb3JtYXRTY2FsZShtYXAudmlld0NvbnRyb2xsZXIuZ2V0U2NhbGUoKSkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDb29yZGluYXRlcyBvZiB0aGUgY2VudGVyIG9mIHRoZSBtYXAgb24gdGhlIGFwcHJvcHJpYXRlIHN5c3RlbWUgb2YgY29vcmRpbmF0ZXNcclxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB0d28gbnVtYmVyc1xyXG4gICAqL1xyXG4gIGdldENvb3JkaW5hdGVzKCk6IHN0cmluZ1tdIHtcclxuICAgIHRoaXMuY3VycmVudFpvbmVzLm10bSA9IHpvbmVNdG0odGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2pbMF0pO1xyXG4gICAgdGhpcy5jdXJyZW50Wm9uZXMudXRtID0gem9uZVV0bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XHJcbiAgICBsZXQgY29vcmQ7XHJcbiAgICBjb25zdCBjb2RlID0gdGhpcy5pbnB1dFByb2ouY29kZTtcclxuICAgIGxldCBkZWNpbWFsID0gMjtcclxuICAgIGlmIChjb2RlLmluY2x1ZGVzKCdFUFNHOjQzMjYnKSB8fCBjb2RlLmluY2x1ZGVzKCdFUFNHOjQyNjknKSkge1xyXG4gICAgICBkZWNpbWFsID0gNTtcclxuICAgIH1cclxuICAgIHRoaXMudW5pdHMgPSAoY29kZSA9PT0gJ0VQU0c6NDMyNicgfHwgY29kZSA9PT0gJ0VQU0c6NDI2OScpO1xyXG4gICAgY29vcmQgPSB0aGlzLm1hcC52aWV3Q29udHJvbGxlci5nZXRDZW50ZXIoY29kZSkubWFwKGMgPT4gYy50b0ZpeGVkKGRlY2ltYWwpKTtcclxuICAgIHJldHVybiBjb29yZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvcHkgdGhlIGNvb3JkaW5hdGVzIHRvIGEgY2xpcGJvYXJkXHJcbiAgICovXHJcbiAgY29weVRleHRUb0NsaXBib2FyZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHN1Y2Nlc3NmdWwgPSBDbGlwYm9hcmQuY29weSh0aGlzLmNvb3JkaW5hdGVzLnRvU3RyaW5nKCkpO1xyXG4gICAgaWYgKHN1Y2Nlc3NmdWwpIHtcclxuICAgICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgICBjb25zdCB0aXRsZSA9IHRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICdpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMuY29weVRpdGxlJ1xyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBtc2cgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLmNvcHlNc2cnKTtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKG1zZywgdGl0bGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIGN1cnNvciBvbiB0aGUgY2VudGVyIG9mIHRoZSBtYXBcclxuICAgKi9cclxuICBkaXNwbGF5Q2VudGVyKHRvZ2dsZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5jZW50ZXIgPSB0b2dnbGU7XHJcbiAgICB0aGlzLm1hcC5tYXBDZW50ZXIkLm5leHQodG9nZ2xlKTtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KCdjZW50ZXJUb2dnbGUnLCB0b2dnbGUsIFN0b3JhZ2VTY29wZS5TRVNTSU9OKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkZXIgb2YgdGhlIGZvcm1cclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkRm9ybSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICBpbnB1dFByb2o6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgbGlzdCBvZiBwcm9qZWN0aW9ucyBhZnRlciBjaGFuZ2luZyBvZiB0aGUgc3RhdGUgb2YgdGhlIG1hcFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlUHJvamVjdGlvbnNab25lQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgbGV0IG1vZGlmaWVkUHJvaiA9IHRoaXMucHJvamVjdGlvbnMkLnZhbHVlO1xyXG4gICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgbW9kaWZpZWRQcm9qLm1hcChwID0+IHtcclxuICAgICAgaWYgKHAudHJhbnNsYXRlS2V5ID09PSAnbXRtJykge1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSB6b25lTXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgICAgICBpZiAoem9uZSkge1xyXG4gICAgICAgICAgY29uc3QgY29kZSA9IHpvbmUgPCAxMCA/IGBFUFNHOjMyMTgke3pvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyB6b25lfWA7XHJcbiAgICAgICAgICBwLmFsaWFzID0gYE1UTSAke3pvbmV9YDtcclxuICAgICAgICAgIHAuY29kZSA9IGNvZGU7XHJcbiAgICAgICAgICBwLnpvbmUgPSBgJHt6b25lfWA7XHJcbiAgICAgICAgICBwLnRyYW5zbGF0ZWRWYWx1ZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMubXRtJywgcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgcC5hbGlhcyA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5pbk10bVpvbmUgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICh0aGlzLmlucHV0UHJvai50cmFuc2xhdGVLZXkgPT09ICdtdG0nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXRQcm9qID0gdGhpcy5wcm9qZWN0aW9ucyQudmFsdWVbMF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChwLnRyYW5zbGF0ZUtleSA9PT0gJ3V0bScpIHtcclxuICAgICAgICBjb25zdCB6b25lID0gem9uZVV0bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XHJcbiAgICAgICAgY29uc3QgY29kZSA9IGBFUFNHOjMyNiR7em9uZX1gO1xyXG4gICAgICAgIHAuYWxpYXMgPSBgVVRNICR7em9uZX1gO1xyXG4gICAgICAgIHAuY29kZSA9IGNvZGU7XHJcbiAgICAgICAgcC56b25lID0gYCR7em9uZX1gO1xyXG4gICAgICAgIHAudHJhbnNsYXRlZFZhbHVlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy51dG0nLCBwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBtb2RpZmllZFByb2ogPSBtb2RpZmllZFByb2ouZmlsdGVyKHAgPT4gcC5hbGlhcyAhPT0gJycpO1xyXG4gICAgdGhpcy5wcm9qZWN0aW9ucyQubmV4dChtb2RpZmllZFByb2opO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbGlzdCBvZiBjdXJyZW50cyBwcm9qZWN0aW9uc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgY29tcHV0ZVByb2plY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzID0gY29tcHV0ZVByb2plY3Rpb25zQ29uc3RyYWludHModGhpcy5wcm9qZWN0aW9uc0xpbWl0YXRpb25zKTtcclxuICAgIGNvbnN0IHByb2plY3Rpb25zOiBJbnB1dFByb2plY3Rpb25zW10gPSBbXTtcclxuXHJcbiAgICBpZiAoIXRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qID0gdGhpcy5tYXAudmlld0NvbnRyb2xsZXIuZ2V0Q2VudGVyKHRoaXMuZGVmYXVsdFByb2ouY29kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy53Z3M4NCkge1xyXG4gICAgICBwcm9qZWN0aW9ucy5wdXNoKHtcclxuICAgICAgICB0cmFuc2xhdGVkVmFsdWU6IHRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMud2dzODQnLCB7IGNvZGU6ICdFUFNHOjQzMjYnIH0pLFxyXG4gICAgICAgIHRyYW5zbGF0ZUtleTogJ3dnczg0JywgYWxpYXM6ICdXR1M4NCcsIGNvZGU6ICdFUFNHOjQzMjYnLCB6b25lOiAnJ1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wcm9qZWN0aW9uc0NvbnN0cmFpbnRzLm5hZDgzKSB7XHJcbiAgICAgIHByb2plY3Rpb25zLnB1c2goe1xyXG4gICAgICAgIHRyYW5zbGF0ZWRWYWx1ZTogdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy5uYWQ4MycsIHsgY29kZTogJ0VQU0c6NDI2OScgfSksXHJcbiAgICAgICAgdHJhbnNsYXRlS2V5OiAnbmFkODMnLCBhbGlhczogJ05BRDgzJywgY29kZTogJ0VQU0c6NDI2OScsIHpvbmU6ICcnXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMud2ViTWVyY2F0b3IpIHtcclxuICAgICAgcHJvamVjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgdHJhbnNsYXRlZFZhbHVlOiB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLndlYk1lcmNhdG9yJywgeyBjb2RlOiAnRVBTRzozODU3JyB9KSxcclxuICAgICAgICB0cmFuc2xhdGVLZXk6ICd3ZWJNZXJjYXRvcicsIGFsaWFzOiAnV2ViIE1lcmNhdG9yJywgY29kZTogJ0VQU0c6Mzg1NycsIHpvbmU6ICcnXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy5tdG0pIHtcclxuICAgICAgLy8gUXVlYmVjXHJcbiAgICAgIGNvbnN0IHpvbmUgPSB6b25lTXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgICAgaWYgKHpvbmUpIHtcclxuICAgICAgICB0aGlzLmluTXRtWm9uZSA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgY29kZSA9IHpvbmUgPCAxMCA/IGBFUFNHOjMyMTgke3pvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyB6b25lfWA7XHJcbiAgICAgICAgcHJvamVjdGlvbnMuc3BsaWNlKDMsIDAsIHtcclxuICAgICAgICAgIHRyYW5zbGF0ZWRWYWx1ZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy5tdG0nLCB7IGNvZGUsIHpvbmUgfSksXHJcbiAgICAgICAgICB0cmFuc2xhdGVLZXk6ICdtdG0nLCBhbGlhczogYE1UTSAke3pvbmV9YCwgY29kZSwgem9uZTogYCR7em9uZX1gXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbk10bVpvbmUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvamVjdGlvbnNDb25zdHJhaW50cy51dG0pIHtcclxuICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLmluTXRtWm9uZSA/IDQgOiAzO1xyXG4gICAgICBjb25zdCB6b25lID0gem9uZVV0bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XHJcbiAgICAgIGNvbnN0IGNvZGUgPSB6b25lIDwgMTAgPyBgRVBTRzozMjYwJHt6b25lfWAgOiBgRVBTRzozMjYke3pvbmV9YDtcclxuICAgICAgcHJvamVjdGlvbnMuc3BsaWNlKG9yZGVyLCAwLCB7XHJcbiAgICAgICAgdHJhbnNsYXRlZFZhbHVlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5pbXBvcnRFeHBvcnRGb3JtLnByb2plY3Rpb25zLnV0bScsIHsgY29kZSwgem9uZSB9KSxcclxuICAgICAgICB0cmFuc2xhdGVLZXk6ICd1dG0nLCBhbGlhczogYFVUTSAke3pvbmV9YCwgY29kZSwgem9uZTogYCR7em9uZX1gXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgbGV0IGNvbmZpZ1Byb2plY3Rpb24gPSBbXTtcclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMucHJvakZyb21Db25maWcpIHtcclxuICAgICAgY29uZmlnUHJvamVjdGlvbiA9IHRoaXMuY29uZmlnLmdldENvbmZpZygncHJvamVjdGlvbnMnKSB8fCBbXTtcclxuICAgIH1cclxuICAgIHRoaXMucHJvamVjdGlvbnMkLm5leHQocHJvamVjdGlvbnMuY29uY2F0KGNvbmZpZ1Byb2plY3Rpb24pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFB1c2ggdGhlIE1UTSBpbiB0aGUgYXJyYXkgb2Ygc3lzdGVtZSBvZiBjb29yZGluYXRlc1xyXG4gICAqIEBwYXJhbSBwcm9qZWN0aW9ucyBBcnJheSBvZiB0aGUgSW5wdXRQcm9qZWN0aW9uc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgcHVzaE10bShwcm9qZWN0aW9uczogQXJyYXk8SW5wdXRQcm9qZWN0aW9ucz4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnByb2plY3Rpb25zQ29uc3RyYWludHMubXRtKSB7XHJcbiAgICAgIGNvbnN0IHpvbmUgPSB6b25lTXRtKHRoaXMuY3VycmVudENlbnRlckRlZmF1bHRQcm9qWzBdKTtcclxuICAgICAgY29uc3QgY29kZSA9IHpvbmUgPCAxMCA/IGBFUFNHOjMyMTgke3pvbmV9YCA6IGBFUFNHOjMyMSR7ODAgKyB6b25lfWA7XHJcbiAgICAgIHByb2plY3Rpb25zLnNwbGljZSgzLCAwLCB7XHJcbiAgICAgICAgICB0cmFuc2xhdGVkVmFsdWU6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmltcG9ydEV4cG9ydEZvcm0ucHJvamVjdGlvbnMubXRtJywgeyBjb2RlLCB6b25lIH0pLFxyXG4gICAgICAgICAgdHJhbnNsYXRlS2V5OiAnbXRtJywgYWxpYXM6IGBNVE0gJHt6b25lfWAsIGNvZGUsIHpvbmU6IGAke3pvbmV9YH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgbGlzdCBvZiBzeXN0ZW1zIG9mIGNvb3JkaW5hdGVzIGZvciB0ZXJyaXRvcnkgb2YgUXVlYmVjXHJcbiAgICogcHVzaCBNVE0gYW5kIFVUTSBpbiB0aGUgQXJyYXlcclxuICAgKi9cclxuICBwcml2YXRlIGJhY2sycXVlYmVjKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcHJvamVjdGlvbnMgPSB0aGlzLnByb2plY3Rpb25zJC52YWx1ZTtcclxuICAgIHRoaXMucHVzaE10bShwcm9qZWN0aW9ucyk7XHJcbiAgICB0aGlzLmluTXRtWm9uZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdGhlIG51bWJlcnMgb2YgdGhlIHpvbmVzIHdoZW4gYXBwbGljYXRpb24gaXMgcmVzdGFydGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVab25lTXRtVXRtKCkge1xyXG4gICAgaWYgKHRoaXMuaW5wdXRQcm9qLnRyYW5zbGF0ZUtleSA9PT0gJ210bScpIHtcclxuICAgICAgY29uc3Qgem9uZSA9IHpvbmVNdG0odGhpcy5jdXJyZW50Q2VudGVyRGVmYXVsdFByb2pbMF0pO1xyXG4gICAgICB0aGlzLmlucHV0UHJvai5hbGlhcyA9IGBNVE0gJHt6b25lfWA7XHJcbiAgICAgIGNvbnN0IGNvZGUgPSB6b25lIDwgMTAgPyBgRVBTRzozMjE4JHt6b25lfWAgOiBgRVBTRzozMjEkezgwICsgem9uZX1gO1xyXG4gICAgICB0aGlzLmlucHV0UHJvai5jb2RlID0gY29kZTtcclxuICAgICAgdGhpcy5pbnB1dFByb2ouem9uZSA9IGAke3pvbmV9YDtcclxuICAgICAgdGhpcy5pbnB1dFByb2oudHJhbnNsYXRlZFZhbHVlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy5tdG0nLCB7IGNvZGUsIHpvbmUgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pbnB1dFByb2oudHJhbnNsYXRlS2V5ID09PSAndXRtJykge1xyXG4gICAgICBjb25zdCB6b25lID0gem9uZVV0bSh0aGlzLmN1cnJlbnRDZW50ZXJEZWZhdWx0UHJvalswXSk7XHJcbiAgICAgIHRoaXMuaW5wdXRQcm9qLmFsaWFzID0gYFVUTSAke3pvbmV9YDtcclxuICAgICAgY29uc3QgY29kZSA9IHpvbmUgPCAxMCA/IGBFUFNHOjMyNjAke3pvbmV9YCA6IGBFUFNHOjMyNiR7em9uZX1gO1xyXG4gICAgICB0aGlzLmlucHV0UHJvai5jb2RlID0gY29kZTtcclxuICAgICAgdGhpcy5pbnB1dFByb2ouem9uZSA9IGAke3pvbmV9YDtcclxuICAgICAgdGhpcy5pbnB1dFByb2oudHJhbnNsYXRlZFZhbHVlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uaW1wb3J0RXhwb3J0Rm9ybS5wcm9qZWN0aW9ucy51dG0nLCB7IGNvZGUsIHpvbmUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wdXRlIHRoZSBwb3NpdGlvbiBvZiBhIGN1cnJlbnQgcHJvamVjdGlvbiBpbiBhIGxpc3QuIDAgaWYgdGhlIHByb2plY3Rpb24gaXMgbm90IGluIHRoZSBsaXN0XHJcbiAgICogQHBhcmFtIHRyYW5zbGF0ZUtleSBzdHJpbmcsIHRyYW5zbGF0ZSBrZXkgb2YgYSBwcm9qZWN0aW9uXHJcbiAgICogQHJldHVybnMgbnVtZXJpYywgcG9zaXRpb24gb2YgYW4gZWxlbWVudCBpbiB0aGUgYXJyYXlcclxuICAgKi9cclxuICBwb3NpdGlvbkluTGlzdCh0ZW1wSW5wdXRQcm9qOiBJbnB1dFByb2plY3Rpb25zKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHRrID0gdGVtcElucHV0UHJvai50cmFuc2xhdGVLZXk7XHJcbiAgICBjb25zdCBhbGlhcyA9IHRlbXBJbnB1dFByb2ouYWxpYXM7XHJcbiAgICBsZXQgcG9zaXRpb247IC8vID0gdW5kZWZpbmVkO1xyXG4gICAgbGV0IGl0ZXIgPSAwO1xyXG4gICAgdGhpcy5wcm9qZWN0aW9ucyQudmFsdWUubWFwKChwcm9qZWN0aW9uKSA9PiB7XHJcbiAgICAgIGlmICh0aykge1xyXG4gICAgICAgIGlmICh0ayA9PT0gcHJvamVjdGlvbi50cmFuc2xhdGVLZXkpIHtcclxuICAgICAgICAgIHBvc2l0aW9uID0gaXRlcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoYWxpYXMgPT09IHByb2plY3Rpb24uYWxpYXMpIHtcclxuICAgICAgICBwb3NpdGlvbiA9IGl0ZXI7XHJcbiAgICAgIH1cclxuICAgICAgaXRlcisrO1xyXG4gICAgfSk7XHJcbiAgICBwb3NpdGlvbiA9IHBvc2l0aW9uID8gcG9zaXRpb24gOiAwO1xyXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlIHRoZSBsaXN0IG9mIHByb2plY3Rpb25zIGRlcGVuZGluZyBvbiB0aGUgcHJvamVjdGlvbnMgb2YgTGFtYmVydFxyXG4gICAqIEBwYXJhbSBjb29yZGluYXRlcyBBbiBhcnJheSBvZiBudW1iZXJzLCBsb25naXR1ZGUgYW5kIGxhdGl0dWRlXHJcbiAgICovXHJcbiAgY2hlY2tMYW1iZXJ0KGNvb3JkaW5hdGVzOiBbbnVtYmVyLCBudW1iZXJdKSB7XHJcbiAgICBjb25zdCBsYW1iZXJ0UHJvamVjdGlvbnMgPSB0aGlzLmNvbmZpZy5nZXRDb25maWcoJ3Byb2plY3Rpb25zJyk7XHJcbiAgICBsYW1iZXJ0UHJvamVjdGlvbnMuZm9yRWFjaChwcm9qZWN0aW9uID0+IHtcclxuICAgICAgICBsZXQgbW9kaWZpZWRQcm9qID0gdGhpcy5wcm9qZWN0aW9ucyQudmFsdWU7XHJcbiAgICAgICAgY29uc3QgZXh0ZW50ID0gcHJvamVjdGlvbi5leHRlbnQ7XHJcbiAgICAgICAgY29uc3QgY29kZSA9IHByb2plY3Rpb24uY29kZS5tYXRjaCgvXFxkKy8pO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFeHRlbnRXR1MgPSBvbHByb2oudHJhbnNmb3JtRXh0ZW50KGV4dGVudCwgcHJvamVjdGlvbi5jb2RlLCB0aGlzLmRlZmF1bHRQcm9qLmNvZGUpO1xyXG4gICAgICAgIGlmIChjb29yZGluYXRlc1swXSA8IGN1cnJlbnRFeHRlbnRXR1NbMF0gfHwgY29vcmRpbmF0ZXNbMF0gPiBjdXJyZW50RXh0ZW50V0dTWzJdIHx8XHJcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzWzFdIDwgY3VycmVudEV4dGVudFdHU1sxXSB8fCBjb29yZGluYXRlc1sxXSA+IGN1cnJlbnRFeHRlbnRXR1NbM10pIHtcclxuICAgICAgICAgICAgdGhpcy5pbkxhbWJlcnQyW2NvZGVdID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0UHJvai5hbGlhcyA9PT0gcHJvamVjdGlvbi5hbGlhcykge1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5wdXRQcm9qID0gdGhpcy5wcm9qZWN0aW9ucyQudmFsdWVbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbW9kaWZpZWRQcm9qID0gbW9kaWZpZWRQcm9qLmZpbHRlcihwID0+IHAuYWxpYXMgIT09IHByb2plY3Rpb24uYWxpYXMpO1xyXG4gICAgICAgICAgICB0aGlzLnByb2plY3Rpb25zJC5uZXh0KG1vZGlmaWVkUHJvaik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5MYW1iZXJ0Mltjb2RlXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0aW9ucyQubmV4dChtb2RpZmllZFByb2ouY29uY2F0KHByb2plY3Rpb24pKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5MYW1iZXJ0Mltjb2RlXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwidW5pdHM7IGVsc2UgZWxzZUJsb2NrXCIgY2xhc3M9XCJjb29yZGluYXRlc1wiPlxyXG4gICAgPHRleHRhcmVhICAjdGV4dEFyZWEgbWF0SW5wdXQgcmVhZG9ubHkgcm93cz1cIjFcIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5sb24nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgW3ZhbHVlXT1cImNvb3JkaW5hdGVzWzBdXCI+PC90ZXh0YXJlYT5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuPG5nLXRlbXBsYXRlICNlbHNlQmxvY2sgPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImNvb3JkaW5hdGVzXCI+XHJcbiAgICA8dGV4dGFyZWEgI3RleHRBcmVhIG1hdElucHV0IHJlYWRvbmx5IHJvd3M9XCIxXCJcclxuICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5lc3QnIHwgdHJhbnNsYXRlXCJcclxuICBbdmFsdWVdPVwiY29vcmRpbmF0ZXNbMF1cIj48L3RleHRhcmVhPjwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJ1bml0czsgZWxzZSBlbHNlQmxvY2syXCIgY2xhc3M9XCJjb29yZGluYXRlczJcIj5cclxuICAgIDx0ZXh0YXJlYSAjdGV4dEFyZWEgbWF0SW5wdXQgcmVhZG9ubHkgcm93cz1cIjFcIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5sYXQnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgW3ZhbHVlXT1cImNvb3JkaW5hdGVzWzFdXCI+PC90ZXh0YXJlYT5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuPG5nLXRlbXBsYXRlICNlbHNlQmxvY2syID5cclxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJjb29yZGluYXRlczJcIj4gIDx0ZXh0YXJlYSAjdGV4dEFyZWEgbWF0SW5wdXQgcmVhZG9ubHkgcm93cz1cIjFcIlxyXG4gIFtwbGFjZWhvbGRlcl09XCInaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLm5vcmQnIHwgdHJhbnNsYXRlXCJcclxuICBbdmFsdWVdPVwiY29vcmRpbmF0ZXNbMV1cIj48L3RleHRhcmVhPjwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48YnV0dG9uIGNsYXNzPVwiaWdvLWZvcm0tYnV0dG9uLWdyb3VwXCJcclxuICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAoY2xpY2spPVwiY29weVRleHRUb0NsaXBib2FyZCgpXCI+XHJcbiAgICA8bWF0LWljb24gc3ZnSWNvbj1cImNvbnRlbnQtY29weVwiPjwvbWF0LWljb24+XHJcbiAgICB7eyAnaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLmNvcHknIHwgdHJhbnNsYXRlIH19XHJcbjwvYnV0dG9uPlxyXG5cclxuPGZvcm0gY2xhc3M9XCJpZ28tZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImlnby1pbnB1dC1jb250YWluZXJcIj5cclxuICAgIDxtYXQtbGFiZWw+e3snaWdvLmludGVncmF0aW9uLmFkdmFuY2VkLW1hcC10b29sLmFkdmFuY2VkLWNvb3JkaW5hdGVzLmNvb3JkU3lzdGVtJyB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICA8bWF0LXNlbGVjdCBbKHZhbHVlKV09XCJpbnB1dFByb2pcIj5cclxuICAgICAgPG1hdC1vcHRpb24gbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHByb2plY3Rpb24gb2YgKHByb2plY3Rpb25zJCB8IGFzeW5jKVwiXHJcbiAgICAgICAgW3ZhbHVlXT1cInByb2plY3Rpb25cIlxyXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICB7e3Byb2plY3Rpb24udHJhbnNsYXRlZFZhbHVlIHx8IHByb2plY3Rpb24uYWxpYXMgfX1cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtc2VsZWN0PlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjZW50ZXItdG9nZ2xlIG1hdC10eXBvZ3JhcGh5XCJcclxuICAgIFtjaGVja2VkXT1cImNlbnRlclwiXHJcbiAgICBbbGFiZWxQb3NpdGlvbl09XCInYmVmb3JlJ1wiXHJcbiAgICAoY2hhbmdlKT1cImRpc3BsYXlDZW50ZXIoJGV2ZW50LmNoZWNrZWQpXCI+XHJcbiAgICB7eydpZ28uaW50ZWdyYXRpb24uYWR2YW5jZWQtbWFwLXRvb2wuYWR2YW5jZWQtY29vcmRpbmF0ZXMuY2VudGVyJyB8IHRyYW5zbGF0ZX19XHJcbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPiBcclxuPC9mb3JtPlxyXG5cclxuPHAgY2xhc3M9XCJpZ28tem9vbSBtYXQtdHlwb2dyYXBoeVwiPnt7J2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy56b29tJyB8IHRyYW5zbGF0ZX19IHt7bWFwLnZpZXdDb250cm9sbGVyLmdldFpvb20oKSB9fTwvcD5cclxuPHAgY2xhc3M9XCJpZ28tem9vbSBtYXQtdHlwb2dyYXBoeVwiPnt7J2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5zY2FsZScgfCB0cmFuc2xhdGV9fSB7eyBmb3JtYXR0ZWRTY2FsZSQgfCBhc3luYyB9fTwvcD5cclxuPHAgY2xhc3M9XCJpZ28tem9vbSBtYXQtdHlwb2dyYXBoeVwiPnt7J2lnby5pbnRlZ3JhdGlvbi5hZHZhbmNlZC1tYXAtdG9vbC5hZHZhbmNlZC1jb29yZGluYXRlcy5yZXNvbHV0aW9uJyB8IHRyYW5zbGF0ZX19IHt7bWFwLnZpZXdDb250cm9sbGVyLmdldFJlc29sdXRpb24oKSB8IG51bWJlcjogJzEuMC0wJyB9fTwvcD4iXX0=
|