@igo2/geo 1.14.3 → 1.14.4
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/assets/icons/cross_black_18px.svg +88 -88
- package/assets/icons/place_blue_36px.svg +55 -55
- package/assets/icons/place_green_36px.svg +55 -55
- package/assets/icons/place_red_36px.svg +55 -55
- package/assets/icons/place_yellow_36px.svg +55 -55
- package/esm2020/igo2-geo.mjs +4 -4
- package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +300 -300
- package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +305 -305
- package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +246 -246
- package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +79 -79
- package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +208 -208
- package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +78 -78
- package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +216 -216
- package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +94 -94
- package/esm2020/lib/catalog/catalog.module.mjs +52 -52
- package/esm2020/lib/catalog/index.mjs +4 -4
- package/esm2020/lib/catalog/shared/catalog.abstract.mjs +94 -94
- package/esm2020/lib/catalog/shared/catalog.enum.mjs +15 -15
- package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
- package/esm2020/lib/catalog/shared/catalog.service.mjs +605 -605
- package/esm2020/lib/catalog/shared/index.mjs +5 -5
- package/esm2020/lib/datasource/datasource.module.mjs +21 -21
- package/esm2020/lib/datasource/index.mjs +3 -3
- package/esm2020/lib/datasource/shared/capabilities.service.mjs +431 -431
- package/esm2020/lib/datasource/shared/datasource.service.mjs +235 -235
- package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +144 -144
- package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +108 -108
- package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +14 -14
- package/esm2020/lib/datasource/shared/datasources/data.service.mjs +2 -2
- package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/datasource.mjs +28 -28
- package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +42 -42
- package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +56 -56
- package/esm2020/lib/datasource/shared/datasources/index.mjs +36 -36
- package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +27 -27
- package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +11 -11
- package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +48 -48
- package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +14 -14
- package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +53 -53
- package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +71 -71
- package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +151 -151
- package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +205 -205
- package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +206 -206
- package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +15 -15
- package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +8 -8
- package/esm2020/lib/datasource/shared/index.mjs +4 -4
- package/esm2020/lib/datasource/shared/options/index.mjs +4 -4
- package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +1 -1
- package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +14 -14
- package/esm2020/lib/datasource/shared/options/options-api.service.mjs +80 -80
- package/esm2020/lib/datasource/shared/options/options.service.mjs +2 -2
- package/esm2020/lib/datasource/utils/esri-style-generator.mjs +356 -356
- package/esm2020/lib/datasource/utils/index.mjs +2 -2
- package/esm2020/lib/datasource/utils/tilegrid.mjs +19 -19
- package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +223 -223
- package/esm2020/lib/directions/directions-buttons/index.mjs +2 -2
- package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +289 -289
- package/esm2020/lib/directions/directions-inputs/index.mjs +2 -2
- package/esm2020/lib/directions/directions-results/directions-results.component.mjs +195 -195
- package/esm2020/lib/directions/directions-results/index.mjs +2 -2
- package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
- package/esm2020/lib/directions/directions-sources/directions-source.mjs +2 -2
- package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +15 -15
- package/esm2020/lib/directions/directions-sources/index.mjs +5 -5
- package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +99 -99
- package/esm2020/lib/directions/directions.component.mjs +310 -310
- package/esm2020/lib/directions/directions.module.mjs +101 -101
- package/esm2020/lib/directions/index.mjs +7 -7
- package/esm2020/lib/directions/shared/directions-source.service.mjs +17 -17
- package/esm2020/lib/directions/shared/directions.enum.mjs +28 -28
- package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
- package/esm2020/lib/directions/shared/directions.service.mjs +28 -28
- package/esm2020/lib/directions/shared/directions.utils.mjs +508 -508
- package/esm2020/lib/directions/shared/index.mjs +6 -6
- package/esm2020/lib/directions/shared/store.mjs +23 -23
- package/esm2020/lib/download/download-button/download-button.component.mjs +60 -60
- package/esm2020/lib/download/download-button/index.mjs +2 -2
- package/esm2020/lib/download/download.module.mjs +41 -41
- package/esm2020/lib/download/index.mjs +3 -3
- package/esm2020/lib/download/shared/download.interface.mjs +2 -2
- package/esm2020/lib/download/shared/download.service.mjs +64 -64
- package/esm2020/lib/download/shared/index.mjs +3 -3
- package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +54 -54
- package/esm2020/lib/draw/draw/draw-popup.component.mjs +590 -590
- package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +47 -47
- package/esm2020/lib/draw/draw/draw.component.mjs +1298 -1298
- package/esm2020/lib/draw/draw/draw.module.mjs +112 -112
- package/esm2020/lib/draw/drawingTool.module.mjs +19 -19
- package/esm2020/lib/draw/index.mjs +3 -3
- package/esm2020/lib/draw/shared/draw-icon.service.mjs +26 -26
- package/esm2020/lib/draw/shared/draw-style.service.mjs +189 -189
- package/esm2020/lib/draw/shared/draw.enum.mjs +36 -36
- package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
- package/esm2020/lib/draw/shared/draw.utils.mjs +121 -121
- package/esm2020/lib/draw/shared/index.mjs +5 -5
- package/esm2020/lib/feature/feature-details/feature-details.component.mjs +404 -404
- package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +53 -53
- package/esm2020/lib/feature/feature-details/feature-details.module.mjs +47 -47
- package/esm2020/lib/feature/feature-form/feature-form.component.mjs +111 -111
- package/esm2020/lib/feature/feature-form/feature-form.module.mjs +33 -33
- package/esm2020/lib/feature/feature.module.mjs +27 -27
- package/esm2020/lib/feature/index.mjs +3 -3
- package/esm2020/lib/feature/shared/feature.enums.mjs +9 -9
- package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
- package/esm2020/lib/feature/shared/feature.utils.mjs +346 -346
- package/esm2020/lib/feature/shared/index.mjs +6 -6
- package/esm2020/lib/feature/shared/store.mjs +123 -123
- package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +112 -112
- package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +93 -93
- package/esm2020/lib/feature/shared/strategies/index.mjs +5 -5
- package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +103 -103
- package/esm2020/lib/feature/shared/strategies/loading.mjs +132 -132
- package/esm2020/lib/feature/shared/strategies/selection.mjs +369 -369
- package/esm2020/lib/feature/shared/strategies.utils.mjs +36 -36
- package/esm2020/lib/filter/filter.module.mjs +288 -288
- package/esm2020/lib/filter/index.mjs +15 -15
- package/esm2020/lib/filter/ogc-filter-button/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +139 -139
- package/esm2020/lib/filter/ogc-filter-form/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +644 -644
- package/esm2020/lib/filter/ogc-filter-selection/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +1301 -1301
- package/esm2020/lib/filter/ogc-filter-time/index.mjs +2 -2
- package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +176 -176
- package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +897 -897
- package/esm2020/lib/filter/ogc-filterable-form/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +58 -58
- package/esm2020/lib/filter/ogc-filterable-item/index.mjs +1 -1
- package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +306 -306
- package/esm2020/lib/filter/ogc-filterable-list/index.mjs +2 -2
- package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +30 -30
- package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +43 -43
- package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +54 -54
- package/esm2020/lib/filter/shared/index.mjs +11 -11
- package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +71 -71
- package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +29 -29
- package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
- package/esm2020/lib/filter/shared/ogc-filter.mjs +691 -691
- package/esm2020/lib/filter/shared/ogc-filter.service.mjs +45 -45
- package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +22 -22
- package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +1 -1
- package/esm2020/lib/filter/shared/spatial-filter.service.mjs +268 -268
- package/esm2020/lib/filter/shared/time-filter.enum.mjs +12 -12
- package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
- package/esm2020/lib/filter/shared/time-filter.service.mjs +106 -106
- package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1088 -1088
- package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +207 -207
- package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +1 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +143 -143
- package/esm2020/lib/filter/time-filter-button/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +77 -77
- package/esm2020/lib/filter/time-filter-form/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +733 -733
- package/esm2020/lib/filter/time-filter-item/index.mjs +1 -1
- package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +118 -118
- package/esm2020/lib/filter/time-filter-list/index.mjs +2 -2
- package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +30 -30
- package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +38 -38
- package/esm2020/lib/geo.module.mjs +101 -101
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +520 -520
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +188 -188
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +63 -63
- package/esm2020/lib/geometry/geometry.module.mjs +26 -26
- package/esm2020/lib/geometry/index.mjs +3 -3
- package/esm2020/lib/geometry/shared/controls/draw.mjs +313 -313
- package/esm2020/lib/geometry/shared/controls/index.mjs +4 -4
- package/esm2020/lib/geometry/shared/controls/modify.mjs +520 -520
- package/esm2020/lib/geometry/shared/controls/slice.mjs +176 -176
- package/esm2020/lib/geometry/shared/geometry.errors.mjs +25 -25
- package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
- package/esm2020/lib/geometry/shared/geometry.utils.mjs +121 -121
- package/esm2020/lib/geometry/shared/index.mjs +5 -5
- package/esm2020/lib/import-export/export-button/export-button.component.mjs +63 -63
- package/esm2020/lib/import-export/export-button/index.mjs +2 -2
- package/esm2020/lib/import-export/import-export/import-export.component.mjs +1219 -1219
- package/esm2020/lib/import-export/import-export/index.mjs +2 -2
- package/esm2020/lib/import-export/import-export.module.mjs +95 -95
- package/esm2020/lib/import-export/index.mjs +4 -4
- package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +134 -134
- package/esm2020/lib/import-export/shared/export.errors.mjs +15 -15
- package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
- package/esm2020/lib/import-export/shared/export.service.mjs +194 -194
- package/esm2020/lib/import-export/shared/export.type.mjs +3 -3
- package/esm2020/lib/import-export/shared/export.utils.mjs +54 -54
- package/esm2020/lib/import-export/shared/import.errors.mjs +38 -38
- package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.service.mjs +214 -214
- package/esm2020/lib/import-export/shared/import.utils.mjs +234 -234
- package/esm2020/lib/import-export/shared/index.mjs +11 -11
- package/esm2020/lib/import-export/style-list/index.mjs +4 -4
- package/esm2020/lib/import-export/style-list/style-list.interface.mjs +1 -1
- package/esm2020/lib/import-export/style-list/style-list.module.mjs +22 -22
- package/esm2020/lib/import-export/style-list/style-list.provider.mjs +20 -20
- package/esm2020/lib/import-export/style-list/style-list.service.mjs +50 -50
- package/esm2020/lib/layer/index.mjs +10 -10
- package/esm2020/lib/layer/layer-item/index.mjs +1 -1
- package/esm2020/lib/layer/layer-item/layer-item.component.mjs +299 -299
- package/esm2020/lib/layer/layer-legend/index.mjs +1 -1
- package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +387 -387
- package/esm2020/lib/layer/layer-legend-item/index.mjs +1 -1
- package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +83 -83
- package/esm2020/lib/layer/layer-legend-list/index.mjs +2 -2
- package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +47 -47
- package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +194 -194
- package/esm2020/lib/layer/layer-list/index.mjs +3 -3
- package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +58 -58
- package/esm2020/lib/layer/layer-list/layer-list.component.mjs +1008 -1008
- package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +18 -18
- package/esm2020/lib/layer/layer-list-tool/index.mjs +4 -4
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +164 -164
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +6 -6
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
- package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +21 -21
- package/esm2020/lib/layer/layer.module.mjs +184 -184
- package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
- package/esm2020/lib/layer/shared/index.mjs +6 -6
- package/esm2020/lib/layer/shared/layer.enums.mjs +1 -1
- package/esm2020/lib/layer/shared/layer.service.mjs +185 -185
- package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/image-layer.mjs +67 -67
- package/esm2020/lib/layer/shared/layers/index.mjs +13 -13
- package/esm2020/lib/layer/shared/layers/layer.interface.mjs +16 -16
- package/esm2020/lib/layer/shared/layers/layer.mjs +163 -163
- package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/tile-layer.mjs +46 -46
- package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/vector-layer.mjs +377 -377
- package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
- package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +103 -103
- package/esm2020/lib/layer/shared/style.service.mjs +355 -355
- package/esm2020/lib/layer/shared/vector-style.interface.mjs +1 -1
- package/esm2020/lib/layer/style-modal/index.mjs +1 -1
- package/esm2020/lib/layer/style-modal/style-modal.component.mjs +287 -287
- package/esm2020/lib/layer/track-feature-button/index.mjs +1 -1
- package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +58 -58
- package/esm2020/lib/layer/utils/image-watcher.mjs +61 -61
- package/esm2020/lib/layer/utils/index.mjs +5 -5
- package/esm2020/lib/layer/utils/layer.utils.mjs +9 -9
- package/esm2020/lib/layer/utils/outputLegend.mjs +26 -26
- package/esm2020/lib/layer/utils/tile-watcher.mjs +49 -49
- package/esm2020/lib/layer/utils/vector-watcher.mjs +47 -47
- package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +19 -19
- package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +96 -96
- package/esm2020/lib/map/baselayers-switcher/index.mjs +2 -2
- package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +140 -140
- package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +78 -78
- package/esm2020/lib/map/geolocate-button/index.mjs +1 -1
- package/esm2020/lib/map/home-extent-button/home-extent-button.component.mjs +62 -62
- package/esm2020/lib/map/home-extent-button/index.mjs +1 -1
- package/esm2020/lib/map/index.mjs +13 -13
- package/esm2020/lib/map/info-section/index.mjs +1 -1
- package/esm2020/lib/map/info-section/info-section.component.mjs +29 -29
- package/esm2020/lib/map/map-browser/index.mjs +1 -1
- package/esm2020/lib/map/map-browser/map-browser.component.mjs +65 -65
- package/esm2020/lib/map/map-center/index.mjs +1 -1
- package/esm2020/lib/map/map-center/map-center.component.mjs +49 -49
- package/esm2020/lib/map/map.module.mjs +126 -126
- package/esm2020/lib/map/menu-button/index.mjs +1 -1
- package/esm2020/lib/map/menu-button/menu-button.component.mjs +61 -61
- package/esm2020/lib/map/offline-button/index.mjs +1 -1
- package/esm2020/lib/map/offline-button/offline-button.component.mjs +75 -75
- package/esm2020/lib/map/rotation-button/index.mjs +1 -1
- package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +69 -69
- package/esm2020/lib/map/shared/controllers/controller.mjs +41 -41
- package/esm2020/lib/map/shared/controllers/geolocation.mjs +307 -307
- package/esm2020/lib/map/shared/controllers/index.mjs +3 -3
- package/esm2020/lib/map/shared/controllers/view.mjs +350 -350
- package/esm2020/lib/map/shared/hover-feature.directive.mjs +502 -502
- package/esm2020/lib/map/shared/index.mjs +13 -13
- package/esm2020/lib/map/shared/linkedLayers.utils.mjs +237 -237
- package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +106 -106
- package/esm2020/lib/map/shared/map.enums.mjs +5 -5
- package/esm2020/lib/map/shared/map.interface.mjs +1 -1
- package/esm2020/lib/map/shared/map.mjs +412 -407
- package/esm2020/lib/map/shared/map.service.mjs +28 -28
- package/esm2020/lib/map/shared/map.utils.mjs +462 -462
- package/esm2020/lib/map/shared/mapOffline.directive.mjs +162 -162
- package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
- package/esm2020/lib/map/shared/projection.service.mjs +64 -64
- package/esm2020/lib/map/shared/projection.utils.mjs +63 -63
- package/esm2020/lib/map/swipe-control/index.mjs +1 -1
- package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +192 -192
- package/esm2020/lib/map/utils/layer-watcher.mjs +78 -78
- package/esm2020/lib/map/wake-lock-button/index.mjs +1 -1
- package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +113 -113
- package/esm2020/lib/map/zoom-button/index.mjs +1 -1
- package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +39 -39
- package/esm2020/lib/measure/index.mjs +3 -3
- package/esm2020/lib/measure/measure.module.mjs +19 -19
- package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +36 -36
- package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +179 -179
- package/esm2020/lib/measure/measurer/measurer-item.component.mjs +139 -139
- package/esm2020/lib/measure/measurer/measurer.component.mjs +1041 -1041
- package/esm2020/lib/measure/measurer/measurer.module.mjs +93 -93
- package/esm2020/lib/measure/shared/index.mjs +4 -4
- package/esm2020/lib/measure/shared/measure.enum.mjs +36 -36
- package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
- package/esm2020/lib/measure/shared/measure.utils.mjs +488 -488
- package/esm2020/lib/metadata/index.mjs +2 -2
- package/esm2020/lib/metadata/metadata-button/index.mjs +2 -2
- package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +134 -134
- package/esm2020/lib/metadata/metadata.module.mjs +54 -54
- package/esm2020/lib/metadata/shared/index.mjs +3 -3
- package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
- package/esm2020/lib/metadata/shared/metadata.service.mjs +19 -19
- package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +104 -104
- package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +5 -5
- package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
- package/esm2020/lib/offline/geoDB/geoDB.service.mjs +166 -166
- package/esm2020/lib/offline/geoDB/index.mjs +5 -5
- package/esm2020/lib/offline/index.mjs +2 -2
- package/esm2020/lib/offline/shared/geo-network.service.mjs +65 -65
- package/esm2020/lib/offline/shared/index.mjs +2 -2
- package/esm2020/lib/overlay/index.mjs +2 -2
- package/esm2020/lib/overlay/overlay.module.mjs +22 -22
- package/esm2020/lib/overlay/shared/index.mjs +6 -6
- package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +68 -68
- package/esm2020/lib/overlay/shared/overlay.directive.mjs +32 -32
- package/esm2020/lib/overlay/shared/overlay.enum.mjs +7 -7
- package/esm2020/lib/overlay/shared/overlay.mjs +129 -129
- package/esm2020/lib/overlay/shared/overlay.service.mjs +26 -26
- package/esm2020/lib/overlay/shared/overlay.utils.mjs +102 -102
- package/esm2020/lib/print/index.mjs +4 -4
- package/esm2020/lib/print/print/print.component.mjs +125 -125
- package/esm2020/lib/print/print-form/index.mjs +2 -2
- package/esm2020/lib/print/print-form/print-form.component.mjs +427 -427
- package/esm2020/lib/print/print.module.mjs +64 -64
- package/esm2020/lib/print/shared/geopdf.mjs +57 -57
- package/esm2020/lib/print/shared/index.mjs +5 -5
- package/esm2020/lib/print/shared/print.interface.mjs +1 -1
- package/esm2020/lib/print/shared/print.service.mjs +933 -933
- package/esm2020/lib/print/shared/print.type.mjs +29 -29
- package/esm2020/lib/query/index.mjs +2 -2
- package/esm2020/lib/query/query.module.mjs +28 -28
- package/esm2020/lib/query/shared/index.mjs +7 -7
- package/esm2020/lib/query/shared/query-search-source.mjs +34 -34
- package/esm2020/lib/query/shared/query-search-source.providers.mjs +21 -21
- package/esm2020/lib/query/shared/query.directive.mjs +260 -260
- package/esm2020/lib/query/shared/query.enums.mjs +30 -30
- package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
- package/esm2020/lib/query/shared/query.service.mjs +732 -732
- package/esm2020/lib/query/shared/query.utils.mjs +36 -36
- package/esm2020/lib/search/index.mjs +11 -11
- package/esm2020/lib/search/search-bar/search-bar.component.mjs +511 -511
- package/esm2020/lib/search/search-bar/search-bar.module.mjs +74 -74
- package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +34 -34
- package/esm2020/lib/search/search-results/save-feature-dialog.component.mjs +117 -117
- package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +370 -370
- package/esm2020/lib/search/search-results/search-results-item.component.mjs +123 -123
- package/esm2020/lib/search/search-results/search-results.component.mjs +339 -339
- package/esm2020/lib/search/search-results/search-results.module.mjs +103 -103
- package/esm2020/lib/search/search-selector/search-selector.component.mjs +122 -122
- package/esm2020/lib/search/search-selector/search-selector.module.mjs +55 -55
- package/esm2020/lib/search/search-settings/search-settings.component.mjs +441 -441
- package/esm2020/lib/search/search-settings/search-settings.module.mjs +59 -59
- package/esm2020/lib/search/search.module.mjs +66 -66
- package/esm2020/lib/search/shared/index.mjs +9 -9
- package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +321 -321
- package/esm2020/lib/search/shared/search-source-service.providers.mjs +19 -19
- package/esm2020/lib/search/shared/search-source.service.mjs +46 -46
- package/esm2020/lib/search/shared/search.enums.mjs +3 -3
- package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/search.service.mjs +120 -120
- package/esm2020/lib/search/shared/search.utils.mjs +90 -90
- package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/coordinates.mjs +153 -153
- package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +39 -39
- package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/icherche.mjs +767 -767
- package/esm2020/lib/search/shared/sources/icherche.providers.mjs +65 -65
- package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/ilayer.mjs +320 -320
- package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +39 -39
- package/esm2020/lib/search/shared/sources/index.mjs +17 -17
- package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +2 -2
- package/esm2020/lib/search/shared/sources/nominatim.mjs +252 -252
- package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +22 -22
- package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/source.mjs +178 -178
- package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
- package/esm2020/lib/search/shared/sources/storedqueries.mjs +425 -425
- package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +40 -40
- package/esm2020/lib/toast/index.mjs +2 -2
- package/esm2020/lib/toast/toast.component.mjs +112 -112
- package/esm2020/lib/toast/toast.module.mjs +44 -44
- package/esm2020/lib/utils/commonVectorStyle.interface.mjs +1 -1
- package/esm2020/lib/utils/commonVectorStyle.mjs +74 -74
- package/esm2020/lib/utils/googleLinks.mjs +12 -12
- package/esm2020/lib/utils/id-generator.mjs +109 -109
- package/esm2020/lib/utils/index.mjs +5 -5
- package/esm2020/lib/utils/osmLinks.mjs +9 -9
- package/esm2020/lib/wkt/index.mjs +2 -2
- package/esm2020/lib/wkt/shared/index.mjs +2 -2
- package/esm2020/lib/wkt/shared/wkt.service.mjs +224 -224
- package/esm2020/lib/wkt/wkt.module.mjs +21 -21
- package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +47 -47
- package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +35 -35
- package/esm2020/lib/workspace/confirmation-popup/index.mjs +2 -2
- package/esm2020/lib/workspace/index.mjs +8 -8
- package/esm2020/lib/workspace/shared/edition-workspace.mjs +279 -279
- package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +656 -656
- package/esm2020/lib/workspace/shared/feature-workspace.mjs +34 -34
- package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +149 -149
- package/esm2020/lib/workspace/shared/index.mjs +8 -8
- package/esm2020/lib/workspace/shared/wfs-workspace.mjs +34 -34
- package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +149 -149
- package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +259 -259
- package/esm2020/lib/workspace/shared/workspace.utils.mjs +23 -23
- package/esm2020/lib/workspace/widgets/index.mjs +4 -4
- package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +46 -46
- package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +35 -35
- package/esm2020/lib/workspace/widgets/widgets.mjs +15 -15
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +132 -132
- package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +27 -27
- package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +112 -112
- package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +27 -27
- package/esm2020/lib/workspace/workspace.module.mjs +61 -61
- package/esm2020/public_api.mjs +54 -54
- package/fesm2015/igo2-geo.mjs +44992 -44987
- package/fesm2015/igo2-geo.mjs.map +1 -1
- package/fesm2020/igo2-geo.mjs +43034 -43029
- package/fesm2020/igo2-geo.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +126 -126
- package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +80 -80
- package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +105 -105
- package/lib/catalog/catalog-browser/catalog-browser.module.d.ts +22 -22
- package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +45 -45
- package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +25 -25
- package/lib/catalog/catalog-library/catalog-library.component.d.ts +65 -65
- package/lib/catalog/catalog-library/catalog-library.module.d.ts +26 -26
- package/lib/catalog/catalog.module.d.ts +14 -14
- package/lib/catalog/index.d.ts +4 -4
- package/lib/catalog/shared/catalog.abstract.d.ts +50 -50
- package/lib/catalog/shared/catalog.enum.d.ts +14 -14
- package/lib/catalog/shared/catalog.interface.d.ts +66 -66
- package/lib/catalog/shared/catalog.service.d.ts +36 -36
- package/lib/catalog/shared/index.d.ts +4 -4
- package/lib/datasource/datasource.module.d.ts +8 -8
- package/lib/datasource/index.d.ts +2 -2
- package/lib/datasource/shared/capabilities.service.d.ts +37 -37
- package/lib/datasource/shared/datasource.service.d.ts +37 -37
- package/lib/datasource/shared/datasources/any-datasource.d.ts +16 -16
- package/lib/datasource/shared/datasources/any-datasource.interface.d.ts +15 -15
- package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +14 -14
- package/lib/datasource/shared/datasources/arcgisrest-datasource.interface.d.ts +14 -14
- package/lib/datasource/shared/datasources/carto-datasource.d.ts +15 -15
- package/lib/datasource/shared/datasources/carto-datasource.interface.d.ts +13 -13
- package/lib/datasource/shared/datasources/cluster-datasource.d.ts +10 -10
- package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +11 -11
- package/lib/datasource/shared/datasources/data.service.d.ts +3 -3
- package/lib/datasource/shared/datasources/datasource.d.ts +20 -20
- package/lib/datasource/shared/datasources/datasource.interface.d.ts +100 -100
- package/lib/datasource/shared/datasources/feature-datasource.d.ts +12 -12
- package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +18 -18
- package/lib/datasource/shared/datasources/imagearcgisrest-datasource.d.ts +15 -15
- package/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.d.ts +15 -15
- package/lib/datasource/shared/datasources/index.d.ts +35 -35
- package/lib/datasource/shared/datasources/mvt-datasource.d.ts +10 -10
- package/lib/datasource/shared/datasources/mvt-datasource.interface.d.ts +13 -13
- package/lib/datasource/shared/datasources/osm-datasource.d.ts +9 -9
- package/lib/datasource/shared/datasources/osm-datasource.interface.d.ts +7 -7
- package/lib/datasource/shared/datasources/tilearcgisrest-datasource.d.ts +15 -15
- package/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.d.ts +14 -14
- package/lib/datasource/shared/datasources/tiledebug-datasource.d.ts +9 -9
- package/lib/datasource/shared/datasources/tiledebug-datasource.interface.d.ts +9 -9
- package/lib/datasource/shared/datasources/websocket-datasource.d.ts +15 -15
- package/lib/datasource/shared/datasources/websocket-datasource.interface.d.ts +7 -7
- package/lib/datasource/shared/datasources/wfs-datasource.d.ts +20 -20
- package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +20 -20
- package/lib/datasource/shared/datasources/wfs.service.d.ts +17 -17
- package/lib/datasource/shared/datasources/wms-datasource.d.ts +31 -31
- package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +32 -32
- package/lib/datasource/shared/datasources/wms-wfs.utils.d.ts +41 -41
- package/lib/datasource/shared/datasources/wmts-datasource.d.ts +10 -10
- package/lib/datasource/shared/datasources/wmts-datasource.interface.d.ts +13 -13
- package/lib/datasource/shared/datasources/xyz-datasource.d.ts +9 -9
- package/lib/datasource/shared/datasources/xyz-datasource.interface.d.ts +11 -11
- package/lib/datasource/shared/index.d.ts +4 -4
- package/lib/datasource/shared/options/index.d.ts +4 -4
- package/lib/datasource/shared/options/options-api.interface.d.ts +4 -4
- package/lib/datasource/shared/options/options-api.providers.d.ts +10 -10
- package/lib/datasource/shared/options/options-api.service.d.ts +16 -16
- package/lib/datasource/shared/options/options.service.d.ts +6 -6
- package/lib/datasource/utils/esri-style-generator.d.ts +21 -21
- package/lib/datasource/utils/index.d.ts +2 -2
- package/lib/datasource/utils/tilegrid.d.ts +2 -2
- package/lib/directions/directions-buttons/directions-buttons.component.d.ts +30 -30
- package/lib/directions/directions-buttons/index.d.ts +1 -1
- package/lib/directions/directions-inputs/directions-inputs.component.d.ts +45 -45
- package/lib/directions/directions-inputs/index.d.ts +1 -1
- package/lib/directions/directions-results/directions-results.component.d.ts +30 -30
- package/lib/directions/directions-results/index.d.ts +1 -1
- package/lib/directions/directions-sources/directions-source.d.ts +7 -7
- package/lib/directions/directions-sources/directions-source.interface.d.ts +11 -11
- package/lib/directions/directions-sources/directions-source.provider.d.ts +11 -11
- package/lib/directions/directions-sources/index.d.ts +4 -4
- package/lib/directions/directions-sources/osrm-directions-source.d.ts +23 -23
- package/lib/directions/directions.component.d.ts +56 -56
- package/lib/directions/directions.module.d.ts +26 -26
- package/lib/directions/index.d.ts +6 -6
- package/lib/directions/shared/directions-source.service.d.ts +11 -11
- package/lib/directions/shared/directions.enum.d.ts +22 -22
- package/lib/directions/shared/directions.interface.d.ts +126 -126
- package/lib/directions/shared/directions.service.d.ts +13 -13
- package/lib/directions/shared/directions.utils.d.ts +42 -42
- package/lib/directions/shared/index.d.ts +5 -5
- package/lib/directions/shared/store.d.ts +18 -18
- package/lib/download/download-button/download-button.component.d.ts +18 -18
- package/lib/download/download-button/index.d.ts +1 -1
- package/lib/download/download.module.d.ts +14 -14
- package/lib/download/index.d.ts +2 -2
- package/lib/download/shared/download.interface.d.ts +10 -10
- package/lib/download/shared/download.service.d.ts +11 -11
- package/lib/download/shared/index.d.ts +2 -2
- package/lib/draw/draw/draw-layer-popup.component.d.ts +14 -14
- package/lib/draw/draw/draw-popup.component.d.ts +63 -63
- package/lib/draw/draw/draw-shorcuts.component.d.ts +5 -5
- package/lib/draw/draw/draw.component.d.ts +239 -239
- package/lib/draw/draw/draw.module.d.ts +34 -34
- package/lib/draw/drawingTool.module.d.ts +7 -7
- package/lib/draw/index.d.ts +2 -2
- package/lib/draw/shared/draw-icon.service.d.ts +12 -12
- package/lib/draw/shared/draw-style.service.d.ts +36 -36
- package/lib/draw/shared/draw.enum.d.ts +32 -32
- package/lib/draw/shared/draw.interface.d.ts +40 -40
- package/lib/draw/shared/draw.utils.d.ts +35 -35
- package/lib/draw/shared/index.d.ts +5 -5
- package/lib/feature/feature-details/feature-details.component.d.ts +60 -60
- package/lib/feature/feature-details/feature-details.directive.d.ts +19 -19
- package/lib/feature/feature-details/feature-details.module.d.ts +15 -15
- package/lib/feature/feature-form/feature-form.component.d.ts +50 -50
- package/lib/feature/feature-form/feature-form.module.d.ts +12 -12
- package/lib/feature/feature.module.d.ts +9 -9
- package/lib/feature/index.d.ts +3 -3
- package/lib/feature/shared/feature.enums.d.ts +7 -7
- package/lib/feature/shared/feature.interfaces.d.ts +74 -74
- package/lib/feature/shared/feature.utils.d.ts +104 -104
- package/lib/feature/shared/index.d.ts +6 -6
- package/lib/feature/shared/store.d.ts +71 -71
- package/lib/feature/shared/strategies/in-map-extent.d.ts +52 -52
- package/lib/feature/shared/strategies/in-map-resolution.d.ts +52 -52
- package/lib/feature/shared/strategies/index.d.ts +5 -5
- package/lib/feature/shared/strategies/loading-layer.d.ts +59 -59
- package/lib/feature/shared/strategies/loading.d.ts +75 -75
- package/lib/feature/shared/strategies/selection.d.ts +176 -176
- package/lib/feature/shared/strategies.utils.d.ts +17 -17
- package/lib/filter/filter.module.d.ts +53 -53
- package/lib/filter/index.d.ts +15 -15
- package/lib/filter/ogc-filter-button/index.d.ts +1 -1
- package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +20 -20
- package/lib/filter/ogc-filter-form/index.d.ts +1 -1
- package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +65 -65
- package/lib/filter/ogc-filter-selection/index.d.ts +1 -1
- package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +93 -93
- package/lib/filter/ogc-filter-time/index.d.ts +2 -2
- package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +39 -39
- package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +86 -86
- package/lib/filter/ogc-filterable-form/index.d.ts +1 -1
- package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +15 -15
- package/lib/filter/ogc-filterable-item/index.d.ts +1 -1
- package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +41 -41
- package/lib/filter/ogc-filterable-list/index.d.ts +2 -2
- package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +14 -14
- package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +10 -10
- package/lib/filter/shared/filterable-datasource.pipe.d.ts +10 -10
- package/lib/filter/shared/index.d.ts +11 -11
- package/lib/filter/shared/ogc-filter-time.service.d.ts +19 -19
- package/lib/filter/shared/ogc-filter.d.ts +29 -29
- package/lib/filter/shared/ogc-filter.enum.d.ts +27 -27
- package/lib/filter/shared/ogc-filter.interface.d.ts +200 -200
- package/lib/filter/shared/ogc-filter.service.d.ts +11 -11
- package/lib/filter/shared/spatial-filter.enum.d.ts +19 -19
- package/lib/filter/shared/spatial-filter.interface.d.ts +10 -10
- package/lib/filter/shared/spatial-filter.service.d.ts +37 -37
- package/lib/filter/shared/time-filter.enum.d.ts +10 -10
- package/lib/filter/shared/time-filter.interface.d.ts +29 -29
- package/lib/filter/shared/time-filter.service.d.ts +11 -11
- package/lib/filter/spatial-filter/spatial-filter-item/index.d.ts +1 -1
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +166 -166
- package/lib/filter/spatial-filter/spatial-filter-list/index.d.ts +1 -1
- package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +58 -58
- package/lib/filter/spatial-filter/spatial-filter-type/index.d.ts +1 -1
- package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +45 -45
- package/lib/filter/time-filter-button/index.d.ts +1 -1
- package/lib/filter/time-filter-button/time-filter-button.component.d.ts +20 -20
- package/lib/filter/time-filter-form/index.d.ts +1 -1
- package/lib/filter/time-filter-form/time-filter-form.component.d.ts +77 -77
- package/lib/filter/time-filter-item/index.d.ts +1 -1
- package/lib/filter/time-filter-item/time-filter-item.component.d.ts +28 -28
- package/lib/filter/time-filter-list/index.d.ts +2 -2
- package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +14 -14
- package/lib/filter/time-filter-list/time-filter-list.component.d.ts +12 -12
- package/lib/geo.module.d.ts +28 -28
- package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +206 -206
- package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +88 -88
- package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +19 -19
- package/lib/geometry/geometry.module.d.ts +8 -8
- package/lib/geometry/index.d.ts +3 -3
- package/lib/geometry/shared/controls/draw.d.ts +150 -150
- package/lib/geometry/shared/controls/index.d.ts +3 -3
- package/lib/geometry/shared/controls/modify.d.ts +228 -228
- package/lib/geometry/shared/controls/slice.d.ts +99 -99
- package/lib/geometry/shared/geometry.errors.d.ts +11 -11
- package/lib/geometry/shared/geometry.interfaces.d.ts +13 -13
- package/lib/geometry/shared/geometry.utils.d.ts +45 -45
- package/lib/geometry/shared/index.d.ts +4 -4
- package/lib/import-export/export-button/export-button.component.d.ts +16 -16
- package/lib/import-export/export-button/index.d.ts +1 -1
- package/lib/import-export/import-export/import-export.component.d.ts +104 -104
- package/lib/import-export/import-export/index.d.ts +1 -1
- package/lib/import-export/import-export.module.d.ts +26 -26
- package/lib/import-export/index.d.ts +4 -4
- package/lib/import-export/shared/drop-geo-file.directive.d.ts +36 -36
- package/lib/import-export/shared/export.errors.d.ts +8 -8
- package/lib/import-export/shared/export.interface.d.ts +11 -11
- package/lib/import-export/shared/export.service.d.ts +30 -30
- package/lib/import-export/shared/export.type.d.ts +16 -16
- package/lib/import-export/shared/export.utils.d.ts +19 -19
- package/lib/import-export/shared/import.errors.d.ts +20 -20
- package/lib/import-export/shared/import.interface.d.ts +8 -8
- package/lib/import-export/shared/import.service.d.ts +31 -31
- package/lib/import-export/shared/import.utils.d.ts +18 -18
- package/lib/import-export/shared/index.d.ts +10 -10
- package/lib/import-export/style-list/index.d.ts +4 -4
- package/lib/import-export/style-list/style-list.interface.d.ts +6 -6
- package/lib/import-export/style-list/style-list.module.d.ts +8 -8
- package/lib/import-export/style-list/style-list.provider.d.ts +15 -15
- package/lib/import-export/style-list/style-list.service.d.ts +18 -18
- package/lib/layer/index.d.ts +10 -10
- package/lib/layer/layer-item/index.d.ts +1 -1
- package/lib/layer/layer-item/layer-item.component.d.ts +62 -62
- package/lib/layer/layer-legend/index.d.ts +1 -1
- package/lib/layer/layer-legend/layer-legend.component.d.ts +90 -90
- package/lib/layer/layer-legend-item/index.d.ts +1 -1
- package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +22 -22
- package/lib/layer/layer-legend-list/index.d.ts +2 -2
- package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +16 -16
- package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +31 -31
- package/lib/layer/layer-list/index.d.ts +3 -3
- package/lib/layer/layer-list/layer-list-binding.directive.d.ts +19 -19
- package/lib/layer/layer-list/layer-list.component.d.ts +127 -127
- package/lib/layer/layer-list/layer-list.enum.d.ts +15 -15
- package/lib/layer/layer-list-tool/index.d.ts +4 -4
- package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +32 -32
- package/lib/layer/layer-list-tool/layer-list-tool.enum.d.ts +5 -5
- package/lib/layer/layer-list-tool/layer-list-tool.interface.d.ts +8 -8
- package/lib/layer/layer-list-tool/layer-list-tool.service.d.ts +14 -14
- package/lib/layer/layer.module.d.ts +36 -36
- package/lib/layer/shared/clusterParam.d.ts +13 -13
- package/lib/layer/shared/index.d.ts +6 -6
- package/lib/layer/shared/layer.enums.d.ts +1 -1
- package/lib/layer/shared/layer.service.d.ts +30 -30
- package/lib/layer/shared/layers/any-layer.d.ts +6 -6
- package/lib/layer/shared/layers/any-layer.interface.d.ts +6 -6
- package/lib/layer/shared/layers/image-layer.d.ts +22 -22
- package/lib/layer/shared/layers/image-layer.interface.d.ts +19 -19
- package/lib/layer/shared/layers/index.d.ts +12 -12
- package/lib/layer/shared/layers/layer.d.ts +62 -62
- package/lib/layer/shared/layers/layer.interface.d.ts +109 -109
- package/lib/layer/shared/layers/tile-layer.d.ts +31 -31
- package/lib/layer/shared/layers/tile-layer.interface.d.ts +20 -20
- package/lib/layer/shared/layers/vector-layer.d.ts +78 -78
- package/lib/layer/shared/layers/vector-layer.interface.d.ts +41 -41
- package/lib/layer/shared/layers/vectortile-layer.d.ts +28 -28
- package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +18 -18
- package/lib/layer/shared/style.service.d.ts +57 -57
- package/lib/layer/shared/vector-style.interface.d.ts +38 -38
- package/lib/layer/style-modal/index.d.ts +1 -1
- package/lib/layer/style-modal/style-modal.component.d.ts +42 -42
- package/lib/layer/track-feature-button/index.d.ts +1 -1
- package/lib/layer/track-feature-button/track-feature-button.component.d.ts +15 -15
- package/lib/layer/utils/image-watcher.d.ts +17 -17
- package/lib/layer/utils/index.d.ts +5 -5
- package/lib/layer/utils/layer.utils.d.ts +2 -2
- package/lib/layer/utils/outputLegend.d.ts +7 -7
- package/lib/layer/utils/tile-watcher.d.ts +14 -14
- package/lib/layer/utils/vector-watcher.d.ts +13 -13
- package/lib/map/baselayers-switcher/baselayers-switcher.animation.d.ts +2 -2
- package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +21 -21
- package/lib/map/baselayers-switcher/index.d.ts +2 -2
- package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +29 -29
- package/lib/map/geolocate-button/geolocate-button.component.d.ts +22 -22
- package/lib/map/geolocate-button/index.d.ts +1 -1
- package/lib/map/home-extent-button/home-extent-button.component.d.ts +20 -20
- package/lib/map/home-extent-button/index.d.ts +1 -1
- package/lib/map/index.d.ts +13 -13
- package/lib/map/info-section/index.d.ts +1 -1
- package/lib/map/info-section/info-section.component.d.ts +7 -7
- package/lib/map/map-browser/index.d.ts +1 -1
- package/lib/map/map-browser/map-browser.component.d.ts +25 -25
- package/lib/map/map-center/index.d.ts +1 -1
- package/lib/map/map-center/map-center.component.d.ts +31 -31
- package/lib/map/map.module.d.ts +28 -28
- package/lib/map/menu-button/index.d.ts +1 -1
- package/lib/map/menu-button/menu-button.component.d.ts +17 -17
- package/lib/map/offline-button/index.d.ts +1 -1
- package/lib/map/offline-button/offline-button.component.d.ts +23 -23
- package/lib/map/rotation-button/index.d.ts +1 -1
- package/lib/map/rotation-button/rotation-button.component.d.ts +17 -17
- package/lib/map/shared/controllers/controller.d.ts +29 -29
- package/lib/map/shared/controllers/geolocation.d.ts +112 -112
- package/lib/map/shared/controllers/index.d.ts +3 -3
- package/lib/map/shared/controllers/view.d.ts +200 -200
- package/lib/map/shared/hover-feature.directive.d.ts +132 -132
- package/lib/map/shared/index.d.ts +13 -13
- package/lib/map/shared/linkedLayers.utils.d.ts +17 -17
- package/lib/map/shared/map-pointer-position.directive.d.ts +71 -71
- package/lib/map/shared/map.d.ts +135 -135
- package/lib/map/shared/map.enums.d.ts +4 -4
- package/lib/map/shared/map.interface.d.ts +57 -57
- package/lib/map/shared/map.service.d.ts +19 -19
- package/lib/map/shared/map.utils.d.ts +90 -90
- package/lib/map/shared/mapOffline.directive.d.ts +21 -21
- package/lib/map/shared/projection.interfaces.d.ts +29 -29
- package/lib/map/shared/projection.service.d.ts +19 -19
- package/lib/map/shared/projection.utils.d.ts +19 -19
- package/lib/map/swipe-control/index.d.ts +1 -1
- package/lib/map/swipe-control/swipe-control.component.d.ts +97 -97
- package/lib/map/utils/layer-watcher.d.ts +20 -20
- package/lib/map/wake-lock-button/index.d.ts +1 -1
- package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +30 -30
- package/lib/map/zoom-button/index.d.ts +1 -1
- package/lib/map/zoom-button/zoom-button.component.d.ts +12 -12
- package/lib/measure/index.d.ts +3 -3
- package/lib/measure/measure.module.d.ts +7 -7
- package/lib/measure/measurer/measure-format.pipe.d.ts +15 -15
- package/lib/measure/measurer/measurer-dialog.component.d.ts +14 -14
- package/lib/measure/measurer/measurer-item.component.d.ts +66 -66
- package/lib/measure/measurer/measurer.component.d.ts +405 -405
- package/lib/measure/measurer/measurer.module.d.ts +25 -25
- package/lib/measure/shared/index.d.ts +3 -3
- package/lib/measure/shared/measure.enum.d.ts +33 -33
- package/lib/measure/shared/measure.interfaces.d.ts +21 -21
- package/lib/measure/shared/measure.utils.d.ts +180 -180
- package/lib/metadata/index.d.ts +2 -2
- package/lib/metadata/metadata-button/index.d.ts +1 -1
- package/lib/metadata/metadata-button/metadata-button.component.d.ts +26 -26
- package/lib/metadata/metadata.module.d.ts +15 -15
- package/lib/metadata/shared/index.d.ts +2 -2
- package/lib/metadata/shared/metadata.interface.d.ts +13 -13
- package/lib/metadata/shared/metadata.service.d.ts +8 -8
- package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +14 -14
- package/lib/offline/geoDB/geoDB.enums.d.ts +4 -4
- package/lib/offline/geoDB/geoDB.interface.d.ts +19 -19
- package/lib/offline/geoDB/geoDB.service.d.ts +37 -37
- package/lib/offline/geoDB/index.d.ts +4 -4
- package/lib/offline/index.d.ts +2 -2
- package/lib/offline/shared/geo-network.service.d.ts +28 -28
- package/lib/offline/shared/index.d.ts +1 -1
- package/lib/overlay/index.d.ts +1 -1
- package/lib/overlay/overlay.module.d.ts +9 -9
- package/lib/overlay/shared/index.d.ts +6 -6
- package/lib/overlay/shared/overlay-marker-style.utils.d.ts +11 -11
- package/lib/overlay/shared/overlay.d.ts +81 -81
- package/lib/overlay/shared/overlay.directive.d.ts +18 -18
- package/lib/overlay/shared/overlay.enum.d.ts +6 -6
- package/lib/overlay/shared/overlay.service.d.ts +14 -14
- package/lib/overlay/shared/overlay.utils.d.ts +17 -17
- package/lib/print/index.d.ts +3 -3
- package/lib/print/print/print.component.d.ts +35 -35
- package/lib/print/print-form/index.d.ts +1 -1
- package/lib/print/print-form/print-form.component.d.ts +97 -97
- package/lib/print/print.module.d.ts +19 -19
- package/lib/print/shared/geopdf.d.ts +1 -1
- package/lib/print/shared/index.d.ts +4 -4
- package/lib/print/shared/print.interface.d.ts +22 -22
- package/lib/print/shared/print.service.d.ts +168 -168
- package/lib/print/shared/print.type.d.ts +45 -45
- package/lib/query/index.d.ts +1 -1
- package/lib/query/query.module.d.ts +11 -11
- package/lib/query/shared/index.d.ts +6 -6
- package/lib/query/shared/query-search-source.d.ts +17 -17
- package/lib/query/shared/query-search-source.providers.d.ts +17 -17
- package/lib/query/shared/query.directive.d.ts +105 -105
- package/lib/query/shared/query.enums.d.ts +26 -26
- package/lib/query/shared/query.interfaces.d.ts +35 -35
- package/lib/query/shared/query.service.d.ts +56 -56
- package/lib/query/shared/query.utils.d.ts +27 -27
- package/lib/search/index.d.ts +11 -11
- package/lib/search/search-bar/search-bar.component.d.ts +230 -230
- package/lib/search/search-bar/search-bar.module.d.ts +23 -23
- package/lib/search/search-bar/search-url-param.directive.d.ts +13 -13
- package/lib/search/search-results/save-feature-dialog.component.d.ts +32 -32
- package/lib/search/search-results/search-results-add-button.component.d.ts +76 -76
- package/lib/search/search-results/search-results-item.component.d.ts +47 -47
- package/lib/search/search-results/search-results.component.d.ts +161 -161
- package/lib/search/search-results/search-results.module.d.ts +28 -28
- package/lib/search/search-selector/search-selector.component.d.ts +58 -58
- package/lib/search/search-selector/search-selector.module.d.ts +19 -19
- package/lib/search/search-settings/search-settings.component.d.ts +102 -102
- package/lib/search/search-settings/search-settings.module.d.ts +20 -20
- package/lib/search/search.module.d.ts +14 -14
- package/lib/search/shared/index.d.ts +8 -8
- package/lib/search/shared/search-pointer-summary.directive.d.ts +133 -133
- package/lib/search/shared/search-source-service.providers.d.ts +15 -15
- package/lib/search/shared/search-source.service.d.ts +32 -32
- package/lib/search/shared/search.enums.d.ts +1 -1
- package/lib/search/shared/search.interfaces.d.ts +29 -29
- package/lib/search/shared/search.service.d.ts +53 -53
- package/lib/search/shared/search.utils.d.ts +39 -39
- package/lib/search/shared/sources/coordinates.d.ts +40 -40
- package/lib/search/shared/sources/coordinates.interfaces.d.ts +12 -12
- package/lib/search/shared/sources/coordinates.providers.d.ts +31 -31
- package/lib/search/shared/sources/icherche.d.ts +96 -96
- package/lib/search/shared/sources/icherche.interfaces.d.ts +30 -30
- package/lib/search/shared/sources/icherche.providers.d.ts +46 -46
- package/lib/search/shared/sources/ilayer.d.ts +55 -55
- package/lib/search/shared/sources/ilayer.interfaces.d.ts +47 -47
- package/lib/search/shared/sources/ilayer.providers.d.ts +31 -31
- package/lib/search/shared/sources/index.d.ts +17 -17
- package/lib/search/shared/sources/nominatim.d.ts +45 -45
- package/lib/search/shared/sources/nominatim.interfaces.d.ts +10 -10
- package/lib/search/shared/sources/nominatim.providers.d.ts +18 -18
- package/lib/search/shared/sources/source.d.ts +108 -108
- package/lib/search/shared/sources/source.interfaces.d.ts +47 -47
- package/lib/search/shared/sources/storedqueries.d.ts +73 -73
- package/lib/search/shared/sources/storedqueries.interfaces.d.ts +42 -42
- package/lib/search/shared/sources/storedqueries.providers.d.ts +32 -32
- package/lib/toast/index.d.ts +1 -1
- package/lib/toast/toast.component.d.ts +33 -33
- package/lib/toast/toast.module.d.ts +14 -14
- package/lib/utils/commonVectorStyle.d.ts +14 -14
- package/lib/utils/commonVectorStyle.interface.d.ts +16 -16
- package/lib/utils/googleLinks.d.ts +5 -5
- package/lib/utils/id-generator.d.ts +54 -54
- package/lib/utils/index.d.ts +5 -5
- package/lib/utils/osmLinks.d.ts +4 -4
- package/lib/wkt/index.d.ts +1 -1
- package/lib/wkt/shared/index.d.ts +1 -1
- package/lib/wkt/shared/wkt.service.d.ts +19 -19
- package/lib/wkt/wkt.module.d.ts +8 -8
- package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +23 -23
- package/lib/workspace/confirmation-popup/confirmation-popup.module.d.ts +14 -14
- package/lib/workspace/confirmation-popup/index.d.ts +2 -2
- package/lib/workspace/index.d.ts +7 -7
- package/lib/workspace/shared/edition-workspace.d.ts +82 -82
- package/lib/workspace/shared/edition-workspace.service.d.ts +52 -52
- package/lib/workspace/shared/feature-workspace.d.ts +18 -18
- package/lib/workspace/shared/feature-workspace.service.d.ts +19 -19
- package/lib/workspace/shared/index.d.ts +7 -7
- package/lib/workspace/shared/wfs-workspace.d.ts +18 -18
- package/lib/workspace/shared/wfs-workspace.service.d.ts +19 -19
- package/lib/workspace/shared/wms-workspace.service.d.ts +22 -22
- package/lib/workspace/shared/workspace.utils.d.ts +10 -10
- package/lib/workspace/widgets/index.d.ts +3 -3
- package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +29 -29
- package/lib/workspace/widgets/ogc-filter/ogc-filter.module.d.ts +14 -14
- package/lib/workspace/widgets/widgets.d.ts +9 -9
- package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +32 -32
- package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +11 -11
- package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +26 -26
- package/lib/workspace/workspace-updator/workspace-updator.module.d.ts +11 -11
- package/lib/workspace/workspace.module.d.ts +14 -14
- package/package.json +4 -4
- package/public_api.d.ts +51 -51
|
@@ -1,370 +1,370 @@
|
|
|
1
|
-
import OlDragBoxInteraction from 'ol/interaction/DragBox';
|
|
2
|
-
import { unByKey } from 'ol/Observable';
|
|
3
|
-
import { combineLatest } from 'rxjs';
|
|
4
|
-
import { map, debounceTime, skip } from 'rxjs/operators';
|
|
5
|
-
import { EntityStoreStrategy } from '@igo2/common';
|
|
6
|
-
import { FeatureDataSource } from '../../../datasource';
|
|
7
|
-
import { VectorLayer } from '../../../layer/shared/layers/vector-layer';
|
|
8
|
-
import { ctrlKeyDown } from '../../../map/shared/map.utils';
|
|
9
|
-
import { FeatureStore } from '../store';
|
|
10
|
-
import { FeatureMotion } from '../feature.enums';
|
|
11
|
-
export class OlDragSelectInteraction extends OlDragBoxInteraction {
|
|
12
|
-
constructor(options) {
|
|
13
|
-
super(options);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* This strategy synchronizes a store and a layer selected entities.
|
|
18
|
-
* The store <-> layer binding is a two-way binding.
|
|
19
|
-
*
|
|
20
|
-
* In many cases, a single strategy bound to multiple stores
|
|
21
|
-
* will yield better results that multiple strategies with each their
|
|
22
|
-
* own store. In the latter scenario, a click on overlapping features
|
|
23
|
-
* would trigger the strategy of each layer and they would cancel
|
|
24
|
-
* each other as well as move the map view around needlessly.
|
|
25
|
-
*/
|
|
26
|
-
export class FeatureStoreSelectionStrategy extends EntityStoreStrategy {
|
|
27
|
-
constructor(options) {
|
|
28
|
-
super(options);
|
|
29
|
-
this.options = options;
|
|
30
|
-
this.setMotion(options.motion);
|
|
31
|
-
this._overlayStore = this.createOverlayStore();
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* The map the layers belong to
|
|
35
|
-
*/
|
|
36
|
-
get map() {
|
|
37
|
-
return this.options.map;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* A feature store that'll contain the selected features. It has it's own
|
|
41
|
-
* layer, shared by all the stores this staretgy is bound to.
|
|
42
|
-
*/
|
|
43
|
-
get overlayStore() {
|
|
44
|
-
return this._overlayStore;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Bind this strategy to a store and force this strategy's
|
|
48
|
-
* reactivation to properly setup watchers.
|
|
49
|
-
* @param store Feature store
|
|
50
|
-
*/
|
|
51
|
-
bindStore(store) {
|
|
52
|
-
super.bindStore(store);
|
|
53
|
-
if (this.active === true) {
|
|
54
|
-
// Force reactivation
|
|
55
|
-
this.activate();
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Unbind this strategy from a store and force this strategy's
|
|
60
|
-
* reactivation to properly setup watchers.
|
|
61
|
-
* @param store Feature store
|
|
62
|
-
*/
|
|
63
|
-
unbindStore(store) {
|
|
64
|
-
super.unbindStore(store);
|
|
65
|
-
if (this.active === true) {
|
|
66
|
-
// Force reactivation
|
|
67
|
-
this.activate();
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Define the motion to apply on select
|
|
72
|
-
* @param motion Feature motion
|
|
73
|
-
*/
|
|
74
|
-
setMotion(motion) {
|
|
75
|
-
this.motion = motion;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Unselect all entities, from all stores
|
|
79
|
-
*/
|
|
80
|
-
unselectAll() {
|
|
81
|
-
this.stores.forEach((store) => {
|
|
82
|
-
store.state.updateAll({ selected: false });
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Clear the overlay
|
|
87
|
-
*/
|
|
88
|
-
clear() {
|
|
89
|
-
this.overlayStore.source.ol.clear();
|
|
90
|
-
this.overlayStore.clear();
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Deactivate the selection without removing the selection
|
|
94
|
-
* overlay.
|
|
95
|
-
*/
|
|
96
|
-
deactivateSelection() {
|
|
97
|
-
this.unlistenToMapClick();
|
|
98
|
-
this.removeDragBoxInteraction();
|
|
99
|
-
this.unwatchAll();
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Add the overlay layer, setup the map click lsitener and
|
|
103
|
-
* start watching for stores selection
|
|
104
|
-
* @internal
|
|
105
|
-
*/
|
|
106
|
-
doActivate() {
|
|
107
|
-
this.addOverlayLayer();
|
|
108
|
-
this.listenToMapClick();
|
|
109
|
-
if (this.options.dragBox === true) {
|
|
110
|
-
this.addDragBoxInteraction();
|
|
111
|
-
}
|
|
112
|
-
this.watchAll();
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Remove the overlay layer, remove the map click lsitener and
|
|
116
|
-
* stop watching for stores selection
|
|
117
|
-
* @internal
|
|
118
|
-
*/
|
|
119
|
-
doDeactivate() {
|
|
120
|
-
this.deactivateSelection();
|
|
121
|
-
this.removeOverlayLayer();
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Create a single observable of all the stores. With a single observable,
|
|
125
|
-
* features can be added all at once to the overlay layer and a single
|
|
126
|
-
* motion can be performed. Multiple observable would have
|
|
127
|
-
* a cancelling effect on each other.
|
|
128
|
-
*/
|
|
129
|
-
watchAll() {
|
|
130
|
-
this.unwatchAll();
|
|
131
|
-
const stores$ = this.stores.map((store) => {
|
|
132
|
-
return store.stateView
|
|
133
|
-
.manyBy$((record) => {
|
|
134
|
-
return record.state.selected === true;
|
|
135
|
-
})
|
|
136
|
-
.pipe(map((records) => records.map((record) => record.entity)));
|
|
137
|
-
});
|
|
138
|
-
this.stores$$ = combineLatest(stores$)
|
|
139
|
-
.pipe(debounceTime(5), skip(1), // Skip intial selection
|
|
140
|
-
map((features) => features.reduce((a, b) => a.concat(b))))
|
|
141
|
-
.subscribe((features) => this.onSelectFromStore(features));
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Stop watching for selection in all stores.
|
|
145
|
-
*/
|
|
146
|
-
unwatchAll() {
|
|
147
|
-
if (this.stores$$ !== undefined) {
|
|
148
|
-
this.stores$$.unsubscribe();
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Add a 'singleclick' listener to the map that'll allow selecting
|
|
153
|
-
* features by clicking on the map. The selection will be performed
|
|
154
|
-
* only on the layers bound to this strategy.
|
|
155
|
-
*/
|
|
156
|
-
listenToMapClick() {
|
|
157
|
-
this.mapClickListener = this.map.ol.on('singleclick', (event) => {
|
|
158
|
-
this.onMapClick(event);
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Remove the map click listener
|
|
163
|
-
*/
|
|
164
|
-
unlistenToMapClick() {
|
|
165
|
-
unByKey(this.mapClickListener);
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* On map click, select feature at pixel
|
|
169
|
-
* @param event OL MapBrowserPointerEvent
|
|
170
|
-
*/
|
|
171
|
-
onMapClick(event) {
|
|
172
|
-
const exclusive = !ctrlKeyDown(event);
|
|
173
|
-
const reverse = !exclusive;
|
|
174
|
-
const olFeatures = event.map.getFeaturesAtPixel(event.pixel, {
|
|
175
|
-
hitTolerance: this.options.hitTolerance || 0,
|
|
176
|
-
layerFilter: olLayer => {
|
|
177
|
-
const storeOlLayer = this.stores.find((store) => {
|
|
178
|
-
return store.layer?.ol === olLayer;
|
|
179
|
-
});
|
|
180
|
-
return storeOlLayer !== undefined;
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
this.onSelectFromMap(olFeatures, exclusive, reverse);
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Add a drag box interaction and, on drag box end, select features
|
|
187
|
-
*/
|
|
188
|
-
addDragBoxInteraction() {
|
|
189
|
-
let olDragSelectInteraction;
|
|
190
|
-
const olInteractions = this.map.ol.getInteractions().getArray();
|
|
191
|
-
// There can only be one dragbox interaction, so find the current one, if any
|
|
192
|
-
// Don't keep a reference to the current dragbox because we don't want
|
|
193
|
-
// to remove it when this startegy is deactivated
|
|
194
|
-
for (const olInteraction of olInteractions) {
|
|
195
|
-
if (olInteraction instanceof OlDragSelectInteraction) {
|
|
196
|
-
olDragSelectInteraction = olInteraction;
|
|
197
|
-
break;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
// If no drag box interaction is found, create a new one and add it to the map
|
|
201
|
-
if (olDragSelectInteraction === undefined) {
|
|
202
|
-
olDragSelectInteraction = new OlDragSelectInteraction({
|
|
203
|
-
condition: ctrlKeyDown
|
|
204
|
-
});
|
|
205
|
-
this.map.ol.addInteraction(olDragSelectInteraction);
|
|
206
|
-
this.olDragSelectInteraction = olDragSelectInteraction;
|
|
207
|
-
}
|
|
208
|
-
this.olDragSelectInteractionEndKey = olDragSelectInteraction.on('boxend', (event) => this.onDragBoxEnd(event));
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Remove drag box interaction
|
|
212
|
-
*/
|
|
213
|
-
removeDragBoxInteraction() {
|
|
214
|
-
if (this.olDragSelectInteractionEndKey !== undefined) {
|
|
215
|
-
unByKey(this.olDragSelectInteractionEndKey);
|
|
216
|
-
}
|
|
217
|
-
if (this.olDragSelectInteraction !== undefined) {
|
|
218
|
-
this.map.ol.removeInteraction(this.olDragSelectInteraction);
|
|
219
|
-
}
|
|
220
|
-
this.olDragSelectInteraction = undefined;
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* On dragbox end, select features in drag box
|
|
224
|
-
* @param event OL MapBrowserPointerEvent
|
|
225
|
-
*/
|
|
226
|
-
onDragBoxEnd(event) {
|
|
227
|
-
const exclusive = !ctrlKeyDown(event.mapBrowserEvent);
|
|
228
|
-
const target = event.target;
|
|
229
|
-
const extent = target.getGeometry().getExtent();
|
|
230
|
-
const olFeatures = this.stores.reduce((acc, store) => {
|
|
231
|
-
const olSource = store.layer.ol.getSource();
|
|
232
|
-
acc.push(...olSource.getFeaturesInExtent(extent));
|
|
233
|
-
return acc;
|
|
234
|
-
}, []);
|
|
235
|
-
this.onSelectFromMap(olFeatures, exclusive, false);
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* When features are selected from the store, add
|
|
239
|
-
* them to this startegy's overlay layer (select on map)
|
|
240
|
-
* @param features Store features
|
|
241
|
-
*/
|
|
242
|
-
onSelectFromStore(features) {
|
|
243
|
-
const motion = this.motion;
|
|
244
|
-
const olOverlayFeatures = this.overlayStore.layer.ol
|
|
245
|
-
.getSource()
|
|
246
|
-
.getFeatures();
|
|
247
|
-
const overlayFeaturesKeys = olOverlayFeatures.map((olFeature) => olFeature.getId());
|
|
248
|
-
const featuresKeys = features.map(this.overlayStore.getKey);
|
|
249
|
-
let doMotion;
|
|
250
|
-
if (features.length === 0) {
|
|
251
|
-
doMotion = false;
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
doMotion =
|
|
255
|
-
overlayFeaturesKeys.length !== featuresKeys.length ||
|
|
256
|
-
!overlayFeaturesKeys.every((key) => featuresKeys.indexOf(key) >= 0);
|
|
257
|
-
}
|
|
258
|
-
this.overlayStore.setLayerFeatures(features, doMotion ? motion : FeatureMotion.None, this.options.viewScale, this.options.areaRatio, this.options.getFeatureId);
|
|
259
|
-
}
|
|
260
|
-
/**
|
|
261
|
-
* When features are selected from the map, also select them
|
|
262
|
-
* in their store.
|
|
263
|
-
* @param olFeatures OL feature objects
|
|
264
|
-
*/
|
|
265
|
-
onSelectFromMap(olFeatures, exclusive, reverse) {
|
|
266
|
-
const groupedFeatures = this.groupFeaturesByStore(olFeatures);
|
|
267
|
-
this.stores.forEach((store) => {
|
|
268
|
-
const features = groupedFeatures.get(store);
|
|
269
|
-
if (features === undefined && exclusive === true) {
|
|
270
|
-
this.unselectAllFeaturesFromStore(store);
|
|
271
|
-
}
|
|
272
|
-
else if (features === undefined && exclusive === false) {
|
|
273
|
-
// Do nothing
|
|
274
|
-
}
|
|
275
|
-
else {
|
|
276
|
-
this.selectFeaturesFromStore(store, features, exclusive, reverse);
|
|
277
|
-
}
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Select features in store
|
|
282
|
-
* @param store: Feature store
|
|
283
|
-
* @param features Features
|
|
284
|
-
*/
|
|
285
|
-
selectFeaturesFromStore(store, features, exclusive, reverse) {
|
|
286
|
-
if (reverse === true) {
|
|
287
|
-
store.state.reverseMany(features, ['selected']);
|
|
288
|
-
}
|
|
289
|
-
else {
|
|
290
|
-
store.state.updateMany(features, { selected: true }, exclusive);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Unselect all features from store
|
|
295
|
-
* @param store: Feature store
|
|
296
|
-
*/
|
|
297
|
-
unselectAllFeaturesFromStore(store) {
|
|
298
|
-
store.state.updateAll({ selected: false });
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* This method returns a store -> features mapping from a list
|
|
302
|
-
* of OL selected features. OL features keep a reference to the store
|
|
303
|
-
* they are from.
|
|
304
|
-
* @param olFeatures: OL feature objects
|
|
305
|
-
* @returns Store -> features mapping
|
|
306
|
-
*/
|
|
307
|
-
groupFeaturesByStore(olFeatures) {
|
|
308
|
-
const groupedFeatures = new Map();
|
|
309
|
-
if (olFeatures === null || olFeatures === undefined) {
|
|
310
|
-
return groupedFeatures;
|
|
311
|
-
}
|
|
312
|
-
olFeatures.forEach((olFeature) => {
|
|
313
|
-
const store = olFeature.get('_featureStore');
|
|
314
|
-
if (store === undefined) {
|
|
315
|
-
return;
|
|
316
|
-
}
|
|
317
|
-
let features = groupedFeatures.get(store);
|
|
318
|
-
if (features === undefined) {
|
|
319
|
-
features = [];
|
|
320
|
-
groupedFeatures.set(store, features);
|
|
321
|
-
}
|
|
322
|
-
const feature = store.get(olFeature.getId());
|
|
323
|
-
if (feature !== undefined) {
|
|
324
|
-
features.push(feature);
|
|
325
|
-
}
|
|
326
|
-
});
|
|
327
|
-
return groupedFeatures;
|
|
328
|
-
}
|
|
329
|
-
/**
|
|
330
|
-
* Create an overlay store that'll contain the selected features.
|
|
331
|
-
* @returns Overlay store
|
|
332
|
-
*/
|
|
333
|
-
createOverlayStore() {
|
|
334
|
-
const overlayLayer = this.options.layer
|
|
335
|
-
? this.options.layer
|
|
336
|
-
: this.createOverlayLayer();
|
|
337
|
-
return new FeatureStore([], { map: this.map }).bindLayer(overlayLayer);
|
|
338
|
-
}
|
|
339
|
-
/**
|
|
340
|
-
* Create an overlay store that'll contain the selected features.
|
|
341
|
-
* @returns Overlay layer
|
|
342
|
-
*/
|
|
343
|
-
createOverlayLayer() {
|
|
344
|
-
return new VectorLayer({
|
|
345
|
-
zIndex: 300,
|
|
346
|
-
source: new FeatureDataSource(),
|
|
347
|
-
style: undefined,
|
|
348
|
-
showInLayerList: false,
|
|
349
|
-
exportable: false,
|
|
350
|
-
browsable: false
|
|
351
|
-
});
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* Add the overlay store's layer to the map to display the selected
|
|
355
|
-
* features.
|
|
356
|
-
*/
|
|
357
|
-
addOverlayLayer() {
|
|
358
|
-
if (this.overlayStore.layer.map === undefined) {
|
|
359
|
-
this.map.addLayer(this.overlayStore.layer);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
/**
|
|
363
|
-
* Remove the overlay layer from the map
|
|
364
|
-
*/
|
|
365
|
-
removeOverlayLayer() {
|
|
366
|
-
this.overlayStore.source.ol.clear();
|
|
367
|
-
this.map.removeLayer(this.overlayStore.layer);
|
|
368
|
-
}
|
|
369
|
-
}
|
|
1
|
+
import OlDragBoxInteraction from 'ol/interaction/DragBox';
|
|
2
|
+
import { unByKey } from 'ol/Observable';
|
|
3
|
+
import { combineLatest } from 'rxjs';
|
|
4
|
+
import { map, debounceTime, skip } from 'rxjs/operators';
|
|
5
|
+
import { EntityStoreStrategy } from '@igo2/common';
|
|
6
|
+
import { FeatureDataSource } from '../../../datasource';
|
|
7
|
+
import { VectorLayer } from '../../../layer/shared/layers/vector-layer';
|
|
8
|
+
import { ctrlKeyDown } from '../../../map/shared/map.utils';
|
|
9
|
+
import { FeatureStore } from '../store';
|
|
10
|
+
import { FeatureMotion } from '../feature.enums';
|
|
11
|
+
export class OlDragSelectInteraction extends OlDragBoxInteraction {
|
|
12
|
+
constructor(options) {
|
|
13
|
+
super(options);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* This strategy synchronizes a store and a layer selected entities.
|
|
18
|
+
* The store <-> layer binding is a two-way binding.
|
|
19
|
+
*
|
|
20
|
+
* In many cases, a single strategy bound to multiple stores
|
|
21
|
+
* will yield better results that multiple strategies with each their
|
|
22
|
+
* own store. In the latter scenario, a click on overlapping features
|
|
23
|
+
* would trigger the strategy of each layer and they would cancel
|
|
24
|
+
* each other as well as move the map view around needlessly.
|
|
25
|
+
*/
|
|
26
|
+
export class FeatureStoreSelectionStrategy extends EntityStoreStrategy {
|
|
27
|
+
constructor(options) {
|
|
28
|
+
super(options);
|
|
29
|
+
this.options = options;
|
|
30
|
+
this.setMotion(options.motion);
|
|
31
|
+
this._overlayStore = this.createOverlayStore();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The map the layers belong to
|
|
35
|
+
*/
|
|
36
|
+
get map() {
|
|
37
|
+
return this.options.map;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* A feature store that'll contain the selected features. It has it's own
|
|
41
|
+
* layer, shared by all the stores this staretgy is bound to.
|
|
42
|
+
*/
|
|
43
|
+
get overlayStore() {
|
|
44
|
+
return this._overlayStore;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Bind this strategy to a store and force this strategy's
|
|
48
|
+
* reactivation to properly setup watchers.
|
|
49
|
+
* @param store Feature store
|
|
50
|
+
*/
|
|
51
|
+
bindStore(store) {
|
|
52
|
+
super.bindStore(store);
|
|
53
|
+
if (this.active === true) {
|
|
54
|
+
// Force reactivation
|
|
55
|
+
this.activate();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Unbind this strategy from a store and force this strategy's
|
|
60
|
+
* reactivation to properly setup watchers.
|
|
61
|
+
* @param store Feature store
|
|
62
|
+
*/
|
|
63
|
+
unbindStore(store) {
|
|
64
|
+
super.unbindStore(store);
|
|
65
|
+
if (this.active === true) {
|
|
66
|
+
// Force reactivation
|
|
67
|
+
this.activate();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Define the motion to apply on select
|
|
72
|
+
* @param motion Feature motion
|
|
73
|
+
*/
|
|
74
|
+
setMotion(motion) {
|
|
75
|
+
this.motion = motion;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Unselect all entities, from all stores
|
|
79
|
+
*/
|
|
80
|
+
unselectAll() {
|
|
81
|
+
this.stores.forEach((store) => {
|
|
82
|
+
store.state.updateAll({ selected: false });
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Clear the overlay
|
|
87
|
+
*/
|
|
88
|
+
clear() {
|
|
89
|
+
this.overlayStore.source.ol.clear();
|
|
90
|
+
this.overlayStore.clear();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Deactivate the selection without removing the selection
|
|
94
|
+
* overlay.
|
|
95
|
+
*/
|
|
96
|
+
deactivateSelection() {
|
|
97
|
+
this.unlistenToMapClick();
|
|
98
|
+
this.removeDragBoxInteraction();
|
|
99
|
+
this.unwatchAll();
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Add the overlay layer, setup the map click lsitener and
|
|
103
|
+
* start watching for stores selection
|
|
104
|
+
* @internal
|
|
105
|
+
*/
|
|
106
|
+
doActivate() {
|
|
107
|
+
this.addOverlayLayer();
|
|
108
|
+
this.listenToMapClick();
|
|
109
|
+
if (this.options.dragBox === true) {
|
|
110
|
+
this.addDragBoxInteraction();
|
|
111
|
+
}
|
|
112
|
+
this.watchAll();
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Remove the overlay layer, remove the map click lsitener and
|
|
116
|
+
* stop watching for stores selection
|
|
117
|
+
* @internal
|
|
118
|
+
*/
|
|
119
|
+
doDeactivate() {
|
|
120
|
+
this.deactivateSelection();
|
|
121
|
+
this.removeOverlayLayer();
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Create a single observable of all the stores. With a single observable,
|
|
125
|
+
* features can be added all at once to the overlay layer and a single
|
|
126
|
+
* motion can be performed. Multiple observable would have
|
|
127
|
+
* a cancelling effect on each other.
|
|
128
|
+
*/
|
|
129
|
+
watchAll() {
|
|
130
|
+
this.unwatchAll();
|
|
131
|
+
const stores$ = this.stores.map((store) => {
|
|
132
|
+
return store.stateView
|
|
133
|
+
.manyBy$((record) => {
|
|
134
|
+
return record.state.selected === true;
|
|
135
|
+
})
|
|
136
|
+
.pipe(map((records) => records.map((record) => record.entity)));
|
|
137
|
+
});
|
|
138
|
+
this.stores$$ = combineLatest(stores$)
|
|
139
|
+
.pipe(debounceTime(5), skip(1), // Skip intial selection
|
|
140
|
+
map((features) => features.reduce((a, b) => a.concat(b))))
|
|
141
|
+
.subscribe((features) => this.onSelectFromStore(features));
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Stop watching for selection in all stores.
|
|
145
|
+
*/
|
|
146
|
+
unwatchAll() {
|
|
147
|
+
if (this.stores$$ !== undefined) {
|
|
148
|
+
this.stores$$.unsubscribe();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Add a 'singleclick' listener to the map that'll allow selecting
|
|
153
|
+
* features by clicking on the map. The selection will be performed
|
|
154
|
+
* only on the layers bound to this strategy.
|
|
155
|
+
*/
|
|
156
|
+
listenToMapClick() {
|
|
157
|
+
this.mapClickListener = this.map.ol.on('singleclick', (event) => {
|
|
158
|
+
this.onMapClick(event);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Remove the map click listener
|
|
163
|
+
*/
|
|
164
|
+
unlistenToMapClick() {
|
|
165
|
+
unByKey(this.mapClickListener);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* On map click, select feature at pixel
|
|
169
|
+
* @param event OL MapBrowserPointerEvent
|
|
170
|
+
*/
|
|
171
|
+
onMapClick(event) {
|
|
172
|
+
const exclusive = !ctrlKeyDown(event);
|
|
173
|
+
const reverse = !exclusive;
|
|
174
|
+
const olFeatures = event.map.getFeaturesAtPixel(event.pixel, {
|
|
175
|
+
hitTolerance: this.options.hitTolerance || 0,
|
|
176
|
+
layerFilter: olLayer => {
|
|
177
|
+
const storeOlLayer = this.stores.find((store) => {
|
|
178
|
+
return store.layer?.ol === olLayer;
|
|
179
|
+
});
|
|
180
|
+
return storeOlLayer !== undefined;
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
this.onSelectFromMap(olFeatures, exclusive, reverse);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Add a drag box interaction and, on drag box end, select features
|
|
187
|
+
*/
|
|
188
|
+
addDragBoxInteraction() {
|
|
189
|
+
let olDragSelectInteraction;
|
|
190
|
+
const olInteractions = this.map.ol.getInteractions().getArray();
|
|
191
|
+
// There can only be one dragbox interaction, so find the current one, if any
|
|
192
|
+
// Don't keep a reference to the current dragbox because we don't want
|
|
193
|
+
// to remove it when this startegy is deactivated
|
|
194
|
+
for (const olInteraction of olInteractions) {
|
|
195
|
+
if (olInteraction instanceof OlDragSelectInteraction) {
|
|
196
|
+
olDragSelectInteraction = olInteraction;
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// If no drag box interaction is found, create a new one and add it to the map
|
|
201
|
+
if (olDragSelectInteraction === undefined) {
|
|
202
|
+
olDragSelectInteraction = new OlDragSelectInteraction({
|
|
203
|
+
condition: ctrlKeyDown
|
|
204
|
+
});
|
|
205
|
+
this.map.ol.addInteraction(olDragSelectInteraction);
|
|
206
|
+
this.olDragSelectInteraction = olDragSelectInteraction;
|
|
207
|
+
}
|
|
208
|
+
this.olDragSelectInteractionEndKey = olDragSelectInteraction.on('boxend', (event) => this.onDragBoxEnd(event));
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Remove drag box interaction
|
|
212
|
+
*/
|
|
213
|
+
removeDragBoxInteraction() {
|
|
214
|
+
if (this.olDragSelectInteractionEndKey !== undefined) {
|
|
215
|
+
unByKey(this.olDragSelectInteractionEndKey);
|
|
216
|
+
}
|
|
217
|
+
if (this.olDragSelectInteraction !== undefined) {
|
|
218
|
+
this.map.ol.removeInteraction(this.olDragSelectInteraction);
|
|
219
|
+
}
|
|
220
|
+
this.olDragSelectInteraction = undefined;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* On dragbox end, select features in drag box
|
|
224
|
+
* @param event OL MapBrowserPointerEvent
|
|
225
|
+
*/
|
|
226
|
+
onDragBoxEnd(event) {
|
|
227
|
+
const exclusive = !ctrlKeyDown(event.mapBrowserEvent);
|
|
228
|
+
const target = event.target;
|
|
229
|
+
const extent = target.getGeometry().getExtent();
|
|
230
|
+
const olFeatures = this.stores.reduce((acc, store) => {
|
|
231
|
+
const olSource = store.layer.ol.getSource();
|
|
232
|
+
acc.push(...olSource.getFeaturesInExtent(extent));
|
|
233
|
+
return acc;
|
|
234
|
+
}, []);
|
|
235
|
+
this.onSelectFromMap(olFeatures, exclusive, false);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* When features are selected from the store, add
|
|
239
|
+
* them to this startegy's overlay layer (select on map)
|
|
240
|
+
* @param features Store features
|
|
241
|
+
*/
|
|
242
|
+
onSelectFromStore(features) {
|
|
243
|
+
const motion = this.motion;
|
|
244
|
+
const olOverlayFeatures = this.overlayStore.layer.ol
|
|
245
|
+
.getSource()
|
|
246
|
+
.getFeatures();
|
|
247
|
+
const overlayFeaturesKeys = olOverlayFeatures.map((olFeature) => olFeature.getId());
|
|
248
|
+
const featuresKeys = features.map(this.overlayStore.getKey);
|
|
249
|
+
let doMotion;
|
|
250
|
+
if (features.length === 0) {
|
|
251
|
+
doMotion = false;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
doMotion =
|
|
255
|
+
overlayFeaturesKeys.length !== featuresKeys.length ||
|
|
256
|
+
!overlayFeaturesKeys.every((key) => featuresKeys.indexOf(key) >= 0);
|
|
257
|
+
}
|
|
258
|
+
this.overlayStore.setLayerFeatures(features, doMotion ? motion : FeatureMotion.None, this.options.viewScale, this.options.areaRatio, this.options.getFeatureId);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* When features are selected from the map, also select them
|
|
262
|
+
* in their store.
|
|
263
|
+
* @param olFeatures OL feature objects
|
|
264
|
+
*/
|
|
265
|
+
onSelectFromMap(olFeatures, exclusive, reverse) {
|
|
266
|
+
const groupedFeatures = this.groupFeaturesByStore(olFeatures);
|
|
267
|
+
this.stores.forEach((store) => {
|
|
268
|
+
const features = groupedFeatures.get(store);
|
|
269
|
+
if (features === undefined && exclusive === true) {
|
|
270
|
+
this.unselectAllFeaturesFromStore(store);
|
|
271
|
+
}
|
|
272
|
+
else if (features === undefined && exclusive === false) {
|
|
273
|
+
// Do nothing
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
this.selectFeaturesFromStore(store, features, exclusive, reverse);
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Select features in store
|
|
282
|
+
* @param store: Feature store
|
|
283
|
+
* @param features Features
|
|
284
|
+
*/
|
|
285
|
+
selectFeaturesFromStore(store, features, exclusive, reverse) {
|
|
286
|
+
if (reverse === true) {
|
|
287
|
+
store.state.reverseMany(features, ['selected']);
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
store.state.updateMany(features, { selected: true }, exclusive);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Unselect all features from store
|
|
295
|
+
* @param store: Feature store
|
|
296
|
+
*/
|
|
297
|
+
unselectAllFeaturesFromStore(store) {
|
|
298
|
+
store.state.updateAll({ selected: false });
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* This method returns a store -> features mapping from a list
|
|
302
|
+
* of OL selected features. OL features keep a reference to the store
|
|
303
|
+
* they are from.
|
|
304
|
+
* @param olFeatures: OL feature objects
|
|
305
|
+
* @returns Store -> features mapping
|
|
306
|
+
*/
|
|
307
|
+
groupFeaturesByStore(olFeatures) {
|
|
308
|
+
const groupedFeatures = new Map();
|
|
309
|
+
if (olFeatures === null || olFeatures === undefined) {
|
|
310
|
+
return groupedFeatures;
|
|
311
|
+
}
|
|
312
|
+
olFeatures.forEach((olFeature) => {
|
|
313
|
+
const store = olFeature.get('_featureStore');
|
|
314
|
+
if (store === undefined) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
let features = groupedFeatures.get(store);
|
|
318
|
+
if (features === undefined) {
|
|
319
|
+
features = [];
|
|
320
|
+
groupedFeatures.set(store, features);
|
|
321
|
+
}
|
|
322
|
+
const feature = store.get(olFeature.getId());
|
|
323
|
+
if (feature !== undefined) {
|
|
324
|
+
features.push(feature);
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
return groupedFeatures;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Create an overlay store that'll contain the selected features.
|
|
331
|
+
* @returns Overlay store
|
|
332
|
+
*/
|
|
333
|
+
createOverlayStore() {
|
|
334
|
+
const overlayLayer = this.options.layer
|
|
335
|
+
? this.options.layer
|
|
336
|
+
: this.createOverlayLayer();
|
|
337
|
+
return new FeatureStore([], { map: this.map }).bindLayer(overlayLayer);
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Create an overlay store that'll contain the selected features.
|
|
341
|
+
* @returns Overlay layer
|
|
342
|
+
*/
|
|
343
|
+
createOverlayLayer() {
|
|
344
|
+
return new VectorLayer({
|
|
345
|
+
zIndex: 300,
|
|
346
|
+
source: new FeatureDataSource(),
|
|
347
|
+
style: undefined,
|
|
348
|
+
showInLayerList: false,
|
|
349
|
+
exportable: false,
|
|
350
|
+
browsable: false
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Add the overlay store's layer to the map to display the selected
|
|
355
|
+
* features.
|
|
356
|
+
*/
|
|
357
|
+
addOverlayLayer() {
|
|
358
|
+
if (this.overlayStore.layer.map === undefined) {
|
|
359
|
+
this.map.addLayer(this.overlayStore.layer);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Remove the overlay layer from the map
|
|
364
|
+
*/
|
|
365
|
+
removeOverlayLayer() {
|
|
366
|
+
this.overlayStore.source.ol.clear();
|
|
367
|
+
this.map.removeLayer(this.overlayStore.layer);
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
370
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ2VvL3NyYy9saWIvZmVhdHVyZS9zaGFyZWQvc3RyYXRlZ2llcy9zZWxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxvQkFBc0MsTUFBTSx3QkFBd0IsQ0FBQztBQUk1RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhDLE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBMkIsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU01RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsb0JBQW9CO0lBQy9ELFlBQVksT0FBTztRQUNqQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxPQUFPLDZCQUE4QixTQUFRLG1CQUFtQjtJQWtDcEUsWUFBc0IsT0FBNkM7UUFDakUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBREssWUFBTyxHQUFQLE9BQU8sQ0FBc0M7UUFFakUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFD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QUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7O09BR0c7SUFDSyxrQkFBa0I7UUFDeEIsT0FBTyxJQUFJLFdBQVcsQ0FBQztZQUNyQixNQUFNLEVBQUUsR0FBRztZQUNYLE1BQU0sRUFBRSxJQUFJLGlCQUFpQixFQUFFO1lBQy9CLEtBQUssRUFBRSxTQUFTO1lBQ2hCLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSyxlQUFlO1FBQ3JCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLFNBQVMsRUFBRTtZQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBPbEZlYXR1cmUgZnJvbSAnb2wvRmVhdHVyZSc7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IE9sRHJhZ0JveEludGVyYWN0aW9uLCB7IERyYWdCb3hFdmVudCB9IGZyb20gJ29sL2ludGVyYWN0aW9uL0RyYWdCb3gnO1xuaW1wb3J0IHsgRHJhZ0JveEV2ZW50IGFzIE9sRHJhZ0JveEV2ZW50IH0gZnJvbSAnb2wvaW50ZXJhY3Rpb24vRHJhZ0JveCc7XG5pbXBvcnQgeyBFdmVudHNLZXkgfSBmcm9tICdvbC9ldmVudHMnO1xuaW1wb3J0IE1hcEJyb3dzZXJQb2ludGVyRXZlbnQgZnJvbSAnb2wvTWFwQnJvd3NlckV2ZW50JztcbmltcG9ydCB7IHVuQnlLZXkgfSBmcm9tICdvbC9PYnNlcnZhYmxlJztcblxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIGRlYm91bmNlVGltZSwgc2tpcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRW50aXR5S2V5LCBFbnRpdHlSZWNvcmQsIEVudGl0eVN0b3JlU3RyYXRlZ3kgfSBmcm9tICdAaWdvMi9jb21tb24nO1xuXG5pbXBvcnQgeyBGZWF0dXJlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL2RhdGFzb3VyY2UnO1xuaW1wb3J0IHsgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzL3ZlY3Rvci1sYXllcic7XG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi8uLi9tYXAvc2hhcmVkL21hcCc7XG5pbXBvcnQgeyBjdHJsS2V5RG93biB9IGZyb20gJy4uLy4uLy4uL21hcC9zaGFyZWQvbWFwLnV0aWxzJztcblxuaW1wb3J0IHtcbiAgRmVhdHVyZSxcbiAgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3lPcHRpb25zXG59IGZyb20gJy4uL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGZWF0dXJlU3RvcmUgfSBmcm9tICcuLi9zdG9yZSc7XG5pbXBvcnQgeyBGZWF0dXJlTW90aW9uIH0gZnJvbSAnLi4vZmVhdHVyZS5lbnVtcyc7XG5cbmV4cG9ydCBjbGFzcyBPbERyYWdTZWxlY3RJbnRlcmFjdGlvbiBleHRlbmRzIE9sRHJhZ0JveEludGVyYWN0aW9uIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBzdHJhdGVneSBzeW5jaHJvbml6ZXMgYSBzdG9yZSBhbmQgYSBsYXllciBzZWxlY3RlZCBlbnRpdGllcy5cbiAqIFRoZSBzdG9yZSA8LT4gbGF5ZXIgYmluZGluZyBpcyBhIHR3by13YXkgYmluZGluZy5cbiAqXG4gKiBJbiBtYW55IGNhc2VzLCBhIHNpbmdsZSBzdHJhdGVneSBib3VuZCB0byBtdWx0aXBsZSBzdG9yZXNcbiAqIHdpbGwgeWllbGQgYmV0dGVyIHJlc3VsdHMgdGhhdCBtdWx0aXBsZSBzdHJhdGVnaWVzIHdpdGggZWFjaCB0aGVpclxuICogb3duIHN0b3JlLiBJbiB0aGUgbGF0dGVyIHNjZW5hcmlvLCBhIGNsaWNrIG9uIG92ZXJsYXBwaW5nIGZlYXR1cmVzXG4gKiB3b3VsZCB0cmlnZ2VyIHRoZSBzdHJhdGVneSBvZiBlYWNoIGxheWVyIGFuZCB0aGV5IHdvdWxkIGNhbmNlbFxuICogZWFjaCBvdGhlciBhcyB3ZWxsIGFzIG1vdmUgdGhlIG1hcCB2aWV3IGFyb3VuZCBuZWVkbGVzc2x5LlxuICovXG5leHBvcnQgY2xhc3MgRmVhdHVyZVN0b3JlU2VsZWN0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBFbnRpdHlTdG9yZVN0cmF0ZWd5IHtcbiAgLyoqXG4gICAqIExpc3RlbmVyIHRvIHRoZSBtYXAgY2xpY2sgZXZlbnQgdGhhdCBhbGxvd3Mgc2VsZWN0aW5nIGEgZmVhdHVyZVxuICAgKiBieSBjbGlja2luZyBvbiB0aGUgbWFwXG4gICAqL1xuICBwcml2YXRlIG1hcENsaWNrTGlzdGVuZXI7XG5cbiAgcHJpdmF0ZSBvbERyYWdTZWxlY3RJbnRlcmFjdGlvbjogT2xEcmFnU2VsZWN0SW50ZXJhY3Rpb247XG5cbiAgcHJpdmF0ZSBvbERyYWdTZWxlY3RJbnRlcmFjdGlvbkVuZEtleTogRXZlbnRzS2V5IHwgRXZlbnRzS2V5W107XG5cbiAgLyoqXG4gICAqIFN1YnNjcmlwdGlvbiB0byBhbGwgc3RvcmVzIHNlbGVjdGVkIGVudGl0aWVzXG4gICAqL1xuICBwcml2YXRlIHN0b3JlcyQkOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBtb3Rpb246IEZlYXR1cmVNb3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSBtYXAgdGhlIGxheWVycyBiZWxvbmcgdG9cbiAgICovXG4gIGdldCBtYXAoKTogSWdvTWFwIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1hcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZlYXR1cmUgc3RvcmUgdGhhdCdsbCBjb250YWluIHRoZSBzZWxlY3RlZCBmZWF0dXJlcy4gSXQgaGFzIGl0J3Mgb3duXG4gICAqIGxheWVyLCBzaGFyZWQgYnkgYWxsIHRoZSBzdG9yZXMgdGhpcyBzdGFyZXRneSBpcyBib3VuZCB0by5cbiAgICovXG4gIGdldCBvdmVybGF5U3RvcmUoKTogRmVhdHVyZVN0b3JlIHtcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVN0b3JlO1xuICB9XG4gIHByaXZhdGUgX292ZXJsYXlTdG9yZTogRmVhdHVyZVN0b3JlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBvcHRpb25zOiBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneU9wdGlvbnMpIHtcbiAgICBzdXBlcihvcHRpb25zKTtcbiAgICB0aGlzLnNldE1vdGlvbihvcHRpb25zLm1vdGlvbik7XG4gICAgdGhpcy5fb3ZlcmxheVN0b3JlID0gdGhpcy5jcmVhdGVPdmVybGF5U3RvcmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIHRoaXMgc3RyYXRlZ3kgdG8gYSBzdG9yZSBhbmQgZm9yY2UgdGhpcyBzdHJhdGVneSdzXG4gICAqIHJlYWN0aXZhdGlvbiB0byBwcm9wZXJseSBzZXR1cCB3YXRjaGVycy5cbiAgICogQHBhcmFtIHN0b3JlIEZlYXR1cmUgc3RvcmVcbiAgICovXG4gIGJpbmRTdG9yZShzdG9yZTogRmVhdHVyZVN0b3JlKSB7XG4gICAgc3VwZXIuYmluZFN0b3JlKHN0b3JlKTtcbiAgICBpZiAodGhpcy5hY3RpdmUgPT09IHRydWUpIHtcbiAgICAgIC8vIEZvcmNlIHJlYWN0aXZhdGlvblxuICAgICAgdGhpcy5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbmJpbmQgdGhpcyBzdHJhdGVneSBmcm9tIGEgc3RvcmUgYW5kIGZvcmNlIHRoaXMgc3RyYXRlZ3knc1xuICAgKiByZWFjdGl2YXRpb24gdG8gcHJvcGVybHkgc2V0dXAgd2F0Y2hlcnMuXG4gICAqIEBwYXJhbSBzdG9yZSBGZWF0dXJlIHN0b3JlXG4gICAqL1xuICB1bmJpbmRTdG9yZShzdG9yZTogRmVhdHVyZVN0b3JlKSB7XG4gICAgc3VwZXIudW5iaW5kU3RvcmUoc3RvcmUpO1xuICAgIGlmICh0aGlzLmFjdGl2ZSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gRm9yY2UgcmVhY3RpdmF0aW9uXG4gICAgICB0aGlzLmFjdGl2YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSB0aGUgbW90aW9uIHRvIGFwcGx5IG9uIHNlbGVjdFxuICAgKiBAcGFyYW0gbW90aW9uIEZlYXR1cmUgbW90aW9uXG4gICAqL1xuICBzZXRNb3Rpb24obW90aW9uOiBGZWF0dXJlTW90aW9uKSB7XG4gICAgdGhpcy5tb3Rpb24gPSBtb3Rpb247XG4gIH1cblxuICAvKipcbiAgICogVW5zZWxlY3QgYWxsIGVudGl0aWVzLCBmcm9tIGFsbCBzdG9yZXNcbiAgICovXG4gIHVuc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuc3RvcmVzLmZvckVhY2goKHN0b3JlOiBGZWF0dXJlU3RvcmUpID0+IHtcbiAgICAgIHN0b3JlLnN0YXRlLnVwZGF0ZUFsbCh7IHNlbGVjdGVkOiBmYWxzZSB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgb3ZlcmxheVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5vdmVybGF5U3RvcmUuc291cmNlLm9sLmNsZWFyKCk7XG4gICAgdGhpcy5vdmVybGF5U3RvcmUuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlIHRoZSBzZWxlY3Rpb24gd2l0aG91dCByZW1vdmluZyB0aGUgc2VsZWN0aW9uXG4gICAqIG92ZXJsYXkuXG4gICAqL1xuICBkZWFjdGl2YXRlU2VsZWN0aW9uKCkge1xuICAgIHRoaXMudW5saXN0ZW5Ub01hcENsaWNrKCk7XG4gICAgdGhpcy5yZW1vdmVEcmFnQm94SW50ZXJhY3Rpb24oKTtcbiAgICB0aGlzLnVud2F0Y2hBbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIG92ZXJsYXkgbGF5ZXIsIHNldHVwIHRoZSBtYXAgY2xpY2sgbHNpdGVuZXIgYW5kXG4gICAqIHN0YXJ0IHdhdGNoaW5nIGZvciBzdG9yZXMgc2VsZWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIGRvQWN0aXZhdGUoKSB7XG4gICAgdGhpcy5hZGRPdmVybGF5TGF5ZXIoKTtcbiAgICB0aGlzLmxpc3RlblRvTWFwQ2xpY2soKTtcbiAgICBpZiAodGhpcy5vcHRpb25zLmRyYWdCb3ggPT09IHRydWUpIHtcbiAgICAgIHRoaXMuYWRkRHJhZ0JveEludGVyYWN0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMud2F0Y2hBbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIG92ZXJsYXkgbGF5ZXIsIHJlbW92ZSB0aGUgbWFwIGNsaWNrIGxzaXRlbmVyIGFuZFxuICAgKiBzdG9wIHdhdGNoaW5nIGZvciBzdG9yZXMgc2VsZWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIGRvRGVhY3RpdmF0ZSgpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGVTZWxlY3Rpb24oKTtcbiAgICB0aGlzLnJlbW92ZU92ZXJsYXlMYXllcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNpbmdsZSBvYnNlcnZhYmxlIG9mIGFsbCB0aGUgc3RvcmVzLiBXaXRoIGEgc2luZ2xlIG9ic2VydmFibGUsXG4gICAqIGZlYXR1cmVzIGNhbiBiZSBhZGRlZCBhbGwgYXQgb25jZSB0byB0aGUgb3ZlcmxheSBsYXllciBhbmQgYSBzaW5nbGVcbiAgICogbW90aW9uIGNhbiBiZSBwZXJmb3JtZWQuIE11bHRpcGxlIG9ic2VydmFibGUgd291bGQgaGF2ZVxuICAgKiBhIGNhbmNlbGxpbmcgZWZmZWN0IG9uIGVhY2ggb3RoZXIuXG4gICAqL1xuICBwcml2YXRlIHdhdGNoQWxsKCkge1xuICAgIHRoaXMudW53YXRjaEFsbCgpO1xuXG4gICAgY29uc3Qgc3RvcmVzJCA9IHRoaXMuc3RvcmVzLm1hcCgoc3RvcmU6IEZlYXR1cmVTdG9yZSkgPT4ge1xuICAgICAgcmV0dXJuIHN0b3JlLnN0YXRlVmlld1xuICAgICAgICAubWFueUJ5JCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8RmVhdHVyZT4pID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVjb3JkLnN0YXRlLnNlbGVjdGVkID09PSB0cnVlO1xuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKHJlY29yZHM6IEVudGl0eVJlY29yZDxGZWF0dXJlPltdKSA9PlxuICAgICAgICAgICAgcmVjb3Jkcy5tYXAoKHJlY29yZCkgPT4gcmVjb3JkLmVudGl0eSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfSk7XG4gICAgdGhpcy5zdG9yZXMkJCA9IGNvbWJpbmVMYXRlc3Qoc3RvcmVzJClcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoNSksXG4gICAgICAgIHNraXAoMSksIC8vIFNraXAgaW50aWFsIHNlbGVjdGlvblxuICAgICAgICBtYXAoKGZlYXR1cmVzOiBBcnJheTxGZWF0dXJlW10+KSA9PlxuICAgICAgICAgIGZlYXR1cmVzLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYikpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGZlYXR1cmVzOiBGZWF0dXJlW10pID0+IHRoaXMub25TZWxlY3RGcm9tU3RvcmUoZmVhdHVyZXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHdhdGNoaW5nIGZvciBzZWxlY3Rpb24gaW4gYWxsIHN0b3Jlcy5cbiAgICovXG4gIHByaXZhdGUgdW53YXRjaEFsbCgpIHtcbiAgICBpZiAodGhpcy5zdG9yZXMkJCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0b3JlcyQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhICdzaW5nbGVjbGljaycgbGlzdGVuZXIgdG8gdGhlIG1hcCB0aGF0J2xsIGFsbG93IHNlbGVjdGluZ1xuICAgKiBmZWF0dXJlcyBieSBjbGlja2luZyBvbiB0aGUgbWFwLiBUaGUgc2VsZWN0aW9uIHdpbGwgYmUgcGVyZm9ybWVkXG4gICAqIG9ubHkgb24gdGhlIGxheWVycyBib3VuZCB0byB0aGlzIHN0cmF0ZWd5LlxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5Ub01hcENsaWNrKCkge1xuICAgIHRoaXMubWFwQ2xpY2tMaXN0ZW5lciA9IHRoaXMubWFwLm9sLm9uKFxuICAgICAgJ3NpbmdsZWNsaWNrJyxcbiAgICAgIChldmVudDogTWFwQnJvd3NlclBvaW50ZXJFdmVudDxhbnk+KSA9PiB7XG4gICAgICAgIHRoaXMub25NYXBDbGljayhldmVudCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIG1hcCBjbGljayBsaXN0ZW5lclxuICAgKi9cbiAgcHJpdmF0ZSB1bmxpc3RlblRvTWFwQ2xpY2soKSB7XG4gICAgdW5CeUtleSh0aGlzLm1hcENsaWNrTGlzdGVuZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIG1hcCBjbGljaywgc2VsZWN0IGZlYXR1cmUgYXQgcGl4ZWxcbiAgICogQHBhcmFtIGV2ZW50IE9MIE1hcEJyb3dzZXJQb2ludGVyRXZlbnRcbiAgICovXG4gIHByaXZhdGUgb25NYXBDbGljayhldmVudDogTWFwQnJvd3NlclBvaW50ZXJFdmVudDxhbnk+KSB7XG4gICAgY29uc3QgZXhjbHVzaXZlID0gIWN0cmxLZXlEb3duKGV2ZW50KTtcbiAgICBjb25zdCByZXZlcnNlID0gIWV4Y2x1c2l2ZTtcbiAgICBjb25zdCBvbEZlYXR1cmVzID0gZXZlbnQubWFwLmdldEZlYXR1cmVzQXRQaXhlbChldmVudC5waXhlbCwge1xuICAgICAgaGl0VG9sZXJhbmNlOiB0aGlzLm9wdGlvbnMuaGl0VG9sZXJhbmNlIHx8IDAsXG4gICAgICBsYXllckZpbHRlcjogb2xMYXllciA9PiB7XG4gICAgICAgIGNvbnN0IHN0b3JlT2xMYXllciA9IHRoaXMuc3RvcmVzLmZpbmQoKHN0b3JlOiBGZWF0dXJlU3RvcmUpID0+IHtcbiAgICAgICAgICByZXR1cm4gc3RvcmUubGF5ZXI/Lm9sID09PSBvbExheWVyO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0b3JlT2xMYXllciAhPT0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pIGFzIE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdO1xuICAgIHRoaXMub25TZWxlY3RGcm9tTWFwKG9sRmVhdHVyZXMsIGV4Y2x1c2l2ZSwgcmV2ZXJzZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZHJhZyBib3ggaW50ZXJhY3Rpb24gYW5kLCBvbiBkcmFnIGJveCBlbmQsIHNlbGVjdCBmZWF0dXJlc1xuICAgKi9cbiAgcHJpdmF0ZSBhZGREcmFnQm94SW50ZXJhY3Rpb24oKSB7XG4gICAgbGV0IG9sRHJhZ1NlbGVjdEludGVyYWN0aW9uO1xuICAgIGNvbnN0IG9sSW50ZXJhY3Rpb25zID0gdGhpcy5tYXAub2wuZ2V0SW50ZXJhY3Rpb25zKCkuZ2V0QXJyYXkoKTtcblxuICAgIC8vIFRoZXJlIGNhbiBvbmx5IGJlIG9uZSBkcmFnYm94IGludGVyYWN0aW9uLCBzbyBmaW5kIHRoZSBjdXJyZW50IG9uZSwgaWYgYW55XG4gICAgLy8gRG9uJ3Qga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBkcmFnYm94IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIHJlbW92ZSBpdCB3aGVuIHRoaXMgc3RhcnRlZ3kgaXMgZGVhY3RpdmF0ZWRcbiAgICBmb3IgKGNvbnN0IG9sSW50ZXJhY3Rpb24gb2Ygb2xJbnRlcmFjdGlvbnMpIHtcbiAgICAgIGlmIChvbEludGVyYWN0aW9uIGluc3RhbmNlb2YgT2xEcmFnU2VsZWN0SW50ZXJhY3Rpb24pIHtcbiAgICAgICAgb2xEcmFnU2VsZWN0SW50ZXJhY3Rpb24gPSBvbEludGVyYWN0aW9uO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgbm8gZHJhZyBib3ggaW50ZXJhY3Rpb24gaXMgZm91bmQsIGNyZWF0ZSBhIG5ldyBvbmUgYW5kIGFkZCBpdCB0byB0aGUgbWFwXG4gICAgaWYgKG9sRHJhZ1NlbGVjdEludGVyYWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG9sRHJhZ1NlbGVjdEludGVyYWN0aW9uID0gbmV3IE9sRHJhZ1NlbGVjdEludGVyYWN0aW9uKHtcbiAgICAgICAgY29uZGl0aW9uOiBjdHJsS2V5RG93blxuICAgICAgfSk7XG4gICAgICB0aGlzLm1hcC5vbC5hZGRJbnRlcmFjdGlvbihvbERyYWdTZWxlY3RJbnRlcmFjdGlvbik7XG4gICAgICB0aGlzLm9sRHJhZ1NlbGVjdEludGVyYWN0aW9uID0gb2xEcmFnU2VsZWN0SW50ZXJhY3Rpb247XG4gICAgfVxuXG4gICAgdGhpcy5vbERyYWdTZWxlY3RJbnRlcmFjdGlvbkVuZEtleSA9IG9sRHJhZ1NlbGVjdEludGVyYWN0aW9uLm9uKFxuICAgICAgJ2JveGVuZCcsXG4gICAgICAoZXZlbnQ6IERyYWdCb3hFdmVudCkgPT4gdGhpcy5vbkRyYWdCb3hFbmQoZXZlbnQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgZHJhZyBib3ggaW50ZXJhY3Rpb25cbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlRHJhZ0JveEludGVyYWN0aW9uKCkge1xuICAgIGlmICh0aGlzLm9sRHJhZ1NlbGVjdEludGVyYWN0aW9uRW5kS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVuQnlLZXkodGhpcy5vbERyYWdTZWxlY3RJbnRlcmFjdGlvbkVuZEtleSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9sRHJhZ1NlbGVjdEludGVyYWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWFwLm9sLnJlbW92ZUludGVyYWN0aW9uKHRoaXMub2xEcmFnU2VsZWN0SW50ZXJhY3Rpb24pO1xuICAgIH1cbiAgICB0aGlzLm9sRHJhZ1NlbGVjdEludGVyYWN0aW9uID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIGRyYWdib3ggZW5kLCBzZWxlY3QgZmVhdHVyZXMgaW4gZHJhZyBib3hcbiAgICogQHBhcmFtIGV2ZW50IE9MIE1hcEJyb3dzZXJQb2ludGVyRXZlbnRcbiAgICovXG4gIHByaXZhdGUgb25EcmFnQm94RW5kKGV2ZW50OiBPbERyYWdCb3hFdmVudCkge1xuICAgIGNvbnN0IGV4Y2x1c2l2ZSA9ICFjdHJsS2V5RG93bihldmVudC5tYXBCcm93c2VyRXZlbnQpO1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBhbnk7XG4gICAgY29uc3QgZXh0ZW50ID0gdGFyZ2V0LmdldEdlb21ldHJ5KCkuZ2V0RXh0ZW50KCk7XG4gICAgY29uc3Qgb2xGZWF0dXJlcyA9IHRoaXMuc3RvcmVzLnJlZHVjZShcbiAgICAgIChhY2M6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLCBzdG9yZTogRmVhdHVyZVN0b3JlKSA9PiB7XG4gICAgICAgIGNvbnN0IG9sU291cmNlID0gc3RvcmUubGF5ZXIub2wuZ2V0U291cmNlKCk7XG4gICAgICAgIGFjYy5wdXNoKC4uLm9sU291cmNlLmdldEZlYXR1cmVzSW5FeHRlbnQoZXh0ZW50KSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAgW11cbiAgICApO1xuICAgIHRoaXMub25TZWxlY3RGcm9tTWFwKG9sRmVhdHVyZXMsIGV4Y2x1c2l2ZSwgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gZmVhdHVyZXMgYXJlIHNlbGVjdGVkIGZyb20gdGhlIHN0b3JlLCBhZGRcbiAgICogdGhlbSB0byB0aGlzIHN0YXJ0ZWd5J3Mgb3ZlcmxheSBsYXllciAoc2VsZWN0IG9uIG1hcClcbiAgICogQHBhcmFtIGZlYXR1cmVzIFN0b3JlIGZlYXR1cmVzXG4gICAqL1xuICBwcml2YXRlIG9uU2VsZWN0RnJvbVN0b3JlKGZlYXR1cmVzOiBGZWF0dXJlW10pIHtcbiAgICBjb25zdCBtb3Rpb24gPSB0aGlzLm1vdGlvbjtcbiAgICBjb25zdCBvbE92ZXJsYXlGZWF0dXJlcyA9IHRoaXMub3ZlcmxheVN0b3JlLmxheWVyLm9sXG4gICAgICAuZ2V0U291cmNlKClcbiAgICAgIC5nZXRGZWF0dXJlcygpO1xuICAgIGNvbnN0IG92ZXJsYXlGZWF0dXJlc0tleXMgPSBvbE92ZXJsYXlGZWF0dXJlcy5tYXAoKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+KSA9PlxuICAgICAgb2xGZWF0dXJlLmdldElkKClcbiAgICApO1xuICAgIGNvbnN0IGZlYXR1cmVzS2V5cyA9IGZlYXR1cmVzLm1hcCh0aGlzLm92ZXJsYXlTdG9yZS5nZXRLZXkpO1xuXG4gICAgbGV0IGRvTW90aW9uO1xuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGRvTW90aW9uID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvTW90aW9uID1cbiAgICAgICAgb3ZlcmxheUZlYXR1cmVzS2V5cy5sZW5ndGggIT09IGZlYXR1cmVzS2V5cy5sZW5ndGggfHxcbiAgICAgICAgIW92ZXJsYXlGZWF0dXJlc0tleXMuZXZlcnkoXG4gICAgICAgICAgKGtleTogRW50aXR5S2V5KSA9PiBmZWF0dXJlc0tleXMuaW5kZXhPZihrZXkpID49IDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLm92ZXJsYXlTdG9yZS5zZXRMYXllckZlYXR1cmVzKFxuICAgICAgZmVhdHVyZXMsXG4gICAgICBkb01vdGlvbiA/IG1vdGlvbiA6IEZlYXR1cmVNb3Rpb24uTm9uZSxcbiAgICAgIHRoaXMub3B0aW9ucy52aWV3U2NhbGUsXG4gICAgICB0aGlzLm9wdGlvbnMuYXJlYVJhdGlvLFxuICAgICAgdGhpcy5vcHRpb25zLmdldEZlYXR1cmVJZFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBmZWF0dXJlcyBhcmUgc2VsZWN0ZWQgZnJvbSB0aGUgbWFwLCBhbHNvIHNlbGVjdCB0aGVtXG4gICAqIGluIHRoZWlyIHN0b3JlLlxuICAgKiBAcGFyYW0gb2xGZWF0dXJlcyBPTCBmZWF0dXJlIG9iamVjdHNcbiAgICovXG4gIHByaXZhdGUgb25TZWxlY3RGcm9tTWFwKFxuICAgIG9sRmVhdHVyZXM6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PltdLFxuICAgIGV4Y2x1c2l2ZTogYm9vbGVhbixcbiAgICByZXZlcnNlOiBib29sZWFuXG4gICkge1xuICAgIGNvbnN0IGdyb3VwZWRGZWF0dXJlcyA9IHRoaXMuZ3JvdXBGZWF0dXJlc0J5U3RvcmUob2xGZWF0dXJlcyk7XG5cbiAgICB0aGlzLnN0b3Jlcy5mb3JFYWNoKChzdG9yZTogRmVhdHVyZVN0b3JlKSA9PiB7XG4gICAgICBjb25zdCBmZWF0dXJlcyA9IGdyb3VwZWRGZWF0dXJlcy5nZXQoc3RvcmUpO1xuICAgICAgaWYgKGZlYXR1cmVzID09PSB1bmRlZmluZWQgJiYgZXhjbHVzaXZlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RBbGxGZWF0dXJlc0Zyb21TdG9yZShzdG9yZSk7XG4gICAgICB9IGVsc2UgaWYgKGZlYXR1cmVzID09PSB1bmRlZmluZWQgJiYgZXhjbHVzaXZlID09PSBmYWxzZSkge1xuICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdEZlYXR1cmVzRnJvbVN0b3JlKHN0b3JlLCBmZWF0dXJlcywgZXhjbHVzaXZlLCByZXZlcnNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgZmVhdHVyZXMgaW4gc3RvcmVcbiAgICogQHBhcmFtIHN0b3JlOiBGZWF0dXJlIHN0b3JlXG4gICAqIEBwYXJhbSBmZWF0dXJlcyBGZWF0dXJlc1xuICAgKi9cbiAgcHJpdmF0ZSBzZWxlY3RGZWF0dXJlc0Zyb21TdG9yZShcbiAgICBzdG9yZTogRmVhdHVyZVN0b3JlLFxuICAgIGZlYXR1cmVzOiBGZWF0dXJlW10sXG4gICAgZXhjbHVzaXZlOiBib29sZWFuLFxuICAgIHJldmVyc2U6IGJvb2xlYW5cbiAgKSB7XG4gICAgaWYgKHJldmVyc2UgPT09IHRydWUpIHtcbiAgICAgIHN0b3JlLnN0YXRlLnJldmVyc2VNYW55KGZlYXR1cmVzLCBbJ3NlbGVjdGVkJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdG9yZS5zdGF0ZS51cGRhdGVNYW55KGZlYXR1cmVzLCB7IHNlbGVjdGVkOiB0cnVlIH0sIGV4Y2x1c2l2ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc2VsZWN0IGFsbCBmZWF0dXJlcyBmcm9tIHN0b3JlXG4gICAqIEBwYXJhbSBzdG9yZTogRmVhdHVyZSBzdG9yZVxuICAgKi9cbiAgcHJpdmF0ZSB1bnNlbGVjdEFsbEZlYXR1cmVzRnJvbVN0b3JlKHN0b3JlOiBGZWF0dXJlU3RvcmUpIHtcbiAgICBzdG9yZS5zdGF0ZS51cGRhdGVBbGwoeyBzZWxlY3RlZDogZmFsc2UgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHN0b3JlIC0+IGZlYXR1cmVzIG1hcHBpbmcgZnJvbSBhIGxpc3RcbiAgICogb2YgT0wgc2VsZWN0ZWQgZmVhdHVyZXMuIE9MIGZlYXR1cmVzIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHN0b3JlXG4gICAqIHRoZXkgYXJlIGZyb20uXG4gICAqIEBwYXJhbSBvbEZlYXR1cmVzOiBPTCBmZWF0dXJlIG9iamVjdHNcbiAgICogQHJldHVybnMgU3RvcmUgLT4gZmVhdHVyZXMgbWFwcGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBncm91cEZlYXR1cmVzQnlTdG9yZShcbiAgICBvbEZlYXR1cmVzOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXVxuICApOiBNYXA8RmVhdHVyZVN0b3JlLCBGZWF0dXJlW10+IHtcbiAgICBjb25zdCBncm91cGVkRmVhdHVyZXMgPSBuZXcgTWFwPEZlYXR1cmVTdG9yZSwgRmVhdHVyZVtdPigpO1xuICAgIGlmIChvbEZlYXR1cmVzID09PSBudWxsIHx8IG9sRmVhdHVyZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGdyb3VwZWRGZWF0dXJlcztcbiAgICB9XG5cbiAgICBvbEZlYXR1cmVzLmZvckVhY2goKG9sRmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbWV0cnk+KSA9PiB7XG4gICAgICBjb25zdCBzdG9yZSA9IG9sRmVhdHVyZS5nZXQoJ19mZWF0dXJlU3RvcmUnKTtcbiAgICAgIGlmIChzdG9yZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGZlYXR1cmVzID0gZ3JvdXBlZEZlYXR1cmVzLmdldChzdG9yZSk7XG4gICAgICBpZiAoZmVhdHVyZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmZWF0dXJlcyA9IFtdO1xuICAgICAgICBncm91cGVkRmVhdHVyZXMuc2V0KHN0b3JlLCBmZWF0dXJlcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZlYXR1cmUgPSBzdG9yZS5nZXQob2xGZWF0dXJlLmdldElkKCkpO1xuICAgICAgaWYgKGZlYXR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdyb3VwZWRGZWF0dXJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gb3ZlcmxheSBzdG9yZSB0aGF0J2xsIGNvbnRhaW4gdGhlIHNlbGVjdGVkIGZlYXR1cmVzLlxuICAgKiBAcmV0dXJucyBPdmVybGF5IHN0b3JlXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZU92ZXJsYXlTdG9yZSgpOiBGZWF0dXJlU3RvcmUge1xuICAgIGNvbnN0IG92ZXJsYXlMYXllciA9IHRoaXMub3B0aW9ucy5sYXllclxuICAgICAgPyB0aGlzLm9wdGlvbnMubGF5ZXJcbiAgICAgIDogdGhpcy5jcmVhdGVPdmVybGF5TGF5ZXIoKTtcbiAgICByZXR1cm4gbmV3IEZlYXR1cmVTdG9yZShbXSwgeyBtYXA6IHRoaXMubWFwIH0pLmJpbmRMYXllcihvdmVybGF5TGF5ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBvdmVybGF5IHN0b3JlIHRoYXQnbGwgY29udGFpbiB0aGUgc2VsZWN0ZWQgZmVhdHVyZXMuXG4gICAqIEByZXR1cm5zIE92ZXJsYXkgbGF5ZXJcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheUxheWVyKCk6IFZlY3RvckxheWVyIHtcbiAgICByZXR1cm4gbmV3IFZlY3RvckxheWVyKHtcbiAgICAgIHpJbmRleDogMzAwLFxuICAgICAgc291cmNlOiBuZXcgRmVhdHVyZURhdGFTb3VyY2UoKSxcbiAgICAgIHN0eWxlOiB1bmRlZmluZWQsXG4gICAgICBzaG93SW5MYXllckxpc3Q6IGZhbHNlLFxuICAgICAgZXhwb3J0YWJsZTogZmFsc2UsXG4gICAgICBicm93c2FibGU6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHRoZSBvdmVybGF5IHN0b3JlJ3MgbGF5ZXIgdG8gdGhlIG1hcCB0byBkaXNwbGF5IHRoZSBzZWxlY3RlZFxuICAgKiBmZWF0dXJlcy5cbiAgICovXG4gIHByaXZhdGUgYWRkT3ZlcmxheUxheWVyKCkge1xuICAgIGlmICh0aGlzLm92ZXJsYXlTdG9yZS5sYXllci5tYXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5tYXAuYWRkTGF5ZXIodGhpcy5vdmVybGF5U3RvcmUubGF5ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIG92ZXJsYXkgbGF5ZXIgZnJvbSB0aGUgbWFwXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZU92ZXJsYXlMYXllcigpIHtcbiAgICB0aGlzLm92ZXJsYXlTdG9yZS5zb3VyY2Uub2wuY2xlYXIoKTtcbiAgICB0aGlzLm1hcC5yZW1vdmVMYXllcih0aGlzLm92ZXJsYXlTdG9yZS5sYXllcik7XG4gIH1cbn1cbiJdfQ==
|