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,11 @@
|
|
|
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 _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 _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 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 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 _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 _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 _asyncIterator(r){var n,t,o,e=2;for("undefined"!=typeof Symbol&&(t=Symbol.asyncIterator,o=Symbol.iterator);e--;){if(t&&null!=(n=r[t]))return n.call(r);if(o&&null!=(n=r[o]))return new AsyncFromSyncIterator(n.call(r));t="@@asyncIterator",o="@@iterator"}throw new TypeError("Object is not async iterable")}function AsyncFromSyncIterator(r){function AsyncFromSyncIteratorContinuation(r){if(Object(r)!==r)return Promise.reject(new TypeError(r+" is not an object."));var n=r.done;return Promise.resolve(r.value).then(function(r){return{value:r,done:n}})}return AsyncFromSyncIterator=function AsyncFromSyncIterator(r){this.s=r,this.n=r.next},AsyncFromSyncIterator.prototype={s:null,n:null,next:function next(){return AsyncFromSyncIteratorContinuation(this.n.apply(this.s,arguments))},"return":function _return(r){var n=this.s["return"];return void 0===n?Promise.resolve({value:r,done:!0}):AsyncFromSyncIteratorContinuation(n.apply(this.s,arguments))},"throw":function _throw(r){var n=this.s["return"];return void 0===n?Promise.reject(r):AsyncFromSyncIteratorContinuation(n.apply(this.s,arguments))}},new AsyncFromSyncIterator(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 axios from"axios";import url from"url";import{LayerRole}from"../actions/layers";import StandardApp from"../components/StandardApp";import ConfigUtils from"../utils/ConfigUtils";import LayerUtils from"../utils/LayerUtils";var UrlQuery={};var historyUpdateTimeout=null;var pendingParams={};export var UrlParams={updateParams:function updateParams(dict){var forceLocationUrl=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;if(ConfigUtils.getConfigProp("omitUrlParameterUpdates")===true){UrlQuery=Object.assign(UrlQuery,dict);var propNames=Object.getOwnPropertyNames(UrlQuery);var _iterator2=_createForOfIteratorHelper(propNames),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var propName=_step2.value;if(UrlQuery[propName]===undefined){delete UrlQuery[propName]}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}if(!forceLocationUrl){return}}// Delay URL updates to avoid "Too many calls to Location or History APIs within a short timeframe."
|
|
8
|
+
if(historyUpdateTimeout!==null){clearTimeout(historyUpdateTimeout)}pendingParams=_objectSpread(_objectSpread({},pendingParams),dict);historyUpdateTimeout=setTimeout(function(){var urlObj=url.parse(window.location.href,true);urlObj.query=Object.assign(urlObj.query,pendingParams);var propNames=Object.getOwnPropertyNames(urlObj.query);var _iterator3=_createForOfIteratorHelper(propNames),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var _propName=_step3.value;if(urlObj.query[_propName]===undefined){delete urlObj.query[_propName]}}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}delete urlObj.search;history.replaceState({id:urlObj.host},"",url.format(urlObj));historyUpdateTimeout=null;pendingParams={}},250)},getParam:function getParam(key){var urlObj=url.parse(window.location.href,true);if(ConfigUtils.getConfigProp("omitUrlParameterUpdates")===true){var _urlObj$query$key;return(_urlObj$query$key=urlObj.query[key])!==null&&_urlObj$query$key!==void 0?_urlObj$query$key:UrlQuery[key]}else{return urlObj.query[key]}},getParams:function getParams(){var query=url.parse(window.location.href,true).query;if(ConfigUtils.getConfigProp("omitUrlParameterUpdates")===true){return _objectSpread(_objectSpread({},UrlQuery),query)}else{return query}},clear:function clear(){this.updateParams({k:undefined,t:undefined,l:undefined,bl:undefined,bk:undefined,c:undefined,s:undefined,e:undefined,crs:undefined,st:undefined,sp:undefined,f:undefined,v3d:undefined},true)},getFullUrl:function getFullUrl(){if(ConfigUtils.getConfigProp("omitUrlParameterUpdates")===true){var urlObj=url.parse(window.location.href,true);urlObj.query=UrlQuery;delete urlObj.search;return url.format(urlObj)}else{return window.location.href}}};var PermalinkDataHooks={};export function registerPermalinkDataStoreHook(key,storeFn){PermalinkDataHooks[key]=storeFn}export function unregisterPermalinkDataStoreHook(key){delete PermalinkDataHooks[key]}function executePermalinkDataStoreHooks(_x){return _executePermalinkDataStoreHooks.apply(this,arguments)}function _executePermalinkDataStoreHooks(){_executePermalinkDataStoreHooks=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(permalinkState){var _iteratorAbruptCompletion,_didIteratorError,_iteratorError,_iterator,_step,_step$value,key,storeFn;return _regeneratorRuntime().wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:_iteratorAbruptCompletion=false;_didIteratorError=false;_context.prev=2;_iterator=_asyncIterator(Object.entries(PermalinkDataHooks));case 4:_context.next=6;return _iterator.next();case 6:if(!(_iteratorAbruptCompletion=!(_step=_context.sent).done)){_context.next=14;break}_step$value=_slicedToArray(_step.value,2),key=_step$value[0],storeFn=_step$value[1];_context.next=10;return storeFn();case 10:permalinkState[key]=_context.sent;case 11:_iteratorAbruptCompletion=false;_context.next=4;break;case 14:_context.next=20;break;case 16:_context.prev=16;_context.t0=_context["catch"](2);_didIteratorError=true;_iteratorError=_context.t0;case 20:_context.prev=20;_context.prev=21;if(!(_iteratorAbruptCompletion&&_iterator["return"]!=null)){_context.next=25;break}_context.next=25;return _iterator["return"]();case 25:_context.prev=25;if(!_didIteratorError){_context.next=28;break}throw _iteratorError;case 28:return _context.finish(25);case 29:return _context.finish(20);case 30:case"end":return _context.stop()}},_callee,null,[[2,16,20,30],[21,,25,29]])}));return _executePermalinkDataStoreHooks.apply(this,arguments)}export function generatePermaLink(_x2){return _generatePermaLink.apply(this,arguments)}function _generatePermaLink(){_generatePermaLink=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(callback){var user,permittedGroup,state,fullUrl,permalinkState,exploded,redliningLayers,params,route,_args2=arguments;return _regeneratorRuntime().wrap(function _callee2$(_context2){while(1)switch(_context2.prev=_context2.next){case 0:user=_args2.length>1&&_args2[1]!==undefined?_args2[1]:false;permittedGroup=_args2.length>2&&_args2[2]!==undefined?_args2[2]:"";state=StandardApp.store.getState();fullUrl=UrlParams.getFullUrl();if(ConfigUtils.getConfigProp("permalinkServiceUrl")){_context2.next=7;break}callback(fullUrl);return _context2.abrupt("return");case 7:permalinkState={};if(ConfigUtils.getConfigProp("storeAllLayersInPermalink")){permalinkState.layers=state.layers.flat.filter(function(layer){return layer.role!==LayerRole.BACKGROUND})}else{// Only store redlining layers
|
|
9
|
+
exploded=LayerUtils.explodeLayers(state.layers.flat.filter(function(layer){return layer.role!==LayerRole.BACKGROUND}));redliningLayers=exploded.map(function(entry,idx){return _objectSpread(_objectSpread({},entry),{},{pos:idx})}).filter(function(entry){return entry.layer.role===LayerRole.USERLAYER&&entry.layer.type==="vector"}).map(function(entry){return _objectSpread(_objectSpread({},entry.layer),{},{pos:entry.pos})});permalinkState.layers=redliningLayers}permalinkState.permalinkParams=state.localConfig.permalinkParams;permalinkState.url=fullUrl;params={permitted_group:permittedGroup||null};_context2.next=14;return executePermalinkDataStoreHooks(permalinkState);case 14:route=user?"userpermalink":"createpermalink";axios.post(ConfigUtils.getConfigProp("permalinkServiceUrl").replace(/\/$/,"")+"/"+route,permalinkState,{params:params}).then(function(response){return callback(response.data.permalink||fullUrl,response.data.expires||null)})["catch"](function(){return callback(fullUrl)});case 16:case"end":return _context2.stop()}},_callee2)}));return _generatePermaLink.apply(this,arguments)}export function resolvePermaLink(initialParams,callback){var key=initialParams.k;var bkey=initialParams.bk;if(key){axios.get(ConfigUtils.getConfigProp("permalinkServiceUrl").replace(/\/$/,"")+"/resolvepermalink?key="+key).then(function(response){var data=response.data;callback(_objectSpread(_objectSpread(_objectSpread({},initialParams),data.query||{}),data.state.permalinkParams||{}),data.state||{},!!data.query)})["catch"](function(){callback(initialParams,{},false)})}else if(bkey){axios.get(ConfigUtils.getConfigProp("permalinkServiceUrl").replace(/\/$/,"")+"/bookmarks/"+bkey).then(function(response){var data=response.data;callback(_objectSpread(_objectSpread(_objectSpread({},initialParams),data.query||{}),data.state.permalinkParams||{}),data.state||{},!!data.query)})["catch"](function(){callback(initialParams,{},false)})}else{callback(initialParams,{},true)}}export function resolveBookmark(bookmarkKey,callback){axios.get(ConfigUtils.getConfigProp("permalinkServiceUrl").replace(/\/$/,"")+"/bookmarks/"+bookmarkKey).then(function(response){var data=response.data;callback(_objectSpread({},data.query||{}),data.state||{},!!data.query)})["catch"](function(){callback(bookmarkKey,{},false)})}export function getUserBookmarks(user,callback){if(user){axios.get(ConfigUtils.getConfigProp("permalinkServiceUrl").replace(/\/$/,"")+"/bookmarks/").then(function(response){callback(response.data||[])})["catch"](function(){callback([])})}}export function createBookmark(_x3,_x4){return _createBookmark.apply(this,arguments)}function _createBookmark(){_createBookmark=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(description,callback){var state,exploded,bookmarkState,redliningLayers;return _regeneratorRuntime().wrap(function _callee3$(_context3){while(1)switch(_context3.prev=_context3.next){case 0:if(ConfigUtils.getConfigProp("permalinkServiceUrl")){_context3.next=3;break}callback(false);return _context3.abrupt("return");case 3:state=StandardApp.store.getState();// Only store redlining layers
|
|
10
|
+
exploded=LayerUtils.explodeLayers(state.layers.flat.filter(function(layer){return layer.role!==LayerRole.BACKGROUND}));bookmarkState={};if(ConfigUtils.getConfigProp("storeAllLayersInPermalink")){bookmarkState.layers=state.layers.flat.filter(function(layer){return layer.role!==LayerRole.BACKGROUND})}else{redliningLayers=exploded.map(function(entry,idx){return _objectSpread(_objectSpread({},entry),{},{pos:idx})}).filter(function(entry){return entry.layer.role===LayerRole.USERLAYER&&entry.layer.type==="vector"}).map(function(entry){return _objectSpread(_objectSpread({},entry.layer),{},{pos:entry.pos})});bookmarkState.layers=redliningLayers}bookmarkState.permalinkParams=state.localConfig.permalinkParams;bookmarkState.url=UrlParams.getFullUrl();_context3.next=11;return executePermalinkDataStoreHooks(bookmarkState);case 11:axios.post(ConfigUtils.getConfigProp("permalinkServiceUrl").replace(/\/$/,"")+"/bookmarks/"+"?description="+description,bookmarkState).then(function(){return callback(true)})["catch"](function(){return callback(false)});case 12:case"end":return _context3.stop()}},_callee3)}));return _createBookmark.apply(this,arguments)}export function updateBookmark(_x5,_x6,_x7){return _updateBookmark.apply(this,arguments)}function _updateBookmark(){_updateBookmark=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(bkey,description,callback){var state,exploded,bookmarkState,redliningLayers;return _regeneratorRuntime().wrap(function _callee4$(_context4){while(1)switch(_context4.prev=_context4.next){case 0:if(ConfigUtils.getConfigProp("permalinkServiceUrl")){_context4.next=3;break}callback(false);return _context4.abrupt("return");case 3:state=StandardApp.store.getState();// Only store redlining layers
|
|
11
|
+
exploded=LayerUtils.explodeLayers(state.layers.flat.filter(function(layer){return layer.role!==LayerRole.BACKGROUND}));bookmarkState={};if(ConfigUtils.getConfigProp("storeAllLayersInPermalink")){bookmarkState.layers=state.layers.flat.filter(function(layer){return layer.role!==LayerRole.BACKGROUND})}else{redliningLayers=exploded.map(function(entry,idx){return _objectSpread(_objectSpread({},entry),{},{pos:idx})}).filter(function(entry){return entry.layer.role===LayerRole.USERLAYER&&entry.layer.type==="vector"}).map(function(entry){return _objectSpread(_objectSpread({},entry.layer),{},{pos:entry.pos})});bookmarkState.layers=redliningLayers}bookmarkState.permalinkParams=state.localConfig.permalinkParams;bookmarkState.url=UrlParams.getFullUrl();_context4.next=11;return executePermalinkDataStoreHooks(bookmarkState);case 11:axios.put(ConfigUtils.getConfigProp("permalinkServiceUrl").replace(/\/$/,"")+"/bookmarks/"+bkey+"?description="+description,bookmarkState).then(function(){return callback(true)})["catch"](function(){return callback(false)});case 12:case"end":return _context4.stop()}},_callee4)}));return _updateBookmark.apply(this,arguments)}export function removeBookmark(bkey,callback){if(bkey){axios["delete"](ConfigUtils.getConfigProp("permalinkServiceUrl").replace(/\/$/,"")+"/bookmarks/"+bkey).then(function(){callback(true)})["catch"](function(){return callback(false)})}}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
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
|
+
*/var REGISTRY={};var ResourceRegistry={addResource:function addResource(key,data){REGISTRY[key]=data},removeResource:function removeResource(key){delete REGISTRY[key]},getResource:function getResource(key){return REGISTRY[key]}};export default ResourceRegistry;
|
|
@@ -0,0 +1,12 @@
|
|
|
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 _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 axios from"axios";import{v1 as uuidv1}from"uuid";import ConfigUtils from"./ConfigUtils";import LocaleUtils from"./LocaleUtils";import VectorLayerUtils from"./VectorLayerUtils";var ValhallaSession={reqId:null,pending:0,result:null,clear:function clear(){ValhallaSession.reqId=null;ValhallaSession.pending=0;ValhallaSession.result=null}};function decodeShape(str){var precision=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;var index=0;var lat=0;var lng=0;var coordinates=[];var shift=0;var result=0;var _byte=null;var latitudeChange;var longitudeChange;var factor=Math.pow(10,precision||6);// Coordinates have variable length when encoded, so just keep
|
|
8
|
+
// track of whether we've hit the end of the string. In each
|
|
9
|
+
// loop iteration, a single coordinate is decoded.
|
|
10
|
+
while(index<str.length){// Reset shift, result, and byte
|
|
11
|
+
_byte=null;shift=0;result=0;do{_byte=str.charCodeAt(index++)-63;result|=(_byte&31)<<shift;shift+=5}while(_byte>=32);latitudeChange=result&1?~(result>>1):result>>1;shift=result=0;do{_byte=str.charCodeAt(index++)-63;result|=(_byte&31)<<shift;shift+=5}while(_byte>=32);longitudeChange=result&1?~(result>>1):result>>1;lat+=latitudeChange;lng+=longitudeChange;coordinates.push([lng/factor,lat/factor])}return coordinates}function getValhallaParams(costing,locations,options,extraOptions){var costingOptions={};if(costing==="auto"){costingOptions.auto={top_speed:options.maxSpeed,shortest:options.method==="shortest",use_ferry:options.useFerries?1:0,use_tolls:options.useTollways?1:0,use_highways:options.useHighways?1:0}}else if(costing==="heavyvehicle"){costing="truck";costingOptions.truck={top_speed:options.maxSpeed,shortest:options.method==="shortest",use_ferry:options.useFerries?1:0,use_tolls:options.useTollways?1:0,use_highways:options.useHighways?1:0}}else if(costing==="transit"){costing="multimodal";var timepointMap={now:0,leaveat:1,arriveat:2};extraOptions.date_time={value:options.time.slice(0,16),type:timepointMap[options.timepoint]}}else if(costing==="bicycle"){costingOptions.bicycle={cycling_speed:options.maxSpeed,shortest:options.method==="shortest",use_ferry:options.useFerries?1:0}}else if(costing==="pedestrian"){costingOptions.pedestrian={walking_speed:options.maxSpeed,shortest:options.method==="shortest",use_ferry:options.useFerries?1:0}}var payload=_objectSpread({costing:costing,costing_options:costingOptions,exclude_polygons:options.exclude_polygons||[],locations:locations.map(function(loc){return{lon:loc[0],lat:loc[1]}}),directions_options:{units:"kilometers",language:LocaleUtils.lang()}},extraOptions);return{json:JSON.stringify(payload)}}function computeRoute(costing,locations,options,callback){var extraOptions={id:"valhalla_directions"};var params=getValhallaParams(costing,locations,options,extraOptions);var serviceUrl=ConfigUtils.getConfigProp("routingServiceUrl").replace(/\/$/,"");var endpoint=options.optimized_route?"optimized_route":"route";axios.get(serviceUrl+"/"+endpoint,{params:params}).then(function(response){if(!response.data||!response.data.trip){callback(false,{errorMsgId:LocaleUtils.trmsg("routing.computefailed")});return}var trip=response.data.trip;if(trip.status!==0){callback(false,response.data.trip.status_message)}// https://valhalla.github.io/valhalla/api/turn-by-turn/api-reference/
|
|
12
|
+
var travelTypeMap={car:{icon:"routing-car",color:[0,0,255,1]},tractor_trailer:{icon:"routing-truck",color:[0,0,255,1]},foot:{icon:"routing-walking",color:[127,127,255,1]},road:{icon:"routing-bicycle",color:[0,127,0,1]},tram:{icon:"routing-tram",color:[255,0,0,1]},metro:{icon:"routing-tram",color:[255,0,0,1]},rail:{icon:"routing-train",color:[255,0,0,1]},bus:{icon:"routing-bus",color:[255,0,0,1]},ferry:{icon:"routing-ship",color:[0,0,200,1]},cable_car:{icon:"routing-cablecar",color:[255,0,0,1]},gondola:{icon:"routing-cablecar",color:[255,0,0,1]},funicular:{icon:"routing-cablecar",color:[255,0,0,1]}};var result={legs:trip.legs.map(function(leg){return{coordinates:decodeShape(leg.shape),time:leg.summary.time,length:leg.summary.length*1000,maneuvers:leg.maneuvers.map(function(entry){return{instruction:entry.instruction,post_instruction:entry.verbal_post_transition_instruction,geom_indices:[entry.begin_shape_index,entry.end_shape_index],icon:(travelTypeMap[entry.travel_type]||{}).icon||"routing",color:(travelTypeMap[entry.travel_type]||{}).color||"#0000FF",time:entry.time,length:entry.length*1000}})}}),locations:trip.locations.map(function(location){return{lat:location.lat,lon:location.lon,orig_idx:location.original_index}}),summary:{bounds:[trip.summary.min_lon,trip.summary.min_lat,trip.summary.max_lon,trip.summary.max_lat],time:trip.summary.time,length:trip.summary.length*1000}};callback(true,result)})["catch"](function(e){var error=((e.response||{}).data||{}).error;var data={};if(error){data.error=error}else{data.errorMsgId=LocaleUtils.trmsg("routing.computefailed")}callback(false,data)})}function computeIsochrone(costing,locations,contourOptions,options,callback){var extraOptions={contours:contourOptions.intervals.map(function(entry){return _defineProperty({},contourOptions.mode,entry)}),id:"valhalla_isochrone"};var serviceUrl=ConfigUtils.getConfigProp("routingServiceUrl").replace(/\/$/,"");var reqId=uuidv1();ValhallaSession.reqId=reqId;ValhallaSession.pending=locations.length;locations.forEach(function(location){var params=getValhallaParams(costing,[location],options,extraOptions);axios.get(serviceUrl+"/isochrone",{params:params}).then(function(response){if(reqId!==ValhallaSession.reqId){return}if(!response.data||!response.data.features){ValhallaSession.clear();callback(false,{errorMsgId:LocaleUtils.trmsg("routing.computefailed")});return}ValhallaSession.pending-=1;if(!ValhallaSession.result){ValhallaSession.result=response.data}else{var _ValhallaSession$resu;(_ValhallaSession$resu=ValhallaSession.result.features).push.apply(_ValhallaSession$resu,_toConsumableArray(response.data.features))}if(ValhallaSession.pending===0){var areas=ValhallaSession.result.features.map(function(feature){return feature.geometry.coordinates});callback(true,{areas:areas,bounds:VectorLayerUtils.computeFeatureBBox(ValhallaSession.result)});ValhallaSession.clear()}})["catch"](function(e){ValhallaSession.clear();var error=((e.response||{}).data||{}).error;var data={};if(error){data.error=error}else{data.errorMsgId=LocaleUtils.trmsg("routing.computefailed")}callback(false,data)})})}export default{computeRoute:computeRoute,computeIsochrone:computeIsochrone};
|
|
@@ -0,0 +1,19 @@
|
|
|
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 _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 _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 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 _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-2021 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 axios from"axios";import yaml from"js-yaml";import polygonIntersectTest from"polygon-intersect-test";import ConfigUtils from"./ConfigUtils";import CoordinatesUtils from"./CoordinatesUtils";import IdentifyUtils from"./IdentifyUtils";import LocaleUtils from"./LocaleUtils";export var SearchResultType={PLACE:0,THEMELAYER:1,THEME:2,EXTERNALLAYER:3};function coordinatesSearch(text,searchParams,callback){var displaycrs=searchParams.displaycrs||"EPSG:4326";var matches=text.match(/^\s*([+-]?\d+\.?\d*)[,\s]\s*([+-]?\d+\.?\d*)\s*$/);var items=[];if(matches&&matches.length>=3){var x=parseFloat(matches[1]);var y=parseFloat(matches[2]);if(displaycrs!=="EPSG:4326"){items.push({id:"coord0",text:x+", "+y+" ("+displaycrs+")",x:x,y:y,crs:displaycrs,bbox:[x,y,x,y]})}if(x>=-180&&x<=180&&y>=-90&&y<=90){var title=Math.abs(x)+(x>=0?"\xB0E":"\xB0W")+", "+Math.abs(y)+(y>=0?"\xB0N":"\xB0S");items.push({id:"coord"+items.length,text:title,x:x,y:y,crs:"EPSG:4326",bbox:[x,y,x,y]})}if(x>=-90&&x<=90&&y>=-180&&y<=180&&x!==y){var _title=Math.abs(y)+(y>=0?"\xB0E":"\xB0W")+", "+Math.abs(x)+(x>=0?"\xB0N":"\xB0S");items.push({id:"coord"+items.length,text:_title,x:y,y:x,crs:"EPSG:4326",bbox:[y,x,y,x]})}}var results=[];if(items.length>0){results.push({id:"coords",titlemsgid:"search.coordinates",type:SearchResultType.PLACE,items:items})}callback({results:results})}/** ************************************************************************ **/var NominatimSearch=/*#__PURE__*/function(){function NominatimSearch(){_classCallCheck(this,NominatimSearch)}return _createClass(NominatimSearch,null,[{key:"search",value:function search(text,searchParams,callback){var viewboxParams={};if(searchParams.filterBBox){viewboxParams.viewbox=CoordinatesUtils.reprojectBbox(searchParams.filterBBox,searchParams.mapcrs,"EPSG:4326").join(",");viewboxParams.bounded=1}axios.get("https://nominatim.openstreetmap.org/search",{params:_objectSpread(_objectSpread({"q":text,"addressdetails":1,"polygon_geojson":1,"limit":20,"format":"json","accept-language":searchParams.lang},viewboxParams),searchParams.cfgParams||{})}).then(function(response){var locale=searchParams.lang;if(NominatimSearch.TRANSLATIONS[locale]===undefined){NominatimSearch.TRANSLATIONS[locale]={promise:NominatimSearch.loadLocale(locale)};NominatimSearch.TRANSLATIONS[locale].promise.then(function(){NominatimSearch.parseResults(response.data,NominatimSearch.TRANSLATIONS[locale].strings,callback)})}else if(NominatimSearch.TRANSLATIONS[locale].promise){NominatimSearch.TRANSLATIONS[locale].promise.then(function(){NominatimSearch.parseResults(response.data,NominatimSearch.TRANSLATIONS[locale].strings,callback)})}else if(NominatimSearch.TRANSLATIONS[locale].strings){NominatimSearch.parseResults(response.data,NominatimSearch.TRANSLATIONS[locale].strings,callback)}})}},{key:"parseResults",value:function parseResults(obj,translations,callback){var results=[];var groups={};var groupcounter=0;(obj||[]).map(function(entry){if(!(entry["class"]in groups)){var title=entry.type;try{title=translations[entry["class"]][entry.type]||entry.type}catch(e){/* pass */}groups[entry["class"]]={id:"nominatimgroup"+groupcounter++,// capitalize class
|
|
8
|
+
title:title,type:SearchResultType.PLACE,items:[]};results.push(groups[entry["class"]])}// shorten display_name
|
|
9
|
+
var text=entry.display_name.split(", ").slice(0,3).join(", ");// map label
|
|
10
|
+
var label=text;// collect address fields
|
|
11
|
+
var address=[];if(entry.address.town){address.push(entry.address.town)}if(entry.address.city){address.push(entry.address.city)}if(entry.address.state){address.push(entry.address.state)}if(entry.address.country){address.push(entry.address.country)}if(address.length>0){text+="<br/><i>"+address.join(", ")+"</i>"}// reorder coords from [miny, maxy, minx, maxx] to [minx, miny, maxx, maxy]
|
|
12
|
+
var b=entry.boundingbox.map(function(coord){return parseFloat(coord)});var bbox=[b[2],b[0],b[3],b[1]];groups[entry["class"]].items.push({id:entry.place_id,// shorten display_name
|
|
13
|
+
text:text,label:label,bbox:bbox,geometry:entry.geojson,x:0.5*(bbox[0]+bbox[2]),y:0.5*(bbox[1]+bbox[3]),crs:"EPSG:4326",provider:"nominatim"})});callback({results:results})}},{key:"loadLocale",value:function loadLocale(locale){return new Promise(function(resolve){axios.get("https://raw.githubusercontent.com/openstreetmap/openstreetmap-website/master/config/locales/"+locale+".yml").then(function(resp2){NominatimSearch.TRANSLATIONS[locale]={strings:NominatimSearch.parseLocale(resp2.data,locale)};resolve(true)})["catch"](function(){NominatimSearch.TRANSLATIONS[locale]={promise:axios.get("https://raw.githubusercontent.com/openstreetmap/openstreetmap-website/master/config/locales/"+locale.slice(0,2)+".yml").then(function(resp3){NominatimSearch.TRANSLATIONS[locale]={strings:NominatimSearch.parseLocale(resp3.data,locale.slice(0,2))};resolve(true)})["catch"](function(){NominatimSearch.TRANSLATIONS[locale]={strings:{}};resolve(true)})}})})}},{key:"parseLocale",value:function parseLocale(data,locale){var doc=yaml.load(data,{json:true});try{return doc[locale].geocoder.search_osm_nominatim.prefix}catch(e){return{}}}}])}();/** ************************************************************************ **/_defineProperty(NominatimSearch,"TRANSLATIONS",{});var QgisSearch=/*#__PURE__*/function(){function QgisSearch(){_classCallCheck(this,QgisSearch)}return _createClass(QgisSearch,null,[{key:"search",value:function search(text,searchParams,callback){var filter=_objectSpread({},searchParams.cfgParams.expression);var values={TEXT:text};var params={SERVICE:"WMS",VERSION:searchParams.theme.version,REQUEST:"GetFeatureInfo",CRS:searchParams.theme.mapCrs,WIDTH:100,HEIGHT:100,LAYERS:[],FILTER:[],WITH_MAPTIP:false,WITH_GEOMETRY:true,feature_count:searchParams.cfgParams.featureCount||100,info_format:"text/xml"};Object.keys(filter).forEach(function(layer){Object.entries(values).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],value=_ref2[1];filter[layer]=filter[layer].replaceAll("$".concat(key,"$"),value.replace("'","\\'"))});params.LAYERS.push(layer);params.FILTER.push(layer+":"+filter[layer])});params.QUERY_LAYERS=params.LAYERS=params.LAYERS.join(",");params.FILTER=params.FILTER.join(";");axios.get(searchParams.theme.featureInfoUrl,{params:params}).then(function(response){callback(QgisSearch.searchResults(IdentifyUtils.parseResponse(response.data,searchParams.theme,"text/xml",null,searchParams.mapcrs),searchParams.cfgParams.title,searchParams.cfgParams.resultTitle))})["catch"](function(){callback({results:[]})})}},{key:"searchResults",value:function searchResults(features,title,resultTitle){var results=[];Object.entries(features).forEach(function(_ref3){var _ref4=_slicedToArray(_ref3,2),layername=_ref4[0],layerfeatures=_ref4[1];var items=layerfeatures.map(function(feature){var values=_objectSpread(_objectSpread({},feature.properties),{},{id:feature.id,layername:layername});return{id:"qgis."+layername+"."+feature.id,text:resultTitle?resultTitle.replace(/{([^}]+)}/g,function(match){return values[match.slice(1,-1)]}):feature.displayname,x:0.5*(feature.bbox[0]+feature.bbox[2]),y:0.5*(feature.bbox[1]+feature.bbox[3]),crs:feature.crs,bbox:feature.bbox,geometry:feature.geometry}});results.push({id:"qgis."+layername,title:title+": "+layername,type:SearchResultType.PLACE,items:items})});return{results:results}}},{key:"getResultGeometry",value:function getResultGeometry(resultItem,callback){callback({geometry:resultItem.geometry,crs:resultItem.crs})}}])}();/** ************************************************************************ **/export var FulltextSearch=/*#__PURE__*/function(){function FulltextSearch(){_classCallCheck(this,FulltextSearch)}return _createClass(FulltextSearch,null,[{key:"search",value:function search(searchText,searchParams,callback){var searchServiceUrl=ConfigUtils.getConfigProp("searchServiceUrl");if(!searchServiceUrl){/* eslint-disable-next-line */console.warn("Fulltext search failed: searchServiceUrl not set");callback({results:[]})}// Compute search filter
|
|
14
|
+
var searchFilter=new Set([].concat(_toConsumableArray(searchParams.cfgParams["default"]||[]),_toConsumableArray(searchParams.searchTerms)));var facetMap=searchParams.cfgParams.layers||{};searchParams.activeLayers.forEach(function(layername){if(facetMap[layername]){searchFilter.add(facetMap[layername])}});var params={searchtext:searchText,filter:_toConsumableArray(searchFilter).join(","),limit:searchParams.limit};var iconPath=ConfigUtils.getAssetsPath()+"/img/search/";axios.get(searchServiceUrl,{params:params}).then(function(response){var data=FulltextSearch.filterFulltextResults(response.data,searchParams.filterPoly,searchParams.mapcrs);var placeResultCount=(data.result_counts||[]).reduce(function(res,entry){if(entry.dataproduct_id==="dataproduct"){return res}else if(res===-1||entry.count===-1){return-1}else{return res+entry.count}},0);var results=[];// Layers
|
|
15
|
+
var _formatLayerEntry=function formatLayerEntry(dataproduct){return{type:SearchResultType.THEMELAYER,id:dataproduct.dataproduct_id,text:dataproduct.display,thumbnail:iconPath+"dataproduct.svg",info:dataproduct.dset_info,sublayers:dataproduct.sublayers?dataproduct.sublayers.map(_formatLayerEntry):null}};results.push({id:"fulltext.layers",titlemsgid:LocaleUtils.trmsg("search.layers"),type:SearchResultType.THEMELAYER,items:data.results.filter(function(entry){return entry.dataproduct}).map(function(entry){return _formatLayerEntry(entry.dataproduct)})});// Places
|
|
16
|
+
results.push({id:"fulltext.places",titlemsgid:LocaleUtils.trmsg("search.places"),resultCount:placeResultCount,type:SearchResultType.PLACE,items:data.results.filter(function(entry){return entry.feature}).map(function(entry){return{id:entry.feature.feature_id,text:entry.feature.display,x:0.5*(entry.feature.bbox[0]+entry.feature.bbox[2]),y:0.5*(entry.feature.bbox[1]+entry.feature.bbox[3]),crs:entry.feature.srid?"EPSG:"+String(entry.feature.srid).replace(/^EPSG:/,""):null,bbox:entry.feature.bbox,thumbnail:iconPath+entry.feature.dataproduct_id+".svg",// fulltext specific info
|
|
17
|
+
dataproduct_id:entry.feature.dataproduct_id,id_field_name:entry.feature.id_field_name}})});callback({results:results,result_counts:data.result_counts})})["catch"](function(e){// eslint-disable-next-line
|
|
18
|
+
console.warn("Fulltext search failed: "+e);callback({results:[]})})}},{key:"filterFulltextResults",value:function filterFulltextResults(data,filterPoly,mapCrs){if(!filterPoly){return data}data.results=data.results.filter(function(result){if(!result.feature||!result.feature.bbox){return true}var _CoordinatesUtils$rep=CoordinatesUtils.reprojectBbox(result.feature.bbox,"EPSG:"+result.feature.srid,mapCrs),_CoordinatesUtils$rep2=_slicedToArray(_CoordinatesUtils$rep,4),xmin=_CoordinatesUtils$rep2[0],ymin=_CoordinatesUtils$rep2[1],xmax=_CoordinatesUtils$rep2[2],ymax=_CoordinatesUtils$rep2[3];var intersects=polygonIntersectTest([[xmin,ymin],[xmax,ymin],[xmax,ymax],[xmin,ymax],[xmin,ymin]],filterPoly);if(!intersects){data.result_counts.find(function(entry){return entry.dataproduct_id===result.feature.dataproduct_id}).count-=1}return intersects});return data}},{key:"getResultGeometry",value:function getResultGeometry(resultItem,callback){var dataServiceUrl=ConfigUtils.getConfigProp("searchDataServiceUrl")||ConfigUtils.getConfigProp("dataServiceUrl");if(!dataServiceUrl){callback(null)}// URL example: /api/data/v1/ch.so.afu.fliessgewaesser.netz/?filter=[["gewissnr","=",1179]]
|
|
19
|
+
var quot=typeof resultItem.id==="string"?"\"":"";var filter="[[\"".concat(resultItem.id_field_name,"\",\"=\", ").concat(quot).concat(resultItem.id).concat(quot,"]]");axios.get(dataServiceUrl.replace(/\/?$/,"/")+resultItem.dataproduct_id+"/?filter="+filter).then(function(response){callback({feature:response.data,crs:response.data.crs.properties.name})})["catch"](function(){callback(null)})}},{key:"getLayerDefinition",value:function getLayerDefinition(resultItem,callback){var dataProductServiceUrl=ConfigUtils.getConfigProp("dataproductServiceUrl");if(!dataProductServiceUrl){/* eslint-disable-next-line */console.warn("Fulltext search: failed to get layer definition, dataproductServiceUrl is not defined");callback(null)}var params={filter:resultItem.id};axios.get(dataProductServiceUrl.replace(/\/?$/,"/")+"weblayers",{params:params}).then(function(response){var _response$data$result;callback((_response$data$result=response.data[resultItem.id])===null||_response$data$result===void 0?void 0:_response$data$result[0])})["catch"](function(){callback(null)})}},{key:"handleHighlightParameters",value:function handleHighlightParameters(hp,hf,st,callback){var searchServiceUrl=ConfigUtils.getConfigProp("searchServiceUrl");var dataServiceUrl=ConfigUtils.getConfigProp("searchDataServiceUrl")||ConfigUtils.getConfigProp("dataServiceUrl");if(!searchServiceUrl||!dataServiceUrl){return}var queryFeature=function queryFeature(filter){axios.get(dataServiceUrl.replace(/\/?$/,"/")+hp+"/?filter="+filter).then(function(response){var bbox=response.data.bbox;var item={x:0.5*[bbox[0]+bbox[2]],y:0.5*[bbox[1]+bbox[3]],label:st,crs:response.data.crs.properties.name,bbox:bbox};callback(item,{feature:response.data,crs:response.data.crs.properties.name})})["catch"](function(){})};if(hp&&hf){queryFeature(hf)}else if(hp&&st){var params={searchtext:st,filter:hp,limit:1};axios.get(searchServiceUrl,{params:params}).then(function(response){if(response.data.results&&response.data.results.length===1){var result=response.data.results[0].feature;var quot=typeof result.feature_id==="string"?"\"":"";var filter="[[\"".concat(result.id_field_name,"\",\"=\", ").concat(quot).concat(result.feature_id).concat(quot,"]]");queryFeature(filter)}})["catch"](function(){})}}}])}();export default{coordinates:{labelmsgid:"search.coordinates",onSearch:coordinatesSearch,handlesGeomFilter:false},nominatim:{label:"OpenStreetMap",onSearch:NominatimSearch.search,handlesGeomFilter:false},qgis:{label:"QGIS",onSearch:QgisSearch.search,getResultGeometry:QgisSearch.getResultGeometry,handlesGeomFilter:false},fulltext:{label:"Fulltext",onSearch:FulltextSearch.search,getResultGeometry:FulltextSearch.getResultGeometry,getLayerDefinition:FulltextSearch.getLayerDefinition,handlesGeomFilter:true}};
|
|
@@ -0,0 +1,20 @@
|
|
|
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 _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 _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 _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 _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 _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 axios from"axios";import deepmerge from"deepmerge";import{XMLParser}from"fast-xml-parser";import isEmpty from"lodash.isempty";import{getWidth}from"ol/extent";import{get as getProjection}from"ol/proj";import ol from"openlayers";import randomColor from"randomcolor";import url from"url";import{LayerRole}from"../actions/layers";import ConfigUtils from"./ConfigUtils";import CoordinatesUtils from"./CoordinatesUtils";import LayerUtils from"./LayerUtils";import MiscUtils from"./MiscUtils";function strcmp(a,b){var al=a.toLowerCase();var bl=b.toLowerCase();if(al<bl){return-1}else if(al>bl){return 1}return 0}var ServiceLayerUtils={getWMTSLayers:function getWMTSLayers(capabilities,capabilitiesUrl,mapCrs){var _this=this;if(!(capabilities!==null&&capabilities!==void 0&&capabilities.Contents)){return[]}var tileMatrices=capabilities.Contents.TileMatrixSet.reduce(function(res,entry){var crsMatch=entry.SupportedCRS.match(/(EPSG).*:(\d+)/i);res[entry.Identifier]={crs:crsMatch?"EPSG:"+crsMatch[2]:entry.SupportedCRS,matrix:entry.TileMatrix};return res},{});var layers=capabilities.Contents.Layer.map(function(layer){var _capabilities$Service,_capabilities$Service2,_capabilities$Service3;var styles=_this.getWMTSLayerStyles(capabilities,capabilitiesUrl,layer,tileMatrices);return{capabilitiesUrl:capabilitiesUrl,title:layer.Title,name:layer.Identifier,bbox:{crs:"EPSG:4326",bounds:layer.WGS84BoundingBox},sublayers:styles,"abstract":layer.Abstract,attribution:{Title:((_capabilities$Service=capabilities.ServiceProvider)===null||_capabilities$Service===void 0?void 0:_capabilities$Service.ProviderName)||((_capabilities$Service2=capabilities.ServiceIdentification)===null||_capabilities$Service2===void 0?void 0:_capabilities$Service2.Title)||"",OnlineResource:((_capabilities$Service3=capabilities.ServiceProvider)===null||_capabilities$Service3===void 0?void 0:_capabilities$Service3.ProviderSite)||""}}});layers.sort(function(a,b){return a.title.localeCompare(b.title)});return layers},getWMTSLayerStyles:function getWMTSLayerStyles(capabilities,capabilitiesUrl,layer,tileMatrices){var _this2=this;if(layer.Style.length===1){return this.getWMTSLayerTileMatrixSetLinks(capabilities,capabilitiesUrl,layer,tileMatrices,layer.Style[0].Identifier)}else{return layer.Style.map(function(style){return{title:style.Identifier,sublayers:_this2.getWMTSLayerTileMatrixSetLinks(capabilities,capabilitiesUrl,layer,tileMatrices,style.Identifier)}})}},getWMTSLayerTileMatrixSetLinks:function getWMTSLayerTileMatrixSetLinks(capabilities,capabilitiesUrl,layer,tileMatrices,style){var tileMatrixSetLinks=layer.TileMatrixSetLink;var layerLinks=tileMatrixSetLinks.map(function(link){var _MiscUtils$ensureArra,_capabilities$Service4,_capabilities$Service5,_capabilities$Service6;var tileMatrixSet=link.TileMatrixSet;var topMatrix=tileMatrices[tileMatrixSet].matrix[0];var tileMatrixPrefix=topMatrix.Identifier.includes(":")?topMatrix.Identifier.replace(/:[0-9]+$/,""):"";var origin=[topMatrix.TopLeftCorner[0],topMatrix.TopLeftCorner[1]];try{var axisOrder=CoordinatesUtils.getAxisOrder(tileMatrices[tileMatrixSet].crs).substr(0,2);if(axisOrder==="ne"){origin=[topMatrix.TopLeftCorner[1],topMatrix.TopLeftCorner[0]]}}catch(e){// eslint-disable-next-line
|
|
8
|
+
console.warn("Could not determine axis order for projection "+tileMatrices[tileMatrixSet].crs);return null}// https://openlayers.org/en/latest/examples/wmts-ign.html
|
|
9
|
+
var proj=getProjection(tileMatrices[tileMatrixSet].crs);var maxResolution=proj!==null&&proj!==void 0&&proj.getExtent()?getWidth(proj===null||proj===void 0?void 0:proj.getExtent())/topMatrix.TileWidth:null;var resolutions=tileMatrices[tileMatrixSet].matrix.map(function(entry,index){// 0.00028: assumed pixel width in meters, as per WMTS standard
|
|
10
|
+
return maxResolution?maxResolution/Math.pow(2,index):entry.ScaleDenominator*0.00028});var format=(_MiscUtils$ensureArra=MiscUtils.ensureArray(layer.Format).find(function(fmt){return fmt==="image/png"}))!==null&&_MiscUtils$ensureArra!==void 0?_MiscUtils$ensureArra:MiscUtils.ensureArray(layer.Format)[0];var getTile=MiscUtils.ensureArray(capabilities.OperationsMetadata.GetTile.DCP.HTTP.Get)[0];var getEncoding=MiscUtils.ensureArray(getTile.Constraint).find(function(c){return c.name==="GetEncoding"});var requestEncoding=MiscUtils.ensureArray(getEncoding.AllowedValues.Value)[0];var serviceUrl=null;if(requestEncoding==="KVP"){serviceUrl=getTile.href}else{serviceUrl=layer.ResourceURL.find(function(u){return u.resourceType==="tile"}).template;(layer.Dimension||[]).forEach(function(dim){serviceUrl=serviceUrl.replace("{"+dim.Identifier+"}",dim.Default)})}return{type:"wmts",url:serviceUrl,capabilitiesUrl:capabilitiesUrl,title:layer.Title+" - "+tileMatrixSet,name:layer.Identifier,tileMatrixPrefix:tileMatrixPrefix,tileMatrixSet:tileMatrixSet,originX:origin[0],originY:origin[1],projection:tileMatrices[tileMatrixSet].crs,tileSize:[topMatrix.TileWidth,topMatrix.TileHeight],style:style,bbox:{crs:"EPSG:4326",bounds:layer.WGS84BoundingBox},format:format,requestEncoding:requestEncoding,resolutions:resolutions,"abstract":layer.Abstract,attribution:{Title:((_capabilities$Service4=capabilities.ServiceProvider)===null||_capabilities$Service4===void 0?void 0:_capabilities$Service4.ProviderName)||((_capabilities$Service5=capabilities.ServiceIdentification)===null||_capabilities$Service5===void 0?void 0:_capabilities$Service5.Title)||"",OnlineResource:((_capabilities$Service6=capabilities.ServiceProvider)===null||_capabilities$Service6===void 0?void 0:_capabilities$Service6.ProviderSite)||""}}}).filter(Boolean);return layerLinks},getWMSLayers:function getWMSLayers(capabilities,calledServiceUrl){var _capabilities,_capabilities2,_capabilities$WMS_Cap,_this3=this;var asGroup=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;if(!((_capabilities=capabilities)!==null&&_capabilities!==void 0&&_capabilities.WMS_Capabilities)&&!((_capabilities2=capabilities)!==null&&_capabilities2!==void 0&&_capabilities2.WMT_MS_Capabilities)){return[]}capabilities=(_capabilities$WMS_Cap=capabilities.WMS_Capabilities)!==null&&_capabilities$WMS_Cap!==void 0?_capabilities$WMS_Cap:capabilities.WMT_MS_Capabilities;var calledUrlParts=url.parse(calledServiceUrl,true);var extwmsparams={};calledUrlParts.query=Object.keys(calledUrlParts.query).filter(function(key){// Extract extwms params
|
|
11
|
+
if(key.toUpperCase().startsWith("EXTWMS.")){extwmsparams[key.substring(7)]=calledUrlParts.query[key];return false}// Filter service and request from calledServiceUrl, but keep other parameters (i.e. MAP)
|
|
12
|
+
return!["service","request"].includes(key.toLowerCase())}).reduce(function(res,key){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,calledUrlParts.query[key]))},{});delete calledUrlParts.search;var topLayer=capabilities.Capability.Layer;var getMapUrl=this.mergeCalledServiceUrlQuery(ServiceLayerUtils.getDCPTypes(capabilities.Capability.Request.GetMap.DCPType).HTTP.Get.OnlineResource.href,calledUrlParts);var featureInfoUrl=getMapUrl;try{featureInfoUrl=this.mergeCalledServiceUrlQuery(ServiceLayerUtils.getDCPTypes(capabilities.Capability.Request.GetFeatureInfo.DCPType).HTTP.Get.OnlineResource.href,calledUrlParts)}catch(e){// pass
|
|
13
|
+
}var mapFormats=null;try{mapFormats=MiscUtils.ensureArray(capabilities.Capability.Request.GetMap.Format)}catch(e){mapFormats=["image/png"]}var infoFormats=null;try{infoFormats=MiscUtils.ensureArray(capabilities.Capability.Request.GetFeatureInfo.Format)}catch(e){infoFormats=["text/plain"]}var externalLayerFeatureInfoFormats=ConfigUtils.getConfigProp("externalLayerFeatureInfoFormats")||{};for(var _i=0,_Object$keys=Object.keys(externalLayerFeatureInfoFormats);_i<_Object$keys.length;_i++){var entry=_Object$keys[_i];if(featureInfoUrl.toLowerCase().includes(entry.toLowerCase())){infoFormats=[externalLayerFeatureInfoFormats[entry]];break}}var version=capabilities.version;var supportedCrs=MiscUtils.ensureArray(topLayer.crs);var topLayerExtent=null;if(topLayer.EX_GeographicBoundingBox){topLayerExtent={crs:"EPSG:4326",bounds:[parseFloat(topLayer.EX_GeographicBoundingBox.westBoundLongitude),parseFloat(topLayer.EX_GeographicBoundingBox.southBoundLatitude),parseFloat(topLayer.EX_GeographicBoundingBox.eastBoundLongitude),parseFloat(topLayer.EX_GeographicBoundingBox.northBoundLatitude)]}}if(!topLayer.Layer||asGroup){return[this.getWMSLayerParams(topLayer,supportedCrs,calledUrlParts,version,getMapUrl,featureInfoUrl,mapFormats,infoFormats,extwmsparams,topLayerExtent)].filter(function(entry){return entry})}else{var entries=MiscUtils.ensureArray(topLayer.Layer).map(function(layer){return _this3.getWMSLayerParams(layer,supportedCrs,calledUrlParts,version,getMapUrl,featureInfoUrl,mapFormats,infoFormats,extwmsparams,topLayerExtent)}).filter(function(entry){return entry});return entries.sort(function(a,b){return strcmp(a.title,b.title)})}},getWMSLayerParams:function getWMSLayerParams(layer,parentCrs,calledUrlParts,version,getMapUrl,featureInfoUrl,mapFormats,infoFormats,extwmsparams,topLayerExtent){var _this4=this,_Object$keys$,_layer$Attribution,_layer$Attribution2,_layer$opacity;var groupbbox=arguments.length>10&&arguments[10]!==undefined?arguments[10]:null;var supportedCrs=MiscUtils.ensureArray(layer.CRS);if(isEmpty(supportedCrs)){supportedCrs=_toConsumableArray(parentCrs||[])}else{supportedCrs=[].concat(_toConsumableArray(parentCrs||[]),_toConsumableArray(supportedCrs))}var sublayers=[];var sublayerbounds={};if(!isEmpty(layer.Layer)){sublayers=MiscUtils.ensureArray(layer.Layer).map(function(sublayer){return _this4.getWMSLayerParams(sublayer,supportedCrs,calledUrlParts,version,getMapUrl,featureInfoUrl,mapFormats,infoFormats,extwmsparams,topLayerExtent,sublayerbounds)}).filter(function(entry){return entry})}var bbox=null;if(isEmpty(layer.BoundingBox)){if(!isEmpty(sublayerbounds)){bbox=sublayerbounds}else if(topLayerExtent){bbox=topLayerExtent}}else{var _boundingBox$CRS;var boundingBox=MiscUtils.ensureArray(layer.BoundingBox)[0];bbox={crs:(_boundingBox$CRS=boundingBox.CRS)!==null&&_boundingBox$CRS!==void 0?_boundingBox$CRS:boundingBox.SRS,bounds:[boundingBox.minx,boundingBox.miny,boundingBox.maxx,boundingBox.maxy].map(Number)}}if(groupbbox!==null){if(isEmpty(groupbbox)){Object.assign(groupbbox,bbox)}else if(bbox&&bbox.crs===groupbbox.crs){groupbbox.bounds[0]=Math.min(bbox.bounds[0],groupbbox.bounds[0]);groupbbox.bounds[1]=Math.min(bbox.bounds[1],groupbbox.bounds[1]);groupbbox.bounds[2]=Math.max(bbox.bounds[2],groupbbox.bounds[2]);groupbbox.bounds[3]=Math.max(bbox.bounds[3],groupbbox.bounds[3])}}var legendUrl=getMapUrl;try{legendUrl=this.mergeCalledServiceUrlQuery(MiscUtils.ensureArray(MiscUtils.ensureArray(layer.Style)[0].LegendURL)[0].OnlineResource.href,calledUrlParts)}catch(e){/* pass */}var styles=MiscUtils.ensureArray(layer.Style).reduce(function(res,entry){return _objectSpread(_objectSpread({},res),{},_defineProperty({},String(entry.Name),entry.Title))},{});var style=styles["default"]?"default":(_Object$keys$=Object.keys(styles)[0])!==null&&_Object$keys$!==void 0?_Object$keys$:"";var attribution={Title:(_layer$Attribution=layer.Attribution)===null||_layer$Attribution===void 0?void 0:_layer$Attribution.Title,OnlineResource:(_layer$Attribution2=layer.Attribution)===null||_layer$Attribution2===void 0||(_layer$Attribution2=_layer$Attribution2.OnlineResource)===null||_layer$Attribution2===void 0?void 0:_layer$Attribution2.href};return{type:"wms",name:String(layer.Name),title:layer.Title,"abstract":layer.Abstract,attribution:attribution,url:getMapUrl,featureInfoUrl:featureInfoUrl,legendUrl:legendUrl,version:version,infoFormats:infoFormats,mapFormats:mapFormats,queryable:layer.queryable===1,sublayers:isEmpty(sublayers)?null:sublayers,expanded:false,bbox:bbox,visibility:layer.visibilityChecked!==0,opacity:((_layer$opacity=layer.opacity)!==null&&_layer$opacity!==void 0?_layer$opacity:1)*255,extwmsparams:extwmsparams,minScale:layer.MinScaleDenominator!==undefined?Number(layer.MinScaleDenominator):undefined,maxScale:layer.MinScaleDenominator!==undefined?Number(layer.MaxScaleDenominator):undefined,styles:styles,style:style}},getWFSLayers:function getWFSLayers(capabilities,calledServiceUrl,mapCrs){var _capabilities$WFS_Cap;var calledUrlParts=url.parse(calledServiceUrl,true);// Filter service and request from calledServiceUrl, but keep other parameters (i.e. MAP)
|
|
14
|
+
calledUrlParts.query=Object.keys(calledUrlParts.query).filter(function(key){return!["service","request"].includes(key.toLowerCase())}).reduce(function(res,key){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,calledUrlParts.query[key]))},{});delete calledUrlParts.search;if(!(capabilities!==null&&capabilities!==void 0&&(_capabilities$WFS_Cap=capabilities.WFS_Capabilities)!==null&&_capabilities$WFS_Cap!==void 0&&_capabilities$WFS_Cap.version)){return[]}else if(capabilities.WFS_Capabilities.version<"1.1.0"){return ServiceLayerUtils.getWFS10Layers(capabilities.WFS_Capabilities,calledUrlParts)}else{return ServiceLayerUtils.getWFS11_20Layers(capabilities.WFS_Capabilities,calledUrlParts,mapCrs)}},getWFS10Layers:function getWFS10Layers(capabilities,calledUrlParts){var serviceUrl=null;var version=capabilities.version;var formats=null;try{serviceUrl=ServiceLayerUtils.getDCPTypes(MiscUtils.ensureArray(capabilities.Capability.Request.GetFeature.DCPType)).HTTP.Get.onlineResource;serviceUrl=this.mergeCalledServiceUrlQuery(serviceUrl,calledUrlParts);formats=Object.keys(capabilities.Capability.Request.GetFeature.ResultFormat);if(typeof formats==="string"){// convert to list if single entry
|
|
15
|
+
formats=[formats]}}catch(e){return[]}var layers=[];var _iterator=_createForOfIteratorHelper(MiscUtils.ensureArray(capabilities.FeatureTypeList.FeatureType)),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var featureType=_step.value;var name=void 0;var bbox=void 0;try{name=featureType.Name;var llbbox=featureType.LatLongBoundingBox;bbox={crs:featureType.SRS,bounds:[llbbox.minx,llbbox.miny,llbbox.maxx,llbbox.maxy]}}catch(e){continue;// Name and bbox are required
|
|
16
|
+
}var title=featureType.Title||name;var _abstract=featureType.Abstract||"";layers.push({type:"wfs",name:name,title:title,"abstract":_abstract,bbox:bbox,projection:featureType.SRS,url:serviceUrl,version:version,formats:formats,color:randomColor(),visibility:true})}}catch(err){_iterator.e(err)}finally{_iterator.f()}return layers},getWFS11_20Layers:function getWFS11_20Layers(capabilities,calledUrlParts,mapCrs){var serviceUrl=null;var version=capabilities.version;var formats=null;try{var getFeatureOp=MiscUtils.ensureArray(capabilities.OperationsMetadata.Operation).find(function(el){return el.name==="GetFeature"});serviceUrl=ServiceLayerUtils.getDCPTypes(MiscUtils.ensureArray(getFeatureOp.DCP)).HTTP.Get.href;serviceUrl=this.mergeCalledServiceUrlQuery(serviceUrl,calledUrlParts);var outputFormat=MiscUtils.ensureArray(getFeatureOp.Parameter).find(function(el){return el.name==="outputFormat"});formats=MiscUtils.ensureArray(outputFormat.AllowedValues?outputFormat.AllowedValues.Value:outputFormat.Value)}catch(e){return[]}var layers=[];var _iterator2=_createForOfIteratorHelper(MiscUtils.ensureArray(capabilities.FeatureTypeList.FeatureType)),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var featureType=_step2.value;var name=void 0;var bbox=void 0;try{name=featureType.Name;var lc=featureType.WGS84BoundingBox.LowerCorner.split(/\s+/);var uc=featureType.WGS84BoundingBox.UpperCorner.split(/\s+/);bbox={crs:"EPSG:4326",bounds:[lc[0],lc[1],uc[0],uc[1]]}}catch(e){continue;// Name and bbox are required
|
|
17
|
+
}var title=featureType.Title||name;var _abstract2=featureType.Abstract||"";var projections=[CoordinatesUtils.fromOgcUrnCrs(featureType.DefaultCRS||featureType.DefaultSRS)].concat(_toConsumableArray(MiscUtils.ensureArray(featureType.OtherCRS||featureType.OtherSRS||[]).map(function(crs){return CoordinatesUtils.fromOgcUrnCrs(crs)})));var projection=projections.includes(mapCrs)?mapCrs:projections[0];layers.push({type:"wfs",name:name,title:title,"abstract":_abstract2,bbox:bbox,projection:projection,url:serviceUrl,version:version,formats:formats,color:randomColor(),visibility:true})}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return layers},getCapabilities:function getCapabilities(baseUrl,params){var urlParts=url.parse(baseUrl,true);if(params){urlParts.query=_objectSpread(_objectSpread({},Object.entries(urlParts.query).reduce(function(res,_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],val=_ref2[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},key.toUpperCase(),val))},{})),params);delete urlParts.search}if(urlParts.protocol==="http"&&location.protocol==="https"){urlParts.protocol="https"}var requestUrl=url.format(urlParts);return new Promise(function(resolve,reject){axios.get(requestUrl).then(function(response){var options={attributeNamePrefix:"",ignoreAttributes:false,parseTagValue:true,parseAttributeValue:true,removeNSPrefix:true};resolve({capabilities:new XMLParser(options).parse(response.data),requestUrl:requestUrl})})["catch"](function(e){reject(e)})})},getWMTSCapabilities:function getWMTSCapabilities(serviceUrl){return new Promise(function(resolve,reject){var requestUrl=MiscUtils.adjustProtocol(serviceUrl);axios.get(requestUrl).then(function(response){var wmtsFormat=new ol.format.WMTSCapabilities;resolve({capabilities:wmtsFormat.read(response.data),requestUrl:requestUrl})})["catch"](reject)})},getWMSCapabilities:function getWMSCapabilities(serviceUrl){return new Promise(function(resolve,reject){ServiceLayerUtils.getCapabilities(serviceUrl,{SERVICE:"WMS",REQUEST:"GetProjectSettings"}).then(function(result){var _result$capabilities;if((_result$capabilities=result.capabilities)!==null&&_result$capabilities!==void 0&&_result$capabilities.WMS_Capabilities){resolve(result)}else{ServiceLayerUtils.getCapabilities(serviceUrl,{SERVICE:"WMS",REQUEST:"GetCapabilities"}).then(resolve)}})["catch"](function(){ServiceLayerUtils.getCapabilities(serviceUrl,{SERVICE:"WMS",REQUEST:"GetCapabilities"}).then(resolve)["catch"](reject)})})},getWFSCapabilities:function getWFSCapabilities(serviceUrl){return new Promise(function(resolve,reject){ServiceLayerUtils.getCapabilities(serviceUrl,{SERVICE:"WFS",REQUEST:"GetCapabilities"}).then(resolve)["catch"](reject)})},findLayers:function findLayers(type,serviceUrl,layerConfigs,mapCrs,callback){var getCapabilities=null;var getLayers=null;if(type==="wmts"){getCapabilities=ServiceLayerUtils.getWMTSCapabilities;getLayers=function getLayers(capabilites,requestUrl){return ServiceLayerUtils.getWMTSLayers(capabilites,requestUrl,mapCrs)}}else if(type==="wms"){getCapabilities=ServiceLayerUtils.getWMSCapabilities;getLayers=function getLayers(capabilites,requestUrl){return ServiceLayerUtils.getWMSLayers(capabilites,requestUrl,true)}}else if(type==="wfs"){getCapabilities=ServiceLayerUtils.getWFSCapabilities;getLayers=function getLayers(capabilites,requestUrl){return ServiceLayerUtils.getWFSLayers(capabilites,requestUrl,mapCrs)}}getCapabilities(serviceUrl).then(function(_ref3){var capabilities=_ref3.capabilities,requestUrl=_ref3.requestUrl;var layers=getLayers(capabilities,requestUrl);var _iterator3=_createForOfIteratorHelper(layerConfigs),_step3;try{var _loop=function _loop(){var _LayerUtils$searchSub;var layerConfig=_step3.value;var layer=LayerUtils.matchSubLayer({sublayers:layers},function(l){return l.name===layerConfig.name&&(!layerConfig.style||l.style===layerConfig.style)});// Some services (i.e. wms.geo.admin.ch) have same-named sublayers
|
|
18
|
+
layer=(_LayerUtils$searchSub=LayerUtils.searchSubLayer(layer,"name",layerConfig.name))!==null&&_LayerUtils$searchSub!==void 0?_LayerUtils$searchSub:layer;if(layer){layer=_objectSpread(_objectSpread({},layer),{},{id:layerConfig.id,opacity:layerConfig.opacity,visibility:layerConfig.visibility,style:layerConfig.style||layer.style,role:LayerRole.USERLAYER});callback(layerConfig.id,layer)}else{// eslint-disable-next-line
|
|
19
|
+
console.warn("Could not find layer "+layerConfig.name);callback(layerConfig.id,null)}};for(_iterator3.s();!(_step3=_iterator3.n()).done;){_loop()}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}})["catch"](function(){// eslint-disable-next-line
|
|
20
|
+
console.warn("Failed to read "+serviceUrl);var _iterator4=_createForOfIteratorHelper(layerConfigs),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var layerConfig=_step4.value;callback(layerConfig.id,null)}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}})},getDCPTypes:function getDCPTypes(dcpTypes){var result={};var _iterator5=_createForOfIteratorHelper(MiscUtils.ensureArray(dcpTypes)),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var dcpType=_step5.value;result=deepmerge(result,dcpType)}}catch(err){_iterator5.e(err)}finally{_iterator5.f()}return result},mergeCalledServiceUrlQuery:function mergeCalledServiceUrlQuery(capabilityUrl,calledServiceUrlParts){if(ConfigUtils.getConfigProp("trustWmsCapabilityURLs")){return url.format(capabilityUrl)}try{var _calledServiceUrlPart;var urlParts=url.parse(capabilityUrl,true);urlParts.host=calledServiceUrlParts.host;urlParts.protocol=(_calledServiceUrlPart=calledServiceUrlParts.protocol)!==null&&_calledServiceUrlPart!==void 0?_calledServiceUrlPart:location.protocol;urlParts.query=_objectSpread(_objectSpread({},calledServiceUrlParts.query),urlParts.query);delete urlParts.search;return url.format(urlParts)}catch(e){return url.format(capabilityUrl)}}};export default ServiceLayerUtils;
|
package/utils/Signal.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
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 _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 _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}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)}var Signal=/*#__PURE__*/_createClass(function Signal(){var _this=this;_classCallCheck(this,Signal);_defineProperty(this,"connect",function(callback){_this.callbacks.push(callback)});_defineProperty(this,"disconnect",function(callback){_this.callbacks=_this.callbacks.filter(function(cb){return cb!==callback})});_defineProperty(this,"notify",function(data){var newcallbacks=[];_this.callbacks.forEach(function(callback){// If a callback returns true, don't re-execute it
|
|
2
|
+
var result=callback(data);if(!result){newcallbacks.push(callback)}});_this.callbacks=newcallbacks});this.callbacks=[]});export{Signal as default};
|
|
@@ -0,0 +1,12 @@
|
|
|
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 _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 _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 _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 _n2=0,F=function F(){};return{s:F,n:function n(){return _n2>=r.length?{done:!0}:{done:!1,value:r[_n2++]}},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}/**
|
|
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{remove as removeDiacritics}from"diacritics";import isEmpty from"lodash.isempty";import url from"url";import{v4 as uuidv4}from"uuid";import{LayerRole}from"../actions/layers";import{NotificationType,showNotification}from"../actions/windows";import{SearchResultType}from"../utils/SearchProviders";import ConfigUtils from"./ConfigUtils";import LayerUtils from"./LayerUtils";import LocaleUtils from"./LocaleUtils";var ThemeUtils={getThemeById:function getThemeById(themes,id){for(var i=0,n=themes.items.length;i<n;++i){if(themes.items[i].id===id){return themes.items[i]}}for(var _i=0,_n=themes.subdirs.length;_i<_n;++_i){var theme=this.getThemeById(themes.subdirs[_i],id);if(theme){return theme}}return null},createThemeBackgroundLayers:function createThemeBackgroundLayers(theme,themes,visibleLayer,externalLayers,dispatch,initialTheme){var bgLayers=[];var visibleIdx=-1;var defaultVisibleIdx=-1;var _iterator=_createForOfIteratorHelper(theme.backgroundLayers||[]),_step;try{var _loop=function _loop(){var entry=_step.value;if(!entry.name){return 1;// continue
|
|
8
|
+
}var bgLayer=themes.backgroundLayers.find(function(lyr){return lyr.name===entry.name});if(bgLayer){if(entry.visibility===true){defaultVisibleIdx=bgLayers.length}if(bgLayer.name===visibleLayer){visibleIdx=bgLayers.length}bgLayer=_objectSpread(_objectSpread({},bgLayer),{},{role:LayerRole.BACKGROUND,thumbnail:bgLayer.thumbnail||"img/mapthumbs/default.jpg",visibility:false,opacity:bgLayer.opacity!==undefined?bgLayer.opacity:255});if(bgLayer.resource){bgLayer.id=uuidv4();bgLayer.type="placeholder";var params=LayerUtils.splitLayerUrlParam(bgLayer.resource);params.id=bgLayer.id;var key=params.type+":"+params.url;(externalLayers[key]=externalLayers[key]||[]).push(params);delete bgLayer.resource}else if(bgLayer.type==="wms"){bgLayer.version=bgLayer.params.VERSION||bgLayer.version||themes.defaultWMSVersion||"1.3.0"}else if(bgLayer.type==="group"){bgLayer.items=bgLayer.items.map(function(item){if(item.ref){var sublayer=themes.backgroundLayers.find(function(l){return l.name===item.ref});if(sublayer){item=_objectSpread(_objectSpread(_objectSpread({},item),sublayer),LayerUtils.buildWMSLayerParams(sublayer));if(item.type==="wms"){item.version=item.params.VERSION||item.version||themes.defaultWMSVersion||"1.3.0"}delete item.ref}else{item=null}}return item}).filter(function(x){return x})}bgLayers.push(bgLayer)}else{// eslint-disable-next-line
|
|
9
|
+
console.warn("Could not find background layer "+entry.name)}};for(_iterator.s();!(_step=_iterator.n()).done;){if(_loop())continue}}catch(err){_iterator.e(err)}finally{_iterator.f()}if(visibleIdx>=0){bgLayers[visibleIdx].visibility=true}else if(defaultVisibleIdx>=0&&visibleLayer!==""){bgLayers[defaultVisibleIdx].visibility=true}if(initialTheme&&visibleIdx===-1&&visibleLayer){dispatch(showNotification("missingbglayer",LocaleUtils.tr("app.missingbg",visibleLayer),NotificationType.WARN,true))}return bgLayers},createThemeLayer:function createThemeLayer(theme,themes){var role=arguments.length>2&&arguments[2]!==undefined?arguments[2]:LayerRole.THEME;var subLayers=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var urlParts=url.parse(theme.url,true);// Resolve relative urls
|
|
10
|
+
if(!urlParts.host){var locationParts=url.parse(window.location.href);urlParts.protocol=locationParts.protocol;urlParts.host=locationParts.host}var sublayerNames=LayerUtils.getSublayerNames({sublayers:subLayers!==null&&subLayers!==void 0?subLayers:theme.sublayers});var baseParams=urlParts.query;var layer={type:"wms",id:theme.id,url:url.format(urlParts),version:theme.version||themes.defaultWMSVersion||"1.3.0",visibility:true,expanded:theme.expanded,name:theme.name,title:theme.title,bbox:theme.bbox,sublayers:subLayers!==null&&subLayers!==void 0?subLayers:theme.sublayers,tiled:theme.tiled,tileSize:theme.tileSize,ratio:!theme.tiled?1:undefined,serverType:"qgis",format:theme.format,rev:+new Date,role:role,attribution:theme.attribution,legendUrl:ThemeUtils.inheritBaseUrlParams(theme.legendUrl,theme.url,baseParams),printUrl:ThemeUtils.inheritBaseUrlParams(theme.printUrl,theme.url,baseParams),featureInfoUrl:ThemeUtils.inheritBaseUrlParams(theme.featureInfoUrl,theme.url,baseParams),infoFormats:theme.infoFormats,mapFormats:theme.availableFormats,layerTreeHiddenSublayers:theme.layerTreeHiddenSublayers,predefinedFilters:(theme.predefinedFilters||[]).filter(function(entry){return Object.keys(entry.filter).find(function(name){return sublayerNames.includes(name)})}),externalLayerMap:_objectSpread(_objectSpread({},theme.externalLayerMap),(theme.externalLayers||[]).reduce(function(res,cur){res[cur.internalLayer]=_objectSpread({},themes.externalLayers.find(function(entry){return entry.name===cur.name}));LayerUtils.completeExternalLayer(res[cur.internalLayer],LayerUtils.searchSubLayer(theme,"name",cur.internalLayer));return res},{}))};layer=LayerUtils.recomputeLayerBBox(layer);// Drawing order only makes sense if layer reordering is disabled
|
|
11
|
+
if(ConfigUtils.getConfigProp("allowReorderingLayers",theme)!==true){layer.drawingOrder=theme.drawingOrder}return layer},inheritBaseUrlParams:function inheritBaseUrlParams(capabilityUrl,baseUrl,baseParams){if(!capabilityUrl){return baseUrl}if(capabilityUrl.split("?")[0]===baseUrl.split("?")[0]){var parts=url.parse(capabilityUrl,true);parts.query=_objectSpread(_objectSpread({},baseParams),parts.query);return url.format(parts)}return capabilityUrl},searchThemes:function searchThemes(themes,searchtext){var filter=new RegExp(removeDiacritics(searchtext).replace(/[-[\]/{}()*+?.\\^$|]/g,"\\$&"),"i");var matches=[];var _searchThemeGroup=function searchThemeGroup(themeGroup){(themeGroup.subdirs||[]).forEach(function(subdir){return _searchThemeGroup(subdir,filter)});matches.push.apply(matches,_toConsumableArray((themeGroup.items||[]).filter(function(item){return removeDiacritics(item.title).match(filter)||removeDiacritics(item.keywords||"").match(filter)||removeDiacritics(item["abstract"]||"").match(filter)})))};_searchThemeGroup(themes,filter);return isEmpty(matches)?[]:[{id:"themes",titlemsgid:"search.themes",type:SearchResultType.THEME,items:matches.map(function(theme){return{id:theme.id,text:theme.title,theme:theme,layer:ThemeUtils.createThemeLayer(theme,themes),thumbnail:ConfigUtils.getAssetsPath()+"/"+theme.thumbnail}})}]},searchThemeLayers:function searchThemeLayers(themes,searchtext){var filter=new RegExp(removeDiacritics(searchtext).replace(/[-[\]/{}()*+?.\\^$|]/g,"\\$&"),"i");var matches=[];var _searchLayer=function searchLayer(theme,layer){var path=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];(layer.sublayers||[]).forEach(function(sublayer,idx){var subpath=[].concat(_toConsumableArray(path),[idx]);if(removeDiacritics(sublayer.name).match(filter)||removeDiacritics(sublayer.title).match(filter)){// Clone theme, ensuring path to layer is visible
|
|
12
|
+
var newtheme=_objectSpread({},theme);var cur=newtheme;var _loop2=function _loop2(i){var isMutuallyExclusive=cur.mutuallyExclusive;cur.sublayers=cur.sublayers.map(function(entry,j){return _objectSpread(_objectSpread({},entry),{},{visibility:j===subpath[i]||entry.visibility&&!isMutuallyExclusive})});cur=cur.sublayers[subpath[i]]};for(var i=0;i<subpath.length;++i){_loop2(i)}matches.push({theme:newtheme,layer:ThemeUtils.createThemeLayer(newtheme,themes,LayerRole.USERLAYER,[cur])})}_searchLayer(theme,sublayer,subpath)})};var _searchThemeGroup2=function searchThemeGroup(themeGroup){(themeGroup.subdirs||[]).forEach(function(subdir){return _searchThemeGroup2(subdir,filter)});(themeGroup.items||[]).forEach(function(item){return _searchLayer(item,item)})};_searchThemeGroup2(themes,filter);return isEmpty(matches)?[]:[{id:"themelayers",titlemsgid:"search.themelayers",type:SearchResultType.THEMELAYER,items:matches.map(function(result){return{id:result.layer.id+":"+result.layer.sublayers[0].name,text:result.layer.title+": "+result.layer.sublayers[0].title,layer:result.layer,theme:result.theme}})}]},getThemeNames:function getThemeNames(themes){var names=(themes.items||[]).reduce(function(res,theme){return _objectSpread(_objectSpread({},res),{},_defineProperty({},theme.id,theme.title))},{});(themes.subdirs||[]).forEach(function(group){Object.assign(names,ThemeUtils.getThemeNames(group))});return names},themeFlagsAllowed:function themeFlagsAllowed(theme,flagWhitelist,flagBlacklist){var themeFlags=(theme===null||theme===void 0?void 0:theme.flags)||[];if(flagBlacklist&&flagBlacklist.find(function(flag){return themeFlags.includes(flag)})!==undefined){return false}if(flagWhitelist&&flagWhitelist.find(function(flag){return themeFlags.includes(flag)})===undefined){return false}return true}};export default ThemeUtils;
|
|
@@ -0,0 +1,20 @@
|
|
|
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 _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 _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 _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}/**
|
|
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 geojsonBbox from"geojson-bounding-box";import isEmpty from"lodash.isempty";import{getDefaultImageStyle}from"ol/format/KML";import ol from"openlayers";import simplepolygon from"simplepolygon";import svgpath from"svgpath";import{v1 as uuidv1}from"uuid";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import{END_MARKERS,computeFeatureStyle}from"../utils/FeatureStyles";var VectorLayerUtils={createPrintHighlighParams:function createPrintHighlighParams(layers,printCrs,printScale){var dpi=arguments.length>3&&arguments[3]!==undefined?arguments[3]:96;var scaleFactor=arguments.length>4&&arguments[4]!==undefined?arguments[4]:1;var qgisServerVersion=ConfigUtils.getConfigProp("qgisServerVersion",null,3);var params={geoms:[],styles:[],labels:[],labelFillColors:[],labelOutlineColors:[],labelOutlineSizes:[],labelRotations:[],labelSizes:[],labelDist:[]};var ensureHex=null;if(qgisServerVersion>=3){ensureHex=function ensureHex(rgb){return!Array.isArray(rgb)?rgb:"#"+[255-(rgb.length>3?rgb[3]:1)*255].concat(_toConsumableArray(rgb.slice(0,3))).map(function(v){return Math.round(v).toString(16).padStart(2,"0")}).join("")}}else{ensureHex=function ensureHex(rgb){return!Array.isArray(rgb)?rgb:"#"+(16777216+(rgb[2]|rgb[1]<<8|rgb[0]<<16)).toString(16).slice(1)}}var _iterator=_createForOfIteratorHelper(layers.slice(0).reverse()),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var layer=_step.value;if(layer.type!=="vector"||(layer.features||[]).length===0||layer.visibility===false||layer.skipPrint===true){continue}var features=layer.features.map(function(feature){var _feature$geometry;if((_feature$geometry=feature.geometry)!==null&&_feature$geometry!==void 0&&_feature$geometry.coordinates){feature=_objectSpread(_objectSpread({},feature),{},{geometry:_objectSpread(_objectSpread({},feature.geometry),{},{coordinates:VectorLayerUtils.removeDuplicateNodes(feature.geometry.coordinates)})})}return VectorLayerUtils.simplifyFeature(feature)}).flat();var _iterator2=_createForOfIteratorHelper(features),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var feature=_step2.value;if(!VectorLayerUtils.validateGeometry(feature.geometry)){continue}var styleOptions=computeFeatureStyle(layer,feature);var properties=feature.properties||{};var geometry=VectorLayerUtils.reprojectGeometry(feature.geometry,feature.crs||printCrs,printCrs);if(feature.geometry.type==="LineString"){// Generate arrow heads
|
|
8
|
+
if(styleOptions.headmarker){VectorLayerUtils.generateMarkerGeometry(params,styleOptions.headmarker,false,feature,layer,dpi,printScale,printCrs,scaleFactor)}if(styleOptions.tailmarker){VectorLayerUtils.generateMarkerGeometry(params,styleOptions.tailmarker,true,feature,layer,dpi,printScale,printCrs,scaleFactor)}}if(feature.geometry.type==="LineString"&&!isEmpty(properties.segment_labels)){// Split line into single segments and label them individually
|
|
9
|
+
var coords=geometry.coordinates;for(var i=0;i<coords.length-1;++i){var segment={type:"LineString",coordinates:[coords[i],coords[i+1]]};params.styles.push(VectorLayerUtils.createSld(segment.type,feature.styleName,styleOptions,layer.opacity,dpi,scaleFactor));params.labels.push(properties.segment_labels[i]||" ");params.geoms.push(VectorLayerUtils.geoJSONGeomToWkt(segment));params.labelFillColors.push(ensureHex(styleOptions.textFill));params.labelOutlineColors.push(ensureHex(styleOptions.textStroke));params.labelOutlineSizes.push(scaleFactor);params.labelSizes.push(Math.round(10*scaleFactor));params.labelDist.push("-5");params.labelRotations.push("0")}}else{params.styles.push(VectorLayerUtils.createSld(geometry.type,feature.styleName,styleOptions,layer.opacity,dpi,scaleFactor));params.labels.push(properties.label||" ");if(feature.styleName==="text"){// Make point a tiny square, so that QGIS server centers the text inside the polygon when labelling
|
|
10
|
+
var x=geometry.coordinates[0];var y=geometry.coordinates[1];geometry={type:"Polygon",coordinates:[[[x-0.01,y-0.01],[x+0.01,y-0.01],[x+0.01,y+0.01],[x-0.01,y+0.01],[x-0.01,y-0.01]]]};params.geoms.push(VectorLayerUtils.geoJSONGeomToWkt(geometry));params.labelFillColors.push(ensureHex(styleOptions.fillColor));params.labelOutlineColors.push(ensureHex(styleOptions.strokeColor));params.labelOutlineSizes.push(scaleFactor*styleOptions.strokeWidth*0.5);params.labelSizes.push(Math.round(10*styleOptions.strokeWidth*scaleFactor));params.labelDist.push("5");params.labelRotations.push(((properties.rotation||0)/Math.PI*180).toFixed(0))}else{params.geoms.push(VectorLayerUtils.geoJSONGeomToWkt(geometry));params.labelFillColors.push(ensureHex(styleOptions.textFill));params.labelOutlineColors.push(ensureHex(styleOptions.textStroke));params.labelOutlineSizes.push(scaleFactor);params.labelSizes.push(Math.round(10*scaleFactor));params.labelDist.push("-5");params.labelRotations.push("0")}}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}}catch(err){_iterator.e(err)}finally{_iterator.f()}return params},removeDuplicateNodes:function removeDuplicateNodes(coordinates){if(Array.isArray(coordinates[0][0])){return coordinates.map(VectorLayerUtils.removeDuplicateNodes)}else if(Array.isArray(coordinates[0])){return coordinates.filter(function(item,pos,arr){return pos===0||item[0]!==arr[pos-1][0]||item[1]!==arr[pos-1][1]})}else{return coordinates}},simplifyFeature:function simplifyFeature(feature){if(!feature.geometry){return feature}else if(feature.geometry.type==="MultiPolygon"){return feature.geometry.coordinates.map(function(part){return VectorLayerUtils.simplifyFeature(_objectSpread(_objectSpread({},feature),{},{geometry:{type:"Polygon",coordinates:part}}))}).flat()}else if(feature.geometry.type==="Polygon"){return simplepolygon(feature).features.map(function(feat,idx,features){if(feat.properties.parent>=0){features[feat.properties.parent].geometry.coordinates.push(feat.geometry.coordinates[0]);return null}return feat}).filter(function(x){return x}).map(function(feat){return _objectSpread(_objectSpread({},feature),{},{geometry:feat.geometry})})}else{return feature}},validateGeometry:function validateGeometry(geometry){if(!geometry){return false}if(geometry.type==="GeometryCollection"){return geometry.geometries.every(VectorLayerUtils.validateGeometry)}if(geometry.type==="Point"){return!isEmpty(geometry.coordinates)}var minLength=geometry.type.endsWith("LineString")?2:3;var _isDegenerate=function isDegenerate(coordinates){if(Array.isArray(coordinates[0][0])){return coordinates.map(_isDegenerate).find(function(entry){return entry===false})}else{return coordinates.length<minLength}};return!_isDegenerate(geometry.coordinates)},createSld:function createSld(geometrytype,styleName,styleOptions,layerOpacity){var dpi=arguments.length>4&&arguments[4]!==undefined?arguments[4]:96;var scaleFactor=arguments.length>5&&arguments[5]!==undefined?arguments[5]:1;var opts={};var dpiScale=dpi/96*scaleFactor;// Special cases
|
|
11
|
+
if(styleName==="text"){// Make geometry transparent
|
|
12
|
+
opts={strokeColor:[0,0,0,0],fillColor:[0,0,0,0]}}else if(styleName==="marker"){opts={strokeColor:[0,0,255,1],strokeWidth:1*dpiScale,fillColor:[255,255,255,1],circleRadius:2*dpiScale}}else{// Default style
|
|
13
|
+
opts=styleOptions}var ensureHex=function ensureHex(rgb){return!Array.isArray(rgb)?rgb:"#"+(16777216+(rgb[2]|rgb[1]<<8|rgb[0]<<16)).toString(16).slice(1)};var opacity=function opacity(rgb){if(Array.isArray(rgb)&&rgb.length>3){return rgb[3]*layerOpacity/255}return 1*layerOpacity/255};var stroke="<se:Stroke>"+"<se:SvgParameter name=\"stroke\">"+ensureHex(opts.strokeColor)+"</se:SvgParameter>"+"<se:SvgParameter name=\"stroke-opacity\">"+opacity(opts.strokeColor)+"</se:SvgParameter>"+"<se:SvgParameter name=\"stroke-width\">"+opts.strokeWidth*dpiScale+"</se:SvgParameter>"+"<se:SvgParameter name=\"stroke-linejoin\">round</se:SvgParameter>"+(!isEmpty(opts.strokeDash)?"<CssParameter name=\"stroke-dasharray\">"+opts.strokeDash.join(" ")+"</CssParameter>":"")+"</se:Stroke>";var fill="<se:Fill>"+"<se:SvgParameter name=\"fill\">"+ensureHex(opts.fillColor)+"</se:SvgParameter>"+"<se:SvgParameter name=\"fill-opacity\">"+opacity(opts.fillColor)+"</se:SvgParameter>"+"</se:Fill>";var rule=null;if(geometrytype.endsWith("Point")){rule="<se:PointSymbolizer>"+"<se:Graphic>"+"<se:Mark>"+"<se:WellKnownName>circle</se:WellKnownName>"+"<se:Stroke>"+"<se:SvgParameter name=\"stroke\">"+ensureHex(opts.strokeColor)+"</se:SvgParameter>"+"<se:SvgParameter name=\"stroke-opacity\">"+opacity(opts.strokeColor)+"</se:SvgParameter>"+"<se:SvgParameter name=\"stroke-width\">"+opts.strokeWidth*dpiScale+"</se:SvgParameter>"+"</se:Stroke>"+fill+"</se:Mark>"+"<se:Size>"+2*opts.circleRadius*dpiScale+"</se:Size>"+"</se:Graphic>"+"</se:PointSymbolizer>"}else if(geometrytype.endsWith("LineString")){rule="<se:LineSymbolizer>"+stroke+"</se:LineSymbolizer>"}else if(geometrytype.endsWith("Polygon")){rule="<se:PolygonSymbolizer>"+stroke+fill+"</se:PolygonSymbolizer>"}if(rule){return"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+"<StyledLayerDescriptor xmlns=\"http://www.opengis.net/sld\" xmlns:ogc=\"http://www.opengis.net/ogc\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" version=\"1.1.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xsi:schemaLocation=\"http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd\" xmlns:se=\"http://www.opengis.net/se\">"+"<UserStyle>"+"<se:FeatureTypeStyle>"+"<se:Rule>"+rule+"</se:Rule>"+"</se:FeatureTypeStyle>"+"</UserStyle>"+"</StyledLayerDescriptor>"}return null},generateMarkerGeometry:function generateMarkerGeometry(params,markername,tail,feature,layer,dpi,mapScale,printCrs,scaleFactor){if(!END_MARKERS[markername]){return}var marker=END_MARKERS[markername];// Read the SVG and generate a matching WKT geometry for the marker
|
|
14
|
+
var path="";var width=0;var height=0;try{var parser=new DOMParser;var svgSrc=atob(marker.src.slice(26));var svgDoc=parser.parseFromString(svgSrc,"text/xml");width=parseInt(svgDoc.getElementsByTagName("svg")[0].getAttribute("width"),10);height=parseInt(svgDoc.getElementsByTagName("svg")[0].getAttribute("height"),10);path=svgDoc.getElementsByTagName("path")[0].getAttribute("d")}catch(e){/* eslint-disable-next-line */console.warn("Could not parse path for marker "+markername);return}// [ Same as in FeatureStyles.js ] [ pixel to map units ]
|
|
15
|
+
var markerScaleFactor=0.125*(1+feature.styleOptions.strokeWidth)/dpi*0.0254*mapScale*scaleFactor;var origin=feature.geometry.coordinates[tail?feature.geometry.coordinates.length-1:0];var p2=feature.geometry.coordinates[tail?feature.geometry.coordinates.length-2:1];var coordinates=[];var angle=0.5*Math.PI+Math.atan2(origin[0]-p2[0],origin[1]-p2[1]);var alpha=marker.baserotation/180*Math.PI+angle;var cosa=Math.cos(alpha);var sina=Math.sin(alpha);svgpath(path).iterate(function(segment,index,x,y){// Skip move instructions
|
|
16
|
+
if(["m","M"].includes(segment[0])){return}var dx=(x-marker.anchor[0]*width)*markerScaleFactor;var dy=(y-marker.anchor[1]*height)*markerScaleFactor;var rx=cosa*dx+sina*dy;var ry=-sina*dx+cosa*dy;coordinates.push([origin[0]+rx,origin[1]+ry])});// Closing coordinate
|
|
17
|
+
coordinates.push(coordinates[0]);var geometry={type:"Polygon",coordinates:[coordinates]};var styleOptions={strokeWidth:1,strokeDash:[],strokeColor:feature.styleOptions.strokeColor,fillColor:feature.styleOptions.strokeColor};params.styles.push(VectorLayerUtils.createSld(geometry.type,"default",styleOptions,layer.opacity,dpi,scaleFactor));params.geoms.push(VectorLayerUtils.geoJSONGeomToWkt(geometry));params.labels.push(" ");params.labelFillColors.push("#FFF");params.labelOutlineColors.push("#FFF");params.labelOutlineSizes.push(scaleFactor);params.labelSizes.push(Math.round(10*scaleFactor));params.labelDist.push("0")},reprojectGeometry:function reprojectGeometry(geometry,srccrs,dstcrs){if(srccrs===dstcrs||!srccrs||!dstcrs){return geometry}if(geometry.type==="Point"){var wgscoo=CoordinatesUtils.reproject(geometry.coordinates,srccrs,dstcrs);return{type:geometry.type,coordinates:wgscoo}}else if(geometry.type==="LineString"||geometry.type==="MultiPoint"){return{type:geometry.type,coordinates:geometry.coordinates.map(function(tuple){return CoordinatesUtils.reproject(tuple,srccrs,dstcrs)})}}else if(geometry.type==="Polygon"||geometry.type==="MultiLineString"){return{type:geometry.type,coordinates:geometry.coordinates.map(function(ring){return ring.map(function(tuple){return CoordinatesUtils.reproject(tuple,srccrs,dstcrs)})})}}else if(geometry.type==="MultiPolygon"){return{type:geometry.type,coordinates:geometry.coordinates.map(function(part){return part.map(function(ring){return ring.map(function(tuple){return CoordinatesUtils.reproject(tuple,srccrs,dstcrs)})})})}}else{return geometry}},reprojectFeature:function reprojectFeature(feature,srccrs,dstcrs){if(srccrs===dstcrs||!srccrs||!dstcrs){return feature}if(feature.features){return _objectSpread(_objectSpread({},feature),{},{features:feature.features.map(function(f){return VectorLayerUtils.reprojectFeature(srccrs,dstcrs)})})}else{return _objectSpread(_objectSpread({},feature),{},{geometry:VectorLayerUtils.reprojectGeometry(feature.geometry,srccrs,dstcrs)})}},wktToGeoJSON:function wktToGeoJSON(wkt,srccrs,dstcrs){var id=arguments.length>3&&arguments[3]!==undefined?arguments[3]:uuidv1();wkt=wkt.replace(/Point(\w+)/i,"Point $1").replace(/LineString(\w+)/i,"LineString $1").replace(/Polygon(\w+)/i,"Polygon $1").replace(/MultiSurface(\w*)/i,"GeometryCollection $1");try{var feature=new ol.format.WKT().readFeature(wkt,{dataProjection:srccrs,featureProjection:dstcrs});var featureObj=new ol.format.GeoJSON().writeFeatureObject(feature);featureObj.id=id;return featureObj}catch(e){/* eslint-disable-next-line */console.warn("Failed to parse geometry: "+wkt);return null}},geoJSONGeomToWkt:function geoJSONGeomToWkt(gj){var precision=arguments.length>1&&arguments[1]!==undefined?arguments[1]:undefined;if(precision===undefined){precision=ConfigUtils.getConfigProp("wmsWktPrecision",null,4)}if(gj.type==="Feature"){gj=gj.geometry}var wrapParens=function wrapParens(s){return"("+s+")"};var pairWKT=function pairWKT(c){return c.map(function(x){return x.toFixed(precision)}).join(" ")};var ringWKT=function ringWKT(r){return r.map(pairWKT).join(", ")};var ringsWKT=function ringsWKT(r){return r.map(ringWKT).map(wrapParens).join(", ")};var multiRingsWKT=function multiRingsWKT(r){return r.map(ringsWKT).map(wrapParens).join(", ")};switch(gj.type){case"Point":return"POINT ("+pairWKT(gj.coordinates)+")";case"LineString":return"LINESTRING ("+ringWKT(gj.coordinates)+")";case"Polygon":return"POLYGON ("+ringsWKT(gj.coordinates)+")";case"MultiPoint":return"MULTIPOINT ("+ringWKT(gj.coordinates)+")";case"MultiPolygon":return"MULTIPOLYGON ("+multiRingsWKT(gj.coordinates)+")";case"MultiLineString":return"MULTILINESTRING ("+ringsWKT(gj.coordinates)+")";case"GeometryCollection":return"GEOMETRYCOLLECTION ("+gj.geometries.map(function(x){return VectorLayerUtils.geoJSONGeomToWkt(x,precision)}).join(", ")+")";default:throw new Error("Invalid geometry object")}},kmlToGeoJSON:function kmlToGeoJSON(kml){var kmlFormat=new ol.format.KML({defaultStyle:[new ol.style.Style]});var geojsonFormat=new ol.format.GeoJSON;var features=[];var _iterator3=_createForOfIteratorHelper(kmlFormat.readFeatures(kml)),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var _feature$geometry2;var olFeature=_step3.value;var style=olFeature.getStyleFunction()(olFeature);style=style[0]||style;var styleOptions={strokeColor:style.getStroke()?style.getStroke().getColor():[0,0,0,1],strokeWidth:style.getStroke()?style.getStroke().getWidth():1,strokeDash:style.getStroke()?style.getStroke().getLineDash():[],fillColor:style.getFill()?style.getFill().getColor():[255,255,255,1],textFill:style.getText()&&style.getText().getFill()?style.getText().getFill().getColor():[0,0,0,1],textStroke:style.getText()&&style.getText().getStroke()?style.getText().getStroke().getColor():[255,255,255,1]};if(style.getImage()&&style.getImage()!==getDefaultImageStyle()&&style.getImage().getSrc()){// FIXME: Uses private members of ol.style.Icon, style.getImage().getAnchor() returns null because style.getImage.getSize() is null because the the image is not yet loaded
|
|
18
|
+
var anchor=style.getImage().anchor_||[0.5,0.5];var anchorOrigin=(style.getImage().anchorOrigin_||"").split("-");if(anchorOrigin.includes("right")){anchor[0]=1-anchor[0]}if(anchorOrigin.includes("bottom")){anchor[1]=1-anchor[1]}styleOptions.iconSrc=style.getImage().getSrc();styleOptions.iconAnchor=anchor}var feature=geojsonFormat.writeFeatureObject(olFeature);Object.assign(feature,{styleName:styleOptions.iconSrc&&((_feature$geometry2=feature.geometry)===null||_feature$geometry2===void 0?void 0:_feature$geometry2.type)==="Point"?"marker":"default",styleOptions:styleOptions,id:uuidv1(),crs:"EPSG:4326",properties:{}});var properties=olFeature.getProperties();var excludedProperties=["visibility",olFeature.getGeometryName()];for(var _i=0,_Object$keys=Object.keys(properties);_i<_Object$keys.length;_i++){var key=_Object$keys[_i];if(!excludedProperties.includes(key)){feature.properties[key]=properties[key]}}if(properties.name&&feature.styleName==="marker"){feature.properties.label=properties.name}features.push(feature)}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}return features},convert3dto2d:function convert3dto2d(entry){if(!Array.isArray(entry)){return entry}else if(entry.length>=3&&!Array.isArray(entry[0])){return[entry[0],entry[1]]}else if(Array.isArray(entry[0])){return entry.map(VectorLayerUtils.convert3dto2d)}return entry},computeFeaturesBBox:function computeFeaturesBBox(features){var featureCrs=new Set;features.forEach(function(feature){if(feature.crs){featureCrs.add(feature.crs)}});var bboxCrs=featureCrs.size===1?_toConsumableArray(featureCrs.keys())[0]:"EPSG:4326";var bounds=geojsonBbox({type:"FeatureCollection",features:features.filter(function(feature){return feature.geometry}).map(function(feature){return _objectSpread(_objectSpread({},feature),{},{geometry:feature.crs?VectorLayerUtils.reprojectGeometry(feature.geometry,feature.crs,bboxCrs):feature.geometry})})});// Discard z component
|
|
19
|
+
if(bounds.length===6){bounds=[bounds[0],bounds[1],bounds[3],bounds[4]]}return{crs:bboxCrs,bounds:bounds}},computeFeatureBBox:function computeFeatureBBox(feature){var bounds=geojsonBbox(feature);// Discard z component
|
|
20
|
+
if(bounds.length===6){bounds=[bounds[0],bounds[1],bounds[3],bounds[4]]}return bounds},getFeatureCenter:function getFeatureCenter(feature){var geojson=new ol.format.GeoJSON().readFeature(feature);var geometry=geojson.getGeometry();var type=geometry.getType();var center=null;switch(type){case"Polygon":center=geometry.getInteriorPoint().getCoordinates();break;case"MultiPolygon":center=geometry.getInteriorPoints().getClosestPoint(ol.extent.getCenter(geometry.getExtent()));break;case"Point":center=geometry.getCoordinates();break;case"MultiPoint":center=geometry.getClosestPoint(ol.extent.getCenter(geometry.getExtent()));break;case"LineString":center=geometry.getCoordinateAt(0.5);break;case"MultiLineString":center=geometry.getClosestPoint(ol.extent.getCenter(geometry.getExtent()));break;case"Circle":center=geometry.getCenter();break;default:break}return center}};export default VectorLayerUtils;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
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 _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)}// Generated automatically by nearley, version 2.20.1
|
|
2
|
+
// http://github.com/Hardmath123/nearley
|
|
3
|
+
(function(){function id(x){return x[0]}if(typeof window==="undefined"){window=global}function asFilter(d){return window.qwc2ExpressionParserContext.asFilter&&["string","object"].includes(_typeof(d[0]))}function generateUUID(){var d=new Date().getTime();var d2=typeof performance!=="undefined"&&performance.now&&performance.now()*1000||0;var result="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(c){var r=Math.random()*16;if(d>0){r=(d+r)%16|0;d=Math.floor(d/16)}else{r=(d2+r)%16|0;d2=Math.floor(d2/16)}return(c==="x"?r:r&3|8).toString(16)});return"{"+result+"}"}var grammar={Lexer:undefined,ParserRules:[{"name":"dqstring$ebnf$1","symbols":[]},{"name":"dqstring$ebnf$1","symbols":["dqstring$ebnf$1","dstrchar"],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"dqstring","symbols":[{"literal":"\""},"dqstring$ebnf$1",{"literal":"\""}],"postprocess":function postprocess(d){return d[1].join("")}},{"name":"sqstring$ebnf$1","symbols":[]},{"name":"sqstring$ebnf$1","symbols":["sqstring$ebnf$1","sstrchar"],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"sqstring","symbols":[{"literal":"'"},"sqstring$ebnf$1",{"literal":"'"}],"postprocess":function postprocess(d){return d[1].join("")}},{"name":"btstring$ebnf$1","symbols":[]},{"name":"btstring$ebnf$1","symbols":["btstring$ebnf$1",/[^`]/],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"btstring","symbols":[{"literal":"`"},"btstring$ebnf$1",{"literal":"`"}],"postprocess":function postprocess(d){return d[1].join("")}},{"name":"dstrchar","symbols":[/[^\\"\n]/],"postprocess":id},{"name":"dstrchar","symbols":[{"literal":"\\"},"strescape"],"postprocess":function postprocess(d){return JSON.parse("\""+d.join("")+"\"")}},{"name":"sstrchar","symbols":[/[^\\'\n]/],"postprocess":id},{"name":"sstrchar","symbols":[{"literal":"\\"},"strescape"],"postprocess":function postprocess(d){return JSON.parse("\""+d.join("")+"\"")}},{"name":"sstrchar$string$1","symbols":[{"literal":"\\"},{"literal":"'"}],"postprocess":function joiner(d){return d.join("")}},{"name":"sstrchar","symbols":["sstrchar$string$1"],"postprocess":function postprocess(d){return"'"}},{"name":"strescape","symbols":[/["\\/bfnrt]/],"postprocess":id},{"name":"strescape","symbols":[{"literal":"u"},/[a-fA-F0-9]/,/[a-fA-F0-9]/,/[a-fA-F0-9]/,/[a-fA-F0-9]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"main","symbols":["_","P0","_"],"postprocess":function postprocess(d){return d[1]}},{"name":"P0$subexpression$1","symbols":[/[oO]/,/[rR]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P0","symbols":["P0","_","P0$subexpression$1","_","P1"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]||d[4]}},{"name":"P0","symbols":["P1"],"postprocess":id},{"name":"P1$subexpression$1","symbols":[/[aA]/,/[nN]/,/[dD]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P1","symbols":["P1","_","P1$subexpression$1","_","P2"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]&&d[4]}},{"name":"P1","symbols":["P2"],"postprocess":id},{"name":"P2","symbols":["P2","_",{"literal":"<"},"_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]<d[4]}},{"name":"P2","symbols":["P2","_",{"literal":">"},"_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]>d[4]}},{"name":"P2$string$1","symbols":[{"literal":">"},{"literal":"="}],"postprocess":function joiner(d){return d.join("")}},{"name":"P2","symbols":["P2","_","P2$string$1","_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]>=d[4]}},{"name":"P2$string$2","symbols":[{"literal":"<"},{"literal":"="}],"postprocess":function joiner(d){return d.join("")}},{"name":"P2","symbols":["P2","_","P2$string$2","_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]<=d[4]}},{"name":"P2","symbols":["P2","_",{"literal":"="},"_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],d[2],d[4]]:d[0]==d[4]}},{"name":"P2$string$3","symbols":[{"literal":"<"},{"literal":">"}],"postprocess":function joiner(d){return d.join("")}},{"name":"P2","symbols":["P2","_","P2$string$3","_","P3"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],"!=",d[4]]:d[0]!=d[4]}},{"name":"P2","symbols":["P3"],"postprocess":id},{"name":"P3","symbols":["P3","_",{"literal":"+"},"_","P4"],"postprocess":function postprocess(d){return d[0]+d[4]}},{"name":"P3","symbols":["P3","_",{"literal":"-"},"_","P4"],"postprocess":function postprocess(d){return d[0]-d[4]}},{"name":"P3","symbols":["P4"],"postprocess":id},{"name":"P4","symbols":["P4","_",{"literal":"*"},"_","P5"],"postprocess":function postprocess(d){return d[0]*d[4]}},{"name":"P4","symbols":["P4","_",{"literal":"/"},"_","P5"],"postprocess":function postprocess(d){return d[0]/d[4]}},{"name":"P4","symbols":["P5"],"postprocess":id},{"name":"P5","symbols":["P6","_",{"literal":"^"},"_","P5"],"postprocess":function postprocess(d){return Math.pow(d[0],d[4])}},{"name":"P5$subexpression$1","symbols":[/[iI]/,/[sS]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P5","symbols":["P5","__","P5$subexpression$1","__","P6"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],"=",d[4]]:d[0]===d[4]}},{"name":"P5$subexpression$2","symbols":[/[iI]/,/[sS]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P5$subexpression$3","symbols":[/[nN]/,/[oO]/,/[tT]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"P5","symbols":["P5","__","P5$subexpression$2","__","P5$subexpression$3","__","P6"],"postprocess":function postprocess(d){return asFilter(d)?[d[0],"!=",d[6]]:d[0]!==d[6]}},{"name":"P5","symbols":["P6"],"postprocess":id},{"name":"P6","symbols":[{"literal":"-"},"_","P6"],"postprocess":function postprocess(d){return-d[2]}},{"name":"P6","symbols":[{"literal":"+"},"_","P6"],"postprocess":function postprocess(d){return d[2]}},{"name":"P6","symbols":[{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return d[2]}},{"name":"P6","symbols":["N"],"postprocess":id},{"name":"N","symbols":["float"],"postprocess":id},{"name":"N","symbols":["sqstring"],"postprocess":id},{"name":"N","symbols":["dqstring"],"postprocess":function postprocess(d){var _window$qwc2Expressio,_window$qwc2Expressio2;return asFilter(d)?d[0]:(_window$qwc2Expressio=(_window$qwc2Expressio2=window.qwc2ExpressionParserContext.feature.properties)===null||_window$qwc2Expressio2===void 0?void 0:_window$qwc2Expressio2[d[0]])!==null&&_window$qwc2Expressio!==void 0?_window$qwc2Expressio:null}},{"name":"N$string$1","symbols":[{"literal":"u"},{"literal":"u"},{"literal":"i"},{"literal":"d"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$1","_",{"literal":"("},"_",{"literal":")"}],"postprocess":function postprocess(d){return generateUUID()}},{"name":"N$string$2","symbols":[{"literal":"n"},{"literal":"o"},{"literal":"w"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$2","_",{"literal":"("},"_",{"literal":")"}],"postprocess":function postprocess(d){return new Date().toISOString()}},{"name":"N$string$3","symbols":[{"literal":"s"},{"literal":"i"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$3","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.sin(d[4])}},{"name":"N$string$4","symbols":[{"literal":"c"},{"literal":"o"},{"literal":"s"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$4","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.cos(d[4])}},{"name":"N$string$5","symbols":[{"literal":"t"},{"literal":"a"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$5","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.tan(d[4])}},{"name":"N$string$6","symbols":[{"literal":"a"},{"literal":"s"},{"literal":"i"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$6","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.asin(d[4])}},{"name":"N$string$7","symbols":[{"literal":"a"},{"literal":"c"},{"literal":"o"},{"literal":"s"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$7","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.acos(d[4])}},{"name":"N$string$8","symbols":[{"literal":"a"},{"literal":"t"},{"literal":"a"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$8","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.atan(d[4])}},{"name":"N$string$9","symbols":[{"literal":"s"},{"literal":"q"},{"literal":"r"},{"literal":"t"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$9","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.sqrt(d[4])}},{"name":"N$string$10","symbols":[{"literal":"l"},{"literal":"n"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$10","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.log(d[4])}},{"name":"N$string$11","symbols":[{"literal":"a"},{"literal":"t"},{"literal":"a"},{"literal":"n"},{"literal":"2"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$11","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.atan2(d[4],d[8])}},{"name":"N$string$12","symbols":[{"literal":"p"},{"literal":"o"},{"literal":"w"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$12","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return Math.pow(d[4],d[8])}},{"name":"N$string$13","symbols":[{"literal":"C"},{"literal":"A"},{"literal":"S"},{"literal":"E"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N$string$14","symbols":[{"literal":"E"},{"literal":"L"},{"literal":"S"},{"literal":"E"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N$string$15","symbols":[{"literal":"E"},{"literal":"N"},{"literal":"D"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$13","_","when_args","_","N$string$14","_","P0","_","N$string$15"],"postprocess":function postprocess(d){return d[2]!==undefined?d[2]:d[6]}},{"name":"N$string$16","symbols":[{"literal":"c"},{"literal":"o"},{"literal":"a"},{"literal":"l"},{"literal":"e"},{"literal":"s"},{"literal":"c"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$16","_",{"literal":"("},"_","var_args","_",{"literal":")"}],"postprocess":function postprocess(d){var _d$4$find;return(_d$4$find=d[4].find(function(x){return x!==null}))!==null&&_d$4$find!==void 0?_d$4$find:null}},{"name":"N$string$17","symbols":[{"literal":"i"},{"literal":"f"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$17","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return d[4]?d[8]:d[12]}},{"name":"N$string$18","symbols":[{"literal":"n"},{"literal":"u"},{"literal":"l"},{"literal":"l"},{"literal":"i"},{"literal":"f"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$18","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return d[4]===d[8]?null:d[4]}},{"name":"N$string$19","symbols":[{"literal":"r"},{"literal":"e"},{"literal":"g"},{"literal":"e"},{"literal":"x"},{"literal":"p"},{"literal":"_"},{"literal":"m"},{"literal":"a"},{"literal":"t"},{"literal":"c"},{"literal":"h"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$19","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return d[4].search(new RegExp(d[8]))+1}},{"name":"N$string$20","symbols":[{"literal":"a"},{"literal":"t"},{"literal":"t"},{"literal":"r"},{"literal":"i"},{"literal":"b"},{"literal":"u"},{"literal":"t"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$20","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){var _window$qwc2Expressio3,_window$qwc2Expressio4;return(_window$qwc2Expressio3=(_window$qwc2Expressio4=window.qwc2ExpressionParserContext.feature.properties)===null||_window$qwc2Expressio4===void 0?void 0:_window$qwc2Expressio4[d[4]])!==null&&_window$qwc2Expressio3!==void 0?_window$qwc2Expressio3:null}},{"name":"N$string$21","symbols":[{"literal":"c"},{"literal":"u"},{"literal":"r"},{"literal":"r"},{"literal":"e"},{"literal":"n"},{"literal":"t"},{"literal":"_"},{"literal":"v"},{"literal":"a"},{"literal":"l"},{"literal":"u"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$21","_",{"literal":"("},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){var _window$qwc2Expressio5,_window$qwc2Expressio6;return(_window$qwc2Expressio5=(_window$qwc2Expressio6=window.qwc2ExpressionParserContext.feature.properties)===null||_window$qwc2Expressio6===void 0?void 0:_window$qwc2Expressio6[d[4]])!==null&&_window$qwc2Expressio5!==void 0?_window$qwc2Expressio5:null}},{"name":"N$string$22","symbols":[{"literal":"a"},{"literal":"t"},{"literal":"t"},{"literal":"r"},{"literal":"i"},{"literal":"b"},{"literal":"u"},{"literal":"t"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$22","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){var _d$4$properties$d$,_d$;return(_d$4$properties$d$=(_d$=d[4])===null||_d$===void 0||(_d$=_d$.properties)===null||_d$===void 0?void 0:_d$[d[8]])!==null&&_d$4$properties$d$!==void 0?_d$4$properties$d$:null}},{"name":"N$string$23","symbols":[{"literal":"g"},{"literal":"e"},{"literal":"t"},{"literal":"_"},{"literal":"f"},{"literal":"e"},{"literal":"a"},{"literal":"t"},{"literal":"u"},{"literal":"r"},{"literal":"e"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$23","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.getFeature(d[4],d[8],d[12])}},{"name":"N$string$24","symbols":[{"literal":"g"},{"literal":"e"},{"literal":"t"},{"literal":"_"},{"literal":"f"},{"literal":"e"},{"literal":"a"},{"literal":"t"},{"literal":"u"},{"literal":"r"},{"literal":"e"},{"literal":"_"},{"literal":"b"},{"literal":"y"},{"literal":"_"},{"literal":"i"},{"literal":"d"}],"postprocess":function joiner(d){return d.join("")}},{"name":"N","symbols":["N$string$24","_",{"literal":"("},"_","P0","_",{"literal":","},"_","P0","_",{"literal":")"}],"postprocess":function postprocess(d){return window.qwc2ExpressionParserContext.getFeature(d[4],"id",d[8])}},{"name":"N$subexpression$1","symbols":[/[pP]/,/[iI]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$1"],"postprocess":function postprocess(d){return Math.PI}},{"name":"N$subexpression$2","symbols":[/[eE]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$2"],"postprocess":function postprocess(d){return Math.E}},{"name":"N$subexpression$3","symbols":[/[nN]/,/[uU]/,/[lL]/,/[lL]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$3"],"postprocess":function postprocess(d){return null}},{"name":"N$subexpression$4","symbols":[/[fF]/,/[aA]/,/[lL]/,/[sS]/,/[eE]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$4"],"postprocess":function postprocess(d){return false}},{"name":"N$subexpression$5","symbols":[/[tT]/,/[rR]/,/[uU]/,/[eE]/],"postprocess":function postprocess(d){return d.join("")}},{"name":"N","symbols":["N$subexpression$5"],"postprocess":function postprocess(d){return true}},{"name":"var_args","symbols":["P0"],"postprocess":function postprocess(d){return[d[0]]}},{"name":"var_args","symbols":["var_args","_",{"literal":","},"_","P0"],"postprocess":function postprocess(d){return[].concat(_toConsumableArray(d[0]),[d[4]])}},{"name":"when_args$string$1","symbols":[{"literal":"W"},{"literal":"H"},{"literal":"E"},{"literal":"N"}],"postprocess":function joiner(d){return d.join("")}},{"name":"when_args$string$2","symbols":[{"literal":"T"},{"literal":"H"},{"literal":"E"},{"literal":"N"}],"postprocess":function joiner(d){return d.join("")}},{"name":"when_args","symbols":["when_args$string$1","_","P0","_","when_args$string$2","_","P0"],"postprocess":function postprocess(d){return d[2]?d[6]:undefined}},{"name":"when_args$string$3","symbols":[{"literal":"W"},{"literal":"H"},{"literal":"E"},{"literal":"N"}],"postprocess":function joiner(d){return d.join("")}},{"name":"when_args$string$4","symbols":[{"literal":"T"},{"literal":"H"},{"literal":"E"},{"literal":"N"}],"postprocess":function joiner(d){return d.join("")}},{"name":"when_args","symbols":["when_args","_","when_args$string$3","_","P0","_","when_args$string$4","_","P0"],"postprocess":function postprocess(d){return d[0]!==undefined?d[0]:d[4]?d[8]:undefined}},{"name":"float","symbols":["int",{"literal":"."},"int"],"postprocess":function postprocess(d){return parseFloat(d[0]+d[1]+d[2])}},{"name":"float","symbols":["int"],"postprocess":function postprocess(d){return parseInt(d[0])}},{"name":"int$ebnf$1","symbols":[/[0-9]/]},{"name":"int$ebnf$1","symbols":["int$ebnf$1",/[0-9]/],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"int","symbols":["int$ebnf$1"],"postprocess":function postprocess(d){return d[0].join("")}},{"name":"_$ebnf$1","symbols":[]},{"name":"_$ebnf$1","symbols":["_$ebnf$1",/[\s]/],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"_","symbols":["_$ebnf$1"],"postprocess":function postprocess(d){return null}},{"name":"__$ebnf$1","symbols":[/[\s]/]},{"name":"__$ebnf$1","symbols":["__$ebnf$1",/[\s]/],"postprocess":function arrpush(d){return d[0].concat([d[1]])}},{"name":"__","symbols":["__$ebnf$1"],"postprocess":function postprocess(d){return null}}],ParserStart:"main"};if(typeof module!=="undefined"&&typeof module.exports!=="undefined"){module.exports=grammar}else{window.grammar=grammar}})();
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
@builtin "string.ne"
|
|
2
|
+
|
|
3
|
+
@{%
|
|
4
|
+
|
|
5
|
+
if (typeof window === 'undefined') {
|
|
6
|
+
window = global;
|
|
7
|
+
}
|
|
8
|
+
function asFilter(d) {
|
|
9
|
+
return window.qwc2ExpressionParserContext.asFilter && ["string", "object"].includes(typeof(d[0]));
|
|
10
|
+
}
|
|
11
|
+
function generateUUID() {
|
|
12
|
+
let d = new Date().getTime();
|
|
13
|
+
let d2 = ((typeof performance !== 'undefined') && performance.now && (performance.now()*1000)) || 0;
|
|
14
|
+
const result = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
|
|
15
|
+
let r = Math.random() * 16;
|
|
16
|
+
if(d > 0){
|
|
17
|
+
r = (d + r)%16 | 0;
|
|
18
|
+
d = Math.floor(d/16);
|
|
19
|
+
} else {
|
|
20
|
+
r = (d2 + r)%16 | 0;
|
|
21
|
+
d2 = Math.floor(d2/16);
|
|
22
|
+
}
|
|
23
|
+
return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
|
|
24
|
+
});
|
|
25
|
+
return '{' + result + '}';
|
|
26
|
+
}
|
|
27
|
+
%}
|
|
28
|
+
|
|
29
|
+
main -> _ P0 _ {% function(d) {return d[1]; } %}
|
|
30
|
+
|
|
31
|
+
# Priority-0 operators (OR)
|
|
32
|
+
P0 -> P0 _ "OR"i _ P1 {% function(d) { return asFilter(d) ? [d[0], d[2], d[4]] : (d[0] || d[4]); } %}
|
|
33
|
+
| P1 {% id %}
|
|
34
|
+
|
|
35
|
+
# Priority-1 operators (AND)
|
|
36
|
+
P1 -> P1 _ "AND"i _ P2 {% function(d) { return asFilter(d) ? [d[0], d[2], d[4]] : (d[0] && d[4]); } %}
|
|
37
|
+
| P2 {% id %}
|
|
38
|
+
|
|
39
|
+
# Priority-2 operators (comparison operators)
|
|
40
|
+
P2 -> P2 _ "<" _ P3 {% function(d) { return asFilter(d) ? [d[0], d[2], d[4]] : (d[0] < d[4]); } %}
|
|
41
|
+
| P2 _ ">" _ P3 {% function(d) { return asFilter(d) ? [d[0], d[2], d[4]] : (d[0] > d[4]); } %}
|
|
42
|
+
| P2 _ ">=" _ P3 {% function(d) { return asFilter(d) ? [d[0], d[2], d[4]] : (d[0] >= d[4]); } %}
|
|
43
|
+
| P2 _ "<=" _ P3 {% function(d) { return asFilter(d) ? [d[0], d[2], d[4]] : (d[0] <= d[4]); } %}
|
|
44
|
+
| P2 _ "=" _ P3 {% function(d) { return asFilter(d) ? [d[0], d[2], d[4]] : (d[0] == d[4]); } %}
|
|
45
|
+
| P2 _ "<>" _ P3 {% function(d) { return asFilter(d) ? [d[0], "!=", d[4]] : (d[0] != d[4]); } %}
|
|
46
|
+
| P3 {% id %}
|
|
47
|
+
|
|
48
|
+
# Priority-3 operators (addition, subtraction)
|
|
49
|
+
P3 -> P3 _ "+" _ P4 {% function(d) { return d[0] + d[4]; } %}
|
|
50
|
+
| P3 _ "-" _ P4 {% function(d) { return d[0] - d[4]; } %}
|
|
51
|
+
| P4 {% id %}
|
|
52
|
+
|
|
53
|
+
# Priority-4 operators (multiplication, division)
|
|
54
|
+
P4 -> P4 _ "*" _ P5 {% function(d) { return d[0] * d[4]; } %}
|
|
55
|
+
| P4 _ "/" _ P5 {% function(d) { return d[0] / d[4]; } %}
|
|
56
|
+
| P5 {% id %}
|
|
57
|
+
|
|
58
|
+
# Priority-5 operators (exponent, IS, IS NOT)
|
|
59
|
+
P5 -> P6 _ "^" _ P5 {% function(d) { return Math.pow(d[0], d[4]); } %}
|
|
60
|
+
| P5 __ "IS"i __ P6 {% function(d) { return asFilter(d) ? [d[0], "=", d[4]] : d[0] === d[4]; } %}
|
|
61
|
+
| P5 __ "IS"i __ "NOT"i __ P6 {% function(d) { return asFilter(d) ? [d[0], "!=", d[6]] : d[0] !== d[6]; } %}
|
|
62
|
+
| P6 {% id %}
|
|
63
|
+
|
|
64
|
+
# Priority-6 operators (parenthesis, number, unary operators)
|
|
65
|
+
P6 -> "-" _ P6 {% function(d) { return -d[2]; } %}
|
|
66
|
+
| "+" _ P6 {% function(d) { return d[2]; } %}
|
|
67
|
+
| "(" _ P0 _ ")" {% function(d) { return d[2]; } %}
|
|
68
|
+
| N {% id %}
|
|
69
|
+
|
|
70
|
+
# A number or a function of a number
|
|
71
|
+
N -> float {% id %}
|
|
72
|
+
| sqstring {% id %}
|
|
73
|
+
| dqstring {% function(d) { return asFilter(d) ? d[0] : window.qwc2ExpressionParserContext.feature.properties?.[d[0]] ?? null; } %}
|
|
74
|
+
| "uuid" _ "(" _ ")" {% function(d) { return generateUUID(); } %}
|
|
75
|
+
| "now" _ "(" _ ")" {% function(d) { return (new Date()).toISOString(); } %}
|
|
76
|
+
| "sin" _ "(" _ P0 _ ")" {% function(d) { return Math.sin(d[4]); } %}
|
|
77
|
+
| "cos" _ "(" _ P0 _ ")" {% function(d) { return Math.cos(d[4]); } %}
|
|
78
|
+
| "tan" _ "(" _ P0 _ ")" {% function(d) { return Math.tan(d[4]); } %}
|
|
79
|
+
| "asin" _ "(" _ P0 _ ")" {% function(d) { return Math.asin(d[4]); } %}
|
|
80
|
+
| "acos" _ "(" _ P0 _ ")" {% function(d) { return Math.acos(d[4]); } %}
|
|
81
|
+
| "atan" _ "(" _ P0 _ ")" {% function(d) { return Math.atan(d[4]); } %}
|
|
82
|
+
| "sqrt" _ "(" _ P0 _ ")" {% function(d) { return Math.sqrt(d[4]); } %}
|
|
83
|
+
| "ln" _ "(" _ P0 _ ")" {% function(d) { return Math.log(d[4]); } %}
|
|
84
|
+
| "atan2" _ "(" _ P0 _ "," _ P0 _ ")" {% function(d) { return Math.atan2(d[4], d[8]); } %}
|
|
85
|
+
| "pow" _ "(" _ P0 _ "," _ P0 _ ")" {% function(d) { return Math.pow(d[4], d[8]); } %}
|
|
86
|
+
| "CASE" _ when_args _ "ELSE" _ P0 _ "END" {% function(d) { return d[2] !== undefined ? d[2] : d[6]; } %}
|
|
87
|
+
| "coalesce" _ "(" _ var_args _ ")" {% function(d) { return d[4].find(x => x !== null) ?? null; } %}
|
|
88
|
+
| "if" _ "(" _ P0 _ "," _ P0 _ "," _ P0 _ ")" {% function(d) { return d[4] ? d[8] : d[12]; } %}
|
|
89
|
+
| "nullif" _ "(" _ P0 _ "," _ P0 _ ")" {% function(d) { return d[4] === d[8] ? null : d[4]; } %}
|
|
90
|
+
| "regexp_match" _ "(" _ P0 _ "," _ P0 _ ")" {% function(d) { return d[4].search(new RegExp(d[8])) + 1; } %}
|
|
91
|
+
| "attribute" _ "(" _ P0 _ ")" {% function(d) { return window.qwc2ExpressionParserContext.feature.properties?.[d[4]] ?? null; } %}
|
|
92
|
+
| "current_value" _ "(" _ P0 _ ")" {% function(d) { return window.qwc2ExpressionParserContext.feature.properties?.[d[4]] ?? null; } %}
|
|
93
|
+
| "attribute" _ "(" _ P0 _ "," _ P0 _ ")" {% function(d) { return d[4]?.properties?.[d[8]] ?? null; } %}
|
|
94
|
+
| "get_feature" _ "(" _ P0 _ "," _ P0 _ "," _ P0 _ ")" {% function(d) { return window.qwc2ExpressionParserContext.getFeature(d[4], d[8], d[12]); } %}
|
|
95
|
+
| "get_feature_by_id" _ "(" _ P0 _ "," _ P0 _ ")" {% function(d) { return window.qwc2ExpressionParserContext.getFeature(d[4], "id", d[8]); } %}
|
|
96
|
+
| "PI"i {% function(d) { return Math.PI; } %}
|
|
97
|
+
| "E"i {% function(d) { return Math.E; } %}
|
|
98
|
+
| "NULL"i {% function(d) { return null; } %}
|
|
99
|
+
| "FALSE"i {% function(d) { return false; } %}
|
|
100
|
+
| "TRUE"i {% function(d) { return true; } %}
|
|
101
|
+
|
|
102
|
+
var_args -> P0 {% function(d) { return [d[0]]; } %}
|
|
103
|
+
var_args -> var_args _ "," _ P0 {% function(d) { return [...d[0], d[4]]; } %}
|
|
104
|
+
|
|
105
|
+
when_args -> "WHEN" _ P0 _ "THEN" _ P0 {% function(d) { return d[2] ? d[6] : undefined; } %}
|
|
106
|
+
when_args -> when_args _ "WHEN" _ P0 _ "THEN" _ P0 {% function(d) { return d[0] !== undefined ? d[0] : (d[4] ? d[8] : undefined); } %}
|
|
107
|
+
|
|
108
|
+
# I use `float` to basically mean a number with a decimal point in it
|
|
109
|
+
float ->
|
|
110
|
+
int "." int {% function(d) { return parseFloat(d[0] + d[1] + d[2])} %}
|
|
111
|
+
| int {% function(d) { return parseInt(d[0])} %}
|
|
112
|
+
|
|
113
|
+
int -> [0-9]:+ {% function(d) { return d[0].join(""); } %}
|
|
114
|
+
|
|
115
|
+
# Whitespace. The important thing here is that the postprocessor
|
|
116
|
+
# is a null-returning function. This is a memory efficiency trick.
|
|
117
|
+
_ -> [\s]:* {% function(d) { return null; } %}
|
|
118
|
+
__ -> [\s]:+ {% function(d) { return null; } %}
|