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.
Files changed (528) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +68 -0
  3. package/actions/display.js +7 -0
  4. package/actions/editing.js +7 -0
  5. package/actions/layerinfo.js +7 -0
  6. package/actions/layers.js +8 -0
  7. package/actions/localConfig.js +7 -0
  8. package/actions/locale.js +10 -0
  9. package/actions/locate.js +8 -0
  10. package/actions/logging.js +7 -0
  11. package/actions/map.js +15 -0
  12. package/actions/measurement.js +8 -0
  13. package/actions/processNotifications.js +7 -0
  14. package/actions/redlining.js +7 -0
  15. package/actions/redliningPick.js +7 -0
  16. package/actions/serviceinfo.js +7 -0
  17. package/actions/task.js +9 -0
  18. package/actions/theme.js +24 -0
  19. package/actions/windows.js +10 -0
  20. package/components/AppMenu.js +8 -0
  21. package/components/AttributeForm.js +34 -0
  22. package/components/AutoEditForm.js +8 -0
  23. package/components/CoordinateDisplayer.js +7 -0
  24. package/components/EditComboField.js +10 -0
  25. package/components/EditUploadField.js +8 -0
  26. package/components/FullscreenSwitcher.js +8 -0
  27. package/components/Icon.js +7 -0
  28. package/components/IdentifyViewer.js +16 -0
  29. package/components/ImportLayer.js +25 -0
  30. package/components/LayerInfoWindow.js +7 -0
  31. package/components/LinkFeatureForm.js +10 -0
  32. package/components/MapSelection.js +13 -0
  33. package/components/NumericInputWindow.js +7 -0
  34. package/components/PickFeature.js +7 -0
  35. package/components/PluginsContainer.js +8 -0
  36. package/components/PrintSelection.js +54 -0
  37. package/components/QtDesignerForm.js +30 -0
  38. package/components/ResizeableWindow.js +12 -0
  39. package/components/SearchBox.js +26 -0
  40. package/components/ServiceInfoWindow.js +7 -0
  41. package/components/SideBar.js +9 -0
  42. package/components/StandardApp.js +35 -0
  43. package/components/Swipeable.js +1 -0
  44. package/components/TaskBar.js +7 -0
  45. package/components/ThemeLayersListWindow.js +9 -0
  46. package/components/ThemeList.js +12 -0
  47. package/components/Toolbar.js +7 -0
  48. package/components/WindowManager.js +7 -0
  49. package/components/map/OlLayer.js +12 -0
  50. package/components/map/OlLocate.css +56 -0
  51. package/components/map/OlLocate.js +17 -0
  52. package/components/map/OlMap.js +11 -0
  53. package/components/map/layers/BingLayer.js +8 -0
  54. package/components/map/layers/GoogleLayer.js +27 -0
  55. package/components/map/layers/GraticuleLayer.js +8 -0
  56. package/components/map/layers/ImageLayer.js +8 -0
  57. package/components/map/layers/MVTLayer.js +7 -0
  58. package/components/map/layers/OSMLayer.js +8 -0
  59. package/components/map/layers/OverlayLayer.js +10 -0
  60. package/components/map/layers/VectorLayer.js +14 -0
  61. package/components/map/layers/WFSLayer.js +11 -0
  62. package/components/map/layers/WMSLayer.js +11 -0
  63. package/components/map/layers/WMTSLayer.js +9 -0
  64. package/components/map/layers/XYZLayer.js +7 -0
  65. package/components/map/layers/index.js +8 -0
  66. package/components/map3d/BottomBar3D.js +7 -0
  67. package/components/map3d/Compare3D.js +12 -0
  68. package/components/map3d/Draw3D.js +10 -0
  69. package/components/map3d/ExportObjects3D.js +17 -0
  70. package/components/map3d/HeightProfile3D.js +8 -0
  71. package/components/map3d/HideObjects3D.js +12 -0
  72. package/components/map3d/Identify3D.js +13 -0
  73. package/components/map3d/LayerTree3D.js +8 -0
  74. package/components/map3d/Map3D.js +29 -0
  75. package/components/map3d/Map3DLight.js +10 -0
  76. package/components/map3d/MapControls3D.js +20 -0
  77. package/components/map3d/MapExport3D.js +11 -0
  78. package/components/map3d/Measure3D.js +23 -0
  79. package/components/map3d/OverviewMap3D.js +9 -0
  80. package/components/map3d/SearchField3D.js +16 -0
  81. package/components/map3d/TopBar3D.js +7 -0
  82. package/components/map3d/View3DSwitcher.js +7 -0
  83. package/components/map3d/drawtool/CreateTool3D.js +9 -0
  84. package/components/map3d/drawtool/EditTool3D.js +9 -0
  85. package/components/map3d/drawtool/NumericInput3D.js +7 -0
  86. package/components/map3d/img/viewcone.svg +124 -0
  87. package/components/map3d/layers/VectorLayer3D.js +7 -0
  88. package/components/map3d/layers/WFSLayer3D.js +8 -0
  89. package/components/map3d/layers/WMSLayer3D.js +7 -0
  90. package/components/map3d/layers/WMTSLayer3D.js +9 -0
  91. package/components/map3d/layers/index.js +8 -0
  92. package/components/map3d/models/arrow.glb +0 -0
  93. package/components/map3d/models/pin.glb +0 -0
  94. package/components/map3d/slices/map3d.js +1 -0
  95. package/components/map3d/style/BottomBar3D.css +67 -0
  96. package/components/map3d/style/Compare3D.css +57 -0
  97. package/components/map3d/style/Draw3D.css +7 -0
  98. package/components/map3d/style/HideObjects3D.css +29 -0
  99. package/components/map3d/style/LayerTree3D.css +126 -0
  100. package/components/map3d/style/Map3D.css +42 -0
  101. package/components/map3d/style/Map3DLight.css +72 -0
  102. package/components/map3d/style/MapControls3D.css +56 -0
  103. package/components/map3d/style/MapExport3D.css +25 -0
  104. package/components/map3d/style/OverviewMap3D.css +37 -0
  105. package/components/map3d/style/SearchField3D.css +7 -0
  106. package/components/map3d/style/View3DSwitcher.css +27 -0
  107. package/components/map3d/utils/Tiles3DStyle.js +1 -0
  108. package/components/share/ShareLink.js +7 -0
  109. package/components/share/ShareQRCode.js +8 -0
  110. package/components/share/ShareSocials.js +9 -0
  111. package/components/share/style/ShareLink.css +13 -0
  112. package/components/share/style/ShareSocials.css +9 -0
  113. package/components/style/App.css +229 -0
  114. package/components/style/AppMenu.css +162 -0
  115. package/components/style/AttributeForm.css +57 -0
  116. package/components/style/AutoEditForm.css +64 -0
  117. package/components/style/DefaultColorScheme.css +60 -0
  118. package/components/style/EditUploadField.css +103 -0
  119. package/components/style/FullscreenSwitcher.css +25 -0
  120. package/components/style/Icon.css +26 -0
  121. package/components/style/IdentifyViewer.css +249 -0
  122. package/components/style/ImportLayer.css +28 -0
  123. package/components/style/LayerInfoWindow.css +46 -0
  124. package/components/style/LinkFeatureForm.css +48 -0
  125. package/components/style/NumericInputWindow.css +11 -0
  126. package/components/style/PickFeature.css +25 -0
  127. package/components/style/PluginsContainer.css +4 -0
  128. package/components/style/QtDesignerForm.css +225 -0
  129. package/components/style/ResizeableWindow.css +178 -0
  130. package/components/style/SearchBox.css +159 -0
  131. package/components/style/ServiceInfoWindow.css +34 -0
  132. package/components/style/SideBar.css +100 -0
  133. package/components/style/TaskBar.css +35 -0
  134. package/components/style/ThemeLayersListWindow.css +47 -0
  135. package/components/style/ThemeList.css +200 -0
  136. package/components/style/Toolbar.css +20 -0
  137. package/components/style/WindowManager.css +50 -0
  138. package/components/timeline/FixedTimeline.js +10 -0
  139. package/components/timeline/InfiniteTimeline.js +13 -0
  140. package/components/timeline/TimelineFeaturesSlider.js +10 -0
  141. package/components/timeline/style/FixedTimeline.css +76 -0
  142. package/components/timeline/style/InfiniteTimeline.css +94 -0
  143. package/components/timeline/style/TimelineFeaturesSlider.css +131 -0
  144. package/components/widgets/AccordeonWidget.js +7 -0
  145. package/components/widgets/ButtonBar.js +7 -0
  146. package/components/widgets/ColorButton.js +8 -0
  147. package/components/widgets/ComboBox.js +7 -0
  148. package/components/widgets/CopyButton.js +7 -0
  149. package/components/widgets/DateTimeInput.js +8 -0
  150. package/components/widgets/EditableSelect.js +8 -0
  151. package/components/widgets/FileSelector.js +9 -0
  152. package/components/widgets/Input.js +7 -0
  153. package/components/widgets/InputContainer.js +7 -0
  154. package/components/widgets/LayerCatalogWidget.js +3 -0
  155. package/components/widgets/MenuButton.js +1 -0
  156. package/components/widgets/ModalDialog.js +7 -0
  157. package/components/widgets/NavBar.js +7 -0
  158. package/components/widgets/NumberInput.js +9 -0
  159. package/components/widgets/PopupMenu.js +1 -0
  160. package/components/widgets/Primitives.js +7 -0
  161. package/components/widgets/ReCaptchaWidget.js +1 -0
  162. package/components/widgets/SearchWidget.js +7 -0
  163. package/components/widgets/Spinner.js +6 -0
  164. package/components/widgets/SuggestionInput.js +7 -0
  165. package/components/widgets/TextInput.js +7 -0
  166. package/components/widgets/ToggleSwitch.js +7 -0
  167. package/components/widgets/VectorLayerPicker.js +8 -0
  168. package/components/widgets/style/AccordeonWidget.css +22 -0
  169. package/components/widgets/style/ButtonBar.css +88 -0
  170. package/components/widgets/style/ColorButton.css +88 -0
  171. package/components/widgets/style/ComboBox.css +83 -0
  172. package/components/widgets/style/CopyButton.css +21 -0
  173. package/components/widgets/style/EditableSelect.css +47 -0
  174. package/components/widgets/style/FileSelector.css +14 -0
  175. package/components/widgets/style/InputContainer.css +34 -0
  176. package/components/widgets/style/LayerCatalogWidget.css +59 -0
  177. package/components/widgets/style/MenuButton.css +122 -0
  178. package/components/widgets/style/ModalDialog.css +50 -0
  179. package/components/widgets/style/NavBar.css +12 -0
  180. package/components/widgets/style/NumberInput.css +76 -0
  181. package/components/widgets/style/SearchWidget.css +43 -0
  182. package/components/widgets/style/Spinner.css +32 -0
  183. package/components/widgets/style/SuggestionInput.css +8 -0
  184. package/components/widgets/style/TextInput.css +94 -0
  185. package/components/widgets/style/ToggleSwitch.css +61 -0
  186. package/components/widgets/style/VectorLayerPicker.css +3 -0
  187. package/icons/2d.svg +70 -0
  188. package/icons/3d.svg +70 -0
  189. package/icons/3d2d.svg +92 -0
  190. package/icons/after.svg +76 -0
  191. package/icons/arrow-down.svg +60 -0
  192. package/icons/arrow-up.svg +60 -0
  193. package/icons/before.svg +76 -0
  194. package/icons/bglayer.svg +71 -0
  195. package/icons/bookmark.svg +170 -0
  196. package/icons/box.svg +63 -0
  197. package/icons/buffer.svg +67 -0
  198. package/icons/camera.svg +118 -0
  199. package/icons/catalog.svg +62 -0
  200. package/icons/checked.svg +80 -0
  201. package/icons/chevron-down.svg +60 -0
  202. package/icons/chevron-left.svg +59 -0
  203. package/icons/chevron-right.svg +60 -0
  204. package/icons/chevron-up.svg +60 -0
  205. package/icons/circle.svg +70 -0
  206. package/icons/clear.svg +62 -0
  207. package/icons/clock.svg +71 -0
  208. package/icons/cog.svg +60 -0
  209. package/icons/collapse.svg +73 -0
  210. package/icons/compare.svg +72 -0
  211. package/icons/cone.svg +58 -0
  212. package/icons/confirm.svg +62 -0
  213. package/icons/copy.svg +60 -0
  214. package/icons/cuboid.svg +58 -0
  215. package/icons/cyclomedia.svg +47 -0
  216. package/icons/cylinder.svg +58 -0
  217. package/icons/dataimport.svg +116 -0
  218. package/icons/detach.svg +79 -0
  219. package/icons/dock.svg +82 -0
  220. package/icons/dock_bottom.svg +82 -0
  221. package/icons/dock_left.svg +84 -0
  222. package/icons/dock_right.svg +84 -0
  223. package/icons/dock_top.svg +84 -0
  224. package/icons/draw.svg +78 -0
  225. package/icons/editdraw.svg +84 -0
  226. package/icons/edited.svg +78 -0
  227. package/icons/editing.svg +118 -0
  228. package/icons/ellipse.svg +72 -0
  229. package/icons/embed.svg +88 -0
  230. package/icons/expand.svg +73 -0
  231. package/icons/export.svg +126 -0
  232. package/icons/eye.svg +127 -0
  233. package/icons/featureform.svg +115 -0
  234. package/icons/fill.svg +62 -0
  235. package/icons/filter.svg +69 -0
  236. package/icons/folder-open.svg +60 -0
  237. package/icons/freehand.svg +82 -0
  238. package/icons/group.svg +76 -0
  239. package/icons/home.svg +60 -0
  240. package/icons/identify_radius.svg +71 -0
  241. package/icons/identify_region.svg +71 -0
  242. package/icons/import.svg +62 -0
  243. package/icons/info-sign.svg +60 -0
  244. package/icons/info.svg +80 -0
  245. package/icons/layers.svg +71 -0
  246. package/icons/light.svg +77 -0
  247. package/icons/line.svg +61 -0
  248. package/icons/line_buffer.svg +65 -0
  249. package/icons/link.svg +75 -0
  250. package/icons/list-alt.svg +111 -0
  251. package/icons/lock.svg +54 -0
  252. package/icons/login.svg +56 -0
  253. package/icons/logout.svg +56 -0
  254. package/icons/map3d.svg +51 -0
  255. package/icons/maximize.svg +84 -0
  256. package/icons/measure.svg +82 -0
  257. package/icons/measure_line.svg +87 -0
  258. package/icons/measure_polygon.svg +88 -0
  259. package/icons/menu-hamburger.svg +60 -0
  260. package/icons/minimize.svg +76 -0
  261. package/icons/minus-sign.svg +60 -0
  262. package/icons/minus.svg +61 -0
  263. package/icons/nav-end.svg +74 -0
  264. package/icons/nav-left.svg +74 -0
  265. package/icons/nav-right.svg +74 -0
  266. package/icons/nav-start.svg +73 -0
  267. package/icons/new.svg +84 -0
  268. package/icons/nodetool.svg +68 -0
  269. package/icons/numericinput.svg +86 -0
  270. package/icons/ok.svg +60 -0
  271. package/icons/open.svg +79 -0
  272. package/icons/open_link.svg +74 -0
  273. package/icons/paint.svg +75 -0
  274. package/icons/pen.svg +41 -0
  275. package/icons/person.svg +44 -0
  276. package/icons/pick.svg +67 -0
  277. package/icons/pick_point.svg +74 -0
  278. package/icons/pick_region.svg +71 -0
  279. package/icons/plus.svg +60 -0
  280. package/icons/point.svg +67 -0
  281. package/icons/point_buffer.svg +74 -0
  282. package/icons/polygon.svg +61 -0
  283. package/icons/print.svg +60 -0
  284. package/icons/pyramid.svg +58 -0
  285. package/icons/radio_checked.svg +78 -0
  286. package/icons/radio_tristate.svg +75 -0
  287. package/icons/radio_unchecked.svg +72 -0
  288. package/icons/rasterexport.svg +124 -0
  289. package/icons/rect.svg +63 -0
  290. package/icons/refresh.svg +44 -0
  291. package/icons/remove.svg +60 -0
  292. package/icons/report.svg +84 -0
  293. package/icons/routing-bicycle.svg +40 -0
  294. package/icons/routing-bus.svg +40 -0
  295. package/icons/routing-cablecar.svg +40 -0
  296. package/icons/routing-car.svg +40 -0
  297. package/icons/routing-ship.svg +40 -0
  298. package/icons/routing-train.svg +40 -0
  299. package/icons/routing-tram.svg +40 -0
  300. package/icons/routing-truck.svg +40 -0
  301. package/icons/routing-walking.svg +40 -0
  302. package/icons/routing.svg +68 -0
  303. package/icons/save.svg +190 -0
  304. package/icons/scale.svg +62 -0
  305. package/icons/screenshot.svg +60 -0
  306. package/icons/search.svg +60 -0
  307. package/icons/selectbox.svg +79 -0
  308. package/icons/share.svg +64 -0
  309. package/icons/snap_edge.svg +79 -0
  310. package/icons/snap_vertex.svg +79 -0
  311. package/icons/sphere.svg +58 -0
  312. package/icons/square.svg +68 -0
  313. package/icons/sync.svg +72 -0
  314. package/icons/text.svg +68 -0
  315. package/icons/themes.svg +81 -0
  316. package/icons/tilt-down.svg +67 -0
  317. package/icons/tilt-left.svg +48 -0
  318. package/icons/tilt-right.svg +48 -0
  319. package/icons/tilt-up.svg +67 -0
  320. package/icons/today.svg +45 -0
  321. package/icons/tools.svg +77 -0
  322. package/icons/transformtool.svg +74 -0
  323. package/icons/transparency.svg +132 -0
  324. package/icons/trash.svg +60 -0
  325. package/icons/tree_minus.svg +81 -0
  326. package/icons/tree_plus.svg +81 -0
  327. package/icons/triangle-down.svg +59 -0
  328. package/icons/triangle-left.svg +60 -0
  329. package/icons/triangle-right.svg +60 -0
  330. package/icons/triangle-up.svg +59 -0
  331. package/icons/tristate.svg +79 -0
  332. package/icons/unchecked.svg +74 -0
  333. package/icons/undock.svg +82 -0
  334. package/icons/undock_bottom.svg +82 -0
  335. package/icons/undock_left.svg +82 -0
  336. package/icons/undock_right.svg +84 -0
  337. package/icons/undock_top.svg +84 -0
  338. package/icons/unmaximize.svg +84 -0
  339. package/icons/unminimize.svg +76 -0
  340. package/icons/up-down-arrow.svg +66 -0
  341. package/icons/warning.svg +72 -0
  342. package/icons/wedge.svg +58 -0
  343. package/icons/zoom.svg +60 -0
  344. package/icons/zoomin.svg +71 -0
  345. package/icons/zoomout.svg +80 -0
  346. package/libs/openlayers.js +11 -0
  347. package/package.json +135 -0
  348. package/plugins/API.js +114 -0
  349. package/plugins/AttributeTable.js +25 -0
  350. package/plugins/Authentication.js +13 -0
  351. package/plugins/BackgroundSwitcher.js +10 -0
  352. package/plugins/Bookmark.js +13 -0
  353. package/plugins/BottomBar.js +10 -0
  354. package/plugins/CookiePopup.js +9 -0
  355. package/plugins/Cyclomedia.js +11 -0
  356. package/plugins/Editing.js +21 -0
  357. package/plugins/FeatureForm.js +21 -0
  358. package/plugins/FeatureSearch.js +11 -0
  359. package/plugins/GeometryDigitizer.js +43 -0
  360. package/plugins/HeightProfile.js +26 -0
  361. package/plugins/Help.js +11 -0
  362. package/plugins/HomeButton.js +9 -0
  363. package/plugins/Identify.js +18 -0
  364. package/plugins/LayerCatalog.js +45 -0
  365. package/plugins/LayerTree.js +15 -0
  366. package/plugins/LocateButton.js +10 -0
  367. package/plugins/Map.js +22 -0
  368. package/plugins/MapCompare.js +11 -0
  369. package/plugins/MapCopyright.js +11 -0
  370. package/plugins/MapExport.js +23 -0
  371. package/plugins/MapFilter.js +20 -0
  372. package/plugins/MapInfoTooltip.js +32 -0
  373. package/plugins/MapLegend.js +14 -0
  374. package/plugins/MapTip.js +15 -0
  375. package/plugins/Measure.js +10 -0
  376. package/plugins/NewsPopup.js +12 -0
  377. package/plugins/Panoramax.js +10 -0
  378. package/plugins/Portal.js +10 -0
  379. package/plugins/Print.js +22 -0
  380. package/plugins/ProcessNotifications.js +11 -0
  381. package/plugins/Redlining.js +12 -0
  382. package/plugins/Reports.js +15 -0
  383. package/plugins/Routing.js +23 -0
  384. package/plugins/ScratchDrawing.js +15 -0
  385. package/plugins/Settings.js +12 -0
  386. package/plugins/Share.js +11 -0
  387. package/plugins/StartupMarker.js +12 -0
  388. package/plugins/TaskButton.js +9 -0
  389. package/plugins/ThemeSwitcher.js +10 -0
  390. package/plugins/TimeManager.js +21 -0
  391. package/plugins/TopBar.js +13 -0
  392. package/plugins/ValueTool.js +11 -0
  393. package/plugins/View3D.js +34 -0
  394. package/plugins/ZoomButtons.js +11 -0
  395. package/plugins/map/EditingSupport.js +13 -0
  396. package/plugins/map/LocateSupport.js +14 -0
  397. package/plugins/map/MeasurementSupport.js +15 -0
  398. package/plugins/map/OverviewSupport.js +14 -0
  399. package/plugins/map/RedliningPickSupport.js +12 -0
  400. package/plugins/map/RedliningSupport.js +28 -0
  401. package/plugins/map/ScaleBarSupport.js +10 -0
  402. package/plugins/map/SnapInteraction.js +1 -0
  403. package/plugins/map/SnapSupport.js +7 -0
  404. package/plugins/map/SnappingSupport.js +23 -0
  405. package/plugins/map/style/OverviewSupport.css +42 -0
  406. package/plugins/map/style/ScaleBarSupport.css +18 -0
  407. package/plugins/map/style/SnappingSupport.css +33 -0
  408. package/plugins/redlining/RedliningBufferSupport.js +8 -0
  409. package/plugins/style/AttributeTable.css +220 -0
  410. package/plugins/style/Authentication.css +16 -0
  411. package/plugins/style/BackgroundSwitcher.css +99 -0
  412. package/plugins/style/Bookmark.css +62 -0
  413. package/plugins/style/BottomBar.css +53 -0
  414. package/plugins/style/Buttons.css +68 -0
  415. package/plugins/style/CookiePopup.css +24 -0
  416. package/plugins/style/Cyclomedia.css +66 -0
  417. package/plugins/style/Editing.css +40 -0
  418. package/plugins/style/FeatureForm.css +21 -0
  419. package/plugins/style/FeatureSearch.css +71 -0
  420. package/plugins/style/GeometryDigitizer.css +28 -0
  421. package/plugins/style/HeightProfile.css +26 -0
  422. package/plugins/style/Identify.css +4 -0
  423. package/plugins/style/LayerCatalog.css +8 -0
  424. package/plugins/style/LayerTree.css +316 -0
  425. package/plugins/style/Map.css +43 -0
  426. package/plugins/style/MapCompare.css +27 -0
  427. package/plugins/style/MapCopyright.css +17 -0
  428. package/plugins/style/MapExport.css +55 -0
  429. package/plugins/style/MapFilter.css +101 -0
  430. package/plugins/style/MapInfoTooltip.css +78 -0
  431. package/plugins/style/MapLegend.css +36 -0
  432. package/plugins/style/MapTip.css +22 -0
  433. package/plugins/style/Measure.css +23 -0
  434. package/plugins/style/NewsPopup.css +87 -0
  435. package/plugins/style/Panoramax.css +15 -0
  436. package/plugins/style/Portal.css +115 -0
  437. package/plugins/style/Print.css +116 -0
  438. package/plugins/style/ProcessNotifications.css +55 -0
  439. package/plugins/style/Redlining.css +101 -0
  440. package/plugins/style/Reports.css +11 -0
  441. package/plugins/style/Routing.css +243 -0
  442. package/plugins/style/ScratchDrawing.css +8 -0
  443. package/plugins/style/Settings.css +11 -0
  444. package/plugins/style/Share.css +59 -0
  445. package/plugins/style/ThemeSwitcher.css +7 -0
  446. package/plugins/style/TimeManager.css +91 -0
  447. package/plugins/style/TopBar.css +50 -0
  448. package/plugins/style/ValueTool.css +60 -0
  449. package/reducers/display.js +7 -0
  450. package/reducers/editing.js +8 -0
  451. package/reducers/index.js +7 -0
  452. package/reducers/layerinfo.js +7 -0
  453. package/reducers/layers.js +14 -0
  454. package/reducers/localConfig.js +8 -0
  455. package/reducers/locale.js +8 -0
  456. package/reducers/locate.js +8 -0
  457. package/reducers/map.js +11 -0
  458. package/reducers/measurement.js +8 -0
  459. package/reducers/processNotifications.js +7 -0
  460. package/reducers/redlining.js +7 -0
  461. package/reducers/redliningPick.js +7 -0
  462. package/reducers/serviceinfo.js +7 -0
  463. package/reducers/task.js +7 -0
  464. package/reducers/theme.js +7 -0
  465. package/reducers/windows.js +7 -0
  466. package/scripts/dist.sh +16 -0
  467. package/scripts/gen-plugin-docs.js +9 -0
  468. package/scripts/makeIconkit.js +7 -0
  469. package/scripts/package-commands.bat +8 -0
  470. package/scripts/package-commands.sh +22 -0
  471. package/scripts/themesConfig.js +48 -0
  472. package/scripts/themesConfig.py +659 -0
  473. package/scripts/translateui.sh +51 -0
  474. package/scripts/updateTranslations.js +17 -0
  475. package/scripts/wmts_config_generator.py +169 -0
  476. package/selectors/searchproviders.js +12 -0
  477. package/static/translations/bg-BG.json +709 -0
  478. package/static/translations/ca-ES.json +709 -0
  479. package/static/translations/cs-CZ.json +709 -0
  480. package/static/translations/de-CH.json +709 -0
  481. package/static/translations/de-DE.json +709 -0
  482. package/static/translations/en-US.json +709 -0
  483. package/static/translations/es-ES.json +709 -0
  484. package/static/translations/fi-FI.json +709 -0
  485. package/static/translations/fr-FR.json +709 -0
  486. package/static/translations/hu-HU.json +709 -0
  487. package/static/translations/it-IT.json +709 -0
  488. package/static/translations/ja-JP.json +709 -0
  489. package/static/translations/nl-NL.json +709 -0
  490. package/static/translations/no-NO.json +709 -0
  491. package/static/translations/pl-PL.json +709 -0
  492. package/static/translations/pt-BR.json +709 -0
  493. package/static/translations/pt-PT.json +709 -0
  494. package/static/translations/ro-RO.json +709 -0
  495. package/static/translations/ru-RU.json +709 -0
  496. package/static/translations/sv-SE.json +709 -0
  497. package/static/translations/tr-TR.json +709 -0
  498. package/static/translations/tsconfig.json +606 -0
  499. package/stores/StandardStore.js +8 -0
  500. package/utils/ConfigUtils.js +9 -0
  501. package/utils/CoordinatesUtils.js +29 -0
  502. package/utils/DxfUtils.js +10 -0
  503. package/utils/EditingInterface.js +67 -0
  504. package/utils/EditingUtils.js +11 -0
  505. package/utils/FeatureStyles.js +10 -0
  506. package/utils/IdentifyUtils.js +12 -0
  507. package/utils/ImageEditor.js +15 -0
  508. package/utils/LayerUtils.js +57 -0
  509. package/utils/LocaleUtils.js +9 -0
  510. package/utils/MapUtils.js +66 -0
  511. package/utils/MeasureUtils.js +9 -0
  512. package/utils/MiscUtils.js +15 -0
  513. package/utils/PermaLinkUtils.js +11 -0
  514. package/utils/ResourceRegistry.js +7 -0
  515. package/utils/RoutingInterface.js +12 -0
  516. package/utils/SearchProviders.js +19 -0
  517. package/utils/ServiceLayerUtils.js +20 -0
  518. package/utils/Signal.js +2 -0
  519. package/utils/ThemeUtils.js +12 -0
  520. package/utils/VectorLayerUtils.js +20 -0
  521. package/utils/expr_grammar/README.md +3 -0
  522. package/utils/expr_grammar/grammar.js +3 -0
  523. package/utils/expr_grammar/grammar.ne +118 -0
  524. package/utils/expr_grammar/test.js +13 -0
  525. package/utils/img/README.markers +1 -0
  526. package/utils/img/arrowhead.svg +4 -0
  527. package/utils/img/marker-icon.png +0 -0
  528. package/utils/img/measurehead.svg +4 -0
