@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,503 +1,503 @@
|
|
|
1
|
-
import { Directive, Input, Self, HostListener } from '@angular/core';
|
|
2
|
-
import olLayerVectorTile from 'ol/layer/VectorTile';
|
|
3
|
-
import olLayerVector from 'ol/layer/Vector';
|
|
4
|
-
import olVectorTileSource from 'ol/source/VectorTile';
|
|
5
|
-
import OlFeature from 'ol/Feature';
|
|
6
|
-
import * as OlStyle from 'ol/style';
|
|
7
|
-
import * as OlGeom from 'ol/geom';
|
|
8
|
-
import { EntityStore } from '@igo2/common';
|
|
9
|
-
import { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';
|
|
10
|
-
import { VectorLayer } from '../../layer/shared/layers';
|
|
11
|
-
import { take } from 'rxjs/operators';
|
|
12
|
-
import { tryBindStoreLayer } from '../../feature/shared/feature.utils';
|
|
13
|
-
import { FeatureStore } from '../../feature/shared/store';
|
|
14
|
-
import { FeatureMotion } from '../../feature/shared/feature.enums';
|
|
15
|
-
import { unByKey } from 'ol/Observable';
|
|
16
|
-
import RenderFeature from 'ol/render/Feature';
|
|
17
|
-
import * as i0 from "@angular/core";
|
|
18
|
-
import * as i1 from "../../map/map-browser/map-browser.component";
|
|
19
|
-
import * as i2 from "@igo2/core";
|
|
20
|
-
import * as i3 from "../../layer/shared/style.service";
|
|
21
|
-
/**
|
|
22
|
-
* This directive makes the mouse coordinate trigger a reverse search on available search sources.
|
|
23
|
-
* The search results are placed into a label, on a cross icon, representing the mouse coordinate.
|
|
24
|
-
* By default, no search sources. Config in config file must be defined.
|
|
25
|
-
* the layer level.
|
|
26
|
-
*/
|
|
27
|
-
export class HoverFeatureDirective {
|
|
28
|
-
constructor(component, mediaService, styleService) {
|
|
29
|
-
this.component = component;
|
|
30
|
-
this.mediaService = mediaService;
|
|
31
|
-
this.styleService = styleService;
|
|
32
|
-
this.pointerHoverFeatureStore = new EntityStore([]);
|
|
33
|
-
this.selectionMVT = {};
|
|
34
|
-
this.hoverFeatureId = 'hoverFeatureId';
|
|
35
|
-
/**
|
|
36
|
-
* The delay where the mouse must be motionless before trigger the reverse search
|
|
37
|
-
*/
|
|
38
|
-
this.igoHoverFeatureDelay = 1000;
|
|
39
|
-
/**
|
|
40
|
-
* If the user has enabled or not the directive
|
|
41
|
-
*/
|
|
42
|
-
this.igoHoverFeatureEnabled = false;
|
|
43
|
-
}
|
|
44
|
-
mouseout() {
|
|
45
|
-
clearTimeout(this.lastTimeoutRequest);
|
|
46
|
-
this.clearLayer();
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* IGO map
|
|
50
|
-
* @internal
|
|
51
|
-
*/
|
|
52
|
-
get map() {
|
|
53
|
-
return this.component.map;
|
|
54
|
-
}
|
|
55
|
-
get mapProjection() {
|
|
56
|
-
return this.component.map.projection;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Start listening to pointermove and reverse search results.
|
|
60
|
-
* @internal
|
|
61
|
-
*/
|
|
62
|
-
ngOnInit() {
|
|
63
|
-
this.listenToMapPointerMove();
|
|
64
|
-
this.subscribeToPointerStore();
|
|
65
|
-
this.listenToMapClick();
|
|
66
|
-
this.map.status$.pipe(take(1)).subscribe(() => {
|
|
67
|
-
this.store = new FeatureStore([], { map: this.map });
|
|
68
|
-
this.initStore();
|
|
69
|
-
});
|
|
70
|
-
// To handle context change without using the contextService.
|
|
71
|
-
this.layers$$ = this.map.layers$.subscribe((layers) => {
|
|
72
|
-
if (this.store && !layers.find(l => l.id === 'hoverFeatureId')) {
|
|
73
|
-
this.initStore();
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Initialize the pointer position store
|
|
79
|
-
* @internal
|
|
80
|
-
*/
|
|
81
|
-
initStore() {
|
|
82
|
-
const store = this.store;
|
|
83
|
-
const layer = new VectorLayer({
|
|
84
|
-
isIgoInternalLayer: true,
|
|
85
|
-
id: 'hoverFeatureId',
|
|
86
|
-
title: 'hoverFeature',
|
|
87
|
-
zIndex: 900,
|
|
88
|
-
source: new FeatureDataSource(),
|
|
89
|
-
showInLayerList: false,
|
|
90
|
-
exportable: false,
|
|
91
|
-
browsable: false,
|
|
92
|
-
style: hoverFeatureMarker
|
|
93
|
-
});
|
|
94
|
-
tryBindStoreLayer(store, layer);
|
|
95
|
-
this.selectionLayer = new olLayerVectorTile({
|
|
96
|
-
map: this.map.ol,
|
|
97
|
-
zIndex: 901,
|
|
98
|
-
renderMode: "vector",
|
|
99
|
-
declutter: true,
|
|
100
|
-
source: new olVectorTileSource({ projection: this.map.projection }),
|
|
101
|
-
style: (feature, resolution) => {
|
|
102
|
-
if (this.mvtStyleOptions && feature.getId() in this.selectionMVT) {
|
|
103
|
-
return this.createHoverStyle(feature, this.mvtStyleOptions, resolution);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
createHoverStyle(feature, hoverStyle, resolution) {
|
|
109
|
-
const localHoverStyle = { ...hoverStyle };
|
|
110
|
-
let label = hoverStyle.label ? hoverStyle.label.attribute : undefined;
|
|
111
|
-
let hasLabelStyle = hoverStyle.label?.style ? true : false;
|
|
112
|
-
if (!feature.get('_isLabel')) {
|
|
113
|
-
localHoverStyle.label = undefined;
|
|
114
|
-
hasLabelStyle = false;
|
|
115
|
-
label = undefined;
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
// clear the style for label....
|
|
119
|
-
const size = localHoverStyle.data ? localHoverStyle.data.length : 0;
|
|
120
|
-
const radius = [];
|
|
121
|
-
const stroke = [];
|
|
122
|
-
const width = [];
|
|
123
|
-
const fill = [];
|
|
124
|
-
for (let i = 0; i < size; i++) {
|
|
125
|
-
radius.push(0);
|
|
126
|
-
stroke.push('rgba(255, 255, 255, 0)');
|
|
127
|
-
width.push(0);
|
|
128
|
-
fill.push('rgba(255, 255, 255, 0)');
|
|
129
|
-
}
|
|
130
|
-
localHoverStyle.radius = radius;
|
|
131
|
-
localHoverStyle.stroke = stroke;
|
|
132
|
-
localHoverStyle.width = width;
|
|
133
|
-
localHoverStyle.fill = fill;
|
|
134
|
-
}
|
|
135
|
-
if (!hasLabelStyle && label) {
|
|
136
|
-
localHoverStyle.label.style =
|
|
137
|
-
{
|
|
138
|
-
textAlign: 'left',
|
|
139
|
-
textBaseline: 'top',
|
|
140
|
-
font: '12px Calibri,sans-serif',
|
|
141
|
-
fill: { color: '#000' },
|
|
142
|
-
backgroundFill: { color: 'rgba(255, 255, 255, 0.5)' },
|
|
143
|
-
backgroundStroke: { color: 'rgba(200, 200, 200, 0.75)', width: 2 },
|
|
144
|
-
stroke: { color: '#fff', width: 3 },
|
|
145
|
-
overflow: true,
|
|
146
|
-
offsetX: 10,
|
|
147
|
-
offsetY: 20,
|
|
148
|
-
padding: [2.5, 2.5, 2.5, 2.5]
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
return this.styleService.createStyleByAttribute(feature, localHoverStyle, resolution);
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Stop listening to pointermove and reverse search results.
|
|
155
|
-
* @internal
|
|
156
|
-
*/
|
|
157
|
-
ngOnDestroy() {
|
|
158
|
-
this.unlistenToMapPointerMove();
|
|
159
|
-
this.unsubscribeToPointerStore();
|
|
160
|
-
this.unlistenToMapSingleClick();
|
|
161
|
-
this.layers$$.unsubscribe();
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Subscribe to pointermove result store
|
|
165
|
-
* @internal
|
|
166
|
-
*/
|
|
167
|
-
subscribeToPointerStore() {
|
|
168
|
-
this.store$$ = this.pointerHoverFeatureStore.entities$.subscribe(resultsUnderPointerPosition => {
|
|
169
|
-
this.addFeatureOverlay(resultsUnderPointerPosition);
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* On map pointermove
|
|
174
|
-
*/
|
|
175
|
-
listenToMapPointerMove() {
|
|
176
|
-
this.pointerMoveListener = this.map.ol.on('pointermove', (event) => this.onMapEvent(event));
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* On map singleclick
|
|
180
|
-
*/
|
|
181
|
-
listenToMapClick() {
|
|
182
|
-
this.singleClickMapListener = this.map.ol.on('singleclick', (event) => this.onMapSingleClickEvent(event));
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Unsubscribe to pointer store.
|
|
186
|
-
* @internal
|
|
187
|
-
*/
|
|
188
|
-
unsubscribeToPointerStore() {
|
|
189
|
-
this.store$$.unsubscribe();
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Stop listening for map pointermove
|
|
193
|
-
* @internal
|
|
194
|
-
*/
|
|
195
|
-
unlistenToMapPointerMove() {
|
|
196
|
-
unByKey(this.pointerMoveListener);
|
|
197
|
-
this.pointerMoveListener = undefined;
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Stop listening for map singleclick
|
|
201
|
-
* @internal
|
|
202
|
-
*/
|
|
203
|
-
unlistenToMapSingleClick() {
|
|
204
|
-
unByKey(this.singleClickMapListener);
|
|
205
|
-
this.singleClickMapListener = undefined;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Trigger clear layer on singleclick.
|
|
209
|
-
* @param event OL map browser singleclick event
|
|
210
|
-
*/
|
|
211
|
-
onMapSingleClickEvent(event) {
|
|
212
|
-
this.clearLayer();
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Trigger hover when the mouse is motionless during the defined delay (pointerMoveDelay).
|
|
216
|
-
* @param event OL map browser pointer event
|
|
217
|
-
*/
|
|
218
|
-
onMapEvent(event) {
|
|
219
|
-
if (event.dragging || !this.igoHoverFeatureEnabled ||
|
|
220
|
-
this.mediaService.isTouchScreen()) {
|
|
221
|
-
this.clearLayer();
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
if (typeof this.lastTimeoutRequest !== 'undefined') { // cancel timeout when the mouse moves
|
|
225
|
-
clearTimeout(this.lastTimeoutRequest);
|
|
226
|
-
}
|
|
227
|
-
let maximumZindex = -Infinity;
|
|
228
|
-
let topMostOlLayer;
|
|
229
|
-
const pixel = this.map.ol.getPixelFromCoordinate(event.coordinate);
|
|
230
|
-
this.lastTimeoutRequest = setTimeout(() => {
|
|
231
|
-
// retrieve the topmost layer with feature to only apply the hover on this layer.
|
|
232
|
-
this.map.ol.forEachFeatureAtPixel(pixel, (mapFeature, layerOL) => {
|
|
233
|
-
if (!layerOL) {
|
|
234
|
-
return;
|
|
235
|
-
}
|
|
236
|
-
const igoLayer = this.map.getLayerByOlUId(layerOL.ol_uid);
|
|
237
|
-
if (!this.canProcessHover(igoLayer)) {
|
|
238
|
-
return;
|
|
239
|
-
}
|
|
240
|
-
if (igoLayer.zIndex <= maximumZindex) {
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
maximumZindex = igoLayer.zIndex;
|
|
244
|
-
topMostOlLayer = layerOL;
|
|
245
|
-
}, {
|
|
246
|
-
hitTolerance: 10, layerFilter: olLayer => olLayer instanceof olLayerVector || olLayer instanceof olLayerVectorTile
|
|
247
|
-
});
|
|
248
|
-
if (!topMostOlLayer) {
|
|
249
|
-
// To clear label
|
|
250
|
-
this.clearLayer();
|
|
251
|
-
this.pointerHoverFeatureStore.clear();
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
this.map.ol.forEachFeatureAtPixel(pixel, (mapFeature, layerOL) => {
|
|
255
|
-
// To avoid flashing feature
|
|
256
|
-
if (mapFeature.get('hoverSummary') === undefined &&
|
|
257
|
-
mapFeature.getProperties() !== this.pointerHoverFeatureStore.all()[0]?.getProperties()) {
|
|
258
|
-
this.clearLayer();
|
|
259
|
-
let igoLayer;
|
|
260
|
-
if (layerOL instanceof olLayerVector) {
|
|
261
|
-
igoLayer = this.map.getLayerByOlUId(layerOL.ol_uid);
|
|
262
|
-
if (!this.canProcessHover(igoLayer)) {
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
let localOlFeature = this.handleRenderFeature(mapFeature);
|
|
266
|
-
this.setLayerStyleFromOptions(igoLayer, localOlFeature);
|
|
267
|
-
const featuresToLoad = [localOlFeature];
|
|
268
|
-
localOlFeature.set("_isLabel", false);
|
|
269
|
-
const myLabelOlFeature = new OlFeature();
|
|
270
|
-
myLabelOlFeature.setProperties(localOlFeature.getProperties());
|
|
271
|
-
const labelGeom = localOlFeature.getGeometry().getType() === 'Point' ? localOlFeature.getGeometry() : new OlGeom.Point(event.coordinate);
|
|
272
|
-
myLabelOlFeature.setGeometry(labelGeom);
|
|
273
|
-
myLabelOlFeature.setId(localOlFeature.getId());
|
|
274
|
-
myLabelOlFeature.set("_isLabel", true);
|
|
275
|
-
this.setLayerStyleFromOptions(igoLayer, myLabelOlFeature);
|
|
276
|
-
featuresToLoad.push(myLabelOlFeature);
|
|
277
|
-
this.pointerHoverFeatureStore.load(featuresToLoad);
|
|
278
|
-
return true;
|
|
279
|
-
}
|
|
280
|
-
if (layerOL instanceof olLayerVectorTile) {
|
|
281
|
-
igoLayer = this.map.getLayerByOlUId(layerOL.ol_uid);
|
|
282
|
-
if (!this.canProcessHover(igoLayer)) {
|
|
283
|
-
return;
|
|
284
|
-
}
|
|
285
|
-
if (igoLayer?.options?.styleByAttribute?.hoverStyle) {
|
|
286
|
-
this.mvtStyleOptions = igoLayer.options.styleByAttribute.hoverStyle;
|
|
287
|
-
}
|
|
288
|
-
else if (igoLayer?.options?.hoverStyle) {
|
|
289
|
-
this.mvtStyleOptions = igoLayer.options.hoverStyle;
|
|
290
|
-
}
|
|
291
|
-
this.selectionLayer.setSource(layerOL.getSource());
|
|
292
|
-
layerOL.getFeatures(event.pixel).then((mvtFeatures) => {
|
|
293
|
-
if (!mvtFeatures.length) {
|
|
294
|
-
this.selectionMVT = {};
|
|
295
|
-
this.selectionLayer.changed();
|
|
296
|
-
this.clearLayer();
|
|
297
|
-
return;
|
|
298
|
-
}
|
|
299
|
-
const feature = mvtFeatures[0];
|
|
300
|
-
if (!feature) {
|
|
301
|
-
this.clearLayer();
|
|
302
|
-
return;
|
|
303
|
-
}
|
|
304
|
-
let localOlFeature = this.handleRenderFeature(feature);
|
|
305
|
-
localOlFeature.set("_isLabel", false);
|
|
306
|
-
const myLabelOlFeature = new OlFeature();
|
|
307
|
-
myLabelOlFeature.setProperties(localOlFeature.getProperties());
|
|
308
|
-
const labelGeom = localOlFeature.getGeometry().getType() === 'Point' ? localOlFeature.getGeometry() : new OlGeom.Point(event.coordinate);
|
|
309
|
-
myLabelOlFeature.setGeometry(labelGeom);
|
|
310
|
-
myLabelOlFeature.setId(localOlFeature.getId());
|
|
311
|
-
myLabelOlFeature.set("_isLabel", true);
|
|
312
|
-
this.setLayerStyleFromOptions(igoLayer, myLabelOlFeature);
|
|
313
|
-
this.pointerHoverFeatureStore.load([myLabelOlFeature]);
|
|
314
|
-
this.selectionMVT[feature.getId()] = localOlFeature;
|
|
315
|
-
this.selectionLayer.changed();
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
}, {
|
|
320
|
-
hitTolerance: 10, layerFilter: olLayer => olLayer === topMostOlLayer
|
|
321
|
-
});
|
|
322
|
-
}, this.igoHoverFeatureDelay);
|
|
323
|
-
}
|
|
324
|
-
canProcessHover(igoLayer) {
|
|
325
|
-
if (!igoLayer) {
|
|
326
|
-
return false;
|
|
327
|
-
}
|
|
328
|
-
if (!igoLayer.visible) {
|
|
329
|
-
return false;
|
|
330
|
-
}
|
|
331
|
-
if (!igoLayer.options) {
|
|
332
|
-
return false;
|
|
333
|
-
}
|
|
334
|
-
if (!igoLayer.options.styleByAttribute && !igoLayer.options.hoverStyle) {
|
|
335
|
-
return false;
|
|
336
|
-
}
|
|
337
|
-
if ((igoLayer.options.styleByAttribute && !igoLayer.options.styleByAttribute.hoverStyle) &&
|
|
338
|
-
!igoLayer.options.hoverStyle) {
|
|
339
|
-
return false;
|
|
340
|
-
}
|
|
341
|
-
return true;
|
|
342
|
-
}
|
|
343
|
-
handleRenderFeature(feature) {
|
|
344
|
-
let localFeature;
|
|
345
|
-
if (feature instanceof RenderFeature) {
|
|
346
|
-
localFeature = new OlFeature({
|
|
347
|
-
geometry: this.getGeometry(feature)
|
|
348
|
-
});
|
|
349
|
-
localFeature.setId(feature.getId());
|
|
350
|
-
}
|
|
351
|
-
else if (feature instanceof OlFeature) {
|
|
352
|
-
localFeature = feature;
|
|
353
|
-
}
|
|
354
|
-
localFeature.setProperties(feature.getProperties());
|
|
355
|
-
return localFeature;
|
|
356
|
-
}
|
|
357
|
-
/**
|
|
358
|
-
* Add a feature to the pointer store
|
|
359
|
-
* @param text string
|
|
360
|
-
*/
|
|
361
|
-
addFeatureOverlay(hoverEntity) {
|
|
362
|
-
if (hoverEntity.length > 0) {
|
|
363
|
-
const result = hoverEntity[0];
|
|
364
|
-
this.clearLayer();
|
|
365
|
-
const feature = new OlFeature({
|
|
366
|
-
geometry: result.getGeometry(),
|
|
367
|
-
meta: { id: this.hoverFeatureId },
|
|
368
|
-
hoverSummary: this.getHoverSummary(result.getProperties())
|
|
369
|
-
});
|
|
370
|
-
this.store.setLayerOlFeatures([feature], FeatureMotion.None);
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
setLayerStyleFromOptions(igoLayer, feature) {
|
|
374
|
-
const resolution = this.store.layer.map.viewController.getResolution();
|
|
375
|
-
if (igoLayer?.options?.styleByAttribute?.hoverStyle) {
|
|
376
|
-
this.store.layer.ol.setStyle(this.createHoverStyle(feature, igoLayer.options.styleByAttribute.hoverStyle, resolution));
|
|
377
|
-
return;
|
|
378
|
-
}
|
|
379
|
-
if (igoLayer?.options?.hoverStyle) {
|
|
380
|
-
this.store.layer.ol.setStyle(this.createHoverStyle(feature, igoLayer.options.hoverStyle, resolution));
|
|
381
|
-
}
|
|
382
|
-
}
|
|
383
|
-
getHoverSummary(properties) {
|
|
384
|
-
let summary = '';
|
|
385
|
-
for (const [key, value] of Object.entries(properties)) {
|
|
386
|
-
if (!key.startsWith('_') && key !== 'geometry') {
|
|
387
|
-
summary += `${key}: ${value}` + '\n';
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
return summary.length >= 2 ? summary.slice(0, -2) : summary;
|
|
391
|
-
}
|
|
392
|
-
getGeometry(feature) {
|
|
393
|
-
let geom;
|
|
394
|
-
if (!feature.getOrientedFlatCoordinates) {
|
|
395
|
-
geom = feature.getGeometry();
|
|
396
|
-
}
|
|
397
|
-
else {
|
|
398
|
-
const coords = feature.getOrientedFlatCoordinates();
|
|
399
|
-
const flatCoords = [];
|
|
400
|
-
coords.forEach((c, idx) => {
|
|
401
|
-
if (idx % 2 === 0) {
|
|
402
|
-
flatCoords.push([parseFloat(coords[idx]), parseFloat(coords[idx + 1])]);
|
|
403
|
-
}
|
|
404
|
-
});
|
|
405
|
-
// TODO: test MultiX
|
|
406
|
-
switch (feature.getType()) {
|
|
407
|
-
case 'Point':
|
|
408
|
-
geom = new OlGeom.Point(flatCoords);
|
|
409
|
-
break;
|
|
410
|
-
case 'Polygon':
|
|
411
|
-
geom = new OlGeom.Polygon([flatCoords]);
|
|
412
|
-
break;
|
|
413
|
-
case 'LineString':
|
|
414
|
-
geom = new OlGeom.LineString([flatCoords]);
|
|
415
|
-
break;
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
return geom;
|
|
419
|
-
}
|
|
420
|
-
/**
|
|
421
|
-
* Clear the pointer store features
|
|
422
|
-
*/
|
|
423
|
-
clearLayer() {
|
|
424
|
-
this.selectionMVT = {};
|
|
425
|
-
if (this.selectionLayer) {
|
|
426
|
-
this.selectionLayer.changed();
|
|
427
|
-
}
|
|
428
|
-
if (this.store) {
|
|
429
|
-
this.store.clearLayer();
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
HoverFeatureDirective.ɵfac = function HoverFeatureDirective_Factory(t) { return new (t || HoverFeatureDirective)(i0.ɵɵdirectiveInject(i1.MapBrowserComponent, 2), i0.ɵɵdirectiveInject(i2.MediaService), i0.ɵɵdirectiveInject(i3.StyleService)); };
|
|
434
|
-
HoverFeatureDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: HoverFeatureDirective, selectors: [["", "igoHoverFeature", ""]], hostBindings: function HoverFeatureDirective_HostBindings(rf, ctx) { if (rf & 1) {
|
|
435
|
-
i0.ɵɵlistener("mouseout", function HoverFeatureDirective_mouseout_HostBindingHandler() { return ctx.mouseout(); });
|
|
436
|
-
} }, inputs: { igoHoverFeatureDelay: "igoHoverFeatureDelay", igoHoverFeatureEnabled: "igoHoverFeatureEnabled" } });
|
|
437
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(HoverFeatureDirective, [{
|
|
438
|
-
type: Directive,
|
|
439
|
-
args: [{
|
|
440
|
-
selector: '[igoHoverFeature]'
|
|
441
|
-
}]
|
|
442
|
-
}], function () { return [{ type: i1.MapBrowserComponent, decorators: [{
|
|
443
|
-
type: Self
|
|
444
|
-
}] }, { type: i2.MediaService }, { type: i3.StyleService }]; }, { igoHoverFeatureDelay: [{
|
|
445
|
-
type: Input
|
|
446
|
-
}], igoHoverFeatureEnabled: [{
|
|
447
|
-
type: Input
|
|
448
|
-
}], mouseout: [{
|
|
449
|
-
type: HostListener,
|
|
450
|
-
args: ['mouseout']
|
|
451
|
-
}] }); })();
|
|
452
|
-
/**
|
|
453
|
-
* Create a default style for the pointer position and it's label summary.
|
|
454
|
-
* @param feature OlFeature
|
|
455
|
-
* @returns OL style function
|
|
456
|
-
*/
|
|
457
|
-
export function hoverFeatureMarker(feature, resolution) {
|
|
458
|
-
const olStyleText = new OlStyle.Style({
|
|
459
|
-
text: new OlStyle.Text({
|
|
460
|
-
text: feature.get('hoverSummary'),
|
|
461
|
-
textAlign: 'left',
|
|
462
|
-
textBaseline: 'top',
|
|
463
|
-
font: '12px Calibri,sans-serif',
|
|
464
|
-
fill: new OlStyle.Fill({ color: '#000' }),
|
|
465
|
-
backgroundFill: new OlStyle.Fill({ color: 'rgba(255, 255, 255, 0.5)' }),
|
|
466
|
-
backgroundStroke: new OlStyle.Stroke({ color: 'rgba(200, 200, 200, 0.75)', width: 2 }),
|
|
467
|
-
stroke: new OlStyle.Stroke({ color: '#fff', width: 3 }),
|
|
468
|
-
overflow: true,
|
|
469
|
-
offsetX: 10,
|
|
470
|
-
offsetY: 20,
|
|
471
|
-
padding: [2.5, 2.5, 2.5, 2.5]
|
|
472
|
-
})
|
|
473
|
-
});
|
|
474
|
-
const olStyle = [olStyleText];
|
|
475
|
-
switch (feature.getGeometry().getType()) {
|
|
476
|
-
case 'Point':
|
|
477
|
-
olStyle.push(new OlStyle.Style({
|
|
478
|
-
image: new OlStyle.Circle({
|
|
479
|
-
radius: 10,
|
|
480
|
-
stroke: new OlStyle.Stroke({
|
|
481
|
-
color: 'blue',
|
|
482
|
-
width: 3
|
|
483
|
-
})
|
|
484
|
-
})
|
|
485
|
-
}));
|
|
486
|
-
break;
|
|
487
|
-
default:
|
|
488
|
-
olStyle.push(new OlStyle.Style({
|
|
489
|
-
stroke: new OlStyle.Stroke({
|
|
490
|
-
color: 'white',
|
|
491
|
-
width: 5
|
|
492
|
-
})
|
|
493
|
-
}));
|
|
494
|
-
olStyle.push(new OlStyle.Style({
|
|
495
|
-
stroke: new OlStyle.Stroke({
|
|
496
|
-
color: 'blue',
|
|
497
|
-
width: 3
|
|
498
|
-
})
|
|
499
|
-
}));
|
|
500
|
-
}
|
|
501
|
-
return olStyle;
|
|
502
|
-
}
|
|
1
|
+
import { Directive, Input, Self, HostListener } from '@angular/core';
|
|
2
|
+
import olLayerVectorTile from 'ol/layer/VectorTile';
|
|
3
|
+
import olLayerVector from 'ol/layer/Vector';
|
|
4
|
+
import olVectorTileSource from 'ol/source/VectorTile';
|
|
5
|
+
import OlFeature from 'ol/Feature';
|
|
6
|
+
import * as OlStyle from 'ol/style';
|
|
7
|
+
import * as OlGeom from 'ol/geom';
|
|
8
|
+
import { EntityStore } from '@igo2/common';
|
|
9
|
+
import { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';
|
|
10
|
+
import { VectorLayer } from '../../layer/shared/layers';
|
|
11
|
+
import { take } from 'rxjs/operators';
|
|
12
|
+
import { tryBindStoreLayer } from '../../feature/shared/feature.utils';
|
|
13
|
+
import { FeatureStore } from '../../feature/shared/store';
|
|
14
|
+
import { FeatureMotion } from '../../feature/shared/feature.enums';
|
|
15
|
+
import { unByKey } from 'ol/Observable';
|
|
16
|
+
import RenderFeature from 'ol/render/Feature';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
import * as i1 from "../../map/map-browser/map-browser.component";
|
|
19
|
+
import * as i2 from "@igo2/core";
|
|
20
|
+
import * as i3 from "../../layer/shared/style.service";
|
|
21
|
+
/**
|
|
22
|
+
* This directive makes the mouse coordinate trigger a reverse search on available search sources.
|
|
23
|
+
* The search results are placed into a label, on a cross icon, representing the mouse coordinate.
|
|
24
|
+
* By default, no search sources. Config in config file must be defined.
|
|
25
|
+
* the layer level.
|
|
26
|
+
*/
|
|
27
|
+
export class HoverFeatureDirective {
|
|
28
|
+
constructor(component, mediaService, styleService) {
|
|
29
|
+
this.component = component;
|
|
30
|
+
this.mediaService = mediaService;
|
|
31
|
+
this.styleService = styleService;
|
|
32
|
+
this.pointerHoverFeatureStore = new EntityStore([]);
|
|
33
|
+
this.selectionMVT = {};
|
|
34
|
+
this.hoverFeatureId = 'hoverFeatureId';
|
|
35
|
+
/**
|
|
36
|
+
* The delay where the mouse must be motionless before trigger the reverse search
|
|
37
|
+
*/
|
|
38
|
+
this.igoHoverFeatureDelay = 1000;
|
|
39
|
+
/**
|
|
40
|
+
* If the user has enabled or not the directive
|
|
41
|
+
*/
|
|
42
|
+
this.igoHoverFeatureEnabled = false;
|
|
43
|
+
}
|
|
44
|
+
mouseout() {
|
|
45
|
+
clearTimeout(this.lastTimeoutRequest);
|
|
46
|
+
this.clearLayer();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* IGO map
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
get map() {
|
|
53
|
+
return this.component.map;
|
|
54
|
+
}
|
|
55
|
+
get mapProjection() {
|
|
56
|
+
return this.component.map.projection;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Start listening to pointermove and reverse search results.
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
62
|
+
ngOnInit() {
|
|
63
|
+
this.listenToMapPointerMove();
|
|
64
|
+
this.subscribeToPointerStore();
|
|
65
|
+
this.listenToMapClick();
|
|
66
|
+
this.map.status$.pipe(take(1)).subscribe(() => {
|
|
67
|
+
this.store = new FeatureStore([], { map: this.map });
|
|
68
|
+
this.initStore();
|
|
69
|
+
});
|
|
70
|
+
// To handle context change without using the contextService.
|
|
71
|
+
this.layers$$ = this.map.layers$.subscribe((layers) => {
|
|
72
|
+
if (this.store && !layers.find(l => l.id === 'hoverFeatureId')) {
|
|
73
|
+
this.initStore();
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Initialize the pointer position store
|
|
79
|
+
* @internal
|
|
80
|
+
*/
|
|
81
|
+
initStore() {
|
|
82
|
+
const store = this.store;
|
|
83
|
+
const layer = new VectorLayer({
|
|
84
|
+
isIgoInternalLayer: true,
|
|
85
|
+
id: 'hoverFeatureId',
|
|
86
|
+
title: 'hoverFeature',
|
|
87
|
+
zIndex: 900,
|
|
88
|
+
source: new FeatureDataSource(),
|
|
89
|
+
showInLayerList: false,
|
|
90
|
+
exportable: false,
|
|
91
|
+
browsable: false,
|
|
92
|
+
style: hoverFeatureMarker
|
|
93
|
+
});
|
|
94
|
+
tryBindStoreLayer(store, layer);
|
|
95
|
+
this.selectionLayer = new olLayerVectorTile({
|
|
96
|
+
map: this.map.ol,
|
|
97
|
+
zIndex: 901,
|
|
98
|
+
renderMode: "vector",
|
|
99
|
+
declutter: true,
|
|
100
|
+
source: new olVectorTileSource({ projection: this.map.projection }),
|
|
101
|
+
style: (feature, resolution) => {
|
|
102
|
+
if (this.mvtStyleOptions && feature.getId() in this.selectionMVT) {
|
|
103
|
+
return this.createHoverStyle(feature, this.mvtStyleOptions, resolution);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
createHoverStyle(feature, hoverStyle, resolution) {
|
|
109
|
+
const localHoverStyle = { ...hoverStyle };
|
|
110
|
+
let label = hoverStyle.label ? hoverStyle.label.attribute : undefined;
|
|
111
|
+
let hasLabelStyle = hoverStyle.label?.style ? true : false;
|
|
112
|
+
if (!feature.get('_isLabel')) {
|
|
113
|
+
localHoverStyle.label = undefined;
|
|
114
|
+
hasLabelStyle = false;
|
|
115
|
+
label = undefined;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// clear the style for label....
|
|
119
|
+
const size = localHoverStyle.data ? localHoverStyle.data.length : 0;
|
|
120
|
+
const radius = [];
|
|
121
|
+
const stroke = [];
|
|
122
|
+
const width = [];
|
|
123
|
+
const fill = [];
|
|
124
|
+
for (let i = 0; i < size; i++) {
|
|
125
|
+
radius.push(0);
|
|
126
|
+
stroke.push('rgba(255, 255, 255, 0)');
|
|
127
|
+
width.push(0);
|
|
128
|
+
fill.push('rgba(255, 255, 255, 0)');
|
|
129
|
+
}
|
|
130
|
+
localHoverStyle.radius = radius;
|
|
131
|
+
localHoverStyle.stroke = stroke;
|
|
132
|
+
localHoverStyle.width = width;
|
|
133
|
+
localHoverStyle.fill = fill;
|
|
134
|
+
}
|
|
135
|
+
if (!hasLabelStyle && label) {
|
|
136
|
+
localHoverStyle.label.style =
|
|
137
|
+
{
|
|
138
|
+
textAlign: 'left',
|
|
139
|
+
textBaseline: 'top',
|
|
140
|
+
font: '12px Calibri,sans-serif',
|
|
141
|
+
fill: { color: '#000' },
|
|
142
|
+
backgroundFill: { color: 'rgba(255, 255, 255, 0.5)' },
|
|
143
|
+
backgroundStroke: { color: 'rgba(200, 200, 200, 0.75)', width: 2 },
|
|
144
|
+
stroke: { color: '#fff', width: 3 },
|
|
145
|
+
overflow: true,
|
|
146
|
+
offsetX: 10,
|
|
147
|
+
offsetY: 20,
|
|
148
|
+
padding: [2.5, 2.5, 2.5, 2.5]
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return this.styleService.createStyleByAttribute(feature, localHoverStyle, resolution);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Stop listening to pointermove and reverse search results.
|
|
155
|
+
* @internal
|
|
156
|
+
*/
|
|
157
|
+
ngOnDestroy() {
|
|
158
|
+
this.unlistenToMapPointerMove();
|
|
159
|
+
this.unsubscribeToPointerStore();
|
|
160
|
+
this.unlistenToMapSingleClick();
|
|
161
|
+
this.layers$$.unsubscribe();
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Subscribe to pointermove result store
|
|
165
|
+
* @internal
|
|
166
|
+
*/
|
|
167
|
+
subscribeToPointerStore() {
|
|
168
|
+
this.store$$ = this.pointerHoverFeatureStore.entities$.subscribe(resultsUnderPointerPosition => {
|
|
169
|
+
this.addFeatureOverlay(resultsUnderPointerPosition);
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* On map pointermove
|
|
174
|
+
*/
|
|
175
|
+
listenToMapPointerMove() {
|
|
176
|
+
this.pointerMoveListener = this.map.ol.on('pointermove', (event) => this.onMapEvent(event));
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* On map singleclick
|
|
180
|
+
*/
|
|
181
|
+
listenToMapClick() {
|
|
182
|
+
this.singleClickMapListener = this.map.ol.on('singleclick', (event) => this.onMapSingleClickEvent(event));
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Unsubscribe to pointer store.
|
|
186
|
+
* @internal
|
|
187
|
+
*/
|
|
188
|
+
unsubscribeToPointerStore() {
|
|
189
|
+
this.store$$.unsubscribe();
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Stop listening for map pointermove
|
|
193
|
+
* @internal
|
|
194
|
+
*/
|
|
195
|
+
unlistenToMapPointerMove() {
|
|
196
|
+
unByKey(this.pointerMoveListener);
|
|
197
|
+
this.pointerMoveListener = undefined;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Stop listening for map singleclick
|
|
201
|
+
* @internal
|
|
202
|
+
*/
|
|
203
|
+
unlistenToMapSingleClick() {
|
|
204
|
+
unByKey(this.singleClickMapListener);
|
|
205
|
+
this.singleClickMapListener = undefined;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Trigger clear layer on singleclick.
|
|
209
|
+
* @param event OL map browser singleclick event
|
|
210
|
+
*/
|
|
211
|
+
onMapSingleClickEvent(event) {
|
|
212
|
+
this.clearLayer();
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Trigger hover when the mouse is motionless during the defined delay (pointerMoveDelay).
|
|
216
|
+
* @param event OL map browser pointer event
|
|
217
|
+
*/
|
|
218
|
+
onMapEvent(event) {
|
|
219
|
+
if (event.dragging || !this.igoHoverFeatureEnabled ||
|
|
220
|
+
this.mediaService.isTouchScreen()) {
|
|
221
|
+
this.clearLayer();
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
if (typeof this.lastTimeoutRequest !== 'undefined') { // cancel timeout when the mouse moves
|
|
225
|
+
clearTimeout(this.lastTimeoutRequest);
|
|
226
|
+
}
|
|
227
|
+
let maximumZindex = -Infinity;
|
|
228
|
+
let topMostOlLayer;
|
|
229
|
+
const pixel = this.map.ol.getPixelFromCoordinate(event.coordinate);
|
|
230
|
+
this.lastTimeoutRequest = setTimeout(() => {
|
|
231
|
+
// retrieve the topmost layer with feature to only apply the hover on this layer.
|
|
232
|
+
this.map.ol.forEachFeatureAtPixel(pixel, (mapFeature, layerOL) => {
|
|
233
|
+
if (!layerOL) {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
const igoLayer = this.map.getLayerByOlUId(layerOL.ol_uid);
|
|
237
|
+
if (!this.canProcessHover(igoLayer)) {
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
if (igoLayer.zIndex <= maximumZindex) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
maximumZindex = igoLayer.zIndex;
|
|
244
|
+
topMostOlLayer = layerOL;
|
|
245
|
+
}, {
|
|
246
|
+
hitTolerance: 10, layerFilter: olLayer => olLayer instanceof olLayerVector || olLayer instanceof olLayerVectorTile
|
|
247
|
+
});
|
|
248
|
+
if (!topMostOlLayer) {
|
|
249
|
+
// To clear label
|
|
250
|
+
this.clearLayer();
|
|
251
|
+
this.pointerHoverFeatureStore.clear();
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
this.map.ol.forEachFeatureAtPixel(pixel, (mapFeature, layerOL) => {
|
|
255
|
+
// To avoid flashing feature
|
|
256
|
+
if (mapFeature.get('hoverSummary') === undefined &&
|
|
257
|
+
mapFeature.getProperties() !== this.pointerHoverFeatureStore.all()[0]?.getProperties()) {
|
|
258
|
+
this.clearLayer();
|
|
259
|
+
let igoLayer;
|
|
260
|
+
if (layerOL instanceof olLayerVector) {
|
|
261
|
+
igoLayer = this.map.getLayerByOlUId(layerOL.ol_uid);
|
|
262
|
+
if (!this.canProcessHover(igoLayer)) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
let localOlFeature = this.handleRenderFeature(mapFeature);
|
|
266
|
+
this.setLayerStyleFromOptions(igoLayer, localOlFeature);
|
|
267
|
+
const featuresToLoad = [localOlFeature];
|
|
268
|
+
localOlFeature.set("_isLabel", false);
|
|
269
|
+
const myLabelOlFeature = new OlFeature();
|
|
270
|
+
myLabelOlFeature.setProperties(localOlFeature.getProperties());
|
|
271
|
+
const labelGeom = localOlFeature.getGeometry().getType() === 'Point' ? localOlFeature.getGeometry() : new OlGeom.Point(event.coordinate);
|
|
272
|
+
myLabelOlFeature.setGeometry(labelGeom);
|
|
273
|
+
myLabelOlFeature.setId(localOlFeature.getId());
|
|
274
|
+
myLabelOlFeature.set("_isLabel", true);
|
|
275
|
+
this.setLayerStyleFromOptions(igoLayer, myLabelOlFeature);
|
|
276
|
+
featuresToLoad.push(myLabelOlFeature);
|
|
277
|
+
this.pointerHoverFeatureStore.load(featuresToLoad);
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
if (layerOL instanceof olLayerVectorTile) {
|
|
281
|
+
igoLayer = this.map.getLayerByOlUId(layerOL.ol_uid);
|
|
282
|
+
if (!this.canProcessHover(igoLayer)) {
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
if (igoLayer?.options?.styleByAttribute?.hoverStyle) {
|
|
286
|
+
this.mvtStyleOptions = igoLayer.options.styleByAttribute.hoverStyle;
|
|
287
|
+
}
|
|
288
|
+
else if (igoLayer?.options?.hoverStyle) {
|
|
289
|
+
this.mvtStyleOptions = igoLayer.options.hoverStyle;
|
|
290
|
+
}
|
|
291
|
+
this.selectionLayer.setSource(layerOL.getSource());
|
|
292
|
+
layerOL.getFeatures(event.pixel).then((mvtFeatures) => {
|
|
293
|
+
if (!mvtFeatures.length) {
|
|
294
|
+
this.selectionMVT = {};
|
|
295
|
+
this.selectionLayer.changed();
|
|
296
|
+
this.clearLayer();
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const feature = mvtFeatures[0];
|
|
300
|
+
if (!feature) {
|
|
301
|
+
this.clearLayer();
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
let localOlFeature = this.handleRenderFeature(feature);
|
|
305
|
+
localOlFeature.set("_isLabel", false);
|
|
306
|
+
const myLabelOlFeature = new OlFeature();
|
|
307
|
+
myLabelOlFeature.setProperties(localOlFeature.getProperties());
|
|
308
|
+
const labelGeom = localOlFeature.getGeometry().getType() === 'Point' ? localOlFeature.getGeometry() : new OlGeom.Point(event.coordinate);
|
|
309
|
+
myLabelOlFeature.setGeometry(labelGeom);
|
|
310
|
+
myLabelOlFeature.setId(localOlFeature.getId());
|
|
311
|
+
myLabelOlFeature.set("_isLabel", true);
|
|
312
|
+
this.setLayerStyleFromOptions(igoLayer, myLabelOlFeature);
|
|
313
|
+
this.pointerHoverFeatureStore.load([myLabelOlFeature]);
|
|
314
|
+
this.selectionMVT[feature.getId()] = localOlFeature;
|
|
315
|
+
this.selectionLayer.changed();
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}, {
|
|
320
|
+
hitTolerance: 10, layerFilter: olLayer => olLayer === topMostOlLayer
|
|
321
|
+
});
|
|
322
|
+
}, this.igoHoverFeatureDelay);
|
|
323
|
+
}
|
|
324
|
+
canProcessHover(igoLayer) {
|
|
325
|
+
if (!igoLayer) {
|
|
326
|
+
return false;
|
|
327
|
+
}
|
|
328
|
+
if (!igoLayer.visible) {
|
|
329
|
+
return false;
|
|
330
|
+
}
|
|
331
|
+
if (!igoLayer.options) {
|
|
332
|
+
return false;
|
|
333
|
+
}
|
|
334
|
+
if (!igoLayer.options.styleByAttribute && !igoLayer.options.hoverStyle) {
|
|
335
|
+
return false;
|
|
336
|
+
}
|
|
337
|
+
if ((igoLayer.options.styleByAttribute && !igoLayer.options.styleByAttribute.hoverStyle) &&
|
|
338
|
+
!igoLayer.options.hoverStyle) {
|
|
339
|
+
return false;
|
|
340
|
+
}
|
|
341
|
+
return true;
|
|
342
|
+
}
|
|
343
|
+
handleRenderFeature(feature) {
|
|
344
|
+
let localFeature;
|
|
345
|
+
if (feature instanceof RenderFeature) {
|
|
346
|
+
localFeature = new OlFeature({
|
|
347
|
+
geometry: this.getGeometry(feature)
|
|
348
|
+
});
|
|
349
|
+
localFeature.setId(feature.getId());
|
|
350
|
+
}
|
|
351
|
+
else if (feature instanceof OlFeature) {
|
|
352
|
+
localFeature = feature;
|
|
353
|
+
}
|
|
354
|
+
localFeature.setProperties(feature.getProperties());
|
|
355
|
+
return localFeature;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Add a feature to the pointer store
|
|
359
|
+
* @param text string
|
|
360
|
+
*/
|
|
361
|
+
addFeatureOverlay(hoverEntity) {
|
|
362
|
+
if (hoverEntity.length > 0) {
|
|
363
|
+
const result = hoverEntity[0];
|
|
364
|
+
this.clearLayer();
|
|
365
|
+
const feature = new OlFeature({
|
|
366
|
+
geometry: result.getGeometry(),
|
|
367
|
+
meta: { id: this.hoverFeatureId },
|
|
368
|
+
hoverSummary: this.getHoverSummary(result.getProperties())
|
|
369
|
+
});
|
|
370
|
+
this.store.setLayerOlFeatures([feature], FeatureMotion.None);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
setLayerStyleFromOptions(igoLayer, feature) {
|
|
374
|
+
const resolution = this.store.layer.map.viewController.getResolution();
|
|
375
|
+
if (igoLayer?.options?.styleByAttribute?.hoverStyle) {
|
|
376
|
+
this.store.layer.ol.setStyle(this.createHoverStyle(feature, igoLayer.options.styleByAttribute.hoverStyle, resolution));
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
if (igoLayer?.options?.hoverStyle) {
|
|
380
|
+
this.store.layer.ol.setStyle(this.createHoverStyle(feature, igoLayer.options.hoverStyle, resolution));
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
getHoverSummary(properties) {
|
|
384
|
+
let summary = '';
|
|
385
|
+
for (const [key, value] of Object.entries(properties)) {
|
|
386
|
+
if (!key.startsWith('_') && key !== 'geometry') {
|
|
387
|
+
summary += `${key}: ${value}` + '\n';
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
return summary.length >= 2 ? summary.slice(0, -2) : summary;
|
|
391
|
+
}
|
|
392
|
+
getGeometry(feature) {
|
|
393
|
+
let geom;
|
|
394
|
+
if (!feature.getOrientedFlatCoordinates) {
|
|
395
|
+
geom = feature.getGeometry();
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
const coords = feature.getOrientedFlatCoordinates();
|
|
399
|
+
const flatCoords = [];
|
|
400
|
+
coords.forEach((c, idx) => {
|
|
401
|
+
if (idx % 2 === 0) {
|
|
402
|
+
flatCoords.push([parseFloat(coords[idx]), parseFloat(coords[idx + 1])]);
|
|
403
|
+
}
|
|
404
|
+
});
|
|
405
|
+
// TODO: test MultiX
|
|
406
|
+
switch (feature.getType()) {
|
|
407
|
+
case 'Point':
|
|
408
|
+
geom = new OlGeom.Point(flatCoords);
|
|
409
|
+
break;
|
|
410
|
+
case 'Polygon':
|
|
411
|
+
geom = new OlGeom.Polygon([flatCoords]);
|
|
412
|
+
break;
|
|
413
|
+
case 'LineString':
|
|
414
|
+
geom = new OlGeom.LineString([flatCoords]);
|
|
415
|
+
break;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
return geom;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Clear the pointer store features
|
|
422
|
+
*/
|
|
423
|
+
clearLayer() {
|
|
424
|
+
this.selectionMVT = {};
|
|
425
|
+
if (this.selectionLayer) {
|
|
426
|
+
this.selectionLayer.changed();
|
|
427
|
+
}
|
|
428
|
+
if (this.store) {
|
|
429
|
+
this.store.clearLayer();
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
HoverFeatureDirective.ɵfac = function HoverFeatureDirective_Factory(t) { return new (t || HoverFeatureDirective)(i0.ɵɵdirectiveInject(i1.MapBrowserComponent, 2), i0.ɵɵdirectiveInject(i2.MediaService), i0.ɵɵdirectiveInject(i3.StyleService)); };
|
|
434
|
+
HoverFeatureDirective.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: HoverFeatureDirective, selectors: [["", "igoHoverFeature", ""]], hostBindings: function HoverFeatureDirective_HostBindings(rf, ctx) { if (rf & 1) {
|
|
435
|
+
i0.ɵɵlistener("mouseout", function HoverFeatureDirective_mouseout_HostBindingHandler() { return ctx.mouseout(); });
|
|
436
|
+
} }, inputs: { igoHoverFeatureDelay: "igoHoverFeatureDelay", igoHoverFeatureEnabled: "igoHoverFeatureEnabled" } });
|
|
437
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(HoverFeatureDirective, [{
|
|
438
|
+
type: Directive,
|
|
439
|
+
args: [{
|
|
440
|
+
selector: '[igoHoverFeature]'
|
|
441
|
+
}]
|
|
442
|
+
}], function () { return [{ type: i1.MapBrowserComponent, decorators: [{
|
|
443
|
+
type: Self
|
|
444
|
+
}] }, { type: i2.MediaService }, { type: i3.StyleService }]; }, { igoHoverFeatureDelay: [{
|
|
445
|
+
type: Input
|
|
446
|
+
}], igoHoverFeatureEnabled: [{
|
|
447
|
+
type: Input
|
|
448
|
+
}], mouseout: [{
|
|
449
|
+
type: HostListener,
|
|
450
|
+
args: ['mouseout']
|
|
451
|
+
}] }); })();
|
|
452
|
+
/**
|
|
453
|
+
* Create a default style for the pointer position and it's label summary.
|
|
454
|
+
* @param feature OlFeature
|
|
455
|
+
* @returns OL style function
|
|
456
|
+
*/
|
|
457
|
+
export function hoverFeatureMarker(feature, resolution) {
|
|
458
|
+
const olStyleText = new OlStyle.Style({
|
|
459
|
+
text: new OlStyle.Text({
|
|
460
|
+
text: feature.get('hoverSummary'),
|
|
461
|
+
textAlign: 'left',
|
|
462
|
+
textBaseline: 'top',
|
|
463
|
+
font: '12px Calibri,sans-serif',
|
|
464
|
+
fill: new OlStyle.Fill({ color: '#000' }),
|
|
465
|
+
backgroundFill: new OlStyle.Fill({ color: 'rgba(255, 255, 255, 0.5)' }),
|
|
466
|
+
backgroundStroke: new OlStyle.Stroke({ color: 'rgba(200, 200, 200, 0.75)', width: 2 }),
|
|
467
|
+
stroke: new OlStyle.Stroke({ color: '#fff', width: 3 }),
|
|
468
|
+
overflow: true,
|
|
469
|
+
offsetX: 10,
|
|
470
|
+
offsetY: 20,
|
|
471
|
+
padding: [2.5, 2.5, 2.5, 2.5]
|
|
472
|
+
})
|
|
473
|
+
});
|
|
474
|
+
const olStyle = [olStyleText];
|
|
475
|
+
switch (feature.getGeometry().getType()) {
|
|
476
|
+
case 'Point':
|
|
477
|
+
olStyle.push(new OlStyle.Style({
|
|
478
|
+
image: new OlStyle.Circle({
|
|
479
|
+
radius: 10,
|
|
480
|
+
stroke: new OlStyle.Stroke({
|
|
481
|
+
color: 'blue',
|
|
482
|
+
width: 3
|
|
483
|
+
})
|
|
484
|
+
})
|
|
485
|
+
}));
|
|
486
|
+
break;
|
|
487
|
+
default:
|
|
488
|
+
olStyle.push(new OlStyle.Style({
|
|
489
|
+
stroke: new OlStyle.Stroke({
|
|
490
|
+
color: 'white',
|
|
491
|
+
width: 5
|
|
492
|
+
})
|
|
493
|
+
}));
|
|
494
|
+
olStyle.push(new OlStyle.Style({
|
|
495
|
+
stroke: new OlStyle.Stroke({
|
|
496
|
+
color: 'blue',
|
|
497
|
+
width: 3
|
|
498
|
+
})
|
|
499
|
+
}));
|
|
500
|
+
}
|
|
501
|
+
return olStyle;
|
|
502
|
+
}
|
|
503
503
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItZmVhdHVyZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9tYXAvc2hhcmVkL2hvdmVyLWZlYXR1cmUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUVMLElBQUksRUFFSixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQ25CO0FBQ0gsT0FBTyxpQkFBaUIsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLGFBQWEsTUFBTSxpQkFBaUIsQ0FBQztBQUc1QyxPQUFPLGtCQUFrQixNQUFNLHNCQUFzQixDQUFDO0FBU3RELE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQztBQUNuQyxPQUFPLEtBQUssT0FBTyxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLFNBQVMsQ0FBQztBQUVsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQTBCLE1BQU0sMkJBQTJCLENBQUM7QUFDaEYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLGFBQWEsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFHOUM7Ozs7O0dBS0c7QUFJSCxNQUFNLE9BQU8scUJBQXFCO0lBZ0RoQyxZQUNrQixTQUE4QixFQUN0QyxZ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QUFPLENBQUMsTUFBTSxDQUFDO3dCQUN6QixLQUFLLEVBQUUsTUFBTTt3QkFDYixLQUFLLEVBQUUsQ0FBQztxQkFDVCxDQUFDO2lCQUNILENBQUM7YUFDSCxDQUFDLENBQUMsQ0FBQztZQUNKLE1BQU07UUFDUjtZQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUM3QixNQUFNLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO29CQUN6QixLQUFLLEVBQUUsT0FBTztvQkFDZCxLQUFLLEVBQUUsQ0FBQztpQkFDVCxDQUFDO2FBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDN0IsTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztvQkFDekIsS0FBSyxFQUFFLE1BQU07b0JBQ2IsS0FBSyxFQUFFLENBQUM7aUJBQ1QsQ0FBQzthQUNILENBQUMsQ0FBQyxDQUFDO0tBQ1A7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUVqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBTZWxmLFxuICBPbkluaXQsXG4gIEhvc3RMaXN0ZW5lclxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuICA7XG5pbXBvcnQgb2xMYXllclZlY3RvclRpbGUgZnJvbSAnb2wvbGF5ZXIvVmVjdG9yVGlsZSc7XG5pbXBvcnQgb2xMYXllclZlY3RvciBmcm9tICdvbC9sYXllci9WZWN0b3InO1xuXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCBvbFZlY3RvclRpbGVTb3VyY2UgZnJvbSAnb2wvc291cmNlL1ZlY3RvclRpbGUnO1xuXG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xNYXBCcm93c2VyRXZlbnQgfSBmcm9tICdvbC9NYXBCcm93c2VyRXZlbnQnO1xuXG5pbXBvcnQgeyBJZ29NYXAgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcCc7XG5pbXBvcnQgeyBNYXBCcm93c2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbWFwL21hcC1icm93c2VyL21hcC1icm93c2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS5pbnRlcmZhY2VzJztcblxuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9sR2VvbWV0cnkgfSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcbmltcG9ydCBPbEZlYXR1cmUgZnJvbSAnb2wvRmVhdHVyZSc7XG5pbXBvcnQgKiBhcyBPbFN0eWxlIGZyb20gJ29sL3N0eWxlJztcbmltcG9ydCAqIGFzIE9sR2VvbSBmcm9tICdvbC9nZW9tJztcblxuaW1wb3J0IHsgRW50aXR5U3RvcmUgfSBmcm9tICdAaWdvMi9jb21tb24nO1xuaW1wb3J0IHsgRmVhdHVyZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9mZWF0dXJlLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgVmVjdG9yTGF5ZXIsIExheWVyLCBWZWN0b3JUaWxlTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvbGF5ZXJzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyB0cnlCaW5kU3RvcmVMYXllciB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUudXRpbHMnO1xuaW1wb3J0IHsgRmVhdHVyZVN0b3JlIH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvc3RvcmUnO1xuaW1wb3J0IHsgRmVhdHVyZU1vdGlvbiB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuZW51bXMnO1xuaW1wb3J0IHsgTWVkaWFTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XG5pbXBvcnQgeyBTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvc3R5bGUuc2VydmljZSc7XG5pbXBvcnQgeyB1bkJ5S2V5IH0gZnJvbSAnb2wvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgUmVuZGVyRmVhdHVyZSBmcm9tICdvbC9yZW5kZXIvRmVhdHVyZSc7XG5pbXBvcnQgeyBTdHlsZUJ5QXR0cmlidXRlIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL3ZlY3Rvci1zdHlsZS5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFRoaXMgZGlyZWN0aXZlIG1ha2VzIHRoZSBtb3VzZSBjb29yZGluYXRlIHRyaWdnZXIgYSByZXZlcnNlIHNlYXJjaCBvbiBhdmFpbGFibGUgc2VhcmNoIHNvdXJjZXMuXG4gKiBUaGUgc2VhcmNoIHJlc3VsdHMgYXJlIHBsYWNlZCBpbnRvIGEgbGFiZWwsIG9uIGEgY3Jvc3MgaWNvbiwgcmVwcmVzZW50aW5nIHRoZSBtb3VzZSBjb29yZGluYXRlLlxuICogQnkgZGVmYXVsdCwgbm8gc2VhcmNoIHNvdXJjZXMuIENvbmZpZyBpbiBjb25maWcgZmlsZSBtdXN0IGJlIGRlZmluZWQuXG4gKiB0aGUgbGF5ZXIgbGV2ZWwuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tpZ29Ib3ZlckZlYXR1cmVdJ1xufSlcbmV4cG9ydCBjbGFzcyBIb3ZlckZlYXR1cmVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIHN0b3JlOiBGZWF0dXJlU3RvcmU8RmVhdHVyZT47XG4gIHByaXZhdGUgcG9pbnRlckhvdmVyRmVhdHVyZVN0b3JlOiBFbnRpdHlTdG9yZTxPbEZlYXR1cmU8T2xHZW9tZXRyeT4+ID0gbmV3IEVudGl0eVN0b3JlPE9sRmVhdHVyZTxPbEdlb21ldHJ5Pj4oW10pO1xuICBwcml2YXRlIGxhc3RUaW1lb3V0UmVxdWVzdDtcbiAgcHJpdmF0ZSBzdG9yZSQkOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgbGF5ZXJzJCQ6IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIHNlbGVjdGlvbkxheWVyOiBvbExheWVyVmVjdG9yVGlsZTtcbiAgcHJpdmF0ZSBzZWxlY3Rpb25NVlQgPSB7fTtcbiAgcHJpdmF0ZSBtdnRTdHlsZU9wdGlvbnM6IFN0eWxlQnlBdHRyaWJ1dGU7XG5cbiAgLyoqXG4gICAqIExpc3RlbmVyIHRvIHRoZSBwb2ludGVyIG1vdmUgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgcG9pbnRlck1vdmVMaXN0ZW5lcjtcblxuICBwcml2YXRlIHNpbmdsZUNsaWNrTWFwTGlzdGVuZXI7XG5cbiAgcHJpdmF0ZSBob3ZlckZlYXR1cmVJZDogc3RyaW5nID0gJ2hvdmVyRmVhdHVyZUlkJztcbiAgLyoqXG4gICAqIFRoZSBkZWxheSB3aGVyZSB0aGUgbW91c2UgbXVzdCBiZSBtb3Rpb25sZXNzIGJlZm9yZSB0cmlnZ2VyIHRoZSByZXZlcnNlIHNlYXJjaFxuICAgKi9cbiAgQElucHV0KCkgaWdvSG92ZXJGZWF0dXJlRGVsYXk6IG51bWJlciA9IDEwMDA7XG5cbiAgLyoqXG4gICAqIElmIHRoZSB1c2VyIGhhcyBlbmFibGVkIG9yIG5vdCB0aGUgZGlyZWN0aXZlXG4gICAqL1xuICBASW5wdXQoKSBpZ29Ib3ZlckZlYXR1cmVFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VvdXQnKVxuICBtb3VzZW91dCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5sYXN0VGltZW91dFJlcXVlc3QpO1xuICAgIHRoaXMuY2xlYXJMYXllcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIElHTyBtYXBcbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXQgbWFwKCk6IElnb01hcCB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50Lm1hcDtcbiAgfVxuXG4gIGdldCBtYXBQcm9qZWN0aW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmNvbXBvbmVudC5tYXAgYXMgSWdvTWFwKS5wcm9qZWN0aW9uO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQFNlbGYoKSBwcml2YXRlIGNvbXBvbmVudDogTWFwQnJvd3NlckNvbXBvbmVudCxcbiAgICBwcml2YXRlIG1lZGlhU2VydmljZTogTWVkaWFTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3R5bGVTZXJ2aWNlOiBTdHlsZVNlcnZpY2UsXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGxpc3RlbmluZyB0byBwb2ludGVybW92ZSBhbmQgcmV2ZXJzZSBzZWFyY2ggcmVzdWx0cy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxpc3RlblRvTWFwUG9pbnRlck1vdmUoKTtcbiAgICB0aGlzLnN1YnNjcmliZVRvUG9pbnRlclN0b3JlKCk7XG4gICAgdGhpcy5saXN0ZW5Ub01hcENsaWNrKCk7XG5cbiAgICB0aGlzLm1hcC5zdGF0dXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc3RvcmUgPSBuZXcgRmVhdHVyZVN0b3JlPEZlYXR1cmU+KFtdLCB7IG1hcDogdGhpcy5tYXAgfSk7XG4gICAgICB0aGlzLmluaXRTdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgLy8gVG8gaGFuZGxlIGNvbnRleHQgY2hhbmdlIHdpdGhvdXQgdXNpbmcgdGhlIGNvbnRleHRTZXJ2aWNlLlxuICAgIHRoaXMubGF5ZXJzJCQgPSB0aGlzLm1hcC5sYXllcnMkLnN1YnNjcmliZSgobGF5ZXJzOiBMYXllcltdKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdG9yZSAmJiAhbGF5ZXJzLmZpbmQobCA9PiBsLmlkID09PSAnaG92ZXJGZWF0dXJlSWQnKSkge1xuICAgICAgICB0aGlzLmluaXRTdG9yZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgcG9pbnRlciBwb3NpdGlvbiBzdG9yZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgaW5pdFN0b3JlKCkge1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5zdG9yZTtcblxuICAgIGNvbnN0IGxheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICAgIGlzSWdvSW50ZXJuYWxMYXllcjogdHJ1ZSxcbiAgICAgIGlkOiAnaG92ZXJGZWF0dXJlSWQnLFxuICAgICAgdGl0bGU6ICdob3ZlckZlYXR1cmUnLFxuICAgICAgekluZGV4OiA5MDAsXG4gICAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxuICAgICAgc2hvd0luTGF5ZXJMaXN0OiBmYWxzZSxcbiAgICAgIGV4cG9ydGFibGU6IGZhbHNlLFxuICAgICAgYnJvd3NhYmxlOiBmYWxzZSxcbiAgICAgIHN0eWxlOiBob3ZlckZlYXR1cmVNYXJrZXJcbiAgICB9KTtcbiAgICB0cnlCaW5kU3RvcmVMYXllcihzdG9yZSwgbGF5ZXIpO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25MYXllciA9IG5ldyBvbExheWVyVmVjdG9yVGlsZSh7XG4gICAgICBtYXA6IHRoaXMubWFwLm9sLFxuICAgICAgekluZGV4OiA5MDEsXG4gICAgICByZW5kZXJNb2RlOiBcInZlY3RvclwiLFxuICAgICAgZGVjbHV0dGVyOiB0cnVlLFxuICAgICAgc291cmNlOiBuZXcgb2xWZWN0b3JUaWxlU291cmNlKHtwcm9qZWN0aW9uOiB0aGlzLm1hcC5wcm9qZWN0aW9ufSksXG4gICAgICBzdHlsZTogKGZlYXR1cmUsIHJlc29sdXRpb24pID0+IHtcbiAgICAgICAgaWYgKHRoaXMubXZ0U3R5bGVPcHRpb25zICYmIGZlYXR1cmUuZ2V0SWQoKSBpbiB0aGlzLnNlbGVjdGlvbk1WVCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUhvdmVyU3R5bGUoZmVhdHVyZSwgdGhpcy5tdnRTdHlsZU9wdGlvbnMsIHJlc29sdXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjcmVhdGVIb3ZlclN0eWxlKGZlYXR1cmU6IFJlbmRlckZlYXR1cmUgfCBPbEZlYXR1cmU8T2xHZW9tZXRyeT4sIGhvdmVyU3R5bGU6IFN0eWxlQnlBdHRyaWJ1dGUsIHJlc29sdXRpb246IG51bWJlcikge1xuICAgIGNvbnN0IGxvY2FsSG92ZXJTdHlsZSA9IHsgLi4uaG92ZXJTdHlsZSB9O1xuICAgIGxldCBsYWJlbCA9IGhvdmVyU3R5bGUubGFiZWwgPyBob3ZlclN0eWxlLmxhYmVsLmF0dHJpYnV0ZSA6IHVuZGVmaW5lZDtcbiAgICBsZXQgaGFzTGFiZWxTdHlsZSA9IGhvdmVyU3R5bGUubGFiZWw/LnN0eWxlID8gdHJ1ZSA6IGZhbHNlO1xuXG4gICAgaWYgKCFmZWF0dXJlLmdldCgnX2lzTGFiZWwnKSkge1xuICAgICAgbG9jYWxIb3ZlclN0eWxlLmxhYmVsID0gdW5kZWZpbmVkO1xuICAgICAgaGFzTGFiZWxTdHlsZSA9IGZhbHNlO1xuICAgICAgbGFiZWwgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNsZWFyIHRoZSBzdHlsZSBmb3IgbGFiZWwuLi4uXG4gICAgICBjb25zdCBzaXplID0gbG9jYWxIb3ZlclN0eWxlLmRhdGEgPyBsb2NhbEhvdmVyU3R5bGUuZGF0YS5sZW5ndGggOiAwO1xuICAgICAgY29uc3QgcmFkaXVzID0gW107XG4gICAgICBjb25zdCBzdHJva2UgPSBbXTtcbiAgICAgIGNvbnN0IHdpZHRoID0gW107XG4gICAgICBjb25zdCBmaWxsID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgICByYWRpdXMucHVzaCgwKTtcbiAgICAgICAgc3Ryb2tlLnB1c2goJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMCknKTtcbiAgICAgICAgd2lkdGgucHVzaCgwKTtcbiAgICAgICAgZmlsbC5wdXNoKCdyZ2JhKDI1NSwgMjU1LCAyNTUsIDApJyk7XG4gICAgICB9XG4gICAgICBsb2NhbEhvdmVyU3R5bGUucmFkaXVzID0gcmFkaXVzO1xuICAgICAgbG9jYWxIb3ZlclN0eWxlLnN0cm9rZSA9IHN0cm9rZTtcbiAgICAgIGxvY2FsSG92ZXJTdHlsZS53aWR0aCA9IHdpZHRoO1xuICAgICAgbG9jYWxIb3ZlclN0eWxlLmZpbGwgPSBmaWxsO1xuICAgIH1cbiAgICBpZiAoIWhhc0xhYmVsU3R5bGUgJiYgbGFiZWwpIHtcbiAgICAgIGxvY2FsSG92ZXJTdHlsZS5sYWJlbC5zdHlsZSA9XG4gICAgICB7XG4gICAgICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgICAgICB0ZXh0QmFzZWxpbmU6ICd0b3AnLFxuICAgICAgICBmb250OiAnMTJweCBDYWxpYnJpLHNhbnMtc2VyaWYnLFxuICAgICAgICBmaWxsOiB7IGNvbG9yOiAnIzAwMCcgfSxcbiAgICAgICAgYmFja2dyb3VuZEZpbGw6IHsgY29sb3I6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSknIH0sXG4gICAgICAgIGJhY2tncm91bmRTdHJva2U6IHsgY29sb3I6ICdyZ2JhKDIwMCwgMjAwLCAyMDAsIDAuNzUpJywgd2lkdGg6IDIgfSxcbiAgICAgICAgc3Ryb2tlOiB7IGNvbG9yOiAnI2ZmZicsIHdpZHRoOiAzIH0sXG4gICAgICAgIG92ZXJmbG93OiB0cnVlLFxuICAgICAgICBvZmZzZXRYOiAxMCxcbiAgICAgICAgb2Zmc2V0WTogMjAsXG4gICAgICAgIHBhZGRpbmc6IFsyLjUsIDIuNSwgMi41LCAyLjVdXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdHlsZVNlcnZpY2UuY3JlYXRlU3R5bGVCeUF0dHJpYnV0ZShmZWF0dXJlLCBsb2NhbEhvdmVyU3R5bGUsIHJlc29sdXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3AgbGlzdGVuaW5nIHRvIHBvaW50ZXJtb3ZlIGFuZCByZXZlcnNlIHNlYXJjaCByZXN1bHRzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5saXN0ZW5Ub01hcFBvaW50ZXJNb3ZlKCk7XG4gICAgdGhpcy51bnN1YnNjcmliZVRvUG9pbnRlclN0b3JlKCk7XG4gICAgdGhpcy51bmxpc3RlblRvTWFwU2luZ2xlQ2xpY2soKTtcbiAgICB0aGlzLmxheWVycyQkLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHBvaW50ZXJtb3ZlIHJlc3VsdCBzdG9yZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHN1YnNjcmliZVRvUG9pbnRlclN0b3JlKCkge1xuICAgIHRoaXMuc3RvcmUkJCA9IHRoaXMucG9pbnRlckhvdmVyRmVhdHVyZVN0b3JlLmVudGl0aWVzJC5zdWJzY3JpYmUocmVzdWx0c1VuZGVyUG9pbnRlclBvc2l0aW9uID0+IHtcbiAgICAgIHRoaXMuYWRkRmVhdHVyZU92ZXJsYXkocmVzdWx0c1VuZGVyUG9pbnRlclBvc2l0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBtYXAgcG9pbnRlcm1vdmVcbiAgICovXG4gIHByaXZhdGUgbGlzdGVuVG9NYXBQb2ludGVyTW92ZSgpIHtcbiAgICB0aGlzLnBvaW50ZXJNb3ZlTGlzdGVuZXIgPSB0aGlzLm1hcC5vbC5vbihcbiAgICAgICdwb2ludGVybW92ZScsXG4gICAgICAoZXZlbnQ6IE9sTWFwQnJvd3NlckV2ZW50PGFueT4pID0+IHRoaXMub25NYXBFdmVudChldmVudClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIG1hcCBzaW5nbGVjbGlja1xuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5Ub01hcENsaWNrKCkge1xuICAgIHRoaXMuc2luZ2xlQ2xpY2tNYXBMaXN0ZW5lciA9IHRoaXMubWFwLm9sLm9uKFxuICAgICAgJ3NpbmdsZWNsaWNrJyxcbiAgICAgIChldmVudDogT2xNYXBCcm93c2VyRXZlbnQ8YW55PikgPT4gdGhpcy5vbk1hcFNpbmdsZUNsaWNrRXZlbnQoZXZlbnQpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSB0byBwb2ludGVyIHN0b3JlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVuc3Vic2NyaWJlVG9Qb2ludGVyU3RvcmUoKSB7XG4gICAgdGhpcy5zdG9yZSQkLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCBsaXN0ZW5pbmcgZm9yIG1hcCBwb2ludGVybW92ZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgdW5saXN0ZW5Ub01hcFBvaW50ZXJNb3ZlKCkge1xuICAgIHVuQnlLZXkodGhpcy5wb2ludGVyTW92ZUxpc3RlbmVyKTtcbiAgICB0aGlzLnBvaW50ZXJNb3ZlTGlzdGVuZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RvcCBsaXN0ZW5pbmcgZm9yIG1hcCBzaW5nbGVjbGlja1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgdW5saXN0ZW5Ub01hcFNpbmdsZUNsaWNrKCkge1xuICAgIHVuQnlLZXkodGhpcy5zaW5nbGVDbGlja01hcExpc3RlbmVyKTtcbiAgICB0aGlzLnNpbmdsZUNsaWNrTWFwTGlzdGVuZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlciBjbGVhciBsYXllciBvbiBzaW5nbGVjbGljay5cbiAgICogQHBhcmFtIGV2ZW50IE9MIG1hcCBicm93c2VyIHNpbmdsZWNsaWNrIGV2ZW50XG4gICAqL1xuICBwcml2YXRlIG9uTWFwU2luZ2xlQ2xpY2tFdmVudChldmVudDogT2xNYXBCcm93c2VyRXZlbnQ8YW55Pikge1xuICAgIHRoaXMuY2xlYXJMYXllcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXIgaG92ZXIgd2hlbiB0aGUgbW91c2UgaXMgbW90aW9ubGVzcyBkdXJpbmcgdGhlIGRlZmluZWQgZGVsYXkgKHBvaW50ZXJNb3ZlRGVsYXkpLlxuICAgKiBAcGFyYW0gZXZlbnQgT0wgbWFwIGJyb3dzZXIgcG9pbnRlciBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBvbk1hcEV2ZW50KGV2ZW50OiBPbE1hcEJyb3dzZXJFdmVudDxhbnk+KSB7XG4gICAgaWYgKFxuICAgICAgZXZlbnQuZHJhZ2dpbmcgfHwgIXRoaXMuaWdvSG92ZXJGZWF0dXJlRW5hYmxlZCB8fFxuICAgICAgdGhpcy5tZWRpYVNlcnZpY2UuaXNUb3VjaFNjcmVlbigpKSB7XG4gICAgICB0aGlzLmNsZWFyTGF5ZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB0aGlzLmxhc3RUaW1lb3V0UmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gY2FuY2VsIHRpbWVvdXQgd2hlbiB0aGUgbW91c2UgbW92ZXNcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxhc3RUaW1lb3V0UmVxdWVzdCk7XG4gICAgfVxuICAgIGxldCBtYXhpbXVtWmluZGV4ID0gLUluZmluaXR5O1xuICAgIGxldCB0b3BNb3N0T2xMYXllcjtcbiAgICBjb25zdCBwaXhlbCA9IHRoaXMubWFwLm9sLmdldFBpeGVsRnJvbUNvb3JkaW5hdGUoZXZlbnQuY29vcmRpbmF0ZSk7XG4gICAgdGhpcy5sYXN0VGltZW91dFJlcXVlc3QgPSBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgLy8gcmV0cmlldmUgdGhlIHRvcG1vc3QgbGF5ZXIgd2l0aCBmZWF0dXJlIHRvIG9ubHkgYXBwbHkgdGhlIGhvdmVyIG9uIHRoaXMgbGF5ZXIuXG4gICAgICB0aGlzLm1hcC5vbC5mb3JFYWNoRmVhdHVyZUF0UGl4ZWwocGl4ZWwsIChtYXBGZWF0dXJlOiBSZW5kZXJGZWF0dXJlIHwgT2xGZWF0dXJlPE9sR2VvbWV0cnk+LCBsYXllck9MOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFsYXllck9MKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlnb0xheWVyID0gdGhpcy5tYXAuZ2V0TGF5ZXJCeU9sVUlkKChsYXllck9MIGFzIGFueSkub2xfdWlkKTtcbiAgICAgICAgaWYgKCF0aGlzLmNhblByb2Nlc3NIb3ZlcihpZ29MYXllciBhcyBhbnkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZ29MYXllci56SW5kZXggPD0gbWF4aW11bVppbmRleCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBtYXhpbXVtWmluZGV4ID0gaWdvTGF5ZXIuekluZGV4O1xuICAgICAgICB0b3BNb3N0T2xMYXllciA9IGxheWVyT0w7XG5cbiAgICAgIH0sIHtcbiAgICAgICAgaGl0VG9sZXJhbmNlOiAxMCwgbGF5ZXJGaWx0ZXI6IG9sTGF5ZXIgPT4gb2xMYXllciBpbnN0YW5jZW9mIG9sTGF5ZXJWZWN0b3IgfHwgb2xMYXllciBpbnN0YW5jZW9mIG9sTGF5ZXJWZWN0b3JUaWxlXG4gICAgICB9KTtcbiAgICAgIGlmICghdG9wTW9zdE9sTGF5ZXIpIHtcbiAgICAgICAgLy8gVG8gY2xlYXIgbGFiZWxcbiAgICAgICAgdGhpcy5jbGVhckxheWVyKCk7XG4gICAgICAgIHRoaXMucG9pbnRlckhvdmVyRmVhdHVyZVN0b3JlLmNsZWFyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5tYXAub2wuZm9yRWFjaEZlYXR1cmVBdFBpeGVsKHBpeGVsLCAobWFwRmVhdHVyZTogUmVuZGVyRmVhdHVyZSB8IE9sRmVhdHVyZTxPbEdlb21ldHJ5PiwgbGF5ZXJPTDogYW55KSA9PiB7XG4gICAgICAgIC8vIFRvIGF2b2lkIGZsYXNoaW5nIGZlYXR1cmVcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1hcEZlYXR1cmUuZ2V0KCdob3ZlclN1bW1hcnknKSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgbWFwRmVhdHVyZS5nZXRQcm9wZXJ0aWVzKCkgIT09IHRoaXMucG9pbnRlckhvdmVyRmVhdHVyZVN0b3JlLmFsbCgpWzBdPy5nZXRQcm9wZXJ0aWVzKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckxheWVyKCk7XG4gICAgICAgICAgbGV0IGlnb0xheWVyO1xuICAgICAgICAgIGlmIChsYXllck9MIGluc3RhbmNlb2Ygb2xMYXllclZlY3Rvcikge1xuICAgICAgICAgICAgaWdvTGF5ZXIgPSB0aGlzLm1hcC5nZXRMYXllckJ5T2xVSWQoKGxheWVyT0wgYXMgYW55KS5vbF91aWQpIGFzIFZlY3RvckxheWVyO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNhblByb2Nlc3NIb3ZlcihpZ29MYXllcikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGxvY2FsT2xGZWF0dXJlID0gdGhpcy5oYW5kbGVSZW5kZXJGZWF0dXJlKG1hcEZlYXR1cmUpO1xuICAgICAgICAgICAgdGhpcy5zZXRMYXllclN0eWxlRnJvbU9wdGlvbnMoaWdvTGF5ZXIsIGxvY2FsT2xGZWF0dXJlKTtcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVzVG9Mb2FkID0gW2xvY2FsT2xGZWF0dXJlXTtcbiAgICAgICAgICAgIGxvY2FsT2xGZWF0dXJlLnNldChcIl9pc0xhYmVsXCIsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IG15TGFiZWxPbEZlYXR1cmUgPSBuZXcgT2xGZWF0dXJlKCk7XG4gICAgICAgICAgICBteUxhYmVsT2xGZWF0dXJlLnNldFByb3BlcnRpZXMobG9jYWxPbEZlYXR1cmUuZ2V0UHJvcGVydGllcygpKTtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsR2VvbSA9XG4gICAgICAgICAgICAgIGxvY2FsT2xGZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0VHlwZSgpID09PSAnUG9pbnQnID8gbG9jYWxPbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKSA6IG5ldyBPbEdlb20uUG9pbnQoZXZlbnQuY29vcmRpbmF0ZSk7XG4gICAgICAgICAgICBteUxhYmVsT2xGZWF0dXJlLnNldEdlb21ldHJ5KGxhYmVsR2VvbSk7XG4gICAgICAgICAgICBteUxhYmVsT2xGZWF0dXJlLnNldElkKGxvY2FsT2xGZWF0dXJlLmdldElkKCkpO1xuICAgICAgICAgICAgbXlMYWJlbE9sRmVhdHVyZS5zZXQoXCJfaXNMYWJlbFwiLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0TGF5ZXJTdHlsZUZyb21PcHRpb25zKGlnb0xheWVyLCBteUxhYmVsT2xGZWF0dXJlKTtcbiAgICAgICAgICAgIGZlYXR1cmVzVG9Mb2FkLnB1c2gobXlMYWJlbE9sRmVhdHVyZSk7XG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJIb3ZlckZlYXR1cmVTdG9yZS5sb2FkKGZlYXR1cmVzVG9Mb2FkKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGF5ZXJPTCBpbnN0YW5jZW9mIG9sTGF5ZXJWZWN0b3JUaWxlKSB7XG4gICAgICAgICAgICBpZ29MYXllciA9IHRoaXMubWFwLmdldExheWVyQnlPbFVJZCgobGF5ZXJPTCBhcyBhbnkpLm9sX3VpZCkgYXMgVmVjdG9yVGlsZUxheWVyO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNhblByb2Nlc3NIb3ZlcihpZ29MYXllcikpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlnb0xheWVyPy5vcHRpb25zPy5zdHlsZUJ5QXR0cmlidXRlPy5ob3ZlclN0eWxlKSB7XG4gICAgICAgICAgICAgIHRoaXMubXZ0U3R5bGVPcHRpb25zID0gaWdvTGF5ZXIub3B0aW9ucy5zdHlsZUJ5QXR0cmlidXRlLmhvdmVyU3R5bGU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlnb0xheWVyPy5vcHRpb25zPy5ob3ZlclN0eWxlKSB7XG4gICAgICAgICAgICAgIHRoaXMubXZ0U3R5bGVPcHRpb25zID0gaWdvTGF5ZXIub3B0aW9ucy5ob3ZlclN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25MYXllci5zZXRTb3VyY2UobGF5ZXJPTC5nZXRTb3VyY2UoKSk7XG4gICAgICAgICAgICBsYXllck9MLmdldEZlYXR1cmVzKGV2ZW50LnBpeGVsKS50aGVuKChtdnRGZWF0dXJlczogKFJlbmRlckZlYXR1cmUgfCBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pW10pID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFtdnRGZWF0dXJlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1WVCA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTGF5ZXIuY2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJMYXllcigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gbXZ0RmVhdHVyZXNbMF07XG4gICAgICAgICAgICAgIGlmICghZmVhdHVyZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJMYXllcigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgbG9jYWxPbEZlYXR1cmUgPSB0aGlzLmhhbmRsZVJlbmRlckZlYXR1cmUoZmVhdHVyZSk7XG4gICAgICAgICAgICAgIGxvY2FsT2xGZWF0dXJlLnNldChcIl9pc0xhYmVsXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgY29uc3QgbXlMYWJlbE9sRmVhdHVyZSA9IG5ldyBPbEZlYXR1cmUoKTtcbiAgICAgICAgICAgICAgbXlMYWJlbE9sRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKGxvY2FsT2xGZWF0dXJlLmdldFByb3BlcnRpZXMoKSk7XG4gICAgICAgICAgICAgIGNvbnN0IGxhYmVsR2VvbSA9XG4gICAgICAgICAgICAgIGxvY2FsT2xGZWF0dXJlLmdldEdlb21ldHJ5KCkuZ2V0VHlwZSgpID09PSAnUG9pbnQnID8gbG9jYWxPbEZlYXR1cmUuZ2V0R2VvbWV0cnkoKSA6IG5ldyBPbEdlb20uUG9pbnQoZXZlbnQuY29vcmRpbmF0ZSk7XG4gICAgICAgICAgICAgIG15TGFiZWxPbEZlYXR1cmUuc2V0R2VvbWV0cnkobGFiZWxHZW9tKTtcbiAgICAgICAgICAgICAgbXlMYWJlbE9sRmVhdHVyZS5zZXRJZChsb2NhbE9sRmVhdHVyZS5nZXRJZCgpKTtcbiAgICAgICAgICAgICAgbXlMYWJlbE9sRmVhdHVyZS5zZXQoXCJfaXNMYWJlbFwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgdGhpcy5zZXRMYXllclN0eWxlRnJvbU9wdGlvbnMoaWdvTGF5ZXIsIG15TGFiZWxPbEZlYXR1cmUpO1xuICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJIb3ZlckZlYXR1cmVTdG9yZS5sb2FkKFtteUxhYmVsT2xGZWF0dXJlXSk7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTVZUW2ZlYXR1cmUuZ2V0SWQoKV0gPSBsb2NhbE9sRmVhdHVyZTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25MYXllci5jaGFuZ2VkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgaGl0VG9sZXJhbmNlOiAxMCwgbGF5ZXJGaWx0ZXI6IG9sTGF5ZXIgPT4gb2xMYXllciA9PT0gdG9wTW9zdE9sTGF5ZXJcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuaWdvSG92ZXJGZWF0dXJlRGVsYXkpO1xuICB9XG5cbiAgY2FuUHJvY2Vzc0hvdmVyKGlnb0xheWVyOiBWZWN0b3JMYXllciB8IFZlY3RvclRpbGVMYXllcik6IGJvb2xlYW4ge1xuICAgIGlmICghaWdvTGF5ZXIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFpZ29MYXllci52aXNpYmxlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghaWdvTGF5ZXIub3B0aW9ucykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghaWdvTGF5ZXIub3B0aW9ucy5zdHlsZUJ5QXR0cmlidXRlICYmICFpZ29MYXllci5vcHRpb25zLmhvdmVyU3R5bGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAoaWdvTGF5ZXIub3B0aW9ucy5zdHlsZUJ5QXR0cmlidXRlICYmICFpZ29MYXllci5vcHRpb25zLnN0eWxlQnlBdHRyaWJ1dGUuaG92ZXJTdHlsZSkgJiZcbiAgICAgICFpZ29MYXllci5vcHRpb25zLmhvdmVyU3R5bGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBoYW5kbGVSZW5kZXJGZWF0dXJlKGZlYXR1cmU6IFJlbmRlckZlYXR1cmUgfCBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4ge1xuICAgIGxldCBsb2NhbEZlYXR1cmU6IE9sRmVhdHVyZTxPbEdlb21ldHJ5PjtcbiAgICBpZiAoZmVhdHVyZSBpbnN0YW5jZW9mIFJlbmRlckZlYXR1cmUpIHtcbiAgICAgIGxvY2FsRmVhdHVyZSA9IG5ldyBPbEZlYXR1cmUoe1xuICAgICAgICBnZW9tZXRyeTogdGhpcy5nZXRHZW9tZXRyeShmZWF0dXJlKVxuICAgICAgfSk7XG4gICAgICBsb2NhbEZlYXR1cmUuc2V0SWQoZmVhdHVyZS5nZXRJZCgpKTtcbiAgICB9IGVsc2UgaWYgKGZlYXR1cmUgaW5zdGFuY2VvZiBPbEZlYXR1cmUpIHtcbiAgICAgIGxvY2FsRmVhdHVyZSA9IGZlYXR1cmU7XG4gICAgfVxuICAgIGxvY2FsRmVhdHVyZS5zZXRQcm9wZXJ0aWVzKGZlYXR1cmUuZ2V0UHJvcGVydGllcygpKTtcbiAgICByZXR1cm4gbG9jYWxGZWF0dXJlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGZlYXR1cmUgdG8gdGhlIHBvaW50ZXIgc3RvcmVcbiAgICogQHBhcmFtIHRleHQgc3RyaW5nXG4gICAqL1xuICBwcml2YXRlIGFkZEZlYXR1cmVPdmVybGF5KGhvdmVyRW50aXR5OiBPbEZlYXR1cmU8T2xHZW9tZXRyeT5bXSkge1xuXG4gICAgaWYgKGhvdmVyRW50aXR5Lmxlbmd0aCA+IDApIHtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gaG92ZXJFbnRpdHlbMF07XG4gICAgICB0aGlzLmNsZWFyTGF5ZXIoKTtcbiAgICAgIGNvbnN0IGZlYXR1cmUgPSBuZXcgT2xGZWF0dXJlKHtcbiAgICAgICAgZ2VvbWV0cnk6IHJlc3VsdC5nZXRHZW9tZXRyeSgpLFxuICAgICAgICBtZXRhOiB7IGlkOiB0aGlzLmhvdmVyRmVhdHVyZUlkIH0sXG4gICAgICAgIGhvdmVyU3VtbWFyeTogdGhpcy5nZXRIb3ZlclN1bW1hcnkocmVzdWx0LmdldFByb3BlcnRpZXMoKSlcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnN0b3JlLnNldExheWVyT2xGZWF0dXJlcyhbZmVhdHVyZV0sIEZlYXR1cmVNb3Rpb24uTm9uZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMYXllclN0eWxlRnJvbU9wdGlvbnMoaWdvTGF5ZXI6IFZlY3RvckxheWVyIHwgVmVjdG9yVGlsZUxheWVyLCBmZWF0dXJlOiBPbEZlYXR1cmU8T2xHZW9tZXRyeT4pIHtcbiAgICBjb25zdCByZXNvbHV0aW9uID0gdGhpcy5zdG9yZS5sYXllci5tYXAudmlld0NvbnRyb2xsZXIuZ2V0UmVzb2x1dGlvbigpO1xuICAgIGlmIChpZ29MYXllcj8ub3B0aW9ucz8uc3R5bGVCeUF0dHJpYnV0ZT8uaG92ZXJTdHlsZSkge1xuICAgICAgdGhpcy5zdG9yZS5sYXllci5vbC5zZXRTdHlsZSh0aGlzLmNyZWF0ZUhvdmVyU3R5bGUoZmVhdHVyZSwgaWdvTGF5ZXIub3B0aW9ucy5zdHlsZUJ5QXR0cmlidXRlLmhvdmVyU3R5bGUsIHJlc29sdXRpb24pKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlnb0xheWVyPy5vcHRpb25zPy5ob3ZlclN0eWxlKSB7XG4gICAgICB0aGlzLnN0b3JlLmxheWVyLm9sLnNldFN0eWxlKHRoaXMuY3JlYXRlSG92ZXJTdHlsZShmZWF0dXJlLCBpZ29MYXllci5vcHRpb25zLmhvdmVyU3R5bGUsIHJlc29sdXRpb24pKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEhvdmVyU3VtbWFyeShwcm9wZXJ0aWVzKTogc3RyaW5nIHtcbiAgICBsZXQgc3VtbWFyeSA9ICcnO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpKSB7XG4gICAgICBpZiAoIWtleS5zdGFydHNXaXRoKCdfJykgJiYga2V5ICE9PSAnZ2VvbWV0cnknKSB7XG4gICAgICAgIHN1bW1hcnkgKz0gYCR7a2V5fTogJHt2YWx1ZX1gICsgJ1xcbic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdW1tYXJ5Lmxlbmd0aCA+PSAyID8gc3VtbWFyeS5zbGljZSgwLCAtMikgOiBzdW1tYXJ5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRHZW9tZXRyeShmZWF0dXJlKTogT2xHZW9tLkdlb21ldHJ5IHtcbiAgICBsZXQgZ2VvbTtcbiAgICBpZiAoIWZlYXR1cmUuZ2V0T3JpZW50ZWRGbGF0Q29vcmRpbmF0ZXMpIHtcbiAgICAgIGdlb20gPSBmZWF0dXJlLmdldEdlb21ldHJ5KCk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgY29uc3QgY29vcmRzID0gZmVhdHVyZS5nZXRPcmllbnRlZEZsYXRDb29yZGluYXRlcygpO1xuICAgICAgY29uc3QgZmxhdENvb3JkcyA9IFtdO1xuXG4gICAgICBjb29yZHMuZm9yRWFjaCgoYywgaWR4KSA9PiB7XG4gICAgICAgIGlmIChpZHggJSAyID09PSAwKSB7XG4gICAgICAgICAgZmxhdENvb3Jkcy5wdXNoKFtwYXJzZUZsb2F0KGNvb3Jkc1tpZHhdKSwgcGFyc2VGbG9hdChjb29yZHNbaWR4ICsgMV0pXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBUT0RPOiB0ZXN0IE11bHRpWFxuICAgICAgc3dpdGNoIChmZWF0dXJlLmdldFR5cGUoKSkge1xuICAgICAgICBjYXNlICdQb2ludCc6XG4gICAgICAgICAgZ2VvbSA9IG5ldyBPbEdlb20uUG9pbnQoZmxhdENvb3Jkcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgIGdlb20gPSBuZXcgT2xHZW9tLlBvbHlnb24oW2ZsYXRDb29yZHNdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgICAgZ2VvbSA9IG5ldyBPbEdlb20uTGluZVN0cmluZyhbZmxhdENvb3Jkc10pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBnZW9tO1xuICB9XG5cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIHBvaW50ZXIgc3RvcmUgZmVhdHVyZXNcbiAgICovXG4gIHByaXZhdGUgY2xlYXJMYXllcigpIHtcbiAgICB0aGlzLnNlbGVjdGlvbk1WVCA9IHt9O1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkxheWVyKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbkxheWVyLmNoYW5nZWQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RvcmUpIHtcbiAgICAgIHRoaXMuc3RvcmUuY2xlYXJMYXllcigpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGRlZmF1bHQgc3R5bGUgZm9yIHRoZSBwb2ludGVyIHBvc2l0aW9uIGFuZCBpdCdzIGxhYmVsIHN1bW1hcnkuXG4gKiBAcGFyYW0gZmVhdHVyZSBPbEZlYXR1cmVcbiAqIEByZXR1cm5zIE9MIHN0eWxlIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob3ZlckZlYXR1cmVNYXJrZXIoZmVhdHVyZTogT2xGZWF0dXJlPE9sR2VvbS5HZW9tZXRyeT4sIHJlc29sdXRpb246IG51bWJlcik6IE9sU3R5bGUuU3R5bGVbXSB7XG5cbiAgY29uc3Qgb2xTdHlsZVRleHQgPSBuZXcgT2xTdHlsZS5TdHlsZSh7XG4gICAgdGV4dDogbmV3IE9sU3R5bGUuVGV4dCh7XG4gICAgICB0ZXh0OiBmZWF0dXJlLmdldCgnaG92ZXJTdW1tYXJ5JyksXG4gICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgIHRleHRCYXNlbGluZTogJ3RvcCcsXG4gICAgICBmb250OiAnMTJweCBDYWxpYnJpLHNhbnMtc2VyaWYnLFxuICAgICAgZmlsbDogbmV3IE9sU3R5bGUuRmlsbCh7IGNvbG9yOiAnIzAwMCcgfSksXG4gICAgICBiYWNrZ3JvdW5kRmlsbDogbmV3IE9sU3R5bGUuRmlsbCh7IGNvbG9yOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpJyB9KSxcbiAgICAgIGJhY2tncm91bmRTdHJva2U6IG5ldyBPbFN0eWxlLlN0cm9rZSh7IGNvbG9yOiAncmdiYSgyMDAsIDIwMCwgMjAwLCAwLjc1KScsIHdpZHRoOiAyIH0pLFxuICAgICAgc3Ryb2tlOiBuZXcgT2xTdHlsZS5TdHJva2UoeyBjb2xvcjogJyNmZmYnLCB3aWR0aDogMyB9KSxcbiAgICAgIG92ZXJmbG93OiB0cnVlLFxuICAgICAgb2Zmc2V0WDogMTAsXG4gICAgICBvZmZzZXRZOiAyMCxcbiAgICAgIHBhZGRpbmc6IFsyLjUsIDIuNSwgMi41LCAyLjVdXG4gICAgfSlcbiAgfSk7XG5cbiAgY29uc3Qgb2xTdHlsZSA9IFtvbFN0eWxlVGV4dF07XG4gIHN3aXRjaCAoZmVhdHVyZS5nZXRHZW9tZXRyeSgpLmdldFR5cGUoKSkge1xuICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgIG9sU3R5bGUucHVzaChuZXcgT2xTdHlsZS5TdHlsZSh7XG4gICAgICAgIGltYWdlOiBuZXcgT2xTdHlsZS5DaXJjbGUoe1xuICAgICAgICAgIHJhZGl1czogMTAsXG4gICAgICAgICAgc3Ryb2tlOiBuZXcgT2xTdHlsZS5TdHJva2Uoe1xuICAgICAgICAgICAgY29sb3I6ICdibHVlJyxcbiAgICAgICAgICAgIHdpZHRoOiAzXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBvbFN0eWxlLnB1c2gobmV3IE9sU3R5bGUuU3R5bGUoe1xuICAgICAgICBzdHJva2U6IG5ldyBPbFN0eWxlLlN0cm9rZSh7XG4gICAgICAgICAgY29sb3I6ICd3aGl0ZScsXG4gICAgICAgICAgd2lkdGg6IDVcbiAgICAgICAgfSlcbiAgICAgIH0pKTtcbiAgICAgIG9sU3R5bGUucHVzaChuZXcgT2xTdHlsZS5TdHlsZSh7XG4gICAgICAgIHN0cm9rZTogbmV3IE9sU3R5bGUuU3Ryb2tlKHtcbiAgICAgICAgICBjb2xvcjogJ2JsdWUnLFxuICAgICAgICAgIHdpZHRoOiAzXG4gICAgICAgIH0pXG4gICAgICB9KSk7XG4gIH1cblxuICByZXR1cm4gb2xTdHlsZTtcblxufVxuIl19
|