qwc2 2025.3.31
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/LICENSE +28 -0
- package/README.md +68 -0
- package/actions/display.js +7 -0
- package/actions/editing.js +7 -0
- package/actions/layerinfo.js +7 -0
- package/actions/layers.js +8 -0
- package/actions/localConfig.js +7 -0
- package/actions/locale.js +10 -0
- package/actions/locate.js +8 -0
- package/actions/logging.js +7 -0
- package/actions/map.js +15 -0
- package/actions/measurement.js +8 -0
- package/actions/processNotifications.js +7 -0
- package/actions/redlining.js +7 -0
- package/actions/redliningPick.js +7 -0
- package/actions/serviceinfo.js +7 -0
- package/actions/task.js +9 -0
- package/actions/theme.js +24 -0
- package/actions/windows.js +10 -0
- package/components/AppMenu.js +8 -0
- package/components/AttributeForm.js +34 -0
- package/components/AutoEditForm.js +8 -0
- package/components/CoordinateDisplayer.js +7 -0
- package/components/EditComboField.js +10 -0
- package/components/EditUploadField.js +8 -0
- package/components/FullscreenSwitcher.js +8 -0
- package/components/Icon.js +7 -0
- package/components/IdentifyViewer.js +16 -0
- package/components/ImportLayer.js +25 -0
- package/components/LayerInfoWindow.js +7 -0
- package/components/LinkFeatureForm.js +10 -0
- package/components/MapSelection.js +13 -0
- package/components/NumericInputWindow.js +7 -0
- package/components/PickFeature.js +7 -0
- package/components/PluginsContainer.js +8 -0
- package/components/PrintSelection.js +54 -0
- package/components/QtDesignerForm.js +30 -0
- package/components/ResizeableWindow.js +12 -0
- package/components/SearchBox.js +26 -0
- package/components/ServiceInfoWindow.js +7 -0
- package/components/SideBar.js +9 -0
- package/components/StandardApp.js +35 -0
- package/components/Swipeable.js +1 -0
- package/components/TaskBar.js +7 -0
- package/components/ThemeLayersListWindow.js +9 -0
- package/components/ThemeList.js +12 -0
- package/components/Toolbar.js +7 -0
- package/components/WindowManager.js +7 -0
- package/components/map/OlLayer.js +12 -0
- package/components/map/OlLocate.css +56 -0
- package/components/map/OlLocate.js +17 -0
- package/components/map/OlMap.js +11 -0
- package/components/map/layers/BingLayer.js +8 -0
- package/components/map/layers/GoogleLayer.js +27 -0
- package/components/map/layers/GraticuleLayer.js +8 -0
- package/components/map/layers/ImageLayer.js +8 -0
- package/components/map/layers/MVTLayer.js +7 -0
- package/components/map/layers/OSMLayer.js +8 -0
- package/components/map/layers/OverlayLayer.js +10 -0
- package/components/map/layers/VectorLayer.js +14 -0
- package/components/map/layers/WFSLayer.js +11 -0
- package/components/map/layers/WMSLayer.js +11 -0
- package/components/map/layers/WMTSLayer.js +9 -0
- package/components/map/layers/XYZLayer.js +7 -0
- package/components/map/layers/index.js +8 -0
- package/components/map3d/BottomBar3D.js +7 -0
- package/components/map3d/Compare3D.js +12 -0
- package/components/map3d/Draw3D.js +10 -0
- package/components/map3d/ExportObjects3D.js +17 -0
- package/components/map3d/HeightProfile3D.js +8 -0
- package/components/map3d/HideObjects3D.js +12 -0
- package/components/map3d/Identify3D.js +13 -0
- package/components/map3d/LayerTree3D.js +8 -0
- package/components/map3d/Map3D.js +29 -0
- package/components/map3d/Map3DLight.js +10 -0
- package/components/map3d/MapControls3D.js +20 -0
- package/components/map3d/MapExport3D.js +11 -0
- package/components/map3d/Measure3D.js +23 -0
- package/components/map3d/OverviewMap3D.js +9 -0
- package/components/map3d/SearchField3D.js +16 -0
- package/components/map3d/TopBar3D.js +7 -0
- package/components/map3d/View3DSwitcher.js +7 -0
- package/components/map3d/drawtool/CreateTool3D.js +9 -0
- package/components/map3d/drawtool/EditTool3D.js +9 -0
- package/components/map3d/drawtool/NumericInput3D.js +7 -0
- package/components/map3d/img/viewcone.svg +124 -0
- package/components/map3d/layers/VectorLayer3D.js +7 -0
- package/components/map3d/layers/WFSLayer3D.js +8 -0
- package/components/map3d/layers/WMSLayer3D.js +7 -0
- package/components/map3d/layers/WMTSLayer3D.js +9 -0
- package/components/map3d/layers/index.js +8 -0
- package/components/map3d/models/arrow.glb +0 -0
- package/components/map3d/models/pin.glb +0 -0
- package/components/map3d/slices/map3d.js +1 -0
- package/components/map3d/style/BottomBar3D.css +67 -0
- package/components/map3d/style/Compare3D.css +57 -0
- package/components/map3d/style/Draw3D.css +7 -0
- package/components/map3d/style/HideObjects3D.css +29 -0
- package/components/map3d/style/LayerTree3D.css +126 -0
- package/components/map3d/style/Map3D.css +42 -0
- package/components/map3d/style/Map3DLight.css +72 -0
- package/components/map3d/style/MapControls3D.css +56 -0
- package/components/map3d/style/MapExport3D.css +25 -0
- package/components/map3d/style/OverviewMap3D.css +37 -0
- package/components/map3d/style/SearchField3D.css +7 -0
- package/components/map3d/style/View3DSwitcher.css +27 -0
- package/components/map3d/utils/Tiles3DStyle.js +1 -0
- package/components/share/ShareLink.js +7 -0
- package/components/share/ShareQRCode.js +8 -0
- package/components/share/ShareSocials.js +9 -0
- package/components/share/style/ShareLink.css +13 -0
- package/components/share/style/ShareSocials.css +9 -0
- package/components/style/App.css +229 -0
- package/components/style/AppMenu.css +162 -0
- package/components/style/AttributeForm.css +57 -0
- package/components/style/AutoEditForm.css +64 -0
- package/components/style/DefaultColorScheme.css +60 -0
- package/components/style/EditUploadField.css +103 -0
- package/components/style/FullscreenSwitcher.css +25 -0
- package/components/style/Icon.css +26 -0
- package/components/style/IdentifyViewer.css +249 -0
- package/components/style/ImportLayer.css +28 -0
- package/components/style/LayerInfoWindow.css +46 -0
- package/components/style/LinkFeatureForm.css +48 -0
- package/components/style/NumericInputWindow.css +11 -0
- package/components/style/PickFeature.css +25 -0
- package/components/style/PluginsContainer.css +4 -0
- package/components/style/QtDesignerForm.css +225 -0
- package/components/style/ResizeableWindow.css +178 -0
- package/components/style/SearchBox.css +159 -0
- package/components/style/ServiceInfoWindow.css +34 -0
- package/components/style/SideBar.css +100 -0
- package/components/style/TaskBar.css +35 -0
- package/components/style/ThemeLayersListWindow.css +47 -0
- package/components/style/ThemeList.css +200 -0
- package/components/style/Toolbar.css +20 -0
- package/components/style/WindowManager.css +50 -0
- package/components/timeline/FixedTimeline.js +10 -0
- package/components/timeline/InfiniteTimeline.js +13 -0
- package/components/timeline/TimelineFeaturesSlider.js +10 -0
- package/components/timeline/style/FixedTimeline.css +76 -0
- package/components/timeline/style/InfiniteTimeline.css +94 -0
- package/components/timeline/style/TimelineFeaturesSlider.css +131 -0
- package/components/widgets/AccordeonWidget.js +7 -0
- package/components/widgets/ButtonBar.js +7 -0
- package/components/widgets/ColorButton.js +8 -0
- package/components/widgets/ComboBox.js +7 -0
- package/components/widgets/CopyButton.js +7 -0
- package/components/widgets/DateTimeInput.js +8 -0
- package/components/widgets/EditableSelect.js +8 -0
- package/components/widgets/FileSelector.js +9 -0
- package/components/widgets/Input.js +7 -0
- package/components/widgets/InputContainer.js +7 -0
- package/components/widgets/LayerCatalogWidget.js +3 -0
- package/components/widgets/MenuButton.js +1 -0
- package/components/widgets/ModalDialog.js +7 -0
- package/components/widgets/NavBar.js +7 -0
- package/components/widgets/NumberInput.js +9 -0
- package/components/widgets/PopupMenu.js +1 -0
- package/components/widgets/Primitives.js +7 -0
- package/components/widgets/ReCaptchaWidget.js +1 -0
- package/components/widgets/SearchWidget.js +7 -0
- package/components/widgets/Spinner.js +6 -0
- package/components/widgets/SuggestionInput.js +7 -0
- package/components/widgets/TextInput.js +7 -0
- package/components/widgets/ToggleSwitch.js +7 -0
- package/components/widgets/VectorLayerPicker.js +8 -0
- package/components/widgets/style/AccordeonWidget.css +22 -0
- package/components/widgets/style/ButtonBar.css +88 -0
- package/components/widgets/style/ColorButton.css +88 -0
- package/components/widgets/style/ComboBox.css +83 -0
- package/components/widgets/style/CopyButton.css +21 -0
- package/components/widgets/style/EditableSelect.css +47 -0
- package/components/widgets/style/FileSelector.css +14 -0
- package/components/widgets/style/InputContainer.css +34 -0
- package/components/widgets/style/LayerCatalogWidget.css +59 -0
- package/components/widgets/style/MenuButton.css +122 -0
- package/components/widgets/style/ModalDialog.css +50 -0
- package/components/widgets/style/NavBar.css +12 -0
- package/components/widgets/style/NumberInput.css +76 -0
- package/components/widgets/style/SearchWidget.css +43 -0
- package/components/widgets/style/Spinner.css +32 -0
- package/components/widgets/style/SuggestionInput.css +8 -0
- package/components/widgets/style/TextInput.css +94 -0
- package/components/widgets/style/ToggleSwitch.css +61 -0
- package/components/widgets/style/VectorLayerPicker.css +3 -0
- package/icons/2d.svg +70 -0
- package/icons/3d.svg +70 -0
- package/icons/3d2d.svg +92 -0
- package/icons/after.svg +76 -0
- package/icons/arrow-down.svg +60 -0
- package/icons/arrow-up.svg +60 -0
- package/icons/before.svg +76 -0
- package/icons/bglayer.svg +71 -0
- package/icons/bookmark.svg +170 -0
- package/icons/box.svg +63 -0
- package/icons/buffer.svg +67 -0
- package/icons/camera.svg +118 -0
- package/icons/catalog.svg +62 -0
- package/icons/checked.svg +80 -0
- package/icons/chevron-down.svg +60 -0
- package/icons/chevron-left.svg +59 -0
- package/icons/chevron-right.svg +60 -0
- package/icons/chevron-up.svg +60 -0
- package/icons/circle.svg +70 -0
- package/icons/clear.svg +62 -0
- package/icons/clock.svg +71 -0
- package/icons/cog.svg +60 -0
- package/icons/collapse.svg +73 -0
- package/icons/compare.svg +72 -0
- package/icons/cone.svg +58 -0
- package/icons/confirm.svg +62 -0
- package/icons/copy.svg +60 -0
- package/icons/cuboid.svg +58 -0
- package/icons/cyclomedia.svg +47 -0
- package/icons/cylinder.svg +58 -0
- package/icons/dataimport.svg +116 -0
- package/icons/detach.svg +79 -0
- package/icons/dock.svg +82 -0
- package/icons/dock_bottom.svg +82 -0
- package/icons/dock_left.svg +84 -0
- package/icons/dock_right.svg +84 -0
- package/icons/dock_top.svg +84 -0
- package/icons/draw.svg +78 -0
- package/icons/editdraw.svg +84 -0
- package/icons/edited.svg +78 -0
- package/icons/editing.svg +118 -0
- package/icons/ellipse.svg +72 -0
- package/icons/embed.svg +88 -0
- package/icons/expand.svg +73 -0
- package/icons/export.svg +126 -0
- package/icons/eye.svg +127 -0
- package/icons/featureform.svg +115 -0
- package/icons/fill.svg +62 -0
- package/icons/filter.svg +69 -0
- package/icons/folder-open.svg +60 -0
- package/icons/freehand.svg +82 -0
- package/icons/group.svg +76 -0
- package/icons/home.svg +60 -0
- package/icons/identify_radius.svg +71 -0
- package/icons/identify_region.svg +71 -0
- package/icons/import.svg +62 -0
- package/icons/info-sign.svg +60 -0
- package/icons/info.svg +80 -0
- package/icons/layers.svg +71 -0
- package/icons/light.svg +77 -0
- package/icons/line.svg +61 -0
- package/icons/line_buffer.svg +65 -0
- package/icons/link.svg +75 -0
- package/icons/list-alt.svg +111 -0
- package/icons/lock.svg +54 -0
- package/icons/login.svg +56 -0
- package/icons/logout.svg +56 -0
- package/icons/map3d.svg +51 -0
- package/icons/maximize.svg +84 -0
- package/icons/measure.svg +82 -0
- package/icons/measure_line.svg +87 -0
- package/icons/measure_polygon.svg +88 -0
- package/icons/menu-hamburger.svg +60 -0
- package/icons/minimize.svg +76 -0
- package/icons/minus-sign.svg +60 -0
- package/icons/minus.svg +61 -0
- package/icons/nav-end.svg +74 -0
- package/icons/nav-left.svg +74 -0
- package/icons/nav-right.svg +74 -0
- package/icons/nav-start.svg +73 -0
- package/icons/new.svg +84 -0
- package/icons/nodetool.svg +68 -0
- package/icons/numericinput.svg +86 -0
- package/icons/ok.svg +60 -0
- package/icons/open.svg +79 -0
- package/icons/open_link.svg +74 -0
- package/icons/paint.svg +75 -0
- package/icons/pen.svg +41 -0
- package/icons/person.svg +44 -0
- package/icons/pick.svg +67 -0
- package/icons/pick_point.svg +74 -0
- package/icons/pick_region.svg +71 -0
- package/icons/plus.svg +60 -0
- package/icons/point.svg +67 -0
- package/icons/point_buffer.svg +74 -0
- package/icons/polygon.svg +61 -0
- package/icons/print.svg +60 -0
- package/icons/pyramid.svg +58 -0
- package/icons/radio_checked.svg +78 -0
- package/icons/radio_tristate.svg +75 -0
- package/icons/radio_unchecked.svg +72 -0
- package/icons/rasterexport.svg +124 -0
- package/icons/rect.svg +63 -0
- package/icons/refresh.svg +44 -0
- package/icons/remove.svg +60 -0
- package/icons/report.svg +84 -0
- package/icons/routing-bicycle.svg +40 -0
- package/icons/routing-bus.svg +40 -0
- package/icons/routing-cablecar.svg +40 -0
- package/icons/routing-car.svg +40 -0
- package/icons/routing-ship.svg +40 -0
- package/icons/routing-train.svg +40 -0
- package/icons/routing-tram.svg +40 -0
- package/icons/routing-truck.svg +40 -0
- package/icons/routing-walking.svg +40 -0
- package/icons/routing.svg +68 -0
- package/icons/save.svg +190 -0
- package/icons/scale.svg +62 -0
- package/icons/screenshot.svg +60 -0
- package/icons/search.svg +60 -0
- package/icons/selectbox.svg +79 -0
- package/icons/share.svg +64 -0
- package/icons/snap_edge.svg +79 -0
- package/icons/snap_vertex.svg +79 -0
- package/icons/sphere.svg +58 -0
- package/icons/square.svg +68 -0
- package/icons/sync.svg +72 -0
- package/icons/text.svg +68 -0
- package/icons/themes.svg +81 -0
- package/icons/tilt-down.svg +67 -0
- package/icons/tilt-left.svg +48 -0
- package/icons/tilt-right.svg +48 -0
- package/icons/tilt-up.svg +67 -0
- package/icons/today.svg +45 -0
- package/icons/tools.svg +77 -0
- package/icons/transformtool.svg +74 -0
- package/icons/transparency.svg +132 -0
- package/icons/trash.svg +60 -0
- package/icons/tree_minus.svg +81 -0
- package/icons/tree_plus.svg +81 -0
- package/icons/triangle-down.svg +59 -0
- package/icons/triangle-left.svg +60 -0
- package/icons/triangle-right.svg +60 -0
- package/icons/triangle-up.svg +59 -0
- package/icons/tristate.svg +79 -0
- package/icons/unchecked.svg +74 -0
- package/icons/undock.svg +82 -0
- package/icons/undock_bottom.svg +82 -0
- package/icons/undock_left.svg +82 -0
- package/icons/undock_right.svg +84 -0
- package/icons/undock_top.svg +84 -0
- package/icons/unmaximize.svg +84 -0
- package/icons/unminimize.svg +76 -0
- package/icons/up-down-arrow.svg +66 -0
- package/icons/warning.svg +72 -0
- package/icons/wedge.svg +58 -0
- package/icons/zoom.svg +60 -0
- package/icons/zoomin.svg +71 -0
- package/icons/zoomout.svg +80 -0
- package/libs/openlayers.js +11 -0
- package/package.json +135 -0
- package/plugins/API.js +114 -0
- package/plugins/AttributeTable.js +25 -0
- package/plugins/Authentication.js +13 -0
- package/plugins/BackgroundSwitcher.js +10 -0
- package/plugins/Bookmark.js +13 -0
- package/plugins/BottomBar.js +10 -0
- package/plugins/CookiePopup.js +9 -0
- package/plugins/Cyclomedia.js +11 -0
- package/plugins/Editing.js +21 -0
- package/plugins/FeatureForm.js +21 -0
- package/plugins/FeatureSearch.js +11 -0
- package/plugins/GeometryDigitizer.js +43 -0
- package/plugins/HeightProfile.js +26 -0
- package/plugins/Help.js +11 -0
- package/plugins/HomeButton.js +9 -0
- package/plugins/Identify.js +18 -0
- package/plugins/LayerCatalog.js +45 -0
- package/plugins/LayerTree.js +15 -0
- package/plugins/LocateButton.js +10 -0
- package/plugins/Map.js +22 -0
- package/plugins/MapCompare.js +11 -0
- package/plugins/MapCopyright.js +11 -0
- package/plugins/MapExport.js +23 -0
- package/plugins/MapFilter.js +20 -0
- package/plugins/MapInfoTooltip.js +32 -0
- package/plugins/MapLegend.js +14 -0
- package/plugins/MapTip.js +15 -0
- package/plugins/Measure.js +10 -0
- package/plugins/NewsPopup.js +12 -0
- package/plugins/Panoramax.js +10 -0
- package/plugins/Portal.js +10 -0
- package/plugins/Print.js +22 -0
- package/plugins/ProcessNotifications.js +11 -0
- package/plugins/Redlining.js +12 -0
- package/plugins/Reports.js +15 -0
- package/plugins/Routing.js +23 -0
- package/plugins/ScratchDrawing.js +15 -0
- package/plugins/Settings.js +12 -0
- package/plugins/Share.js +11 -0
- package/plugins/StartupMarker.js +12 -0
- package/plugins/TaskButton.js +9 -0
- package/plugins/ThemeSwitcher.js +10 -0
- package/plugins/TimeManager.js +21 -0
- package/plugins/TopBar.js +13 -0
- package/plugins/ValueTool.js +11 -0
- package/plugins/View3D.js +34 -0
- package/plugins/ZoomButtons.js +11 -0
- package/plugins/map/EditingSupport.js +13 -0
- package/plugins/map/LocateSupport.js +14 -0
- package/plugins/map/MeasurementSupport.js +15 -0
- package/plugins/map/OverviewSupport.js +14 -0
- package/plugins/map/RedliningPickSupport.js +12 -0
- package/plugins/map/RedliningSupport.js +28 -0
- package/plugins/map/ScaleBarSupport.js +10 -0
- package/plugins/map/SnapInteraction.js +1 -0
- package/plugins/map/SnapSupport.js +7 -0
- package/plugins/map/SnappingSupport.js +23 -0
- package/plugins/map/style/OverviewSupport.css +42 -0
- package/plugins/map/style/ScaleBarSupport.css +18 -0
- package/plugins/map/style/SnappingSupport.css +33 -0
- package/plugins/redlining/RedliningBufferSupport.js +8 -0
- package/plugins/style/AttributeTable.css +220 -0
- package/plugins/style/Authentication.css +16 -0
- package/plugins/style/BackgroundSwitcher.css +99 -0
- package/plugins/style/Bookmark.css +62 -0
- package/plugins/style/BottomBar.css +53 -0
- package/plugins/style/Buttons.css +68 -0
- package/plugins/style/CookiePopup.css +24 -0
- package/plugins/style/Cyclomedia.css +66 -0
- package/plugins/style/Editing.css +40 -0
- package/plugins/style/FeatureForm.css +21 -0
- package/plugins/style/FeatureSearch.css +71 -0
- package/plugins/style/GeometryDigitizer.css +28 -0
- package/plugins/style/HeightProfile.css +26 -0
- package/plugins/style/Identify.css +4 -0
- package/plugins/style/LayerCatalog.css +8 -0
- package/plugins/style/LayerTree.css +316 -0
- package/plugins/style/Map.css +43 -0
- package/plugins/style/MapCompare.css +27 -0
- package/plugins/style/MapCopyright.css +17 -0
- package/plugins/style/MapExport.css +55 -0
- package/plugins/style/MapFilter.css +101 -0
- package/plugins/style/MapInfoTooltip.css +78 -0
- package/plugins/style/MapLegend.css +36 -0
- package/plugins/style/MapTip.css +22 -0
- package/plugins/style/Measure.css +23 -0
- package/plugins/style/NewsPopup.css +87 -0
- package/plugins/style/Panoramax.css +15 -0
- package/plugins/style/Portal.css +115 -0
- package/plugins/style/Print.css +116 -0
- package/plugins/style/ProcessNotifications.css +55 -0
- package/plugins/style/Redlining.css +101 -0
- package/plugins/style/Reports.css +11 -0
- package/plugins/style/Routing.css +243 -0
- package/plugins/style/ScratchDrawing.css +8 -0
- package/plugins/style/Settings.css +11 -0
- package/plugins/style/Share.css +59 -0
- package/plugins/style/ThemeSwitcher.css +7 -0
- package/plugins/style/TimeManager.css +91 -0
- package/plugins/style/TopBar.css +50 -0
- package/plugins/style/ValueTool.css +60 -0
- package/reducers/display.js +7 -0
- package/reducers/editing.js +8 -0
- package/reducers/index.js +7 -0
- package/reducers/layerinfo.js +7 -0
- package/reducers/layers.js +14 -0
- package/reducers/localConfig.js +8 -0
- package/reducers/locale.js +8 -0
- package/reducers/locate.js +8 -0
- package/reducers/map.js +11 -0
- package/reducers/measurement.js +8 -0
- package/reducers/processNotifications.js +7 -0
- package/reducers/redlining.js +7 -0
- package/reducers/redliningPick.js +7 -0
- package/reducers/serviceinfo.js +7 -0
- package/reducers/task.js +7 -0
- package/reducers/theme.js +7 -0
- package/reducers/windows.js +7 -0
- package/scripts/dist.sh +16 -0
- package/scripts/gen-plugin-docs.js +9 -0
- package/scripts/makeIconkit.js +7 -0
- package/scripts/package-commands.bat +8 -0
- package/scripts/package-commands.sh +22 -0
- package/scripts/themesConfig.js +48 -0
- package/scripts/themesConfig.py +659 -0
- package/scripts/translateui.sh +51 -0
- package/scripts/updateTranslations.js +17 -0
- package/scripts/wmts_config_generator.py +169 -0
- package/selectors/searchproviders.js +12 -0
- package/static/translations/bg-BG.json +709 -0
- package/static/translations/ca-ES.json +709 -0
- package/static/translations/cs-CZ.json +709 -0
- package/static/translations/de-CH.json +709 -0
- package/static/translations/de-DE.json +709 -0
- package/static/translations/en-US.json +709 -0
- package/static/translations/es-ES.json +709 -0
- package/static/translations/fi-FI.json +709 -0
- package/static/translations/fr-FR.json +709 -0
- package/static/translations/hu-HU.json +709 -0
- package/static/translations/it-IT.json +709 -0
- package/static/translations/ja-JP.json +709 -0
- package/static/translations/nl-NL.json +709 -0
- package/static/translations/no-NO.json +709 -0
- package/static/translations/pl-PL.json +709 -0
- package/static/translations/pt-BR.json +709 -0
- package/static/translations/pt-PT.json +709 -0
- package/static/translations/ro-RO.json +709 -0
- package/static/translations/ru-RU.json +709 -0
- package/static/translations/sv-SE.json +709 -0
- package/static/translations/tr-TR.json +709 -0
- package/static/translations/tsconfig.json +606 -0
- package/stores/StandardStore.js +8 -0
- package/utils/ConfigUtils.js +9 -0
- package/utils/CoordinatesUtils.js +29 -0
- package/utils/DxfUtils.js +10 -0
- package/utils/EditingInterface.js +67 -0
- package/utils/EditingUtils.js +11 -0
- package/utils/FeatureStyles.js +10 -0
- package/utils/IdentifyUtils.js +12 -0
- package/utils/ImageEditor.js +15 -0
- package/utils/LayerUtils.js +57 -0
- package/utils/LocaleUtils.js +9 -0
- package/utils/MapUtils.js +66 -0
- package/utils/MeasureUtils.js +9 -0
- package/utils/MiscUtils.js +15 -0
- package/utils/PermaLinkUtils.js +11 -0
- package/utils/ResourceRegistry.js +7 -0
- package/utils/RoutingInterface.js +12 -0
- package/utils/SearchProviders.js +19 -0
- package/utils/ServiceLayerUtils.js +20 -0
- package/utils/Signal.js +2 -0
- package/utils/ThemeUtils.js +12 -0
- package/utils/VectorLayerUtils.js +20 -0
- package/utils/expr_grammar/README.md +3 -0
- package/utils/expr_grammar/grammar.js +3 -0
- package/utils/expr_grammar/grammar.ne +118 -0
- package/utils/expr_grammar/test.js +13 -0
- package/utils/img/README.markers +1 -0
- package/utils/img/arrowhead.svg +4 -0
- package/utils/img/marker-icon.png +0 -0
- package/utils/img/measurehead.svg +4 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _extends(){return _extends=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)({}).hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},_extends.apply(null,arguments)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import React from"react";import mime from"mime-to-extensions";import PropTypes from"prop-types";import{v1 as uuidv1}from"uuid";import ConfigUtils from"../utils/ConfigUtils";import{showImageEditor}from"../utils/ImageEditor";import LocaleUtils from"../utils/LocaleUtils";import Icon from"./Icon";import ButtonBar from"./widgets/ButtonBar";import ModalDialog from"./widgets/ModalDialog";import"./style/EditUploadField.css";var EditUploadField=/*#__PURE__*/function(_React$Component){function EditUploadField(props){var _this;_classCallCheck(this,EditUploadField);_this=_callSuper(this,EditUploadField,[props]);_defineProperty(_this,"state",{camera:false,imageData:null,imageFilename:null});_defineProperty(_this,"fileSelected",function(ev){if(ev.target.files[0].type.startsWith("image/")){var reader=new FileReader;reader.readAsDataURL(ev.target.files[0]);reader.onload=function(){_this.setState({imageData:reader.result,imageFilename:ev.target.files[0].name});_this.props.updateFile(_this.props.fieldId,new File([_this.dataUriToBlob(reader.result)],ev.target.files[0].name,{type:ev.target.files[0].type}));_this.props.updateField(_this.props.fieldId,"")}}else{_this.props.updateField(_this.props.fieldId,"");_this.props.updateFile(_this.props.fieldId,ev.target.files[0])}});_defineProperty(_this,"enableCamera",function(){_this.setState({camera:true})});_defineProperty(_this,"disableCamera",function(){_this.disableMediaStream();_this.setState({camera:false})});_defineProperty(_this,"renderCaptureFrame",function(){return/*#__PURE__*/React.createElement(ModalDialog,{icon:"camera",onClose:_this.disableCamera,title:LocaleUtils.tr("editing.takepicture")},/*#__PURE__*/React.createElement("video",{className:"edit-capture-frame",ref:_this.activateMediaStream}),/*#__PURE__*/React.createElement("div",{className:"edit-capture-controls"},/*#__PURE__*/React.createElement(Icon,{icon:"camera",onClick:_this.capturePicture})))});_defineProperty(_this,"capturePicture",function(){if(_this.cameraStream){var width=_this.videoElement.videoWidth;var height=_this.videoElement.videoHeight;var canvas=document.createElement("canvas");canvas.width=width;canvas.height=height;var context=canvas.getContext("2d");context.drawImage(_this.videoElement,0,0,width,height);var imageData=canvas.toDataURL("image/jpeg");_this.setState({imageData:imageData,imageFilename:uuidv1()+".jpg"});_this.props.updateField(_this.props.fieldId,"");_this.props.updateFile(_this.props.fieldId,new File([_this.dataUriToBlob(imageData)],uuidv1()+".jpg",{type:"image/jpeg"}))}_this.disableCamera()});_defineProperty(_this,"imageButtonClicked",function(action){if(action==="Draw"){var fileValue=_this.props.value.startsWith("attachment:")?_this.props.value.replace(/attachment:\/\//,""):"";var fileType=mime.lookup(fileValue);var editServiceUrl=ConfigUtils.getConfigProp("editServiceUrl");var fileUrl=editServiceUrl+_this.props.dataset+"/attachment?file="+encodeURIComponent(fileValue);var imageData=fileType&&fileType.startsWith("image/")?fileUrl:_this.state.imageData;showImageEditor(imageData,function(newImageData){_this.setState({imageData:newImageData,imageFilename:fileValue.replace(/.*\//,"")});_this.props.updateField(_this.props.fieldId,"");_this.props.updateFile(_this.props.fieldId,new File([_this.dataUriToBlob(newImageData)],uuidv1()+".jpg",{type:"image/jpeg"}))})}else if(action==="Clear"){_this.clearImage()}});_defineProperty(_this,"clearImage",function(){_this.setState({imageData:null,imageFilename:null});_this.props.updateField(_this.props.fieldId,"");_this.props.updateFile(_this.props.fieldId,null)});_defineProperty(_this,"activateMediaStream",function(el){if(_this.state.camera&&!_this.cameraStream){var constraints={video:{width:{ideal:4096},height:{ideal:2160}}};navigator.mediaDevices.getUserMedia(constraints).then(function(mediaStream){_this.cameraStream=mediaStream;el.srcObject=mediaStream;el.play();_this.videoElement=el})["catch"](function(err){// eslint-disable-next-line
|
|
8
|
+
console.warn("Unable to access camera: "+err)})}});_defineProperty(_this,"disableMediaStream",function(){if(_this.cameraStream){_this.cameraStream.getTracks()[0].stop();_this.cameraStream=null;_this.videoElement=null}});_defineProperty(_this,"download",function(href,filename){var a=document.createElement("a");a.href=href;a.target="_blank";a.setAttribute("download",filename);a.click()});_defineProperty(_this,"dataUriToBlob",function(dataUri){var parts=dataUri.split(",");var byteString=parts[0].indexOf("base64")>=0?atob(parts[1]):decodeURI(parts[1]);var mimeString=parts[0].split(":")[1].split(";")[0];var ia=new Uint8Array(byteString.length);for(var i=0;i<byteString.length;i++){ia[i]=byteString.charCodeAt(i)}return new Blob([ia],{type:mimeString})});_this.cameraStream=null;_this.videoElement=null;_this.portal=document.createElement("div");document.body.appendChild(_this.portal);return _this}_inherits(EditUploadField,_React$Component);return _createClass(EditUploadField,[{key:"componentWillUnmount",value:function componentWillUnmount(){this.disableMediaStream()}},{key:"render",value:function render(){var _this2=this;var fileValue=this.props.value.startsWith("attachment:")?this.props.value.replace(/attachment:\/\//,""):"";var fileType=mime.lookup(fileValue);var editServiceUrl=ConfigUtils.getConfigProp("editServiceUrl");var fileUrl=editServiceUrl+this.props.dataset+"/attachment?file="+encodeURIComponent(fileValue);var constraints=_objectSpread(_objectSpread({},this.props.constraints),{},{accept:(this.props.constraints.accept||"").split(",").map(function(ext){return mime.lookup(ext)}).join(",")});var mediaSupport="mediaDevices"in navigator&&constraints.accept.split(",").includes("image/jpeg");var imageData=fileType&&fileType.startsWith("image/")?fileUrl:this.state.imageData;if(imageData){if(this.props.showThumbnails){var extension=fileValue?fileValue.replace(/^.*\./,""):"jpg";var imagebuttons=[{key:"Draw",icon:"paint",tooltip:LocaleUtils.tr("editing.paint"),disabled:this.props.disabled},{key:"Clear",icon:"clear",tooltip:LocaleUtils.tr("editing.clearpicture"),disabled:this.props.disabled}];return/*#__PURE__*/React.createElement("span",{className:"edit-upload-field-image"},/*#__PURE__*/React.createElement("img",{onClick:function onClick(){return _this2.download(imageData,_this2.props.fieldId+"."+extension)},src:imageData}),this.state.imageData?/*#__PURE__*/React.createElement("input",{"data-filename":this.state.imageFilename,name:this.props.name,type:"hidden",value:this.state.imageData}):null,!this.props.report?/*#__PURE__*/React.createElement(ButtonBar,{buttons:imagebuttons,onClick:this.imageButtonClicked,tooltipPos:"top"}):null)}else{var _extension=fileValue?fileValue.replace(/^.*\./,""):"jpg";return/*#__PURE__*/React.createElement("span",{className:"edit-upload-field edit-upload-field-imagelink"+(this.props.disabled?" edit-upload-field-disabled":"")},fileValue?/*#__PURE__*/React.createElement("a",{href:fileUrl,rel:"noreferrer",target:"_blank"},fileValue.replace(/.*\//,"")):/*#__PURE__*/React.createElement("a",{href:"#",onClick:function onClick(ev){_this2.download(imageData,_this2.state.imageFilename);ev.preventDefault()},rel:"noreferrer",target:"_blank"},this.state.imageFilename),/*#__PURE__*/React.createElement("img",{onClick:function onClick(){return _this2.download(imageData,_this2.props.fieldId+"."+_extension)},src:imageData}),this.props.report?null:/*#__PURE__*/React.createElement(Icon,{icon:"clear",onClick:this.props.disabled?null:this.clearImage}))}}else if(fileValue){return/*#__PURE__*/React.createElement("span",{className:"edit-upload-field edit-upload-field-imagelink"+(this.props.disabled?" edit-upload-field-disabled":"")},/*#__PURE__*/React.createElement("a",{href:fileUrl,rel:"noreferrer",target:"_blank"},fileValue.replace(/.*\//,"")),this.props.report?null:/*#__PURE__*/React.createElement(Icon,{icon:"clear",onClick:this.props.disabled?null:this.clearImage}))}else if(!this.props.report){return/*#__PURE__*/React.createElement("span",{className:"edit-upload-field-input"+(this.props.disabled?" edit-upload-field-input-disabled":"")},/*#__PURE__*/React.createElement("input",_extends({disabled:this.props.disabled,name:this.props.name,type:"file"},constraints,{onChange:this.fileSelected})),mediaSupport?/*#__PURE__*/React.createElement(Icon,{icon:"camera",onClick:this.props.disabled?null:this.enableCamera}):null,this.state.camera?this.renderCaptureFrame():null)}else{return null}}}])}(React.Component);_defineProperty(EditUploadField,"propTypes",{constraints:PropTypes.object,dataset:PropTypes.string,disabled:PropTypes.bool,fieldId:PropTypes.string,name:PropTypes.string,report:PropTypes.bool,showThumbnails:PropTypes.bool,updateField:PropTypes.func,updateFile:PropTypes.func,value:PropTypes.string});_defineProperty(EditUploadField,"defaultProps",{showThumbnails:true,updateFile:function updateFile(){}});export{EditUploadField as default};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2016-2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import React from"react";import{connect}from"react-redux";import PropTypes from"prop-types";import{toggleFullscreen}from"../actions/display";import ConfigUtils from"../utils/ConfigUtils";import LocaleUtils from"../utils/LocaleUtils";import"./style/FullscreenSwitcher.css";var FullscreenSwitcher=/*#__PURE__*/function(_React$Component){function FullscreenSwitcher(){var _this;_classCallCheck(this,FullscreenSwitcher);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,FullscreenSwitcher,[].concat(args));_defineProperty(_this,"toggleFullscreen",function(){_this.props.fullscreenToggled(!_this.props.fullscreen)});_defineProperty(_this,"checkFullscreenState",function(){var _ref,_document$fullscreenE;var isFullScreen=((_ref=(_document$fullscreenE=document.fullscreenElement)!==null&&_document$fullscreenE!==void 0?_document$fullscreenE:document.webkitFullscreenElement)!==null&&_ref!==void 0?_ref:null)!==null;if(isFullScreen!==_this.props.fullscreen){_this.props.fullscreenToggled(isFullScreen)}});return _this}_inherits(FullscreenSwitcher,_React$Component);return _createClass(FullscreenSwitcher,[{key:"componentDidMount",value:function componentDidMount(){document.addEventListener("fullscreenchange",this.checkFullscreenState);document.addEventListener("webkitfullscreenchange",this.checkFullscreenState);document.addEventListener("fullscreenerror",this.checkFullscreenState);document.addEventListener("webkitfullscreenerror",this.checkFullscreenState)}},{key:"componentWillUnmount",value:function componentWillUnmount(){document.removeEventListener("fullscreenchange",this.checkFullscreenState);document.removeEventListener("webkitfullscreenchange",this.checkFullscreenState);document.removeEventListener("fullscreenerror",this.checkFullscreenState);document.removeEventListener("webkitfullscreenerror",this.checkFullscreenState)}},{key:"render",value:function render(){// Render nothing on mobile, but keep the component for the onfullscreenchange logic
|
|
8
|
+
if(ConfigUtils.isMobile()){return null}var tooltip=this.props.fullscreen?LocaleUtils.tr("tooltip.fullscreendisable"):LocaleUtils.tr("tooltip.fullscreenenable");return/*#__PURE__*/React.createElement("div",{className:"FullScreenSwitcher",onClick:this.toggleFullscreen,title:tooltip},/*#__PURE__*/React.createElement("span",{className:this.props.fullscreen?"minimize":"maximize"}))}}])}(React.Component);_defineProperty(FullscreenSwitcher,"propTypes",{fullscreen:PropTypes.bool,fullscreenToggled:PropTypes.func});export default connect(function(state){return{fullscreen:state.display.fullscreen}},{fullscreenToggled:toggleFullscreen})(FullscreenSwitcher);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2018-2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import React from"react";import classnames from"classnames";import PropTypes from"prop-types";import ConfigUtils from"../utils/ConfigUtils";import"./style/Icon.css";var Icon=/*#__PURE__*/function(_React$Component){function Icon(){_classCallCheck(this,Icon);return _callSuper(this,Icon,arguments)}_inherits(Icon,_React$Component);return _createClass(Icon,[{key:"render",value:function render(){var classes=classnames(_defineProperty(_defineProperty(_defineProperty({icon:true,icon_disabled:this.props.disabled,icon_clickable:!!this.props.onClick||!!this.props.onMouseDown},"icon-"+this.props.icon,true),"icon_"+this.props.size,!!this.props.size),this.props.className,!!this.props.className));if(this.props.icon.startsWith(":/")){var assetsPath=ConfigUtils.getAssetsPath();var src=assetsPath+this.props.icon.substr(1);return/*#__PURE__*/React.createElement("img",{alt:this.props.title,className:classes,onClick:this.props.disabled?null:this.props.onClick,onMouseDown:this.props.onMouseDown,onMouseUp:this.props.onMouseUp,src:src,title:this.props.title||undefined})}else{return/*#__PURE__*/React.createElement("span",{className:classes,onClick:this.props.disabled?null:this.props.onClick,onMouseDown:this.props.onMouseDown,onMouseUp:this.props.onMouseUp,title:this.props.title||undefined})}}}])}(React.Component);_defineProperty(Icon,"propTypes",{className:PropTypes.string,disabled:PropTypes.bool,icon:PropTypes.string,onClick:PropTypes.func,onMouseDown:PropTypes.func,onMouseUp:PropTypes.func,size:PropTypes.string,title:PropTypes.string});_defineProperty(Icon,"defaultProps",{className:"",title:""});export{Icon as default};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}/**
|
|
2
|
+
* Copyright 2016-2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import React from"react";import{connect}from"react-redux";import axios from"axios";import clone from"clone";import FileSaver from"file-saver";import htmlReactParser,{domToReact}from"html-react-parser";import JSZip from"jszip";import isEmpty from"lodash.isempty";import omit from"lodash.omit";import PropTypes from"prop-types";import{setActiveLayerInfo}from"../actions/layerinfo";import{LayerRole,addLayerFeatures,removeLayer}from"../actions/layers";import{zoomToExtent}from"../actions/map";import{openExternalUrl}from"../actions/windows";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MiscUtils from"../utils/MiscUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import Icon from"./Icon";import Spinner from"./widgets/Spinner";import"./style/IdentifyViewer.css";var BuiltinExporters=[{id:"json",title:"json",allowClipboard:true,"export":function _export(json,callback){var data=JSON.stringify(json,null," ");callback({data:data,type:"text/plain;charset=utf-8",filename:"results.json"})}},{id:"geojson",title:"geojson",allowClipboard:true,"export":function _export(json,callback){var featureCollection={type:"FeatureCollection",features:Object.values(json).flat().map(function(entry){var feature=omit(entry,["featurereport","displayfield","layername","layertitle","layerinfo","attribnames","clickPos","displayname","bbox"]);if(feature.geometry){feature.crs={type:"name",properties:{name:CoordinatesUtils.toOgcUrnCrs(entry.crs)}}}return feature})};var data=JSON.stringify(featureCollection,null," ");callback({data:data,type:"application/geo+json;charset=utf-8",filename:"results.json"})}},{id:"csv",title:"CSV",allowClipboard:true,"export":function _export(json,callback){var data="";Object.entries(json).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),layerName=_ref2[0],features=_ref2[1];features.forEach(function(feature){data+=layerName+": "+feature.displayname+"\n";Object.entries(feature.properties||{}).forEach(function(_ref3){var _ref4=_slicedToArray(_ref3,2),attrib=_ref4[0],value=_ref4[1];if(attrib!=="htmlContent"&&attrib!=="htmlContentInline"){data+="\t\""+attrib+"\"\t\""+String(value).replace("\"","\"\"")+"\"\n"}});if(feature.geometry){data+="\t\"geometry\"\t\""+VectorLayerUtils.geoJSONGeomToWkt(feature.geometry)+"\"\n"}});data+="\n"});callback({data:data,type:"text/plain;charset=utf-8",filename:"results.csv"})}},{id:"csvzip",title:"CSV+ZIP",allowClipboard:false,"export":function _export(json,callback){var first=true;var data=[];var filenames=[];Object.entries(json).forEach(function(_ref5){var _ref6=_slicedToArray(_ref5,2),layerName=_ref6[0],features=_ref6[1];var csv="";if(first){Object.entries(features[0].properties||{}).forEach(function(_ref7){var _ref8=_slicedToArray(_ref7,1),attrib=_ref8[0];if(attrib!=="htmlContent"&&attrib!=="htmlContentInline"){csv+=attrib+";"}});if(features[0].geometry){csv+="geometry"}else if(csv!==""){csv=csv.slice(0,-1);// Remove trailling semi column ;
|
|
8
|
+
}first=false;csv+="\n"}features.forEach(function(feature){Object.entries(feature.properties||{}).forEach(function(_ref9){var _ref10=_slicedToArray(_ref9,2),attrib=_ref10[0],value=_ref10[1];if(attrib!=="htmlContent"&&attrib!=="htmlContentInline"){csv+=String(value).replace("\"","\"\"")+";"}});if(feature.geometry){csv+=VectorLayerUtils.geoJSONGeomToWkt(feature.geometry)}else if(csv!==""){csv=csv.slice(0,-1);// Remove trailling semi column ;
|
|
9
|
+
}csv+="\n"});first=true;data.push(csv);filenames.push(layerName)});if(data.length>1){var zip=new JSZip;for(var i=0;i<data.length;i++){var blob=new Blob([data[i]],{type:"text/csv;charset=utf-8"});zip.file(filenames[i]+".csv",blob)}zip.generateAsync({type:"arraybuffer"}).then(function(result){callback({data:result,type:"application/zip",filename:"results.zip"})})}else{callback({data:data[0],type:"text/csv;charset=utf-8",filename:filenames[0]+".csv"})}}}];var IdentifyViewer=/*#__PURE__*/function(_React$Component){function IdentifyViewer(props){var _this;_classCallCheck(this,IdentifyViewer);_this=_callSuper(this,IdentifyViewer,[props]);_defineProperty(_this,"state",{expanded:{},expandedResults:{},resultTree:{},currentResult:null,currentLayer:null,exportFormat:"geojson",selectedAggregatedReport:null,generatingReport:false,selectedLayer:""});_defineProperty(_this,"updateResultTree",function(){var layers=Object.keys(_this.props.identifyResults);var currentResult=null;var currentLayer=null;if(layers.length===1&&_this.props.identifyResults[layers[0]].length===1){currentResult=_this.props.identifyResults[layers[0]][0];currentLayer=layers[0]}_this.setState({resultTree:clone(_this.props.identifyResults),currentResult:currentResult,currentLayer:currentLayer})});_defineProperty(_this,"setHighlightedResults",function(results,resultTree){if(!results&&_this.props.highlightAllResults){var selectedLayer=_this.state.selectedLayer||"";results=Object.keys(resultTree).reduce(function(res,layer){var layerData=resultTree[selectedLayer||layer];return res.concat(layerData.map(function(result){return _objectSpread(_objectSpread({},result),{},{id:"".concat(selectedLayer||layer,".").concat(result.id)})}))},[])}results=(results||[]).filter(function(result){return result.type.toLowerCase()==="feature"}).map(function(feature){var newFeature=_objectSpread(_objectSpread({},feature),{},{properties:{}});// Ensure selection style is used
|
|
10
|
+
delete newFeature.styleName;delete newFeature.styleOptions;return newFeature});if(!isEmpty(results)){var layer={id:"__identifyviewerhighlight",role:LayerRole.SELECTION};_this.props.addLayerFeatures(layer,results,true)}else{_this.props.removeLayer("__identifyviewerhighlight")}});_defineProperty(_this,"getExpandedClass",function(path,deflt){var expanded=_this.state.expanded[path]!==undefined?_this.state.expanded[path]:deflt;return expanded?"identify-layer-expandable identify-layer-expanded":"identify-layer-expandable"});_defineProperty(_this,"toggleExpanded",function(path,deflt){var newstate=_this.state.expanded[path]!==undefined?!_this.state.expanded[path]:!deflt;var diff={};diff[path]=newstate;if(_this.state.currentLayer===path&&!newstate){_this.setState(function(state){return _objectSpread(_objectSpread({},state),{},{expanded:_objectSpread(_objectSpread({},state.expanded),diff),currentResult:null,currentLayer:null})})}else{_this.setState(function(state){return _objectSpread(_objectSpread({},state),{},{expanded:_objectSpread(_objectSpread({},state.expanded),diff)})})}});_defineProperty(_this,"setCurrentResult",function(layer,result){if(_this.state.currentResult===result){_this.setState({currentResult:null,currentLayer:null})}else{_this.setState({currentResult:result,currentLayer:layer});_this.scrollIntoView=true}});_defineProperty(_this,"removeResultLayer",function(layer){_this.setState(function(state){var newResultTree=_objectSpread({},state.resultTree);delete newResultTree[layer];_this.setState({resultTree:newResultTree,currentResult:state.currentLayer===layer?null:state.currentResult,currentLayer:state.currentLayer===layer?null:state.currentLayer})})});_defineProperty(_this,"removeResult",function(layer,result){_this.setState(function(state){var newResultTree=_objectSpread({},state.resultTree);newResultTree[layer]=state.resultTree[layer].filter(function(item){return item!==result});if(isEmpty(newResultTree[layer])){delete newResultTree[layer]}var selectedLayer=isEmpty(newResultTree[layer])?"":state.selectedLayer;return{resultTree:newResultTree,currentResult:state.currentResult===result?null:state.currentResult,selectedLayer:selectedLayer}})});_defineProperty(_this,"exportResults",function(){var clipboard=arguments.length>0&&arguments[0]!==undefined?arguments[0]:false;var filteredResults={};Object.keys(_this.state.selectedLayer!==""?_defineProperty({},_this.state.selectedLayer,_this.state.resultTree[_this.state.selectedLayer]):_this.state.resultTree).map(function(key){if(!isEmpty(_this.state.resultTree[key])){filteredResults[key]=_this.state.resultTree[key]}});_this["export"](filteredResults,clipboard)});_defineProperty(_this,"exportResultLayer",function(layer){_this["export"](_defineProperty({},layer,_this.state.resultTree[layer]))});_defineProperty(_this,"exportResult",function(layer,result){_this["export"](_defineProperty({},layer,[result]))});_defineProperty(_this,"export",function(json){var clipboard=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;var exporter=_this.getExporters().find(function(entry){return entry.id===_this.state.exportFormat});if(exporter){if(!_this.props.exportGeometry){json=Object.entries(json).reduce(function(res,_ref12){var _ref13=_slicedToArray(_ref12,2),layerId=_ref13[0],features=_ref13[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},layerId,features.map(function(feature){return omit(feature,["geometry"])})))},{})}exporter["export"](json,function(result){if(clipboard&&exporter.allowClipboard){navigator.clipboard.writeText(result.data)}else{FileSaver.saveAs(new Blob([result.data],{type:result.type}),result.filename)}})}});_defineProperty(_this,"renderLayer",function(layer){var results=_this.state.resultTree[layer];if(results.length===0){return null}return/*#__PURE__*/React.createElement("div",{className:_this.getExpandedClass(layer,true),key:layer},/*#__PURE__*/React.createElement("div",{className:"identify-result-entry",onMouseEnter:function onMouseEnter(){return _this.setHighlightedResults(results,_this.state.resultTree)},onMouseLeave:function onMouseLeave(){return _this.setHighlightedResults(_this.state.currentResult===null?null:[_this.state.currentResult],_this.state.resultTree)}},/*#__PURE__*/React.createElement("span",{className:"clickable",onClick:function onClick(){return _this.toggleExpanded(layer,true)}},/*#__PURE__*/React.createElement("b",null,results[0].layertitle)),/*#__PURE__*/React.createElement(Icon,{className:"identify-remove-result",icon:"minus-sign",onClick:function onClick(){return _this.removeResultLayer(layer)}}),_this.props.enableExport===true||!isEmpty(_this.props.enableExport)?/*#__PURE__*/React.createElement(Icon,{className:"identify-export-result",icon:"export",onClick:function onClick(){return _this.exportResultLayer(layer)}}):null),/*#__PURE__*/React.createElement("div",{className:"identify-layer-entries"},results.map(function(result){return _this.renderResult(layer,result)})))});_defineProperty(_this,"renderResult",function(layer,result){var ref=_this.state.currentResult===result&&_this.scrollIntoView?function(el){_this.currentResultElRef=el}:null;return/*#__PURE__*/React.createElement("div",{className:"identify-result-entry",key:result.id,onMouseEnter:function onMouseEnter(){return _this.setHighlightedResults([result],_this.state.resultTree)},onMouseLeave:function onMouseLeave(){return _this.setHighlightedResults(_this.state.currentResult===null?null:[_this.state.currentResult],_this.state.resultTree)}},/*#__PURE__*/React.createElement("span",{className:_this.state.currentResult===result?"active clickable":"clickable",onClick:function onClick(){return _this.setCurrentResult(layer,result)},ref:ref},result.displayname),/*#__PURE__*/React.createElement(Icon,{className:"identify-remove-result",icon:"minus-sign",onClick:function onClick(){return _this.removeResult(layer,result)}}),_this.props.enableExport===true||!isEmpty(_this.props.enableExport)?/*#__PURE__*/React.createElement(Icon,{className:"identify-export-result",icon:"export",onClick:function onClick(){return _this.exportResult(layer,result)}}):null)});_defineProperty(_this,"renderResultAttributes",function(layer,result,resultClass,reportFeatures){if(!result){return null}var resultbox=null;var extraattribs=null;var featureReportTemplate=null;if(ConfigUtils.getConfigProp("documentServiceUrl")){featureReportTemplate=result.featurereport||_this.findFeatureReportTemplate(layer)}if(featureReportTemplate){reportFeatures[layer]=[].concat(_toConsumableArray(reportFeatures[layer]||[]),[result])}var inlineExtaAttribs=false;if(result.type==="text"){resultbox=/*#__PURE__*/React.createElement("pre",{className:"identify-result-box"},result.text)}else if(result.type==="html"){resultbox=/*#__PURE__*/React.createElement("iframe",{className:"identify-result-box",onLoad:function onLoad(ev){return _this.setIframeContent(ev.target,result.text)},ref:function ref(el){return _this.pollIframe(el,result.text)}})}else if(result.properties.htmlContent){if(result.properties.htmlContentInline){resultbox=/*#__PURE__*/React.createElement("div",{className:"identify-result-box"},_this.parsedContent(result.properties.htmlContent))}else{resultbox=/*#__PURE__*/React.createElement("iframe",{className:"identify-result-box",onLoad:function onLoad(ev){return _this.setIframeContent(ev.target,result.properties.htmlContent)},ref:function ref(el){return _this.pollIframe(el,result.properties.htmlContent)}})}}else{var _rows;inlineExtaAttribs=true;var properties=Object.keys(result.properties)||[];var rows=[];if(properties.length===1&&result.properties.maptip){rows=properties.map(function(attrib){return/*#__PURE__*/React.createElement("tr",{key:attrib},/*#__PURE__*/React.createElement("td",{className:"identify-attr-value"},_this.attribValue(result.properties[attrib],attrib,layer,result)))})}else{rows=properties.map(function(attrib){if(_this.props.theme.skipEmptyFeatureAttributes&&(result.properties[attrib]===""||result.properties[attrib]===null||result.properties[attrib]==="NULL")){return null}return/*#__PURE__*/React.createElement("tr",{key:attrib},/*#__PURE__*/React.createElement("td",{className:"identify-attr-title "+_this.props.longAttributesDisplay},/*#__PURE__*/React.createElement("i",null,attrib)),/*#__PURE__*/React.createElement("td",{className:"identify-attr-value "+_this.props.longAttributesDisplay},_this.attribValue(result.properties[attrib],attrib,layer,result)))})}(_rows=rows).push.apply(_rows,_toConsumableArray(_this.computeExtraAttributes(layer,result)));if(featureReportTemplate){rows=rows.concat(/*#__PURE__*/React.createElement("tr",{key:"__featurereport"},/*#__PURE__*/React.createElement("td",{className:"identify-attr-title "+_this.props.longAttributesDisplay},/*#__PURE__*/React.createElement("i",null,LocaleUtils.tr("identify.featureReport"))),/*#__PURE__*/React.createElement("td",{className:"identify-attr-value "+_this.props.longAttributesDisplay},/*#__PURE__*/React.createElement("a",{href:_this.getFeatureReportUrl(featureReportTemplate,result)},LocaleUtils.tr("identify.link")))))}if(isEmpty(rows)){rows=/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",{className:"identify-attr-value"},/*#__PURE__*/React.createElement("i",null,LocaleUtils.tr("identify.noattributes"))))}resultbox=/*#__PURE__*/React.createElement("div",{className:"identify-result-box"},/*#__PURE__*/React.createElement("table",{className:"attribute-list"},/*#__PURE__*/React.createElement("tbody",null,rows)))}if(!inlineExtaAttribs&&(_this.props.attributeCalculator||featureReportTemplate)){extraattribs=/*#__PURE__*/React.createElement("div",{className:"identify-result-box"},/*#__PURE__*/React.createElement("table",{className:"attribute-list"},/*#__PURE__*/React.createElement("tbody",null,_this.computeExtraAttributes(layer,result),featureReportTemplate?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",{className:"identify-attr-title "+_this.props.longAttributesDisplay},/*#__PURE__*/React.createElement("i",null,LocaleUtils.tr("identify.featureReport"))),/*#__PURE__*/React.createElement("td",{className:"identify-attr-value "+_this.props.longAttributesDisplay},/*#__PURE__*/React.createElement("a",{href:_this.getFeatureReportUrl(featureReportTemplate,result),rel:"noreferrer",target:"_blank"},LocaleUtils.tr("identify.link")))):null)))}var zoomToFeatureButton=null;if(result.bbox&&result.crs){zoomToFeatureButton=/*#__PURE__*/React.createElement(Icon,{icon:"zoom",onClick:function onClick(){return _this.props.zoomToExtent(result.bbox,result.crs)}})}var key=result+":"+result.id;var expanded=_this.state.expandedResults[key];return/*#__PURE__*/React.createElement("div",{className:resultClass,key:"results-attributes"},/*#__PURE__*/React.createElement("div",{className:"identify-result-title"},_this.props.collapsible?/*#__PURE__*/React.createElement(Icon,{icon:expanded?"tree_minus":"tree_plus",onClick:function onClick(){return _this.setState(function(state){return{expandedResults:_objectSpread(_objectSpread({},state.expandedResults),{},_defineProperty({},key,!expanded))}})}}):/*#__PURE__*/React.createElement(Icon,{icon:"minus",onClick:function onClick(){return _this.removeResult(layer,result)}}),/*#__PURE__*/React.createElement("span",null,(_this.props.showLayerTitles?result.layertitle+": ":"")+result.displayname),zoomToFeatureButton,/*#__PURE__*/React.createElement(Icon,{icon:"info-sign",onClick:function onClick(){return _this.showLayerInfo(result)}})),_this.props.collapsible&&!expanded?null:/*#__PURE__*/React.createElement("div",{className:"identify-result-container"},resultbox,extraattribs))});_defineProperty(_this,"computeExtraAttributes",function(layer,result){var _window$qwc;var rows=[];Object.values(((_window$qwc=window.qwc2)===null||_window$qwc===void 0?void 0:_window$qwc.__attributeCalculators)||{}).forEach(function(calc,idx){var row=calc(layer,result);if(row.length===2){rows.push(/*#__PURE__*/React.createElement("tr",{key:"custom-attr-"+idx},/*#__PURE__*/React.createElement("td",{className:"identify-attr-title"},/*#__PURE__*/React.createElement("i",null,row[0])),/*#__PURE__*/React.createElement("td",{className:"identify-attr-value"},row[1])))}else if(row.length===1){rows.push(/*#__PURE__*/React.createElement("tr",{key:"custom-attr-"+idx},/*#__PURE__*/React.createElement("td",{colSpan:"2"},row[0])))}});if(_this.props.attributeCalculator){rows.push.apply(rows,_toConsumableArray(_this.props.attributeCalculator(layer,result)))}return rows});_defineProperty(_this,"getExporters",function(){var _window$qwc2;return[].concat(BuiltinExporters,_toConsumableArray(_this.props.customExporters),_toConsumableArray(Object.values(((_window$qwc2=window.qwc2)===null||_window$qwc2===void 0?void 0:_window$qwc2.__identifyExportes)||[])))});_defineProperty(_this,"setIframeContent",function(iframe,html){if(iframe.getAttribute("identify-content-set")){return}iframe.setAttribute("identify-content-set",true);iframe.contentWindow.document.open();iframe.contentWindow.document.write(html);iframe.contentWindow.document.close()});_defineProperty(_this,"pollIframe",function(iframe,html){if(iframe&&!iframe.getAttribute("identify-content-set")){var interval=setInterval(function(){if(iframe.getAttribute("identify-content-set")){return clearInterval(interval)}if(iframe.contentWindow&&iframe.contentWindow.document){iframe.setAttribute("identify-content-set",true);iframe.contentWindow.document.open();iframe.contentWindow.document.write(html);iframe.contentWindow.document.close();clearInterval(interval)}return true},500)}});_defineProperty(_this,"collectFeatureReportTemplates",function(entry){var reports={};if(entry.sublayers){var _iterator=_createForOfIteratorHelper(entry.sublayers),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var sublayer=_step.value;reports=_objectSpread(_objectSpread({},reports),_this.collectFeatureReportTemplates(sublayer))}}catch(err){_iterator.e(err)}finally{_iterator.f()}}else if(entry.featureReport){reports[entry.name]=entry.featureReport}return reports});_defineProperty(_this,"findFeatureReportTemplate",function(layer){var reports={};_this.props.layers.filter(function(l){return l.role===LayerRole.THEME}).forEach(function(themeLayer){reports=_objectSpread(_objectSpread({},reports),_this.collectFeatureReportTemplates(themeLayer))});return reports[layer]||null});_defineProperty(_this,"getFeatureReportUrl",function(template,result){var serviceUrl=ConfigUtils.getConfigProp("documentServiceUrl").replace(/\/$/,"");var params={feature:result.id,x:result.clickPos[0],y:result.clickPos[1],crs:_this.props.mapcrs};return serviceUrl+"/"+template+"?"+Object.keys(params).map(function(key){return encodeURIComponent(key)+"="+encodeURIComponent(params[key])}).join("&")});_defineProperty(_this,"downloadAggregatedReport",function(layername,results){var serviceUrl=ConfigUtils.getConfigProp("documentServiceUrl").replace(/\/$/,"");var params={feature:results.map(function(result){return result.id}).join(","),x:results[0].clickPos[0],y:results[0].clickPos[1],crs:_this.props.mapcrs};_this.setState({generatingReport:true});var template=results[0].featurereport||_this.findFeatureReportTemplate(layername);var url=serviceUrl+"/"+template+"?"+Object.keys(params).map(function(key){return encodeURIComponent(key)+"="+encodeURIComponent(params[key])}).join("&");axios.get(url,{responseType:"arraybuffer"}).then(function(response){FileSaver.saveAs(new Blob([response.data],{type:"application/pdf"}),layername+".pdf");_this.setState({generatingReport:false})})["catch"](function(){/* eslint-disable-next-line */alert(LocaleUtils.tr("identify.reportfail"));_this.setState({generatingReport:false})})});_defineProperty(_this,"showLayerInfo",function(result){var match=null;// Search matching layer by technical name
|
|
11
|
+
for(var _i=0,_arr=[result.layername,result.layerinfo];_i<_arr.length;_i++){var name=_arr[_i];match=LayerUtils.searchLayer(_this.props.layers,"name",name);if(match){break}}if(!match){// Search matching layer by title
|
|
12
|
+
match=LayerUtils.searchLayer(_this.props.layers,"title",result.layertitle)}if(match){_this.props.setActiveLayerInfo(match.layer,match.sublayer)}});_defineProperty(_this,"attribValue",function(text,attrName,layer,result){if(_typeof(text)==="object"){text=JSON.stringify(text)}if(_this.props.replaceImageUrls&&/^https?:\/\/.*\.(jpg|jpeg|png|bmp)$/i.exec(text)){return/*#__PURE__*/React.createElement("a",{href:text,rel:"noreferrer",target:"_blank"},/*#__PURE__*/React.createElement("img",{src:text}))}text=""+text;// Ensure text is a string
|
|
13
|
+
text=_this.props.attributeTransform(attrName,text,layer,result);text=MiscUtils.addLinkAnchors(text);return _this.parsedContent(text)});_defineProperty(_this,"parsedContent",function(text){text=text.replace(" ","<br />");var options={replace:function replace(node){if(node.name==="a"){return/*#__PURE__*/React.createElement("a",{href:node.attribs.href,onClick:node.attribs.onclick?function(ev){return _this.evalOnClick(ev,node.attribs.onclick)}:_this.attributeLinkClicked,target:node.attribs.target||"_blank"},domToReact(node.children,options))}return undefined}};return htmlReactParser(text,options)});_defineProperty(_this,"evalOnClick",function(ev,onclick){// eslint-disable-next-line
|
|
14
|
+
eval(onclick);ev.preventDefault()});_defineProperty(_this,"attributeLinkClicked",function(ev){_this.props.openExternalUrl(ev.target.href,ev.target.target,{docked:_this.props.iframeDialogsInitiallyDocked});ev.preventDefault()});_this.currentResultElRef=null;_this.scrollIntoView=false;_this.state.exportFormat=!Array.isArray(props.enableExport)||props.enableExport.includes("geojson")?"geojson":props.enableExport[0];return _this}_inherits(IdentifyViewer,_React$Component);return _createClass(IdentifyViewer,[{key:"componentDidMount",value:function componentDidMount(){this.updateResultTree()}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.props.identifyResults!==prevProps.identifyResults){this.updateResultTree()}if(prevState.currentResult!==this.state.currentResult||prevState.resultTree!==this.state.resultTree){this.setHighlightedResults(this.state.currentResult===null?null:[this.state.currentResult],this.state.resultTree)}// Scroll to selected result
|
|
15
|
+
if(this.state.currentResult&&this.state.currentResult!==prevState.currentResult&&this.currentResultElRef&&this.scrollIntoView){this.currentResultElRef.parentNode.scrollTop=this.currentResultElRef.offsetTop-this.currentResultElRef.parentNode.offsetTop;this.scrollIntoView=false;this.currentResultElRef=null}}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.props.removeLayer("__identifyviewerhighlight")}},{key:"render",value:function render(){var _this2=this,_exporters$find;var tree=this.props.displayResultTree;var body=null;var reportFeatures={};if(tree){var contents=Object.keys(this.state.resultTree).map(function(layer){return _this2.renderLayer(layer)});var attributes=this.renderResultAttributes(this.state.currentLayer,this.state.currentResult,"identify-result-tree-frame",reportFeatures);var resultsContainerStyle={maxHeight:attributes?"10em":"initial"};body=[/*#__PURE__*/React.createElement("div",{className:"identify-results-container",key:"results-container",style:resultsContainerStyle},contents),attributes]}else{body=/*#__PURE__*/React.createElement("div",{className:"identify-flat-results-list"},this.props.showLayerSelector?/*#__PURE__*/React.createElement("div",{className:"identify-selectbox"},/*#__PURE__*/React.createElement("select",{className:"identify-layer-select",onChange:function onChange(e){var selectedLayer=e.target.value;_this2.setState({selectedLayer:selectedLayer})}},/*#__PURE__*/React.createElement("option",{value:""},LocaleUtils.tr("identify.layerall")),Object.keys(this.state.resultTree).sort().map(function(layer){return/*#__PURE__*/React.createElement("option",{key:layer,value:layer},layer)})),/*#__PURE__*/React.createElement("span",{className:"identify-buttonbox-spacer"}),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("identify.featurecount"),": ",Object.values(this.state.selectedLayer!==""?this.state.resultTree[this.state.selectedLayer]:this.state.resultTree).flat().length)):null,Object.keys(this.state.selectedLayer!==""?_defineProperty({},this.state.selectedLayer,this.state.resultTree[this.state.selectedLayer]):this.state.resultTree).map(function(layer){var layerResults=_this2.state.resultTree[layer];return layerResults.map(function(result){var resultClass=_this2.state.currentResult===result?"identify-result-frame-highlighted":"identify-result-frame-normal";return/*#__PURE__*/React.createElement("div",{key:result.id,onMouseEnter:function onMouseEnter(){return _this2.setState({currentResult:result,currentLayer:layer})},onMouseLeave:function onMouseLeave(){return _this2.setState({currentResult:null,currentLayer:null})}},_this2.renderResultAttributes(layer,result,resultClass,reportFeatures))})}))}// "el.style.background='inherit'": HACK to trigger an additional repaint, since Safari/Chrome on iOS render the element cut off the first time
|
|
16
|
+
var exporters=this.getExporters();var clipboardExportDisabled=((_exporters$find=exporters.find(function(entry){return entry.id===_this2.state.exportFormat}))===null||_exporters$find===void 0?void 0:_exporters$find.allowClipboard)!==true;return/*#__PURE__*/React.createElement("div",{className:"identify-body",ref:function ref(el){if(el)el.style.background="inherit"}},body,this.props.enableExport===true||!isEmpty(this.props.enableExport)?/*#__PURE__*/React.createElement("div",{className:"identify-buttonbox"},/*#__PURE__*/React.createElement("span",{className:"identify-buttonbox-spacer"}),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("identify.export"),":\xA0"),/*#__PURE__*/React.createElement("div",{className:"controlgroup"},/*#__PURE__*/React.createElement("select",{className:"combo identify-export-format",onChange:function onChange(ev){return _this2.setState({exportFormat:ev.target.value})},value:this.state.exportFormat},exporters.filter(function(entry){return!Array.isArray(_this2.props.enableExport)||_this2.props.enableExport.includes(entry.id)}).map(function(entry){var _entry$title;return/*#__PURE__*/React.createElement("option",{key:entry.id,value:entry.id},(_entry$title=entry.title)!==null&&_entry$title!==void 0?_entry$title:LocaleUtils.tr(entry.titleMsgId))})),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this2.exportResults()},title:LocaleUtils.tr("identify.download")},/*#__PURE__*/React.createElement(Icon,{icon:"export"})),/*#__PURE__*/React.createElement("button",{className:"button",disabled:clipboardExportDisabled,onClick:function onClick(){return _this2.exportResults(true)},title:LocaleUtils.tr("identify.clipboard")},/*#__PURE__*/React.createElement(Icon,{icon:"copy"})))):null,Object.values(reportFeatures).find(function(entry){return entry.length>1})!==undefined?/*#__PURE__*/React.createElement("div",{className:"identify-buttonbox"},/*#__PURE__*/React.createElement("span",{className:"identify-buttonbox-spacer"}),/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("identify.aggregatedreport"),":\xA0"),/*#__PURE__*/React.createElement("div",{className:"controlgroup"},/*#__PURE__*/React.createElement("select",{className:"combo identify-export-format",onChange:function onChange(ev){return _this2.setState({selectedAggregatedReport:ev.target.value})},value:this.state.selectedAggregatedReport||""},/*#__PURE__*/React.createElement("option",{disabled:true,value:""},LocaleUtils.tr("identify.selectlayer")),Object.entries(reportFeatures).map(function(_ref15){var _ref16=_slicedToArray(_ref15,2),layername=_ref16[0],results=_ref16[1];if(results.length>1){return/*#__PURE__*/React.createElement("option",{key:layername,value:layername},results[0].layertitle)}return null})),/*#__PURE__*/React.createElement("button",{className:"button",disabled:!this.state.selectedAggregatedReport||this.state.generatingReport,onClick:function onClick(){return _this2.downloadAggregatedReport(_this2.state.selectedAggregatedReport,reportFeatures[_this2.state.selectedAggregatedReport])}},this.state.generatingReport?/*#__PURE__*/React.createElement(Spinner,null):/*#__PURE__*/React.createElement(Icon,{icon:"report"})))):null)}}])}(React.Component);_defineProperty(IdentifyViewer,"propTypes",{addLayerFeatures:PropTypes.func,attributeCalculator:PropTypes.func,attributeTransform:PropTypes.func,collapsible:PropTypes.bool,customExporters:PropTypes.array,displayResultTree:PropTypes.bool,enableExport:PropTypes.oneOfType([PropTypes.bool,PropTypes.array]),exportGeometry:PropTypes.bool,highlightAllResults:PropTypes.bool,identifyResults:PropTypes.object,iframeDialogsInitiallyDocked:PropTypes.bool,layers:PropTypes.array,longAttributesDisplay:PropTypes.oneOf(["ellipsis","wrap"]),mapcrs:PropTypes.string,openExternalUrl:PropTypes.func,removeLayer:PropTypes.func,replaceImageUrls:PropTypes.bool,setActiveLayerInfo:PropTypes.func,showLayerSelector:PropTypes.bool,showLayerTitles:PropTypes.bool,theme:PropTypes.object,zoomToExtent:PropTypes.func});_defineProperty(IdentifyViewer,"defaultProps",{longAttributesDisplay:"ellipsis",customExporters:[],displayResultTree:true,attributeCalculator:function attributeCalculator(/* layer, feature */){return[]},attributeTransform:function attributeTransform(name,value/* , layer, feature */){return value},showLayerTitles:true,showLayerSelector:true,highlightAllResults:true});var selector=function selector(state){return{theme:state.theme.current,layers:state.layers.flat,mapcrs:state.map.projection}};export default connect(selector,{addLayerFeatures:addLayerFeatures,removeLayer:removeLayer,setActiveLayerInfo:setActiveLayerInfo,openExternalUrl:openExternalUrl,zoomToExtent:zoomToExtent})(IdentifyViewer);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _regeneratorRuntime(){"use strict";/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */_regeneratorRuntime=function _regeneratorRuntime(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,o=Object.defineProperty||function(t,e,r){t[e]=r.value},i="function"==typeof Symbol?Symbol:{},a=i.iterator||"@@iterator",c=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function define(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{define({},"")}catch(t){define=function define(t,e,r){return t[e]=r}}function wrap(t,e,r,n){var i=e&&e.prototype instanceof Generator?e:Generator,a=Object.create(i.prototype),c=new Context(n||[]);return o(a,"_invoke",{value:makeInvokeMethod(t,r,c)}),a}function tryCatch(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=wrap;var h="suspendedStart",l="suspendedYield",f="executing",s="completed",y={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}var p={};define(p,a,function(){return this});var d=Object.getPrototypeOf,v=d&&d(d(values([])));v&&v!==r&&n.call(v,a)&&(p=v);var g=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(p);function defineIteratorMethods(t){["next","throw","return"].forEach(function(e){define(t,e,function(t){return this._invoke(e,t)})})}function AsyncIterator(t,e){function invoke(r,o,i,a){var c=tryCatch(t[r],t,o);if("throw"!==c.type){var u=c.arg,h=u.value;return h&&"object"==_typeof(h)&&n.call(h,"__await")?e.resolve(h.__await).then(function(t){invoke("next",t,i,a)},function(t){invoke("throw",t,i,a)}):e.resolve(h).then(function(t){u.value=t,i(u)},function(t){return invoke("throw",t,i,a)})}a(c.arg)}var r;o(this,"_invoke",{value:function value(t,n){function callInvokeWithMethodAndArg(){return new e(function(e,r){invoke(t,n,e,r)})}return r=r?r.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}})}function makeInvokeMethod(e,r,n){var o=h;return function(i,a){if(o===f)throw Error("Generator is already running");if(o===s){if("throw"===i)throw a;return{value:t,done:!0}}for(n.method=i,n.arg=a;;){var c=n.delegate;if(c){var u=maybeInvokeDelegate(c,n);if(u){if(u===y)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===h)throw o=s,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=f;var p=tryCatch(e,r,n);if("normal"===p.type){if(o=n.done?s:l,p.arg===y)continue;return{value:p.arg,done:n.done}}"throw"===p.type&&(o=s,n.method="throw",n.arg=p.arg)}}}function maybeInvokeDelegate(e,r){var n=r.method,o=e.iterator[n];if(o===t)return r.delegate=null,"throw"===n&&e.iterator["return"]&&(r.method="return",r.arg=t,maybeInvokeDelegate(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),y;var i=tryCatch(o,e.iterator,r.arg);if("throw"===i.type)return r.method="throw",r.arg=i.arg,r.delegate=null,y;var a=i.arg;return a?a.done?(r[e.resultName]=a.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,y):a:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,y)}function pushTryEntry(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function resetTryEntry(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function Context(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(pushTryEntry,this),this.reset(!0)}function values(e){if(e||""===e){var r=e[a];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var o=-1,i=function next(){for(;++o<e.length;)if(n.call(e,o))return next.value=e[o],next.done=!1,next;return next.value=t,next.done=!0,next};return i.next=i}}throw new TypeError(_typeof(e)+" is not iterable")}return GeneratorFunction.prototype=GeneratorFunctionPrototype,o(g,"constructor",{value:GeneratorFunctionPrototype,configurable:!0}),o(GeneratorFunctionPrototype,"constructor",{value:GeneratorFunction,configurable:!0}),GeneratorFunction.displayName=define(GeneratorFunctionPrototype,u,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===GeneratorFunction||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,GeneratorFunctionPrototype):(t.__proto__=GeneratorFunctionPrototype,define(t,u,"GeneratorFunction")),t.prototype=Object.create(g),t},e.awrap=function(t){return{__await:t}},defineIteratorMethods(AsyncIterator.prototype),define(AsyncIterator.prototype,c,function(){return this}),e.AsyncIterator=AsyncIterator,e.async=function(t,r,n,o,i){void 0===i&&(i=Promise);var a=new AsyncIterator(wrap(t,r,n,o),i);return e.isGeneratorFunction(r)?a:a.next().then(function(t){return t.done?t.value:a.next()})},defineIteratorMethods(g),define(g,u,"Generator"),define(g,a,function(){return this}),define(g,"toString",function(){return"[object Generator]"}),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function next(){for(;r.length;){var t=r.pop();if(t in e)return next.value=t,next.done=!1,next}return next.done=!0,next}},e.values=values,Context.prototype={constructor:Context,reset:function reset(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(resetTryEntry),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function stop(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function dispatchException(e){if(this.done)throw e;var r=this;function handle(n,o){return a.type="throw",a.arg=e,r.next=n,o&&(r.method="next",r.arg=t),!!o}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return handle("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return handle(i.catchLoc,!0);if(this.prev<i.finallyLoc)return handle(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return handle(i.catchLoc,!0)}else{if(!u)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return handle(i.finallyLoc)}}}},abrupt:function abrupt(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===t||"continue"===t)&&i.tryLoc<=e&&e<=i.finallyLoc&&(i=null);var a=i?i.completion:{};return a.type=t,a.arg=e,i?(this.method="next",this.next=i.finallyLoc,y):this.complete(a)},complete:function complete(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),y},finish:function finish(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),y}},"catch":function _catch(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;resetTryEntry(r)}return o}}throw Error("illegal catch attempt")},delegateYield:function delegateYield(e,r,n){return this.delegate={iterator:values(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),y}},e}function asyncGeneratorStep(n,t,e,r,o,a,c){try{var i=n[a](c),u=i.value}catch(n){return void e(n)}i.done?t(u):Promise.resolve(u).then(r,o)}function _asyncToGenerator(n){return function(){var t=this,e=arguments;return new Promise(function(r,o){var a=n.apply(t,e);function _next(n){asyncGeneratorStep(a,r,o,_next,_throw,"next",n)}function _throw(n){asyncGeneratorStep(a,r,o,_next,_throw,"throw",n)}_next(void 0)})}}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2017-2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import React from"react";import{connect}from"react-redux";import axios from"axios";import isEmpty from"lodash.isempty";import{WorkerMessageHandler}from"pdfjs-dist/build/pdf.worker";import Proj4js from"proj4";import PropTypes from"prop-types";import{addLayer,addLayerFeatures,removeLayer,replacePlaceholderLayer}from"../actions/layers";import EditableSelect from"../components/widgets/EditableSelect";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import LocaleUtils from"../utils/LocaleUtils";import MiscUtils from"../utils/MiscUtils";import ServiceLayerUtils from"../utils/ServiceLayerUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import FileSelector from"./widgets/FileSelector";import LayerCatalogWidget from"./widgets/LayerCatalogWidget";import Spinner from"./widgets/Spinner";import"./style/ImportLayer.css";var ImportLayer=/*#__PURE__*/function(_React$Component){function ImportLayer(){var _this;_classCallCheck(this,ImportLayer);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,ImportLayer,[].concat(args));_defineProperty(_this,"state",{type:"URL",file:null,url:"",pendingRequests:0,serviceLayers:null,addingLayer:false});_defineProperty(_this,"onFileSelected",function(file){_this.setState({file:file})});_defineProperty(_this,"scanService",function(url){var reqUrl=url!==null&&url!==void 0?url:_this.state.url;if(!reqUrl){return}if(!reqUrl.match(/^[^:]+:\/\/.*$/)&&!reqUrl.startsWith("/")){reqUrl=location.protocol+"//"+reqUrl}else{reqUrl=MiscUtils.adjustProtocol(reqUrl)}var pendingRequests=0;// Attempt to load catalog
|
|
8
|
+
if(reqUrl.toLowerCase().endsWith(".json")||reqUrl.toLowerCase().endsWith(".xml")&&!reqUrl.toLowerCase().endsWith("wmtscapabilities.xml")){++pendingRequests;var type;if(reqUrl.toLowerCase().endsWith(".json")){type="json"}else if(reqUrl.toLowerCase().endsWith(".xml")){type="xml"}axios.get(reqUrl).then(function(response){if(type==="xml"){var catalogPendingRequests=0;// Load from QGIS WMS/WFS connections
|
|
9
|
+
var doc=new DOMParser().parseFromString(response.data,"text/xml");var parsers=[{type:"wms",getCapabilities:ServiceLayerUtils.getWMSCapabilities,getLayers:function getLayers(capabilities,requestUrl){return ServiceLayerUtils.getWMSLayers(capabilities,requestUrl,true)}},{type:"wfs",getCapabilities:ServiceLayerUtils.getWFSCapabilities,getLayers:function getLayers(capabilities,requestUrl){return ServiceLayerUtils.getWFSLayers(capabilities,requestUrl,_this.props.mapCrs)}}];parsers.forEach(function(parser){var connections=doc.getElementsByTagName("qgs"+parser.type.toUpperCase()+"Connections");if(connections.length){var _iterator=_createForOfIteratorHelper([].slice.call(connections[0].getElementsByTagName(parser.type))),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var conn=_step.value;++catalogPendingRequests;parser.getCapabilities(conn.attributes.url.value).then(function(_ref){var capabilities=_ref.capabilities,requestUrl=_ref.requestUrl;var result=parser.getLayers(capabilities,requestUrl);_this.setState(function(state){return{pendingRequests:state.pendingRequests-1,serviceLayers:(state.serviceLayers||[]).concat(result)}})})["catch"](function(){_this.setState(function(state){return{pendingRequests:state.pendingRequests-1,serviceLayers:state.serviceLayers||[]}})})}}catch(err){_iterator.e(err)}finally{_iterator.f()}}});_this.setState(function(state){return{pendingRequests:state.pendingRequests-1+catalogPendingRequests}})}else if(type==="json"&&response.data.catalog){// Load as JSON catalog
|
|
10
|
+
_this.setState(function(state){return{pendingRequests:state.pendingRequests-1,serviceLayers:(state.serviceLayers||[]).concat(response.data.catalog)}})}})["catch"](function(){_this.setState(function(state){return{pendingRequests:state.pendingRequests-1,serviceLayers:state.serviceLayers||[]}})})}// Attempt to load as WMTS
|
|
11
|
+
++pendingRequests;ServiceLayerUtils.getWMTSCapabilities(reqUrl).then(function(_ref2){var capabilities=_ref2.capabilities,requestUrl=_ref2.requestUrl;var result=ServiceLayerUtils.getWMTSLayers(capabilities,requestUrl,_this.props.mapCrs);_this.setState(function(state){return{pendingRequests:state.pendingRequests-1,serviceLayers:(state.serviceLayers||[]).concat(result)}})})["catch"](function(){_this.setState(function(state){return{pendingRequests:state.pendingRequests-1,serviceLayers:state.serviceLayers||[]}})});// Attempt to load as WMS
|
|
12
|
+
++pendingRequests;ServiceLayerUtils.getWMSCapabilities(reqUrl).then(function(_ref3){var capabilities=_ref3.capabilities,requestUrl=_ref3.requestUrl;var result=ServiceLayerUtils.getWMSLayers(capabilities,requestUrl);_this.setState(function(state){return{pendingRequests:state.pendingRequests-1,serviceLayers:(state.serviceLayers||[]).concat(result)}})})["catch"](function(){_this.setState(function(state){return{pendingRequests:state.pendingRequests-1,serviceLayers:state.serviceLayers||[]}})});// Attempt to load as WFS
|
|
13
|
+
++pendingRequests;ServiceLayerUtils.getWFSCapabilities(reqUrl).then(function(_ref4){var capabilities=_ref4.capabilities,requestUrl=_ref4.requestUrl;var result=ServiceLayerUtils.getWFSLayers(capabilities,requestUrl,_this.props.mapCrs);_this.setState(function(state){return{pendingRequests:state.pendingRequests-1,serviceLayers:(state.serviceLayers||[]).concat(result)}})})["catch"](function(){_this.setState(function(state){return{pendingRequests:state.pendingRequests-1,serviceLayers:state.serviceLayers||[]}})});_this.setState({pendingRequests:pendingRequests,serviceLayers:null})});_defineProperty(_this,"importFileLayer",function(){if(!_this.state.file){return}_this.setState({addingLayer:true});var file=_this.state.file;if(file.name.toLowerCase().endsWith(".pdf")){_this.addGeoPDFLayer(file)}else if(file.name.toLowerCase().endsWith(".zip")){_this.addSHPLayer(file)}else{var reader=new FileReader;reader.onload=function(ev){if(file.name.toLowerCase().endsWith(".kml")){_this.addKMLLayer(file.name,ev.target.result)}else if(file.name.toLowerCase().endsWith(".geojson")||file.name.toLowerCase().endsWith(".json")){var data={};try{data=JSON.parse(ev.target.result);_this.addGeoJSONLayer(file.name,data)}catch(e){/* Pass */}}else if(file.name.toLowerCase().endsWith(".pdf")){_this.addGeoPDFLayer(file.name,ev.target.result)}_this.setState({file:null,addingLayer:false})};reader.readAsText(_this.state.file)}});_defineProperty(_this,"addKMLLayer",function(filename,data){_this.addGeoJSONLayer(filename,{features:VectorLayerUtils.kmlToGeoJSON(data)})});_defineProperty(_this,"addGeoJSONLayer",function(filename,data){if(!data.features&&data.type==="Feature"){data={type:"FeatureCollection",features:[data],crs:data.crs}}if(!isEmpty(data.features)){var defaultCrs="EPSG:4326";if(data.crs&&data.crs.properties&&data.crs.properties.name){// Extract CRS from FeatureCollection crs
|
|
14
|
+
defaultCrs=CoordinatesUtils.fromOgcUrnCrs(data.crs.properties.name)}var features=data.features.map(function(feature){var crs=defaultCrs;if(feature.crs&&feature.crs.properties&&feature.crs.properties.name){crs=CoordinatesUtils.fromOgcUrnCrs(feature.crs.properties.name)}else if(typeof feature.crs==="string"){crs=feature.crs}if(feature.geometry&&feature.geometry.coordinates){feature.geometry.coordinates=feature.geometry.coordinates.map(VectorLayerUtils.convert3dto2d)}return _objectSpread(_objectSpread({},feature),{},{crs:crs})});_this.props.addLayerFeatures({name:filename,title:filename.replace(/\.[^/.]+$/,""),zoomToExtent:true},features,true)}else{// eslint-disable-next-line
|
|
15
|
+
alert(LocaleUtils.tr("importlayer.nofeatures"))}});_defineProperty(_this,"addGeoPDFLayer",function(file){var reader=new FileReader;reader.onload=function(ev){var pdfText=atob(ev.target.result.slice(28));/* FIXME: This is a very ugly way to extract PDF objects */var GPTS=pdfText.match(/\/GPTS\s+\[([^\]]+)\]/);var LPTS=pdfText.match(/\/LPTS\s+\[([^\]]+)\]/);var Viewport=pdfText.match(/<<([^>]+\/Type\s+\/Viewport[^>]+)>>/);var EPSG=pdfText.match(/\/EPSG\s*(\d+)/);if(!GPTS||!LPTS||!Viewport||!EPSG){/* eslint-disable-next-line */alert(LocaleUtils.tr("importlayer.notgeopdf"));_this.setState({file:null,addingLayer:false});return}var pairs=function pairs(res,value,idx,array){return idx%2===0?[].concat(_toConsumableArray(res),[array.slice(idx,idx+2)]):res};var gpts=GPTS[1].split(/\s+/).filter(Boolean).map(Number).reduce(pairs,[]).map(function(e){return e.reverse()});// lat-lon => lon-lat
|
|
16
|
+
var lpts=LPTS[1].split(/\s+/).filter(Boolean).map(Number).reduce(pairs,[]);var viewport=Viewport[1].match(/\/BBox\s+\[([^\]]+)\]/)[1].split(/\s+/).filter(Boolean).map(Number);var epsg=EPSG[1];var projDef=Proj4js.defs("EPSG:"+epsg);if(!projDef){/* eslint-disable-next-line */alert(LocaleUtils.tr("importlayer.unknownproj","EPSG:"+epsg));_this.setState({file:null,addingLayer:false});return}// Construct geog CS
|
|
17
|
+
var geogCs={projName:"longlat",ellps:projDef.ellps,datum_params:projDef.datum_params,no_defs:projDef.no_defs};// Compute the georeferenced area
|
|
18
|
+
// Note: this is a simplistic implementation, assuming that the frame is rectangular and not skewed
|
|
19
|
+
var getCornerIdx=function getCornerIdx(x,y){return lpts.findIndex(function(entry){return Math.round(entry[0])===x&&Math.round(entry[1])===y})};var idxBL=getCornerIdx(0,0);var idxTR=getCornerIdx(1,1);var computeCorner=function computeCorner(idx){return{pixel:[viewport[0]*(1-lpts[idx][0])+viewport[2]*lpts[idx][0],viewport[1]*(1-lpts[idx][1])+viewport[3]*lpts[idx][1]],// eslint-disable-next-line
|
|
20
|
+
coo:Proj4js(geogCs,_this.props.mapCrs,gpts[idx])}};var bl=computeCorner(idxBL);var tr=computeCorner(idxTR);var geoextent=[bl.coo[0],bl.coo[1],tr.coo[0],tr.coo[1]];var imgextent=[bl.pixel[0],bl.pixel[1],tr.pixel[0],tr.pixel[1]];import("pdfjs-dist/build/pdf").then(function(pdfjsLib){pdfjsLib.GlobalWorkerOptions.workerSrc=WorkerMessageHandler;pdfjsLib.getDocument(ev.target.result).promise.then(function(pdf){pdf.getPage(1).then(function(page){var pageViewport=page.getViewport({scale:1});var canvas=document.createElement("canvas");canvas.width=imgextent[2]-imgextent[0];canvas.height=imgextent[3]-imgextent[1];var context=canvas.getContext("2d");context.translate(-imgextent[0],-(pageViewport.height-imgextent[3]));page.render({canvasContext:context,viewport:pageViewport}).promise.then(function(){_this.props.addLayer({type:"image",name:file.name,title:file.name,url:canvas.toDataURL(),projection:_this.props.mapCrs,imageExtent:geoextent});_this.setState({file:null,addingLayer:false})})})})})["catch"](function(){/* eslint-disable-next-line */console.warn("pdfjs import failed");_this.setState({file:null,addingLayer:false})})};reader.readAsDataURL(file)});_defineProperty(_this,"addSHPLayer",/*#__PURE__*/function(){var _ref5=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(file){var _yield$import,_BrowserFileSystem,load,_yield$import2,ShapefileLoader,_yield$import3,ZipLoader,fileMap,EXTENSIONS,files,fileName,name,ext,fileList,blob,f,list,fileSystem,fetch,filename,data;return _regeneratorRuntime().wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:_context.next=2;return import("@loaders.gl/core");case 2:_yield$import=_context.sent;_BrowserFileSystem=_yield$import._BrowserFileSystem;load=_yield$import.load;_context.next=7;return import("@loaders.gl/shapefile");case 7:_yield$import2=_context.sent;ShapefileLoader=_yield$import2.ShapefileLoader;_context.next=11;return import("@loaders.gl/zip");case 11:_yield$import3=_context.sent;ZipLoader=_yield$import3.ZipLoader;if(!(file.type==="application/zip")){_context.next=51;break}_context.next=16;return load(file,ZipLoader);case 16:fileMap=_context.sent;EXTENSIONS=["shp","shx","dbf","cpg","prj"];files={};// Iterate through all the files in ZIP to get a list of (SHP + sidecar files) by filename
|
|
21
|
+
for(fileName in fileMap){if(Object.hasOwn(fileMap,fileName)){name=fileName.split(".")[0];ext=fileName.split(".").pop();fileList=files[name]||[];if(EXTENSIONS.includes(ext)){// Create Blob and File from arrayBuffer loaded by ZipLoader
|
|
22
|
+
blob=new Blob([fileMap[fileName]]);fileList.push(new File([blob],fileName))}files[name]=fileList}}// Load each SHP with sidecar files as GeoJSON features
|
|
23
|
+
_context.t0=_regeneratorRuntime().keys(files);case 21:if((_context.t1=_context.t0()).done){_context.next=50;break}f=_context.t1.value;if(!Object.hasOwn(files,f)){_context.next=48;break}list=files[f];fileSystem=new _BrowserFileSystem(list);fetch=fileSystem.fetch.bind(fileSystem.fetch);filename="".concat(f,".shp");// Load SHP and reproject to mapCrs
|
|
24
|
+
data=null;_context.prev=29;_context.next=32;return load(filename,ShapefileLoader,{fetch:fetch,shapefile:{shape:"geojson-table"},gis:{format:"geojson",reproject:true,_targetCrs:_this.props.mapCrs}});case 32:data=_context.sent;_context.next=47;break;case 35:_context.prev=35;_context.t2=_context["catch"](29);_context.prev=37;_context.next=40;return load(filename,ShapefileLoader,{fetch:fetch,shapefile:{shape:"geojson-table"},gis:{format:"geojson",reproject:false,_targetCrs:_this.props.mapCrs}});case 40:data=_context.sent;/* eslint-disable-next-line */alert(LocaleUtils.tr("importlayer.shpreprojectionerror"));_context.next=47;break;case 44:_context.prev=44;_context.t3=_context["catch"](37);data=null;case 47:if(data){data.crs={type:"name",properties:{name:CoordinatesUtils.toOgcUrnCrs(_this.props.mapCrs)}};// Add data as GeoJSON layer
|
|
25
|
+
_this.addGeoJSONLayer(f,data)}case 48:_context.next=21;break;case 50:_this.setState({file:null,addingLayer:false});case 51:case"end":return _context.stop()}},_callee,null,[[29,35],[37,44]])}));return function(_x){return _ref5.apply(this,arguments)}}());return _this}_inherits(ImportLayer,_React$Component);return _createClass(ImportLayer,[{key:"renderInputField",value:function renderInputField(){var _this2=this;var placeholder=LocaleUtils.tr("importlayer.urlplaceholder");var urlPresets=ConfigUtils.getConfigProp("importLayerUrlPresets",this.props.theme)||[];if(this.state.type==="Local"){return/*#__PURE__*/React.createElement(FileSelector,{accept:".kml,.json,.geojson,.pdf,.zip",file:this.state.file,onFileSelected:this.onFileSelected,title:LocaleUtils.tr("importlayer.supportedformats")})}else{return/*#__PURE__*/React.createElement(EditableSelect,{onChange:function onChange(value){return _this2.setState({url:value})},onSubmit:this.scanService,options:urlPresets,placeholder:placeholder,readOnly:this.state.pendingRequests>0,value:this.state.url})}}},{key:"render",value:function render(){var _this3=this;var button=null;if(this.state.type==="URL"){button=/*#__PURE__*/React.createElement("button",{className:"button importlayer-addbutton",disabled:!this.state.url||this.state.pendingRequests>0,onClick:function onClick(){return _this3.scanService()}},this.state.pendingRequests>0?/*#__PURE__*/React.createElement(Spinner,null):null,LocaleUtils.tr("importlayer.connect"))}else{button=/*#__PURE__*/React.createElement("button",{className:"button importlayer-addbutton",disabled:this.state.file===null||this.state.addingLayer,onClick:this.importFileLayer,type:"button"},this.state.addingLayer?/*#__PURE__*/React.createElement(Spinner,null):null,LocaleUtils.tr("importlayer.addlayer"))}var layerList=null;if(this.state.serviceLayers!==null){layerList=/*#__PURE__*/React.createElement(LayerCatalogWidget,{addLayer:this.props.addLayer,catalog:this.state.serviceLayers,pendingRequests:this.state.pendingRequests,removeLayer:this.props.removeLayer,replacePlaceholderLayer:this.props.replacePlaceholderLayer})}var disableLocal=ConfigUtils.getConfigProp("disableImportingLocalLayers",this.props.theme);return/*#__PURE__*/React.createElement("div",{className:"ImportLayer"},/*#__PURE__*/React.createElement("div",{className:"importlayer-input-fields controlgroup"},/*#__PURE__*/React.createElement("select",{disabled:this.state.pendingRequests>0,onChange:function onChange(ev){return _this3.setState({type:ev.target.value,file:null,url:"",serviceLayers:null})},value:this.state.type},/*#__PURE__*/React.createElement("option",{value:"URL"},LocaleUtils.tr("importlayer.url")),!disableLocal?/*#__PURE__*/React.createElement("option",{value:"Local"},LocaleUtils.tr("importlayer.localfile")):null),this.renderInputField()),button,layerList)}}])}(React.Component);_defineProperty(ImportLayer,"propTypes",{addLayer:PropTypes.func,addLayerFeatures:PropTypes.func,mapCrs:PropTypes.string,removeLayer:PropTypes.func,replacePlaceholderLayer:PropTypes.func,theme:PropTypes.object,themes:PropTypes.object});export default connect(function(state){return{mapCrs:state.map.projection,themes:state.theme.themes}},{addLayer:addLayer,addLayerFeatures:addLayerFeatures,removeLayer:removeLayer,replacePlaceholderLayer:replacePlaceholderLayer})(ImportLayer);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2016-2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import React from"react";import{connect}from"react-redux";import PropTypes from"prop-types";import{setActiveLayerInfo}from"../actions/layerinfo";import ResizeableWindow from"../components/ResizeableWindow";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import MiscUtils from"../utils/MiscUtils";import{Image}from"./widgets/Primitives";import"./style/LayerInfoWindow.css";var LayerInfoWindow=/*#__PURE__*/function(_React$Component){function LayerInfoWindow(){var _this;_classCallCheck(this,LayerInfoWindow);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,LayerInfoWindow,[].concat(args));_defineProperty(_this,"renderRow",function(title,content){var html=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;if(content){return/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,title,":"),html?/*#__PURE__*/React.createElement("td",{dangerouslySetInnerHTML:{__html:MiscUtils.addLinkAnchors(content)}}):/*#__PURE__*/React.createElement("td",null,content))}return null});_defineProperty(_this,"renderMetadata",function(metadata){return metadata.map(function(entry){return _this.renderRow(LocaleUtils.tr(entry.label),entry.content,true)})});_defineProperty(_this,"renderScale",function(scale){if(scale===0){return"0"}else if(scale>=1){return"1:"+Math.round(scale)}else{return Math.round(1/scale)+":1"}});_defineProperty(_this,"onClose",function(){_this.props.setActiveLayerInfo(null,null)});return _this}_inherits(LayerInfoWindow,_React$Component);return _createClass(LayerInfoWindow,[{key:"renderLink",value:function renderLink(text,url){if(url){return/*#__PURE__*/React.createElement("a",{href:url,rel:"noreferrer",target:"_blank"},text)}else if(text){return text}return null}},{key:"render",value:function render(){if(!this.props.layer||!this.props.sublayer){return null}var legend=null;var scale=MapUtils.computeForZoom(this.props.map.scales,this.props.map.zoom);var legendUrl=LayerUtils.getLegendUrl(this.props.layer,this.props.sublayer,scale,this.props.map,this.props.bboxDependentLegend,this.props.scaleDependentLegend);if(legendUrl){legend=/*#__PURE__*/React.createElement(Image,{className:"layer-info-window-legend",src:legendUrl})}else if(this.props.layer.color){legend=/*#__PURE__*/React.createElement("span",{className:"layer-info-window-coloricon",style:{backgroundColor:this.props.layer.color}})}return/*#__PURE__*/React.createElement(ResizeableWindow,{icon:"info-sign",initialHeight:this.props.layerInfoGeometry.initialHeight,initialWidth:this.props.layerInfoGeometry.initialWidth,initialX:this.props.layerInfoGeometry.initialX,initialY:this.props.layerInfoGeometry.initialY,initiallyDocked:this.props.layerInfoGeometry.initiallyDocked,onClose:this.onClose,title:LocaleUtils.tr("layerinfo.title")},/*#__PURE__*/React.createElement("div",{className:"layer-info-window-body",role:"body"},/*#__PURE__*/React.createElement("h4",{className:"layer-info-window-title"},this.props.sublayer.title),/*#__PURE__*/React.createElement("div",{className:"layer-info-window-frame"},/*#__PURE__*/React.createElement("table",{className:"layer-info-window-table"},/*#__PURE__*/React.createElement("tbody",null,this.renderRow(LocaleUtils.tr("layerinfo.abstract"),this.props.sublayer["abstract"],true),this.props.sublayer.attribution?this.renderRow(LocaleUtils.tr("layerinfo.attribution"),this.renderLink(this.props.sublayer.attribution.Title,this.props.sublayer.attribution.OnlineResource)):null,this.renderRow(LocaleUtils.tr("layerinfo.keywords"),this.props.sublayer.keywords),this.renderRow(LocaleUtils.tr("layerinfo.dataUrl"),this.renderLink(this.props.sublayer.dataUrl,this.props.sublayer.dataUrl)),this.renderRow(LocaleUtils.tr("layerinfo.metadataUrl"),this.renderLink(this.props.sublayer.metadataUrl,this.props.sublayer.metadataUrl)),this.props.sublayer.minScale!==undefined?this.renderRow(LocaleUtils.tr("layerinfo.maxscale"),this.renderScale(this.props.sublayer.minScale)):null,this.props.sublayer.maxScale!==undefined?this.renderRow(LocaleUtils.tr("layerinfo.minscale"),this.renderScale(this.props.sublayer.maxScale)):null,this.renderRow(LocaleUtils.tr("layerinfo.legend"),legend),this.props.sublayer.metadata!==undefined?this.renderMetadata(this.props.sublayer.metadata):null)))))}}])}(React.Component);_defineProperty(LayerInfoWindow,"propTypes",{bboxDependentLegend:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),layer:PropTypes.object,layerInfoGeometry:PropTypes.object,map:PropTypes.object,scaleDependentLegend:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),setActiveLayerInfo:PropTypes.func,sublayer:PropTypes.object});var selector=function selector(state){return{map:state.map,layer:state.layerinfo.layer,sublayer:state.layerinfo.sublayer}};export default connect(selector,{setActiveLayerInfo:setActiveLayerInfo})(LayerInfoWindow);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2017-2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import React from"react";import{connect}from"react-redux";import PropTypes from"prop-types";import{setEditContext}from"../actions/editing";import{LayerRole,addLayerFeatures,removeLayer}from"../actions/layers";import{getFeatureTemplate}from"../utils/EditingUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import AttributeForm from"./AttributeForm";import"./style/LinkFeatureForm.css";var LinkFeatureForm=/*#__PURE__*/function(_React$Component){function LinkFeatureForm(){var _this;_classCallCheck(this,LinkFeatureForm);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,LinkFeatureForm,[].concat(args));_defineProperty(_this,"state",{editContext:{},pickedFeatures:null,highlightedFeature:null});_defineProperty(_this,"childPickQuery",function(coordinate){var scale=Math.round(MapUtils.computeForZoom(_this.props.map.scales,_this.props.map.zoom));_this.props.iface.getFeature(_this.props.editConfig.editDataset,coordinate,_this.props.map.projection,scale,96,function(featureCollection){var features=featureCollection?featureCollection.features:null;if(features&&features.length===1){if(!_this.props.pickFilter){_this.props.finished(features[0])}else{var newFeature=_this.props.pickFilter(features[0]);if(newFeature){_this.props.finished(newFeature)}}}else{_this.setState({pickedFeatures:features})}})});_defineProperty(_this,"finish",function(){var editContext=_this.props.editing.contexts[_this.props.editContextId];_this.props.finished(editContext.feature)});_defineProperty(_this,"hoverFeature",function(feature){var layer={id:_this.props.editContextId+"-pick-selection",role:LayerRole.SELECTION};_this.props.addLayerFeatures(layer,[feature],true);_this.setState({highlightedFeature:feature.id})});_defineProperty(_this,"unhoverFeature",function(feature){if(_this.state.highlightedFeature===feature.id){_this.props.removeLayer(_this.props.editContextId+"-pick-selection");_this.setState({highlightedFeature:null})}});_defineProperty(_this,"pickFeatureSelected",function(feature){_this.unhoverFeature(feature);if(!_this.props.pickFilter){_this.props.finished(feature)}else{var newFeature=_this.props.pickFilter(feature);if(newFeature){_this.props.finished(newFeature)}}});_defineProperty(_this,"onDiscard",function(){var editContext=_this.props.editing.contexts[_this.props.editContextId];if(editContext.action==="Draw"){// Discarded draw = cancel
|
|
8
|
+
_this.props.finished(null)}});return _this}_inherits(LinkFeatureForm,_React$Component);return _createClass(LinkFeatureForm,[{key:"componentDidMount",value:function componentDidMount(){var _this2=this;if(this.props.action==="Edit"){if(this.props.feature){this.props.setEditContext(this.props.editContextId,{action:"Pick",feature:this.props.feature,geomType:this.props.editConfig.geomType})}else{this.props.iface.getFeatureById(this.props.editConfig.editDataset,this.props.featureId,this.props.map.projection,function(result){if(result){_this2.props.setEditContext(_this2.props.editContextId,{action:"Pick",feature:result,geomType:_this2.props.editConfig.geomType})}})}}else if(this.props.action==="Create"){var featureSkel=_objectSpread({type:"Feature",properties:{}},this.props.feature);var mapPrefix=(this.props.editConfig.editDataset.match(/^[^.]+\./)||[""])[0];getFeatureTemplate(this.props.editConfig,featureSkel,this.props.iface,mapPrefix,this.props.map.projection,function(feature){_this2.props.setEditContext(_this2.props.editContextId,{action:"Draw",geomType:_this2.props.editConfig.geomType,feature:feature})})}else if(this.props.action==="Pick"){this.props.setEditContext(this.props.editContextId,{action:null})}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){// Handle drawPick
|
|
9
|
+
var editContext=this.props.editing.contexts[this.props.editContextId];if(editContext&&editContext.action===null&&this.props.map.click&&this.props.map.click!==prevProps.map.click){this.childPickQuery(this.props.map.click.coordinate)}}},{key:"render",value:function render(){var _this3=this;var editContext=this.props.editing.contexts[this.props.editContextId];if(!editContext){return null}if(editContext.action===null){// Picking
|
|
10
|
+
return/*#__PURE__*/React.createElement("div",{className:"link-feature-form"},!this.state.pickedFeatures?/*#__PURE__*/React.createElement("div",{className:"link-feature-form-hint"},/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("linkfeatureform.pickhint"))):/*#__PURE__*/React.createElement("div",{className:"link-feature-form-feature-list"},this.state.pickedFeatures.map(function(feature){var _feature$properties$_;return/*#__PURE__*/React.createElement("div",{key:feature.id,onClick:function onClick(){return _this3.pickFeatureSelected(feature)},onMouseOut:function onMouseOut(){return _this3.unhoverFeature(feature)},onMouseOver:function onMouseOver(){return _this3.hoverFeature(feature)}},(_feature$properties$_=feature.properties[_this3.props.displayField])!==null&&_feature$properties$_!==void 0?_feature$properties$_:feature.id)})),/*#__PURE__*/React.createElement("div",{className:"link-feature-form-close"},/*#__PURE__*/React.createElement("button",{className:"button",disabled:editContext.changed,onClick:this.finish},LocaleUtils.tr("linkfeatureform.cancel"))))}else if(editContext.feature){var drawing=editContext.action==="Draw"&&!editContext.feature.geometry&&this.props.editConfig.geomType;return/*#__PURE__*/React.createElement("div",{className:"link-feature-form"},drawing?/*#__PURE__*/React.createElement("div",{className:"link-feature-form-hint"},/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("linkfeatureform.drawhint"))):/*#__PURE__*/React.createElement(AttributeForm,{editConfig:this.props.editConfig,editContext:editContext,hideDelete:this.props.hideDelete,iface:this.props.iface,onDiscard:this.onDiscard,readOnly:this.props.readOnly}),/*#__PURE__*/React.createElement("div",{className:"link-feature-form-close"},/*#__PURE__*/React.createElement("button",{className:"button",disabled:editContext.changed,onClick:this.finish},drawing?LocaleUtils.tr("linkfeatureform.cancel"):LocaleUtils.tr("linkfeatureform.close"))))}else{return null}}}])}(React.Component);_defineProperty(LinkFeatureForm,"propTypes",{action:PropTypes.string,addLayerFeatures:PropTypes.func,displayField:PropTypes.string,editConfig:PropTypes.object,editContextId:PropTypes.string,editing:PropTypes.object,feature:PropTypes.object,featureId:PropTypes.oneOfType([PropTypes.string,PropTypes.number]),finished:PropTypes.func,hideDelete:PropTypes.bool,iface:PropTypes.object,map:PropTypes.object,pickFilter:PropTypes.func,readOnly:PropTypes.bool,removeLayer:PropTypes.func,setEditContext:PropTypes.func});export default connect(function(state){return{editing:state.editing,map:state.map}},{addLayerFeatures:addLayerFeatures,removeLayer:removeLayer,setEditContext:setEditContext})(LinkFeatureForm);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import React from"react";import{connect}from"react-redux";import ol from"openlayers";import PropTypes from"prop-types";import FeatureStyles from"../utils/FeatureStyles";import MapUtils from"../utils/MapUtils";import MeasureUtils from"../utils/MeasureUtils";var MapSelection=/*#__PURE__*/function(_React$Component){function MapSelection(props){var _this;_classCallCheck(this,MapSelection);_this=_callSuper(this,MapSelection,[props]);_defineProperty(_this,"state",{geometry:null,modifiers:{alt:false,ctrl:false,shift:false}});_defineProperty(_this,"addDrawInteraction",function(){// cleanup old interaction
|
|
8
|
+
if(_this.drawInteraction){_this.removeDrawInteraction()}if(_this.props.geomType==="DragBox"){_this.drawInteraction=new ol.interaction.DragBox({className:"selection-drag-box"});_this.drawInteraction.on("boxend",function(){_this.updateSelectionState(_this.drawInteraction.getGeometry())})}else{var typeMap={Point:"Point",LineString:"LineString",Polygon:"Polygon",Circle:"Circle",Box:"Circle"};if(!typeMap[_this.props.geomType]){// Unknown geom type
|
|
9
|
+
return}// create an interaction to draw with
|
|
10
|
+
_this.drawInteraction=new ol.interaction.Draw({stopClick:true,source:_this.selectionLayer.getSource(),condition:function condition(event){return event.originalEvent.buttons===1},type:typeMap[_this.props.geomType],style:function style(feature){return FeatureStyles[_this.props.styleName](feature,_objectSpread(_objectSpread({},_this.props.styleOptions),{},{circleRadius:0}))},geometryFunction:_this.props.geomType==="Box"?ol.interaction.createBox():undefined});_this.drawInteraction.on("drawstart",function(evt){// clear previous sketches
|
|
11
|
+
_this.selectionLayer.getSource().clear();evt.feature.on("change",function(){return _this.updateMeasurements(evt.feature)})},_this);_this.drawInteraction.on("drawend",function(evt){_this.updateSelectionState(evt.feature.getGeometry())},_this)}_this.map.addInteraction(_this.drawInteraction);window.addEventListener("keydown",_this.checkModifier);window.addEventListener("keyup",_this.checkModifier);if(_this.props.cursor){_this.map.getViewport().style.cursor=_this.props.cursor}});_defineProperty(_this,"removeDrawInteraction",function(){if(_this.drawInteraction!==null){_this.map.removeInteraction(_this.drawInteraction);_this.drawInteraction=null}window.removeEventListener("keydown",_this.checkModifier);window.removeEventListener("keyup",_this.checkModifier);_this.map.getViewport().style.cursor=""});_defineProperty(_this,"checkModifier",function(ev){var down=ev.type==="keydown";_this.setState(function(state){return{modifiers:{alt:ev.key==="Alt"?down:state.modifiers.alt,ctrl:ev.key==="Control"?down:state.modifiers.ctrl,shift:ev.key==="Shift"?down:state.modifiers.shift}}})});_defineProperty(_this,"updateSelectionState",function(geometry){if(!geometry){return}var coords=_this.props.geomType==="Circle"?null:geometry.getCoordinates();if(_this.props.geomType==="Circle"){// Also store poligonized circle
|
|
12
|
+
var center=geometry.getCenter();var radius=geometry.getRadius();var deg2rad=Math.PI/180;var polycords=[Array.apply(null,Array(91)).map(function(item,index){return[center[0]+radius*Math.cos(4*index*deg2rad),center[1]+radius*Math.sin(4*index*deg2rad)]})];_this.setState({geometry:{type:"Polygon",coordinates:polycords,center:center,radius:radius}})}else if(_this.props.geomType==="DragBox"||_this.props.geomType==="Box"){var boxcoords=[[Math.min(coords[0][0][0],coords[0][2][0]),Math.min(coords[0][0][1],coords[0][2][1]),Math.max(coords[0][0][0],coords[0][2][0]),Math.max(coords[0][0][1],coords[0][2][1])]];_this.setState({geometry:{type:"Polygon",coordinates:boxcoords}})}else{_this.setState({geometry:{type:_this.props.geomType,coordinates:coords}})}});_defineProperty(_this,"updateMeasurements",function(feature){if(!_this.props.measure){return}var settings={lenUnit:"metric",areaUnit:"metric"};MeasureUtils.updateFeatureMeasurements(feature,_this.props.geomType,_this.props.projection,settings)});_this.drawInteraction=null;_this.map=MapUtils.getHook(MapUtils.GET_MAP);// create a layer to draw on
|
|
13
|
+
_this.selectionLayer=new ol.layer.Vector({source:new ol.source.Vector,zIndex:1000000,style:function style(feature){return FeatureStyles[_this.props.styleName](feature,_this.props.styleOptions)}});_this.map.addLayer(_this.selectionLayer);_this.selectionLayer.setVisible(!_this.props.hideGeometry);return _this}_inherits(MapSelection,_React$Component);return _createClass(MapSelection,[{key:"componentDidMount",value:function componentDidMount(){if(this.props.active){this.addDrawInteraction()}}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.props.hideGeometry!==prevProps.hideGeometry){this.selectionLayer.setVisible(!this.props.hideGeometry)}if(this.props.geomType!==prevProps.geomType){this.selectionLayer.getSource().clear()}if(this.props.active&&!prevProps.active||this.props.active&&this.props.geomType!==prevProps.geomType){this.addDrawInteraction()}else if(!this.props.active&&prevProps.active){this.removeDrawInteraction()}if(this.state.geometry!==prevState.geometry){if(this.state.geometry!==this.props.geometry){this.props.geometryChanged(this.state.geometry,_objectSpread({},this.state.modifiers))}}if(this.props.geometry!==prevProps.geometry&&this.props.geometry!==this.state.geometry){if(!this.props.geometry){this.selectionLayer.getSource().clear()}else{var feature=this.selectionLayer.getSource().getFeatures()[0];if(!feature){feature=new ol.Feature;this.selectionLayer.getSource().addFeature(feature)}if(this.props.geometry.type==="Point"){feature.setGeometry(new ol.geom.Point(this.props.geometry.coordinates))}else if(this.props.geometry.type==="MultiPoint"){feature.setGeometry(new ol.geom.Multi(this.props.geometry.coordinates))}else if(this.props.geometry.type==="LineString"){feature.setGeometry(new ol.geom.LineString(this.props.geometry.coordinates))}else if(this.props.geometry.type==="MultiLineString"){feature.setGeometry(new ol.geom.MultiLineString(this.props.geometry.coordinates))}else if(this.props.geometry.type==="Polygon"){if(this.props.geometry.center&&this.props.geometry.radius){feature.setGeometry(new ol.geom.Circle(this.props.geometry.center,this.props.geometry.radius))}else{feature.setGeometry(new ol.geom.Polygon(this.props.geometry.coordinates))}}else if(this.props.geometry.type==="MultiPolygon"){feature.setGeometry(new ol.geom.MultiPolygon(this.props.geometry.coordinates))}this.setState({geometry:this.props.geometry})}}}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.map.removeLayer(this.selectionLayer);this.removeDrawInteraction()}},{key:"render",value:function render(){return null}}])}(React.Component);_defineProperty(MapSelection,"propTypes",{/** Whether the selection tool is active */active:PropTypes.bool,/** Optional, a css-cursor to use when drawing */cursor:PropTypes.string,/** The selection geometry type (Point, LineString, Polygon, Circle, DragBox, Box) */geomType:PropTypes.string,/** Initial geometry or geometry to update. */geometry:PropTypes.object,/** The callback which is invoked with a drawn geometry. */geometryChanged:PropTypes.func,/** Whether to hide the current selection (except while drawing). */hideGeometry:PropTypes.bool,/** Whether to show measurements while drawing. */measure:PropTypes.bool,projection:PropTypes.string,/** Optional: the selection feature style name. */styleName:PropTypes.string,/** Optional: the selection feature style options. */styleOptions:PropTypes.object});_defineProperty(MapSelection,"defaultProps",{styleName:"default",styleOptions:{}});export default connect(function(state){return{projection:state.map.projection}},{})(MapSelection);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import React from"react";import{connect}from"react-redux";import PropTypes from"prop-types";import{addLayerFeatures,LayerRole,removeLayer}from"../actions/layers";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import LocaleUtils from"../utils/LocaleUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import Icon from"./Icon";import ResizeableWindow from"./ResizeableWindow";import TextInput from"./widgets/TextInput";import"./style/NumericInputWindow.css";var NumericInputWindow=/*#__PURE__*/function(_React$Component){function NumericInputWindow(){var _this;_classCallCheck(this,NumericInputWindow);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,NumericInputWindow,[].concat(args));_defineProperty(_this,"state",{highlightedNode:null,displayCrs:null,feature:null,geometry:null});_defineProperty(_this,"coordinatesChanged",function(coordinates){_this.props.onFeatureChanged(_objectSpread(_objectSpread({},_this.state.feature),{},{geometry:VectorLayerUtils.reprojectGeometry(_objectSpread(_objectSpread({},_this.state.geometry),{},{coordinates:coordinates}),_this.state.displayCrs,_this.props.mapCrs)}))});_defineProperty(_this,"renderOrdinateInput",function(ordinate,_onChange){var decimals=CoordinatesUtils.getPrecision(_this.state.displayCrs);var value=ordinate.toFixed(decimals);return/*#__PURE__*/React.createElement(TextInput,{onChange:function onChange(text){return _this.onValueChanged(text,decimals,_onChange)},value:value})});_defineProperty(_this,"renderMeasureInput",function(measure,_onChange2){var decimals=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;decimals=decimals!==null&&decimals!==void 0?decimals:ConfigUtils.getConfigProp("measurementPrecision",null,2);var value=measure.toFixed(decimals);return/*#__PURE__*/React.createElement(TextInput,{onChange:function onChange(text){return _this.onValueChanged(text,decimals,_onChange2)},value:value})});_defineProperty(_this,"onValueChanged",function(text,decimals,onChange){var number=parseFloat(text);if(!isNaN(number)){var factor=Math.pow(10,decimals);onChange(Math.round(number*factor)/factor)}});_defineProperty(_this,"renderPointInputForm",function(){var coordinates=_this.state.geometry.coordinates;return/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,"x:\xA0"),/*#__PURE__*/React.createElement("td",null,_this.renderOrdinateInput(coordinates[0],function(value){return _this.updatePoint(value,0)})),/*#__PURE__*/React.createElement("td",null,"y:\xA0"),/*#__PURE__*/React.createElement("td",null,_this.renderOrdinateInput(coordinates[1],function(value){return _this.updatePoint(value,1)})))))});_defineProperty(_this,"updatePoint",function(number,ord){var newCoordinates=_toConsumableArray(_this.state.geometry.coordinates);newCoordinates[ord]=number;_this.coordinatesChanged(newCoordinates)});_defineProperty(_this,"renderCoordinateListInputForm",function(){var coordinates=_this.state.geometry.coordinates;if(_this.state.feature.shape==="Polygon"){coordinates=coordinates[0]}return/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,coordinates.map(function(entry,idx){return/*#__PURE__*/React.createElement("tr",{key:"coo"+idx,onMouseEnter:function onMouseEnter(){return _this.highlightListCoordinate(idx)},onMouseLeave:function onMouseLeave(){return _this.clearListCoordinateHighlight(idx)}},/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(){return _this.insertCoordinate(idx)}})),/*#__PURE__*/React.createElement("td",null,"x:\xA0"),/*#__PURE__*/React.createElement("td",null,_this.renderOrdinateInput(coordinates[idx][0],function(value){return _this.updateListCoordinate(value,idx,0)})),/*#__PURE__*/React.createElement("td",null,"y:\xA0"),/*#__PURE__*/React.createElement("td",null,_this.renderOrdinateInput(coordinates[idx][1],function(value){return _this.updateListCoordinate(value,idx,1)})),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement(Icon,{icon:"trash",onClick:function onClick(){return _this.removeCoordinate(idx)}})))}),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(){return _this.insertCoordinate(coordinates.length)}})),/*#__PURE__*/React.createElement("td",{colSpan:"5"}))))});_defineProperty(_this,"updateListCoordinate",function(number,nodeidx,ord){var newCoordinates=_toConsumableArray(_this.state.geometry.coordinates);var newpoint=null;if(_this.state.feature.shape==="Polygon"){newCoordinates[0]=_toConsumableArray(newCoordinates[0]);newCoordinates[0][nodeidx]=_toConsumableArray(newCoordinates[0][nodeidx]);newCoordinates[0][nodeidx][ord]=number;newpoint=newCoordinates[0][nodeidx]}else{newCoordinates[nodeidx]=_toConsumableArray(newCoordinates[nodeidx]);newCoordinates[nodeidx][ord]=number;newpoint=newCoordinates[nodeidx]}_this.coordinatesChanged(newCoordinates);_this.highlightListCoordinate(nodeidx,newpoint)});_defineProperty(_this,"computeInsPoint",function(coordinates,idx){if(idx===0){return _toConsumableArray(coordinates[0])}else if(idx>coordinates.length-1){return _toConsumableArray(coordinates[coordinates.length-1])}else{return[0.5*(coordinates[idx-1][0]+coordinates[idx][0]),0.5*(coordinates[idx-1][1]+coordinates[idx][1])]}});_defineProperty(_this,"insertCoordinate",function(idx){var newCoordinates=_toConsumableArray(_this.state.geometry.coordinates);if(_this.state.feature.shape==="Polygon"){newCoordinates[0]=_toConsumableArray(newCoordinates[0]);newCoordinates[0].splice(idx,0,_this.computeInsPoint(newCoordinates[0],idx))}else{newCoordinates.splice(idx,0,_this.computeInsPoint(newCoordinates,idx))}_this.coordinatesChanged(newCoordinates);_this.props.removeLayer("numericinputselection")});_defineProperty(_this,"removeCoordinate",function(idx){var newCoordinates=_toConsumableArray(_this.state.geometry.coordinates);if(_this.state.feature.shape==="Polygon"){newCoordinates[0]=_toConsumableArray(newCoordinates[0]);newCoordinates[0].splice(idx,1)}else{newCoordinates.splice(idx,1)}_this.coordinatesChanged(newCoordinates);_this.props.removeLayer("numericinputselection")});_defineProperty(_this,"highlightListCoordinate",function(idx){var newpoint=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var isPolygon=_this.state.feature.shape==="Polygon";var coordinates=_this.state.geometry.coordinates;var point=CoordinatesUtils.reproject(newpoint||(isPolygon?coordinates[0][idx]:coordinates[idx]),_this.state.displayCrs,_this.props.mapCrs);_this.setState({highlightedNode:idx});var feature={type:"Feature",geometry:{type:"Point",coordinates:point}};var sellayer={id:"numericinputselection",role:LayerRole.SELECTION};_this.props.addLayerFeatures(sellayer,[feature],true)});_defineProperty(_this,"clearListCoordinateHighlight",function(idx){if(_this.state.highlightedNode===idx){_this.setState({highlightedNode:null});_this.props.removeLayer("numericinputselection")}});_defineProperty(_this,"renderCircleInputForm",function(){var circleParams=_this.state.feature.circleParams;var center=CoordinatesUtils.reproject(circleParams.center,_this.props.mapCrs,_this.state.displayCrs);return/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,"x:\xA0"),/*#__PURE__*/React.createElement("td",null,_this.renderOrdinateInput(center[0],function(value){return _this.updateCircle(value,center[1],circleParams.radius)}))),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,"y:\xA0"),/*#__PURE__*/React.createElement("td",null,_this.renderOrdinateInput(center[1],function(value){return _this.updateCircle(center[0],value,circleParams.radius)}))),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,"r:\xA0"),/*#__PURE__*/React.createElement("td",null,_this.renderMeasureInput(circleParams.radius,function(value){return _this.updateCircle(center[0],center[1],value)})))))});_defineProperty(_this,"updateCircle",function(x,y,r){var center=CoordinatesUtils.reproject([x,y],_this.state.displayCrs,_this.props.mapCrs);var newFeature=_objectSpread(_objectSpread({},_this.state.feature),{},{circleParams:{center:center,radius:r}});_this.props.onFeatureChanged(newFeature)});_defineProperty(_this,"renderBoxInputForm",function(){var shape=_this.state.feature.shape;var coordinates=_this.state.geometry.coordinates[0];var x=0.5*(coordinates[0][0]+coordinates[2][0]);var y=0.5*(coordinates[0][1]+coordinates[2][1]);var d1x=Math.abs(coordinates[1][0]-coordinates[0][0]);var d1y=Math.abs(coordinates[1][1]-coordinates[0][1]);var w=Math.sqrt(d1x*d1x+d1y*d1y);var r=Math.atan2(d1y/w,d1x/w)/Math.PI*180;var d2x=0;var d2y=0;var h=w;if(shape==="Box"){d2x=Math.abs(coordinates[2][0]-coordinates[1][0]);d2y=Math.abs(coordinates[2][1]-coordinates[1][1]);h=Math.sqrt(d2x*d2x+d2y*d2y)}return/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,"x:\xA0"),/*#__PURE__*/React.createElement("td",null,_this.renderOrdinateInput(x,function(value){return _this.updateBox(value,y,w,h,r)}))),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,"y:\xA0"),/*#__PURE__*/React.createElement("td",null,_this.renderOrdinateInput(y,function(value){return _this.updateBox(x,value,w,h,r)}))),shape==="Box"?[/*#__PURE__*/React.createElement("tr",{key:"w"},/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("numericinput.width"),":\xA0"),/*#__PURE__*/React.createElement("td",null,_this.renderMeasureInput(w,function(value){return _this.updateBox(x,y,value,h,r)}))),/*#__PURE__*/React.createElement("tr",{key:"h"},/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("numericinput.height"),":\xA0"),/*#__PURE__*/React.createElement("td",null,_this.renderMeasureInput(h,function(value){return _this.updateBox(x,y,w,value,r)})))]:/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("numericinput.side"),":\xA0"),/*#__PURE__*/React.createElement("td",null,_this.renderMeasureInput(w,function(value){return _this.updateBox(x,y,value,value,r)}))),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("numericinput.angle"),":\xA0"),/*#__PURE__*/React.createElement("td",null,_this.renderMeasureInput(r,function(value){return _this.updateBox(x,y,w,h,value)},1)))))});_defineProperty(_this,"updateBox",function(x,y,w,h,r){var alpha=r/180*Math.PI;var w2=0.5*w;var h2=0.5*h;var cosa=Math.cos(alpha);var sina=Math.sin(alpha);var newCoordinates=[[[x+cosa*w2-sina*h2,y+sina*w2+cosa*h2],[x-cosa*w2-sina*h2,y-sina*w2+cosa*h2],[x-cosa*w2+sina*h2,y-sina*w2-cosa*h2],[x+cosa*w2+sina*h2,y+sina*w2-cosa*h2],[x+cosa*w2-sina*h2,y+sina*w2+cosa*h2]]];_this.coordinatesChanged(newCoordinates)});return _this}_inherits(NumericInputWindow,_React$Component);return _createClass(NumericInputWindow,[{key:"componentDidMount",value:function componentDidMount(){this.componentDidUpdate({})}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this$props$feature,_prevProps$feature;if(prevProps.feature&&((_this$props$feature=this.props.feature)===null||_this$props$feature===void 0?void 0:_this$props$feature.id)!==((_prevProps$feature=prevProps.feature)===null||_prevProps$feature===void 0?void 0:_prevProps$feature.id)){this.props.removeLayer("numericinputselection")}}},{key:"render",value:function render(){var shapeInputForms={Point:this.renderPointInputForm,LineString:this.renderCoordinateListInputForm,Polygon:this.renderCoordinateListInputForm,Circle:this.renderCircleInputForm,Box:this.renderBoxInputForm,Square:this.renderBoxInputForm};var body=null;if(!this.state.geometry){body=/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("numericinput.nofeature"))}else if(shapeInputForms[this.state.feature.shape]){body=shapeInputForms[this.state.feature.shape]()}else{body=LocaleUtils.tr("numericinput.featureunsupported")}return/*#__PURE__*/React.createElement(ResizeableWindow,{fitHeight:true,icon:"numericinput",initialWidth:320,onClose:this.props.onClose,scrollable:true,title:LocaleUtils.tr("numericinput.windowtitle")},/*#__PURE__*/React.createElement("div",{className:"numeric-input-widget-body",role:"body"},body))}}],[{key:"getDerivedStateFromProps",value:function getDerivedStateFromProps(nextProps,state){var newState={feature:nextProps.feature,displayCrs:nextProps.displayCrs};if(state.feature&&!nextProps.feature){newState.geometry=null}else if(nextProps.feature&&(nextProps.feature!==state.feature||nextProps.displayCrs!==state.displayCrs)){newState.geometry=VectorLayerUtils.reprojectGeometry(nextProps.feature.geometry,nextProps.mapCrs,nextProps.displayCrs)}return newState}}])}(React.Component);_defineProperty(NumericInputWindow,"propTypes",{addLayerFeatures:PropTypes.func,displayCrs:PropTypes.string,feature:PropTypes.object,mapCrs:PropTypes.string,onClose:PropTypes.func,onFeatureChanged:PropTypes.func,removeLayer:PropTypes.func});export default connect(function(state){return{displayCrs:state.map.displayCrs,mapCrs:state.map.projection}},{addLayerFeatures:addLayerFeatures,removeLayer:removeLayer})(NumericInputWindow);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2024 Sourcepole AG
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/import React from"react";import{connect}from"react-redux";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{v1 as uuidv1}from"uuid";import{LayerRole,addLayerFeatures,clearLayer}from"../actions/layers";import IdentifyUtils from"../utils/IdentifyUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import MapSelection from"./MapSelection";import PopupMenu from"./widgets/PopupMenu";import Spinner from"./widgets/Spinner";import"./style/PickFeature.css";var PickFeature=/*#__PURE__*/function(_React$Component){function PickFeature(props){var _this;_classCallCheck(this,PickFeature);_this=_callSuper(this,PickFeature,[props]);_defineProperty(_this,"handleIdentifyResponse",function(response,reqId,layer,infoFormat){if(_this.state.reqId!==reqId){return}var result=IdentifyUtils.parseResponse(response,layer,infoFormat,_this.state.clickPos,_this.props.map.projection,false,_this.props.layers);if(_this.props.featureFilter){Object.entries(result).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),layername=_ref2[0],features=_ref2[1];result[layername]=features.filter(_this.props.featureFilter)})}else{Object.entries(result).forEach(function(_ref3){var _ref4=_slicedToArray(_ref3,2),layername=_ref4[0],features=_ref4[1];result[layername]=features.filter(function(feature){return!!feature.geometry})})}_this.setState(function(state){var newState={pickResults:_objectSpread(_objectSpread({},state.pickResults),result),pendingQueries:state.pendingQueries-1};if(newState.pendingQueries===0){var entries=Object.entries(newState.pickResults);if(entries.length===1&&entries[0][1].length===1){_this.props.featurePicked(entries[0][0],entries[0][1][0]);newState.pickResults=null;newState.pickGeom=null}else if(entries.reduce(function(sum,entry){return sum+entry[1].length},0)===0){newState.pickResults=null;newState.pickGeom=null}}return newState})});_defineProperty(_this,"highlightFeature",function(key,feature){var layer={id:"pick-feature-selection",role:LayerRole.SELECTION};_this.props.addLayerFeatures(layer,[feature],true);_this.setState({highlightedFeature:key+":"+feature.id})});_defineProperty(_this,"clearHighlight",function(key,feature){if(_this.state.highlightedFeature===key+":"+feature.id){_this.setState({highlightFeature:null});_this.props.clearLayer("pick-feature-selection")}});_defineProperty(_this,"onClose",function(){_this.setState(PickFeature.defaultState);_this.props.clearLayer("pick-feature-selection")});_this.state=PickFeature.defaultState;return _this}_inherits(PickFeature,_React$Component);return _createClass(PickFeature,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){var _this2=this;if(this.state.pickGeom&&this.state.pickGeom!==prevState.pickGeom){var queryLayers=[];if(this.props.layer){queryLayers=[this.props.layers.find(function(l){return l.role===LayerRole.THEME&&LayerUtils.searchSubLayer(l,"name",_this2.props.layer)})].filter(Boolean)}else{queryLayers=IdentifyUtils.getQueryLayers(this.props.layers,this.props.map)}if(!isEmpty(queryLayers)){this.setState(function(state){var getPixelFromCoordinate=MapUtils.getHook(MapUtils.GET_PIXEL_FROM_COORDINATES_HOOK);var coordinates=_this2.props.pickGeomType==="Point"?[[state.pickGeom.coordinates]]:state.pickGeom.coordinates;var maxX=coordinates[0][0][0];var maxY=coordinates[0][0][1];for(var i=1;i<coordinates[0].length;++i){if(coordinates[0][i][0]>maxX){maxX=coordinates[0][i][0];maxY=coordinates[0][i][1]}}var clickPos=getPixelFromCoordinate([maxX,maxY]);var reqId=uuidv1();queryLayers.forEach(function(layer){var request=null;if(_this2.props.pickGeomType==="Point"){request=IdentifyUtils.buildRequest(layer,_this2.props.layer||layer.queryLayers.join(","),state.pickGeom.coordinates,_this2.props.map)}else if(_this2.props.pickGeomType==="Polygon"){var filter=VectorLayerUtils.geoJSONGeomToWkt(_this2.state.pickGeom);request=IdentifyUtils.buildFilterRequest(layer,_this2.props.layer||layer.queryLayers.join(","),filter,_this2.props.map)}else{return}IdentifyUtils.sendRequest(request,function(response){return _this2.handleIdentifyResponse(response,reqId,layer,request.params.info_format)})});return{pickResults:{},clickPos:clickPos,pendingQueries:queryLayers.length,reqId:reqId}})}}}},{key:"render",value:function render(){var _this3=this;var resultsMenu=null;if(this.state.pickResults){resultsMenu=/*#__PURE__*/React.createElement(PopupMenu,{className:"PickFeatureMenu",key:"PickResultMenu",onClose:this.onClose,x:this.state.clickPos[0],y:this.state.clickPos[1]},this.state.pendingQueries===0?Object.entries(this.state.pickResults).map(function(_ref5){var _ref6=_slicedToArray(_ref5,2),layername=_ref6[0],features=_ref6[1];return features.map(function(feature){return/*#__PURE__*/React.createElement("div",{key:layername+":"+feature.id,onClickCapture:function onClickCapture(){return _this3.props.featurePicked(layername,feature)},onMouseOut:function onMouseOut(){return _this3.clearHighlight(layername,feature)},onMouseOver:function onMouseOver(){return _this3.highlightFeature(layername,feature)}},layername+": "+feature.displayname)})}):/*#__PURE__*/React.createElement("div",{className:"pick-feature-menu-querying"},/*#__PURE__*/React.createElement(Spinner,null),LocaleUtils.tr("pickfeature.querying")))}return[resultsMenu,/*#__PURE__*/React.createElement(MapSelection,{active:true,geomType:this.props.pickGeomType,geometry:this.state.pickGeom,geometryChanged:function geometryChanged(geom){return _this3.setState({pickGeom:geom})},key:"MapSelection",styleOptions:this.props.highlightStyle})]}}])}(React.Component);_defineProperty(PickFeature,"propTypes",{addLayerFeatures:PropTypes.func,clearLayer:PropTypes.func,/** Optional: Function which accepts a GeoJSON feature and returns whether it should be accepted (true) or discarded (false) */featureFilter:PropTypes.func,featurePicked:PropTypes.func,/** The style used for highlighting filter geometries. */highlightStyle:PropTypes.shape({/* Stroke color rgba array, i.e. [255, 0, 0, 0.5] */strokeColor:PropTypes.array,/* Stroke width */strokeWidth:PropTypes.number,/* Stroke dash/gap pattern array. Empty for solid line. */strokeDash:PropTypes.array,/* Fill color rgba array, i.e. [255, 0, 0, 0.33] */fillColor:PropTypes.array}),/** Optional: Restrict pick to specified layer name */layer:PropTypes.string,layers:PropTypes.array,map:PropTypes.object,/** Pick geometry type: Point, Polygon, ... (default: Point) */pickGeomType:PropTypes.string});_defineProperty(PickFeature,"defaultProps",{pickGeomType:"Point",highlightStyle:{strokeColor:[0,0,0],fillColor:[255,255,0,0.25]}});_defineProperty(PickFeature,"defaultState",{pickGeom:null,pickResults:null,clickPos:null,highlightedFeature:null,pendingQueries:0,reqId:null});export default connect(function(state){return{layers:state.layers.flat,map:state.map}},{addLayerFeatures:addLayerFeatures,clearLayer:clearLayer})(PickFeature);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _extends(){return _extends=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)({}).hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},_extends.apply(null,arguments)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
|
|
2
|
+
* Copyright 2016 GeoSolutions Sas
|
|
3
|
+
* Copyright 2016-2024 Sourcepole AG
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the BSD-style license found in the
|
|
7
|
+
* LICENSE file in the root directory of this source tree.
|
|
8
|
+
*/import React from"react";import{connect}from"react-redux";import PropTypes from"prop-types";import ConfigUtils from"../utils/ConfigUtils";import WindowManager from"./WindowManager";import"./style/PluginsContainer.css";var PluginsContainer=/*#__PURE__*/function(_React$Component){function PluginsContainer(){var _this;_classCallCheck(this,PluginsContainer);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,PluginsContainer,[].concat(args));_defineProperty(_this,"renderPlugins",function(){var mode=ConfigUtils.isMobile()?"mobile":"desktop";var pluginsConfig=_this.props.pluginsConfig[mode];return pluginsConfig.map(function(pluginConf,idx){var _this$props$theme,_this$props$theme2;var Plugin=_this.props.plugins[pluginConf.name+"Plugin"];if(!Plugin){return null}var themeDevicePluginConfig=((_this$props$theme=_this.props.theme)===null||_this$props$theme===void 0||(_this$props$theme=_this$props$theme.config)===null||_this$props$theme===void 0||(_this$props$theme=_this$props$theme[mode])===null||_this$props$theme===void 0||(_this$props$theme=_this$props$theme.plugins)===null||_this$props$theme===void 0?void 0:_this$props$theme[pluginConf.name])||{};var themePluginConfig=((_this$props$theme2=_this.props.theme)===null||_this$props$theme2===void 0||(_this$props$theme2=_this$props$theme2.config)===null||_this$props$theme2===void 0||(_this$props$theme2=_this$props$theme2.plugins)===null||_this$props$theme2===void 0?void 0:_this$props$theme2[pluginConf.name])||{};var cfg=_objectSpread(_objectSpread(_objectSpread({},pluginConf.cfg||{}),themePluginConfig),themeDevicePluginConfig);var appCfg=_this.props.pluginsAppConfig[pluginConf.name+"Plugin"]||{};return/*#__PURE__*/React.createElement(Plugin,_extends({key:pluginConf.name+idx},cfg,appCfg))})});return _this}_inherits(PluginsContainer,_React$Component);return _createClass(PluginsContainer,[{key:"render",value:function render(){return/*#__PURE__*/React.createElement("div",{className:"PluginsContainer"},this.renderPlugins(),/*#__PURE__*/React.createElement(WindowManager,null))}}])}(React.Component);_defineProperty(PluginsContainer,"propTypes",{plugins:PropTypes.object,pluginsAppConfig:PropTypes.object,pluginsConfig:PropTypes.object,theme:PropTypes.object});export default connect(function(state){return{theme:state.theme.current}})(PluginsContainer);
|