@@ -0,0 +1,9 @@
1
+ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
2
+ * Copyright 2017-2024 Sourcepole AG
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */import React from"react";import{connect}from"react-redux";import PropTypes from"prop-types";import{zoomToExtent}from"../actions/map";import Icon from"../components/Icon";import LocaleUtils from"../utils/LocaleUtils";import ThemeUtils from"../utils/ThemeUtils";import"./style/Buttons.css";/**
8
+ * Map button for reverting to the home extent of the theme.
9
+ */var HomeButton=/*#__PURE__*/function(_React$Component){function HomeButton(){var _this;_classCallCheck(this,HomeButton);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,HomeButton,[].concat(args));_defineProperty(_this,"resetExtent",function(){if(_this.props.theme){var bbox=_this.props.theme.initialBbox;_this.props.zoomToExtent(bbox.bounds,bbox.crs)}});return _this}_inherits(HomeButton,_React$Component);return _createClass(HomeButton,[{key:"render",value:function render(){if(!ThemeUtils.themeFlagsAllowed(this.props.theme,this.props.themeFlagWhitelist,this.props.themeFlagBlacklist)){return null}var right=this.props.mapMargins.right;var bottom=this.props.mapMargins.bottom;var style={right:"calc(1.5em + "+right+"px)",bottom:"calc(var(--bottombar-height) + "+bottom+"px + "+(3+4*this.props.position)+"em)"};var tooltip=LocaleUtils.tr("tooltip.home");return/*#__PURE__*/React.createElement("button",{className:"map-button",onClick:this.resetExtent,style:style,title:tooltip},/*#__PURE__*/React.createElement(Icon,{icon:"home",title:tooltip}))}}])}(React.Component);_defineProperty(HomeButton,"propTypes",{mapMargins:PropTypes.object,/** The position slot index of the map button, from the bottom (0: bottom slot). */position:PropTypes.number,theme:PropTypes.object,/** Omit the button in themes matching one of these flags. */themeFlagBlacklist:PropTypes.arrayOf(PropTypes.string),/** Only show the button in themes matching one of these flags. */themeFlagWhitelist:PropTypes.arrayOf(PropTypes.string),zoomToExtent:PropTypes.func});_defineProperty(HomeButton,"defaultProps",{position:5});export default connect(function(state){return{mapMargins:state.windows.mapMargins,theme:state.theme.current}},{zoomToExtent:zoomToExtent})(HomeButton);
@@ -0,0 +1,18 @@
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 _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 _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
2
+ * Copyright 2017-2024 Sourcepole AG
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */import React from"react";import{connect}from"react-redux";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{LayerRole,addLayerFeatures,addMarker,removeMarker,removeLayer}from"../actions/layers";import{setCurrentTask}from"../actions/task";import IdentifyViewer from"../components/IdentifyViewer";import MapSelection from"../components/MapSelection";import ResizeableWindow from"../components/ResizeableWindow";import TaskBar from"../components/TaskBar";import NumberInput from"../components/widgets/NumberInput";import ConfigUtils from"../utils/ConfigUtils";import IdentifyUtils from"../utils/IdentifyUtils";import LocaleUtils from"../utils/LocaleUtils";import MeasureUtils from"../utils/MeasureUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import"./style/Identify.css";/**
8
+ * Displays queried feature attributes.
9
+ *
10
+ * Uses WMS GetFeatureInfo to query features and displays the result in
11
+ * table, as a HTML fragment or as plain text based on the supported GetFeatureInfo
12
+ * format.
13
+ *
14
+ * Extendable in combination with the `qwc-feature-info-service`, which provides support
15
+ * for customized queries and templates for the result presentation.
16
+ */var Identify=/*#__PURE__*/function(_React$Component){function Identify(){var _this;_classCallCheck(this,Identify);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,Identify,[].concat(args));_defineProperty(_this,"state",{mode:"Point",identifyResults:null,pendingRequests:0,radius:0,radiusUnits:_this.props.initialRadiusUnits,exitTaskOnResultsClose:null,filterGeom:null,filterGeomModifiers:{}});_defineProperty(_this,"identifyPoint",function(clickPoint){if(clickPoint){_this.setState(function(state){// Remove any search selection layer to avoid confusion
17
+ _this.props.removeLayer("searchselection");var pendingRequests=0;var identifyResults=_this.props.click.modifiers.ctrl!==true?{}:state.identifyResults;var queryableLayers=[];queryableLayers=IdentifyUtils.getQueryLayers(_this.props.layers,_this.props.map);queryableLayers.forEach(function(l){var request=IdentifyUtils.buildRequest(l,l.queryLayers.join(","),clickPoint,_this.props.map,_this.props.params);++pendingRequests;IdentifyUtils.sendRequest(request,function(response){_this.setState(function(state2){return{pendingRequests:state2.pendingRequests-1}});if(response){_this.parseResult(response,l,request.params.info_format,clickPoint)}})});if(!isEmpty(_this.props.click.features)){_this.props.click.features.forEach(function(feature){var layer=_this.props.layers.find(function(l){return l.id===feature.layerId});if((layer===null||layer===void 0?void 0:layer.role)===LayerRole.USERLAYER){var _layer$features$find,_layer$features,_layer$features$find2,_layer$projection;var queryFeature=_objectSpread({},(_layer$features$find=(_layer$features=layer.features)===null||_layer$features===void 0||(_layer$features$find2=_layer$features.find)===null||_layer$features$find2===void 0?void 0:_layer$features$find2.call(_layer$features,function(f){return f.id===feature.id}))!==null&&_layer$features$find!==void 0?_layer$features$find:feature);if(!(queryFeature!==null&&queryFeature!==void 0&&queryFeature.properties)){return}if(!identifyResults[layer.name]){identifyResults[layer.name]=[]}queryFeature.crs=(_layer$projection=layer.projection)!==null&&_layer$projection!==void 0?_layer$projection:_this.props.map.projection;queryFeature.displayname=queryFeature.properties.name||queryFeature.properties.Name||queryFeature.properties.NAME||queryFeature.properties.label||queryFeature.properties.id||queryFeature.id;queryFeature.layertitle=layer.title||layer.name||layer.id;queryFeature.properties=Object.entries(queryFeature.properties).reduce(function(res,_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],val=_ref2[1];return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,_typeof(val)==="object"?JSON.stringify(val):val))},{});identifyResults[layer.name].push(queryFeature)}})}_this.props.addMarker("identify",clickPoint,"",_this.props.map.projection);return{identifyResults:identifyResults,pendingRequests:pendingRequests}})}});_defineProperty(_this,"queryPoint",function(prevProps){if(_this.props.click.button!==0||_this.props.click===prevProps.click||(_this.props.click.features||[]).find(function(feature){return feature.id==="startupposmarker"})){return null}var searchMarker=(_this.props.click.features||[]).find(function(feature){return feature.id==="searchmarker"});if(searchMarker&&searchMarker.geometry.type==="Point"){return searchMarker.geometry.coordinates}return _this.props.click.coordinate});_defineProperty(_this,"identifyRegion",function(){var queryableLayers=IdentifyUtils.getQueryLayers(_this.props.layers,_this.props.map);var poly=_this.state.filterGeom.coordinates[0];if(poly.length<3||isEmpty(queryableLayers)){return}var identifyResults=_this.state.filterGeomModifiers.ctrl!==true?{}:_this.state.identifyResults;var center=[0,0];poly.forEach(function(point){center[0]+=point[0];center[1]+=point[1]});center[0]/=poly.length;center[1]/=poly.length;var filter=VectorLayerUtils.geoJSONGeomToWkt(_this.state.filterGeom);var pendingRequests=0;var params=_objectSpread({},_this.props.params);if(_this.props.params.region_feature_count){params.feature_count=_this.props.params.region_feature_count;delete params.region_feature_count}queryableLayers.forEach(function(layer){var request=IdentifyUtils.buildFilterRequest(layer,layer.queryLayers.join(","),filter,_this.props.map,params);++pendingRequests;IdentifyUtils.sendRequest(request,function(response){_this.setState(function(state){return{pendingRequests:state.pendingRequests-1}});if(response){_this.parseResult(response,layer,request.params.info_format,center)}});_this.setState({identifyResults:identifyResults,pendingRequests:pendingRequests})})});_defineProperty(_this,"identifyRadius",function(){var clickPoint=_this.state.filterGeom.center;var queryableLayers=IdentifyUtils.getQueryLayers(_this.props.layers,_this.props.map);if(isEmpty(queryableLayers)){return}var identifyResults=_this.state.filterGeomModifiers.ctrl!==true?{}:_this.state.identifyResults;var filter=VectorLayerUtils.geoJSONGeomToWkt(_this.state.filterGeom);var pendingRequests=0;var params=_objectSpread({},_this.props.params);if(_this.props.params.radius_feature_count){params.feature_count=_this.props.params.radius_feature_count;delete params.radius_feature_count}queryableLayers.forEach(function(layer){var request=IdentifyUtils.buildFilterRequest(layer,layer.queryLayers.join(","),filter,_this.props.map,params);++pendingRequests;IdentifyUtils.sendRequest(request,function(response){_this.setState(function(state){return{pendingRequests:state.pendingRequests-1}});if(response){_this.parseResult(response,layer,request.params.info_format,clickPoint)}});_this.setState({identifyResults:identifyResults,pendingRequests:pendingRequests})});_this.props.addMarker("identify",clickPoint,"",_this.props.map.projection)});_defineProperty(_this,"changeBufferUnit",function(ev){_this.setState({radiusUnits:ev.target.value})});_defineProperty(_this,"parseResult",function(response,layer,format,clickPoint){var newResults=IdentifyUtils.parseResponse(response,layer,format,clickPoint,_this.props.map.projection,_this.props.featureInfoReturnsLayerName,_this.props.layers);// Merge with previous
18
+ _this.setState(function(state){var identifyResults=_objectSpread({},state.identifyResults);Object.keys(newResults).forEach(function(layername){var existingFeatures=identifyResults[layername]||[];newResults[layername].forEach(function(newFeature){var featureIndex=existingFeatures.findIndex(function(feature){return feature.id===newFeature.id});if(featureIndex===-1){existingFeatures.push(newFeature)}});identifyResults[layername]=existingFeatures});return{identifyResults:identifyResults}})});_defineProperty(_this,"onShow",function(mode,data){_this.setState({mode:mode||"Point",exitTaskOnResultsClose:data===null||data===void 0?void 0:data.exitTaskOnResultsClose});if(mode==="Point"&&data!==null&&data!==void 0&&data.pos){_this.identifyPoint(data.pos)}});_defineProperty(_this,"onToolClose",function(){_this.setState({mode:"Point",exitTaskOnResultsClose:null,filterGeom:null});if(_this.props.clearResultsOnClose){_this.clearResults()}});_defineProperty(_this,"onWindowClose",function(){_this.clearResults();if(_this.state.exitTaskOnResultsClose||_this.props.exitTaskOnResultsClose){_this.props.setCurrentTask(null)}});_defineProperty(_this,"clearResults",function(){_this.props.removeMarker("identify");_this.props.removeLayer("identifyslection");_this.props.removeLayer("identifyradiusbuffer");_this.setState({identifyResults:null,pendingRequests:0})});_defineProperty(_this,"updateRadius",function(radius,units){_this.setState(function(state){return{radius:radius,radiusUnits:units,filterGeom:_objectSpread(_objectSpread({},state.filterGeom),{},{radius:MeasureUtils.convertLength(radius,units,"m")})}})});_defineProperty(_this,"renderBody",function(){if(_this.state.mode==="Point"){return LocaleUtils.tr("infotool.clickhelpPoint")}else if(_this.state.mode==="Region"){return LocaleUtils.tr("infotool.clickhelpPolygon")}else if(_this.state.mode==="Radius"){var text=LocaleUtils.tr("infotool.clickhelpRadius");return/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement("div",null,text),/*#__PURE__*/React.createElement("div",{className:"identify-radius-controls controlgroup"},/*#__PURE__*/React.createElement("span",null,LocaleUtils.tr("infotool.radius"),":\xA0"),/*#__PURE__*/React.createElement(NumberInput,{disabled:!_this.state.filterGeom,max:1000000,min:1,mobile:true,onChange:function onChange(rad){return _this.updateRadius(rad,_this.state.radiusUnits)},value:_this.state.radius}),/*#__PURE__*/React.createElement("select",{onChange:function onChange(ev){return _this.updateRadius(_this.state.radius,ev.target.value)},value:_this.state.radiusUnits},/*#__PURE__*/React.createElement("option",{value:"m"},"m"),/*#__PURE__*/React.createElement("option",{value:"ft"},"ft"),/*#__PURE__*/React.createElement("option",{value:"km"},"km"),/*#__PURE__*/React.createElement("option",{value:"mi"},"mi"))))}return null});return _this}_inherits(Identify,_React$Component);return _createClass(Identify,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.props.theme!==prevProps.theme){this.clearResults()}else if(!this.props.enabled&&prevProps.enabled){if(this.props.clearResultsOnClose){this.clearResults()}}if(this.props.enabled){if(this.state.mode==="Point"){var clickPoint=this.queryPoint(prevProps);this.identifyPoint(clickPoint)}else if(this.state.mode==="Region"){if(this.state.filterGeom&&this.state.filterGeom!==prevState.filterGeom){this.identifyRegion()}}else if(this.state.mode==="Radius"){if(this.state.filterGeom&&this.state.filterGeom!==prevState.filterGeom){this.setState(function(state){return{radius:MeasureUtils.convertLength(state.filterGeom.radius,"m",state.radiusUnits)}});this.identifyRadius()}}}}},{key:"render",value:function render(){var _this2=this;var resultWindow=null;if(this.state.pendingRequests>0||this.state.identifyResults!==null){var body=null;if(isEmpty(this.state.identifyResults)){if(this.state.pendingRequests>0){body=/*#__PURE__*/React.createElement("div",{className:"identify-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("identify.querying")))}else{body=/*#__PURE__*/React.createElement("div",{className:"identify-body",role:"body"},/*#__PURE__*/React.createElement("span",{className:"identify-body-message"},LocaleUtils.tr("identify.noresults")))}}else{body=/*#__PURE__*/React.createElement(IdentifyViewer,{attributeCalculator:this.props.attributeCalculator,attributeTransform:this.props.attributeTransform,customExporters:this.props.customExporters,displayResultTree:this.props.displayResultTree,enableExport:this.props.enableExport,exportGeometry:this.props.exportGeometry,highlightAllResults:this.props.highlightAllResults,identifyResults:this.state.identifyResults,iframeDialogsInitiallyDocked:this.props.iframeDialogsInitiallyDocked,longAttributesDisplay:this.props.longAttributesDisplay,replaceImageUrls:this.props.replaceImageUrls,role:"body",showLayerSelector:this.props.showLayerSelector})}resultWindow=/*#__PURE__*/React.createElement(ResizeableWindow,{busyIcon:this.state.pendingRequests>0,dockable:this.props.geometry.side,icon:"info-sign",initialHeight:this.props.geometry.initialHeight,initialWidth:this.props.geometry.initialWidth,initialX:this.props.geometry.initialX,initialY:this.props.geometry.initialY,initiallyDocked:this.props.geometry.initiallyDocked,key:"IdentifyWindow",onClose:this.onWindowClose,title:LocaleUtils.tr("identify.title")},body)}return[resultWindow,/*#__PURE__*/React.createElement(TaskBar,{key:"IdentifyTaskBar",onHide:this.onToolClose,onShow:this.onShow,task:"Identify"},function(){return{body:_this2.renderBody()}}),this.state.mode==="Region"||this.state.mode==="Radius"?/*#__PURE__*/React.createElement(MapSelection,{active:true,geomType:this.state.mode==="Radius"?"Circle":"Polygon",geometry:this.state.filterGeom,geometryChanged:function geometryChanged(geom,mod){return _this2.setState({filterGeom:geom,filterGeomModifiers:mod})},key:"MapSelection",measure:this.state.mode==="Radius"}):null]}}])}(React.Component);_defineProperty(Identify,"propTypes",{addLayerFeatures:PropTypes.func,addMarker:PropTypes.func,/** Optional function for computing derived attributes. See js/IdentifyExtensions.js for details. This prop can be specified in the appConfig.js cfg section. */attributeCalculator:PropTypes.func,/** Optional function for transforming attribute values. See js/IdentifyExtensions.js for details. This prop can be specified in the appConfig.js cfg section. */attributeTransform:PropTypes.func,/** Whether to clear the identify results when exiting the identify tool. */clearResultsOnClose:PropTypes.bool,click:PropTypes.object,currentIdentifyTool:PropTypes.string,currentTask:PropTypes.string,/** Optional list of custom exporters to offer along with the built-in exporters. See js/IdentifyExtensions.js for details. This prop can be specified in the appConfig.js cfg section. */customExporters:PropTypes.array,/** Whether to display a tree overview of results (as opposed to a flat list of results). */displayResultTree:PropTypes.bool,/** Whether to enable the export functionality. Either `true|false` or a list of single allowed formats (builtin formats: `json`, `geojson`, `csv`, `csvzip`) */enableExport:PropTypes.oneOfType([PropTypes.bool,PropTypes.array]),enabled:PropTypes.bool,/** Whether to clear the task when the results window is closed. */exitTaskOnResultsClose:PropTypes.bool,/** Whether to include the geometry in exported features. Default: `true`. */exportGeometry:PropTypes.bool,/** Whether to assume that XML GetFeatureInfo responses specify the technical layer name in the `name` attribute, rather than the layer title. */featureInfoReturnsLayerName:PropTypes.bool,/** Default window geometry with size, position and docking status. Positive position values (including '0') are related to top (InitialY) and left (InitialX), negative values (including '-0') to bottom (InitialY) and right (InitialX). */geometry:PropTypes.shape({initialWidth:PropTypes.number,initialHeight:PropTypes.number,initialX:PropTypes.number,initialY:PropTypes.number,initiallyDocked:PropTypes.bool,side:PropTypes.string}),/** Whether to highlight all results if no result is hovered */highlightAllResults:PropTypes.bool,iframeDialogsInitiallyDocked:PropTypes.bool,/** The initial radius units of the identify dialog in radius mode. One of 'm', 'ft', 'km', 'mi'. */initialRadiusUnits:PropTypes.string,layers:PropTypes.array,longAttributesDisplay:PropTypes.string,map:PropTypes.object,/** Extra params to append to the GetFeatureInfo request (i.e. `FI_POINT_TOLERANCE`, `FI_LINE_TOLERANCE`, `feature_count`, ...). Additionally, `region_feature_count` and `radius_feature_count` are supported. */params:PropTypes.object,removeLayer:PropTypes.func,removeMarker:PropTypes.func,/** Whether to replace an attribute value containing an URL to an image with an inline image. */replaceImageUrls:PropTypes.bool,selection:PropTypes.object,setCurrentTask:PropTypes.func,/** Whether to show a layer selector to filter the identify results by layer. */showLayerSelector:PropTypes.bool,theme:PropTypes.object});_defineProperty(Identify,"defaultProps",{enableExport:true,exportGeometry:true,clearResultsOnClose:true,customExporters:[],longAttributesDisplay:"ellipsis",displayResultTree:true,replaceImageUrls:true,featureInfoReturnsLayerName:true,geometry:{initialWidth:240,initialHeight:320,initialX:0,initialY:0,initiallyDocked:false,side:"left"},initialRadiusUnits:"m",highlightAllResults:true,showLayerSelector:true});export default connect(function(state){var enabled=state.task.id==="Identify"||state.task.identifyEnabled&&ConfigUtils.getConfigProp("identifyTool",state.theme.current,"Identify")==="Identify";return{click:state.map.click||{modifiers:{}},enabled:enabled,layers:state.layers.flat,map:state.map,selection:state.selection,theme:state.theme.current}},{addLayerFeatures:addLayerFeatures,addMarker:addMarker,removeMarker:removeMarker,removeLayer:removeLayer,setCurrentTask:setCurrentTask})(Identify);
@@ -0,0 +1,45 @@
1
+ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
2
+ * Copyright 2016-2024 Sourcepole AG
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */import React from"react";import{connect}from"react-redux";import axios from"axios";import PropTypes from"prop-types";import{addLayer,removeLayer,replacePlaceholderLayer}from"../actions/layers";import{setCurrentTask}from"../actions/task";import ResizeableWindow from"../components/ResizeableWindow";import LayerCatalogWidget from"../components/widgets/LayerCatalogWidget";import LocaleUtils from"../utils/LocaleUtils";import"./style/LayerCatalog.css";/**
8
+ * Displays a pre-configured catalog of external layers in a window.
9
+ *
10
+ * Configured through a catalog JSON containing a tree of external layer identifiers.
11
+ *
12
+ * For `wms` layers, `sublayers: false` denotes that the sublayer structure of the added layer should not
13
+ * be exposed in the layer tree.
14
+ *
15
+ * Example:
16
+ * ```json
17
+ * {
18
+ * "catalog": [
19
+ * {
20
+ * "title": "Öffentlicher Verkehr swissTLMRegio",
21
+ * "resource": "wms:http://wms.geo.admin.ch#ch.swisstopo.vec200-transportation-oeffentliche-verkehr",
22
+ * "sublayers": false
23
+ * },
24
+ * {
25
+ * "title": "Gewässerschutz",
26
+ * "resource": "wms:https://geo.so.ch/api/wms#ch.so.afu.gewaesserschutz[50]"
27
+ * },
28
+ * {
29
+ * "title": "Landeskarten",
30
+ * "sublayers": [
31
+ * {
32
+ * "title": "Landeskarte 1:1 Million | LK1000",
33
+ * "resource": "wms:http://wms.geo.admin.ch#ch.swisstopo.pixelkarte-farbe-pk1000.noscale"
34
+ * },
35
+ * {
36
+ * "title": "Landeskarte 1:100`000 | LK100",
37
+ * "resource": "wms:http://wms.geo.admin.ch#ch.swisstopo.pixelkarte-farbe-pk100.noscale"
38
+ * }
39
+ * ]
40
+ * }
41
+ * ]
42
+ * }
43
+ * ```
44
+ */var LayerCatalog=/*#__PURE__*/function(_React$Component){function LayerCatalog(){var _this;_classCallCheck(this,LayerCatalog);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,LayerCatalog,[].concat(args));_defineProperty(_this,"state",{catalog:null});_defineProperty(_this,"setCatalog",function(response){_this.setState({catalog:response.data.catalog||[]});_this.props.setCurrentTask("LayerTree")});_defineProperty(_this,"onClose",function(){_this.setState({catalog:null})});return _this}_inherits(LayerCatalog,_React$Component);return _createClass(LayerCatalog,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this2=this;if(this.props.active&&!prevProps.active&&this.props.catalogUrl){axios.get(this.props.catalogUrl).then(this.setCatalog)["catch"](function(e){_this2.setState({catalog:[]});// eslint-disable-next-line
45
+ console.warn("Failed to load catalog: "+e)})}}},{key:"render",value:function render(){if(!this.state.catalog){return null}return/*#__PURE__*/React.createElement(ResizeableWindow,{dockable:this.props.geometry.side,icon:"catalog",initialHeight:this.props.geometry.initialHeight,initialWidth:this.props.geometry.initialWidth,initialX:this.props.geometry.initialX,initialY:this.props.geometry.initialY,initiallyDocked:this.props.geometry.initiallyDocked,onClose:this.onClose,title:LocaleUtils.tr("layercatalog.windowtitle")},/*#__PURE__*/React.createElement("div",{className:"layer-catalog",role:"body"},/*#__PURE__*/React.createElement(LayerCatalogWidget,{addLayer:this.props.addLayer,catalog:this.state.catalog,levelBasedIndentSize:this.props.levelBasedIndentSize,pendingRequests:0,removeLayer:this.props.removeLayer,replacePlaceholderLayer:this.props.replacePlaceholderLayer})))}}])}(React.Component);_defineProperty(LayerCatalog,"propTypes",{active:PropTypes.bool,addLayer:PropTypes.func,/** The URL to the catalog JSON file. */catalogUrl:PropTypes.string,/** Default window geometry with size, position and docking status. Positive position values (including '0') are related to top (InitialY) and left (InitialX), negative values (including '-0') to bottom (InitialY) and right (InitialX). */geometry:PropTypes.shape({initialWidth:PropTypes.number,initialHeight:PropTypes.number,initialX:PropTypes.number,initialY:PropTypes.number,initiallyDocked:PropTypes.bool,side:PropTypes.string}),/** Whether to increase the indent size dynamically according to the current level (`true`) or keep the indent size constant (`false`). */levelBasedIndentSize:PropTypes.bool,removeLayer:PropTypes.func,replacePlaceholderLayer:PropTypes.func,setCurrentTask:PropTypes.func});_defineProperty(LayerCatalog,"defaultProps",{geometry:{initialWidth:320,initialHeight:320,initialX:0,initialY:0,initiallyDocked:false,side:"left"},levelBasedIndentSize:true});export default connect(function(state){return{active:state.task.id==="LayerCatalog"}},{addLayer:addLayer,removeLayer:removeLayer,replacePlaceholderLayer:replacePlaceholderLayer,setCurrentTask:setCurrentTask})(LayerCatalog);
@@ -0,0 +1,15 @@
1
+ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _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 _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 _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
2
+ * Copyright 2016-2024 Sourcepole AG
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */import React from"react";import{connect}from"react-redux";import Sortable from"react-sortablejs";import classnames from"classnames";import FileSaver from"file-saver";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{setActiveLayerInfo}from"../actions/layerinfo";import{LayerRole,changeLayerProperty,removeLayer,reorderLayer,setSwipe,addLayerSeparator}from"../actions/layers";import{toggleMapTips,zoomToExtent}from"../actions/map";import{setActiveServiceInfo}from"../actions/serviceinfo";import{setCurrentTask}from"../actions/task";import Icon from"../components/Icon";import ImportLayer from"../components/ImportLayer";import LayerInfoWindow from"../components/LayerInfoWindow";import ResizeableWindow from"../components/ResizeableWindow";import ServiceInfoWindow from"../components/ServiceInfoWindow";import SideBar from"../components/SideBar";import{Image}from"../components/widgets/Primitives";import Spinner from"../components/widgets/Spinner";import ConfigUtils from"../utils/ConfigUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import MiscUtils from"../utils/MiscUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import"./style/LayerTree.css";/**
8
+ * Displays the map layer tree in a sidebar.
9
+ *
10
+ * The print legend functionality requires a template located by default at assets/templates/legendprint.html
11
+ * with containing a container element with id=legendcontainer.
12
+ */var LayerTree=/*#__PURE__*/function(_React$Component){function LayerTree(props){var _this;_classCallCheck(this,LayerTree);_this=_callSuper(this,LayerTree,[props]);_defineProperty(_this,"state",{activemenu:null,activestylemenu:null,legendTooltip:null,sidebarwidth:null,importvisible:false,filtervisiblelayers:false,legendPrintVisible:false});_defineProperty(_this,"renderSubLayers",function(layer,group,path,enabled){var inMutuallyExclusiveGroup=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;return(group.sublayers||[]).map(function(sublayer,idx){var subpath=[].concat(_toConsumableArray(path),[idx]);if(sublayer.sublayers){return _this.renderLayerGroup(layer,sublayer,subpath,enabled,inMutuallyExclusiveGroup)}else{return _this.renderLayer(layer,sublayer,subpath,enabled,inMutuallyExclusiveGroup)}})});_defineProperty(_this,"renderLayerGroup",function(layer,group,path,enabled){var inMutuallyExclusiveGroup=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;var flattenGroups=ConfigUtils.getConfigProp("flattenLayerTreeGroups",_this.props.theme)||_this.props.flattenGroups;if(flattenGroups){return _this.renderSubLayers(layer,group,path,enabled,false)}var subtreevisibility=LayerUtils.computeLayerVisibility(group);if(subtreevisibility===0&&_this.state.filtervisiblelayers){return null}var visibility=true;var checkboxstate="";if(_this.props.groupTogglesSublayers&&!inMutuallyExclusiveGroup){visibility=subtreevisibility>0;if(subtreevisibility===1){checkboxstate="checked"}else if(subtreevisibility===0){checkboxstate="unchecked"}else{checkboxstate="tristate"}}else{visibility=group.visibility===undefined?subtreevisibility>0:group.visibility;if(visibility){checkboxstate=subtreevisibility===1?"checked":"tristate"}else{checkboxstate="unchecked"}}var omitqueryable;var identifyableClassName="";var subtreequeryable=LayerUtils.computeLayerQueryable(group);if(subtreequeryable===1){identifyableClassName="layertree-item-identifyable-checked";omitqueryable=false}else if(subtreequeryable===0){identifyableClassName="layertree-item-identifyable-unchecked";omitqueryable=true}else{identifyableClassName="layertree-item-identifyable-tristate";omitqueryable=true}if(inMutuallyExclusiveGroup){checkboxstate="radio_"+checkboxstate}var expanderstate=group.expanded?"tree_minus":"tree_plus";var showExpander=!_this.props.onlyGroups||(group.sublayers||[]).some(function(sublayer){return sublayer.sublayers});var itemclasses={"layertree-item":true,"layertree-item-disabled":!_this.props.groupTogglesSublayers&&!enabled||_this.props.grayUnchecked&&!visibility};var sublayersContent=null;if(group.expanded){sublayersContent=_this.renderSubLayers(layer,group,path,enabled&&visibility,group.mutuallyExclusive===true)}var optMenuClasses=classnames({"layertree-item-menubutton":true,"layertree-item-menubutton-active":_this.state.activemenu===group.uuid});var styleMenuClasses=classnames({"layertree-item-menubutton":true,"layertree-item-menubutton-active":_this.state.activestylemenu===group.uuid});var allowRemove=ConfigUtils.getConfigProp("allowRemovingThemeLayers",_this.props.theme)===true||layer.role!==LayerRole.THEME;var allowReordering=ConfigUtils.getConfigProp("allowReorderingLayers",_this.props.theme)===true&&!_this.state.filtervisiblelayers;var sortable=allowReordering&&ConfigUtils.getConfigProp("preventSplittingGroupsWhenReordering",_this.props.theme)===true;var styles=layer.type==="wms"&&path.length===0?_this.getLayerStyles(layer):null;return/*#__PURE__*/React.createElement("div",{className:"layertree-item-container","data-id":JSON.stringify({layer:layer.uuid,path:path}),key:group.uuid},/*#__PURE__*/React.createElement("div",{className:classnames(itemclasses)},showExpander?/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-expander",icon:expanderstate,onClick:function onClick(){return _this.groupExpandedToggled(layer,path,group.expanded)}}):/*#__PURE__*/React.createElement("span",{className:"layertree-item-expander"}),/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-checkbox",icon:checkboxstate,onClick:function onClick(){return _this.itemVisibilityToggled(layer,path,visibility)}}),/*#__PURE__*/React.createElement("span",{className:"layertree-item-title",onClick:function onClick(){return _this.itemVisibilityToggled(layer,path,visibility)},title:group.title},group.title),LayerUtils.hasQueryableSublayers(group)&&_this.props.allowSelectIdentifyableLayers?/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-identifyable "+identifyableClassName,icon:"info-sign",onClick:function onClick(){return _this.itemOmitQueryableToggled(layer,path,omitqueryable)}}):null,/*#__PURE__*/React.createElement("span",{className:"layertree-item-spacer"}),!isEmpty(styles)?/*#__PURE__*/React.createElement(Icon,{className:styleMenuClasses,icon:"paint",onClick:function onClick(){return _this.layerStyleMenuToggled(group.uuid)}}):null,/*#__PURE__*/React.createElement(Icon,{className:optMenuClasses,icon:"cog",onClick:function onClick(){return _this.layerMenuToggled(group.uuid)}}),allowRemove?/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-remove",icon:"trash",onClick:function onClick(){return _this.props.removeLayer(layer.id,path)}}):null),_this.state.activemenu===group.uuid?_this.renderOptionsMenu(layer,group,path,allowRemove):null,_this.state.activestylemenu===group.uuid?_this.renderStyleMenu(styles,_this.getSelectedStyles(layer),function(style){return _this.applyLayerStyle(style,layer)}):null,/*#__PURE__*/React.createElement(Sortable,{onChange:_this.onSortChange,options:{disabled:sortable===false,ghostClass:"drop-ghost",delay:200,forceFallback:_this.props.fallbackDrag}},sublayersContent))});_defineProperty(_this,"renderLayer",function(layer,sublayer,path){var enabled=arguments.length>3&&arguments[3]!==undefined?arguments[3]:true;var inMutuallyExclusiveGroup=arguments.length>4&&arguments[4]!==undefined?arguments[4]:false;var skipExpanderPlaceholder=arguments.length>5&&arguments[5]!==undefined?arguments[5]:false;if(_this.props.onlyGroups){return null}if(_this.state.filtervisiblelayers&&!sublayer.visibility){return null}if(Array.isArray(layer.layerTreeHiddenSublayers)&&layer.layerTreeHiddenSublayers.includes(sublayer.name)){return null}var allowRemove=ConfigUtils.getConfigProp("allowRemovingThemeLayers",_this.props.theme)===true||layer.role!==LayerRole.THEME;var allowReordering=ConfigUtils.getConfigProp("allowReorderingLayers",_this.props.theme)===true;var checkboxstate=sublayer.visibility===true?"checked":"unchecked";if(inMutuallyExclusiveGroup){checkboxstate="radio_"+checkboxstate}var optMenuClasses=classnames({"layertree-item-menubutton":true,"layertree-item-menubutton-active":_this.state.activemenu===sublayer.uuid});var styleMenuClasses=classnames({"layertree-item-menubutton":true,"layertree-item-menubutton-active":_this.state.activestylemenu===sublayer.uuid});var itemclasses={"layertree-item":true,"layertree-item-disabled":layer.type!=="separator"&&(!_this.props.groupTogglesSublayers&&!enabled||_this.props.grayUnchecked&&!sublayer.visibility),"layertree-item-separator":layer.type==="separator","layertree-item-outsidescalerange":sublayer.minScale!==undefined&&_this.props.mapScale<sublayer.minScale||sublayer.maxScale!==undefined&&_this.props.mapScale>sublayer.maxScale};var infoButton=null;if(layer.type==="wms"||layer.type==="wfs"||layer.type==="wmts"){infoButton=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-metadata",icon:"info-sign",onClick:function onClick(){return _this.props.setActiveLayerInfo(layer,sublayer)}})}var legendicon=null;if(_this.props.showLegendIcons){var legendUrl=LayerUtils.getLegendUrl(layer,sublayer,_this.props.mapScale,_this.props.map,_this.props.bboxDependentLegend,_this.props.scaleDependentLegend,_this.props.extraLegendParameters);if(legendUrl){legendicon=/*#__PURE__*/React.createElement(Image,{className:"layertree-item-legend-thumbnail",onMouseOut:_this.hideLegendTooltip,onMouseOver:function onMouseOver(ev){return _this.showLegendTooltip(ev,legendUrl)},onTouchStart:function onTouchStart(ev){return _this.showLegendTooltip(ev,legendUrl)},src:legendUrl+"&TYPE=thumbnail"})}else if(layer.color){legendicon=/*#__PURE__*/React.createElement("span",{className:"layertree-item-legend-coloricon",style:{backgroundColor:layer.color}})}}var checkbox=null;if(layer.type==="placeholder"){checkbox=/*#__PURE__*/React.createElement(Spinner,null)}else if(layer.type==="separator"){checkbox=null}else{checkbox=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-checkbox",icon:checkboxstate,onClick:function onClick(){return _this.itemVisibilityToggled(layer,path,sublayer.visibility)}})}var title=null;if(layer.type==="separator"){title=/*#__PURE__*/React.createElement("input",{onChange:function onChange(ev){return _this.props.changeLayerProperty(layer.uuid,"title",ev.target.value)},value:sublayer.title})}else{title=/*#__PURE__*/React.createElement("span",{className:"layertree-item-title",onClick:function onClick(){return _this.itemVisibilityToggled(layer,path,sublayer.visibility)},title:sublayer.title},sublayer.title)}var queryableicon=null;if(_this.props.allowSelectIdentifyableLayers){var identifyableClassName=!sublayer.omitFromQueryLayers?"layertree-item-identifyable-checked":"layertree-item-identifyable-unchecked";queryableicon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-identifyable "+identifyableClassName,icon:"info-sign",onClick:function onClick(){return _this.itemOmitQueryableToggled(layer,path,sublayer.omitFromQueryLayers)}})}else{queryableicon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-queryable",icon:"info-sign"})}var allowOptions=layer.type!=="placeholder"&&layer.type!=="separator";var flattenGroups=ConfigUtils.getConfigProp("flattenLayerTreeGroups",_this.props.theme)||_this.props.flattenGroups;var allowSeparators=flattenGroups&&allowReordering&&ConfigUtils.getConfigProp("allowLayerTreeSeparators",_this.props.theme);var separatorTitle=LocaleUtils.tr("layertree.separator");var separatorTooltip=LocaleUtils.tr("layertree.separatortooltip");return/*#__PURE__*/React.createElement("div",{className:"layertree-item-container","data-id":JSON.stringify({layer:layer.uuid,path:path}),key:sublayer.uuid},allowSeparators?/*#__PURE__*/React.createElement("div",{className:"layertree-item-addsep",onClick:function onClick(){return _this.props.addLayerSeparator(separatorTitle,layer.id,path)},title:separatorTooltip}):null,/*#__PURE__*/React.createElement("div",{className:classnames(itemclasses)},flattenGroups||skipExpanderPlaceholder?null:/*#__PURE__*/React.createElement("span",{className:"layertree-item-expander"}),checkbox,legendicon,title,sublayer.queryable&&_this.props.showQueryableIcon?queryableicon:null,sublayer.name in(_this.props.filter.filterParams||{})||_this.props.filter.filterGeom?/*#__PURE__*/React.createElement(Icon,{icon:"filter"}):null,_this.props.loadingLayers.includes(layer.id)?/*#__PURE__*/React.createElement(Spinner,null):null,/*#__PURE__*/React.createElement("span",{className:"layertree-item-spacer"}),allowOptions&&!_this.props.infoInSettings?infoButton:null,Object.keys(sublayer.styles||{}).length>1?/*#__PURE__*/React.createElement(Icon,{className:styleMenuClasses,icon:"paint",onClick:function onClick(){return _this.layerStyleMenuToggled(sublayer.uuid)}}):null,allowOptions?/*#__PURE__*/React.createElement(Icon,{className:optMenuClasses,icon:"cog",onClick:function onClick(){return _this.layerMenuToggled(sublayer.uuid)}}):null,allowRemove?/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-remove",icon:"trash",onClick:function onClick(){return _this.props.removeLayer(layer.id,path)}}):null),_this.state.activemenu===sublayer.uuid?_this.renderOptionsMenu(layer,sublayer,path,allowRemove):null,_this.state.activestylemenu===sublayer.uuid?_this.renderStyleMenu(sublayer.styles,[sublayer.style],function(style){return _this.layerStyleChanged(layer,path,style)}):null)});_defineProperty(_this,"renderOptionsMenu",function(layer,sublayer,path){var marginRight=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var allowReordering=ConfigUtils.getConfigProp("allowReorderingLayers",_this.props.theme)===true;var reorderButtons=null;if(allowReordering&&!_this.state.filtervisiblelayers){reorderButtons=[/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-move",icon:"arrow-down",key:"layertree-item-move-down",onClick:function onClick(){return _this.props.reorderLayer(layer,path,+1)}}),/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-move",icon:"arrow-up",key:"layertree-item-move-up",onClick:function onClick(){return _this.props.reorderLayer(layer,path,-1)}})]}var zoomToLayerButton=null;if(sublayer.bbox&&sublayer.bbox.bounds){var zoomToLayerTooltip=LocaleUtils.tr("layertree.zoomtolayer");var crs=sublayer.bbox.crs||_this.props.map.projection;zoomToLayerButton=/*#__PURE__*/React.createElement(Icon,{icon:"zoom",onClick:function onClick(){return _this.props.zoomToExtent(sublayer.bbox.bounds,crs)},title:zoomToLayerTooltip})}var infoButton=null;if(_this.props.infoInSettings&&(layer.type==="wms"||layer.type==="wfs"||layer.type==="wmts")){infoButton=/*#__PURE__*/React.createElement(Icon,{className:"layertree-item-metadata",icon:"info-sign",onClick:function onClick(){return _this.props.setActiveLayerInfo(layer,sublayer)}})}var attrTableButton=null;if(_this.props.showAttributeTableLink&&ConfigUtils.havePlugin("AttributeTable")&&layer.role===LayerRole.THEME&&_this.props.theme.editConfig[sublayer.name]){attrTableButton=/*#__PURE__*/React.createElement(Icon,{icon:"editing",onClick:function onClick(){return _this.props.setCurrentTask("AttributeTable",null,null,{layer:sublayer.name})}})}return/*#__PURE__*/React.createElement("div",{className:"layertree-item-optionsmenu",onMouseDown:_this.preventLayerTreeItemDrag,style:{marginRight:marginRight*1.75+"em"}},zoomToLayerButton,_this.props.transparencyIcon?/*#__PURE__*/React.createElement(Icon,{icon:"transparency"}):LocaleUtils.tr("layertree.transparency"),/*#__PURE__*/React.createElement("input",{className:"layertree-item-transparency-slider",max:"255",min:"0",onChange:function onChange(ev){return _this.layerTransparencyChanged(layer,path,ev.target.value,!isEmpty(sublayer.sublayers)?"children":null)},step:"1",type:"range",value:255-LayerUtils.computeLayerOpacity(sublayer)}),reorderButtons,infoButton,attrTableButton,layer.type==="vector"?/*#__PURE__*/React.createElement(Icon,{icon:"export",onClick:function onClick(){return _this.exportRedliningLayer(layer)}}):null)});_defineProperty(_this,"renderStyleMenu",function(styles,selectedStyles,onStyleChange){var marginRight=arguments.length>3&&arguments[3]!==undefined?arguments[3]:0;var checkedIcon=selectedStyles.length===1?"radio_checked":"radio_tristate";return/*#__PURE__*/React.createElement("div",{className:"layertree-item-stylemenu",style:{marginRight:marginRight*1.75+"em"}},Object.entries(styles).map(function(_ref){var _ref2=_slicedToArray(_ref,2),name=_ref2[0],title=_ref2[1];return/*#__PURE__*/React.createElement("div",{key:name,onClick:function onClick(){return onStyleChange(name)}},/*#__PURE__*/React.createElement(Icon,{icon:selectedStyles.includes(name)?checkedIcon:"radio_unchecked"}),/*#__PURE__*/React.createElement("div",null,title))}))});_defineProperty(_this,"preventLayerTreeItemDrag",function(ev){var draggableEl=ev.currentTarget.parentNode;if(draggableEl.draggable){draggableEl.draggable=false;document.addEventListener("mouseup",function(){draggableEl.draggable=true},{once:true})}});_defineProperty(_this,"renderLayerTree",function(layers){var flattenGroups=ConfigUtils.getConfigProp("flattenLayerTreeGroups",_this.props.theme)||_this.props.flattenGroups;var haveGroups=!flattenGroups&&layers.find(function(layer){if(!_this.props.showRootEntry){return(layer.sublayers||[]).find(function(sublayer){return!isEmpty(sublayer.sublayers)})}else{return!isEmpty(layer.sublayers)}});return layers.map(function(layer){if(isEmpty(layer.sublayers)&&layer.role!==LayerRole.THEME){return _this.renderLayer(layer,layer,[],layer.visibility,false,!haveGroups)}else if(_this.props.showRootEntry){return _this.renderLayerGroup(layer,layer,[],layer.visibility)}else{return layer.sublayers.map(function(sublayer,idx){var subpath=[idx];if(sublayer.sublayers){return _this.renderLayerGroup(layer,sublayer,subpath,layer.visibility)}else{return _this.renderLayer(layer,sublayer,subpath,layer.visibility,false,!haveGroups)}})}})});_defineProperty(_this,"renderBody",function(){var maptipcheckboxstate=_this.props.mapTipsEnabled===true?"checked":"unchecked";var maptipCheckbox=null;var maptipsEnabled=false;if(_this.props.theme.mapTips!==undefined){maptipsEnabled=_this.props.theme.mapTips!==null&&_this.props.allowMapTips}else{maptipsEnabled=_this.props.allowMapTips}if(!ConfigUtils.isMobile()&&maptipsEnabled){maptipCheckbox=/*#__PURE__*/React.createElement("div",{className:"layertree-option"},/*#__PURE__*/React.createElement(Icon,{icon:maptipcheckboxstate,onClick:_this.toggleMapTips}),/*#__PURE__*/React.createElement("span",{onClick:_this.toggleMapTips},LocaleUtils.tr("layertree.maptip")))}var allowReordering=ConfigUtils.getConfigProp("allowReorderingLayers",_this.props.theme)===true&&!_this.state.filtervisiblelayers;var haveMapCompare=ConfigUtils.havePlugin("MapCompare");var compareCheckbox=null;if(haveMapCompare&&_this.props.allowCompare&&allowReordering){var swipecheckboxstate=_this.props.swipe||_this.props.swipe===0?"checked":"unchecked";compareCheckbox=/*#__PURE__*/React.createElement("div",{className:"layertree-option"},/*#__PURE__*/React.createElement(Icon,{icon:swipecheckboxstate,onClick:_this.toggleSwipe}),/*#__PURE__*/React.createElement("span",{onClick:_this.toggleSwipe},LocaleUtils.tr("layertree.compare")))}var layerImportExpander=null;if(_this.props.allowImport){layerImportExpander=/*#__PURE__*/React.createElement("div",{className:"layertree-option",onClick:_this.toggleImportLayers},/*#__PURE__*/React.createElement(Icon,{icon:_this.state.importvisible?"collapse":"expand"})," ",LocaleUtils.tr("layertree.importlayer"))}var flattenGroups=ConfigUtils.getConfigProp("flattenLayerTreeGroups",_this.props.theme)||_this.props.flattenGroups;var sortable=allowReordering&&(ConfigUtils.getConfigProp("preventSplittingGroupsWhenReordering",_this.props.theme)===true||flattenGroups===true);var treelayers=_this.props.layers.filter(function(layer){return layer.role!==LayerRole.BACKGROUND&&!layer.layertreehidden});return/*#__PURE__*/React.createElement("div",{className:"layertree-container-wrapper",role:"body"},/*#__PURE__*/React.createElement("div",{className:"layertree-container"},/*#__PURE__*/React.createElement("div",{className:"layertree-tree",onContextMenuCapture:function onContextMenuCapture(ev){// Prevent context menu on drag-sort
13
+ ev.stopPropagation();ev.preventDefault();return false},onTouchEnd:function onTouchEnd(ev){var target=ev.currentTarget;clearTimeout(target.preventScrollTimeout);target.preventScrollTimeout=null;target.removeEventListener("touchmove",MiscUtils.killEvent)},onTouchStart:function onTouchStart(ev){// Prevent touch-scroll after sortable trigger delay
14
+ var target=ev.currentTarget;target.preventScrollTimeout=setTimeout(function(){target.addEventListener("touchmove",MiscUtils.killEvent,{passive:false})},200)},ref:MiscUtils.setupKillTouchEvents},/*#__PURE__*/React.createElement(Sortable,{onChange:_this.onSortChange,options:{disabled:sortable===false,ghostClass:"drop-ghost",delay:200,forceFallback:_this.props.fallbackDrag}},_this.renderLayerTree(treelayers))),maptipCheckbox,compareCheckbox,layerImportExpander,_this.state.importvisible?/*#__PURE__*/React.createElement(ImportLayer,{theme:_this.props.theme}):null))});_defineProperty(_this,"renderLegendPrintWindow",function(){if(!_this.state.legendPrintVisible){return null}var setLegendPrintContents=function setLegendPrintContents(el){if(!el){return}el.addEventListener("load",function(){var container=el.contentWindow.document.getElementById("legendcontainer");if(container){var body="<p id=\"legendcontainerbody\">";body+=_this.props.layers.map(function(layer){if(!layer.visibility){return""}else if(layer.legendUrl){return _this.printLayerLegend(layer,layer)}else if(layer.color){return"<div class=\"legend-entry\"><span style=\"display: inline-block; width: 1em; height: 1em; box-shadow: inset 0 0 0 1000px "+layer.color+"; margin: 0.25em; border: 1px solid black;\">&nbsp;</span>"+(layer.title||layer.name)+"</div>"}else{return""}}).join("");body+="</p>";container.innerHTML=body}else{_this.legendPrintWindow.document.body.innerHTML="Broken template. An element with id=legendcontainer must exist."}})};var printLegend=function printLegend(ev){ev.target.parentElement.parentElement.getElementsByTagName("iframe")[0].contentWindow.print()};return/*#__PURE__*/React.createElement(ResizeableWindow,{icon:"print",initialHeight:0.75*window.innerHeight,initialWidth:0.5*window.innerWidth,onClose:function onClose(){return _this.setState({legendPrintVisible:false})},title:LocaleUtils.tr("layertree.printlegend")},/*#__PURE__*/React.createElement("div",{className:"layertree-legend-print-body",role:"body"},/*#__PURE__*/React.createElement("iframe",{ref:setLegendPrintContents,src:MiscUtils.resolveAssetsPath(_this.props.templatePath)}),/*#__PURE__*/React.createElement("div",{className:"layertree-legend-print-body-buttonbar"},/*#__PURE__*/React.createElement("button",{onClick:printLegend},LocaleUtils.tr("layertree.printlegend")))))});_defineProperty(_this,"legendTooltipLoaded",function(ev){if(ev.target.naturalWidth>1){ev.target.style.visibility="visible"}});_defineProperty(_this,"onSortChange",function(order,sortable,ev){var moved=JSON.parse(order[ev.newIndex]);var layer=_this.props.layers.find(function(l){return l.uuid===moved.layer});if(layer){_this.props.reorderLayer(layer,moved.path,ev.newIndex-ev.oldIndex)}});_defineProperty(_this,"toggleImportLayers",function(){_this.setState(function(state){var visible=!state.importvisible;return{importvisible:visible,sidebarwidth:visible?"40em":null}})});_defineProperty(_this,"propagateOptions",function(layer,options){var path=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;if(layer.sublayers){layer.sublayers=layer.sublayers.map(function(sublayer,idx){if(path===null||!isEmpty(path)&&path[0]===idx){var newsublayer=_objectSpread(_objectSpread({},sublayer),options);_this.propagateOptions(newsublayer,options,path?path.slice(1):null);return newsublayer}else{return sublayer}})}});_defineProperty(_this,"groupExpandedToggled",function(layer,grouppath,oldexpanded){_this.props.changeLayerProperty(layer.uuid,"expanded",!oldexpanded,grouppath)});_defineProperty(_this,"itemVisibilityToggled",function(layer,grouppath,oldvisibility){var recurseDirection=null;// If item becomes visible, also make parents visible
15
+ if(_this.props.groupTogglesSublayers){recurseDirection=!oldvisibility?"both":"children"}else{recurseDirection=!oldvisibility?"parents":null}_this.props.changeLayerProperty(layer.uuid,"visibility",!oldvisibility,grouppath,recurseDirection)});_defineProperty(_this,"itemOmitQueryableToggled",function(layer,grouppath,oldomitqueryable){_this.props.changeLayerProperty(layer.uuid,"omitFromQueryLayers",!oldomitqueryable,grouppath,"children")});_defineProperty(_this,"layerTransparencyChanged",function(layer,sublayerpath,value){var recurse=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;_this.props.changeLayerProperty(layer.uuid,"opacity",Math.max(1,255-value),sublayerpath,recurse)});_defineProperty(_this,"layerStyleChanged",function(layer,sublayerpath,value){var recurseDirection=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;_this.props.changeLayerProperty(layer.uuid,"style",value,sublayerpath,recurseDirection)});_defineProperty(_this,"layerMenuToggled",function(sublayeruuid){_this.setState(function(state){return{activemenu:state.activemenu===sublayeruuid?null:sublayeruuid,activestylemenu:null}})});_defineProperty(_this,"layerStyleMenuToggled",function(sublayeruuid){_this.setState(function(state){return{activestylemenu:state.activestylemenu===sublayeruuid?null:sublayeruuid,activemenu:null}})});_defineProperty(_this,"showLegendTooltip",function(ev,request){_this.setState({legendTooltip:{x:ev.target.getBoundingClientRect().right,y:ev.target.getBoundingClientRect().top,img:request+"&TYPE=tooltip"}})});_defineProperty(_this,"hideLegendTooltip",function(){_this.setState({legendTooltip:undefined})});_defineProperty(_this,"toggleMapTips",function(){_this.props.toggleMapTips(!_this.props.mapTipsEnabled)});_defineProperty(_this,"toggleSwipe",function(){_this.props.setSwipe(_this.props.swipe!==null?null:50)});_defineProperty(_this,"printLayerLegend",function(layer,sublayer){var body="";if(sublayer.sublayers){if(sublayer.visibility){body="<div class=\"legend-group\">"+"<h3 class=\"legend-group-title\">"+(sublayer.title||sublayer.name)+"</h3>"+"<div class=\"legend-group-body\">"+sublayer.sublayers.map(function(subsublayer){return _this.printLayerLegend(layer,subsublayer)}).join("\n")+"</div>"+"</div>"}}else{if(sublayer.visibility&&LayerUtils.layerScaleInRange(sublayer,_this.props.mapScale)){var request=LayerUtils.getLegendUrl(layer,{name:sublayer.name},_this.props.mapScale,_this.props.map,_this.props.bboxDependentLegend,_this.props.scaleDependentLegend,_this.props.extraLegendParameters);body=request?"<div class=\"legend-entry\"><img src=\""+request+"\" /></div>":""}}return body});_defineProperty(_this,"deleteAllLayers",function(){var _iterator=_createForOfIteratorHelper(_this.props.layers),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var layer=_step.value;if(layer.role===LayerRole.THEME){var sublayers=layer.sublayers||[];for(var i=sublayers.length-1;i>=0;--i){_this.props.removeLayer(layer.id,[i])}}else if(layer.role===LayerRole.USERLAYER){_this.props.removeLayer(layer.id)}}}catch(err){_iterator.e(err)}finally{_iterator.f()}});_defineProperty(_this,"toggleLayerTreeVisibility",function(visibile){var _iterator2=_createForOfIteratorHelper(_this.props.layers),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var layer=_step2.value;if(layer.role===LayerRole.THEME||layer.role===LayerRole.USERLAYER){_this.props.changeLayerProperty(layer.uuid,"visibility",visibile,[],_this.props.groupTogglesSublayers?"children":null)}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}});_defineProperty(_this,"exportRedliningLayer",function(layer){var data=JSON.stringify({type:"FeatureCollection",features:layer.features.map(function(feature){var newFeature=_objectSpread(_objectSpread({},feature),{},{geometry:VectorLayerUtils.reprojectGeometry(feature.geometry,feature.crs||_this.props.map.projection,"EPSG:4326")});delete newFeature.crs;return newFeature})},null," ");FileSaver.saveAs(new Blob([data],{type:"text/plain;charset=utf-8"}),layer.title+".json")});_defineProperty(_this,"getSelectedStyles",function(layer){var _layer$params;return _toConsumableArray(new Set((((_layer$params=layer.params)===null||_layer$params===void 0?void 0:_layer$params.STYLES)||"").split(",").filter(Boolean)))});_defineProperty(_this,"getLayerStyles",function(layer){var _layer$sublayers;return layer===null||layer===void 0||(_layer$sublayers=layer.sublayers)===null||_layer$sublayers===void 0?void 0:_layer$sublayers.reduce(function(styleList,sublayer){Object.assign(styleList,_this.getLayerStyles(sublayer.sublayers));return Object.assign(styleList,sublayer.styles)},{})});_defineProperty(_this,"applyLayerStyle",function(style,layer){var path=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];var layerUuid=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;layerUuid=layerUuid!==null&&layerUuid!==void 0?layerUuid:layer.uuid;(layer.sublayers||[]).forEach(function(sublayer,idx){_this.applyLayerStyle(style,sublayer,[].concat(_toConsumableArray(path),[idx]),layerUuid);if(style in(sublayer.styles||{})){_this.props.changeLayerProperty(layerUuid,"style",style,[].concat(_toConsumableArray(path),[idx]))}})});_this.legendPrintWindow=null;window.addEventListener("beforeunload",function(){if(_this.legendPrintWindow&&!_this.legendPrintWindow.closed){_this.legendPrintWindow.close()}});return _this}_inherits(LayerTree,_React$Component);return _createClass(LayerTree,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){if(this.props.theme.mapTips!==undefined&&this.props.theme.mapTips!==prevProps.theme.mapTips){this.props.toggleMapTips(this.props.theme.mapTips&&!ConfigUtils.isMobile())}}},{key:"render",value:function render(){var _this2=this;var legendTooltip=null;if(this.state.legendTooltip){var style={left:this.state.legendTooltip.x,top:this.state.legendTooltip.y,maxWidth:window.innerWidth-this.state.legendTooltip.x-2,maxHeight:window.innerHeight-this.state.legendTooltip.y-2,visibility:"hidden"};legendTooltip=/*#__PURE__*/React.createElement(Image,{className:"layertree-item-legend-tooltip",onLoad:this.legendTooltipLoaded,onTouchStart:this.hideLegendTooltip,src:this.state.legendTooltip.img,style:style})}var legendPrintIcon=null;if(this.props.enableLegendPrint){legendPrintIcon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-print-legend",icon:"print",onClick:function onClick(){return _this2.setState({legendPrintVisible:true})},title:LocaleUtils.tr("layertree.printlegend")})}var visibleFilterIcon=null;if(this.props.enableVisibleFilter){var visibleFilterTooltip=LocaleUtils.tr("layertree.visiblefilter");var classes=classnames({"layertree-visible-filter":true,"layertree-visible-filter-active":this.state.filtervisiblelayers});visibleFilterIcon=/*#__PURE__*/React.createElement(Icon,{className:classes,icon:"eye",onClick:function onClick(){return _this2.setState(function(state){return{filtervisiblelayers:!state.filtervisiblelayers}})},title:visibleFilterTooltip})}var deleteAllLayersIcon=null;if(ConfigUtils.getConfigProp("allowRemovingThemeLayers")===true){var deleteAllLayersTooltip=LocaleUtils.tr("layertree.deletealllayers");deleteAllLayersIcon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-delete-legend",icon:"trash",onClick:this.deleteAllLayers,title:deleteAllLayersTooltip})}var serviceInfoIcon=null;if(this.props.enableServiceInfo){serviceInfoIcon=/*#__PURE__*/React.createElement(Icon,{className:"layertree-theme-metadata",icon:"info-sign",onClick:function onClick(){return _this2.props.setActiveServiceInfo(_this2.props.theme)}})}var extraTitlebarContent=null;if(legendPrintIcon||deleteAllLayersIcon||visibleFilterIcon){extraTitlebarContent=/*#__PURE__*/React.createElement("span",null,legendPrintIcon,visibleFilterIcon,deleteAllLayersIcon,serviceInfoIcon)}var visibilities=[];var _iterator3=_createForOfIteratorHelper(this.props.layers),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var layer=_step3.value;if(layer.role===LayerRole.THEME||layer.role===LayerRole.USERLAYER){visibilities.push(LayerUtils.computeLayerVisibility(layer))}}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}var vis=visibilities.reduce(function(sum,x){return sum+x},0)/(visibilities.length||1);var visibilityIcon="tristate";if(vis===0){visibilityIcon="unchecked"}else if(vis===1){visibilityIcon="checked"}var visibilityCheckbox=this.props.showToggleAllLayersCheckbox?/*#__PURE__*/React.createElement(Icon,{className:"layertree-tree-visibility",icon:visibilityIcon,onClick:function onClick(){return _this2.toggleLayerTreeVisibility(vis===0)}}):null;return/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement(SideBar,{extraBeforeContent:visibilityCheckbox,extraTitlebarContent:extraTitlebarContent,icon:"layers",id:"LayerTree",onHide:this.hideLegendTooltip,side:this.props.side,title:LocaleUtils.tr("appmenu.items.LayerTree"),width:this.state.sidebarwidth||this.props.width},function(){return{body:_this2.renderBody()}}),legendTooltip,this.renderLegendPrintWindow(),/*#__PURE__*/React.createElement(LayerInfoWindow,{bboxDependentLegend:this.props.bboxDependentLegend,layerInfoGeometry:this.props.layerInfoGeometry,scaleDependentLegend:this.props.scaleDependentLegend}),/*#__PURE__*/React.createElement(ServiceInfoWindow,{layerInfoGeometry:this.props.layerInfoGeometry}))}}])}(React.Component);_defineProperty(LayerTree,"propTypes",{/** Whether to allow adding separator entries in the layer tree, useful for organizing the tree. */addLayerSeparator:PropTypes.func,/** Whether to enable the compare function. Requires the `MapCompare` plugin. */allowCompare:PropTypes.bool,/** Whether to allow importing external layers. */allowImport:PropTypes.bool,/** Whether to allow enabling map tips. */allowMapTips:PropTypes.bool,/** Whether to allow selection of identifyable layers. The `showQueryableIcon` property should be `true` to be able to select identifyable layers. */allowSelectIdentifyableLayers:PropTypes.bool,/** Whether to display a BBOX dependent legend. Can be `true|false|"theme"`, latter means only for theme layers. */bboxDependentLegend:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),changeLayerProperty:PropTypes.func,/** Whether to enable the legend print functionality. */enableLegendPrint:PropTypes.bool,/** Whether to display a service info button to display the WMS service metadata. */enableServiceInfo:PropTypes.bool,/** Whether to display a button to filter invisible layers from the layertree. */enableVisibleFilter:PropTypes.bool,/** Additional parameters to pass to the GetLegendGraphics request. */extraLegendParameters:PropTypes.string,/** Whether to use the fallback logic for drag-and-drop. */fallbackDrag:PropTypes.bool,filter:PropTypes.object,/** Whether to display a flat layer tree, omitting any groups. */flattenGroups:PropTypes.bool,/** Whether to display unchecked layers gray in the layertree. */grayUnchecked:PropTypes.bool,/** Whether toggling a group also toggles all sublayers. */groupTogglesSublayers:PropTypes.bool,/** Whether to display the layer info button inside the layer settings menu rather than next to the layer title. */infoInSettings:PropTypes.bool,/** Default layer info window geometry with size, position and docking status. */layerInfoGeometry:PropTypes.shape({initialWidth:PropTypes.number,initialHeight:PropTypes.number,initialX:PropTypes.number,initialY:PropTypes.number,initiallyDocked:PropTypes.bool}),layers:PropTypes.array,loadingLayers:PropTypes.array,map:PropTypes.object,mapScale:PropTypes.number,mapTipsEnabled:PropTypes.bool,mobile:PropTypes.bool,/** Whether to only display layer groups but not individual layers in layertree. */onlyGroups:PropTypes.bool,removeLayer:PropTypes.func,reorderLayer:PropTypes.func,/** Whether to display a scale dependent legend. Can be `true|false|"theme"`, latter means only for theme layers. */scaleDependentLegend:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),setActiveLayerInfo:PropTypes.func,setActiveServiceInfo:PropTypes.func,setCurrentTask:PropTypes.func,setSwipe:PropTypes.func,/** Whether to display an icon linking to the layer attribute table in the layer options menu. */showAttributeTableLink:PropTypes.bool,/** Whether to display legend icons. */showLegendIcons:PropTypes.bool,/** Whether to display the queryable icon to indicate that a layer is identifyable. */showQueryableIcon:PropTypes.bool,/** Whether to display the root entry of the layertree. */showRootEntry:PropTypes.bool,/** Whether to display a checkbox to toggle all layers. */showToggleAllLayersCheckbox:PropTypes.bool,/** The side of the application on which to display the sidebar. */side:PropTypes.string,swipe:PropTypes.number,/** Template location for the legend print functionality */templatePath:PropTypes.string,theme:PropTypes.object,toggleMapTips:PropTypes.func,transparencyIcon:PropTypes.bool,/** The initial width of the layertree, as a CSS width string. */width:PropTypes.string,zoomToExtent:PropTypes.func});_defineProperty(LayerTree,"defaultProps",{layers:[],showLegendIcons:true,showRootEntry:true,showQueryableIcon:true,allowMapTips:true,allowCompare:true,allowImport:true,allowSelectIdentifyableLayers:false,groupTogglesSublayers:false,grayUnchecked:true,layerInfoGeometry:{initialWidth:480,initialHeight:480,initialX:null,initialY:null,initiallyDocked:false},bboxDependentLegend:false,flattenGroups:false,onlyGroups:false,width:"25em",enableLegendPrint:true,enableVisibleFilter:true,enableServiceInfo:true,infoInSettings:true,showToggleAllLayersCheckbox:true,transparencyIcon:true,side:"right",templatePath:":/templates/legendprint.html"});var selector=function selector(state){return{layers:state.layers.flat,filter:state.layers.filter,loadingLayers:state.layers.loading,map:state.map,mapScale:MapUtils.computeForZoom(state.map.scales,state.map.zoom),swipe:state.layers.swipe,theme:state.theme.current||{},mapTipsEnabled:state.map.maptips}};export default connect(selector,{addLayerSeparator:addLayerSeparator,changeLayerProperty:changeLayerProperty,removeLayer:removeLayer,reorderLayer:reorderLayer,toggleMapTips:toggleMapTips,setSwipe:setSwipe,setActiveLayerInfo:setActiveLayerInfo,setActiveServiceInfo:setActiveServiceInfo,setCurrentTask:setCurrentTask,zoomToExtent:zoomToExtent})(LayerTree);
@@ -0,0 +1,10 @@
1
+ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _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 _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
2
+ * Copyright 2015-2016 GeoSolutions Sas
3
+ * Copyright 2016-2024 Sourcepole AG
4
+ * All rights reserved.
5
+ *
6
+ * This source code is licensed under the BSD-style license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */import React from"react";import{connect}from"react-redux";import classnames from"classnames";import PropTypes from"prop-types";import{changeLocateState}from"../actions/locate";import Icon from"../components/Icon";import Spinner from"../components/widgets/Spinner";import LocaleUtils from"../utils/LocaleUtils";import ThemeUtils from"../utils/ThemeUtils";import"./style/Buttons.css";/**
9
+ * Map button for controling the locate (GPS) state.
10
+ */var LocateButton=/*#__PURE__*/function(_React$Component){function LocateButton(){var _this;_classCallCheck(this,LocateButton);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,LocateButton,[].concat(args));_defineProperty(_this,"onClick",function(){if(_this.props.locateState==="DISABLED"){_this.props.changeLocateState("ENABLED")}else if(_this.props.locateState==="ENABLED"){_this.props.changeLocateState("FOLLOWING")}else{_this.props.changeLocateState("DISABLED")}});_defineProperty(_this,"render",function(){if(!ThemeUtils.themeFlagsAllowed(_this.props.theme,_this.props.themeFlagWhitelist,_this.props.themeFlagBlacklist)){return null}var right=_this.props.mapMargins.right;var bottom=_this.props.mapMargins.bottom;var style={right:"calc(1.5em + "+right+"px)",bottom:"calc(var(--bottombar-height) + "+bottom+"px + "+(3+4*_this.props.position)+"em)"};var tooltipMsg={DISABLED:LocaleUtils.tr("locate.statustooltip.DISABLED"),ENABLED:LocaleUtils.tr("locate.statustooltip.ENABLED"),FOLLOWING:LocaleUtils.tr("locate.statustooltip.FOLLOWING"),LOCATING:LocaleUtils.tr("locate.statustooltip.LOCATING"),PERMISSION_DENIED:LocaleUtils.tr("locate.statustooltip.PERMISSION_DENIED")};var contents=null;if(_this.props.locateState==="LOCATING"){contents=/*#__PURE__*/React.createElement(Spinner,null)}else{contents=/*#__PURE__*/React.createElement(Icon,{icon:"screenshot",title:tooltipMsg[_this.props.locateState]})}var classes=classnames(_defineProperty({"map-button":true},"locate-button-"+_this.props.locateState,true));return/*#__PURE__*/React.createElement("button",{className:classes,disabled:_this.props.locateState==="PERMISSION_DENIED",onClick:_this.onClick,style:style,title:tooltipMsg[_this.props.locateState]},contents)});return _this}_inherits(LocateButton,_React$Component);return _createClass(LocateButton)}(React.Component);_defineProperty(LocateButton,"propTypes",{changeLocateState:PropTypes.func,locateState:PropTypes.string,mapMargins:PropTypes.object,/** The position slot index of the map button, from the bottom (0: bottom slot). */position:PropTypes.number,theme:PropTypes.object,/** Omit the button in themes matching one of these flags. */themeFlagBlacklist:PropTypes.arrayOf(PropTypes.string),/** Only show the button in themes matching one of these flags. */themeFlagWhitelist:PropTypes.arrayOf(PropTypes.string)});_defineProperty(LocateButton,"defaultProps",{position:2});export default connect(function(state){return{locateState:state.locate.state,mapMargins:state.windows.mapMargins,theme:state.theme.current}},{changeLocateState:changeLocateState})(LocateButton);
package/plugins/Map.js ADDED
@@ -0,0 +1,22 @@
1
+ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _extends(){return _extends=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)({}).hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},_extends.apply(null,arguments)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
2
+ * Copyright 2016 GeoSolutions Sas
3
+ * Copyright 2016-2024 Sourcepole AG
4
+ * All rights reserved.
5
+ *
6
+ * This source code is licensed under the BSD-style license found in the
7
+ * LICENSE file in the root directory of this source tree.
8
+ */import React from"react";import{connect}from"react-redux";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{LayerRole}from"../actions/layers";import OlLayer from"../components/map/OlLayer";import OlMap from"../components/map/OlMap";import Spinner from"../components/widgets/Spinner";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import"./style/Map.css";/**
9
+ * The main map component.
10
+ */var MapPlugin=/*#__PURE__*/function(_React$Component){function MapPlugin(props){var _this;_classCallCheck(this,MapPlugin);_this=_callSuper(this,MapPlugin,[props]);_defineProperty(_this,"state",{renderLayers:[],swipeLayer:null});_defineProperty(_this,"renderLayers",function(){var zIndex=0;return _this.state.renderLayers.map(function(layer){var _layer$zIndex;if(layer.type==="placeholder"){return null}++zIndex;var swipe=_this.props.swipe!==null&&layer===_this.state.swipeLayer;return/*#__PURE__*/React.createElement(OlLayer,{key:layer.uuid,options:layer,swipe:swipe?_this.props.swipe:null,zIndex:(_layer$zIndex=layer.zIndex)!==null&&_layer$zIndex!==void 0?_layer$zIndex:zIndex})})});_defineProperty(_this,"renderSupportTools",function(){return Object.entries(_this.props.tools).map(function(_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],Tool=_ref2[1];var options=_this.props.toolsOptions[key]||{};return/*#__PURE__*/React.createElement(Tool,{key:key,options:options})})});_this.loadingEl=null;return _this}_inherits(MapPlugin,_React$Component);return _createClass(MapPlugin,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this2=this;if(this.props.layers!==prevProps.layers||this.props.swipe!==null!==(prevProps.swipe!==null)){var renderLayers=[];// Inject external layers
11
+ this.props.layers.slice(0).reverse().forEach(function(layer){if(layer.type==="wms"&&layer.role===LayerRole.THEME){var sublayers=layer.params.LAYERS.split(",");var opacities=layer.params.OPACITIES.split(",");var styles=(layer.params.STYLES||"").split(",");for(var i=0;i<sublayers.length;++i){if(layer.externalLayerMap&&layer.externalLayerMap[sublayers[i]]){// Sublayer is mapped to an external layer
12
+ var sublayer=LayerUtils.searchSubLayer(layer,"name",sublayers[i]);if(sublayer.visibility){var extlayer=_objectSpread(_objectSpread({},layer.externalLayerMap[sublayers[i]]),{},{rev:layer.rev,opacity:parseInt(opacities[i],10),visibility:true,role:LayerRole.THEME,minScale:sublayer.minScale,maxScale:sublayer.maxScale});if(extlayer.type==="wms"){extlayer.params=_objectSpread(_objectSpread(_objectSpread({},layer.params),layer.externalLayerMap[sublayers[i]].params),{},{OPACITIES:opacities[i],STYLES:""})}renderLayers.push(extlayer)}}else if(renderLayers.length>0&&renderLayers[renderLayers.length-1].id===layer.id){// Compress with previous renderlayer
13
+ renderLayers[renderLayers.length-1].params.LAYERS+=","+sublayers[i];renderLayers[renderLayers.length-1].params.OPACITIES+=","+opacities[i];renderLayers[renderLayers.length-1].params.STYLES+=","+(styles[i]||"")}else{// Add new renderlayer
14
+ renderLayers.push(_objectSpread(_objectSpread({},layer),{},{uuid:layer.uuid+"-"+i,params:_objectSpread(_objectSpread({},layer.params),{},{LAYERS:sublayers[i],OPACITIES:opacities[i],STYLES:styles[i]||""})}))}}}else{renderLayers.push(layer)}});// Break out swipe layer if necessary
15
+ var swipeLayer=null;var swipeLayerNameBlacklist=this.props.swipeLayerNameBlacklist.map(function(entry){return new RegExp("^"+entry.split(/\*+/).map(function(s){return s.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&")}).join(".*")+"$")});if(renderLayers.length>0&&this.props.swipe!==null&&renderLayers[renderLayers.length-1].role>LayerRole.BACKGROUND){var _loop=function _loop(){var layer=renderLayers[i];if(layer.role>LayerRole.USERLAYER){return 0;// continue
16
+ }else if(layer.type==="wms"&&layer.params.LAYERS.split(",").length>=1){var paramLayers=layer.params.LAYERS.split(",");var paramOpacities=layer.params.OPACITIES.split(",");var paramStyles=(layer.params.STYLES||"").split(",");var _loop2=function _loop2(){var layerName=paramLayers[j];if(swipeLayerNameBlacklist.find(function(entry){return layerName.match(entry)})){return 0;// continue
17
+ }var sublayer=LayerUtils.searchSubLayer(layer,"name",layerName);if(sublayer&&_this2.props.swipeGeometryTypeBlacklist.includes((sublayer.geometryType||"").replace(/[ZM]+$/,""))){return 0;// continue
18
+ }var newLayers=[];if(j>0){newLayers.push(_objectSpread(_objectSpread({},layer),{},{uuid:layer.uuid+":0",params:{LAYERS:paramLayers.slice(0,j).join(","),OPACITIES:paramOpacities.slice(0,j).join(","),STYLES:paramStyles.slice(0,j).join(",")}}))}swipeLayer=_objectSpread(_objectSpread({},layer),{},{uuid:layer.uuid+":1",params:{LAYERS:paramLayers[j],OPACITIES:paramOpacities[j],STYLES:paramStyles[j]}});newLayers.push(swipeLayer);if(j<paramLayers.length-1){newLayers.push(_objectSpread(_objectSpread({},layer),{},{uuid:layer.uuid+":2",params:{LAYERS:paramLayers.slice(j+1).join(","),OPACITIES:paramOpacities.slice(j+1).join(","),STYLES:paramStyles.slice(j+1).join(",")}}))}renderLayers.splice.apply(renderLayers,[i,1].concat(newLayers));return 1;// break
19
+ },_ret2;for(var j=paramLayers.length-1;j>=0;--j){_ret2=_loop2();if(_ret2===0)continue;if(_ret2===1)break}}else{if(swipeLayerNameBlacklist.find(function(entry){return layer.name.match(entry)})){return 0;// continue
20
+ }if(_this2.props.swipeGeometryTypeBlacklist.includes((layer.geometryType||"").replace(/[ZM]+$/,""))){return 0;// continue
21
+ }swipeLayer=layer}},_ret;// Pick candidate swipe layer according to rules
22
+ for(var i=renderLayers.length-1;swipeLayer===null&&i>=0;--i){_ret=_loop();if(_ret===0)continue}}this.setState({renderLayers:renderLayers,swipeLayer:swipeLayer})}}},{key:"render",value:function render(){var _this3=this,_this$props$theme;var loadingIndicator=null;if(this.props.showLoading&&!isEmpty(this.props.loadingLayers)){var left="calc(".concat(this.props.mapMargins.left,"px + 0.25em");loadingIndicator=/*#__PURE__*/React.createElement("span",{className:"map-loading-indicator",key:"map-loading",ref:function ref(el){_this3.loadingEl=el},style:{left:left}},/*#__PURE__*/React.createElement(Spinner,{className:"spinner"}),LocaleUtils.tr("map.loading"));setTimeout(function(){if(_this3.loadingEl){_this3.loadingEl.style.opacity=1}},1000)}return[/*#__PURE__*/React.createElement(OlMap,_extends({id:"map",key:"map",mapOptions:this.props.mapOptions},this.props.map,{fullExtent:(_this$props$theme=this.props.theme)===null||_this$props$theme===void 0?void 0:_this$props$theme.bbox}),this.renderLayers(),this.renderSupportTools()),loadingIndicator]}}])}(React.Component);_defineProperty(MapPlugin,"propTypes",{layers:PropTypes.array,loadingLayers:PropTypes.array,map:PropTypes.object,mapMargins:PropTypes.object,/** Zoom duration in ms, rotation in degrees, panStepSize and panPageSize as fraction of map width/height. */mapOptions:PropTypes.shape({zoomDuration:PropTypes.number,enableRotation:PropTypes.bool,rotation:PropTypes.number,panStepSize:PropTypes.number,panPageSize:PropTypes.number,constrainExtent:PropTypes.bool,kineticPanParams:PropTypes.object}),/** Whether to display the loading spinner when layers are loading. */showLoading:PropTypes.bool,swipe:PropTypes.number,/** A list of layer geometry types to ignore when determining the top-most layer to compare. */swipeGeometryTypeBlacklist:PropTypes.arrayOf(PropTypes.string),/** A list of layer names to ignore when determining the top-most layer to compare. You can use `*` as a whildcard character. */swipeLayerNameBlacklist:PropTypes.arrayOf(PropTypes.string),theme:PropTypes.object,tools:PropTypes.object,/** Map tool configuraiton options. Refer to the sample config.json. */toolsOptions:PropTypes.object});_defineProperty(MapPlugin,"defaultProps",{mapOptions:{},showLoading:true,swipeGeometryTypeBlacklist:[],swipeLayerNameBlacklist:[],tools:{},toolsOptions:{}});export default(function(tools){return connect(function(state){return{map:state.map,layers:state.layers.flat,loadingLayers:state.layers.loading,mapMargins:state.windows.mapMargins,swipe:state.layers.swipe,theme:state.theme.current,tools:tools}})(MapPlugin)});
@@ -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 _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
2
+ * Copyright 2018-2024 Sourcepole AG
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */import React from"react";import{connect}from"react-redux";import PropTypes from"prop-types";import{setSwipe}from"../actions/layers";import Icon from"../components/Icon";import"./style/MapCompare.css";/**
8
+ * Allows comparing the top layer with the rest of the map.
9
+ *
10
+ * Activated through a checkbox in the LayerTree.
11
+ */var MapComparePlugin=/*#__PURE__*/function(_React$Component){function MapComparePlugin(props){var _this;_classCallCheck(this,MapComparePlugin);_this=_callSuper(this,MapComparePlugin,[props]);_defineProperty(_this,"mouseDragStart",function(ev){if(_this.el){var rect=_this.el.getBoundingClientRect();_this.clickOffset=ev.clientX-rect.left;document.addEventListener("mousemove",_this.mouseDrag);document.addEventListener("mouseup",_this.mouseDragEnd)}ev.preventDefault();ev.stopPropagation()});_defineProperty(_this,"mouseDrag",function(ev){var perc=(ev.clientX-_this.clickOffset)/document.body.clientWidth*100;perc=Math.min(100,Math.max(0,perc));_this.props.setSwipe(perc);ev.preventDefault();ev.stopPropagation()});_defineProperty(_this,"mouseDragEnd",function(ev){document.removeEventListener("mousemove",_this.mouseDrag);document.removeEventListener("mouseup",_this.mouseDragEnd);ev.preventDefault();ev.stopPropagation()});_defineProperty(_this,"touchDragStart",function(ev){if(_this.el){var rect=_this.el.getBoundingClientRect();_this.clickOffset=ev.touches[0].clientX-rect.left}});_defineProperty(_this,"touchDrag",function(ev){var perc=(ev.touches[0].clientX-_this.clickOffset)/document.body.clientWidth*100;perc=Math.min(100,Math.max(0,perc));_this.props.setSwipe(perc)});_this.clickOffset=0;_this.el=null;return _this}_inherits(MapComparePlugin,_React$Component);return _createClass(MapComparePlugin,[{key:"render",value:function render(){var _this2=this;if(this.props.swipe===null){return null}var style={left:this.props.swipe+"%"};return/*#__PURE__*/React.createElement("div",{id:"MapCompare",onMouseDown:this.mouseDragStart,onTouchMove:this.touchDrag,onTouchStart:this.touchDragStart,ref:function ref(el){_this2.el=el},style:style},/*#__PURE__*/React.createElement("span",{className:"map-compare-handle"},/*#__PURE__*/React.createElement(Icon,{className:"map-compare-handle-icon",icon:"triangle-left"}),/*#__PURE__*/React.createElement(Icon,{className:"map-compare-handle-icon",icon:"triangle-right"})))}}])}(React.Component);_defineProperty(MapComparePlugin,"propTypes",{setSwipe:PropTypes.func,swipe:PropTypes.number});export default connect(function(state){return{swipe:state.layers.swipe}},{setSwipe:setSwipe})(MapComparePlugin);
@@ -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 ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
2
+ * Copyright 2016-2024 Sourcepole AG
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */import React from"react";import{connect}from"react-redux";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import"./style/MapCopyright.css";/**
8
+ * Displays layer attributions in the bottom right corner of the map.
9
+ */var MapCopyright=/*#__PURE__*/function(_React$Component){function MapCopyright(){var _this;_classCallCheck(this,MapCopyright);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,MapCopyright,[].concat(args));_defineProperty(_this,"state",{currentCopyrights:{}});_defineProperty(_this,"layerNames",function(layers){if(!_this.props.prefixCopyrightsWithLayerNames){return""}else{return layers.map(function(layer){return layer.titleMsgId?LocaleUtils.tr(layer.titleMsgId):layer.title}).join(", ")+": "}});return _this}_inherits(MapCopyright,_React$Component);return _createClass(MapCopyright,[{key:"render",value:function render(){var _this2=this;// If attribution has both url and label, "key" is the url and "value.title" the label.
10
+ // If it only has a label, "key" is the label and "value" is null.
11
+ var copyrights=Object.entries(this.state.currentCopyrights).map(function(_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],value=_ref2[1];if(value.title){return/*#__PURE__*/React.createElement("span",{key:key},/*#__PURE__*/React.createElement("a",{href:key,rel:"noreferrer",target:"_blank"},_this2.layerNames(value.layers)+value.title))}else{return/*#__PURE__*/React.createElement("span",{key:key},_this2.layerNames(value.layers),/*#__PURE__*/React.createElement("span",{dangerouslySetInnerHTML:{__html:key}}))}});if(isEmpty(copyrights)){return null}var right=this.props.mapMargins.right;var bottom=this.props.mapMargins.bottom;var style={right:"calc(0.25em + "+right+"px)",bottom:"calc(var(--bottombar-height) + 0.25em + "+bottom+"px)"};return/*#__PURE__*/React.createElement("div",{id:"MapCopyright",style:style},copyrights)}}],[{key:"getDerivedStateFromProps",value:function getDerivedStateFromProps(nextProps){if(nextProps.map&&nextProps.map.bbox&&nextProps.layers){var copyrights=nextProps.layers.reduce(function(res,layer){return _objectSpread(_objectSpread({},res),LayerUtils.getAttribution(layer,nextProps.map,nextProps.showThemeCopyrightOnly))},{});return{currentCopyrights:copyrights}}return null}}])}(React.Component);_defineProperty(MapCopyright,"propTypes",{layers:PropTypes.array,map:PropTypes.object,mapMargins:PropTypes.object,/** Whether to prepend the layer name to the attribution string. */prefixCopyrightsWithLayerNames:PropTypes.bool,/** Whether to only display the attribution of the theme, omitting external layers. */showThemeCopyrightOnly:PropTypes.bool});var selector=function selector(state){return{layers:state.layers.flat,map:state.map,mapMargins:state.windows.mapMargins}};export default connect(selector,{})(MapCopyright);
@@ -0,0 +1,23 @@
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 _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
2
+ * Copyright 2017-2024 Sourcepole AG
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */import React from"react";import{connect}from"react-redux";import{TextEncoder,TextDecoder}from"@kayahr/text-encoding";import axios from"axios";import dayjs from"dayjs";import FileSaver from"file-saver";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{LayerRole}from"../actions/layers";import{setSnappingConfig}from"../actions/map";import Icon from"../components/Icon";import PrintSelection from"../components/PrintSelection";import SideBar from"../components/SideBar";import NumberInput from"../components/widgets/NumberInput";import Spinner from"../components/widgets/Spinner";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import{explodeDxf,implodeDxf,mergeDxf}from"../utils/DxfUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import VectorLayerUtils from"../utils/VectorLayerUtils";import"./style/MapExport.css";import"@kayahr/text-encoding/encodings/windows-1252";/**
8
+ * Allows exporting a selected portion of the map to a variety of formats.
9
+ */var MapExport=/*#__PURE__*/function(_React$Component){function MapExport(props){var _this;_classCallCheck(this,MapExport);_this=_callSuper(this,MapExport,[props]);_defineProperty(_this,"state",{extents:[],exporting:false,availableFormats:[],selectedFormat:null,selectedFormatConfiguration:"",scale:null,pageSize:null,dpi:96});_defineProperty(_this,"changeFormat",function(ev){var _this$props$formatCon;var selectedFormat=ev.target.value;var selectedFormatConfiguration=((((_this$props$formatCon=_this.props.formatConfiguration)===null||_this$props$formatCon===void 0?void 0:_this$props$formatCon[selectedFormat])||[])[0]||{}).name;_this.setState({selectedFormat:selectedFormat,selectedFormatConfiguration:selectedFormatConfiguration})});_defineProperty(_this,"changeScale",function(value){_this.setState({scale:Math.max(1,parseInt(value,10)||0)})});_defineProperty(_this,"changeResolution",function(ev){_this.setState({dpi:parseInt(ev.target.value,10)||0})});_defineProperty(_this,"renderBody",function(){var _this$props$formatCon2;if(!_this.props.theme||!_this.state.selectedFormat){return null}var formatMap={"image/jpeg":"JPEG","image/png":"PNG","image/png; mode=16bit":"PNG 16bit","image/png; mode=8bit":"PNG 8bit","image/png; mode=1bit":"PNG 1bit","image/geotiff":"GeoTIFF","image/tiff":"GeoTIFF","application/dxf":"DXF","application/pdf":"GeoPDF"};var formatConfiguration=((_this$props$formatCon2=_this.props.formatConfiguration)===null||_this$props$formatCon2===void 0?void 0:_this$props$formatCon2[_this.state.selectedFormat.split(";")[0]])||[];var scaleChooser=null;if(!isEmpty(_this.props.allowedScales)){scaleChooser=/*#__PURE__*/React.createElement("select",{onChange:_this.changeScale,value:_this.state.scale||""},/*#__PURE__*/React.createElement("option",{hidden:true,value:_this.state.scale||""},_this.state.scale||""),_this.props.allowedScales.map(function(scale){return/*#__PURE__*/React.createElement("option",{key:scale,value:scale},"1 : ",scale)}))}else if(_this.props.allowedScales!==false){scaleChooser=/*#__PURE__*/React.createElement(NumberInput,{min:1,mobile:true,onChange:_this.changeScale,prefix:"1 : ",value:_this.state.scale||null})}return/*#__PURE__*/React.createElement("div",{className:"mapexport-body"},/*#__PURE__*/React.createElement("form",{action:"#",method:"POST",onSubmit:_this["export"],ref:function ref(el){_this.form=el}},/*#__PURE__*/React.createElement("table",{className:"options-table"},/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.format")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:_this.changeFormat,value:_this.state.selectedFormat},_this.state.availableFormats.map(function(format){return/*#__PURE__*/React.createElement("option",{key:format,value:format},formatMap[format]||format)})))),formatConfiguration.length>1?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.configuration")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:function onChange(ev){return _this.setState({selectedFormatConfiguration:ev.target.value})},value:_this.state.selectedFormatConfiguration},formatConfiguration.map(function(config){return/*#__PURE__*/React.createElement("option",{key:config.name,value:config.name},config.name)})))):null,!isEmpty(_this.props.pageSizes)?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.size")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:function onChange(ev){return _this.setState({pageSize:ev.target.value||null})},value:_this.state.pageSize||""},/*#__PURE__*/React.createElement("option",{value:""},LocaleUtils.tr("mapexport.usersize")),_this.props.pageSizes.map(function(entry,idx){return/*#__PURE__*/React.createElement("option",{key:"size_"+idx,value:idx},entry.name)})))):null,scaleChooser&&_this.state.pageSize!==null?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.scale")),/*#__PURE__*/React.createElement("td",null,scaleChooser)):null,_this.props.dpis?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("mapexport.resolution")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("select",{onChange:_this.changeResolution,value:_this.state.dpi},_this.props.dpis.map(function(dpi){return/*#__PURE__*/React.createElement("option",{key:dpi+"dpi",value:dpi},dpi+" dpi")})))):null)),/*#__PURE__*/React.createElement("div",{className:"button-bar"},/*#__PURE__*/React.createElement("button",{className:"button",disabled:_this.state.exporting||isEmpty(_this.state.extents),type:"submit"},_this.state.exporting?/*#__PURE__*/React.createElement("span",{className:"mapexport-wait"},/*#__PURE__*/React.createElement(Spinner,null)," ",LocaleUtils.tr("mapexport.wait")):LocaleUtils.tr("mapexport.submit")))))});_defineProperty(_this,"renderPrintSelection",function(){if(_this.state.pageSize!==null){var pageSize=_this.props.pageSizes[_this.state.pageSize];var frame={width:pageSize.width,height:pageSize.height};return/*#__PURE__*/React.createElement(PrintSelection,{allowRotation:false,allowScaling:_this.props.allowedScales!==false,center:_this.props.map.center,fixedFrame:frame,geometryChanged:_this.geometryChanged,key:"PrintSelection",scale:_this.state.scale})}else{return/*#__PURE__*/React.createElement(PrintSelection,{allowRotation:false,geometryChanged:_this.geometryChanged,key:"PrintSelection"})}});_defineProperty(_this,"onShow",function(){var _this$props$formatCon3;var scale=Math.round(MapUtils.computeForZoom(_this.props.map.scales,_this.props.map.zoom)*_this.props.defaultScaleFactor);if(!isEmpty(_this.props.allowedScales)){var closestVal=Math.abs(scale-_this.props.allowedScales[0]);var closestIdx=0;for(var i=1;i<_this.props.allowedScales.length;++i){var currVal=Math.abs(scale-_this.props.allowedScales[i]);if(currVal<closestVal){closestVal=currVal;closestIdx=i}}scale=_this.props.allowedScales[closestIdx]}var availableFormats=_this.props.theme.availableFormats;if(!isEmpty(_this.props.allowedFormats)){availableFormats=availableFormats.filter(function(fmt){return _this.props.allowedFormats.includes(fmt)})}var selectedFormat=_this.props.defaultFormat&&availableFormats.includes(_this.props.defaultFormat)?_this.props.defaultFormat:availableFormats[0];var selectedFormatConfiguration=((((_this$props$formatCon3=_this.props.formatConfiguration)===null||_this$props$formatCon3===void 0?void 0:_this$props$formatCon3[selectedFormat])||[])[0]||{}).name;_this.setState({scale:scale,availableFormats:availableFormats,selectedFormat:selectedFormat,selectedFormatConfiguration:selectedFormatConfiguration});_this.props.setSnappingConfig(false,false)});_defineProperty(_this,"onHide",function(){_this.setState({extents:[],width:0,height:0,scale:null,pageSize:null})});_defineProperty(_this,"geometryChanged",function(center,extents,rotation,scale){_this.setState(function(state){return{extents:extents,scale:scale!==null&&scale!==void 0?scale:state.scale}})});_defineProperty(_this,"export",function(ev){var _this$props$formatCon4,_this$state$extents$a;ev.preventDefault();_this.setState({exporting:true});var format=_this.state.selectedFormat.split(";")[0];var formatConfiguration=(((_this$props$formatCon4=_this.props.formatConfiguration)===null||_this$props$formatCon4===void 0?void 0:_this$props$formatCon4[format])||[]).find(function(entry){return entry.name===_this.state.selectedFormatConfiguration});var version=_this.props.theme.version;var crs=_this.props.map.projection;var extent=(_this$state$extents$a=_this.state.extents.at(0))!==null&&_this$state$extents$a!==void 0?_this$state$extents$a:[0,0,0,0];var formattedExtent=CoordinatesUtils.getAxisOrder(crs).substring(0,2)==="ne"&&version==="1.3.0"?extent[1]+","+extent[0]+","+extent[3]+","+extent[2]:extent.join(",");var getPixelFromCoordinate=MapUtils.getHook(MapUtils.GET_PIXEL_FROM_COORDINATES_HOOK);var p1=getPixelFromCoordinate(extent.slice(0,2));var p2=getPixelFromCoordinate(extent.slice(2,4));var width=Math.round(Math.abs(p1[0]-p2[0])*_this.state.dpi/96);var height=Math.round(Math.abs(p1[1]-p2[1])*_this.state.dpi/96);var ext=format.split("/").pop();var timestamp=dayjs(new Date).format("YYYYMMDD_HHmmss");var fileName=_this.props.fileNameTemplate.replace("{theme}",_this.props.theme.id).replace("{timestamp}",timestamp)+"."+ext;var params={};// Base request params
10
+ params.SERVICE="WMS";params.VERSION=version;params.REQUEST="GetMap";params.FORMAT=_this.state.selectedFormat;params.DPI=_this.state.dpi;params.TRANSPARENT=true;params.TILED=false;params.CRS=_this.props.map.projection;params.BBOX=formattedExtent;params.WIDTH=width;params.HEIGHT=height;params.filename=fileName;// Dimension values
11
+ _this.props.layers.forEach(function(layer){if(layer.role===LayerRole.THEME){Object.entries(layer.dimensionValues||{}).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],value=_ref2[1];if(value!==undefined){params[key]=value}})}});// Add parameters from custom format configuration
12
+ if(formatConfiguration){var _formatConfiguration$;var keyCaseMap=Object.keys(params).reduce(function(res,key){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key.toLowerCase(),key))},{});(formatConfiguration.extraQuery||"").split(/[?&]/).filter(Boolean).forEach(function(entry){var _entry$split=entry.split("="),_entry$split2=_slicedToArray(_entry$split,2),key=_entry$split2[0],value=_entry$split2[1];var caseKey=keyCaseMap[key.toLowerCase()]||key;params[caseKey]=value!==null&&value!==void 0?value:""});params.FORMAT_OPTIONS=(_formatConfiguration$=formatConfiguration.formatOptions)!==null&&_formatConfiguration$!==void 0?_formatConfiguration$:"";if(formatConfiguration.baseLayer){var layers=params[keyCaseMap.layers].split(",");if(!layers.includes(formatConfiguration.baseLayer)){params[keyCaseMap.layers]=[formatConfiguration.baseLayer].concat(_toConsumableArray(layers))}}}if(_this.state.selectedFormat==="application/dxf"){_this.dxfExport(params,fileName)}else{_this.genericExport(params,fileName,formatConfiguration)}});_defineProperty(_this,"genericExport",function(params,fileName,formatConfiguration){// Layer params
13
+ var exportExternalLayers=_this.props.exportExternalLayers&&ConfigUtils.getConfigProp("qgisServerVersion",null,3)>=3;var exportParams=LayerUtils.collectPrintParams(_this.props.layers,_this.props.theme,_this.state.scale,_this.props.map.projection,exportExternalLayers,!!formatConfiguration.baseLayer);Object.assign(params,exportParams);// Highlight params
14
+ var highlightParams=VectorLayerUtils.createPrintHighlighParams(_this.props.layers,_this.props.map.projection,_this.state.scale,_this.state.dpi);params.HIGHLIGHT_GEOM=highlightParams.geoms.join(";");params.HIGHLIGHT_SYMBOL=highlightParams.styles.join(";");params.HIGHLIGHT_LABELSTRING=highlightParams.labels.join(";");params.HIGHLIGHT_LABELCOLOR=highlightParams.labelFillColors.join(";");params.HIGHLIGHT_LABELBUFFERCOLOR=highlightParams.labelOutlineColors.join(";");params.HIGHLIGHT_LABELBUFFERSIZE=highlightParams.labelOutlineSizes.join(";");params.HIGHLIGHT_LABELSIZE=highlightParams.labelSizes.join(";");params.HIGHLIGHT_LABEL_DISTANCE=highlightParams.labelDist.join(";");params.HIGHLIGHT_LABEL_ROTATION=highlightParams.labelRotations.join(";");// Watermark params
15
+ Object.keys(_this.props.theme.watermark||{}).forEach(function(key){params["WATERMARK_"+key.toUpperCase()]=_this.props.theme.watermark[key]});var data=Object.entries(params).map(function(pair){return pair.map(function(entry){return encodeURIComponent(entry).replace(/%20/g,"+")}).join("=")}).join("&");var config={headers:{"Content-Type":"application/x-www-form-urlencoded"},responseType:"arraybuffer"};axios.post(_this.props.theme.url,data,config).then(function(response){_this.setState({exporting:false});var contentType=response.headers["content-type"];FileSaver.saveAs(new Blob([response.data],{type:contentType}),fileName)})["catch"](function(e){_this.setState({exporting:false});if(e.response){/* eslint-disable-next-line */console.log(new TextDecoder().decode(e.response.data))}/* eslint-disable-next-line */alert("Export failed")})});_defineProperty(_this,"dxfExport",function(baseParams,fileName){var promises=_this.props.layers.filter(function(layer){var _layer$mapFormats;return layer.type==="wms"&&layer.role>LayerRole.BACKGROUND&&((_layer$mapFormats=layer.mapFormats)===null||_layer$mapFormats===void 0?void 0:_layer$mapFormats.includes("application/dxf"))}).reverse().map(function(layer){var _layer$params$FILTER,_layer$params$FILTER_;var params=_objectSpread(_objectSpread({},baseParams),{},{LAYERS:layer.params.LAYERS,OPACITIES:layer.params.OPACITIES,STYLES:layer.params.STYLES,FILTER:(_layer$params$FILTER=layer.params.FILTER)!==null&&_layer$params$FILTER!==void 0?_layer$params$FILTER:"",FILTER_GEOM:(_layer$params$FILTER_=layer.params.FILTER_GEOM)!==null&&_layer$params$FILTER_!==void 0?_layer$params$FILTER_:""});var data=Object.entries(params).map(function(pair){return pair.map(function(entry){return encodeURIComponent(entry).replace(/%20/g,"+")}).join("=")}).join("&");var config={headers:{"Content-Type":"application/x-www-form-urlencoded"},responseType:"arraybuffer"};return new Promise(function(resolve,reject){axios.post(layer.url,data,config).then(function(response){resolve(response)})["catch"](function(e){/* eslint-disable-next-line */console.warn(e);resolve(null)})})});Promise.all(promises).then(function(responses){var decoder=new TextDecoder("iso-8859-1");var dxfDocuments=responses.filter(function(response){return response.headers["content-type"]==="application/dxf"}).map(function(response){return explodeDxf(decoder.decode(response.data))});var dxfDocument=mergeDxf(dxfDocuments);var result=implodeDxf(dxfDocument);var encoder=new TextEncoder("iso-8859-1");FileSaver.saveAs(new Blob([encoder.encode(result)],{type:"application/dxf"}),fileName);/*
16
+ responses.forEach((response, idx) => {
17
+ FileSaver.saveAs(new Blob([response.data], {type: "application/dxf"}), "orig_" + idx + "_" + fileName);
18
+ });
19
+ */_this.setState({exporting:false})})});_this.form=null;_this.state.dpi=(props.dpis||[])[0]||96;return _this}_inherits(MapExport,_React$Component);return _createClass(MapExport,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(this.state.pageSize===null&&prevState.pageSize!==null){this.setState({extents:[]})}}},{key:"render",value:function render(){var _this2=this;var minMaxTooltip=this.state.minimized?LocaleUtils.tr("print.maximize"):LocaleUtils.tr("print.minimize");var extraTitlebarContent=/*#__PURE__*/React.createElement(Icon,{className:"mapexport-minimize-maximize",icon:this.state.minimized?"chevron-down":"chevron-up",onClick:function onClick(){return _this2.setState(function(state){return{minimized:!state.minimized}})},title:minMaxTooltip});return/*#__PURE__*/React.createElement(SideBar,{extraClasses:"MapExport",extraTitlebarContent:extraTitlebarContent,icon:"rasterexport",id:"MapExport",key:"MapExport",onHide:this.onHide,onShow:this.onShow,side:this.props.side,title:LocaleUtils.tr("appmenu.items.MapExport"),width:"20em"},function(){return{body:_this2.state.minimized?null:_this2.renderBody(),extra:[_this2.renderPrintSelection()]}})}}])}(React.Component);_defineProperty(MapExport,"propTypes",{/** Whitelist of allowed export format mimetypes. If empty, supported formats are listed. */allowedFormats:PropTypes.arrayOf(PropTypes.string),/** List of scales at which to export the map. If empty, scale can be freely specified. If `false`, the map can only be exported at the current scale. */allowedScales:PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number),PropTypes.bool]),/** Default export format mimetype. If empty, first available format is used. */defaultFormat:PropTypes.string,/** The factor to apply to the map scale to determine the initial export map scale (if `allowedScales` is not `false`). */defaultScaleFactor:PropTypes.number,/** List of dpis at which to export the map. If empty, the default server dpi is used. */dpis:PropTypes.arrayOf(PropTypes.number),/** Whether to include external layers in the image. Requires QGIS Server 3.x! */exportExternalLayers:PropTypes.bool,/** Template for the name of the generated files when downloading. */fileNameTemplate:PropTypes.string,/** Custom export configuration per format.
20
+ * If more than one configuration per format is provided, a selection combo will be displayed.
21
+ * `extraQuery` will be appended to the query string (replacing any existing parameters).
22
+ * `formatOptions` will be passed as FORMAT_OPTIONS.
23
+ * `baseLayer` will be appended to the LAYERS instead of the background layer. */formatConfiguration:PropTypes.shape({format:PropTypes.arrayOf(PropTypes.shape({name:PropTypes.string,extraQuery:PropTypes.string,formatOptions:PropTypes.string,baseLayer:PropTypes.string}))}),layers:PropTypes.array,map:PropTypes.object,/** List of image sizes to offer, in addition to the free-hand selection. The width and height are in millimeters. */pageSizes:PropTypes.arrayOf(PropTypes.shape({name:PropTypes.string,width:PropTypes.number,height:PropTypes.number})),setIdentifyEnabled:PropTypes.func,setSnappingConfig:PropTypes.func,/** The side of the application on which to display the sidebar. */side:PropTypes.string,theme:PropTypes.object});_defineProperty(MapExport,"defaultProps",{defaultScaleFactor:1,exportExternalLayers:true,fileNameTemplate:"{theme}_{timestamp}",side:"right",pageSizes:[]});var selector=function selector(state){return{theme:state.theme.current,map:state.map,layers:state.layers.flat}};export default connect(selector,{setSnappingConfig:setSnappingConfig})(MapExport);