@igo2/geo 1.14.2 → 1.14.3
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/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 +4 -4
- package/esm2020/lib/datasource/datasource.module.mjs +21 -21
- package/esm2020/lib/datasource/index.mjs +2 -2
- package/esm2020/lib/datasource/shared/capabilities.service.mjs +430 -430
- 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 +35 -35
- 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 +1 -1
- package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +289 -289
- package/esm2020/lib/directions/directions-inputs/index.mjs +1 -1
- package/esm2020/lib/directions/directions-results/directions-results.component.mjs +195 -195
- package/esm2020/lib/directions/directions-results/index.mjs +1 -1
- 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 +4 -4
- package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +98 -98
- package/esm2020/lib/directions/directions.component.mjs +310 -310
- package/esm2020/lib/directions/directions.module.mjs +101 -101
- package/esm2020/lib/directions/index.mjs +6 -6
- package/esm2020/lib/directions/shared/directions-source.service.mjs +16 -16
- package/esm2020/lib/directions/shared/directions.enum.mjs +27 -27
- 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 +5 -5
- 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 +1 -1
- package/esm2020/lib/download/download.module.mjs +41 -41
- package/esm2020/lib/download/index.mjs +2 -2
- package/esm2020/lib/download/shared/download.interface.mjs +1 -1
- package/esm2020/lib/download/shared/download.service.mjs +64 -64
- package/esm2020/lib/download/shared/index.mjs +2 -2
- 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 +2 -2
- 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 +8 -8
- 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 +3 -3
- 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 +4 -4
- package/esm2020/lib/import-export/export-button/export-button.component.mjs +63 -63
- package/esm2020/lib/import-export/export-button/index.mjs +1 -1
- package/esm2020/lib/import-export/import-export/import-export.component.mjs +1219 -1219
- package/esm2020/lib/import-export/import-export/index.mjs +1 -1
- 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 +14 -14
- 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 +10 -10
- 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 +12 -12
- package/esm2020/lib/layer/shared/layers/layer.interface.mjs +17 -17
- 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 +141 -142
- 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 +406 -406
- 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 +3 -3
- 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 +1 -1
- package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +133 -133
- package/esm2020/lib/metadata/metadata.module.mjs +54 -54
- package/esm2020/lib/metadata/shared/index.mjs +2 -2
- package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
- package/esm2020/lib/metadata/shared/metadata.service.mjs +18 -18
- 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 +4 -4
- 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 +1 -1
- package/esm2020/lib/overlay/index.mjs +1 -1
- 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 +3 -3
- package/esm2020/lib/print/print/print.component.mjs +125 -125
- package/esm2020/lib/print/print-form/index.mjs +1 -1
- 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 +4 -4
- 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 +1 -1
- package/esm2020/lib/query/query.module.mjs +28 -28
- package/esm2020/lib/query/shared/index.mjs +6 -6
- 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 +29 -29
- 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 +8 -8
- 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 +152 -152
- 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 +766 -766
- 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 +319 -319
- 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 +1 -1
- package/esm2020/lib/search/shared/sources/nominatim.mjs +251 -251
- 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 +424 -424
- package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +40 -40
- package/esm2020/lib/toast/index.mjs +1 -1
- 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 +1 -1
- package/esm2020/lib/wkt/shared/index.mjs +1 -1
- 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 +7 -7
- 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 +7 -7
- 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 +3 -3
- 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 +14 -14
- 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 +44986 -44986
- package/fesm2015/igo2-geo.mjs.map +1 -1
- package/fesm2020/igo2-geo.mjs +43029 -43030
- 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 -107
- 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,898 +1,898 @@
|
|
|
1
|
-
import { Component, Input, ViewChild, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { UntypedFormControl } from '@angular/forms';
|
|
3
|
-
import { OgcFilterOperator } from '../../filter/shared/ogc-filter.enum';
|
|
4
|
-
import { default as moment } from 'moment';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../shared/ogc-filter-time.service";
|
|
7
|
-
const _c0 = ["endDatepickerTime"];
|
|
8
|
-
const _c1 = ["beginDatepickerTime"];
|
|
9
|
-
const _c2 = ["beginTime"];
|
|
10
|
-
const _c3 = ["endTime"];
|
|
11
|
-
function OgcFilterTimeComponent_mat_slide_toggle_1_Template(rf, ctx) { if (rf & 1) {
|
|
12
|
-
const _r4 = i0.ɵɵgetCurrentView();
|
|
13
|
-
i0.ɵɵelementStart(0, "mat-slide-toggle", 4);
|
|
14
|
-
i0.ɵɵlistener("ngModelChange", function OgcFilterTimeComponent_mat_slide_toggle_1_Template_mat_slide_toggle_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.sliderMode = $event); })("change", function OgcFilterTimeComponent_mat_slide_toggle_1_Template_mat_slide_toggle_change_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.modeChange($event)); });
|
|
15
|
-
i0.ɵɵtext(1);
|
|
16
|
-
i0.ɵɵpipe(2, "translate");
|
|
17
|
-
i0.ɵɵelementEnd();
|
|
18
|
-
} if (rf & 2) {
|
|
19
|
-
const ctx_r0 = i0.ɵɵnextContext();
|
|
20
|
-
i0.ɵɵproperty("ngModel", ctx_r0.sliderMode);
|
|
21
|
-
i0.ɵɵadvance(1);
|
|
22
|
-
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.filter.sliderModeTitle"), " ");
|
|
23
|
-
} }
|
|
24
|
-
function OgcFilterTimeComponent_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
-
const _r7 = i0.ɵɵgetCurrentView();
|
|
26
|
-
i0.ɵɵelementStart(0, "div", 5)(1, "igo-ogc-filter-time-slider", 6);
|
|
27
|
-
i0.ɵɵlistener("changeProperty", function OgcFilterTimeComponent_div_2_Template_igo_ogc_filter_time_slider_changeProperty_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r6 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r6.changePropertyByPass($event)); });
|
|
28
|
-
i0.ɵɵelementEnd()();
|
|
29
|
-
} if (rf & 2) {
|
|
30
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
31
|
-
i0.ɵɵadvance(1);
|
|
32
|
-
i0.ɵɵproperty("begin", ctx_r1.beginValue)("max", ctx_r1.restrictedToStep() ? ctx_r1.maxDate : ctx_r1.endValue)("currentFilter", ctx_r1.currentFilter)("datasource", ctx_r1.datasource);
|
|
33
|
-
} }
|
|
34
|
-
function OgcFilterTimeComponent_div_3_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
-
const _r15 = i0.ɵɵgetCurrentView();
|
|
36
|
-
i0.ɵɵelementStart(0, "div", 9)(1, "mat-form-field", 10)(2, "mat-label");
|
|
37
|
-
i0.ɵɵtext(3);
|
|
38
|
-
i0.ɵɵpipe(4, "translate");
|
|
39
|
-
i0.ɵɵelementEnd();
|
|
40
|
-
i0.ɵɵelementStart(5, "input", 11);
|
|
41
|
-
i0.ɵɵlistener("change", function OgcFilterTimeComponent_div_3_div_1_Template_input_change_5_listener($event) { i0.ɵɵrestoreView(_r15); const _r10 = i0.ɵɵreference(8); const ctx_r14 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r14.yearOnlyInputChange($event, _r10, "begin")); });
|
|
42
|
-
i0.ɵɵelementEnd();
|
|
43
|
-
i0.ɵɵelement(6, "mat-datepicker-toggle", 12);
|
|
44
|
-
i0.ɵɵelementStart(7, "mat-datepicker", 13, 14);
|
|
45
|
-
i0.ɵɵlistener("yearSelected", function OgcFilterTimeComponent_div_3_div_1_Template_mat_datepicker_yearSelected_7_listener($event) { i0.ɵɵrestoreView(_r15); const _r10 = i0.ɵɵreference(8); const ctx_r16 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r16.yearSelected($event, _r10, "begin")); });
|
|
46
|
-
i0.ɵɵelementEnd();
|
|
47
|
-
i0.ɵɵelement(9, "input", 15, 16);
|
|
48
|
-
i0.ɵɵelementEnd();
|
|
49
|
-
i0.ɵɵelementStart(11, "mat-form-field", 10)(12, "mat-label");
|
|
50
|
-
i0.ɵɵtext(13);
|
|
51
|
-
i0.ɵɵpipe(14, "translate");
|
|
52
|
-
i0.ɵɵelementEnd();
|
|
53
|
-
i0.ɵɵelementStart(15, "input", 11);
|
|
54
|
-
i0.ɵɵlistener("change", function OgcFilterTimeComponent_div_3_div_1_Template_input_change_15_listener($event) { i0.ɵɵrestoreView(_r15); const _r12 = i0.ɵɵreference(18); const ctx_r17 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r17.yearOnlyInputChange($event, _r12, "end")); });
|
|
55
|
-
i0.ɵɵelementEnd();
|
|
56
|
-
i0.ɵɵelement(16, "mat-datepicker-toggle", 12);
|
|
57
|
-
i0.ɵɵelementStart(17, "mat-datepicker", 13, 17);
|
|
58
|
-
i0.ɵɵlistener("yearSelected", function OgcFilterTimeComponent_div_3_div_1_Template_mat_datepicker_yearSelected_17_listener($event) { i0.ɵɵrestoreView(_r15); const _r12 = i0.ɵɵreference(18); const ctx_r18 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r18.yearSelected($event, _r12, "end")); });
|
|
59
|
-
i0.ɵɵelementEnd();
|
|
60
|
-
i0.ɵɵelement(19, "input", 15, 18);
|
|
61
|
-
i0.ɵɵelementEnd();
|
|
62
|
-
i0.ɵɵelementStart(21, "button", 19);
|
|
63
|
-
i0.ɵɵlistener("click", function OgcFilterTimeComponent_div_3_div_1_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r15); const ctx_r19 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r19.resetFilter()); });
|
|
64
|
-
i0.ɵɵpipe(22, "translate");
|
|
65
|
-
i0.ɵɵelement(23, "mat-icon", 20);
|
|
66
|
-
i0.ɵɵelementEnd();
|
|
67
|
-
i0.ɵɵelementStart(24, "mat-slide-toggle", 21);
|
|
68
|
-
i0.ɵɵlistener("change", function OgcFilterTimeComponent_div_3_div_1_Template_mat_slide_toggle_change_24_listener() { i0.ɵɵrestoreView(_r15); const ctx_r20 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r20.toggleFilterState()); });
|
|
69
|
-
i0.ɵɵpipe(25, "translate");
|
|
70
|
-
i0.ɵɵelementEnd()();
|
|
71
|
-
} if (rf & 2) {
|
|
72
|
-
const _r10 = i0.ɵɵreference(8);
|
|
73
|
-
const _r12 = i0.ɵɵreference(18);
|
|
74
|
-
const ctx_r8 = i0.ɵɵnextContext(2);
|
|
75
|
-
i0.ɵɵadvance(3);
|
|
76
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 27, "igo.geo.timeFilter.startYear"));
|
|
77
|
-
i0.ɵɵadvance(2);
|
|
78
|
-
i0.ɵɵpropertyInterpolate("value", ctx_r8.onlyYearBegin);
|
|
79
|
-
i0.ɵɵproperty("disabled", ctx_r8.filterStateDisable);
|
|
80
|
-
i0.ɵɵadvance(1);
|
|
81
|
-
i0.ɵɵproperty("for", _r10)("disabled", ctx_r8.filterStateDisable);
|
|
82
|
-
i0.ɵɵadvance(1);
|
|
83
|
-
i0.ɵɵproperty("startView", ctx_r8.calendarView())("startAt", ctx_r8.beginValue);
|
|
84
|
-
i0.ɵɵadvance(2);
|
|
85
|
-
i0.ɵɵproperty("matDatepicker", _r10)("value", ctx_r8.beginValue ? ctx_r8.beginValue : ctx_r8.handleDate(ctx_r8.datasource.options.minDate))("min", ctx_r8.handleDate(ctx_r8.datasource.options.minDate))("max", ctx_r8.endValue && !ctx_r8.restrictedToStep() ? ctx_r8.endValue : ctx_r8.handleDate(ctx_r8.datasource.options.maxDate));
|
|
86
|
-
i0.ɵɵadvance(4);
|
|
87
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 29, "igo.geo.timeFilter.endYear"));
|
|
88
|
-
i0.ɵɵadvance(2);
|
|
89
|
-
i0.ɵɵpropertyInterpolate("value", ctx_r8.onlyYearEnd);
|
|
90
|
-
i0.ɵɵproperty("disabled", ctx_r8.filterStateDisable);
|
|
91
|
-
i0.ɵɵadvance(1);
|
|
92
|
-
i0.ɵɵproperty("for", _r12)("disabled", ctx_r8.filterStateDisable);
|
|
93
|
-
i0.ɵɵadvance(1);
|
|
94
|
-
i0.ɵɵproperty("startView", ctx_r8.calendarView())("startAt", ctx_r8.endValue);
|
|
95
|
-
i0.ɵɵadvance(2);
|
|
96
|
-
i0.ɵɵproperty("matDatepicker", _r12)("value", ctx_r8.endValue ? ctx_r8.endValue : ctx_r8.handleDate(ctx_r8.datasource.options.maxDate))("min", ctx_r8.beginValue ? ctx_r8.beginValue : ctx_r8.handleDate(ctx_r8.datasource.options.minDate))("max", ctx_r8.handleDate(ctx_r8.datasource.options.maxDate));
|
|
97
|
-
i0.ɵɵadvance(2);
|
|
98
|
-
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(22, 31, "igo.geo.filter.resetFilters"))("disabled", ctx_r8.filterStateDisable);
|
|
99
|
-
i0.ɵɵadvance(2);
|
|
100
|
-
i0.ɵɵpropertyInterpolate("svgIcon", ctx_r8.resetIcon);
|
|
101
|
-
i0.ɵɵadvance(1);
|
|
102
|
-
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(25, 33, "igo.geo.filter.toggleFilterState"))("checked", !ctx_r8.filterStateDisable);
|
|
103
|
-
} }
|
|
104
|
-
function OgcFilterTimeComponent_div_3_div_2_mat_form_field_11_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
105
|
-
i0.ɵɵelementStart(0, "mat-option", 36);
|
|
106
|
-
i0.ɵɵtext(1);
|
|
107
|
-
i0.ɵɵelementEnd();
|
|
108
|
-
} if (rf & 2) {
|
|
109
|
-
const hour_r27 = ctx.$implicit;
|
|
110
|
-
i0.ɵɵproperty("value", hour_r27);
|
|
111
|
-
i0.ɵɵadvance(1);
|
|
112
|
-
i0.ɵɵtextInterpolate(hour_r27);
|
|
113
|
-
} }
|
|
114
|
-
function OgcFilterTimeComponent_div_3_div_2_mat_form_field_11_Template(rf, ctx) { if (rf & 1) {
|
|
115
|
-
const _r29 = i0.ɵɵgetCurrentView();
|
|
116
|
-
i0.ɵɵelementStart(0, "mat-form-field", 33)(1, "mat-label");
|
|
117
|
-
i0.ɵɵtext(2);
|
|
118
|
-
i0.ɵɵpipe(3, "translate");
|
|
119
|
-
i0.ɵɵelementEnd();
|
|
120
|
-
i0.ɵɵelementStart(4, "mat-select", 34);
|
|
121
|
-
i0.ɵɵlistener("selectionChange", function OgcFilterTimeComponent_div_3_div_2_mat_form_field_11_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r29); i0.ɵɵnextContext(); const _r21 = i0.ɵɵreference(5); const ctx_r28 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r28.changeTemporalProperty(_r21.value, 1)); });
|
|
122
|
-
i0.ɵɵtemplate(5, OgcFilterTimeComponent_div_3_div_2_mat_form_field_11_mat_option_5_Template, 2, 2, "mat-option", 35);
|
|
123
|
-
i0.ɵɵelementEnd()();
|
|
124
|
-
} if (rf & 2) {
|
|
125
|
-
const ctx_r23 = i0.ɵɵnextContext(3);
|
|
126
|
-
i0.ɵɵadvance(2);
|
|
127
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.timeFilter.hour"));
|
|
128
|
-
i0.ɵɵadvance(2);
|
|
129
|
-
i0.ɵɵproperty("formControl", ctx_r23.beginHourFormControl);
|
|
130
|
-
i0.ɵɵattribute("disabled", !ctx_r23.currentFilter.active);
|
|
131
|
-
i0.ɵɵadvance(1);
|
|
132
|
-
i0.ɵɵproperty("ngForOf", ctx_r23.beginHours);
|
|
133
|
-
} }
|
|
134
|
-
function OgcFilterTimeComponent_div_3_div_2_mat_form_field_12_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
135
|
-
i0.ɵɵelementStart(0, "mat-option", 36);
|
|
136
|
-
i0.ɵɵtext(1);
|
|
137
|
-
i0.ɵɵelementEnd();
|
|
138
|
-
} if (rf & 2) {
|
|
139
|
-
const minute_r31 = ctx.$implicit;
|
|
140
|
-
i0.ɵɵproperty("value", minute_r31);
|
|
141
|
-
i0.ɵɵadvance(1);
|
|
142
|
-
i0.ɵɵtextInterpolate(minute_r31);
|
|
143
|
-
} }
|
|
144
|
-
function OgcFilterTimeComponent_div_3_div_2_mat_form_field_12_Template(rf, ctx) { if (rf & 1) {
|
|
145
|
-
const _r33 = i0.ɵɵgetCurrentView();
|
|
146
|
-
i0.ɵɵelementStart(0, "mat-form-field", 37)(1, "mat-label");
|
|
147
|
-
i0.ɵɵtext(2);
|
|
148
|
-
i0.ɵɵpipe(3, "translate");
|
|
149
|
-
i0.ɵɵelementEnd();
|
|
150
|
-
i0.ɵɵelementStart(4, "mat-select", 34);
|
|
151
|
-
i0.ɵɵlistener("selectionChange", function OgcFilterTimeComponent_div_3_div_2_mat_form_field_12_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r33); i0.ɵɵnextContext(); const _r21 = i0.ɵɵreference(5); const ctx_r32 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r32.changeTemporalProperty(_r21.value, 1)); });
|
|
152
|
-
i0.ɵɵtemplate(5, OgcFilterTimeComponent_div_3_div_2_mat_form_field_12_mat_option_5_Template, 2, 2, "mat-option", 35);
|
|
153
|
-
i0.ɵɵelementEnd()();
|
|
154
|
-
} if (rf & 2) {
|
|
155
|
-
const ctx_r24 = i0.ɵɵnextContext(3);
|
|
156
|
-
i0.ɵɵadvance(2);
|
|
157
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.timeFilter.minute"));
|
|
158
|
-
i0.ɵɵadvance(2);
|
|
159
|
-
i0.ɵɵproperty("formControl", ctx_r24.beginMinuteFormControl);
|
|
160
|
-
i0.ɵɵattribute("disabled", !ctx_r24.currentFilter.active);
|
|
161
|
-
i0.ɵɵadvance(1);
|
|
162
|
-
i0.ɵɵproperty("ngForOf", ctx_r24.beginMinutes);
|
|
163
|
-
} }
|
|
164
|
-
function OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_10_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
165
|
-
i0.ɵɵelementStart(0, "mat-option", 36);
|
|
166
|
-
i0.ɵɵtext(1);
|
|
167
|
-
i0.ɵɵelementEnd();
|
|
168
|
-
} if (rf & 2) {
|
|
169
|
-
const hour_r39 = ctx.$implicit;
|
|
170
|
-
i0.ɵɵproperty("value", hour_r39);
|
|
171
|
-
i0.ɵɵadvance(1);
|
|
172
|
-
i0.ɵɵtextInterpolate(hour_r39);
|
|
173
|
-
} }
|
|
174
|
-
function OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_10_Template(rf, ctx) { if (rf & 1) {
|
|
175
|
-
const _r41 = i0.ɵɵgetCurrentView();
|
|
176
|
-
i0.ɵɵelementStart(0, "mat-form-field", 33)(1, "mat-label");
|
|
177
|
-
i0.ɵɵtext(2);
|
|
178
|
-
i0.ɵɵpipe(3, "translate");
|
|
179
|
-
i0.ɵɵelementEnd();
|
|
180
|
-
i0.ɵɵelementStart(4, "mat-select", 34);
|
|
181
|
-
i0.ɵɵlistener("selectionChange", function OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_10_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r41); i0.ɵɵnextContext(); const _r34 = i0.ɵɵreference(4); const ctx_r40 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r40.changeTemporalProperty(_r34.value, 2)); });
|
|
182
|
-
i0.ɵɵtemplate(5, OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_10_mat_option_5_Template, 2, 2, "mat-option", 35);
|
|
183
|
-
i0.ɵɵelementEnd()();
|
|
184
|
-
} if (rf & 2) {
|
|
185
|
-
const ctx_r36 = i0.ɵɵnextContext(4);
|
|
186
|
-
i0.ɵɵadvance(2);
|
|
187
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.timeFilter.hour"));
|
|
188
|
-
i0.ɵɵadvance(2);
|
|
189
|
-
i0.ɵɵproperty("formControl", ctx_r36.endHourFormControl);
|
|
190
|
-
i0.ɵɵattribute("disabled", !ctx_r36.currentFilter.active);
|
|
191
|
-
i0.ɵɵadvance(1);
|
|
192
|
-
i0.ɵɵproperty("ngForOf", ctx_r36.endHours);
|
|
193
|
-
} }
|
|
194
|
-
function OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_11_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
195
|
-
i0.ɵɵelementStart(0, "mat-option", 36);
|
|
196
|
-
i0.ɵɵtext(1);
|
|
197
|
-
i0.ɵɵelementEnd();
|
|
198
|
-
} if (rf & 2) {
|
|
199
|
-
const minute_r43 = ctx.$implicit;
|
|
200
|
-
i0.ɵɵproperty("value", minute_r43);
|
|
201
|
-
i0.ɵɵadvance(1);
|
|
202
|
-
i0.ɵɵtextInterpolate(minute_r43);
|
|
203
|
-
} }
|
|
204
|
-
function OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_11_Template(rf, ctx) { if (rf & 1) {
|
|
205
|
-
const _r45 = i0.ɵɵgetCurrentView();
|
|
206
|
-
i0.ɵɵelementStart(0, "mat-form-field", 37)(1, "mat-label");
|
|
207
|
-
i0.ɵɵtext(2);
|
|
208
|
-
i0.ɵɵpipe(3, "translate");
|
|
209
|
-
i0.ɵɵelementEnd();
|
|
210
|
-
i0.ɵɵelementStart(4, "mat-select", 34);
|
|
211
|
-
i0.ɵɵlistener("selectionChange", function OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_11_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r45); i0.ɵɵnextContext(); const _r34 = i0.ɵɵreference(4); const ctx_r44 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r44.changeTemporalProperty(_r34.value, 2)); });
|
|
212
|
-
i0.ɵɵtemplate(5, OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_11_mat_option_5_Template, 2, 2, "mat-option", 35);
|
|
213
|
-
i0.ɵɵelementEnd()();
|
|
214
|
-
} if (rf & 2) {
|
|
215
|
-
const ctx_r37 = i0.ɵɵnextContext(4);
|
|
216
|
-
i0.ɵɵadvance(2);
|
|
217
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.timeFilter.minute"));
|
|
218
|
-
i0.ɵɵadvance(2);
|
|
219
|
-
i0.ɵɵproperty("formControl", ctx_r37.endMinuteFormControl);
|
|
220
|
-
i0.ɵɵattribute("disabled", !ctx_r37.currentFilter.active);
|
|
221
|
-
i0.ɵɵadvance(1);
|
|
222
|
-
i0.ɵɵproperty("ngForOf", ctx_r37.endMinutes);
|
|
223
|
-
} }
|
|
224
|
-
function OgcFilterTimeComponent_div_3_div_2_div_13_Template(rf, ctx) { if (rf & 1) {
|
|
225
|
-
const _r47 = i0.ɵɵgetCurrentView();
|
|
226
|
-
i0.ɵɵelementStart(0, "div", 23)(1, "mat-form-field", 24);
|
|
227
|
-
i0.ɵɵelement(2, "mat-datepicker-toggle", 12);
|
|
228
|
-
i0.ɵɵelementStart(3, "input", 25, 38);
|
|
229
|
-
i0.ɵɵlistener("dateChange", function OgcFilterTimeComponent_div_3_div_2_div_13_Template_input_dateChange_3_listener() { i0.ɵɵrestoreView(_r47); const _r34 = i0.ɵɵreference(4); const ctx_r46 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r46.changeTemporalProperty(_r34.value, 2)); });
|
|
230
|
-
i0.ɵɵpipe(5, "translate");
|
|
231
|
-
i0.ɵɵelementEnd();
|
|
232
|
-
i0.ɵɵelement(6, "span", 27);
|
|
233
|
-
i0.ɵɵelementStart(7, "mat-datepicker", 28, 17);
|
|
234
|
-
i0.ɵɵlistener("yearSelected", function OgcFilterTimeComponent_div_3_div_2_div_13_Template_mat_datepicker_yearSelected_7_listener($event) { i0.ɵɵrestoreView(_r47); const _r35 = i0.ɵɵreference(8); const ctx_r48 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r48.yearSelected($event, _r35, "end")); })("monthSelected", function OgcFilterTimeComponent_div_3_div_2_div_13_Template_mat_datepicker_monthSelected_7_listener($event) { i0.ɵɵrestoreView(_r47); const _r35 = i0.ɵɵreference(8); const ctx_r49 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r49.monthSelected($event, _r35, "end")); });
|
|
235
|
-
i0.ɵɵelementEnd()();
|
|
236
|
-
i0.ɵɵelementStart(9, "div", 29);
|
|
237
|
-
i0.ɵɵtemplate(10, OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_10_Template, 6, 6, "mat-form-field", 30);
|
|
238
|
-
i0.ɵɵtemplate(11, OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_11_Template, 6, 6, "mat-form-field", 31);
|
|
239
|
-
i0.ɵɵelementEnd()();
|
|
240
|
-
} if (rf & 2) {
|
|
241
|
-
const _r35 = i0.ɵɵreference(8);
|
|
242
|
-
const ctx_r25 = i0.ɵɵnextContext(3);
|
|
243
|
-
i0.ɵɵadvance(2);
|
|
244
|
-
i0.ɵɵproperty("for", _r35)("disabled", ctx_r25.filterStateDisable);
|
|
245
|
-
i0.ɵɵadvance(1);
|
|
246
|
-
i0.ɵɵproperty("matDatepicker", _r35)("placeholder", i0.ɵɵpipeBind1(5, 14, "igo.geo.timeFilter.endDate"))("matDatepickerFilter", ctx_r25.filterEndFunction)("value", ctx_r25.endValue ? ctx_r25.endValue : ctx_r25.handleDate(ctx_r25.datasource.options.maxDate))("min", ctx_r25.beginValue ? ctx_r25.beginValue : ctx_r25.handleDate(ctx_r25.datasource.options.minDate))("max", ctx_r25.handleDate(ctx_r25.datasource.options.maxDate))("disabled", ctx_r25.filterStateDisable);
|
|
247
|
-
i0.ɵɵattribute("disabled", !ctx_r25.currentFilter.active);
|
|
248
|
-
i0.ɵɵadvance(4);
|
|
249
|
-
i0.ɵɵproperty("startView", ctx_r25.calendarView())("startAt", ctx_r25.endValue);
|
|
250
|
-
i0.ɵɵadvance(3);
|
|
251
|
-
i0.ɵɵproperty("ngIf", ctx_r25.calendarType() === "datetime");
|
|
252
|
-
i0.ɵɵadvance(1);
|
|
253
|
-
i0.ɵɵproperty("ngIf", ctx_r25.calendarType() === "datetime");
|
|
254
|
-
} }
|
|
255
|
-
function OgcFilterTimeComponent_div_3_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
256
|
-
const _r51 = i0.ɵɵgetCurrentView();
|
|
257
|
-
i0.ɵɵelementStart(0, "div", 22)(1, "div", 23)(2, "mat-form-field", 24);
|
|
258
|
-
i0.ɵɵelement(3, "mat-datepicker-toggle", 12);
|
|
259
|
-
i0.ɵɵelementStart(4, "input", 25, 26);
|
|
260
|
-
i0.ɵɵlistener("dateChange", function OgcFilterTimeComponent_div_3_div_2_Template_input_dateChange_4_listener() { i0.ɵɵrestoreView(_r51); const _r21 = i0.ɵɵreference(5); const ctx_r50 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r50.changeTemporalProperty(_r21.value, 1)); });
|
|
261
|
-
i0.ɵɵpipe(6, "translate");
|
|
262
|
-
i0.ɵɵelementEnd();
|
|
263
|
-
i0.ɵɵelement(7, "span", 27);
|
|
264
|
-
i0.ɵɵelementStart(8, "mat-datepicker", 28, 14);
|
|
265
|
-
i0.ɵɵlistener("yearSelected", function OgcFilterTimeComponent_div_3_div_2_Template_mat_datepicker_yearSelected_8_listener($event) { i0.ɵɵrestoreView(_r51); const _r22 = i0.ɵɵreference(9); const ctx_r52 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r52.yearSelected($event, _r22, "begin")); })("monthSelected", function OgcFilterTimeComponent_div_3_div_2_Template_mat_datepicker_monthSelected_8_listener($event) { i0.ɵɵrestoreView(_r51); const _r22 = i0.ɵɵreference(9); const ctx_r53 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r53.monthSelected($event, _r22, "begin")); });
|
|
266
|
-
i0.ɵɵelementEnd()();
|
|
267
|
-
i0.ɵɵelementStart(10, "div", 29);
|
|
268
|
-
i0.ɵɵtemplate(11, OgcFilterTimeComponent_div_3_div_2_mat_form_field_11_Template, 6, 6, "mat-form-field", 30);
|
|
269
|
-
i0.ɵɵtemplate(12, OgcFilterTimeComponent_div_3_div_2_mat_form_field_12_Template, 6, 6, "mat-form-field", 31);
|
|
270
|
-
i0.ɵɵelementEnd()();
|
|
271
|
-
i0.ɵɵtemplate(13, OgcFilterTimeComponent_div_3_div_2_div_13_Template, 12, 16, "div", 32);
|
|
272
|
-
i0.ɵɵelementStart(14, "button", 19);
|
|
273
|
-
i0.ɵɵlistener("click", function OgcFilterTimeComponent_div_3_div_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r51); const ctx_r54 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r54.resetFilter()); });
|
|
274
|
-
i0.ɵɵpipe(15, "translate");
|
|
275
|
-
i0.ɵɵelement(16, "mat-icon", 20);
|
|
276
|
-
i0.ɵɵelementEnd();
|
|
277
|
-
i0.ɵɵelementStart(17, "mat-slide-toggle", 21);
|
|
278
|
-
i0.ɵɵlistener("change", function OgcFilterTimeComponent_div_3_div_2_Template_mat_slide_toggle_change_17_listener() { i0.ɵɵrestoreView(_r51); const ctx_r55 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r55.toggleFilterState()); });
|
|
279
|
-
i0.ɵɵpipe(18, "translate");
|
|
280
|
-
i0.ɵɵelementEnd()();
|
|
281
|
-
} if (rf & 2) {
|
|
282
|
-
const _r22 = i0.ɵɵreference(9);
|
|
283
|
-
const ctx_r9 = i0.ɵɵnextContext(2);
|
|
284
|
-
i0.ɵɵadvance(3);
|
|
285
|
-
i0.ɵɵproperty("for", _r22)("disabled", ctx_r9.filterStateDisable);
|
|
286
|
-
i0.ɵɵadvance(1);
|
|
287
|
-
i0.ɵɵproperty("matDatepicker", _r22)("placeholder", i0.ɵɵpipeBind1(6, 20, "igo.geo.timeFilter.startDate"))("matDatepickerFilter", ctx_r9.filterBeginFunction)("value", ctx_r9.beginValue ? ctx_r9.beginValue : ctx_r9.handleDate(ctx_r9.datasource.options.minDate))("min", ctx_r9.handleDate(ctx_r9.datasource.options.minDate))("max", ctx_r9.endValue && !ctx_r9.restrictedToStep() ? ctx_r9.endValue : ctx_r9.handleDate(ctx_r9.datasource.options.maxDate))("disabled", ctx_r9.filterStateDisable);
|
|
288
|
-
i0.ɵɵattribute("disabled", !ctx_r9.currentFilter.active);
|
|
289
|
-
i0.ɵɵadvance(4);
|
|
290
|
-
i0.ɵɵproperty("startView", ctx_r9.calendarView())("startAt", ctx_r9.beginValue);
|
|
291
|
-
i0.ɵɵadvance(3);
|
|
292
|
-
i0.ɵɵproperty("ngIf", ctx_r9.calendarType() === "datetime");
|
|
293
|
-
i0.ɵɵadvance(1);
|
|
294
|
-
i0.ɵɵproperty("ngIf", ctx_r9.calendarType() === "datetime");
|
|
295
|
-
i0.ɵɵadvance(1);
|
|
296
|
-
i0.ɵɵproperty("ngIf", !ctx_r9.restrictedToStep());
|
|
297
|
-
i0.ɵɵadvance(1);
|
|
298
|
-
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(15, 22, "igo.geo.filter.resetFilters"))("disabled", ctx_r9.filterStateDisable);
|
|
299
|
-
i0.ɵɵadvance(2);
|
|
300
|
-
i0.ɵɵpropertyInterpolate("svgIcon", ctx_r9.resetIcon);
|
|
301
|
-
i0.ɵɵadvance(1);
|
|
302
|
-
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(18, 24, "igo.geo.filter.toggleFilterState"))("checked", !ctx_r9.filterStateDisable);
|
|
303
|
-
} }
|
|
304
|
-
function OgcFilterTimeComponent_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
305
|
-
i0.ɵɵelementStart(0, "div");
|
|
306
|
-
i0.ɵɵtemplate(1, OgcFilterTimeComponent_div_3_div_1_Template, 26, 35, "div", 7);
|
|
307
|
-
i0.ɵɵtemplate(2, OgcFilterTimeComponent_div_3_div_2_Template, 19, 26, "div", 8);
|
|
308
|
-
i0.ɵɵelementEnd();
|
|
309
|
-
} if (rf & 2) {
|
|
310
|
-
const ctx_r2 = i0.ɵɵnextContext();
|
|
311
|
-
i0.ɵɵadvance(1);
|
|
312
|
-
i0.ɵɵproperty("ngIf", ctx_r2.calendarTypeYear);
|
|
313
|
-
i0.ɵɵadvance(1);
|
|
314
|
-
i0.ɵɵproperty("ngIf", ctx_r2.calendarType() !== "year");
|
|
315
|
-
} }
|
|
316
|
-
export class OgcFilterTimeComponent {
|
|
317
|
-
constructor(ogcFilterTimeService) {
|
|
318
|
-
this.ogcFilterTimeService = ogcFilterTimeService;
|
|
319
|
-
this.changeProperty = new EventEmitter();
|
|
320
|
-
this.beginHourFormControl = new UntypedFormControl();
|
|
321
|
-
this.beginMinuteFormControl = new UntypedFormControl();
|
|
322
|
-
this.endHourFormControl = new UntypedFormControl();
|
|
323
|
-
this.endMinuteFormControl = new UntypedFormControl();
|
|
324
|
-
this._defaultMin = '1900-01-01';
|
|
325
|
-
this._defaultMax = '2052-01-06';
|
|
326
|
-
this._defaultDisplayFormat = 'DD/MM/YYYY HH:mm A';
|
|
327
|
-
this._defaultSliderModeEnabled = true;
|
|
328
|
-
this.ogcFilterOperator = OgcFilterOperator;
|
|
329
|
-
this.sliderMode = false;
|
|
330
|
-
this.defaultStepMillisecond = 60000;
|
|
331
|
-
this.calendarTypeYear = false;
|
|
332
|
-
this.resetIcon = 'replay';
|
|
333
|
-
}
|
|
334
|
-
get step() {
|
|
335
|
-
return this.datasource.options.stepDate
|
|
336
|
-
? this.datasource.options.stepDate
|
|
337
|
-
: this.currentFilter.step;
|
|
338
|
-
}
|
|
339
|
-
get stepMilliseconds() {
|
|
340
|
-
const step = moment.duration(this.step).asMilliseconds();
|
|
341
|
-
return step === 0 ? this.defaultStepMillisecond : step;
|
|
342
|
-
}
|
|
343
|
-
set beginValue(begin) {
|
|
344
|
-
this._beginValue = begin;
|
|
345
|
-
}
|
|
346
|
-
get beginValue() {
|
|
347
|
-
return this._beginValue;
|
|
348
|
-
}
|
|
349
|
-
set endValue(end) {
|
|
350
|
-
this._endValue = end;
|
|
351
|
-
}
|
|
352
|
-
get endValue() {
|
|
353
|
-
return this._endValue;
|
|
354
|
-
}
|
|
355
|
-
get sliderInterval() {
|
|
356
|
-
return this.currentFilter.sliderInterval === undefined
|
|
357
|
-
? 2000
|
|
358
|
-
: this.currentFilter.sliderInterval;
|
|
359
|
-
}
|
|
360
|
-
get maxDate() {
|
|
361
|
-
return this.datasource.options.maxDate ? this.datasource.options.maxDate : this._defaultMax;
|
|
362
|
-
}
|
|
363
|
-
get displayFormat() {
|
|
364
|
-
return this.currentFilter.displayFormat ? this.currentFilter.displayFormat : this._defaultDisplayFormat;
|
|
365
|
-
}
|
|
366
|
-
ngOnInit() {
|
|
367
|
-
if (this.currentFilter.sliderOptions) {
|
|
368
|
-
this.currentFilter.sliderOptions.enabled = this.currentFilter.sliderOptions.enabled !== undefined ?
|
|
369
|
-
this.currentFilter.sliderOptions.enabled : this._defaultSliderModeEnabled;
|
|
370
|
-
}
|
|
371
|
-
this.beginValue = this.parseFilter(this.handleMin());
|
|
372
|
-
this.endValue = this.parseFilter(this.handleMax());
|
|
373
|
-
this.onlyYearBegin = this.beginValue.getUTCFullYear();
|
|
374
|
-
this.onlyYearEnd = this.endValue.getUTCFullYear();
|
|
375
|
-
this.calendarTypeYear = this.isCalendarYearMode();
|
|
376
|
-
this.setFilterStateDisable();
|
|
377
|
-
this.updateHoursMinutesArray();
|
|
378
|
-
// update value for now value
|
|
379
|
-
this.updateValues();
|
|
380
|
-
this.dateFilter(this.filterBeginFunction, 'begin');
|
|
381
|
-
this.dateFilter(this.filterEndFunction, 'end');
|
|
382
|
-
}
|
|
383
|
-
parseFilter(filter) {
|
|
384
|
-
if (!filter) {
|
|
385
|
-
return new Date();
|
|
386
|
-
}
|
|
387
|
-
else if (isNaN(new Date(filter).getTime())) {
|
|
388
|
-
if (filter.search('now') >= 0) {
|
|
389
|
-
const interval = filter.match(/years|months|weeks|days|hours|seconds/);
|
|
390
|
-
if (filter.match(/\+/)) {
|
|
391
|
-
const intervalInt = parseInt(filter.substring(filter.search('+') + 1, interval.index), 10);
|
|
392
|
-
return moment().add(intervalInt, interval[0]).toDate();
|
|
393
|
-
}
|
|
394
|
-
if (filter.match(/\-/)) {
|
|
395
|
-
const intervalInt = parseInt(filter.substring(filter.search('-') + 1, interval.index), 10);
|
|
396
|
-
return moment().subtract(intervalInt, interval[0]).toDate();
|
|
397
|
-
}
|
|
398
|
-
return new Date();
|
|
399
|
-
}
|
|
400
|
-
if (filter.search('today') >= 0) {
|
|
401
|
-
const _now = moment().endOf('day').toDate();
|
|
402
|
-
const interval = filter.match(/years|months|weeks|days|hours|seconds/);
|
|
403
|
-
if (filter.match(/\+/)) {
|
|
404
|
-
const intervalInt = parseInt(filter.substring(filter.search('+') + 1, interval.index), 10);
|
|
405
|
-
return moment(_now).add(intervalInt, interval[0]).toDate();
|
|
406
|
-
}
|
|
407
|
-
if (filter.match(/\-/)) {
|
|
408
|
-
const intervalInt = parseInt(filter.substring(filter.search('-') + 1, interval.index), 10);
|
|
409
|
-
return moment(_now).subtract(intervalInt, interval[0]).toDate();
|
|
410
|
-
}
|
|
411
|
-
return _now;
|
|
412
|
-
}
|
|
413
|
-
return new Date();
|
|
414
|
-
}
|
|
415
|
-
if (this.currentFilter.calendarModeYear) {
|
|
416
|
-
const date = this.getDateFromStringWithoutTime(filter);
|
|
417
|
-
return date;
|
|
418
|
-
}
|
|
419
|
-
else {
|
|
420
|
-
return filter ? new Date(filter) : new Date();
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
changeTemporalProperty(value, position, refreshFilter = true) {
|
|
424
|
-
let valueTmp = this.getDateTime(value, position);
|
|
425
|
-
if (this.isCalendarYearMode()) {
|
|
426
|
-
let dateStringFromYearNotime;
|
|
427
|
-
if (position === 1) {
|
|
428
|
-
this.beginValue = value;
|
|
429
|
-
this.onlyYearBegin = this.beginValue.getFullYear();
|
|
430
|
-
dateStringFromYearNotime = `${this.onlyYearBegin}-01-01`;
|
|
431
|
-
}
|
|
432
|
-
else {
|
|
433
|
-
this.endValue = value;
|
|
434
|
-
this.onlyYearEnd = this.endValue.getFullYear();
|
|
435
|
-
dateStringFromYearNotime = `${this.onlyYearEnd}-01-01`;
|
|
436
|
-
}
|
|
437
|
-
// call service with string date without time
|
|
438
|
-
this.changeProperty.next({ value: dateStringFromYearNotime, pos: position, refreshFilter });
|
|
439
|
-
return;
|
|
440
|
-
}
|
|
441
|
-
if (position === 2 && this.calendarType() === 'date' && !this.sliderMode) {
|
|
442
|
-
/* Above month: see yearSelected or monthSelected */
|
|
443
|
-
valueTmp = moment(valueTmp).endOf('day').toDate();
|
|
444
|
-
}
|
|
445
|
-
if (position === 1) {
|
|
446
|
-
this.beginValue = valueTmp;
|
|
447
|
-
if (this.restrictedToStep()) {
|
|
448
|
-
this.changeTemporalProperty(this.ogcFilterTimeService.addStep(valueTmp, this.stepMilliseconds), 2, refreshFilter);
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
else {
|
|
452
|
-
this.endValue = valueTmp;
|
|
453
|
-
}
|
|
454
|
-
this.updateHoursMinutesArray();
|
|
455
|
-
this.changeProperty.next({ value: valueTmp.toISOString(), pos: position, refreshFilter });
|
|
456
|
-
}
|
|
457
|
-
handleDate(value) {
|
|
458
|
-
if (!value || value === '') {
|
|
459
|
-
return undefined;
|
|
460
|
-
}
|
|
461
|
-
if (typeof (value) === 'string' && this.currentFilter.calendarModeYear) {
|
|
462
|
-
return this.getDateFromStringWithoutTime(value);
|
|
463
|
-
}
|
|
464
|
-
return new Date(value);
|
|
465
|
-
}
|
|
466
|
-
calendarType() {
|
|
467
|
-
if (this.currentFilter.calendarModeYear) {
|
|
468
|
-
return 'year';
|
|
469
|
-
}
|
|
470
|
-
if (this.stepMilliseconds < 86400000) {
|
|
471
|
-
return 'datetime';
|
|
472
|
-
}
|
|
473
|
-
return 'date';
|
|
474
|
-
}
|
|
475
|
-
isCalendarYearMode() {
|
|
476
|
-
if (this.calendarType() === 'year') {
|
|
477
|
-
return true;
|
|
478
|
-
}
|
|
479
|
-
else {
|
|
480
|
-
return false;
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
yearOnlyInputChange(changeEvent, datePicker, property) {
|
|
484
|
-
const year = changeEvent.target.value;
|
|
485
|
-
const date = this.getDateFromStringWithoutTime(year);
|
|
486
|
-
this.yearSelected(date, datePicker, property);
|
|
487
|
-
}
|
|
488
|
-
yearSelected(year, datePicker, property, refreshFilter = true) {
|
|
489
|
-
if (this.ogcFilterTimeService.stepIsYearDuration(this.step)) {
|
|
490
|
-
if (datePicker) {
|
|
491
|
-
datePicker.close();
|
|
492
|
-
}
|
|
493
|
-
if (property === 'end') {
|
|
494
|
-
// change value 01 jan to 31 dec same year
|
|
495
|
-
year = moment(year).endOf('year').toDate();
|
|
496
|
-
}
|
|
497
|
-
else if (property === 'begin' && this.restrictedToStep() && !this.calendarTypeYear) {
|
|
498
|
-
this.yearSelected(year, undefined, 'end');
|
|
499
|
-
}
|
|
500
|
-
this.changeTemporalProperty(year, property === 'begin' ? 1 : 2, refreshFilter);
|
|
501
|
-
}
|
|
502
|
-
}
|
|
503
|
-
monthSelected(month, datePicker, property, refreshFilter = true) {
|
|
504
|
-
if (this.ogcFilterTimeService.stepIsMonthDuration(this.step)) {
|
|
505
|
-
if (datePicker) {
|
|
506
|
-
datePicker.close();
|
|
507
|
-
}
|
|
508
|
-
if (property === 'end') {
|
|
509
|
-
month = moment(month).endOf('month').toDate();
|
|
510
|
-
}
|
|
511
|
-
else if (property === 'begin' && this.restrictedToStep()) {
|
|
512
|
-
this.monthSelected(month, undefined, 'end');
|
|
513
|
-
}
|
|
514
|
-
this.changeTemporalProperty(month, property === 'begin' ? 1 : 2, refreshFilter);
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
calendarView() {
|
|
518
|
-
const test = this.stepMilliseconds;
|
|
519
|
-
const diff = Math.abs(this.parseFilter(this.currentFilter.end).getTime() -
|
|
520
|
-
this.parseFilter(this.currentFilter.begin).getTime());
|
|
521
|
-
if (this.ogcFilterTimeService.stepIsYearDuration(this.step)) {
|
|
522
|
-
return 'multi-year';
|
|
523
|
-
}
|
|
524
|
-
else if (this.ogcFilterTimeService.stepIsMonthDuration(this.step)) {
|
|
525
|
-
return 'year';
|
|
526
|
-
}
|
|
527
|
-
else if (test < 86400000 && diff < 86400000) {
|
|
528
|
-
return 'clock';
|
|
529
|
-
}
|
|
530
|
-
else {
|
|
531
|
-
return 'month';
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
dateFilter(type, date) {
|
|
535
|
-
const dateValue = new Date(date);
|
|
536
|
-
const diff = dateValue.getTime() - new Date(this.handleMin()).getTime();
|
|
537
|
-
if (this.ogcFilterTimeService.stepIsYearDuration(this.step)) {
|
|
538
|
-
const monthDiff = moment(dateValue).diff(moment(this.handleMin()), 'years', true);
|
|
539
|
-
if (type === 'end') {
|
|
540
|
-
const dateValuePlus1 = moment(dateValue).add(1, 'd');
|
|
541
|
-
const monthDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'years', true);
|
|
542
|
-
this.filterEndFunction = (monthDiffPlus1 % moment.duration(this.step).asYears()) === 0;
|
|
543
|
-
return;
|
|
544
|
-
}
|
|
545
|
-
else if (type === 'begin') {
|
|
546
|
-
this.filterBeginFunction = (monthDiff % moment.duration(this.step).asYears()) === 0;
|
|
547
|
-
return;
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
else if (this.ogcFilterTimeService.stepIsMonthDuration(this.step)) {
|
|
551
|
-
const monthDiff = moment(dateValue).diff(moment(this.handleMin()), 'months', true);
|
|
552
|
-
if (type === 'end') {
|
|
553
|
-
const dateValuePlus1 = moment(dateValue).add(1, 'd');
|
|
554
|
-
const monthDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'months', true);
|
|
555
|
-
this.filterEndFunction = (monthDiffPlus1 % moment.duration(this.step).asMonths()) === 0;
|
|
556
|
-
return;
|
|
557
|
-
}
|
|
558
|
-
else if (type === 'begin') {
|
|
559
|
-
this.filterBeginFunction = (monthDiff % moment.duration(this.step).asMonths()) === 0;
|
|
560
|
-
return;
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
else if (this.ogcFilterTimeService.stepIsWeekDuration(this.step)) {
|
|
564
|
-
const weekDiff = moment(dateValue).diff(moment(this.handleMin()), 'weeks', true);
|
|
565
|
-
if (type === 'end') {
|
|
566
|
-
const dateValuePlus1 = moment(dateValue).add(1, 'd');
|
|
567
|
-
const weekDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'weeks', true);
|
|
568
|
-
this.filterEndFunction = (weekDiffPlus1 % moment.duration(this.step).asWeeks()) === 0;
|
|
569
|
-
return;
|
|
570
|
-
}
|
|
571
|
-
else if (type === 'begin') {
|
|
572
|
-
this.filterBeginFunction = (weekDiff % moment.duration(this.step).asWeeks()) === 0;
|
|
573
|
-
return;
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
else if (this.ogcFilterTimeService.stepIsDayDuration(this.step)) {
|
|
577
|
-
const dayDiff = moment(dateValue).diff(moment(this.handleMin()), 'days', true);
|
|
578
|
-
if (type === 'end') {
|
|
579
|
-
const dateValuePlus1 = moment(dateValue).add(1, 'd');
|
|
580
|
-
const dayDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'days', true);
|
|
581
|
-
const _mod = (dayDiffPlus1 % moment.duration(this.step).asDays());
|
|
582
|
-
this.filterEndFunction = (_mod < 0.0000001 && _mod > -0.0000001) || _mod === 0; // 1 millisecond = 1.1574074074074076e-8
|
|
583
|
-
return;
|
|
584
|
-
}
|
|
585
|
-
else if (type === 'begin') {
|
|
586
|
-
const _mod = ((dayDiff % moment.duration(this.step).asDays()) + 1);
|
|
587
|
-
this.filterBeginFunction = (_mod < 0.0000001 && _mod > -0.0000001 && _mod !== 0) || _mod === 1; // 1 millisecond = 1.1574074074074076e-8
|
|
588
|
-
return;
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
else if (this.ogcFilterTimeService.stepIsHourDuration(this.step)) {
|
|
592
|
-
if (type === 'end') {
|
|
593
|
-
const hourDiff = moment(dateValue).diff(moment(this.handleMin()), 'hours', true);
|
|
594
|
-
this.filterEndFunction = (hourDiff % moment.duration(this.step).asHours()) === 0;
|
|
595
|
-
return;
|
|
596
|
-
}
|
|
597
|
-
else if (type === 'begin') {
|
|
598
|
-
const hourDiff = moment(dateValue).diff(moment(this.handleMin()), 'hours', true);
|
|
599
|
-
this.filterBeginFunction = (hourDiff % moment.duration(this.step).asHours()) === 0;
|
|
600
|
-
return;
|
|
601
|
-
}
|
|
602
|
-
}
|
|
603
|
-
else if (this.ogcFilterTimeService.stepIsMinuteDuration(this.step)) {
|
|
604
|
-
if (type === 'end') {
|
|
605
|
-
this.filterEndFunction = true;
|
|
606
|
-
return;
|
|
607
|
-
}
|
|
608
|
-
else if (type === 'begin') {
|
|
609
|
-
this.filterBeginFunction = true;
|
|
610
|
-
return;
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
this.filterEndFunction = diff % this.stepMilliseconds === 0;
|
|
614
|
-
this.filterBeginFunction = diff % this.stepMilliseconds === 0;
|
|
615
|
-
return;
|
|
616
|
-
}
|
|
617
|
-
getDateTime(date, pos) {
|
|
618
|
-
const valuetmp = new Date(date);
|
|
619
|
-
let valuetmp2;
|
|
620
|
-
if (!this.sliderMode) {
|
|
621
|
-
switch (pos) {
|
|
622
|
-
case 1: {
|
|
623
|
-
if (this.currentFilter.calendarModeYear) {
|
|
624
|
-
valuetmp2 = valuetmp.setHours(0, 0);
|
|
625
|
-
break;
|
|
626
|
-
}
|
|
627
|
-
else {
|
|
628
|
-
valuetmp2 = valuetmp.setHours(this.beginHourFormControl.value, this.beginMinuteFormControl.value);
|
|
629
|
-
break;
|
|
630
|
-
}
|
|
631
|
-
}
|
|
632
|
-
case 2: {
|
|
633
|
-
if (this.currentFilter.calendarModeYear) {
|
|
634
|
-
valuetmp2 = valuetmp.setHours(0, 0);
|
|
635
|
-
break;
|
|
636
|
-
}
|
|
637
|
-
else {
|
|
638
|
-
valuetmp2 = valuetmp.setHours(this.endHourFormControl.value, this.endMinuteFormControl.value);
|
|
639
|
-
break;
|
|
640
|
-
}
|
|
641
|
-
}
|
|
642
|
-
}
|
|
643
|
-
}
|
|
644
|
-
return new Date(valuetmp2 ? valuetmp2 : valuetmp);
|
|
645
|
-
}
|
|
646
|
-
handleMinuteIncrement() {
|
|
647
|
-
if (this.ogcFilterTimeService.stepIsMinuteDuration(this.step)) {
|
|
648
|
-
if (this.stepMilliseconds < 3600000) {
|
|
649
|
-
return this.stepMilliseconds / 1000 === 60 ? 1 : this.stepMilliseconds / 1000;
|
|
650
|
-
}
|
|
651
|
-
else {
|
|
652
|
-
return (this.stepMilliseconds % 3600000) / 60;
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
else if (this.ogcFilterTimeService.stepIsHourDuration(this.step)) {
|
|
656
|
-
return 60;
|
|
657
|
-
}
|
|
658
|
-
return 1;
|
|
659
|
-
}
|
|
660
|
-
handleHourIncrement() {
|
|
661
|
-
if (this.ogcFilterTimeService.stepIsHourDuration(this.step)) {
|
|
662
|
-
return this.stepMilliseconds / 1000 / 60 / 60;
|
|
663
|
-
}
|
|
664
|
-
return 1;
|
|
665
|
-
}
|
|
666
|
-
fullBeginHoursArray(checkEndValue) {
|
|
667
|
-
if (checkEndValue) {
|
|
668
|
-
this.beginHours = Array.from({
|
|
669
|
-
length: (this.endHourFormControl.value - 0) / this.handleHourIncrement() + 1
|
|
670
|
-
}, (_, i) => 0 + i * this.handleHourIncrement());
|
|
671
|
-
}
|
|
672
|
-
else {
|
|
673
|
-
this.beginHours = Array.from({ length: (23 - 0) / this.handleHourIncrement() + 1 }, (_, i) => 0 + i * this.handleHourIncrement());
|
|
674
|
-
}
|
|
675
|
-
this.beginHourFormControl.setValue(this.beginValue.getHours());
|
|
676
|
-
}
|
|
677
|
-
fullEndHoursArray(checkEndValue) {
|
|
678
|
-
if (checkEndValue) {
|
|
679
|
-
this.endHours = Array.from({
|
|
680
|
-
length: (23 - this.beginHourFormControl.value) /
|
|
681
|
-
this.handleHourIncrement() +
|
|
682
|
-
1
|
|
683
|
-
}, (_, i) => this.beginHourFormControl.value + i * this.handleHourIncrement());
|
|
684
|
-
}
|
|
685
|
-
else {
|
|
686
|
-
this.endHours = Array.from({ length: (23 - 0) / this.handleHourIncrement() + 1 }, (_, i) => 0 + i * this.handleHourIncrement());
|
|
687
|
-
}
|
|
688
|
-
this.endHourFormControl.setValue(this.endValue.getHours());
|
|
689
|
-
}
|
|
690
|
-
fullBeginMinutesArray(checkEndValue) {
|
|
691
|
-
if (checkEndValue) {
|
|
692
|
-
this.beginMinutes = Array.from({
|
|
693
|
-
length: (this.endMinuteFormControl.value - 0) /
|
|
694
|
-
this.handleMinuteIncrement() +
|
|
695
|
-
1
|
|
696
|
-
}, (_, i) => 0 + i * this.handleMinuteIncrement());
|
|
697
|
-
}
|
|
698
|
-
else {
|
|
699
|
-
this.beginMinutes = Array.from({ length: (59 - 0) / this.handleMinuteIncrement() + 1 }, (_, i) => 0 + i * this.handleMinuteIncrement());
|
|
700
|
-
}
|
|
701
|
-
this.beginMinuteFormControl.setValue(this.beginValue.getMinutes());
|
|
702
|
-
}
|
|
703
|
-
fullEndMinutesArray(checkEndValue) {
|
|
704
|
-
if (checkEndValue) {
|
|
705
|
-
this.endMinutes = Array.from({
|
|
706
|
-
length: (59 - this.beginMinuteFormControl.value) /
|
|
707
|
-
this.handleMinuteIncrement() +
|
|
708
|
-
1
|
|
709
|
-
}, (_, i) => this.beginMinuteFormControl.value + i * this.handleMinuteIncrement());
|
|
710
|
-
}
|
|
711
|
-
else {
|
|
712
|
-
this.endMinutes = Array.from({ length: (59 - 0) / this.handleMinuteIncrement() + 1 }, (_, i) => 0 + i * this.handleMinuteIncrement());
|
|
713
|
-
}
|
|
714
|
-
this.endMinuteFormControl.setValue(this.endValue.getMinutes());
|
|
715
|
-
}
|
|
716
|
-
updateHoursMinutesArray() {
|
|
717
|
-
const beginTmp = new Date(this.beginValue);
|
|
718
|
-
const endTmp = new Date(this.endValue);
|
|
719
|
-
if (beginTmp.setHours(0, 0) === endTmp.setHours(0, 0)) {
|
|
720
|
-
this.fullBeginHoursArray(true);
|
|
721
|
-
this.fullEndHoursArray(true);
|
|
722
|
-
if (this.beginValue.getHours() === this.endValue.getHours()) {
|
|
723
|
-
this.fullBeginMinutesArray(true);
|
|
724
|
-
this.fullEndMinutesArray(true);
|
|
725
|
-
}
|
|
726
|
-
}
|
|
727
|
-
else {
|
|
728
|
-
this.fullBeginHoursArray();
|
|
729
|
-
this.fullEndHoursArray();
|
|
730
|
-
this.fullBeginMinutesArray();
|
|
731
|
-
this.fullEndMinutesArray();
|
|
732
|
-
}
|
|
733
|
-
}
|
|
734
|
-
updateValues() {
|
|
735
|
-
this.changeTemporalProperty(this.beginValue, 1, false);
|
|
736
|
-
this.changeTemporalProperty(this.endValue, 2, true);
|
|
737
|
-
}
|
|
738
|
-
restrictedToStep() {
|
|
739
|
-
return this.currentFilter.restrictToStep
|
|
740
|
-
? this.currentFilter.restrictToStep : false;
|
|
741
|
-
}
|
|
742
|
-
handleMin() {
|
|
743
|
-
return this.currentFilter.begin ? this.currentFilter.begin :
|
|
744
|
-
(this.datasource.options.minDate ? this.datasource.options.minDate : this._defaultMin);
|
|
745
|
-
}
|
|
746
|
-
handleMax() {
|
|
747
|
-
return this.currentFilter.end ? this.currentFilter.end :
|
|
748
|
-
(this.datasource.options.maxDate ? this.datasource.options.maxDate : this._defaultMax);
|
|
749
|
-
}
|
|
750
|
-
changePropertyByPass(event) {
|
|
751
|
-
this.changeProperty.next(event);
|
|
752
|
-
}
|
|
753
|
-
modeChange(event) {
|
|
754
|
-
if (!event.checked) {
|
|
755
|
-
this.updateValues();
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
setFilterStateDisable() {
|
|
759
|
-
if (this.currentFilter) {
|
|
760
|
-
this.filterStateDisable = !this.currentFilter.active;
|
|
761
|
-
}
|
|
762
|
-
else {
|
|
763
|
-
this.filterStateDisable = false;
|
|
764
|
-
}
|
|
765
|
-
if (this.calendarType() === 'datetime') {
|
|
766
|
-
if (this.filterStateDisable === true) {
|
|
767
|
-
this.beginHourFormControl.disable();
|
|
768
|
-
this.beginMinuteFormControl.disable();
|
|
769
|
-
this.endHourFormControl.disable();
|
|
770
|
-
this.endMinuteFormControl.disable();
|
|
771
|
-
}
|
|
772
|
-
else {
|
|
773
|
-
this.beginHourFormControl.enable();
|
|
774
|
-
this.beginMinuteFormControl.enable();
|
|
775
|
-
this.endHourFormControl.enable();
|
|
776
|
-
this.endMinuteFormControl.enable();
|
|
777
|
-
}
|
|
778
|
-
}
|
|
779
|
-
}
|
|
780
|
-
getDateFromStringWithoutTime(stringDate) {
|
|
781
|
-
// warning create date with no time make a date UTC with TZ and the date create maybe not the same year, month and day
|
|
782
|
-
// exemple:
|
|
783
|
-
// new Date('2022-01-01') -> Fri Dec 31 2021 19:00:00 GMT-0500 (heure normale de l’Est nord-américain)
|
|
784
|
-
// to create same date as string, add time 00 in the creation
|
|
785
|
-
// new Date('2022-01-01 00:00:00') -> Sat Jan 01 2022 00:00:00 GMT-0500 (heure normale de l’Est nord-américain)
|
|
786
|
-
let year;
|
|
787
|
-
let month = '01';
|
|
788
|
-
let day = '01';
|
|
789
|
-
if (stringDate.length === 10) {
|
|
790
|
-
const dateItems = stringDate.split('-');
|
|
791
|
-
if (dateItems.length !== 3) {
|
|
792
|
-
throw new Error('Error in config date begin-end for ogcFilter: Date without time format need to be YYYY-MM-DD or YYYY');
|
|
793
|
-
}
|
|
794
|
-
else {
|
|
795
|
-
year = dateItems[0];
|
|
796
|
-
month = dateItems[1];
|
|
797
|
-
day = dateItems[2];
|
|
798
|
-
}
|
|
799
|
-
}
|
|
800
|
-
else if (stringDate.length === 4) {
|
|
801
|
-
year = stringDate;
|
|
802
|
-
}
|
|
803
|
-
else {
|
|
804
|
-
return new Date(stringDate);
|
|
805
|
-
}
|
|
806
|
-
return new Date(`${year}-${month}-${day} 00:00:00`);
|
|
807
|
-
}
|
|
808
|
-
resetFilter() {
|
|
809
|
-
let filterOriginConfig = this.datasource.options.ogcFilters.filters;
|
|
810
|
-
let minDefaultDate;
|
|
811
|
-
let maxDefaultDate;
|
|
812
|
-
let minDefaultISOString;
|
|
813
|
-
let maxDefaultISOString;
|
|
814
|
-
if (this.calendarTypeYear) {
|
|
815
|
-
if (filterOriginConfig.end === 'today') {
|
|
816
|
-
let todayDateStringNoTime = new Date().toLocaleDateString('en-CA'); // '2022-02-13'
|
|
817
|
-
maxDefaultISOString = `${todayDateStringNoTime.substring(0, 4)}-01-01`;
|
|
818
|
-
}
|
|
819
|
-
else {
|
|
820
|
-
maxDefaultISOString = `${filterOriginConfig.end.substring(0, 4)}-01-01`;
|
|
821
|
-
}
|
|
822
|
-
minDefaultISOString = `${filterOriginConfig.begin.substring(0, 4)}-01-01`;
|
|
823
|
-
minDefaultDate = this.getDateFromStringWithoutTime(minDefaultISOString);
|
|
824
|
-
maxDefaultDate = this.getDateFromStringWithoutTime(maxDefaultISOString);
|
|
825
|
-
}
|
|
826
|
-
else {
|
|
827
|
-
minDefaultDate = this.parseFilter(filterOriginConfig.begin);
|
|
828
|
-
maxDefaultDate = this.parseFilter(filterOriginConfig.end);
|
|
829
|
-
minDefaultISOString = minDefaultDate.toISOString();
|
|
830
|
-
maxDefaultISOString = maxDefaultDate.toISOString();
|
|
831
|
-
}
|
|
832
|
-
if ((this.currentFilter.begin !== minDefaultISOString) ||
|
|
833
|
-
(this.currentFilter.end !== maxDefaultISOString)) {
|
|
834
|
-
this.beginValue = minDefaultDate;
|
|
835
|
-
this.endValue = maxDefaultDate;
|
|
836
|
-
this.updateValues();
|
|
837
|
-
}
|
|
838
|
-
}
|
|
839
|
-
toggleFilterState() {
|
|
840
|
-
if (this.currentFilter.active === true) {
|
|
841
|
-
this.currentFilter.active = false;
|
|
842
|
-
}
|
|
843
|
-
else {
|
|
844
|
-
this.currentFilter.active = true;
|
|
845
|
-
}
|
|
846
|
-
this.setFilterStateDisable();
|
|
847
|
-
this.updateValues();
|
|
848
|
-
}
|
|
849
|
-
}
|
|
850
|
-
OgcFilterTimeComponent.ɵfac = function OgcFilterTimeComponent_Factory(t) { return new (t || OgcFilterTimeComponent)(i0.ɵɵdirectiveInject(i1.OGCFilterTimeService)); };
|
|
851
|
-
OgcFilterTimeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OgcFilterTimeComponent, selectors: [["igo-ogc-filter-time"]], viewQuery: function OgcFilterTimeComponent_Query(rf, ctx) { if (rf & 1) {
|
|
852
|
-
i0.ɵɵviewQuery(_c0, 5);
|
|
853
|
-
i0.ɵɵviewQuery(_c1, 5);
|
|
854
|
-
i0.ɵɵviewQuery(_c2, 5);
|
|
855
|
-
i0.ɵɵviewQuery(_c3, 5);
|
|
856
|
-
} if (rf & 2) {
|
|
857
|
-
let _t;
|
|
858
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.endDatepickerTime = _t.first);
|
|
859
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.beginDatepickerTime = _t.first);
|
|
860
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.beginTime = _t.first);
|
|
861
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.endTime = _t.first);
|
|
862
|
-
} }, inputs: { datasource: "datasource", currentFilter: "currentFilter" }, outputs: { changeProperty: "changeProperty" }, decls: 4, vars: 3, consts: [[1, "datetime-container"], [3, "ngModel", "ngModelChange", "change", 4, "ngIf"], ["class", "slider-container", 4, "ngIf"], [4, "ngIf"], [3, "ngModel", "ngModelChange", "change"], [1, "slider-container"], [3, "begin", "max", "currentFilter", "datasource", "changeProperty"], ["class", "year-input-container", 4, "ngIf"], ["class", "datetime-input-container", 4, "ngIf"], [1, "year-input-container"], [1, "year-input"], ["matInput", "", 1, "year-input-only-year", 3, "value", "disabled", "change"], ["matSuffix", "", 3, "for", "disabled"], ["panelClass", "datepicker-year", 3, "startView", "startAt", "yearSelected"], ["beginDatepicker", ""], ["matInput", "", "enabled", "false", "readonly", "true", 1, "year-input-hide", 3, "matDatepicker", "value", "min", "max"], ["beginYear", ""], ["endDatepicker", ""], ["endYear", ""], ["mat-icon-button", "", "color", "primary", 1, "reset-button", 3, "matTooltip", "disabled", "click"], [3, "svgIcon"], ["tooltip-position", "below", "matTooltipShowDelay", "500", 1, "toggle-filter-state", 3, "matTooltip", "checked", "change"], [1, "datetime-input-container"], [1, "datetime-input"], [1, "date-input"], ["matInput", "", 3, "matDatepicker", "placeholder", "matDatepickerFilter", "value", "min", "max", "disabled", "dateChange"], ["begin", ""], [1, "filler"], [3, "startView", "startAt", "yearSelected", "monthSelected"], [1, "time-input"], ["class", "hour-input", 4, "ngIf"], ["class", "minute-input", 4, "ngIf"], ["class", "datetime-input", 4, "ngIf"], [1, "hour-input"], [3, "formControl", "selectionChange"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], [1, "minute-input"], ["end", ""]], template: function OgcFilterTimeComponent_Template(rf, ctx) { if (rf & 1) {
|
|
863
|
-
i0.ɵɵelementStart(0, "div", 0);
|
|
864
|
-
i0.ɵɵtemplate(1, OgcFilterTimeComponent_mat_slide_toggle_1_Template, 3, 4, "mat-slide-toggle", 1);
|
|
865
|
-
i0.ɵɵtemplate(2, OgcFilterTimeComponent_div_2_Template, 2, 4, "div", 2);
|
|
866
|
-
i0.ɵɵtemplate(3, OgcFilterTimeComponent_div_3_Template, 3, 2, "div", 3);
|
|
867
|
-
i0.ɵɵelementEnd();
|
|
868
|
-
} if (rf & 2) {
|
|
869
|
-
i0.ɵɵadvance(1);
|
|
870
|
-
i0.ɵɵproperty("ngIf", ctx.currentFilter.sliderOptions == null ? null : ctx.currentFilter.sliderOptions.enabled);
|
|
871
|
-
i0.ɵɵadvance(1);
|
|
872
|
-
i0.ɵɵproperty("ngIf", ctx.sliderMode);
|
|
873
|
-
i0.ɵɵadvance(1);
|
|
874
|
-
i0.ɵɵproperty("ngIf", !ctx.sliderMode);
|
|
875
|
-
} }, styles: ["input{text-align:center!important;margin:auto 5px!important}.slider-container[_ngcontent-%COMP%]{text-align:center}.datetime-input[_ngcontent-%COMP%]{display:inline-block;width:100px;margin:10px 0 5px 10px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.datetime-input[_ngcontent-%COMP%]{width:36%;margin:0}}.date-input[_ngcontent-%COMP%]{width:100px;margin-right:25px}.time-input[_ngcontent-%COMP%]{margin-right:25px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.time-input[_ngcontent-%COMP%]{margin-right:5px}}.hour-input[_ngcontent-%COMP%], .minute-input[_ngcontent-%COMP%]{width:35px;margin-left:7px}.year-input[_ngcontent-%COMP%]{width:98px;margin:10px 14px 5px 4px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.year-input[_ngcontent-%COMP%]{width:32%;margin:0 0 0 10px}}.year-input-hide[_ngcontent-%COMP%]{width:120px;margin-right:25px;display:none}.year-input-only-year[_ngcontent-%COMP%]{width:120px;margin-right:25px}.reset-button[_ngcontent-%COMP%]{width:25px;padding-left:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.reset-button[_ngcontent-%COMP%]{padding-left:8px}}.toggle-filter-state[_ngcontent-%COMP%]{padding-left:20px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.toggle-filter-state[_ngcontent-%COMP%]{padding-left:12px}} .datepicker-year .mat-calendar-arrow{display:none} .datepicker-year .mat-calendar-period-button{pointer-events:none} .datepicker-year .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}"] });
|
|
876
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OgcFilterTimeComponent, [{
|
|
877
|
-
type: Component,
|
|
878
|
-
args: [{ selector: 'igo-ogc-filter-time', template: "<div class=\"datetime-container\">\n <mat-slide-toggle \n *ngIf=\"this.currentFilter.sliderOptions?.enabled\"\n [(ngModel)]=\"sliderMode\"\n (change)=\"modeChange($event)\">\n {{'igo.geo.filter.sliderModeTitle' | translate}}\n </mat-slide-toggle>\n\n <div class=\"slider-container\" *ngIf=\"sliderMode\">\n <igo-ogc-filter-time-slider\n [begin]=\"beginValue\"\n [max]=\"this.restrictedToStep() ? this.maxDate : this.endValue\"\n [currentFilter]=\"currentFilter\" \n [datasource]=\"datasource\"\n (changeProperty)=\"changePropertyByPass($event)\"\n >\n </igo-ogc-filter-time-slider>\n \n </div>\n\n <div *ngIf=\"!sliderMode\">\n\n <div class=\"year-input-container\" *ngIf=\"calendarTypeYear\">\n <!-- to emulate a year-picker, 2 input: first input to show user just year and second input hiden and bind \n with the datepicker -->\n <mat-form-field class=\"year-input\">\n <mat-label>{{'igo.geo.timeFilter.startYear'| translate}}</mat-label>\n <input\n matInput\n class=\"year-input-only-year\"\n value=\"{{onlyYearBegin}}\"\n (change)= \"yearOnlyInputChange($event, beginDatepicker, 'begin')\"\n [disabled]= \"filterStateDisable\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"beginDatepicker\" [disabled]=\"filterStateDisable\"></mat-datepicker-toggle>\n \n <mat-datepicker\n panelClass=\"datepicker-year\"\n #beginDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"beginValue\"\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n >\n </mat-datepicker>\n\n <input #beginYear\n class= \"year-input-hide\"\n matInput\n [matDatepicker]=\"beginDatepicker\"\n enabled= false\n readonly= true\n [value]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"(endValue && (!restrictedToStep()))?endValue:handleDate(datasource.options.maxDate)\"\n >\n </mat-form-field>\n\n <mat-form-field class=\"year-input\">\n <mat-label>{{'igo.geo.timeFilter.endYear'| translate}}</mat-label>\n <input\n matInput\n class=\"year-input-only-year\"\n value=\"{{onlyYearEnd}}\"\n (change)= \"yearOnlyInputChange($event, endDatepicker, 'end')\"\n [disabled] = \"filterStateDisable\">\n <mat-datepicker-toggle matSuffix [for]=\"endDatepicker\" [disabled]=\"filterStateDisable\"></mat-datepicker-toggle>\n <mat-datepicker\n panelClass=\"datepicker-year\"\n #endDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"endValue\"\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n >\n </mat-datepicker>\n\n <input #endYear\n class= \"year-input-hide\"\n matInput\n [matDatepicker]=\"endDatepicker\"\n enabled= false\n readonly= true\n [value]=\"endValue?endValue:handleDate(datasource.options.maxDate)\"\n [min]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [max]=\"handleDate(datasource.options.maxDate)\"\n >\n </mat-form-field>\n <button class=\"reset-button\" \n mat-icon-button\n color=\"primary\" \n (click)=\"resetFilter()\" \n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" \n [disabled]= \"filterStateDisable\">\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\n </button>\n <mat-slide-toggle \n class='toggle-filter-state' \n (change)=\"toggleFilterState()\" \n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" \n tooltip-position=\"below\" \n matTooltipShowDelay=\"500\"\n [checked]=\"!filterStateDisable\">\n </mat-slide-toggle>\n\n </div>\n\n <div class=\"datetime-input-container\" *ngIf=\"calendarType()!=='year'\">\n <div class=\"datetime-input\">\n <mat-form-field class=\"date-input\">\n <mat-datepicker-toggle matSuffix [for]=\"beginDatepicker\" [disabled]= \"filterStateDisable\"></mat-datepicker-toggle>\n <input #begin\n matInput\n [matDatepicker]=\"beginDatepicker\"\n [placeholder]=\"'igo.geo.timeFilter.startDate' | translate\"\n [attr.disabled]=\"!currentFilter.active\"\n (dateChange)=\"changeTemporalProperty(begin.value, 1)\"\n [matDatepickerFilter]=\"filterBeginFunction\"\n [value]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"(endValue && (!restrictedToStep()))?endValue:handleDate(datasource.options.maxDate)\" \n [disabled]= \"filterStateDisable\">\n <span class=\"filler\"></span>\n <mat-datepicker\n #beginDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"beginValue\"\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n (monthSelected)=\"monthSelected($event, beginDatepicker, 'begin')\">\n </mat-datepicker>\n </mat-form-field>\n\n <div class=\"time-input\">\n <mat-form-field class=\"hour-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.hour' | translate}}</mat-label>\n <mat-select\n [formControl]=\"beginHourFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\">\n <mat-option *ngFor=\"let hour of beginHours\" [value]=\"hour\">{{hour}}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.minute' | translate}}</mat-label>\n <mat-select\n [formControl]=\"beginMinuteFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\">\n <mat-option *ngFor=\"let minute of beginMinutes\" [value]=\"minute\">{{minute}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"datetime-input\" *ngIf=\"!restrictedToStep()\">\n <mat-form-field class=\"date-input\">\n <mat-datepicker-toggle matSuffix [for]=\"endDatepicker\" [disabled]= \"filterStateDisable\"></mat-datepicker-toggle>\n <input #end\n matInput\n [matDatepicker]=\"endDatepicker\"\n [placeholder]=\"'igo.geo.timeFilter.endDate' | translate\"\n [attr.disabled]=\"!currentFilter.active\"\n (dateChange)=\"changeTemporalProperty(end.value, 2)\"\n [matDatepickerFilter]=\"filterEndFunction\"\n [value]=\"endValue?endValue:handleDate(datasource.options.maxDate)\"\n [min]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [max]=\"handleDate(datasource.options.maxDate)\" \n [disabled]= \"filterStateDisable\">\n <span class=\"filler\"></span>\n <mat-datepicker #endDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"endValue\"\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n (monthSelected)=\"monthSelected($event, endDatepicker, 'end')\">\n </mat-datepicker>\n </mat-form-field>\n\n <div class=\"time-input\">\n <mat-form-field class=\"hour-input\" *ngIf=\"calendarType()==='datetime'\" >\n <mat-label>{{'igo.geo.timeFilter.hour' | translate}}</mat-label>\n <mat-select\n [formControl]=\"endHourFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\">\n <mat-option *ngFor=\"let hour of endHours\" [value]=\"hour\">{{hour}}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.minute' | translate}}</mat-label>\n <mat-select\n [formControl]=\"endMinuteFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\">\n <mat-option *ngFor=\"let minute of endMinutes\" [value]=\"minute\">{{minute}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <button class=\"reset-button\" \n mat-icon-button color=\"primary\"\n (click)=\"resetFilter()\" \n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" \n [disabled]= \"filterStateDisable\">\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\n </button>\n <mat-slide-toggle \n class=\"toggle-filter-state\" \n (change)=\"toggleFilterState()\" \n tooltip-position=\"below\" \n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" \n [checked]= \"!filterStateDisable\">\n </mat-slide-toggle>\n </div>\n </div>\n</div>\n", styles: ["::ng-deep input{text-align:center!important;margin:auto 5px!important}.slider-container{text-align:center}.datetime-input{display:inline-block;width:100px;margin:10px 0 5px 10px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.datetime-input{width:36%;margin:0}}.date-input{width:100px;margin-right:25px}.time-input{margin-right:25px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.time-input{margin-right:5px}}.hour-input,.minute-input{width:35px;margin-left:7px}.year-input{width:98px;margin:10px 14px 5px 4px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.year-input{width:32%;margin:0 0 0 10px}}.year-input-hide{width:120px;margin-right:25px;display:none}.year-input-only-year{width:120px;margin-right:25px}.reset-button{width:25px;padding-left:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.reset-button{padding-left:8px}}.toggle-filter-state{padding-left:20px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.toggle-filter-state{padding-left:12px}}::ng-deep .datepicker-year ::ng-deep .mat-calendar-arrow{display:none}::ng-deep .datepicker-year ::ng-deep .mat-calendar-period-button{pointer-events:none}::ng-deep .datepicker-year ::ng-deep .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}\n"] }]
|
|
879
|
-
}], function () { return [{ type: i1.OGCFilterTimeService }]; }, { datasource: [{
|
|
880
|
-
type: Input
|
|
881
|
-
}], currentFilter: [{
|
|
882
|
-
type: Input
|
|
883
|
-
}], changeProperty: [{
|
|
884
|
-
type: Output
|
|
885
|
-
}], endDatepickerTime: [{
|
|
886
|
-
type: ViewChild,
|
|
887
|
-
args: ['endDatepickerTime']
|
|
888
|
-
}], beginDatepickerTime: [{
|
|
889
|
-
type: ViewChild,
|
|
890
|
-
args: ['beginDatepickerTime']
|
|
891
|
-
}], beginTime: [{
|
|
892
|
-
type: ViewChild,
|
|
893
|
-
args: ['beginTime']
|
|
894
|
-
}], endTime: [{
|
|
895
|
-
type: ViewChild,
|
|
896
|
-
args: ['endTime']
|
|
897
|
-
}] }); })();
|
|
1
|
+
import { Component, Input, ViewChild, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { UntypedFormControl } from '@angular/forms';
|
|
3
|
+
import { OgcFilterOperator } from '../../filter/shared/ogc-filter.enum';
|
|
4
|
+
import { default as moment } from 'moment';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../shared/ogc-filter-time.service";
|
|
7
|
+
const _c0 = ["endDatepickerTime"];
|
|
8
|
+
const _c1 = ["beginDatepickerTime"];
|
|
9
|
+
const _c2 = ["beginTime"];
|
|
10
|
+
const _c3 = ["endTime"];
|
|
11
|
+
function OgcFilterTimeComponent_mat_slide_toggle_1_Template(rf, ctx) { if (rf & 1) {
|
|
12
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
13
|
+
i0.ɵɵelementStart(0, "mat-slide-toggle", 4);
|
|
14
|
+
i0.ɵɵlistener("ngModelChange", function OgcFilterTimeComponent_mat_slide_toggle_1_Template_mat_slide_toggle_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.sliderMode = $event); })("change", function OgcFilterTimeComponent_mat_slide_toggle_1_Template_mat_slide_toggle_change_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.modeChange($event)); });
|
|
15
|
+
i0.ɵɵtext(1);
|
|
16
|
+
i0.ɵɵpipe(2, "translate");
|
|
17
|
+
i0.ɵɵelementEnd();
|
|
18
|
+
} if (rf & 2) {
|
|
19
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
20
|
+
i0.ɵɵproperty("ngModel", ctx_r0.sliderMode);
|
|
21
|
+
i0.ɵɵadvance(1);
|
|
22
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(2, 2, "igo.geo.filter.sliderModeTitle"), " ");
|
|
23
|
+
} }
|
|
24
|
+
function OgcFilterTimeComponent_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
26
|
+
i0.ɵɵelementStart(0, "div", 5)(1, "igo-ogc-filter-time-slider", 6);
|
|
27
|
+
i0.ɵɵlistener("changeProperty", function OgcFilterTimeComponent_div_2_Template_igo_ogc_filter_time_slider_changeProperty_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r6 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r6.changePropertyByPass($event)); });
|
|
28
|
+
i0.ɵɵelementEnd()();
|
|
29
|
+
} if (rf & 2) {
|
|
30
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
31
|
+
i0.ɵɵadvance(1);
|
|
32
|
+
i0.ɵɵproperty("begin", ctx_r1.beginValue)("max", ctx_r1.restrictedToStep() ? ctx_r1.maxDate : ctx_r1.endValue)("currentFilter", ctx_r1.currentFilter)("datasource", ctx_r1.datasource);
|
|
33
|
+
} }
|
|
34
|
+
function OgcFilterTimeComponent_div_3_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
36
|
+
i0.ɵɵelementStart(0, "div", 9)(1, "mat-form-field", 10)(2, "mat-label");
|
|
37
|
+
i0.ɵɵtext(3);
|
|
38
|
+
i0.ɵɵpipe(4, "translate");
|
|
39
|
+
i0.ɵɵelementEnd();
|
|
40
|
+
i0.ɵɵelementStart(5, "input", 11);
|
|
41
|
+
i0.ɵɵlistener("change", function OgcFilterTimeComponent_div_3_div_1_Template_input_change_5_listener($event) { i0.ɵɵrestoreView(_r15); const _r10 = i0.ɵɵreference(8); const ctx_r14 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r14.yearOnlyInputChange($event, _r10, "begin")); });
|
|
42
|
+
i0.ɵɵelementEnd();
|
|
43
|
+
i0.ɵɵelement(6, "mat-datepicker-toggle", 12);
|
|
44
|
+
i0.ɵɵelementStart(7, "mat-datepicker", 13, 14);
|
|
45
|
+
i0.ɵɵlistener("yearSelected", function OgcFilterTimeComponent_div_3_div_1_Template_mat_datepicker_yearSelected_7_listener($event) { i0.ɵɵrestoreView(_r15); const _r10 = i0.ɵɵreference(8); const ctx_r16 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r16.yearSelected($event, _r10, "begin")); });
|
|
46
|
+
i0.ɵɵelementEnd();
|
|
47
|
+
i0.ɵɵelement(9, "input", 15, 16);
|
|
48
|
+
i0.ɵɵelementEnd();
|
|
49
|
+
i0.ɵɵelementStart(11, "mat-form-field", 10)(12, "mat-label");
|
|
50
|
+
i0.ɵɵtext(13);
|
|
51
|
+
i0.ɵɵpipe(14, "translate");
|
|
52
|
+
i0.ɵɵelementEnd();
|
|
53
|
+
i0.ɵɵelementStart(15, "input", 11);
|
|
54
|
+
i0.ɵɵlistener("change", function OgcFilterTimeComponent_div_3_div_1_Template_input_change_15_listener($event) { i0.ɵɵrestoreView(_r15); const _r12 = i0.ɵɵreference(18); const ctx_r17 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r17.yearOnlyInputChange($event, _r12, "end")); });
|
|
55
|
+
i0.ɵɵelementEnd();
|
|
56
|
+
i0.ɵɵelement(16, "mat-datepicker-toggle", 12);
|
|
57
|
+
i0.ɵɵelementStart(17, "mat-datepicker", 13, 17);
|
|
58
|
+
i0.ɵɵlistener("yearSelected", function OgcFilterTimeComponent_div_3_div_1_Template_mat_datepicker_yearSelected_17_listener($event) { i0.ɵɵrestoreView(_r15); const _r12 = i0.ɵɵreference(18); const ctx_r18 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r18.yearSelected($event, _r12, "end")); });
|
|
59
|
+
i0.ɵɵelementEnd();
|
|
60
|
+
i0.ɵɵelement(19, "input", 15, 18);
|
|
61
|
+
i0.ɵɵelementEnd();
|
|
62
|
+
i0.ɵɵelementStart(21, "button", 19);
|
|
63
|
+
i0.ɵɵlistener("click", function OgcFilterTimeComponent_div_3_div_1_Template_button_click_21_listener() { i0.ɵɵrestoreView(_r15); const ctx_r19 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r19.resetFilter()); });
|
|
64
|
+
i0.ɵɵpipe(22, "translate");
|
|
65
|
+
i0.ɵɵelement(23, "mat-icon", 20);
|
|
66
|
+
i0.ɵɵelementEnd();
|
|
67
|
+
i0.ɵɵelementStart(24, "mat-slide-toggle", 21);
|
|
68
|
+
i0.ɵɵlistener("change", function OgcFilterTimeComponent_div_3_div_1_Template_mat_slide_toggle_change_24_listener() { i0.ɵɵrestoreView(_r15); const ctx_r20 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r20.toggleFilterState()); });
|
|
69
|
+
i0.ɵɵpipe(25, "translate");
|
|
70
|
+
i0.ɵɵelementEnd()();
|
|
71
|
+
} if (rf & 2) {
|
|
72
|
+
const _r10 = i0.ɵɵreference(8);
|
|
73
|
+
const _r12 = i0.ɵɵreference(18);
|
|
74
|
+
const ctx_r8 = i0.ɵɵnextContext(2);
|
|
75
|
+
i0.ɵɵadvance(3);
|
|
76
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 27, "igo.geo.timeFilter.startYear"));
|
|
77
|
+
i0.ɵɵadvance(2);
|
|
78
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r8.onlyYearBegin);
|
|
79
|
+
i0.ɵɵproperty("disabled", ctx_r8.filterStateDisable);
|
|
80
|
+
i0.ɵɵadvance(1);
|
|
81
|
+
i0.ɵɵproperty("for", _r10)("disabled", ctx_r8.filterStateDisable);
|
|
82
|
+
i0.ɵɵadvance(1);
|
|
83
|
+
i0.ɵɵproperty("startView", ctx_r8.calendarView())("startAt", ctx_r8.beginValue);
|
|
84
|
+
i0.ɵɵadvance(2);
|
|
85
|
+
i0.ɵɵproperty("matDatepicker", _r10)("value", ctx_r8.beginValue ? ctx_r8.beginValue : ctx_r8.handleDate(ctx_r8.datasource.options.minDate))("min", ctx_r8.handleDate(ctx_r8.datasource.options.minDate))("max", ctx_r8.endValue && !ctx_r8.restrictedToStep() ? ctx_r8.endValue : ctx_r8.handleDate(ctx_r8.datasource.options.maxDate));
|
|
86
|
+
i0.ɵɵadvance(4);
|
|
87
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(14, 29, "igo.geo.timeFilter.endYear"));
|
|
88
|
+
i0.ɵɵadvance(2);
|
|
89
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r8.onlyYearEnd);
|
|
90
|
+
i0.ɵɵproperty("disabled", ctx_r8.filterStateDisable);
|
|
91
|
+
i0.ɵɵadvance(1);
|
|
92
|
+
i0.ɵɵproperty("for", _r12)("disabled", ctx_r8.filterStateDisable);
|
|
93
|
+
i0.ɵɵadvance(1);
|
|
94
|
+
i0.ɵɵproperty("startView", ctx_r8.calendarView())("startAt", ctx_r8.endValue);
|
|
95
|
+
i0.ɵɵadvance(2);
|
|
96
|
+
i0.ɵɵproperty("matDatepicker", _r12)("value", ctx_r8.endValue ? ctx_r8.endValue : ctx_r8.handleDate(ctx_r8.datasource.options.maxDate))("min", ctx_r8.beginValue ? ctx_r8.beginValue : ctx_r8.handleDate(ctx_r8.datasource.options.minDate))("max", ctx_r8.handleDate(ctx_r8.datasource.options.maxDate));
|
|
97
|
+
i0.ɵɵadvance(2);
|
|
98
|
+
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(22, 31, "igo.geo.filter.resetFilters"))("disabled", ctx_r8.filterStateDisable);
|
|
99
|
+
i0.ɵɵadvance(2);
|
|
100
|
+
i0.ɵɵpropertyInterpolate("svgIcon", ctx_r8.resetIcon);
|
|
101
|
+
i0.ɵɵadvance(1);
|
|
102
|
+
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(25, 33, "igo.geo.filter.toggleFilterState"))("checked", !ctx_r8.filterStateDisable);
|
|
103
|
+
} }
|
|
104
|
+
function OgcFilterTimeComponent_div_3_div_2_mat_form_field_11_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
105
|
+
i0.ɵɵelementStart(0, "mat-option", 36);
|
|
106
|
+
i0.ɵɵtext(1);
|
|
107
|
+
i0.ɵɵelementEnd();
|
|
108
|
+
} if (rf & 2) {
|
|
109
|
+
const hour_r27 = ctx.$implicit;
|
|
110
|
+
i0.ɵɵproperty("value", hour_r27);
|
|
111
|
+
i0.ɵɵadvance(1);
|
|
112
|
+
i0.ɵɵtextInterpolate(hour_r27);
|
|
113
|
+
} }
|
|
114
|
+
function OgcFilterTimeComponent_div_3_div_2_mat_form_field_11_Template(rf, ctx) { if (rf & 1) {
|
|
115
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
116
|
+
i0.ɵɵelementStart(0, "mat-form-field", 33)(1, "mat-label");
|
|
117
|
+
i0.ɵɵtext(2);
|
|
118
|
+
i0.ɵɵpipe(3, "translate");
|
|
119
|
+
i0.ɵɵelementEnd();
|
|
120
|
+
i0.ɵɵelementStart(4, "mat-select", 34);
|
|
121
|
+
i0.ɵɵlistener("selectionChange", function OgcFilterTimeComponent_div_3_div_2_mat_form_field_11_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r29); i0.ɵɵnextContext(); const _r21 = i0.ɵɵreference(5); const ctx_r28 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r28.changeTemporalProperty(_r21.value, 1)); });
|
|
122
|
+
i0.ɵɵtemplate(5, OgcFilterTimeComponent_div_3_div_2_mat_form_field_11_mat_option_5_Template, 2, 2, "mat-option", 35);
|
|
123
|
+
i0.ɵɵelementEnd()();
|
|
124
|
+
} if (rf & 2) {
|
|
125
|
+
const ctx_r23 = i0.ɵɵnextContext(3);
|
|
126
|
+
i0.ɵɵadvance(2);
|
|
127
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.timeFilter.hour"));
|
|
128
|
+
i0.ɵɵadvance(2);
|
|
129
|
+
i0.ɵɵproperty("formControl", ctx_r23.beginHourFormControl);
|
|
130
|
+
i0.ɵɵattribute("disabled", !ctx_r23.currentFilter.active);
|
|
131
|
+
i0.ɵɵadvance(1);
|
|
132
|
+
i0.ɵɵproperty("ngForOf", ctx_r23.beginHours);
|
|
133
|
+
} }
|
|
134
|
+
function OgcFilterTimeComponent_div_3_div_2_mat_form_field_12_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
135
|
+
i0.ɵɵelementStart(0, "mat-option", 36);
|
|
136
|
+
i0.ɵɵtext(1);
|
|
137
|
+
i0.ɵɵelementEnd();
|
|
138
|
+
} if (rf & 2) {
|
|
139
|
+
const minute_r31 = ctx.$implicit;
|
|
140
|
+
i0.ɵɵproperty("value", minute_r31);
|
|
141
|
+
i0.ɵɵadvance(1);
|
|
142
|
+
i0.ɵɵtextInterpolate(minute_r31);
|
|
143
|
+
} }
|
|
144
|
+
function OgcFilterTimeComponent_div_3_div_2_mat_form_field_12_Template(rf, ctx) { if (rf & 1) {
|
|
145
|
+
const _r33 = i0.ɵɵgetCurrentView();
|
|
146
|
+
i0.ɵɵelementStart(0, "mat-form-field", 37)(1, "mat-label");
|
|
147
|
+
i0.ɵɵtext(2);
|
|
148
|
+
i0.ɵɵpipe(3, "translate");
|
|
149
|
+
i0.ɵɵelementEnd();
|
|
150
|
+
i0.ɵɵelementStart(4, "mat-select", 34);
|
|
151
|
+
i0.ɵɵlistener("selectionChange", function OgcFilterTimeComponent_div_3_div_2_mat_form_field_12_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r33); i0.ɵɵnextContext(); const _r21 = i0.ɵɵreference(5); const ctx_r32 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r32.changeTemporalProperty(_r21.value, 1)); });
|
|
152
|
+
i0.ɵɵtemplate(5, OgcFilterTimeComponent_div_3_div_2_mat_form_field_12_mat_option_5_Template, 2, 2, "mat-option", 35);
|
|
153
|
+
i0.ɵɵelementEnd()();
|
|
154
|
+
} if (rf & 2) {
|
|
155
|
+
const ctx_r24 = i0.ɵɵnextContext(3);
|
|
156
|
+
i0.ɵɵadvance(2);
|
|
157
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.timeFilter.minute"));
|
|
158
|
+
i0.ɵɵadvance(2);
|
|
159
|
+
i0.ɵɵproperty("formControl", ctx_r24.beginMinuteFormControl);
|
|
160
|
+
i0.ɵɵattribute("disabled", !ctx_r24.currentFilter.active);
|
|
161
|
+
i0.ɵɵadvance(1);
|
|
162
|
+
i0.ɵɵproperty("ngForOf", ctx_r24.beginMinutes);
|
|
163
|
+
} }
|
|
164
|
+
function OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_10_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
165
|
+
i0.ɵɵelementStart(0, "mat-option", 36);
|
|
166
|
+
i0.ɵɵtext(1);
|
|
167
|
+
i0.ɵɵelementEnd();
|
|
168
|
+
} if (rf & 2) {
|
|
169
|
+
const hour_r39 = ctx.$implicit;
|
|
170
|
+
i0.ɵɵproperty("value", hour_r39);
|
|
171
|
+
i0.ɵɵadvance(1);
|
|
172
|
+
i0.ɵɵtextInterpolate(hour_r39);
|
|
173
|
+
} }
|
|
174
|
+
function OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_10_Template(rf, ctx) { if (rf & 1) {
|
|
175
|
+
const _r41 = i0.ɵɵgetCurrentView();
|
|
176
|
+
i0.ɵɵelementStart(0, "mat-form-field", 33)(1, "mat-label");
|
|
177
|
+
i0.ɵɵtext(2);
|
|
178
|
+
i0.ɵɵpipe(3, "translate");
|
|
179
|
+
i0.ɵɵelementEnd();
|
|
180
|
+
i0.ɵɵelementStart(4, "mat-select", 34);
|
|
181
|
+
i0.ɵɵlistener("selectionChange", function OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_10_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r41); i0.ɵɵnextContext(); const _r34 = i0.ɵɵreference(4); const ctx_r40 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r40.changeTemporalProperty(_r34.value, 2)); });
|
|
182
|
+
i0.ɵɵtemplate(5, OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_10_mat_option_5_Template, 2, 2, "mat-option", 35);
|
|
183
|
+
i0.ɵɵelementEnd()();
|
|
184
|
+
} if (rf & 2) {
|
|
185
|
+
const ctx_r36 = i0.ɵɵnextContext(4);
|
|
186
|
+
i0.ɵɵadvance(2);
|
|
187
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.timeFilter.hour"));
|
|
188
|
+
i0.ɵɵadvance(2);
|
|
189
|
+
i0.ɵɵproperty("formControl", ctx_r36.endHourFormControl);
|
|
190
|
+
i0.ɵɵattribute("disabled", !ctx_r36.currentFilter.active);
|
|
191
|
+
i0.ɵɵadvance(1);
|
|
192
|
+
i0.ɵɵproperty("ngForOf", ctx_r36.endHours);
|
|
193
|
+
} }
|
|
194
|
+
function OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_11_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
195
|
+
i0.ɵɵelementStart(0, "mat-option", 36);
|
|
196
|
+
i0.ɵɵtext(1);
|
|
197
|
+
i0.ɵɵelementEnd();
|
|
198
|
+
} if (rf & 2) {
|
|
199
|
+
const minute_r43 = ctx.$implicit;
|
|
200
|
+
i0.ɵɵproperty("value", minute_r43);
|
|
201
|
+
i0.ɵɵadvance(1);
|
|
202
|
+
i0.ɵɵtextInterpolate(minute_r43);
|
|
203
|
+
} }
|
|
204
|
+
function OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_11_Template(rf, ctx) { if (rf & 1) {
|
|
205
|
+
const _r45 = i0.ɵɵgetCurrentView();
|
|
206
|
+
i0.ɵɵelementStart(0, "mat-form-field", 37)(1, "mat-label");
|
|
207
|
+
i0.ɵɵtext(2);
|
|
208
|
+
i0.ɵɵpipe(3, "translate");
|
|
209
|
+
i0.ɵɵelementEnd();
|
|
210
|
+
i0.ɵɵelementStart(4, "mat-select", 34);
|
|
211
|
+
i0.ɵɵlistener("selectionChange", function OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_11_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r45); i0.ɵɵnextContext(); const _r34 = i0.ɵɵreference(4); const ctx_r44 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r44.changeTemporalProperty(_r34.value, 2)); });
|
|
212
|
+
i0.ɵɵtemplate(5, OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_11_mat_option_5_Template, 2, 2, "mat-option", 35);
|
|
213
|
+
i0.ɵɵelementEnd()();
|
|
214
|
+
} if (rf & 2) {
|
|
215
|
+
const ctx_r37 = i0.ɵɵnextContext(4);
|
|
216
|
+
i0.ɵɵadvance(2);
|
|
217
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.geo.timeFilter.minute"));
|
|
218
|
+
i0.ɵɵadvance(2);
|
|
219
|
+
i0.ɵɵproperty("formControl", ctx_r37.endMinuteFormControl);
|
|
220
|
+
i0.ɵɵattribute("disabled", !ctx_r37.currentFilter.active);
|
|
221
|
+
i0.ɵɵadvance(1);
|
|
222
|
+
i0.ɵɵproperty("ngForOf", ctx_r37.endMinutes);
|
|
223
|
+
} }
|
|
224
|
+
function OgcFilterTimeComponent_div_3_div_2_div_13_Template(rf, ctx) { if (rf & 1) {
|
|
225
|
+
const _r47 = i0.ɵɵgetCurrentView();
|
|
226
|
+
i0.ɵɵelementStart(0, "div", 23)(1, "mat-form-field", 24);
|
|
227
|
+
i0.ɵɵelement(2, "mat-datepicker-toggle", 12);
|
|
228
|
+
i0.ɵɵelementStart(3, "input", 25, 38);
|
|
229
|
+
i0.ɵɵlistener("dateChange", function OgcFilterTimeComponent_div_3_div_2_div_13_Template_input_dateChange_3_listener() { i0.ɵɵrestoreView(_r47); const _r34 = i0.ɵɵreference(4); const ctx_r46 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r46.changeTemporalProperty(_r34.value, 2)); });
|
|
230
|
+
i0.ɵɵpipe(5, "translate");
|
|
231
|
+
i0.ɵɵelementEnd();
|
|
232
|
+
i0.ɵɵelement(6, "span", 27);
|
|
233
|
+
i0.ɵɵelementStart(7, "mat-datepicker", 28, 17);
|
|
234
|
+
i0.ɵɵlistener("yearSelected", function OgcFilterTimeComponent_div_3_div_2_div_13_Template_mat_datepicker_yearSelected_7_listener($event) { i0.ɵɵrestoreView(_r47); const _r35 = i0.ɵɵreference(8); const ctx_r48 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r48.yearSelected($event, _r35, "end")); })("monthSelected", function OgcFilterTimeComponent_div_3_div_2_div_13_Template_mat_datepicker_monthSelected_7_listener($event) { i0.ɵɵrestoreView(_r47); const _r35 = i0.ɵɵreference(8); const ctx_r49 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r49.monthSelected($event, _r35, "end")); });
|
|
235
|
+
i0.ɵɵelementEnd()();
|
|
236
|
+
i0.ɵɵelementStart(9, "div", 29);
|
|
237
|
+
i0.ɵɵtemplate(10, OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_10_Template, 6, 6, "mat-form-field", 30);
|
|
238
|
+
i0.ɵɵtemplate(11, OgcFilterTimeComponent_div_3_div_2_div_13_mat_form_field_11_Template, 6, 6, "mat-form-field", 31);
|
|
239
|
+
i0.ɵɵelementEnd()();
|
|
240
|
+
} if (rf & 2) {
|
|
241
|
+
const _r35 = i0.ɵɵreference(8);
|
|
242
|
+
const ctx_r25 = i0.ɵɵnextContext(3);
|
|
243
|
+
i0.ɵɵadvance(2);
|
|
244
|
+
i0.ɵɵproperty("for", _r35)("disabled", ctx_r25.filterStateDisable);
|
|
245
|
+
i0.ɵɵadvance(1);
|
|
246
|
+
i0.ɵɵproperty("matDatepicker", _r35)("placeholder", i0.ɵɵpipeBind1(5, 14, "igo.geo.timeFilter.endDate"))("matDatepickerFilter", ctx_r25.filterEndFunction)("value", ctx_r25.endValue ? ctx_r25.endValue : ctx_r25.handleDate(ctx_r25.datasource.options.maxDate))("min", ctx_r25.beginValue ? ctx_r25.beginValue : ctx_r25.handleDate(ctx_r25.datasource.options.minDate))("max", ctx_r25.handleDate(ctx_r25.datasource.options.maxDate))("disabled", ctx_r25.filterStateDisable);
|
|
247
|
+
i0.ɵɵattribute("disabled", !ctx_r25.currentFilter.active);
|
|
248
|
+
i0.ɵɵadvance(4);
|
|
249
|
+
i0.ɵɵproperty("startView", ctx_r25.calendarView())("startAt", ctx_r25.endValue);
|
|
250
|
+
i0.ɵɵadvance(3);
|
|
251
|
+
i0.ɵɵproperty("ngIf", ctx_r25.calendarType() === "datetime");
|
|
252
|
+
i0.ɵɵadvance(1);
|
|
253
|
+
i0.ɵɵproperty("ngIf", ctx_r25.calendarType() === "datetime");
|
|
254
|
+
} }
|
|
255
|
+
function OgcFilterTimeComponent_div_3_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
256
|
+
const _r51 = i0.ɵɵgetCurrentView();
|
|
257
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "div", 23)(2, "mat-form-field", 24);
|
|
258
|
+
i0.ɵɵelement(3, "mat-datepicker-toggle", 12);
|
|
259
|
+
i0.ɵɵelementStart(4, "input", 25, 26);
|
|
260
|
+
i0.ɵɵlistener("dateChange", function OgcFilterTimeComponent_div_3_div_2_Template_input_dateChange_4_listener() { i0.ɵɵrestoreView(_r51); const _r21 = i0.ɵɵreference(5); const ctx_r50 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r50.changeTemporalProperty(_r21.value, 1)); });
|
|
261
|
+
i0.ɵɵpipe(6, "translate");
|
|
262
|
+
i0.ɵɵelementEnd();
|
|
263
|
+
i0.ɵɵelement(7, "span", 27);
|
|
264
|
+
i0.ɵɵelementStart(8, "mat-datepicker", 28, 14);
|
|
265
|
+
i0.ɵɵlistener("yearSelected", function OgcFilterTimeComponent_div_3_div_2_Template_mat_datepicker_yearSelected_8_listener($event) { i0.ɵɵrestoreView(_r51); const _r22 = i0.ɵɵreference(9); const ctx_r52 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r52.yearSelected($event, _r22, "begin")); })("monthSelected", function OgcFilterTimeComponent_div_3_div_2_Template_mat_datepicker_monthSelected_8_listener($event) { i0.ɵɵrestoreView(_r51); const _r22 = i0.ɵɵreference(9); const ctx_r53 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r53.monthSelected($event, _r22, "begin")); });
|
|
266
|
+
i0.ɵɵelementEnd()();
|
|
267
|
+
i0.ɵɵelementStart(10, "div", 29);
|
|
268
|
+
i0.ɵɵtemplate(11, OgcFilterTimeComponent_div_3_div_2_mat_form_field_11_Template, 6, 6, "mat-form-field", 30);
|
|
269
|
+
i0.ɵɵtemplate(12, OgcFilterTimeComponent_div_3_div_2_mat_form_field_12_Template, 6, 6, "mat-form-field", 31);
|
|
270
|
+
i0.ɵɵelementEnd()();
|
|
271
|
+
i0.ɵɵtemplate(13, OgcFilterTimeComponent_div_3_div_2_div_13_Template, 12, 16, "div", 32);
|
|
272
|
+
i0.ɵɵelementStart(14, "button", 19);
|
|
273
|
+
i0.ɵɵlistener("click", function OgcFilterTimeComponent_div_3_div_2_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r51); const ctx_r54 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r54.resetFilter()); });
|
|
274
|
+
i0.ɵɵpipe(15, "translate");
|
|
275
|
+
i0.ɵɵelement(16, "mat-icon", 20);
|
|
276
|
+
i0.ɵɵelementEnd();
|
|
277
|
+
i0.ɵɵelementStart(17, "mat-slide-toggle", 21);
|
|
278
|
+
i0.ɵɵlistener("change", function OgcFilterTimeComponent_div_3_div_2_Template_mat_slide_toggle_change_17_listener() { i0.ɵɵrestoreView(_r51); const ctx_r55 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r55.toggleFilterState()); });
|
|
279
|
+
i0.ɵɵpipe(18, "translate");
|
|
280
|
+
i0.ɵɵelementEnd()();
|
|
281
|
+
} if (rf & 2) {
|
|
282
|
+
const _r22 = i0.ɵɵreference(9);
|
|
283
|
+
const ctx_r9 = i0.ɵɵnextContext(2);
|
|
284
|
+
i0.ɵɵadvance(3);
|
|
285
|
+
i0.ɵɵproperty("for", _r22)("disabled", ctx_r9.filterStateDisable);
|
|
286
|
+
i0.ɵɵadvance(1);
|
|
287
|
+
i0.ɵɵproperty("matDatepicker", _r22)("placeholder", i0.ɵɵpipeBind1(6, 20, "igo.geo.timeFilter.startDate"))("matDatepickerFilter", ctx_r9.filterBeginFunction)("value", ctx_r9.beginValue ? ctx_r9.beginValue : ctx_r9.handleDate(ctx_r9.datasource.options.minDate))("min", ctx_r9.handleDate(ctx_r9.datasource.options.minDate))("max", ctx_r9.endValue && !ctx_r9.restrictedToStep() ? ctx_r9.endValue : ctx_r9.handleDate(ctx_r9.datasource.options.maxDate))("disabled", ctx_r9.filterStateDisable);
|
|
288
|
+
i0.ɵɵattribute("disabled", !ctx_r9.currentFilter.active);
|
|
289
|
+
i0.ɵɵadvance(4);
|
|
290
|
+
i0.ɵɵproperty("startView", ctx_r9.calendarView())("startAt", ctx_r9.beginValue);
|
|
291
|
+
i0.ɵɵadvance(3);
|
|
292
|
+
i0.ɵɵproperty("ngIf", ctx_r9.calendarType() === "datetime");
|
|
293
|
+
i0.ɵɵadvance(1);
|
|
294
|
+
i0.ɵɵproperty("ngIf", ctx_r9.calendarType() === "datetime");
|
|
295
|
+
i0.ɵɵadvance(1);
|
|
296
|
+
i0.ɵɵproperty("ngIf", !ctx_r9.restrictedToStep());
|
|
297
|
+
i0.ɵɵadvance(1);
|
|
298
|
+
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(15, 22, "igo.geo.filter.resetFilters"))("disabled", ctx_r9.filterStateDisable);
|
|
299
|
+
i0.ɵɵadvance(2);
|
|
300
|
+
i0.ɵɵpropertyInterpolate("svgIcon", ctx_r9.resetIcon);
|
|
301
|
+
i0.ɵɵadvance(1);
|
|
302
|
+
i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(18, 24, "igo.geo.filter.toggleFilterState"))("checked", !ctx_r9.filterStateDisable);
|
|
303
|
+
} }
|
|
304
|
+
function OgcFilterTimeComponent_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
305
|
+
i0.ɵɵelementStart(0, "div");
|
|
306
|
+
i0.ɵɵtemplate(1, OgcFilterTimeComponent_div_3_div_1_Template, 26, 35, "div", 7);
|
|
307
|
+
i0.ɵɵtemplate(2, OgcFilterTimeComponent_div_3_div_2_Template, 19, 26, "div", 8);
|
|
308
|
+
i0.ɵɵelementEnd();
|
|
309
|
+
} if (rf & 2) {
|
|
310
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
311
|
+
i0.ɵɵadvance(1);
|
|
312
|
+
i0.ɵɵproperty("ngIf", ctx_r2.calendarTypeYear);
|
|
313
|
+
i0.ɵɵadvance(1);
|
|
314
|
+
i0.ɵɵproperty("ngIf", ctx_r2.calendarType() !== "year");
|
|
315
|
+
} }
|
|
316
|
+
export class OgcFilterTimeComponent {
|
|
317
|
+
constructor(ogcFilterTimeService) {
|
|
318
|
+
this.ogcFilterTimeService = ogcFilterTimeService;
|
|
319
|
+
this.changeProperty = new EventEmitter();
|
|
320
|
+
this.beginHourFormControl = new UntypedFormControl();
|
|
321
|
+
this.beginMinuteFormControl = new UntypedFormControl();
|
|
322
|
+
this.endHourFormControl = new UntypedFormControl();
|
|
323
|
+
this.endMinuteFormControl = new UntypedFormControl();
|
|
324
|
+
this._defaultMin = '1900-01-01';
|
|
325
|
+
this._defaultMax = '2052-01-06';
|
|
326
|
+
this._defaultDisplayFormat = 'DD/MM/YYYY HH:mm A';
|
|
327
|
+
this._defaultSliderModeEnabled = true;
|
|
328
|
+
this.ogcFilterOperator = OgcFilterOperator;
|
|
329
|
+
this.sliderMode = false;
|
|
330
|
+
this.defaultStepMillisecond = 60000;
|
|
331
|
+
this.calendarTypeYear = false;
|
|
332
|
+
this.resetIcon = 'replay';
|
|
333
|
+
}
|
|
334
|
+
get step() {
|
|
335
|
+
return this.datasource.options.stepDate
|
|
336
|
+
? this.datasource.options.stepDate
|
|
337
|
+
: this.currentFilter.step;
|
|
338
|
+
}
|
|
339
|
+
get stepMilliseconds() {
|
|
340
|
+
const step = moment.duration(this.step).asMilliseconds();
|
|
341
|
+
return step === 0 ? this.defaultStepMillisecond : step;
|
|
342
|
+
}
|
|
343
|
+
set beginValue(begin) {
|
|
344
|
+
this._beginValue = begin;
|
|
345
|
+
}
|
|
346
|
+
get beginValue() {
|
|
347
|
+
return this._beginValue;
|
|
348
|
+
}
|
|
349
|
+
set endValue(end) {
|
|
350
|
+
this._endValue = end;
|
|
351
|
+
}
|
|
352
|
+
get endValue() {
|
|
353
|
+
return this._endValue;
|
|
354
|
+
}
|
|
355
|
+
get sliderInterval() {
|
|
356
|
+
return this.currentFilter.sliderInterval === undefined
|
|
357
|
+
? 2000
|
|
358
|
+
: this.currentFilter.sliderInterval;
|
|
359
|
+
}
|
|
360
|
+
get maxDate() {
|
|
361
|
+
return this.datasource.options.maxDate ? this.datasource.options.maxDate : this._defaultMax;
|
|
362
|
+
}
|
|
363
|
+
get displayFormat() {
|
|
364
|
+
return this.currentFilter.displayFormat ? this.currentFilter.displayFormat : this._defaultDisplayFormat;
|
|
365
|
+
}
|
|
366
|
+
ngOnInit() {
|
|
367
|
+
if (this.currentFilter.sliderOptions) {
|
|
368
|
+
this.currentFilter.sliderOptions.enabled = this.currentFilter.sliderOptions.enabled !== undefined ?
|
|
369
|
+
this.currentFilter.sliderOptions.enabled : this._defaultSliderModeEnabled;
|
|
370
|
+
}
|
|
371
|
+
this.beginValue = this.parseFilter(this.handleMin());
|
|
372
|
+
this.endValue = this.parseFilter(this.handleMax());
|
|
373
|
+
this.onlyYearBegin = this.beginValue.getUTCFullYear();
|
|
374
|
+
this.onlyYearEnd = this.endValue.getUTCFullYear();
|
|
375
|
+
this.calendarTypeYear = this.isCalendarYearMode();
|
|
376
|
+
this.setFilterStateDisable();
|
|
377
|
+
this.updateHoursMinutesArray();
|
|
378
|
+
// update value for now value
|
|
379
|
+
this.updateValues();
|
|
380
|
+
this.dateFilter(this.filterBeginFunction, 'begin');
|
|
381
|
+
this.dateFilter(this.filterEndFunction, 'end');
|
|
382
|
+
}
|
|
383
|
+
parseFilter(filter) {
|
|
384
|
+
if (!filter) {
|
|
385
|
+
return new Date();
|
|
386
|
+
}
|
|
387
|
+
else if (isNaN(new Date(filter).getTime())) {
|
|
388
|
+
if (filter.search('now') >= 0) {
|
|
389
|
+
const interval = filter.match(/years|months|weeks|days|hours|seconds/);
|
|
390
|
+
if (filter.match(/\+/)) {
|
|
391
|
+
const intervalInt = parseInt(filter.substring(filter.search('+') + 1, interval.index), 10);
|
|
392
|
+
return moment().add(intervalInt, interval[0]).toDate();
|
|
393
|
+
}
|
|
394
|
+
if (filter.match(/\-/)) {
|
|
395
|
+
const intervalInt = parseInt(filter.substring(filter.search('-') + 1, interval.index), 10);
|
|
396
|
+
return moment().subtract(intervalInt, interval[0]).toDate();
|
|
397
|
+
}
|
|
398
|
+
return new Date();
|
|
399
|
+
}
|
|
400
|
+
if (filter.search('today') >= 0) {
|
|
401
|
+
const _now = moment().endOf('day').toDate();
|
|
402
|
+
const interval = filter.match(/years|months|weeks|days|hours|seconds/);
|
|
403
|
+
if (filter.match(/\+/)) {
|
|
404
|
+
const intervalInt = parseInt(filter.substring(filter.search('+') + 1, interval.index), 10);
|
|
405
|
+
return moment(_now).add(intervalInt, interval[0]).toDate();
|
|
406
|
+
}
|
|
407
|
+
if (filter.match(/\-/)) {
|
|
408
|
+
const intervalInt = parseInt(filter.substring(filter.search('-') + 1, interval.index), 10);
|
|
409
|
+
return moment(_now).subtract(intervalInt, interval[0]).toDate();
|
|
410
|
+
}
|
|
411
|
+
return _now;
|
|
412
|
+
}
|
|
413
|
+
return new Date();
|
|
414
|
+
}
|
|
415
|
+
if (this.currentFilter.calendarModeYear) {
|
|
416
|
+
const date = this.getDateFromStringWithoutTime(filter);
|
|
417
|
+
return date;
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
return filter ? new Date(filter) : new Date();
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
changeTemporalProperty(value, position, refreshFilter = true) {
|
|
424
|
+
let valueTmp = this.getDateTime(value, position);
|
|
425
|
+
if (this.isCalendarYearMode()) {
|
|
426
|
+
let dateStringFromYearNotime;
|
|
427
|
+
if (position === 1) {
|
|
428
|
+
this.beginValue = value;
|
|
429
|
+
this.onlyYearBegin = this.beginValue.getFullYear();
|
|
430
|
+
dateStringFromYearNotime = `${this.onlyYearBegin}-01-01`;
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
this.endValue = value;
|
|
434
|
+
this.onlyYearEnd = this.endValue.getFullYear();
|
|
435
|
+
dateStringFromYearNotime = `${this.onlyYearEnd}-01-01`;
|
|
436
|
+
}
|
|
437
|
+
// call service with string date without time
|
|
438
|
+
this.changeProperty.next({ value: dateStringFromYearNotime, pos: position, refreshFilter });
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
if (position === 2 && this.calendarType() === 'date' && !this.sliderMode) {
|
|
442
|
+
/* Above month: see yearSelected or monthSelected */
|
|
443
|
+
valueTmp = moment(valueTmp).endOf('day').toDate();
|
|
444
|
+
}
|
|
445
|
+
if (position === 1) {
|
|
446
|
+
this.beginValue = valueTmp;
|
|
447
|
+
if (this.restrictedToStep()) {
|
|
448
|
+
this.changeTemporalProperty(this.ogcFilterTimeService.addStep(valueTmp, this.stepMilliseconds), 2, refreshFilter);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
else {
|
|
452
|
+
this.endValue = valueTmp;
|
|
453
|
+
}
|
|
454
|
+
this.updateHoursMinutesArray();
|
|
455
|
+
this.changeProperty.next({ value: valueTmp.toISOString(), pos: position, refreshFilter });
|
|
456
|
+
}
|
|
457
|
+
handleDate(value) {
|
|
458
|
+
if (!value || value === '') {
|
|
459
|
+
return undefined;
|
|
460
|
+
}
|
|
461
|
+
if (typeof (value) === 'string' && this.currentFilter.calendarModeYear) {
|
|
462
|
+
return this.getDateFromStringWithoutTime(value);
|
|
463
|
+
}
|
|
464
|
+
return new Date(value);
|
|
465
|
+
}
|
|
466
|
+
calendarType() {
|
|
467
|
+
if (this.currentFilter.calendarModeYear) {
|
|
468
|
+
return 'year';
|
|
469
|
+
}
|
|
470
|
+
if (this.stepMilliseconds < 86400000) {
|
|
471
|
+
return 'datetime';
|
|
472
|
+
}
|
|
473
|
+
return 'date';
|
|
474
|
+
}
|
|
475
|
+
isCalendarYearMode() {
|
|
476
|
+
if (this.calendarType() === 'year') {
|
|
477
|
+
return true;
|
|
478
|
+
}
|
|
479
|
+
else {
|
|
480
|
+
return false;
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
yearOnlyInputChange(changeEvent, datePicker, property) {
|
|
484
|
+
const year = changeEvent.target.value;
|
|
485
|
+
const date = this.getDateFromStringWithoutTime(year);
|
|
486
|
+
this.yearSelected(date, datePicker, property);
|
|
487
|
+
}
|
|
488
|
+
yearSelected(year, datePicker, property, refreshFilter = true) {
|
|
489
|
+
if (this.ogcFilterTimeService.stepIsYearDuration(this.step)) {
|
|
490
|
+
if (datePicker) {
|
|
491
|
+
datePicker.close();
|
|
492
|
+
}
|
|
493
|
+
if (property === 'end') {
|
|
494
|
+
// change value 01 jan to 31 dec same year
|
|
495
|
+
year = moment(year).endOf('year').toDate();
|
|
496
|
+
}
|
|
497
|
+
else if (property === 'begin' && this.restrictedToStep() && !this.calendarTypeYear) {
|
|
498
|
+
this.yearSelected(year, undefined, 'end');
|
|
499
|
+
}
|
|
500
|
+
this.changeTemporalProperty(year, property === 'begin' ? 1 : 2, refreshFilter);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
monthSelected(month, datePicker, property, refreshFilter = true) {
|
|
504
|
+
if (this.ogcFilterTimeService.stepIsMonthDuration(this.step)) {
|
|
505
|
+
if (datePicker) {
|
|
506
|
+
datePicker.close();
|
|
507
|
+
}
|
|
508
|
+
if (property === 'end') {
|
|
509
|
+
month = moment(month).endOf('month').toDate();
|
|
510
|
+
}
|
|
511
|
+
else if (property === 'begin' && this.restrictedToStep()) {
|
|
512
|
+
this.monthSelected(month, undefined, 'end');
|
|
513
|
+
}
|
|
514
|
+
this.changeTemporalProperty(month, property === 'begin' ? 1 : 2, refreshFilter);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
calendarView() {
|
|
518
|
+
const test = this.stepMilliseconds;
|
|
519
|
+
const diff = Math.abs(this.parseFilter(this.currentFilter.end).getTime() -
|
|
520
|
+
this.parseFilter(this.currentFilter.begin).getTime());
|
|
521
|
+
if (this.ogcFilterTimeService.stepIsYearDuration(this.step)) {
|
|
522
|
+
return 'multi-year';
|
|
523
|
+
}
|
|
524
|
+
else if (this.ogcFilterTimeService.stepIsMonthDuration(this.step)) {
|
|
525
|
+
return 'year';
|
|
526
|
+
}
|
|
527
|
+
else if (test < 86400000 && diff < 86400000) {
|
|
528
|
+
return 'clock';
|
|
529
|
+
}
|
|
530
|
+
else {
|
|
531
|
+
return 'month';
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
dateFilter(type, date) {
|
|
535
|
+
const dateValue = new Date(date);
|
|
536
|
+
const diff = dateValue.getTime() - new Date(this.handleMin()).getTime();
|
|
537
|
+
if (this.ogcFilterTimeService.stepIsYearDuration(this.step)) {
|
|
538
|
+
const monthDiff = moment(dateValue).diff(moment(this.handleMin()), 'years', true);
|
|
539
|
+
if (type === 'end') {
|
|
540
|
+
const dateValuePlus1 = moment(dateValue).add(1, 'd');
|
|
541
|
+
const monthDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'years', true);
|
|
542
|
+
this.filterEndFunction = (monthDiffPlus1 % moment.duration(this.step).asYears()) === 0;
|
|
543
|
+
return;
|
|
544
|
+
}
|
|
545
|
+
else if (type === 'begin') {
|
|
546
|
+
this.filterBeginFunction = (monthDiff % moment.duration(this.step).asYears()) === 0;
|
|
547
|
+
return;
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
else if (this.ogcFilterTimeService.stepIsMonthDuration(this.step)) {
|
|
551
|
+
const monthDiff = moment(dateValue).diff(moment(this.handleMin()), 'months', true);
|
|
552
|
+
if (type === 'end') {
|
|
553
|
+
const dateValuePlus1 = moment(dateValue).add(1, 'd');
|
|
554
|
+
const monthDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'months', true);
|
|
555
|
+
this.filterEndFunction = (monthDiffPlus1 % moment.duration(this.step).asMonths()) === 0;
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
else if (type === 'begin') {
|
|
559
|
+
this.filterBeginFunction = (monthDiff % moment.duration(this.step).asMonths()) === 0;
|
|
560
|
+
return;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
else if (this.ogcFilterTimeService.stepIsWeekDuration(this.step)) {
|
|
564
|
+
const weekDiff = moment(dateValue).diff(moment(this.handleMin()), 'weeks', true);
|
|
565
|
+
if (type === 'end') {
|
|
566
|
+
const dateValuePlus1 = moment(dateValue).add(1, 'd');
|
|
567
|
+
const weekDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'weeks', true);
|
|
568
|
+
this.filterEndFunction = (weekDiffPlus1 % moment.duration(this.step).asWeeks()) === 0;
|
|
569
|
+
return;
|
|
570
|
+
}
|
|
571
|
+
else if (type === 'begin') {
|
|
572
|
+
this.filterBeginFunction = (weekDiff % moment.duration(this.step).asWeeks()) === 0;
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
else if (this.ogcFilterTimeService.stepIsDayDuration(this.step)) {
|
|
577
|
+
const dayDiff = moment(dateValue).diff(moment(this.handleMin()), 'days', true);
|
|
578
|
+
if (type === 'end') {
|
|
579
|
+
const dateValuePlus1 = moment(dateValue).add(1, 'd');
|
|
580
|
+
const dayDiffPlus1 = moment(dateValuePlus1).diff(moment(this.handleMin()), 'days', true);
|
|
581
|
+
const _mod = (dayDiffPlus1 % moment.duration(this.step).asDays());
|
|
582
|
+
this.filterEndFunction = (_mod < 0.0000001 && _mod > -0.0000001) || _mod === 0; // 1 millisecond = 1.1574074074074076e-8
|
|
583
|
+
return;
|
|
584
|
+
}
|
|
585
|
+
else if (type === 'begin') {
|
|
586
|
+
const _mod = ((dayDiff % moment.duration(this.step).asDays()) + 1);
|
|
587
|
+
this.filterBeginFunction = (_mod < 0.0000001 && _mod > -0.0000001 && _mod !== 0) || _mod === 1; // 1 millisecond = 1.1574074074074076e-8
|
|
588
|
+
return;
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
else if (this.ogcFilterTimeService.stepIsHourDuration(this.step)) {
|
|
592
|
+
if (type === 'end') {
|
|
593
|
+
const hourDiff = moment(dateValue).diff(moment(this.handleMin()), 'hours', true);
|
|
594
|
+
this.filterEndFunction = (hourDiff % moment.duration(this.step).asHours()) === 0;
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
597
|
+
else if (type === 'begin') {
|
|
598
|
+
const hourDiff = moment(dateValue).diff(moment(this.handleMin()), 'hours', true);
|
|
599
|
+
this.filterBeginFunction = (hourDiff % moment.duration(this.step).asHours()) === 0;
|
|
600
|
+
return;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
else if (this.ogcFilterTimeService.stepIsMinuteDuration(this.step)) {
|
|
604
|
+
if (type === 'end') {
|
|
605
|
+
this.filterEndFunction = true;
|
|
606
|
+
return;
|
|
607
|
+
}
|
|
608
|
+
else if (type === 'begin') {
|
|
609
|
+
this.filterBeginFunction = true;
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
this.filterEndFunction = diff % this.stepMilliseconds === 0;
|
|
614
|
+
this.filterBeginFunction = diff % this.stepMilliseconds === 0;
|
|
615
|
+
return;
|
|
616
|
+
}
|
|
617
|
+
getDateTime(date, pos) {
|
|
618
|
+
const valuetmp = new Date(date);
|
|
619
|
+
let valuetmp2;
|
|
620
|
+
if (!this.sliderMode) {
|
|
621
|
+
switch (pos) {
|
|
622
|
+
case 1: {
|
|
623
|
+
if (this.currentFilter.calendarModeYear) {
|
|
624
|
+
valuetmp2 = valuetmp.setHours(0, 0);
|
|
625
|
+
break;
|
|
626
|
+
}
|
|
627
|
+
else {
|
|
628
|
+
valuetmp2 = valuetmp.setHours(this.beginHourFormControl.value, this.beginMinuteFormControl.value);
|
|
629
|
+
break;
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
case 2: {
|
|
633
|
+
if (this.currentFilter.calendarModeYear) {
|
|
634
|
+
valuetmp2 = valuetmp.setHours(0, 0);
|
|
635
|
+
break;
|
|
636
|
+
}
|
|
637
|
+
else {
|
|
638
|
+
valuetmp2 = valuetmp.setHours(this.endHourFormControl.value, this.endMinuteFormControl.value);
|
|
639
|
+
break;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
return new Date(valuetmp2 ? valuetmp2 : valuetmp);
|
|
645
|
+
}
|
|
646
|
+
handleMinuteIncrement() {
|
|
647
|
+
if (this.ogcFilterTimeService.stepIsMinuteDuration(this.step)) {
|
|
648
|
+
if (this.stepMilliseconds < 3600000) {
|
|
649
|
+
return this.stepMilliseconds / 1000 === 60 ? 1 : this.stepMilliseconds / 1000;
|
|
650
|
+
}
|
|
651
|
+
else {
|
|
652
|
+
return (this.stepMilliseconds % 3600000) / 60;
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
else if (this.ogcFilterTimeService.stepIsHourDuration(this.step)) {
|
|
656
|
+
return 60;
|
|
657
|
+
}
|
|
658
|
+
return 1;
|
|
659
|
+
}
|
|
660
|
+
handleHourIncrement() {
|
|
661
|
+
if (this.ogcFilterTimeService.stepIsHourDuration(this.step)) {
|
|
662
|
+
return this.stepMilliseconds / 1000 / 60 / 60;
|
|
663
|
+
}
|
|
664
|
+
return 1;
|
|
665
|
+
}
|
|
666
|
+
fullBeginHoursArray(checkEndValue) {
|
|
667
|
+
if (checkEndValue) {
|
|
668
|
+
this.beginHours = Array.from({
|
|
669
|
+
length: (this.endHourFormControl.value - 0) / this.handleHourIncrement() + 1
|
|
670
|
+
}, (_, i) => 0 + i * this.handleHourIncrement());
|
|
671
|
+
}
|
|
672
|
+
else {
|
|
673
|
+
this.beginHours = Array.from({ length: (23 - 0) / this.handleHourIncrement() + 1 }, (_, i) => 0 + i * this.handleHourIncrement());
|
|
674
|
+
}
|
|
675
|
+
this.beginHourFormControl.setValue(this.beginValue.getHours());
|
|
676
|
+
}
|
|
677
|
+
fullEndHoursArray(checkEndValue) {
|
|
678
|
+
if (checkEndValue) {
|
|
679
|
+
this.endHours = Array.from({
|
|
680
|
+
length: (23 - this.beginHourFormControl.value) /
|
|
681
|
+
this.handleHourIncrement() +
|
|
682
|
+
1
|
|
683
|
+
}, (_, i) => this.beginHourFormControl.value + i * this.handleHourIncrement());
|
|
684
|
+
}
|
|
685
|
+
else {
|
|
686
|
+
this.endHours = Array.from({ length: (23 - 0) / this.handleHourIncrement() + 1 }, (_, i) => 0 + i * this.handleHourIncrement());
|
|
687
|
+
}
|
|
688
|
+
this.endHourFormControl.setValue(this.endValue.getHours());
|
|
689
|
+
}
|
|
690
|
+
fullBeginMinutesArray(checkEndValue) {
|
|
691
|
+
if (checkEndValue) {
|
|
692
|
+
this.beginMinutes = Array.from({
|
|
693
|
+
length: (this.endMinuteFormControl.value - 0) /
|
|
694
|
+
this.handleMinuteIncrement() +
|
|
695
|
+
1
|
|
696
|
+
}, (_, i) => 0 + i * this.handleMinuteIncrement());
|
|
697
|
+
}
|
|
698
|
+
else {
|
|
699
|
+
this.beginMinutes = Array.from({ length: (59 - 0) / this.handleMinuteIncrement() + 1 }, (_, i) => 0 + i * this.handleMinuteIncrement());
|
|
700
|
+
}
|
|
701
|
+
this.beginMinuteFormControl.setValue(this.beginValue.getMinutes());
|
|
702
|
+
}
|
|
703
|
+
fullEndMinutesArray(checkEndValue) {
|
|
704
|
+
if (checkEndValue) {
|
|
705
|
+
this.endMinutes = Array.from({
|
|
706
|
+
length: (59 - this.beginMinuteFormControl.value) /
|
|
707
|
+
this.handleMinuteIncrement() +
|
|
708
|
+
1
|
|
709
|
+
}, (_, i) => this.beginMinuteFormControl.value + i * this.handleMinuteIncrement());
|
|
710
|
+
}
|
|
711
|
+
else {
|
|
712
|
+
this.endMinutes = Array.from({ length: (59 - 0) / this.handleMinuteIncrement() + 1 }, (_, i) => 0 + i * this.handleMinuteIncrement());
|
|
713
|
+
}
|
|
714
|
+
this.endMinuteFormControl.setValue(this.endValue.getMinutes());
|
|
715
|
+
}
|
|
716
|
+
updateHoursMinutesArray() {
|
|
717
|
+
const beginTmp = new Date(this.beginValue);
|
|
718
|
+
const endTmp = new Date(this.endValue);
|
|
719
|
+
if (beginTmp.setHours(0, 0) === endTmp.setHours(0, 0)) {
|
|
720
|
+
this.fullBeginHoursArray(true);
|
|
721
|
+
this.fullEndHoursArray(true);
|
|
722
|
+
if (this.beginValue.getHours() === this.endValue.getHours()) {
|
|
723
|
+
this.fullBeginMinutesArray(true);
|
|
724
|
+
this.fullEndMinutesArray(true);
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
else {
|
|
728
|
+
this.fullBeginHoursArray();
|
|
729
|
+
this.fullEndHoursArray();
|
|
730
|
+
this.fullBeginMinutesArray();
|
|
731
|
+
this.fullEndMinutesArray();
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
updateValues() {
|
|
735
|
+
this.changeTemporalProperty(this.beginValue, 1, false);
|
|
736
|
+
this.changeTemporalProperty(this.endValue, 2, true);
|
|
737
|
+
}
|
|
738
|
+
restrictedToStep() {
|
|
739
|
+
return this.currentFilter.restrictToStep
|
|
740
|
+
? this.currentFilter.restrictToStep : false;
|
|
741
|
+
}
|
|
742
|
+
handleMin() {
|
|
743
|
+
return this.currentFilter.begin ? this.currentFilter.begin :
|
|
744
|
+
(this.datasource.options.minDate ? this.datasource.options.minDate : this._defaultMin);
|
|
745
|
+
}
|
|
746
|
+
handleMax() {
|
|
747
|
+
return this.currentFilter.end ? this.currentFilter.end :
|
|
748
|
+
(this.datasource.options.maxDate ? this.datasource.options.maxDate : this._defaultMax);
|
|
749
|
+
}
|
|
750
|
+
changePropertyByPass(event) {
|
|
751
|
+
this.changeProperty.next(event);
|
|
752
|
+
}
|
|
753
|
+
modeChange(event) {
|
|
754
|
+
if (!event.checked) {
|
|
755
|
+
this.updateValues();
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
setFilterStateDisable() {
|
|
759
|
+
if (this.currentFilter) {
|
|
760
|
+
this.filterStateDisable = !this.currentFilter.active;
|
|
761
|
+
}
|
|
762
|
+
else {
|
|
763
|
+
this.filterStateDisable = false;
|
|
764
|
+
}
|
|
765
|
+
if (this.calendarType() === 'datetime') {
|
|
766
|
+
if (this.filterStateDisable === true) {
|
|
767
|
+
this.beginHourFormControl.disable();
|
|
768
|
+
this.beginMinuteFormControl.disable();
|
|
769
|
+
this.endHourFormControl.disable();
|
|
770
|
+
this.endMinuteFormControl.disable();
|
|
771
|
+
}
|
|
772
|
+
else {
|
|
773
|
+
this.beginHourFormControl.enable();
|
|
774
|
+
this.beginMinuteFormControl.enable();
|
|
775
|
+
this.endHourFormControl.enable();
|
|
776
|
+
this.endMinuteFormControl.enable();
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
getDateFromStringWithoutTime(stringDate) {
|
|
781
|
+
// warning create date with no time make a date UTC with TZ and the date create maybe not the same year, month and day
|
|
782
|
+
// exemple:
|
|
783
|
+
// new Date('2022-01-01') -> Fri Dec 31 2021 19:00:00 GMT-0500 (heure normale de l’Est nord-américain)
|
|
784
|
+
// to create same date as string, add time 00 in the creation
|
|
785
|
+
// new Date('2022-01-01 00:00:00') -> Sat Jan 01 2022 00:00:00 GMT-0500 (heure normale de l’Est nord-américain)
|
|
786
|
+
let year;
|
|
787
|
+
let month = '01';
|
|
788
|
+
let day = '01';
|
|
789
|
+
if (stringDate.length === 10) {
|
|
790
|
+
const dateItems = stringDate.split('-');
|
|
791
|
+
if (dateItems.length !== 3) {
|
|
792
|
+
throw new Error('Error in config date begin-end for ogcFilter: Date without time format need to be YYYY-MM-DD or YYYY');
|
|
793
|
+
}
|
|
794
|
+
else {
|
|
795
|
+
year = dateItems[0];
|
|
796
|
+
month = dateItems[1];
|
|
797
|
+
day = dateItems[2];
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
else if (stringDate.length === 4) {
|
|
801
|
+
year = stringDate;
|
|
802
|
+
}
|
|
803
|
+
else {
|
|
804
|
+
return new Date(stringDate);
|
|
805
|
+
}
|
|
806
|
+
return new Date(`${year}-${month}-${day} 00:00:00`);
|
|
807
|
+
}
|
|
808
|
+
resetFilter() {
|
|
809
|
+
let filterOriginConfig = this.datasource.options.ogcFilters.filters;
|
|
810
|
+
let minDefaultDate;
|
|
811
|
+
let maxDefaultDate;
|
|
812
|
+
let minDefaultISOString;
|
|
813
|
+
let maxDefaultISOString;
|
|
814
|
+
if (this.calendarTypeYear) {
|
|
815
|
+
if (filterOriginConfig.end === 'today') {
|
|
816
|
+
let todayDateStringNoTime = new Date().toLocaleDateString('en-CA'); // '2022-02-13'
|
|
817
|
+
maxDefaultISOString = `${todayDateStringNoTime.substring(0, 4)}-01-01`;
|
|
818
|
+
}
|
|
819
|
+
else {
|
|
820
|
+
maxDefaultISOString = `${filterOriginConfig.end.substring(0, 4)}-01-01`;
|
|
821
|
+
}
|
|
822
|
+
minDefaultISOString = `${filterOriginConfig.begin.substring(0, 4)}-01-01`;
|
|
823
|
+
minDefaultDate = this.getDateFromStringWithoutTime(minDefaultISOString);
|
|
824
|
+
maxDefaultDate = this.getDateFromStringWithoutTime(maxDefaultISOString);
|
|
825
|
+
}
|
|
826
|
+
else {
|
|
827
|
+
minDefaultDate = this.parseFilter(filterOriginConfig.begin);
|
|
828
|
+
maxDefaultDate = this.parseFilter(filterOriginConfig.end);
|
|
829
|
+
minDefaultISOString = minDefaultDate.toISOString();
|
|
830
|
+
maxDefaultISOString = maxDefaultDate.toISOString();
|
|
831
|
+
}
|
|
832
|
+
if ((this.currentFilter.begin !== minDefaultISOString) ||
|
|
833
|
+
(this.currentFilter.end !== maxDefaultISOString)) {
|
|
834
|
+
this.beginValue = minDefaultDate;
|
|
835
|
+
this.endValue = maxDefaultDate;
|
|
836
|
+
this.updateValues();
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
toggleFilterState() {
|
|
840
|
+
if (this.currentFilter.active === true) {
|
|
841
|
+
this.currentFilter.active = false;
|
|
842
|
+
}
|
|
843
|
+
else {
|
|
844
|
+
this.currentFilter.active = true;
|
|
845
|
+
}
|
|
846
|
+
this.setFilterStateDisable();
|
|
847
|
+
this.updateValues();
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
OgcFilterTimeComponent.ɵfac = function OgcFilterTimeComponent_Factory(t) { return new (t || OgcFilterTimeComponent)(i0.ɵɵdirectiveInject(i1.OGCFilterTimeService)); };
|
|
851
|
+
OgcFilterTimeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OgcFilterTimeComponent, selectors: [["igo-ogc-filter-time"]], viewQuery: function OgcFilterTimeComponent_Query(rf, ctx) { if (rf & 1) {
|
|
852
|
+
i0.ɵɵviewQuery(_c0, 5);
|
|
853
|
+
i0.ɵɵviewQuery(_c1, 5);
|
|
854
|
+
i0.ɵɵviewQuery(_c2, 5);
|
|
855
|
+
i0.ɵɵviewQuery(_c3, 5);
|
|
856
|
+
} if (rf & 2) {
|
|
857
|
+
let _t;
|
|
858
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.endDatepickerTime = _t.first);
|
|
859
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.beginDatepickerTime = _t.first);
|
|
860
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.beginTime = _t.first);
|
|
861
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.endTime = _t.first);
|
|
862
|
+
} }, inputs: { datasource: "datasource", currentFilter: "currentFilter" }, outputs: { changeProperty: "changeProperty" }, decls: 4, vars: 3, consts: [[1, "datetime-container"], [3, "ngModel", "ngModelChange", "change", 4, "ngIf"], ["class", "slider-container", 4, "ngIf"], [4, "ngIf"], [3, "ngModel", "ngModelChange", "change"], [1, "slider-container"], [3, "begin", "max", "currentFilter", "datasource", "changeProperty"], ["class", "year-input-container", 4, "ngIf"], ["class", "datetime-input-container", 4, "ngIf"], [1, "year-input-container"], [1, "year-input"], ["matInput", "", 1, "year-input-only-year", 3, "value", "disabled", "change"], ["matSuffix", "", 3, "for", "disabled"], ["panelClass", "datepicker-year", 3, "startView", "startAt", "yearSelected"], ["beginDatepicker", ""], ["matInput", "", "enabled", "false", "readonly", "true", 1, "year-input-hide", 3, "matDatepicker", "value", "min", "max"], ["beginYear", ""], ["endDatepicker", ""], ["endYear", ""], ["mat-icon-button", "", "color", "primary", 1, "reset-button", 3, "matTooltip", "disabled", "click"], [3, "svgIcon"], ["tooltip-position", "below", "matTooltipShowDelay", "500", 1, "toggle-filter-state", 3, "matTooltip", "checked", "change"], [1, "datetime-input-container"], [1, "datetime-input"], [1, "date-input"], ["matInput", "", 3, "matDatepicker", "placeholder", "matDatepickerFilter", "value", "min", "max", "disabled", "dateChange"], ["begin", ""], [1, "filler"], [3, "startView", "startAt", "yearSelected", "monthSelected"], [1, "time-input"], ["class", "hour-input", 4, "ngIf"], ["class", "minute-input", 4, "ngIf"], ["class", "datetime-input", 4, "ngIf"], [1, "hour-input"], [3, "formControl", "selectionChange"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], [1, "minute-input"], ["end", ""]], template: function OgcFilterTimeComponent_Template(rf, ctx) { if (rf & 1) {
|
|
863
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
864
|
+
i0.ɵɵtemplate(1, OgcFilterTimeComponent_mat_slide_toggle_1_Template, 3, 4, "mat-slide-toggle", 1);
|
|
865
|
+
i0.ɵɵtemplate(2, OgcFilterTimeComponent_div_2_Template, 2, 4, "div", 2);
|
|
866
|
+
i0.ɵɵtemplate(3, OgcFilterTimeComponent_div_3_Template, 3, 2, "div", 3);
|
|
867
|
+
i0.ɵɵelementEnd();
|
|
868
|
+
} if (rf & 2) {
|
|
869
|
+
i0.ɵɵadvance(1);
|
|
870
|
+
i0.ɵɵproperty("ngIf", ctx.currentFilter.sliderOptions == null ? null : ctx.currentFilter.sliderOptions.enabled);
|
|
871
|
+
i0.ɵɵadvance(1);
|
|
872
|
+
i0.ɵɵproperty("ngIf", ctx.sliderMode);
|
|
873
|
+
i0.ɵɵadvance(1);
|
|
874
|
+
i0.ɵɵproperty("ngIf", !ctx.sliderMode);
|
|
875
|
+
} }, styles: ["input{text-align:center!important;margin:auto 5px!important}.slider-container[_ngcontent-%COMP%]{text-align:center}.datetime-input[_ngcontent-%COMP%]{display:inline-block;width:100px;margin:10px 0 5px 10px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.datetime-input[_ngcontent-%COMP%]{width:36%;margin:0}}.date-input[_ngcontent-%COMP%]{width:100px;margin-right:25px}.time-input[_ngcontent-%COMP%]{margin-right:25px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.time-input[_ngcontent-%COMP%]{margin-right:5px}}.hour-input[_ngcontent-%COMP%], .minute-input[_ngcontent-%COMP%]{width:35px;margin-left:7px}.year-input[_ngcontent-%COMP%]{width:98px;margin:10px 14px 5px 4px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.year-input[_ngcontent-%COMP%]{width:32%;margin:0 0 0 10px}}.year-input-hide[_ngcontent-%COMP%]{width:120px;margin-right:25px;display:none}.year-input-only-year[_ngcontent-%COMP%]{width:120px;margin-right:25px}.reset-button[_ngcontent-%COMP%]{width:25px;padding-left:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.reset-button[_ngcontent-%COMP%]{padding-left:8px}}.toggle-filter-state[_ngcontent-%COMP%]{padding-left:20px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.toggle-filter-state[_ngcontent-%COMP%]{padding-left:12px}} .datepicker-year .mat-calendar-arrow{display:none} .datepicker-year .mat-calendar-period-button{pointer-events:none} .datepicker-year .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}"] });
|
|
876
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OgcFilterTimeComponent, [{
|
|
877
|
+
type: Component,
|
|
878
|
+
args: [{ selector: 'igo-ogc-filter-time', template: "<div class=\"datetime-container\">\n <mat-slide-toggle \n *ngIf=\"this.currentFilter.sliderOptions?.enabled\"\n [(ngModel)]=\"sliderMode\"\n (change)=\"modeChange($event)\">\n {{'igo.geo.filter.sliderModeTitle' | translate}}\n </mat-slide-toggle>\n\n <div class=\"slider-container\" *ngIf=\"sliderMode\">\n <igo-ogc-filter-time-slider\n [begin]=\"beginValue\"\n [max]=\"this.restrictedToStep() ? this.maxDate : this.endValue\"\n [currentFilter]=\"currentFilter\" \n [datasource]=\"datasource\"\n (changeProperty)=\"changePropertyByPass($event)\"\n >\n </igo-ogc-filter-time-slider>\n \n </div>\n\n <div *ngIf=\"!sliderMode\">\n\n <div class=\"year-input-container\" *ngIf=\"calendarTypeYear\">\n <!-- to emulate a year-picker, 2 input: first input to show user just year and second input hiden and bind \n with the datepicker -->\n <mat-form-field class=\"year-input\">\n <mat-label>{{'igo.geo.timeFilter.startYear'| translate}}</mat-label>\n <input\n matInput\n class=\"year-input-only-year\"\n value=\"{{onlyYearBegin}}\"\n (change)= \"yearOnlyInputChange($event, beginDatepicker, 'begin')\"\n [disabled]= \"filterStateDisable\"\n >\n <mat-datepicker-toggle matSuffix [for]=\"beginDatepicker\" [disabled]=\"filterStateDisable\"></mat-datepicker-toggle>\n \n <mat-datepicker\n panelClass=\"datepicker-year\"\n #beginDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"beginValue\"\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n >\n </mat-datepicker>\n\n <input #beginYear\n class= \"year-input-hide\"\n matInput\n [matDatepicker]=\"beginDatepicker\"\n enabled= false\n readonly= true\n [value]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"(endValue && (!restrictedToStep()))?endValue:handleDate(datasource.options.maxDate)\"\n >\n </mat-form-field>\n\n <mat-form-field class=\"year-input\">\n <mat-label>{{'igo.geo.timeFilter.endYear'| translate}}</mat-label>\n <input\n matInput\n class=\"year-input-only-year\"\n value=\"{{onlyYearEnd}}\"\n (change)= \"yearOnlyInputChange($event, endDatepicker, 'end')\"\n [disabled] = \"filterStateDisable\">\n <mat-datepicker-toggle matSuffix [for]=\"endDatepicker\" [disabled]=\"filterStateDisable\"></mat-datepicker-toggle>\n <mat-datepicker\n panelClass=\"datepicker-year\"\n #endDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"endValue\"\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n >\n </mat-datepicker>\n\n <input #endYear\n class= \"year-input-hide\"\n matInput\n [matDatepicker]=\"endDatepicker\"\n enabled= false\n readonly= true\n [value]=\"endValue?endValue:handleDate(datasource.options.maxDate)\"\n [min]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [max]=\"handleDate(datasource.options.maxDate)\"\n >\n </mat-form-field>\n <button class=\"reset-button\" \n mat-icon-button\n color=\"primary\" \n (click)=\"resetFilter()\" \n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" \n [disabled]= \"filterStateDisable\">\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\n </button>\n <mat-slide-toggle \n class='toggle-filter-state' \n (change)=\"toggleFilterState()\" \n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" \n tooltip-position=\"below\" \n matTooltipShowDelay=\"500\"\n [checked]=\"!filterStateDisable\">\n </mat-slide-toggle>\n\n </div>\n\n <div class=\"datetime-input-container\" *ngIf=\"calendarType()!=='year'\">\n <div class=\"datetime-input\">\n <mat-form-field class=\"date-input\">\n <mat-datepicker-toggle matSuffix [for]=\"beginDatepicker\" [disabled]= \"filterStateDisable\"></mat-datepicker-toggle>\n <input #begin\n matInput\n [matDatepicker]=\"beginDatepicker\"\n [placeholder]=\"'igo.geo.timeFilter.startDate' | translate\"\n [attr.disabled]=\"!currentFilter.active\"\n (dateChange)=\"changeTemporalProperty(begin.value, 1)\"\n [matDatepickerFilter]=\"filterBeginFunction\"\n [value]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [min]=\"handleDate(datasource.options.minDate)\"\n [max]=\"(endValue && (!restrictedToStep()))?endValue:handleDate(datasource.options.maxDate)\" \n [disabled]= \"filterStateDisable\">\n <span class=\"filler\"></span>\n <mat-datepicker\n #beginDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"beginValue\"\n (yearSelected)=\"yearSelected($event, beginDatepicker, 'begin')\"\n (monthSelected)=\"monthSelected($event, beginDatepicker, 'begin')\">\n </mat-datepicker>\n </mat-form-field>\n\n <div class=\"time-input\">\n <mat-form-field class=\"hour-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.hour' | translate}}</mat-label>\n <mat-select\n [formControl]=\"beginHourFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\">\n <mat-option *ngFor=\"let hour of beginHours\" [value]=\"hour\">{{hour}}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.minute' | translate}}</mat-label>\n <mat-select\n [formControl]=\"beginMinuteFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(begin.value, 1)\">\n <mat-option *ngFor=\"let minute of beginMinutes\" [value]=\"minute\">{{minute}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <div class=\"datetime-input\" *ngIf=\"!restrictedToStep()\">\n <mat-form-field class=\"date-input\">\n <mat-datepicker-toggle matSuffix [for]=\"endDatepicker\" [disabled]= \"filterStateDisable\"></mat-datepicker-toggle>\n <input #end\n matInput\n [matDatepicker]=\"endDatepicker\"\n [placeholder]=\"'igo.geo.timeFilter.endDate' | translate\"\n [attr.disabled]=\"!currentFilter.active\"\n (dateChange)=\"changeTemporalProperty(end.value, 2)\"\n [matDatepickerFilter]=\"filterEndFunction\"\n [value]=\"endValue?endValue:handleDate(datasource.options.maxDate)\"\n [min]=\"beginValue?beginValue:handleDate(datasource.options.minDate)\"\n [max]=\"handleDate(datasource.options.maxDate)\" \n [disabled]= \"filterStateDisable\">\n <span class=\"filler\"></span>\n <mat-datepicker #endDatepicker\n [startView]=\"calendarView()\"\n [startAt]=\"endValue\"\n (yearSelected)=\"yearSelected($event, endDatepicker, 'end')\"\n (monthSelected)=\"monthSelected($event, endDatepicker, 'end')\">\n </mat-datepicker>\n </mat-form-field>\n\n <div class=\"time-input\">\n <mat-form-field class=\"hour-input\" *ngIf=\"calendarType()==='datetime'\" >\n <mat-label>{{'igo.geo.timeFilter.hour' | translate}}</mat-label>\n <mat-select\n [formControl]=\"endHourFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\">\n <mat-option *ngFor=\"let hour of endHours\" [value]=\"hour\">{{hour}}</mat-option>\n </mat-select>\n </mat-form-field>\n <mat-form-field class=\"minute-input\" *ngIf=\"calendarType()==='datetime'\">\n <mat-label>{{'igo.geo.timeFilter.minute' | translate}}</mat-label>\n <mat-select\n [formControl]=\"endMinuteFormControl\"\n [attr.disabled]=\"!currentFilter.active\"\n (selectionChange)=\"changeTemporalProperty(end.value, 2)\">\n <mat-option *ngFor=\"let minute of endMinutes\" [value]=\"minute\">{{minute}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n\n <button class=\"reset-button\" \n mat-icon-button color=\"primary\"\n (click)=\"resetFilter()\" \n [matTooltip]=\"'igo.geo.filter.resetFilters' | translate\" \n [disabled]= \"filterStateDisable\">\n <mat-icon svgIcon=\"{{resetIcon}}\"></mat-icon>\n </button>\n <mat-slide-toggle \n class=\"toggle-filter-state\" \n (change)=\"toggleFilterState()\" \n tooltip-position=\"below\" \n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.filter.toggleFilterState' | translate\" \n [checked]= \"!filterStateDisable\">\n </mat-slide-toggle>\n </div>\n </div>\n</div>\n", styles: ["::ng-deep input{text-align:center!important;margin:auto 5px!important}.slider-container{text-align:center}.datetime-input{display:inline-block;width:100px;margin:10px 0 5px 10px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.datetime-input{width:36%;margin:0}}.date-input{width:100px;margin-right:25px}.time-input{margin-right:25px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.time-input{margin-right:5px}}.hour-input,.minute-input{width:35px;margin-left:7px}.year-input{width:98px;margin:10px 14px 5px 4px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.year-input{width:32%;margin:0 0 0 10px}}.year-input-hide{width:120px;margin-right:25px;display:none}.year-input-only-year{width:120px;margin-right:25px}.reset-button{width:25px;padding-left:8px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.reset-button{padding-left:8px}}.toggle-filter-state{padding-left:20px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){.toggle-filter-state{padding-left:12px}}::ng-deep .datepicker-year ::ng-deep .mat-calendar-arrow{display:none}::ng-deep .datepicker-year ::ng-deep .mat-calendar-period-button{pointer-events:none}::ng-deep .datepicker-year ::ng-deep .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover{background-color:#0000001f;border-radius:999px}\n"] }]
|
|
879
|
+
}], function () { return [{ type: i1.OGCFilterTimeService }]; }, { datasource: [{
|
|
880
|
+
type: Input
|
|
881
|
+
}], currentFilter: [{
|
|
882
|
+
type: Input
|
|
883
|
+
}], changeProperty: [{
|
|
884
|
+
type: Output
|
|
885
|
+
}], endDatepickerTime: [{
|
|
886
|
+
type: ViewChild,
|
|
887
|
+
args: ['endDatepickerTime']
|
|
888
|
+
}], beginDatepickerTime: [{
|
|
889
|
+
type: ViewChild,
|
|
890
|
+
args: ['beginDatepickerTime']
|
|
891
|
+
}], beginTime: [{
|
|
892
|
+
type: ViewChild,
|
|
893
|
+
args: ['beginTime']
|
|
894
|
+
}], endTime: [{
|
|
895
|
+
type: ViewChild,
|
|
896
|
+
args: ['endTime']
|
|
897
|
+
}] }); })();
|
|
898
898
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2djLWZpbHRlci10aW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2ZpbHRlci9vZ2MtZmlsdGVyLXRpbWUvb2djLWZpbHRlci10aW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFNBQVMsRUFFVCxNQUFNLEVBQ04sWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBUXhFLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7SUNqQnpDLDJDQUdnQztJQUQ5Qiw4UEFBd0IscUxBQ2QsZUFBQSx5QkFBa0IsQ0FBQSxJQURKO0lBRXhCLFlBQ0Y7O0lBQUEsaUJBQW1COzs7SUFIakIsMkNBQXdCO0lBRXhCLGVBQ0Y7SUFERSx1RkFDRjs7OztJQUVBLDhCQUFpRCxvQ0FBQTtJQU03QywrTUFBa0IsZUFBQSxtQ0FBNEIsQ0FBQSxJQUFDO0lBRWpELGlCQUE2QixFQUFBOzs7SUFOM0IsZUFBb0I7SUFBcEIseUNBQW9CLHFFQUFBLHVDQUFBLGlDQUFBOzs7O0lBWXRCLDhCQUEyRCx5QkFBQSxnQkFBQTtJQUk1QyxZQUE2Qzs7SUFBQSxpQkFBWTtJQUNwRSxpQ0FNRztJQUZELG1OQUFXLGVBQUEsMENBQTZDLE9BQU8sQ0FBQyxDQUFBLElBQUM7SUFKbkUsaUJBTUc7SUFDSCw0Q0FBaUg7SUFFakgsOENBTUc7SUFE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Z0M7UUFDOUIsaUdBS21CO1FBRW5CLHVFQVVNO1FBRU4sdUVBaU1NO1FBQ1IsaUJBQU07O1FBcE5ELGVBQStDO1FBQS9DLCtHQUErQztRQU1uQixlQUFnQjtRQUFoQixxQ0FBZ0I7UUFZekMsZUFBaUI7UUFBakIsc0NBQWlCOzt1RkRLWixzQkFBc0I7Y0FMbEMsU0FBUzsyQkFDRSxxQkFBcUI7dUVBS3RCLFVBQVU7a0JBQWxCLEtBQUs7WUFDRyxhQUFhO2tCQUFyQixLQUFLO1lBQ0ksY0FBYztrQkFBdkIsTUFBTTtZQWdDeUIsaUJBQWlCO2tCQUFoRCxTQUFTO21CQUFDLG1CQUFtQjtZQUNJLG1CQUFtQjtrQkFBcEQsU0FBUzttQkFBQyxxQkFBcUI7WUFDUixTQUFTO2tCQUFoQyxTQUFTO21CQUFDLFdBQVc7WUFDQSxPQUFPO2tCQUE1QixTQUFTO21CQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPbkluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPZ2NGaWx0ZXJPcGVyYXRvciB9IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5lbnVtJztcbmltcG9ydCB7IE9HQ0ZpbHRlclRpbWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXItdGltZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucyxcbiAgT2djRmlsdGVyYWJsZURhdGFTb3VyY2UsXG4gIE9nY0ZpbHRlckR1cmluZ09wdGlvbnNcbn0gZnJvbSAnLi4vc2hhcmVkL29nYy1maWx0ZXIuaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgZGVmYXVsdCBhcyBtb21lbnQgfSBmcm9tICdtb21lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZ28tb2djLWZpbHRlci10aW1lJyxcbiAgdGVtcGxhdGVVcmw6ICcuL29nYy1maWx0ZXItdGltZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL29nYy1maWx0ZXItdGltZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIE9nY0ZpbHRlclRpbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBkYXRhc291cmNlOiBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZTtcbiAgQElucHV0KCkgY3VycmVudEZpbHRlcjogYW55O1xuICBAT3V0cHV0KCkgY2hhbmdlUHJvcGVydHk6IEV2ZW50RW1pdHRlcjx7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBwb3M6IG51bWJlcjtcbiAgICByZWZyZXNoRmlsdGVyOiBib29sZWFuO1xuICB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGJlZ2luSG91cnM6IG51bWJlcltdO1xuICBlbmRIb3VyczogbnVtYmVyW107XG4gIGJlZ2luTWludXRlczogbnVtYmVyW107XG4gIGVuZE1pbnV0ZXM6IG51bWJlcltdO1xuICBiZWdpbkhvdXJGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgYmVnaW5NaW51dGVGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgZW5kSG91ckZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuICBlbmRNaW51dGVGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgX2JlZ2luVmFsdWU6IERhdGU7XG4gIF9lbmRWYWx1ZTogRGF0ZTtcbiAgcmVhZG9ubHkgX2RlZmF1bHRNaW46IHN0cmluZyA9ICcxOTAwLTAxLTAxJztcbiAgcmVhZG9ubHkgX2RlZmF1bHRNYXg6IHN0cmluZyA9ICcyMDUyLTAxLTA2JztcbiAgcmVhZG9ubHkgX2RlZmF1bHREaXNwbGF5Rm9ybWF0OiBzdHJpbmcgPSAnREQvTU0vWVlZWSBISDptbSBBJztcbiAgcmVhZG9ubHkgX2RlZmF1bHRTbGlkZXJNb2RlRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIG9nY0ZpbHRlck9wZXJhdG9yID0gT2djRmlsdGVyT3BlcmF0b3I7XG4gIHB1YmxpYyBzbGlkZXJNb2RlID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgZGVmYXVsdFN0ZXBNaWxsaXNlY29uZCA9IDYwMDAwO1xuICBwdWJsaWMgb3B0aW9uczogT2djRmlsdGVyYWJsZURhdGFTb3VyY2VPcHRpb25zO1xuXG4gIHB1YmxpYyBvbmx5WWVhckJlZ2luOiBudW1iZXI7XG4gIHB1YmxpYyBvbmx5WWVhckVuZDogbnVtYmVyO1xuICBwdWJsaWMgY2FsZW5kYXJUeXBlWWVhciA9IGZhbHNlO1xuICBwdWJsaWMgcmVzZXRJY29uID0gJ3JlcGxheSc7XG4gIHB1YmxpYyBmaWx0ZXJTdGF0ZURpc2FibGU6IGJvb2xlYW47XG5cbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZXBpY2tlclRpbWUnKSBlbmREYXRlcGlja2VyVGltZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnYmVnaW5EYXRlcGlja2VyVGltZScpIGJlZ2luRGF0ZXBpY2tlclRpbWU6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2JlZ2luVGltZScpIGJlZ2luVGltZTogSFRNTElucHV0RWxlbWVudDtcbiAgQFZpZXdDaGlsZCgnZW5kVGltZScpIGVuZFRpbWU6IEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgZ2V0IHN0ZXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMuc3RlcERhdGVcbiAgICAgID8gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMuc3RlcERhdGVcbiAgICAgIDogdGhpcy5jdXJyZW50RmlsdGVyLnN0ZXA7XG4gIH1cblxuICBnZXQgc3RlcE1pbGxpc2Vjb25kcygpOiBudW1iZXIge1xuICAgIGNvbnN0IHN0ZXAgPSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc01pbGxpc2Vjb25kcygpO1xuICAgIHJldHVybiBzdGVwID09PSAwID8gdGhpcy5kZWZhdWx0U3RlcE1pbGxpc2Vjb25kIDogc3RlcDtcbiAgfVxuXG4gIHNldCBiZWdpblZhbHVlKGJlZ2luOiBEYXRlKSB7XG4gICAgdGhpcy5fYmVnaW5WYWx1ZSA9IGJlZ2luO1xuICB9XG5cbiAgZ2V0IGJlZ2luVmFsdWUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2JlZ2luVmFsdWU7XG4gIH1cblxuICBzZXQgZW5kVmFsdWUoZW5kOiBEYXRlKSB7XG4gICAgdGhpcy5fZW5kVmFsdWUgPSBlbmQ7XG4gIH1cblxuICBnZXQgZW5kVmFsdWUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2VuZFZhbHVlO1xuICB9XG5cbiAgZ2V0IHNsaWRlckludGVydmFsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbHRlci5zbGlkZXJJbnRlcnZhbCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IDIwMDBcbiAgICAgIDogdGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlckludGVydmFsO1xuICB9XG5cbiAgZ2V0IG1heERhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZSA/IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUgOiB0aGlzLl9kZWZhdWx0TWF4O1xuICB9XG5cbiAgZ2V0IGRpc3BsYXlGb3JtYXQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyLmRpc3BsYXlGb3JtYXQgPyB0aGlzLmN1cnJlbnRGaWx0ZXIuZGlzcGxheUZvcm1hdCA6IHRoaXMuX2RlZmF1bHREaXNwbGF5Rm9ybWF0O1xuICB9XG5cbiAgcHVibGljIGZpbHRlckJlZ2luRnVuY3Rpb247XG4gIHB1YmxpYyBmaWx0ZXJFbmRGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgb2djRmlsdGVyVGltZVNlcnZpY2U6IE9HQ0ZpbHRlclRpbWVTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCl7XG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5zbGlkZXJPcHRpb25zKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucy5lbmFibGVkID0gdGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlck9wdGlvbnMuZW5hYmxlZCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgdGhpcy5jdXJyZW50RmlsdGVyLnNsaWRlck9wdGlvbnMuZW5hYmxlZCA6IHRoaXMuX2RlZmF1bHRTbGlkZXJNb2RlRW5hYmxlZDtcbiAgICB9XG4gICAgdGhpcy5iZWdpblZhbHVlID0gdGhpcy5wYXJzZUZpbHRlcih0aGlzLmhhbmRsZU1pbigpKTtcbiAgICB0aGlzLmVuZFZhbHVlID0gdGhpcy5wYXJzZUZpbHRlcih0aGlzLmhhbmRsZU1heCgpKTtcblxuICAgIHRoaXMub25seVllYXJCZWdpbiA9IHRoaXMuYmVnaW5WYWx1ZS5nZXRVVENGdWxsWWVhcigpO1xuICAgIHRoaXMub25seVllYXJFbmQgPSB0aGlzLmVuZFZhbHVlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgdGhpcy5jYWxlbmRhclR5cGVZZWFyID0gdGhpcy5pc0NhbGVuZGFyWWVhck1vZGUoKTtcbiAgICB0aGlzLnNldEZpbHRlclN0YXRlRGlzYWJsZSgpO1xuICAgIHRoaXMudXBkYXRlSG91cnNNaW51dGVzQXJyYXkoKTtcbiAgICAvLyB1cGRhdGUgdmFsdWUgZm9yIG5vdyB2YWx1ZVxuICAgIHRoaXMudXBkYXRlVmFsdWVzKCk7XG4gICAgdGhpcy5kYXRlRmlsdGVyKHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiwgJ2JlZ2luJyk7XG4gICAgdGhpcy5kYXRlRmlsdGVyKHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24sICdlbmQnKTtcbiAgfVxuXG4gIHBhcnNlRmlsdGVyKGZpbHRlcik6IERhdGUge1xuICAgIGlmICghZmlsdGVyKXtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH0gZWxzZSBpZiAoIGlzTmFOKCBuZXcgRGF0ZShmaWx0ZXIpLmdldFRpbWUoKSApICnCoHtcbiAgICAgIGlmIChmaWx0ZXIuc2VhcmNoKCdub3cnKSA+PSAwICnCoHtcbiAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBmaWx0ZXIubWF0Y2goL3llYXJzfG1vbnRoc3x3ZWVrc3xkYXlzfGhvdXJzfHNlY29uZHMvKTtcbiAgICAgICAgaWYgKGZpbHRlci5tYXRjaCgvXFwrLykpIHtcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbEludCA9IHBhcnNlSW50KFxuICAgICAgICAgICAgZmlsdGVyLnN1YnN0cmluZyhmaWx0ZXIuc2VhcmNoKCcrJykgKyAxLCBpbnRlcnZhbC5pbmRleCksXG4gICAgICAgICAgICAxMFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIG1vbWVudCgpLmFkZChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXIubWF0Y2goL1xcLS8pKSB7XG4gICAgICAgICAgY29uc3QgaW50ZXJ2YWxJbnQgPSBwYXJzZUludChcbiAgICAgICAgICAgIGZpbHRlci5zdWJzdHJpbmcoZmlsdGVyLnNlYXJjaCgnLScpICsgMSwgaW50ZXJ2YWwuaW5kZXgpLFxuICAgICAgICAgICAgMTBcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBtb21lbnQoKS5zdWJ0cmFjdChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGZpbHRlci5zZWFyY2goJ3RvZGF5JykgPj0gMCl7XG4gICAgICAgIGNvbnN0IF9ub3cgPSBtb21lbnQoKS5lbmRPZignZGF5JykudG9EYXRlKCk7XG4gICAgICAgIGNvbnN0IGludGVydmFsID0gZmlsdGVyLm1hdGNoKC95ZWFyc3xtb250aHN8d2Vla3N8ZGF5c3xob3Vyc3xzZWNvbmRzLyk7XG4gICAgICAgIGlmICggZmlsdGVyLm1hdGNoKC9cXCsvKSApIHtcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbEludCA9IHBhcnNlSW50KCBmaWx0ZXIuc3Vic3RyaW5nKGZpbHRlci5zZWFyY2goJysnKSArIDEsIGludGVydmFsLmluZGV4KSwgMTAgKTtcbiAgICAgICAgICByZXR1cm4gbW9tZW50KF9ub3cpLmFkZChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICggZmlsdGVyLm1hdGNoKC9cXC0vKSApIHtcbiAgICAgICAgICBjb25zdCBpbnRlcnZhbEludCA9IHBhcnNlSW50KGZpbHRlci5zdWJzdHJpbmcoZmlsdGVyLnNlYXJjaCgnLScpICsgMSwgaW50ZXJ2YWwuaW5kZXgpLCAxMCk7XG4gICAgICAgICAgcmV0dXJuIG1vbWVudChfbm93KS5zdWJ0cmFjdChpbnRlcnZhbEludCwgaW50ZXJ2YWxbMF0pLnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfbm93O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuY2FsZW5kYXJNb2RlWWVhcikge1xuICAgICAgY29uc3QgZGF0ZSA9IHRoaXMuZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZShmaWx0ZXIpO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXIgPyBuZXcgRGF0ZShmaWx0ZXIpIDogbmV3IERhdGUoKTtcbiAgICB9XG4gIH1cblxuICBjaGFuZ2VUZW1wb3JhbFByb3BlcnR5KHZhbHVlLCBwb3NpdGlvbj8sIHJlZnJlc2hGaWx0ZXIgPSB0cnVlKSB7XG4gICAgbGV0IHZhbHVlVG1wID0gdGhpcy5nZXREYXRlVGltZSh2YWx1ZSwgcG9zaXRpb24pO1xuICAgIGlmICh0aGlzLmlzQ2FsZW5kYXJZZWFyTW9kZSgpKSB7XG4gICAgICBsZXQgZGF0ZVN0cmluZ0Zyb21ZZWFyTm90aW1lO1xuICAgICAgaWYgKHBvc2l0aW9uID09PSAxKSB7XG4gICAgICAgIHRoaXMuYmVnaW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9ubHlZZWFyQmVnaW4gPSB0aGlzLmJlZ2luVmFsdWUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgZGF0ZVN0cmluZ0Zyb21ZZWFyTm90aW1lID0gYCR7dGhpcy5vbmx5WWVhckJlZ2lufS0wMS0wMWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25seVllYXJFbmQgPSB0aGlzLmVuZFZhbHVlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGRhdGVTdHJpbmdGcm9tWWVhck5vdGltZSA9IGAke3RoaXMub25seVllYXJFbmR9LTAxLTAxYDtcbiAgICAgIH1cbiAgICAgIC8vIGNhbGwgc2VydmljZSB3aXRoIHN0cmluZyBkYXRlIHdpdGhvdXQgdGltZVxuICAgICAgdGhpcy5jaGFuZ2VQcm9wZXJ0eS5uZXh0KHsgdmFsdWU6IGRhdGVTdHJpbmdGcm9tWWVhck5vdGltZSwgcG9zOiBwb3NpdGlvbiwgcmVmcmVzaEZpbHRlciB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uID09PSAyICYmIHRoaXMuY2FsZW5kYXJUeXBlKCkgPT09ICdkYXRlJyAmJiAhdGhpcy5zbGlkZXJNb2RlKSB7XG4gICAgICAvKiBBYm92ZSBtb250aDogc2VlIHllYXJTZWxlY3RlZCBvciBtb250aFNlbGVjdGVkICovXG4gICAgICB2YWx1ZVRtcCA9IG1vbWVudCh2YWx1ZVRtcCkuZW5kT2YoJ2RheScpLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChwb3NpdGlvbiA9PT0gMSkge1xuICAgICAgdGhpcy5iZWdpblZhbHVlID0gdmFsdWVUbXA7XG4gICAgICBpZiAodGhpcy5yZXN0cmljdGVkVG9TdGVwKCkpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VUZW1wb3JhbFByb3BlcnR5KHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2UuYWRkU3RlcCh2YWx1ZVRtcCwgdGhpcy5zdGVwTWlsbGlzZWNvbmRzKSwgMiwgcmVmcmVzaEZpbHRlcik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5kVmFsdWUgPSB2YWx1ZVRtcDtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVIb3Vyc01pbnV0ZXNBcnJheSgpO1xuICAgIHRoaXMuY2hhbmdlUHJvcGVydHkubmV4dCh7IHZhbHVlOiB2YWx1ZVRtcC50b0lTT1N0cmluZygpLCBwb3M6IHBvc2l0aW9uLCByZWZyZXNoRmlsdGVyIH0pO1xuICB9XG5cbiAgaGFuZGxlRGF0ZSh2YWx1ZSk6IERhdGUge1xuICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ3N0cmluZycgJiYgdGhpcy5jdXJyZW50RmlsdGVyLmNhbGVuZGFyTW9kZVllYXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGVGcm9tU3RyaW5nV2l0aG91dFRpbWUodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9XG5cbiAgY2FsZW5kYXJUeXBlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuY2FsZW5kYXJNb2RlWWVhcikge1xuICAgICAgcmV0dXJuICd5ZWFyJztcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RlcE1pbGxpc2Vjb25kcyA8IDg2NDAwMDAwKSB7XG4gICAgICByZXR1cm4gJ2RhdGV0aW1lJztcbiAgICB9XG4gICAgcmV0dXJuICdkYXRlJztcbiAgfVxuXG4gIGlzQ2FsZW5kYXJZZWFyTW9kZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jYWxlbmRhclR5cGUoKSA9PT0gJ3llYXInKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHllYXJPbmx5SW5wdXRDaGFuZ2UoY2hhbmdlRXZlbnQsIGRhdGVQaWNrZXI/OiBhbnksIHByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgY29uc3QgeWVhciA9IGNoYW5nZUV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBkYXRlID0gdGhpcy5nZXREYXRlRnJvbVN0cmluZ1dpdGhvdXRUaW1lKHllYXIpO1xuICAgIHRoaXMueWVhclNlbGVjdGVkKGRhdGUsIGRhdGVQaWNrZXIsIHByb3BlcnR5KTtcbiAgfVxuXG4gIHllYXJTZWxlY3RlZCh5ZWFyLCBkYXRlUGlja2VyPzogYW55LCBwcm9wZXJ0eT86IHN0cmluZywgcmVmcmVzaEZpbHRlciA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNZZWFyRHVyYXRpb24odGhpcy5zdGVwKSkge1xuICAgICAgaWYgKGRhdGVQaWNrZXIpIHtcbiAgICAgICAgZGF0ZVBpY2tlci5jbG9zZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BlcnR5ID09PSAnZW5kJykge1xuICAgICAgICAvLyBjaGFuZ2UgdmFsdWUgMDEgamFuIHRvIDMxIGRlYyBzYW1lIHllYXJcbiAgICAgICAgeWVhciA9IG1vbWVudCh5ZWFyKS5lbmRPZigneWVhcicpLnRvRGF0ZSgpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eSA9PT0gJ2JlZ2luJyAmJiB0aGlzLnJlc3RyaWN0ZWRUb1N0ZXAoKSAmJiAhdGhpcy5jYWxlbmRhclR5cGVZZWFyKSB7XG4gICAgICAgIHRoaXMueWVhclNlbGVjdGVkKHllYXIsIHVuZGVmaW5lZCwgJ2VuZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGFuZ2VUZW1wb3JhbFByb3BlcnR5KHllYXIsIHByb3BlcnR5ID09PSAnYmVnaW4nID8gMSA6IDIsIHJlZnJlc2hGaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIG1vbnRoU2VsZWN0ZWQobW9udGgsIGRhdGVQaWNrZXI/OiBhbnksIHByb3BlcnR5Pzogc3RyaW5nLCByZWZyZXNoRmlsdGVyID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01vbnRoRHVyYXRpb24odGhpcy5zdGVwKSkge1xuICAgICAgaWYgKGRhdGVQaWNrZXIpIHtcbiAgICAgICAgZGF0ZVBpY2tlci5jbG9zZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BlcnR5ID09PSAnZW5kJykge1xuICAgICAgICBtb250aCA9IG1vbWVudChtb250aCkuZW5kT2YoJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICB9IGVsc2UgaWYgKHByb3BlcnR5ID09PSAnYmVnaW4nICYmIHRoaXMucmVzdHJpY3RlZFRvU3RlcCgpKSB7XG4gICAgICAgIHRoaXMubW9udGhTZWxlY3RlZChtb250aCwgdW5kZWZpbmVkLCAnZW5kJyk7XG4gICAgICB9XG4gICAgICB0aGlzLmNoYW5nZVRlbXBvcmFsUHJvcGVydHkobW9udGgsIHByb3BlcnR5ID09PSAnYmVnaW4nID8gMSA6IDIsIHJlZnJlc2hGaWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGVuZGFyVmlldygpIHtcbiAgICBjb25zdCB0ZXN0ID0gdGhpcy5zdGVwTWlsbGlzZWNvbmRzO1xuICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhcbiAgICAgIHRoaXMucGFyc2VGaWx0ZXIodGhpcy5jdXJyZW50RmlsdGVyLmVuZCkuZ2V0VGltZSgpIC1cbiAgICAgICAgdGhpcy5wYXJzZUZpbHRlcih0aGlzLmN1cnJlbnRGaWx0ZXIuYmVnaW4pLmdldFRpbWUoKVxuICAgICk7XG4gICAgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzWWVhckR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcbiAgICAgIHJldHVybiAnbXVsdGkteWVhcic7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01vbnRoRHVyYXRpb24odGhpcy5zdGVwKSkge1xuICAgICAgcmV0dXJuICd5ZWFyJztcbiAgICB9IGVsc2UgaWYgKHRlc3QgPCA4NjQwMDAwMCAmJiBkaWZmIDwgODY0MDAwMDApIHtcbiAgICAgIHJldHVybiAnY2xvY2snO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ21vbnRoJztcbiAgICB9XG4gIH1cblxuICBkYXRlRmlsdGVyKHR5cGU6IHN0cmluZywgZGF0ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZGF0ZVZhbHVlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgY29uc3QgZGlmZiA9IGRhdGVWYWx1ZS5nZXRUaW1lKCkgLSBuZXcgRGF0ZSh0aGlzLmhhbmRsZU1pbigpKS5nZXRUaW1lKCk7XG5cbiAgICBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNZZWFyRHVyYXRpb24odGhpcy5zdGVwKSkge1xuICAgICAgY29uc3QgbW9udGhEaWZmID0gbW9tZW50KGRhdGVWYWx1ZSkuZGlmZihtb21lbnQodGhpcy5oYW5kbGVNaW4oKSksICd5ZWFycycsIHRydWUpO1xuICAgICAgaWYgKCB0eXBlID09PSAnZW5kJyApIHtcbiAgICAgICAgY29uc3QgZGF0ZVZhbHVlUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlKS5hZGQoMSwgJ2QnKTtcbiAgICAgICAgY29uc3QgbW9udGhEaWZmUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlUGx1czEpLmRpZmYobW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLCAneWVhcnMnLCB0cnVlKTtcbiAgICAgICAgdGhpcy5maWx0ZXJFbmRGdW5jdGlvbiA9IChtb250aERpZmZQbHVzMSAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzWWVhcnMoKSkgPT09IDA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICdiZWdpbicgKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiA9IChtb250aERpZmYgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc1llYXJzKCkpID09PSAwO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzTW9udGhEdXJhdGlvbih0aGlzLnN0ZXApKSB7XG4gICAgICBjb25zdCBtb250aERpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSwgJ21vbnRocycsIHRydWUpO1xuICAgICAgaWYgKCB0eXBlID09PSAnZW5kJyApIHtcbiAgICAgICAgY29uc3QgZGF0ZVZhbHVlUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlKS5hZGQoMSwgJ2QnKTtcbiAgICAgICAgY29uc3QgbW9udGhEaWZmUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlUGx1czEpLmRpZmYobW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLCAnbW9udGhzJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPSAobW9udGhEaWZmUGx1czEgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc01vbnRocygpKSA9PT0gMDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gJ2JlZ2luJyApIHtcbiAgICAgICAgdGhpcy5maWx0ZXJCZWdpbkZ1bmN0aW9uID0gKG1vbnRoRGlmZiAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzTW9udGhzKCkpID09PSAwO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc1dlZWtEdXJhdGlvbih0aGlzLnN0ZXApKSB7XG4gICAgICBjb25zdCB3ZWVrRGlmZiA9IG1vbWVudChkYXRlVmFsdWUpLmRpZmYobW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLCAnd2Vla3MnLCB0cnVlKTtcbiAgICAgIGlmICggdHlwZSA9PT0gJ2VuZCcgKSB7XG4gICAgICAgIGNvbnN0IGRhdGVWYWx1ZVBsdXMxID0gbW9tZW50KGRhdGVWYWx1ZSkuYWRkKDEsICdkJyk7XG4gICAgICAgIGNvbnN0IHdlZWtEaWZmUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlUGx1czEpLmRpZmYobW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLCAnd2Vla3MnLCB0cnVlKTtcbiAgICAgICAgdGhpcy5maWx0ZXJFbmRGdW5jdGlvbiA9ICh3ZWVrRGlmZlBsdXMxICUgbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNXZWVrcygpKSA9PT0gMDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gJ2JlZ2luJyApIHtcbiAgICAgICAgdGhpcy5maWx0ZXJCZWdpbkZ1bmN0aW9uID0gKHdlZWtEaWZmICUgbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNXZWVrcygpKSA9PT0gMDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNEYXlEdXJhdGlvbih0aGlzLnN0ZXApKSB7XG4gICAgICBjb25zdCBkYXlEaWZmID0gbW9tZW50KGRhdGVWYWx1ZSkuZGlmZihtb21lbnQodGhpcy5oYW5kbGVNaW4oKSksICdkYXlzJywgdHJ1ZSk7XG4gICAgICBpZiAoIHR5cGUgPT09ICdlbmQnICkge1xuICAgICAgICBjb25zdCBkYXRlVmFsdWVQbHVzMSA9IG1vbWVudChkYXRlVmFsdWUpLmFkZCgxLCAnZCcpO1xuICAgICAgICBjb25zdCBkYXlEaWZmUGx1czEgPSBtb21lbnQoZGF0ZVZhbHVlUGx1czEpLmRpZmYobW9tZW50KHRoaXMuaGFuZGxlTWluKCkpLCAnZGF5cycsIHRydWUpO1xuICAgICAgICBjb25zdCBfbW9kID0gKGRheURpZmZQbHVzMSAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzRGF5cygpKTtcbiAgICAgICAgdGhpcy5maWx0ZXJFbmRGdW5jdGlvbiA9IChfbW9kIDwgMC4wMDAwMDAxICYmIF9tb2QgPiAtMC4wMDAwMDAxKSB8fCBfbW9kID09PSAwIDsgLy8gMSBtaWxsaXNlY29uZCA9IDEuMTU3NDA3NDA3NDA3NDA3NmUtOFxuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKCB0eXBlID09PSAnYmVnaW4nICkge1xuICAgICAgICBjb25zdCBfbW9kID0gKChkYXlEaWZmICUgbW9tZW50LmR1cmF0aW9uKHRoaXMuc3RlcCkuYXNEYXlzKCkpICsgMSk7XG4gICAgICAgIHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiA9IChfbW9kIDwgMC4wMDAwMDAxICYmIF9tb2QgPiAtMC4wMDAwMDAxICYmIF9tb2QgIT09IDApIHx8IF9tb2QgPT09IDEgOyAvLyAxIG1pbGxpc2Vjb25kID0gMS4xNTc0MDc0MDc0MDc0MDc2ZS04XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCB0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc0hvdXJEdXJhdGlvbih0aGlzLnN0ZXApICkge1xuICAgICAgaWYgKCB0eXBlID09PSAnZW5kJyApIHtcbiAgICAgICAgY29uc3QgaG91ckRpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSwgJ2hvdXJzJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZmlsdGVyRW5kRnVuY3Rpb24gPSAoaG91ckRpZmYgJSBtb21lbnQuZHVyYXRpb24odGhpcy5zdGVwKS5hc0hvdXJzKCkpID09PSAwO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdiZWdpbicpIHtcbiAgICAgICAgY29uc3QgaG91ckRpZmYgPSBtb21lbnQoZGF0ZVZhbHVlKS5kaWZmKG1vbWVudCh0aGlzLmhhbmRsZU1pbigpKSwgJ2hvdXJzJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiA9IChob3VyRGlmZiAlIG1vbWVudC5kdXJhdGlvbih0aGlzLnN0ZXApLmFzSG91cnMoKSkgPT09IDA7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCB0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc01pbnV0ZUR1cmF0aW9uKHRoaXMuc3RlcCkgKSB7XG4gICAgICBpZiAoIHR5cGUgPT09ICdlbmQnICkge1xuICAgICAgICB0aGlzLmZpbHRlckVuZEZ1bmN0aW9uID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmVnaW4nKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyQmVnaW5GdW5jdGlvbiA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlckVuZEZ1bmN0aW9uID0gZGlmZiAlIHRoaXMuc3RlcE1pbGxpc2Vjb25kcyA9PT0gMDtcbiAgICB0aGlzLmZpbHRlckJlZ2luRnVuY3Rpb24gPSBkaWZmICUgdGhpcy5zdGVwTWlsbGlzZWNvbmRzID09PSAwO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGdldERhdGVUaW1lKGRhdGUsIHBvcykge1xuICAgIGNvbnN0IHZhbHVldG1wID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgbGV0IHZhbHVldG1wMjtcbiAgICBpZiAoIXRoaXMuc2xpZGVyTW9kZSkge1xuICAgICAgc3dpdGNoIChwb3MpIHtcbiAgICAgICAgY2FzZSAxOiB7XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5jYWxlbmRhck1vZGVZZWFyKSB7XG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycygwLCAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycyhcbiAgICAgICAgICAgIHRoaXMuYmVnaW5Ib3VyRm9ybUNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgICB0aGlzLmJlZ2luTWludXRlRm9ybUNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAyOiB7XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudEZpbHRlci5jYWxlbmRhck1vZGVZZWFyKSB7XG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycygwLCAwKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZXRtcDIgPSB2YWx1ZXRtcC5zZXRIb3VycyhcbiAgICAgICAgICAgICAgdGhpcy5lbmRIb3VyRm9ybUNvbnRyb2wudmFsdWUsXG4gICAgICAgICAgICAgIHRoaXMuZW5kTWludXRlRm9ybUNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVldG1wMiA/IHZhbHVldG1wMiA6IHZhbHVldG1wKTtcbiAgfVxuXG4gIGhhbmRsZU1pbnV0ZUluY3JlbWVudCgpIHtcbiAgICBpZiAodGhpcy5vZ2NGaWx0ZXJUaW1lU2VydmljZS5zdGVwSXNNaW51dGVEdXJhdGlvbih0aGlzLnN0ZXApKSB7XG4gICAgICBpZiAodGhpcy5zdGVwTWlsbGlzZWNvbmRzIDwgMzYwMDAwMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGVwTWlsbGlzZWNvbmRzIC8gMTAwMCA9PT0gNjAgPyAxIDogdGhpcy5zdGVwTWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zdGVwTWlsbGlzZWNvbmRzICUgMzYwMDAwMCkgLyA2MDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMub2djRmlsdGVyVGltZVNlcnZpY2Uuc3RlcElzSG91ckR1cmF0aW9uKHRoaXMuc3RlcCkpIHtcbiAgICAgIHJldHVybiA2MDtcbiAgICB9XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBoYW5kbGVIb3VySW5jcmVtZW50KCkge1xuICAgIGlmICh0aGlzLm9nY0ZpbHRlclRpbWVTZXJ2aWNlLnN0ZXBJc0hvdXJEdXJhdGlvbih0aGlzLnN0ZXApKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGVwTWlsbGlzZWNvbmRzIC8gMTAwMCAvIDYwIC8gNjA7XG4gICAgfVxuICAgIHJldHVybiAxO1xuICB9XG5cbiAgZnVsbEJlZ2luSG91cnNBcnJheShjaGVja0VuZFZhbHVlPykge1xuICAgIGlmIChjaGVja0VuZFZhbHVlKSB7XG4gICAgICB0aGlzLmJlZ2luSG91cnMgPSBBcnJheS5mcm9tKFxuICAgICAgICB7XG4gICAgICAgICAgbGVuZ3RoOlxuICAgICAgICAgICAgKHRoaXMuZW5kSG91ckZvcm1Db250cm9sLnZhbHVlIC0gMCkgLyB0aGlzLmhhbmRsZUhvdXJJbmNyZW1lbnQoKSArIDFcbiAgICAgICAgfSxcbiAgICAgICAgKF8sIGkpID0+IDAgKyBpICogdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmVnaW5Ib3VycyA9IEFycmF5LmZyb20oXG4gICAgICAgIHsgbGVuZ3RoOiAoMjMgLSAwKSAvIHRoaXMuaGFuZGxlSG91ckluY3JlbWVudCgpICsgMSB9LFxuICAgICAgICAoXywgaSkgPT4gMCArIGkgKiB0aGlzLmhhbmRsZUhvdXJJbmNyZW1lbnQoKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5iZWdpbkhvdXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmJlZ2luVmFsdWUuZ2V0SG91cnMoKSk7XG4gIH1cblxuICBmdWxsRW5kSG91cnNBcnJheShjaGVja0VuZFZhbHVlPykge1xuICAgIGlmIChjaGVja0VuZFZhbHVlKSB7XG4gICAgICB0aGlzLmVuZEhvdXJzID0gQXJyYXkuZnJvbShcbiAgICAgICAge1xuICAgICAgICAgIGxlbmd0aDpcbiAgICAgICAgICAgICgyMyAtIHRoaXMuYmVnaW5Ib3VyRm9ybUNvbnRyb2wudmFsdWUpIC9cbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KCkgK1xuICAgICAgICAgICAgMVxuICAgICAgICB9LFxuICAgICAgICAoXywgaSkgPT5cbiAgICAgICAgICB0aGlzLmJlZ2luSG91ckZvcm1Db250cm9sLnZhbHVlICsgaSAqIHRoaXMuaGFuZGxlSG91ckluY3JlbWVudCgpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuZEhvdXJzID0gQXJyYXkuZnJvbShcbiAgICAgICAgeyBsZW5ndGg6ICgyMyAtIDApIC8gdGhpcy5oYW5kbGVIb3VySW5jcmVtZW50KCkgKyAxIH0sXG4gICAgICAgIChfLCBpKSA9PiAwICsgaSAqIHRoaXMuaGFuZGxlSG91ckluY3JlbWVudCgpXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmVuZFZhbHVlLmdldEhvdXJzKCkpO1xuICB9XG5cbiAgZnVsbEJlZ2luTWludXRlc0FycmF5KGNoZWNrRW5kVmFsdWU/KSB7XG4gICAgaWYgKGNoZWNrRW5kVmFsdWUpIHtcbiAgICAgIHRoaXMuYmVnaW5NaW51dGVzID0gQXJyYXkuZnJvbShcbiAgICAgICAge1xuICAgICAgICAgIGxlbmd0aDpcbiAgICAgICAgICAgICh0aGlzLmVuZE1pbnV0ZUZvcm1Db250cm9sLnZhbHVlIC0gMCkgL1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpICtcbiAgICAgICAgICAgIDFcbiAgICAgICAgfSxcbiAgICAgICAgKF8sIGkpID0+IDAgKyBpICogdGhpcy5oYW5kbGVNaW51dGVJbmNyZW1lbnQoKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iZWdpbk1pbnV0ZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICB7IGxlbmd0aDogKDU5IC0gMCkgLyB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpICsgMSB9LFxuICAgICAgICAoXywgaSkgPT4gMCArIGkgKiB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmJlZ2luTWludXRlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5iZWdpblZhbHVlLmdldE1pbnV0ZXMoKSk7XG4gIH1cblxuICBmdWxsRW5kTWludXRlc0FycmF5KGNoZWNrRW5kVmFsdWU/KSB7XG4gICAgaWYgKGNoZWNrRW5kVmFsdWUpIHtcbiAgICAgIHRoaXMuZW5kTWludXRlcyA9IEFycmF5LmZyb20oXG4gICAgICAgIHtcbiAgICAgICAgICBsZW5ndGg6XG4gICAgICAgICAgICAoNTkgLSB0aGlzLmJlZ2luTWludXRlRm9ybUNvbnRyb2wudmFsdWUpIC9cbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVNaW51dGVJbmNyZW1lbnQoKSArXG4gICAgICAgICAgICAxXG4gICAgICAgIH0sXG4gICAgICAgIChfLCBpKSA9PlxuICAgICAgICAgIHRoaXMuYmVnaW5NaW51dGVGb3JtQ29udHJvbC52YWx1ZSArIGkgKiB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuZE1pbnV0ZXMgPSBBcnJheS5mcm9tKFxuICAgICAgICB7IGxlbmd0aDogKDU5IC0gMCkgLyB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpICsgMSB9LFxuICAgICAgICAoXywgaSkgPT4gMCArIGkgKiB0aGlzLmhhbmRsZU1pbnV0ZUluY3JlbWVudCgpXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmVuZE1pbnV0ZUZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuZW5kVmFsdWUuZ2V0TWludXRlcygpKTtcbiAgfVxuXG4gIHVwZGF0ZUhvdXJzTWludXRlc0FycmF5KCkge1xuICAgIGNvbnN0IGJlZ2luVG1wID0gbmV3IERhdGUodGhpcy5iZWdpblZhbHVlKTtcbiAgICBjb25zdCBlbmRUbXAgPSBuZXcgRGF0ZSh0aGlzLmVuZFZhbHVlKTtcbiAgICBpZiAoYmVnaW5UbXAuc2V0SG91cnMoMCwgMCkgPT09IGVuZFRtcC5zZXRIb3VycygwLCAwKSkge1xuICAgICAgdGhpcy5mdWxsQmVnaW5Ib3Vyc0FycmF5KHRydWUpO1xuICAgICAgdGhpcy5mdWxsRW5kSG91cnNBcnJheSh0cnVlKTtcbiAgICAgIGlmICh0aGlzLmJlZ2luVmFsdWUuZ2V0SG91cnMoKSA9PT0gdGhpcy5lbmRWYWx1ZS5nZXRIb3VycygpKSB7XG4gICAgICAgIHRoaXMuZnVsbEJlZ2luTWludXRlc0FycmF5KHRydWUpO1xuICAgICAgICB0aGlzLmZ1bGxFbmRNaW51dGVzQXJyYXkodHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZnVsbEJlZ2luSG91cnNBcnJheSgpO1xuICAgICAgdGhpcy5mdWxsRW5kSG91cnNBcnJheSgpO1xuICAgICAgdGhpcy5mdWxsQmVnaW5NaW51dGVzQXJyYXkoKTtcbiAgICAgIHRoaXMuZnVsbEVuZE1pbnV0ZXNBcnJheSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsdWVzKCkge1xuICAgIHRoaXMuY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eSh0aGlzLmJlZ2luVmFsdWUsIDEsIGZhbHNlKTtcbiAgICB0aGlzLmNoYW5nZVRlbXBvcmFsUHJvcGVydHkodGhpcy5lbmRWYWx1ZSwgMiwgdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVzdHJpY3RlZFRvU3RlcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyLnJlc3RyaWN0VG9TdGVwXG4gICAgICA/IHRoaXMuY3VycmVudEZpbHRlci5yZXN0cmljdFRvU3RlcCA6IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZU1pbigpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyLmJlZ2luID8gdGhpcy5jdXJyZW50RmlsdGVyLmJlZ2luIDpcbiAgICAgICAgICAgICAgKHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm1pbkRhdGUgPyB0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5taW5EYXRlIDogdGhpcy5fZGVmYXVsdE1pbik7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlTWF4KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXIuZW5kID8gdGhpcy5jdXJyZW50RmlsdGVyLmVuZCA6XG4gICAgICAgICAgICAgICh0aGlzLmRhdGFzb3VyY2Uub3B0aW9ucy5tYXhEYXRlID8gdGhpcy5kYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZSA6IHRoaXMuX2RlZmF1bHRNYXgpO1xuICB9XG5cbiAgY2hhbmdlUHJvcGVydHlCeVBhc3MoZXZlbnQpIHtcbiAgICB0aGlzLmNoYW5nZVByb3BlcnR5Lm5leHQoZXZlbnQpO1xuICB9XG5cbiAgbW9kZUNoYW5nZShldmVudCkge1xuICAgIGlmICghZXZlbnQuY2hlY2tlZCkge1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICBzZXRGaWx0ZXJTdGF0ZURpc2FibGUoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudEZpbHRlcikge1xuICAgICAgdGhpcy5maWx0ZXJTdGF0ZURpc2FibGUgPSAhdGhpcy5jdXJyZW50RmlsdGVyLmFjdGl2ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWx0ZXJTdGF0ZURpc2FibGUgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYodGhpcy5jYWxlbmRhclR5cGUoKSA9PT0gJ2RhdGV0aW1lJykge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyU3RhdGVEaXNhYmxlID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuYmVnaW5Ib3VyRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLmJlZ2luTWludXRlRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuZW5kTWludXRlRm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5iZWdpbkhvdXJGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5iZWdpbk1pbnV0ZUZvcm1Db250cm9sLmVuYWJsZSgpO1xuICAgICAgICB0aGlzLmVuZEhvdXJGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgdGhpcy5lbmRNaW51dGVGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZShzdHJpbmdEYXRlOiBzdHJpbmcpOiBEYXRlIHtcbiAgICAvLyB3YXJuaW5nIGNyZWF0ZSBkYXRlIHdpdGggbm8gdGltZSBtYWtlIGEgZGF0ZSBVVEMgd2l0aCBUWiBhbmQgdGhlIGRhdGUgY3JlYXRlIG1heWJlIG5vdCB0aGUgc2FtZSB5ZWFyLCBtb250aCBhbmQgZGF5XG4gICAgLy8gZXhlbXBsZTpcbiAgICAvLyBuZXcgRGF0ZSgnMjAyMi0wMS0wMScpIC0+IEZyaSBEZWMgMzEgMjAyMSAxOTowMDowMCBHTVQtMDUwMCAoaGV1cmUgbm9ybWFsZSBkZSBs4oCZRXN0IG5vcmQtYW3DqXJpY2FpbilcbiAgICAvLyB0byBjcmVhdGUgc2FtZSBkYXRlIGFzIHN0cmluZywgYWRkIHRpbWUgMDAgaW4gdGhlIGNyZWF0aW9uXG4gICAgLy8gbmV3IERhdGUoJzIwMjItMDEtMDEgMDA6MDA6MDAnKSAtPiBTYXQgSmFuIDAxIDIwMjIgMDA6MDA6MDAgR01ULTA1MDAgKGhldXJlIG5vcm1hbGUgZGUgbOKAmUVzdCBub3JkLWFtw6lyaWNhaW4pXG4gICAgbGV0IHllYXI7XG4gICAgbGV0IG1vbnRoID0gJzAxJztcbiAgICBsZXQgZGF5ID0gJzAxJztcbiAgICBpZiAoc3RyaW5nRGF0ZS5sZW5ndGggPT09IDEwKSB7XG4gICAgICAgY29uc3QgZGF0ZUl0ZW1zID0gc3RyaW5nRGF0ZS5zcGxpdCgnLScpO1xuICAgICAgICBpZiAoZGF0ZUl0ZW1zLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgaW4gY29uZmlnIGRhdGUgYmVnaW4tZW5kIGZvciBvZ2NGaWx0ZXI6IERhdGUgd2l0aG91dCB0aW1lIGZvcm1hdCBuZWVkIHRvIGJlIFlZWVktTU0tREQgb3IgWVlZWScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHllYXIgPSBkYXRlSXRlbXNbMF07XG4gICAgICAgICAgbW9udGggPSBkYXRlSXRlbXNbMV07XG4gICAgICAgICAgZGF5ID0gZGF0ZUl0ZW1zWzJdO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHJpbmdEYXRlLmxlbmd0aCA9PT0gNCkge1xuICAgICAgeWVhciA9IHN0cmluZ0RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShzdHJpbmdEYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fSAwMDowMDowMGApO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXIoKSB7XG4gICAgbGV0IGZpbHRlck9yaWdpbkNvbmZpZyA9IHRoaXMuZGF0YXNvdXJjZS5vcHRpb25zLm9nY0ZpbHRlcnMuZmlsdGVycyBhcyBPZ2NGaWx0ZXJEdXJpbmdPcHRpb25zO1xuXG4gICAgbGV0IG1pbkRlZmF1bHREYXRlO1xuICAgIGxldCBtYXhEZWZhdWx0RGF0ZTtcbiAgICBsZXQgbWluRGVmYXVsdElTT1N0cmluZztcbiAgICBsZXQgbWF4RGVmYXVsdElTT1N0cmluZztcblxuICAgIGlmICh0aGlzLmNhbGVuZGFyVHlwZVllYXIpIHtcbiAgICAgIGlmIChmaWx0ZXJPcmlnaW5Db25maWcuZW5kID09PSAndG9kYXknKSB7XG4gICAgICAgIGxldCB0b2RheURhdGVTdHJpbmdOb1RpbWUgPSBuZXcgRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tQ0EnKTsgLy8gJzIwMjItMDItMTMnXG4gICAgICAgIG1heERlZmF1bHRJU09TdHJpbmcgPSBgJHt0b2RheURhdGVTdHJpbmdOb1RpbWUuc3Vic3RyaW5nKDAsNCl9LTAxLTAxYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1heERlZmF1bHRJU09TdHJpbmcgPSBgJHtmaWx0ZXJPcmlnaW5Db25maWcuZW5kLnN1YnN0cmluZygwLDQpfS0wMS0wMWA7XG4gICAgICB9XG4gICAgICBtaW5EZWZhdWx0SVNPU3RyaW5nID0gYCR7ZmlsdGVyT3JpZ2luQ29uZmlnLmJlZ2luLnN1YnN0cmluZygwLDQpfS0wMS0wMWA7XG4gICAgICBtaW5EZWZhdWx0RGF0ZSA9IHRoaXMuZ2V0RGF0ZUZyb21TdHJpbmdXaXRob3V0VGltZShtaW5EZWZhdWx0SVNPU3RyaW5nKTtcbiAgICAgIG1heERlZmF1bHREYXRlID0gdGhpcy5nZXREYXRlRnJvbVN0cmluZ1dpdGhvdXRUaW1lKG1heERlZmF1bHRJU09TdHJpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaW5EZWZhdWx0RGF0ZSA9IHRoaXMucGFyc2VGaWx0ZXIoZmlsdGVyT3JpZ2luQ29uZmlnLmJlZ2luKTtcbiAgICAgIG1heERlZmF1bHREYXRlID0gdGhpcy5wYXJzZUZpbHRlcihmaWx0ZXJPcmlnaW5Db25maWcuZW5kKTtcbiAgICAgIG1pbkRlZmF1bHRJU09TdHJpbmcgPSBtaW5EZWZhdWx0RGF0ZS50b0lTT1N0cmluZygpO1xuICAgICAgbWF4RGVmYXVsdElTT1N0cmluZyA9IG1heERlZmF1bHREYXRlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLmN1cnJlbnRGaWx0ZXIuYmVnaW4gIT09IG1pbkRlZmF1bHRJU09TdHJpbmcgKSB8fFxuICAgICh0aGlzLmN1cnJlbnRGaWx0ZXIuZW5kICE9PSBtYXhEZWZhdWx0SVNPU3RyaW5nKSkge1xuICAgICAgdGhpcy5iZWdpblZhbHVlID0gbWluRGVmYXVsdERhdGU7XG4gICAgICB0aGlzLmVuZFZhbHVlID0gbWF4RGVmYXVsdERhdGU7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlcygpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUZpbHRlclN0YXRlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRGaWx0ZXIuYWN0aXZlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXIuYWN0aXZlID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlci5hY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnNldEZpbHRlclN0YXRlRGlzYWJsZSgpO1xuICAgIHRoaXMudXBkYXRlVmFsdWVzKCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRldGltZS1jb250YWluZXJcIj5cbiAgPG1hdC1zbGlkZS10b2dnbGUgXG4gICAgKm5nSWY9XCJ0aGlzLmN1cnJlbnRGaWx0ZXIuc2xpZGVyT3B0aW9ucz8uZW5hYmxlZFwiXG4gICAgWyhuZ01vZGVsKV09XCJzbGlkZXJNb2RlXCJcbiAgICAoY2hhbmdlKT1cIm1vZGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgIHt7J2lnby5nZW8uZmlsdGVyLnNsaWRlck1vZGVUaXRsZScgfCB0cmFuc2xhdGV9fVxuICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgPGRpdiBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIiAqbmdJZj1cInNsaWRlck1vZGVcIj5cbiAgICA8aWdvLW9nYy1maWx0ZXItdGltZS1zbGlkZXJcbiAgICAgIFtiZWdpbl09XCJiZWdpblZhbHVlXCJcbiAgICAgIFttYXhdPVwidGhpcy5yZXN0cmljdGVkVG9TdGVwKCkgPyB0aGlzLm1heERhdGUgOiB0aGlzLmVuZFZhbHVlXCJcbiAgICAgIFtjdXJyZW50RmlsdGVyXT1cImN1cnJlbnRGaWx0ZXJcIiBcbiAgICAgIFtkYXRhc291cmNlXT1cImRhdGFzb3VyY2VcIlxuICAgICAgKGNoYW5nZVByb3BlcnR5KT1cImNoYW5nZVByb3BlcnR5QnlQYXNzKCRldmVudClcIlxuICAgID5cbiAgICA8L2lnby1vZ2MtZmlsdGVyLXRpbWUtc2xpZGVyPlxuICAgIFxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiIXNsaWRlck1vZGVcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJ5ZWFyLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiY2FsZW5kYXJUeXBlWWVhclwiPlxuICAgICAgPCEtLSB0byBlbXVsYXRlIGEgeWVhci1waWNrZXIsIDIgaW5wdXQ6IGZpcnN0IGlucHV0IHRvIHNob3cgdXNlciBqdXN0IHllYXIgYW5kIHNlY29uZCBpbnB1dCBoaWRlbiBhbmQgYmluZCBcbiAgICAgICAgd2l0aCB0aGUgZGF0ZXBpY2tlciAgLS0+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgIGNsYXNzPVwieWVhci1pbnB1dFwiPlxuICAgICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8udGltZUZpbHRlci5zdGFydFllYXInfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgIGNsYXNzPVwieWVhci1pbnB1dC1vbmx5LXllYXJcIlxuICAgICAgICAgIHZhbHVlPVwie3tvbmx5WWVhckJlZ2lufX1cIlxuICAgICAgICAgIChjaGFuZ2UpPSBcInllYXJPbmx5SW5wdXRDaGFuZ2UoJGV2ZW50LCBiZWdpbkRhdGVwaWNrZXIsICdiZWdpbicpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPSBcImZpbHRlclN0YXRlRGlzYWJsZVwiXG4gICAgICAgICAgPlxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImJlZ2luRGF0ZXBpY2tlclwiIFtkaXNhYmxlZF09XCJmaWx0ZXJTdGF0ZURpc2FibGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlclxuICAgICAgICAgIHBhbmVsQ2xhc3M9XCJkYXRlcGlja2VyLXllYXJcIlxuICAgICAgICAgICNiZWdpbkRhdGVwaWNrZXJcbiAgICAgICAgICBbc3RhcnRWaWV3XT1cImNhbGVuZGFyVmlldygpXCJcbiAgICAgICAgICBbc3RhcnRBdF09XCJiZWdpblZhbHVlXCJcbiAgICAgICAgICAoeWVhclNlbGVjdGVkKT1cInllYXJTZWxlY3RlZCgkZXZlbnQsIGJlZ2luRGF0ZXBpY2tlciwgJ2JlZ2luJylcIlxuICAgICAgICAgID5cbiAgICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cblxuICAgICAgICA8aW5wdXQgI2JlZ2luWWVhclxuICAgICAgICAgIGNsYXNzPSBcInllYXItaW5wdXQtaGlkZVwiXG4gICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJiZWdpbkRhdGVwaWNrZXJcIlxuICAgICAgICAgIGVuYWJsZWQ9IGZhbHNlXG4gICAgICAgICAgcmVhZG9ubHk9IHRydWVcbiAgICAgICAgICBbdmFsdWVdPVwiYmVnaW5WYWx1ZT9iZWdpblZhbHVlOmhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1pbkRhdGUpXCJcbiAgICAgICAgICBbbWluXT1cImhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1pbkRhdGUpXCJcbiAgICAgICAgICBbbWF4XT1cIihlbmRWYWx1ZSAmJiAoIXJlc3RyaWN0ZWRUb1N0ZXAoKSkpP2VuZFZhbHVlOmhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXCJcbiAgICAgICAgICA+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8bWF0LWZvcm0tZmllbGQgIGNsYXNzPVwieWVhci1pbnB1dFwiPlxuICAgICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8udGltZUZpbHRlci5lbmRZZWFyJ3wgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICBjbGFzcz1cInllYXItaW5wdXQtb25seS15ZWFyXCJcbiAgICAgICAgICB2YWx1ZT1cInt7b25seVllYXJFbmR9fVwiXG4gICAgICAgICAgKGNoYW5nZSk9IFwieWVhck9ubHlJbnB1dENoYW5nZSgkZXZlbnQsIGVuZERhdGVwaWNrZXIsICdlbmQnKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXSA9IFwiZmlsdGVyU3RhdGVEaXNhYmxlXCI+XG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiZW5kRGF0ZXBpY2tlclwiIFtkaXNhYmxlZF09XCJmaWx0ZXJTdGF0ZURpc2FibGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1kYXRlcGlja2VyXG4gICAgICAgICAgcGFuZWxDbGFzcz1cImRhdGVwaWNrZXIteWVhclwiXG4gICAgICAgICAgI2VuZERhdGVwaWNrZXJcbiAgICAgICAgICBbc3RhcnRWaWV3XT1cImNhbGVuZGFyVmlldygpXCJcbiAgICAgICAgICBbc3RhcnRBdF09XCJlbmRWYWx1ZVwiXG4gICAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJ5ZWFyU2VsZWN0ZWQoJGV2ZW50LCBlbmREYXRlcGlja2VyLCAnZW5kJylcIlxuICAgICAgICAgID5cbiAgICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cblxuICAgICAgICA8aW5wdXQgI2VuZFllYXJcbiAgICAgICAgICBjbGFzcz0gXCJ5ZWFyLWlucHV0LWhpZGVcIlxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZW5kRGF0ZXBpY2tlclwiXG4gICAgICAgICAgZW5hYmxlZD0gZmFsc2VcbiAgICAgICAgICByZWFkb25seT0gdHJ1ZVxuICAgICAgICAgIFt2YWx1ZV09XCJlbmRWYWx1ZT9lbmRWYWx1ZTpoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5tYXhEYXRlKVwiXG4gICAgICAgICAgW21pbl09XCJiZWdpblZhbHVlP2JlZ2luVmFsdWU6aGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZSlcIlxuICAgICAgICAgIFttYXhdPVwiaGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZSlcIlxuICAgICAgICAgID5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwicmVzZXQtYnV0dG9uXCIgXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcbiAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIiBcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnJlc2V0RmlsdGVycycgfCB0cmFuc2xhdGVcIiBcbiAgICAgICAgW2Rpc2FibGVkXT0gXCJmaWx0ZXJTdGF0ZURpc2FibGVcIj5cbiAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJ7e3Jlc2V0SWNvbn19XCI+PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgXG4gICAgICAgIGNsYXNzPSd0b2dnbGUtZmlsdGVyLXN0YXRlJyBcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVGaWx0ZXJTdGF0ZSgpXCIgXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci50b2dnbGVGaWx0ZXJTdGF0ZScgfCB0cmFuc2xhdGVcIiBcbiAgICAgICAgdG9vbHRpcC1wb3NpdGlvbj1cImJlbG93XCIgXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICBbY2hlY2tlZF09XCIhZmlsdGVyU3RhdGVEaXNhYmxlXCI+XG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkYXRldGltZS1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cImNhbGVuZGFyVHlwZSgpIT09J3llYXInXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXRpbWUtaW5wdXRcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZGF0ZS1pbnB1dFwiPlxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiYmVnaW5EYXRlcGlja2VyXCIgW2Rpc2FibGVkXT0gXCJmaWx0ZXJTdGF0ZURpc2FibGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICA8aW5wdXQgI2JlZ2luXG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiYmVnaW5EYXRlcGlja2VyXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInaWdvLmdlby50aW1lRmlsdGVyLnN0YXJ0RGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImNoYW5nZVRlbXBvcmFsUHJvcGVydHkoYmVnaW4udmFsdWUsIDEpXCJcbiAgICAgICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImZpbHRlckJlZ2luRnVuY3Rpb25cIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImJlZ2luVmFsdWU/YmVnaW5WYWx1ZTpoYW5kbGVEYXRlKGRhdGFzb3VyY2Uub3B0aW9ucy5taW5EYXRlKVwiXG4gICAgICAgICAgICBbbWluXT1cImhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1pbkRhdGUpXCJcbiAgICAgICAgICAgIFttYXhdPVwiKGVuZFZhbHVlICYmICghcmVzdHJpY3RlZFRvU3RlcCgpKSk/ZW5kVmFsdWU6aGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWF4RGF0ZSlcIiBcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IFwiZmlsdGVyU3RhdGVEaXNhYmxlXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWxsZXJcIj48L3NwYW4+XG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyXG4gICAgICAgICAgICAjYmVnaW5EYXRlcGlja2VyXG4gICAgICAgICAgICBbc3RhcnRWaWV3XT1cImNhbGVuZGFyVmlldygpXCJcbiAgICAgICAgICAgIFtzdGFydEF0XT1cImJlZ2luVmFsdWVcIlxuICAgICAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJ5ZWFyU2VsZWN0ZWQoJGV2ZW50LCBiZWdpbkRhdGVwaWNrZXIsICdiZWdpbicpXCJcbiAgICAgICAgICAgIChtb250aFNlbGVjdGVkKT1cIm1vbnRoU2VsZWN0ZWQoJGV2ZW50LCBiZWdpbkRhdGVwaWNrZXIsICdiZWdpbicpXCI+XG4gICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dFwiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImhvdXItaW5wdXRcIiAqbmdJZj1cImNhbGVuZGFyVHlwZSgpPT09J2RhdGV0aW1lJ1wiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLnRpbWVGaWx0ZXIuaG91cicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImJlZ2luSG91ckZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VUZW1wb3JhbFByb3BlcnR5KGJlZ2luLnZhbHVlLCAxKVwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaG91ciBvZiBiZWdpbkhvdXJzXCIgW3ZhbHVlXT1cImhvdXJcIj57e2hvdXJ9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1pbnV0ZS1pbnB1dFwiICpuZ0lmPVwiY2FsZW5kYXJUeXBlKCk9PT0nZGF0ZXRpbWUnXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8udGltZUZpbHRlci5taW51dGUnIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJiZWdpbk1pbnV0ZUZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiIWN1cnJlbnRGaWx0ZXIuYWN0aXZlXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VUZW1wb3JhbFByb3BlcnR5KGJlZ2luLnZhbHVlLCAxKVwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIGJlZ2luTWludXRlc1wiIFt2YWx1ZV09XCJtaW51dGVcIj57e21pbnV0ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRldGltZS1pbnB1dFwiICpuZ0lmPVwiIXJlc3RyaWN0ZWRUb1N0ZXAoKVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJkYXRlLWlucHV0XCI+XG4gICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJlbmREYXRlcGlja2VyXCIgW2Rpc2FibGVkXT0gXCJmaWx0ZXJTdGF0ZURpc2FibGVcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgIDxpbnB1dCAjZW5kXG4gICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cImVuZERhdGVwaWNrZXJcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lnby5nZW8udGltZUZpbHRlci5lbmREYXRlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cImNoYW5nZVRlbXBvcmFsUHJvcGVydHkoZW5kLnZhbHVlLCAyKVwiXG4gICAgICAgICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImZpbHRlckVuZEZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cImVuZFZhbHVlP2VuZFZhbHVlOmhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXCJcbiAgICAgICAgICAgICAgW21pbl09XCJiZWdpblZhbHVlP2JlZ2luVmFsdWU6aGFuZGxlRGF0ZShkYXRhc291cmNlLm9wdGlvbnMubWluRGF0ZSlcIlxuICAgICAgICAgICAgICBbbWF4XT1cImhhbmRsZURhdGUoZGF0YXNvdXJjZS5vcHRpb25zLm1heERhdGUpXCIgXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09IFwiZmlsdGVyU3RhdGVEaXNhYmxlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpbGxlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjZW5kRGF0ZXBpY2tlclxuICAgICAgICAgICAgICBbc3RhcnRWaWV3XT1cImNhbGVuZGFyVmlldygpXCJcbiAgICAgICAgICAgICAgW3N0YXJ0QXRdPVwiZW5kVmFsdWVcIlxuICAgICAgICAgICAgICAoeWVhclNlbGVjdGVkKT1cInllYXJTZWxlY3RlZCgkZXZlbnQsIGVuZERhdGVwaWNrZXIsICdlbmQnKVwiXG4gICAgICAgICAgICAgIChtb250aFNlbGVjdGVkKT1cIm1vbnRoU2VsZWN0ZWQoJGV2ZW50LCBlbmREYXRlcGlja2VyLCAnZW5kJylcIj5cbiAgICAgICAgICA8L21hdC1kYXRlcGlja2VyPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWlucHV0XCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiaG91ci1pbnB1dFwiICpuZ0lmPVwiY2FsZW5kYXJUeXBlKCk9PT0nZGF0ZXRpbWUnXCIgPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eydpZ28uZ2VvLnRpbWVGaWx0ZXIuaG91cicgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImVuZEhvdXJGb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShlbmQudmFsdWUsIDIpXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBob3VyIG9mIGVuZEhvdXJzXCIgW3ZhbHVlXT1cImhvdXJcIj57e2hvdXJ9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1pbnV0ZS1pbnB1dFwiICpuZ0lmPVwiY2FsZW5kYXJUeXBlKCk9PT0nZGF0ZXRpbWUnXCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7J2lnby5nZW8udGltZUZpbHRlci5taW51dGUnIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJlbmRNaW51dGVGb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIiFjdXJyZW50RmlsdGVyLmFjdGl2ZVwiXG4gICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwiY2hhbmdlVGVtcG9yYWxQcm9wZXJ0eShlbmQudmFsdWUsIDIpXCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBtaW51dGUgb2YgZW5kTWludXRlc1wiIFt2YWx1ZV09XCJtaW51dGVcIj57e21pbnV0ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJyZXNldC1idXR0b25cIiBcbiAgICAgICAgbWF0LWljb24tYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIChjbGljayk9XCJyZXNldEZpbHRlcigpXCIgXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uZ2VvLmZpbHRlci5yZXNldEZpbHRlcnMnIHwgdHJhbnNsYXRlXCIgXG4gICAgICAgIFtkaXNhYmxlZF09IFwiZmlsdGVyU3RhdGVEaXNhYmxlXCI+XG4gICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tyZXNldEljb259fVwiPjwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFxuICAgICAgICBjbGFzcz1cInRvZ2dsZS1maWx0ZXItc3RhdGVcIiBcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVGaWx0ZXJTdGF0ZSgpXCIgXG4gICAgICAgIHRvb2x0aXAtcG9zaXRpb249XCJiZWxvd1wiIFxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5nZW8uZmlsdGVyLnRvZ2dsZUZpbHRlclN0YXRlJyB8IHRyYW5zbGF0ZVwiIFxuICAgICAgICBbY2hlY2tlZF09IFwiIWZpbHRlclN0YXRlRGlzYWJsZVwiPlxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|