qwc2 2025.10.9 → 2025.10.14

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 (241) hide show
  1. package/actions/display.js +30 -1
  2. package/actions/editing.js +22 -1
  3. package/actions/layerinfo.js +13 -1
  4. package/actions/layers.js +213 -3
  5. package/actions/localConfig.js +58 -1
  6. package/actions/locale.js +21 -1
  7. package/actions/locate.js +26 -1
  8. package/actions/logging.js +10 -1
  9. package/actions/map.js +105 -2
  10. package/actions/measurement.js +12 -1
  11. package/actions/processNotifications.js +37 -1
  12. package/actions/redlining.js +18 -1
  13. package/actions/redliningPick.js +12 -1
  14. package/actions/search.js +12 -1
  15. package/actions/serviceinfo.js +12 -1
  16. package/actions/task.js +55 -3
  17. package/actions/theme.js +339 -19
  18. package/actions/windows.js +164 -5
  19. package/components/AppMenu.js +435 -3
  20. package/components/AttributeForm.js +928 -32
  21. package/components/AttributeTableWidget.js +1105 -13
  22. package/components/AutoEditForm.js +189 -3
  23. package/components/CoordinateDisplayer.js +78 -2
  24. package/components/EditComboField.js +190 -6
  25. package/components/EditUploadField.js +315 -3
  26. package/components/ExportSelection.js +203 -2
  27. package/components/FullscreenSwitcher.js +90 -3
  28. package/components/Icon.js +81 -2
  29. package/components/IdentifyViewer.js +1161 -6
  30. package/components/ImportLayer.js +718 -20
  31. package/components/LayerInfoWindow.js +145 -2
  32. package/components/LinkFeatureForm.js +246 -5
  33. package/components/MapButton.js +88 -2
  34. package/components/MapSelection.js +287 -8
  35. package/components/MessageBar.js +68 -2
  36. package/components/NumericInputWindow.js +359 -2
  37. package/components/PickFeature.js +266 -2
  38. package/components/PluginsContainer.js +227 -8
  39. package/components/PrintSelection.js +620 -49
  40. package/components/ProcessNotifications.js +104 -2
  41. package/components/QtDesignerForm.js +1137 -18
  42. package/components/ResizeableWindow.js +591 -8
  43. package/components/SearchBox.js +1307 -20
  44. package/components/ServiceInfoWindow.js +107 -2
  45. package/components/SideBar.js +204 -4
  46. package/components/StandardApp.js +381 -20
  47. package/components/Swipeable.js +15 -1
  48. package/components/TaskBar.js +85 -2
  49. package/components/ThemeLayersListWindow.js +216 -4
  50. package/components/ThemeList.js +381 -7
  51. package/components/Toolbar.js +106 -2
  52. package/components/WindowManager.js +178 -2
  53. package/components/map/OlLayer.js +257 -6
  54. package/components/map/OlMap.js +405 -5
  55. package/components/map/layers/BingLayer.js +31 -2
  56. package/components/map/layers/GoogleLayer.js +222 -19
  57. package/components/map/layers/GraticuleLayer.js +21 -1
  58. package/components/map/layers/ImageLayer.js +15 -1
  59. package/components/map/layers/MVTLayer.js +52 -2
  60. package/components/map/layers/OSMLayer.js +24 -2
  61. package/components/map/layers/OverlayLayer.js +55 -3
  62. package/components/map/layers/VectorLayer.js +173 -8
  63. package/components/map/layers/WFSLayer.js +220 -6
  64. package/components/map/layers/WMSLayer.js +180 -6
  65. package/components/map/layers/WMTSLayer.js +67 -3
  66. package/components/map/layers/XYZLayer.js +24 -2
  67. package/components/map/layers/index.js +28 -1
  68. package/components/map3d/EditDataset3D.js +190 -3
  69. package/components/map3d/HeightProfile3D.js +402 -3
  70. package/components/map3d/ImportObjects3D.js +162 -2
  71. package/components/map3d/Map3D.js +1304 -38
  72. package/components/map3d/MapControls3D.js +392 -7
  73. package/components/map3d/SearchField3D.js +183 -11
  74. package/components/map3d/View3DSwitcher.js +98 -2
  75. package/components/map3d/drawtool/CreateTool3D.js +174 -4
  76. package/components/map3d/drawtool/EditTool3D.js +590 -6
  77. package/components/map3d/drawtool/NumericInput3D.js +336 -4
  78. package/components/map3d/layers/GeoTIFFLayer3D.js +15 -1
  79. package/components/map3d/layers/VectorLayer3D.js +53 -2
  80. package/components/map3d/layers/WFSLayer3D.js +109 -3
  81. package/components/map3d/layers/WMSLayer3D.js +70 -2
  82. package/components/map3d/layers/WMTSLayer3D.js +27 -3
  83. package/components/map3d/layers/index.js +14 -1
  84. package/components/map3d/utils/FirstPersonControls3D.js +423 -16
  85. package/components/map3d/utils/MiscUtils3D.js +221 -13
  86. package/components/map3d/utils/OrbitControls3D.js +176 -5
  87. package/components/map3d/utils/Tiles3DStyle.js +238 -9
  88. package/components/share/ShareLink.js +54 -2
  89. package/components/share/ShareQRCode.js +62 -2
  90. package/components/share/ShareSocials.js +125 -3
  91. package/components/timeline/FixedTimeline.js +236 -5
  92. package/components/timeline/InfiniteTimeline.js +347 -8
  93. package/components/timeline/TimelineFeaturesSlider.js +439 -5
  94. package/components/widgets/AccordeonWidget.js +96 -2
  95. package/components/widgets/ButtonBar.js +124 -2
  96. package/components/widgets/ColorButton.js +201 -3
  97. package/components/widgets/ComboBox.js +166 -2
  98. package/components/widgets/CopyButton.js +110 -2
  99. package/components/widgets/DateTimeInput.js +100 -3
  100. package/components/widgets/EditableSelect.js +230 -3
  101. package/components/widgets/FileSelector.js +128 -4
  102. package/components/widgets/Input.js +124 -2
  103. package/components/widgets/InputContainer.js +96 -2
  104. package/components/widgets/LayerCatalogWidget.js +219 -3
  105. package/components/widgets/MenuButton.js +157 -1
  106. package/components/widgets/ModalDialog.js +64 -2
  107. package/components/widgets/NavBar.js +119 -2
  108. package/components/widgets/NumberInput.js +226 -4
  109. package/components/widgets/PopupMenu.js +72 -1
  110. package/components/widgets/Primitives.js +6 -1
  111. package/components/widgets/ReCaptchaWidget.js +55 -1
  112. package/components/widgets/SearchWidget.js +255 -2
  113. package/components/widgets/Spinner.js +44 -2
  114. package/components/widgets/SuggestionInput.js +77 -2
  115. package/components/widgets/TextInput.js +308 -2
  116. package/components/widgets/ToggleSwitch.js +85 -2
  117. package/components/widgets/VectorLayerPicker.js +85 -3
  118. package/libs/openlayers.js +225 -5
  119. package/package.json +1 -1
  120. package/plugins/API.js +358 -15
  121. package/plugins/AttributeTable.js +109 -3
  122. package/plugins/Authentication.js +130 -5
  123. package/plugins/BackgroundSwitcher.js +218 -4
  124. package/plugins/Bookmark.js +289 -3
  125. package/plugins/BottomBar.js +298 -4
  126. package/plugins/CookiePopup.js +67 -3
  127. package/plugins/Cyclomedia.js +442 -5
  128. package/plugins/Editing.js +497 -9
  129. package/plugins/FeatureForm.js +366 -4
  130. package/plugins/FeatureSearch.js +458 -3
  131. package/plugins/GeometryDigitizer.js +664 -7
  132. package/plugins/HeightProfile.js +763 -15
  133. package/plugins/Help.js +102 -3
  134. package/plugins/HomeButton.js +80 -3
  135. package/plugins/Identify.js +543 -5
  136. package/plugins/LayerCatalog.js +215 -4
  137. package/plugins/LayerTree.js +1194 -6
  138. package/plugins/LocateButton.js +94 -3
  139. package/plugins/Map.js +320 -16
  140. package/plugins/MapCompare.js +94 -3
  141. package/plugins/MapCopyright.js +127 -5
  142. package/plugins/MapExport.js +613 -20
  143. package/plugins/MapFilter.js +868 -12
  144. package/plugins/MapInfoTooltip.js +277 -3
  145. package/plugins/MapLegend.js +253 -4
  146. package/plugins/MapTip.js +290 -4
  147. package/plugins/Measure.js +220 -4
  148. package/plugins/NewsPopup.js +137 -3
  149. package/plugins/OverviewMap.js +167 -7
  150. package/plugins/Panoramax.js +340 -2
  151. package/plugins/Portal.js +199 -4
  152. package/plugins/Print.js +1231 -15
  153. package/plugins/Redlining.js +750 -6
  154. package/plugins/Reports.js +332 -3
  155. package/plugins/Routing.js +1278 -15
  156. package/plugins/ScratchDrawing.js +173 -5
  157. package/plugins/Settings.js +241 -4
  158. package/plugins/Share.js +198 -3
  159. package/plugins/StartupMarker.js +84 -4
  160. package/plugins/TaskButton.js +88 -3
  161. package/plugins/ThemeSwitcher.js +164 -4
  162. package/plugins/TimeManager.js +971 -10
  163. package/plugins/TopBar.js +300 -7
  164. package/plugins/TourGuide.js +213 -2
  165. package/plugins/ValueTool.js +419 -4
  166. package/plugins/View3D.js +519 -14
  167. package/plugins/ZoomButtons.js +165 -3
  168. package/plugins/map/EditingSupport.js +199 -7
  169. package/plugins/map/LocateSupport.js +260 -4
  170. package/plugins/map/MeasurementSupport.js +216 -8
  171. package/plugins/map/RedliningPickSupport.js +201 -7
  172. package/plugins/map/RedliningSupport.js +726 -17
  173. package/plugins/map/SnapInteraction.js +101 -1
  174. package/plugins/map/SnapSupport.js +210 -2
  175. package/plugins/map/SnappingSupport.js +356 -17
  176. package/plugins/map3d/BackgroundSwitcher3D.js +44 -3
  177. package/plugins/map3d/BottomBar3D.js +118 -3
  178. package/plugins/map3d/Compare3D.js +422 -8
  179. package/plugins/map3d/Draw3D.js +353 -6
  180. package/plugins/map3d/ExportObjects3D.js +393 -18
  181. package/plugins/map3d/HideObjects3D.js +313 -12
  182. package/plugins/map3d/Identify3D.js +283 -12
  183. package/plugins/map3d/LayerTree3D.js +323 -3
  184. package/plugins/map3d/MapCopyright3D.js +128 -5
  185. package/plugins/map3d/MapExport3D.js +590 -10
  186. package/plugins/map3d/MapLight3D.js +553 -6
  187. package/plugins/map3d/Measure3D.js +571 -20
  188. package/plugins/map3d/OverviewMap3D.js +169 -3
  189. package/plugins/map3d/Settings3D.js +73 -3
  190. package/plugins/map3d/TopBar3D.js +207 -9
  191. package/plugins/redlining/RedliningBufferSupport.js +206 -3
  192. package/reducers/display.js +34 -2
  193. package/reducers/editing.js +68 -3
  194. package/reducers/index.js +9 -1
  195. package/reducers/layerinfo.js +26 -2
  196. package/reducers/layers.js +456 -9
  197. package/reducers/localConfig.js +122 -2
  198. package/reducers/locale.js +38 -2
  199. package/reducers/locate.js +40 -2
  200. package/reducers/map.js +176 -5
  201. package/reducers/measurement.js +42 -2
  202. package/reducers/processNotifications.js +49 -2
  203. package/reducers/redlining.js +50 -2
  204. package/reducers/redliningPick.js +27 -2
  205. package/reducers/search.js +20 -1
  206. package/reducers/serviceinfo.js +25 -2
  207. package/reducers/task.js +45 -2
  208. package/reducers/theme.js +51 -2
  209. package/reducers/windows.js +203 -2
  210. package/scripts/dist.sh +1 -1
  211. package/scripts/gen-plugin-docs.js +152 -2
  212. package/scripts/makeIconkit.js +85 -6
  213. package/scripts/themesConfig.js +742 -40
  214. package/scripts/updateTranslations.js +251 -10
  215. package/selectors/searchproviders.js +44 -2
  216. package/stores/StandardStore.js +42 -2
  217. package/utils/ConfigUtils.js +84 -3
  218. package/utils/CoordinatesUtils.js +234 -23
  219. package/utils/DxfUtils.js +237 -11
  220. package/utils/EditingInterface.js +421 -87
  221. package/utils/EditingUtils.js +357 -13
  222. package/utils/ElevationInterface.js +83 -22
  223. package/utils/FeatureStyles.js +429 -5
  224. package/utils/IdentifyUtils.js +443 -7
  225. package/utils/ImageEditor.js +79 -9
  226. package/utils/LayerUtils.js +1516 -50
  227. package/utils/LocaleUtils.js +117 -7
  228. package/utils/MapUtils.js +241 -59
  229. package/utils/MeasureUtils.js +323 -2
  230. package/utils/MiscUtils.js +189 -11
  231. package/utils/PermaLinkUtils.js +429 -6
  232. package/utils/PluginStore.js +27 -1
  233. package/utils/ResourceRegistry.js +15 -1
  234. package/utils/RoutingInterface.js +307 -7
  235. package/utils/SearchProviders.js +722 -19
  236. package/utils/ServiceLayerUtils.js +669 -14
  237. package/utils/Signal.js +32 -2
  238. package/utils/ThemeUtils.js +341 -7
  239. package/utils/VectorLayerUtils.js +589 -15
  240. package/utils/expr_grammar/grammar.js +2239 -2
  241. package/utils/expr_grammar/test.js +65 -3
package/plugins/MapTip.js CHANGED
@@ -1,14 +1,300 @@
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 _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
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); }
2
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
3
+ 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."); }
4
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
5
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
6
+ 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; }
7
+ 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; }
8
+ 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; } } }; }
9
+ 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; } }
10
+ 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; }
11
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
12
+ 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); } }
13
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
14
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
15
+ 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); }
16
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
17
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
18
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
19
+ 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); }
20
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
21
+ 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; }
22
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
23
+ 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); }
24
+ /**
2
25
  * Copyright 2016-2024 Sourcepole AG
3
26
  * All rights reserved.
4
27
  *
5
28
  * This source code is licensed under the BSD-style license found in the
6
29
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import ReactDOM from"react-dom";import{connect}from"react-redux";import DOMPurify from"dompurify";import htmlReactParser,{domToReact}from"html-react-parser";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{v4 as uuidv4}from"uuid";import{LayerRole,addLayerFeatures,removeLayer}from"../actions/layers";import{openExternalUrl}from"../actions/windows";import{MapContainerPortalContext}from"../components/PluginsContainer";import IdentifyUtils from"../utils/IdentifyUtils";import MapUtils from"../utils/MapUtils";import"./style/MapTip.css";/**
30
+ */
31
+
32
+ import React from 'react';
33
+ import ReactDOM from 'react-dom';
34
+ import { connect } from 'react-redux';
35
+ import DOMPurify from 'dompurify';
36
+ import htmlReactParser, { domToReact } from 'html-react-parser';
37
+ import isEmpty from 'lodash.isempty';
38
+ import PropTypes from 'prop-types';
39
+ import { v4 as uuidv4 } from 'uuid';
40
+ import { LayerRole, addLayerFeatures, removeLayer } from '../actions/layers';
41
+ import { openExternalUrl } from '../actions/windows';
42
+ import { MapContainerPortalContext } from '../components/PluginsContainer';
43
+ import IdentifyUtils from '../utils/IdentifyUtils';
44
+ import MapUtils from '../utils/MapUtils';
45
+ import './style/MapTip.css';
46
+
47
+ /**
8
48
  * Displays maptips by hovering over features on the map.
9
49
  *
10
50
  * Queries the map tips configured in the QGIS layer properites over GetFeatureInfo.
11
51
  *
12
52
  * The map tip needs to be configured in QGIS Layer Properties &rarr; Display.
13
- */var MapTip=/*#__PURE__*/function(_React$Component){function MapTip(){var _this;_classCallCheck(this,MapTip);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,MapTip,[].concat(args));_defineProperty(_this,"state",{maptips:{},maptipsLayerOrder:[],mousePos:null,pos:null});_defineProperty(_this,"getMapMousePos",function(ev){_this.clearMaptip();clearTimeout(_this.mouseStateTimeout);_this.mouseStateTimeout=setTimeout(function(){_this.setState({mousePos:{coordinate:ev.coordinate,pixel:ev.pixel}})},100)});_defineProperty(_this,"clearMaptip",function(){clearTimeout(_this.timeoutId);_this.timeoutId=null;if(_this.state.pos){_this.props.removeLayer("maptipselection");_this.setState({maptips:{},maptipsOrder:[],pos:null})}});_defineProperty(_this,"queryMapTip",function(pos){_this.timeoutId=null;var options={info_format:"text/xml",feature_count:_this.props.layerFeatureCount,FI_POINT_TOLERANCE:16,FI_LINE_TOLERANCE:8,FI_POLYGON_TOLERANCE:4,with_maptip:true,with_htmlcontent:false};var reqId=uuidv4();_this.reqId=reqId;var layerOrder=[];_this.props.layers.forEach(function(layer){if(!(layer.role===LayerRole.THEME||layer.role===LayerRole.USERLAYER)||!(layer.infoFormats||[]).includes("text/xml")||isEmpty(layer.queryLayers)){return}var queryLayers=layer.queryLayers;if(!isEmpty(layer.drawingOrder)){queryLayers=layer.drawingOrder.slice(0).reverse().filter(function(entry){return layer.queryLayers.includes(entry)})}layerOrder.push(layer.id);var request=IdentifyUtils.buildRequest(layer,queryLayers.join(","),_this.state.mousePos.coordinate,_this.props.map,options);IdentifyUtils.sendRequest(request,function(response){if(_this.reqId===reqId){var result=IdentifyUtils.parseXmlResponse(response||"",_this.props.map.projection,layer);var mapTips=[];var features=[];var _iterator=_createForOfIteratorHelper(request.params.layers.split(",")),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var sublayer=_step.value;var sublayerFeatures=(result[sublayer]||[]).filter(function(feature){return feature.properties.maptip});features.push.apply(features,_toConsumableArray(sublayerFeatures));mapTips.push.apply(mapTips,_toConsumableArray(sublayerFeatures.map(function(feature){return feature.properties.maptip})))}}catch(err){_iterator.e(err)}finally{_iterator.f()}if(_this.props.showFeatureSelection&&!isEmpty(features)){var sellayer={id:"maptipselection",role:LayerRole.SELECTION};_this.props.addLayerFeatures(sellayer,features,true)}_this.setState(function(state){return{pos:pos,maptips:_objectSpread(_objectSpread({},state.maptips),{},_defineProperty({},layer.id,mapTips))}})}})});_this.setState({maptipsLayerOrder:layerOrder})});_defineProperty(_this,"parsedContent",function(text){text=DOMPurify.sanitize(text,{ADD_ATTR:["target"]}).replace("&#10;","<br />");var options={replace:function replace(node){if(node.name==="a"){return/*#__PURE__*/React.createElement("a",{href:node.attribs.href,onClick:_this.attributeLinkClicked,target:node.attribs.target||"_blank"},domToReact(node.children,options))}return undefined}};return htmlReactParser(text,options)});_defineProperty(_this,"attributeLinkClicked",function(ev){_this.props.openExternalUrl(ev.target.href,ev.target.target,{docked:_this.props.iframeDialogsInitiallyDocked});ev.preventDefault()});_defineProperty(_this,"positionMapTip",function(el){if(el){var x=_this.state.pos[0];var y=_this.state.pos[1];var parentBBox=el.parentElement.getBoundingClientRect();var bbox=el.getBoundingClientRect();if(x+bbox.width>parentBBox.width){x-=bbox.width}if(y+bbox.height>parentBBox.height){y-=bbox.height}el.style.left=x+"px";el.style.top=y+"px"}});return _this}_inherits(MapTip,_React$Component);return _createClass(MapTip,[{key:"componentDidMount",value:function componentDidMount(){MapUtils.getHook(MapUtils.ADD_POINTER_MOVE_LISTENER)(this.getMapMousePos)}},{key:"componentWillUnmount",value:function componentWillUnmount(){MapUtils.getHook(MapUtils.REMOVE_POINTER_MOVE_LISTENER)(this.getMapMousePos)}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){var _this2=this;if(this.props.map!==prevProps.map){this.clearMaptip()}if(this.props.mapTipsEnabled&&this.state.mousePos&&this.state.mousePos!==prevState.mousePos&&(isEmpty(this.state.pos)||Math.abs(this.state.mousePos.pixel[0]-this.state.pos[0])>5||Math.abs(this.state.mousePos.pixel[1]-this.state.pos[1])>5)){this.timeoutId=setTimeout(function(){return _this2.queryMapTip(_this2.state.mousePos.pixel)},500)}else if(!this.props.mapTipsEnabled&&prevProps.mapTipsEnabled){this.clearMaptip()}}},{key:"render",value:function render(){var _this3=this;if(!isEmpty(this.state.maptips)&&this.state.pos){// Render off-screen first to measure dimensions, then place as necessary
14
- var style={left:10000+"px",top:10000+"px",maxHeight:this.props.maxHeight,maxWidth:this.props.maxWidth};var bufferPos={left:this.state.pos[0]-8+"px",top:this.state.pos[1]-8+"px"};return/*#__PURE__*/ReactDOM.createPortal([/*#__PURE__*/React.createElement("div",{id:"MapTipPointerBuffer",key:"MapTipPointerBuffer",style:bufferPos}),/*#__PURE__*/React.createElement("div",{id:"MapTip",key:"MapTip",ref:this.positionMapTip,style:style},this.state.maptipsLayerOrder.map(function(key){return _this3.state.maptips[key]||[]}).flat().map(function(maptip,idx){return/*#__PURE__*/React.createElement("div",{key:idx},_this3.parsedContent(maptip))}))],this.context)}return null}}])}(React.Component);_defineProperty(MapTip,"contextType",MapContainerPortalContext);_defineProperty(MapTip,"propTypes",{addLayerFeatures:PropTypes.func,iframeDialogsInitiallyDocked:PropTypes.bool,/** The maximum number of feature maptips to display for a single layer. */layerFeatureCount:PropTypes.number,layers:PropTypes.array,map:PropTypes.object,mapTipsEnabled:PropTypes.bool,/** The maximum height of the maptip popop bubble, as a CSS string. */maxHeight:PropTypes.string,/** The maximum height of the maptip popop bubble, as a CSS string. */maxWidth:PropTypes.string,openExternalUrl:PropTypes.func,removeLayer:PropTypes.func,/** Whether to show the maptip feature selection on the map or not */showFeatureSelection:PropTypes.bool});_defineProperty(MapTip,"defaultProps",{layerFeatureCount:5,maxHeight:"15em",maxWidth:"20em",showFeatureSelection:true});export default connect(function(state){return{mapTipsEnabled:state.map.maptips&&state.task.identifyEnabled,layers:state.layers.flat,map:state.map}},{addLayerFeatures:addLayerFeatures,removeLayer:removeLayer,openExternalUrl:openExternalUrl})(MapTip);
53
+ */
54
+ var MapTip = /*#__PURE__*/function (_React$Component) {
55
+ function MapTip() {
56
+ var _this;
57
+ _classCallCheck(this, MapTip);
58
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
59
+ args[_key] = arguments[_key];
60
+ }
61
+ _this = _callSuper(this, MapTip, [].concat(args));
62
+ _defineProperty(_this, "state", {
63
+ maptips: {},
64
+ maptipsLayerOrder: [],
65
+ mousePos: null,
66
+ pos: null
67
+ });
68
+ _defineProperty(_this, "getMapMousePos", function (ev) {
69
+ _this.clearMaptip();
70
+ clearTimeout(_this.mouseStateTimeout);
71
+ _this.mouseStateTimeout = setTimeout(function () {
72
+ _this.setState({
73
+ mousePos: {
74
+ coordinate: ev.coordinate,
75
+ pixel: ev.pixel
76
+ }
77
+ });
78
+ }, 100);
79
+ });
80
+ _defineProperty(_this, "clearMaptip", function () {
81
+ clearTimeout(_this.timeoutId);
82
+ _this.timeoutId = null;
83
+ if (_this.state.pos) {
84
+ _this.props.removeLayer('maptipselection');
85
+ _this.setState({
86
+ maptips: {},
87
+ maptipsOrder: [],
88
+ pos: null
89
+ });
90
+ }
91
+ });
92
+ _defineProperty(_this, "queryMapTip", function (pos) {
93
+ _this.timeoutId = null;
94
+ var options = {
95
+ info_format: 'text/xml',
96
+ feature_count: _this.props.layerFeatureCount,
97
+ FI_POINT_TOLERANCE: 16,
98
+ FI_LINE_TOLERANCE: 8,
99
+ FI_POLYGON_TOLERANCE: 4,
100
+ with_maptip: true,
101
+ with_htmlcontent: false
102
+ };
103
+ var reqId = uuidv4();
104
+ _this.reqId = reqId;
105
+ var layerOrder = [];
106
+ _this.props.layers.forEach(function (layer) {
107
+ if (!(layer.role === LayerRole.THEME || layer.role === LayerRole.USERLAYER) || !(layer.infoFormats || []).includes("text/xml") || isEmpty(layer.queryLayers)) {
108
+ return;
109
+ }
110
+ var queryLayers = layer.queryLayers;
111
+ if (!isEmpty(layer.drawingOrder)) {
112
+ queryLayers = layer.drawingOrder.slice(0).reverse().filter(function (entry) {
113
+ return layer.queryLayers.includes(entry);
114
+ });
115
+ }
116
+ layerOrder.push(layer.id);
117
+ var request = IdentifyUtils.buildRequest(layer, queryLayers.join(","), _this.state.mousePos.coordinate, _this.props.map, options);
118
+ IdentifyUtils.sendRequest(request, function (response) {
119
+ if (_this.reqId === reqId) {
120
+ var result = IdentifyUtils.parseXmlResponse(response || "", _this.props.map.projection, layer);
121
+ var mapTips = [];
122
+ var features = [];
123
+ var _iterator = _createForOfIteratorHelper(request.params.layers.split(",")),
124
+ _step;
125
+ try {
126
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
127
+ var sublayer = _step.value;
128
+ var sublayerFeatures = (result[sublayer] || []).filter(function (feature) {
129
+ return feature.properties.maptip;
130
+ });
131
+ features.push.apply(features, _toConsumableArray(sublayerFeatures));
132
+ mapTips.push.apply(mapTips, _toConsumableArray(sublayerFeatures.map(function (feature) {
133
+ return feature.properties.maptip;
134
+ })));
135
+ }
136
+ } catch (err) {
137
+ _iterator.e(err);
138
+ } finally {
139
+ _iterator.f();
140
+ }
141
+ if (_this.props.showFeatureSelection && !isEmpty(features)) {
142
+ var sellayer = {
143
+ id: "maptipselection",
144
+ role: LayerRole.SELECTION
145
+ };
146
+ _this.props.addLayerFeatures(sellayer, features, true);
147
+ }
148
+ _this.setState(function (state) {
149
+ return {
150
+ pos: pos,
151
+ maptips: _objectSpread(_objectSpread({}, state.maptips), {}, _defineProperty({}, layer.id, mapTips))
152
+ };
153
+ });
154
+ }
155
+ });
156
+ });
157
+ _this.setState({
158
+ maptipsLayerOrder: layerOrder
159
+ });
160
+ });
161
+ _defineProperty(_this, "parsedContent", function (text) {
162
+ text = DOMPurify.sanitize(text, {
163
+ ADD_ATTR: ['target']
164
+ }).replace('&#10;', '<br />');
165
+ var options = {
166
+ replace: function replace(node) {
167
+ if (node.name === "a") {
168
+ return /*#__PURE__*/React.createElement("a", {
169
+ href: node.attribs.href,
170
+ onClick: _this.attributeLinkClicked,
171
+ target: node.attribs.target || "_blank"
172
+ }, domToReact(node.children, options));
173
+ }
174
+ return undefined;
175
+ }
176
+ };
177
+ return htmlReactParser(text, options);
178
+ });
179
+ _defineProperty(_this, "attributeLinkClicked", function (ev) {
180
+ _this.props.openExternalUrl(ev.target.href, ev.target.target, {
181
+ docked: _this.props.iframeDialogsInitiallyDocked
182
+ });
183
+ ev.preventDefault();
184
+ });
185
+ _defineProperty(_this, "positionMapTip", function (el) {
186
+ if (el) {
187
+ var x = _this.state.pos[0];
188
+ var y = _this.state.pos[1];
189
+ var parentBBox = el.parentElement.getBoundingClientRect();
190
+ var bbox = el.getBoundingClientRect();
191
+ if (x + bbox.width > parentBBox.width) {
192
+ x -= bbox.width;
193
+ }
194
+ if (y + bbox.height > parentBBox.height) {
195
+ y -= bbox.height;
196
+ }
197
+ el.style.left = x + "px";
198
+ el.style.top = y + "px";
199
+ }
200
+ });
201
+ return _this;
202
+ }
203
+ _inherits(MapTip, _React$Component);
204
+ return _createClass(MapTip, [{
205
+ key: "componentDidMount",
206
+ value: function componentDidMount() {
207
+ MapUtils.getHook(MapUtils.ADD_POINTER_MOVE_LISTENER)(this.getMapMousePos);
208
+ }
209
+ }, {
210
+ key: "componentWillUnmount",
211
+ value: function componentWillUnmount() {
212
+ MapUtils.getHook(MapUtils.REMOVE_POINTER_MOVE_LISTENER)(this.getMapMousePos);
213
+ }
214
+ }, {
215
+ key: "componentDidUpdate",
216
+ value: function componentDidUpdate(prevProps, prevState) {
217
+ var _this2 = this;
218
+ if (this.props.map !== prevProps.map) {
219
+ this.clearMaptip();
220
+ }
221
+ if (this.props.mapTipsEnabled && this.state.mousePos && this.state.mousePos !== prevState.mousePos && (isEmpty(this.state.pos) || Math.abs(this.state.mousePos.pixel[0] - this.state.pos[0]) > 5 || Math.abs(this.state.mousePos.pixel[1] - this.state.pos[1]) > 5)) {
222
+ this.timeoutId = setTimeout(function () {
223
+ return _this2.queryMapTip(_this2.state.mousePos.pixel);
224
+ }, 500);
225
+ } else if (!this.props.mapTipsEnabled && prevProps.mapTipsEnabled) {
226
+ this.clearMaptip();
227
+ }
228
+ }
229
+ }, {
230
+ key: "render",
231
+ value: function render() {
232
+ var _this3 = this;
233
+ if (!isEmpty(this.state.maptips) && this.state.pos) {
234
+ // Render off-screen first to measure dimensions, then place as necessary
235
+ var style = {
236
+ left: 10000 + "px",
237
+ top: 10000 + "px",
238
+ maxHeight: this.props.maxHeight,
239
+ maxWidth: this.props.maxWidth
240
+ };
241
+ var bufferPos = {
242
+ left: this.state.pos[0] - 8 + "px",
243
+ top: this.state.pos[1] - 8 + "px"
244
+ };
245
+ return /*#__PURE__*/ReactDOM.createPortal([/*#__PURE__*/React.createElement("div", {
246
+ id: "MapTipPointerBuffer",
247
+ key: "MapTipPointerBuffer",
248
+ style: bufferPos
249
+ }), /*#__PURE__*/React.createElement("div", {
250
+ id: "MapTip",
251
+ key: "MapTip",
252
+ ref: this.positionMapTip,
253
+ style: style
254
+ }, this.state.maptipsLayerOrder.map(function (key) {
255
+ return _this3.state.maptips[key] || [];
256
+ }).flat().map(function (maptip, idx) {
257
+ return /*#__PURE__*/React.createElement("div", {
258
+ key: idx
259
+ }, _this3.parsedContent(maptip));
260
+ }))], this.context);
261
+ }
262
+ return null;
263
+ }
264
+ }]);
265
+ }(React.Component);
266
+ _defineProperty(MapTip, "contextType", MapContainerPortalContext);
267
+ _defineProperty(MapTip, "propTypes", {
268
+ addLayerFeatures: PropTypes.func,
269
+ iframeDialogsInitiallyDocked: PropTypes.bool,
270
+ /** The maximum number of feature maptips to display for a single layer. */
271
+ layerFeatureCount: PropTypes.number,
272
+ layers: PropTypes.array,
273
+ map: PropTypes.object,
274
+ mapTipsEnabled: PropTypes.bool,
275
+ /** The maximum height of the maptip popop bubble, as a CSS string. */
276
+ maxHeight: PropTypes.string,
277
+ /** The maximum height of the maptip popop bubble, as a CSS string. */
278
+ maxWidth: PropTypes.string,
279
+ openExternalUrl: PropTypes.func,
280
+ removeLayer: PropTypes.func,
281
+ /** Whether to show the maptip feature selection on the map or not */
282
+ showFeatureSelection: PropTypes.bool
283
+ });
284
+ _defineProperty(MapTip, "defaultProps", {
285
+ layerFeatureCount: 5,
286
+ maxHeight: "15em",
287
+ maxWidth: "20em",
288
+ showFeatureSelection: true
289
+ });
290
+ export default connect(function (state) {
291
+ return {
292
+ mapTipsEnabled: state.map.maptips && state.task.identifyEnabled,
293
+ layers: state.layers.flat,
294
+ map: state.map
295
+ };
296
+ }, {
297
+ addLayerFeatures: addLayerFeatures,
298
+ removeLayer: removeLayer,
299
+ openExternalUrl: openExternalUrl
300
+ })(MapTip);
@@ -1,10 +1,226 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
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); }
2
+ 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; }
3
+ 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; }
4
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
5
+ 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); } }
6
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
7
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
8
+ 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); }
9
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
10
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
11
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
12
+ 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); }
13
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
14
+ 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; }
15
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
16
+ 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); }
17
+ /**
2
18
  * Copyright 2016-2024 Sourcepole AG
3
19
  * All rights reserved.
4
20
  *
5
21
  * This source code is licensed under the BSD-style license found in the
6
22
  * 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{setSnappingConfig}from"../actions/map.js";import{changeMeasurementState}from"../actions/measurement.js";import TaskBar from"../components/TaskBar";import ButtonBar from"../components/widgets/ButtonBar";import CopyButton from"../components/widgets/CopyButton";import CoordinatesUtils from"../utils/CoordinatesUtils.js";import LocaleUtils from"../utils/LocaleUtils";import MeasureUtils from"../utils/MeasureUtils";import"./style/Measure.css";/**
23
+ */
24
+
25
+ import React from 'react';
26
+ import { connect } from 'react-redux';
27
+ import PropTypes from 'prop-types';
28
+ import { setSnappingConfig } from '../actions/map.js';
29
+ import { changeMeasurementState } from '../actions/measurement.js';
30
+ import TaskBar from '../components/TaskBar';
31
+ import ButtonBar from '../components/widgets/ButtonBar';
32
+ import CopyButton from '../components/widgets/CopyButton';
33
+ import CoordinatesUtils from '../utils/CoordinatesUtils.js';
34
+ import LocaleUtils from '../utils/LocaleUtils';
35
+ import MeasureUtils from '../utils/MeasureUtils';
36
+ import './style/Measure.css';
37
+
38
+ /**
8
39
  * Allows measuring points/lines/areas on the map.
9
- */var Measure=/*#__PURE__*/function(_React$Component){function Measure(){var _this;_classCallCheck(this,Measure);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,Measure,[].concat(args));_defineProperty(_this,"onShow",function(mode){_this.props.changeMeasurementState({geomType:mode||"Point",bearingHeadMarker:_this.props.bearingHeadMarker,bearingTailMarker:_this.props.bearingTailMarker,lineHeadMarker:_this.props.lineHeadMarker,lineTailMarker:_this.props.lineTailMarker});_this.props.setSnappingConfig(_this.props.snapping,_this.props.snappingActive)});_defineProperty(_this,"onHide",function(){_this.props.changeMeasurementState({geomType:null})});_defineProperty(_this,"setMeasureMode",function(geomType){if(geomType!==_this.props.measureState.geomType){_this.props.changeMeasurementState({geomType:geomType})}});_defineProperty(_this,"changeLengthUnit",function(ev){_this.props.changeMeasurementState(_objectSpread(_objectSpread({},_this.props.measureState),{},{lenUnit:ev.target.value}))});_defineProperty(_this,"changeAreaUnit",function(ev){_this.props.changeMeasurementState(_objectSpread(_objectSpread({},_this.props.measureState),{},{areaUnit:ev.target.value}))});_defineProperty(_this,"renderModeSwitcher",function(){if(!_this.props.showMeasureModeSwitcher){return null}var buttons=[{key:"Point",label:LocaleUtils.tr("measureComponent.pointLabel")},{key:"LineString",label:LocaleUtils.tr("measureComponent.lengthLabel")},{key:"Polygon",label:LocaleUtils.tr("measureComponent.areaLabel")},{key:"Bearing",label:LocaleUtils.tr("measureComponent.bearingLabel")}];return/*#__PURE__*/React.createElement(ButtonBar,{active:_this.props.measureState.geomType,buttons:buttons,onClick:_this.setMeasureMode})});_defineProperty(_this,"renderResult",function(){var text="";var unitSelector=null;if(_this.props.measureState.geomType==="Point"){var coo=_this.props.measureState.coordinates||[0,0];text=CoordinatesUtils.getFormattedCoordinate(coo,_this.props.mapCrs,_this.props.displayCrs)}else if(_this.props.measureState.geomType==="LineString"){var length=_this.props.measureState.length||0;text=MeasureUtils.formatMeasurement(length,false,_this.props.measureState.lenUnit);unitSelector=/*#__PURE__*/React.createElement("select",{onChange:_this.changeLengthUnit,value:_this.props.measureState.lenUnit},/*#__PURE__*/React.createElement("option",{value:"metric"},LocaleUtils.tr("measureComponent.metric")),/*#__PURE__*/React.createElement("option",{value:"imperial"},LocaleUtils.tr("measureComponent.imperial")),/*#__PURE__*/React.createElement("option",{value:"m"},"m"),/*#__PURE__*/React.createElement("option",{value:"km"},"km"),/*#__PURE__*/React.createElement("option",{value:"ft"},"ft"),/*#__PURE__*/React.createElement("option",{value:"mi"},"mi"))}else if(_this.props.measureState.geomType==="Polygon"){var area=_this.props.measureState.area||0;text=MeasureUtils.formatMeasurement(area,true,_this.props.measureState.areaUnit);unitSelector=/*#__PURE__*/React.createElement("select",{onChange:_this.changeAreaUnit,value:_this.props.measureState.areaUnit},/*#__PURE__*/React.createElement("option",{value:"metric"},LocaleUtils.tr("measureComponent.metric")),/*#__PURE__*/React.createElement("option",{value:"imperial"},LocaleUtils.tr("measureComponent.imperial")),/*#__PURE__*/React.createElement("option",{value:"sqm"},"m\xB2"),/*#__PURE__*/React.createElement("option",{value:"ha"},"ha"),/*#__PURE__*/React.createElement("option",{value:"sqkm"},"km\xB2"),/*#__PURE__*/React.createElement("option",{value:"sqft"},"ft\xB2"),/*#__PURE__*/React.createElement("option",{value:"acre"},"acre"),/*#__PURE__*/React.createElement("option",{value:"sqmi"},"mi\xB2"))}else if(_this.props.measureState.geomType==="Bearing"){text=MeasureUtils.getFormattedBearingValue(_this.props.measureState.bearing)}return/*#__PURE__*/React.createElement("div",{className:"measure-result controlgroup"},/*#__PURE__*/React.createElement("input",{className:"measure-result-field",readOnly:true,type:"text",value:text}),unitSelector,/*#__PURE__*/React.createElement(CopyButton,{text:text}))});_defineProperty(_this,"renderBody",function(){return/*#__PURE__*/React.createElement("div",{className:"measure-body"},_this.renderModeSwitcher(),_this.renderResult())});return _this}_inherits(Measure,_React$Component);return _createClass(Measure,[{key:"render",value:function render(){var _this2=this;return/*#__PURE__*/React.createElement(TaskBar,{onHide:this.onHide,onShow:this.onShow,task:"Measure"},function(){return{body:_this2.renderBody()}})}}])}(React.Component);_defineProperty(Measure,"propTypes",{/** Head marker of bearing line measurement geometry. Can be one of `OUTARROW`, `INARROW`, `LINE`. */bearingHeadMarker:PropTypes.string,/** Tail marker of bearing line measurement geometry. Can be one of `OUTARROW`, `INARROW`, `LINE`. */bearingTailMarker:PropTypes.string,changeMeasurementState:PropTypes.func,displayCrs:PropTypes.string,/** Head marker of distance line measurement geometry. Can be one of `OUTARROW`, `INARROW`, `LINE`. */lineHeadMarker:PropTypes.string,/** Tail marker of distance line measurement geometry. Can be one of `OUTARROW`, `INARROW`, `LINE`. */lineTailMarker:PropTypes.string,mapCrs:PropTypes.string,measureState:PropTypes.object,setSnappingConfig:PropTypes.func,/** Whether to show the widget to switch between measure modes. */showMeasureModeSwitcher:PropTypes.bool,/** Whether snapping is available when editing. */snapping:PropTypes.bool,/** Whether snapping is enabled by default when editing.
10
- * Either `false`, `edge`, `vertex` or `true` (i.e. both vertex and edge). */snappingActive:PropTypes.oneOfType([PropTypes.bool,PropTypes.string])});_defineProperty(Measure,"defaultProps",{showMeasureModeSwitcher:true,snapping:true,snappingActive:true});export default connect(function(state){return{measureState:state.measurement,mapCrs:state.map.projection,displayCrs:state.map.displayCrs}},{changeMeasurementState:changeMeasurementState,setSnappingConfig:setSnappingConfig})(Measure);
40
+ */
41
+ var Measure = /*#__PURE__*/function (_React$Component) {
42
+ function Measure() {
43
+ var _this;
44
+ _classCallCheck(this, Measure);
45
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
46
+ args[_key] = arguments[_key];
47
+ }
48
+ _this = _callSuper(this, Measure, [].concat(args));
49
+ _defineProperty(_this, "onShow", function (mode) {
50
+ _this.props.changeMeasurementState({
51
+ geomType: mode || 'Point',
52
+ bearingHeadMarker: _this.props.bearingHeadMarker,
53
+ bearingTailMarker: _this.props.bearingTailMarker,
54
+ lineHeadMarker: _this.props.lineHeadMarker,
55
+ lineTailMarker: _this.props.lineTailMarker
56
+ });
57
+ _this.props.setSnappingConfig(_this.props.snapping, _this.props.snappingActive);
58
+ });
59
+ _defineProperty(_this, "onHide", function () {
60
+ _this.props.changeMeasurementState({
61
+ geomType: null
62
+ });
63
+ });
64
+ _defineProperty(_this, "setMeasureMode", function (geomType) {
65
+ if (geomType !== _this.props.measureState.geomType) {
66
+ _this.props.changeMeasurementState({
67
+ geomType: geomType
68
+ });
69
+ }
70
+ });
71
+ _defineProperty(_this, "changeLengthUnit", function (ev) {
72
+ _this.props.changeMeasurementState(_objectSpread(_objectSpread({}, _this.props.measureState), {}, {
73
+ lenUnit: ev.target.value
74
+ }));
75
+ });
76
+ _defineProperty(_this, "changeAreaUnit", function (ev) {
77
+ _this.props.changeMeasurementState(_objectSpread(_objectSpread({}, _this.props.measureState), {}, {
78
+ areaUnit: ev.target.value
79
+ }));
80
+ });
81
+ _defineProperty(_this, "renderModeSwitcher", function () {
82
+ if (!_this.props.showMeasureModeSwitcher) {
83
+ return null;
84
+ }
85
+ var buttons = [{
86
+ key: "Point",
87
+ label: LocaleUtils.tr("measureComponent.pointLabel")
88
+ }, {
89
+ key: "LineString",
90
+ label: LocaleUtils.tr("measureComponent.lengthLabel")
91
+ }, {
92
+ key: "Polygon",
93
+ label: LocaleUtils.tr("measureComponent.areaLabel")
94
+ }, {
95
+ key: "Bearing",
96
+ label: LocaleUtils.tr("measureComponent.bearingLabel")
97
+ }];
98
+ return /*#__PURE__*/React.createElement(ButtonBar, {
99
+ active: _this.props.measureState.geomType,
100
+ buttons: buttons,
101
+ onClick: _this.setMeasureMode
102
+ });
103
+ });
104
+ _defineProperty(_this, "renderResult", function () {
105
+ var text = "";
106
+ var unitSelector = null;
107
+ if (_this.props.measureState.geomType === "Point") {
108
+ var coo = _this.props.measureState.coordinates || [0, 0];
109
+ text = CoordinatesUtils.getFormattedCoordinate(coo, _this.props.mapCrs, _this.props.displayCrs);
110
+ } else if (_this.props.measureState.geomType === "LineString") {
111
+ var length = _this.props.measureState.length || 0;
112
+ text = MeasureUtils.formatMeasurement(length, false, _this.props.measureState.lenUnit);
113
+ unitSelector = /*#__PURE__*/React.createElement("select", {
114
+ onChange: _this.changeLengthUnit,
115
+ value: _this.props.measureState.lenUnit
116
+ }, /*#__PURE__*/React.createElement("option", {
117
+ value: "metric"
118
+ }, LocaleUtils.tr("measureComponent.metric")), /*#__PURE__*/React.createElement("option", {
119
+ value: "imperial"
120
+ }, LocaleUtils.tr("measureComponent.imperial")), /*#__PURE__*/React.createElement("option", {
121
+ value: "m"
122
+ }, "m"), /*#__PURE__*/React.createElement("option", {
123
+ value: "km"
124
+ }, "km"), /*#__PURE__*/React.createElement("option", {
125
+ value: "ft"
126
+ }, "ft"), /*#__PURE__*/React.createElement("option", {
127
+ value: "mi"
128
+ }, "mi"));
129
+ } else if (_this.props.measureState.geomType === "Polygon") {
130
+ var area = _this.props.measureState.area || 0;
131
+ text = MeasureUtils.formatMeasurement(area, true, _this.props.measureState.areaUnit);
132
+ unitSelector = /*#__PURE__*/React.createElement("select", {
133
+ onChange: _this.changeAreaUnit,
134
+ value: _this.props.measureState.areaUnit
135
+ }, /*#__PURE__*/React.createElement("option", {
136
+ value: "metric"
137
+ }, LocaleUtils.tr("measureComponent.metric")), /*#__PURE__*/React.createElement("option", {
138
+ value: "imperial"
139
+ }, LocaleUtils.tr("measureComponent.imperial")), /*#__PURE__*/React.createElement("option", {
140
+ value: "sqm"
141
+ }, "m\xB2"), /*#__PURE__*/React.createElement("option", {
142
+ value: "ha"
143
+ }, "ha"), /*#__PURE__*/React.createElement("option", {
144
+ value: "sqkm"
145
+ }, "km\xB2"), /*#__PURE__*/React.createElement("option", {
146
+ value: "sqft"
147
+ }, "ft\xB2"), /*#__PURE__*/React.createElement("option", {
148
+ value: "acre"
149
+ }, "acre"), /*#__PURE__*/React.createElement("option", {
150
+ value: "sqmi"
151
+ }, "mi\xB2"));
152
+ } else if (_this.props.measureState.geomType === "Bearing") {
153
+ text = MeasureUtils.getFormattedBearingValue(_this.props.measureState.bearing);
154
+ }
155
+ return /*#__PURE__*/React.createElement("div", {
156
+ className: "measure-result controlgroup"
157
+ }, /*#__PURE__*/React.createElement("input", {
158
+ className: "measure-result-field",
159
+ readOnly: true,
160
+ type: "text",
161
+ value: text
162
+ }), unitSelector, /*#__PURE__*/React.createElement(CopyButton, {
163
+ text: text
164
+ }));
165
+ });
166
+ _defineProperty(_this, "renderBody", function () {
167
+ return /*#__PURE__*/React.createElement("div", {
168
+ className: "measure-body"
169
+ }, _this.renderModeSwitcher(), _this.renderResult());
170
+ });
171
+ return _this;
172
+ }
173
+ _inherits(Measure, _React$Component);
174
+ return _createClass(Measure, [{
175
+ key: "render",
176
+ value: function render() {
177
+ var _this2 = this;
178
+ return /*#__PURE__*/React.createElement(TaskBar, {
179
+ onHide: this.onHide,
180
+ onShow: this.onShow,
181
+ task: "Measure"
182
+ }, function () {
183
+ return {
184
+ body: _this2.renderBody()
185
+ };
186
+ });
187
+ }
188
+ }]);
189
+ }(React.Component);
190
+ _defineProperty(Measure, "propTypes", {
191
+ /** Head marker of bearing line measurement geometry. Can be one of `OUTARROW`, `INARROW`, `LINE`. */
192
+ bearingHeadMarker: PropTypes.string,
193
+ /** Tail marker of bearing line measurement geometry. Can be one of `OUTARROW`, `INARROW`, `LINE`. */
194
+ bearingTailMarker: PropTypes.string,
195
+ changeMeasurementState: PropTypes.func,
196
+ displayCrs: PropTypes.string,
197
+ /** Head marker of distance line measurement geometry. Can be one of `OUTARROW`, `INARROW`, `LINE`. */
198
+ lineHeadMarker: PropTypes.string,
199
+ /** Tail marker of distance line measurement geometry. Can be one of `OUTARROW`, `INARROW`, `LINE`. */
200
+ lineTailMarker: PropTypes.string,
201
+ mapCrs: PropTypes.string,
202
+ measureState: PropTypes.object,
203
+ setSnappingConfig: PropTypes.func,
204
+ /** Whether to show the widget to switch between measure modes. */
205
+ showMeasureModeSwitcher: PropTypes.bool,
206
+ /** Whether snapping is available when editing. */
207
+ snapping: PropTypes.bool,
208
+ /** Whether snapping is enabled by default when editing.
209
+ * Either `false`, `edge`, `vertex` or `true` (i.e. both vertex and edge). */
210
+ snappingActive: PropTypes.oneOfType([PropTypes.bool, PropTypes.string])
211
+ });
212
+ _defineProperty(Measure, "defaultProps", {
213
+ showMeasureModeSwitcher: true,
214
+ snapping: true,
215
+ snappingActive: true
216
+ });
217
+ export default connect(function (state) {
218
+ return {
219
+ measureState: state.measurement,
220
+ mapCrs: state.map.projection,
221
+ displayCrs: state.map.displayCrs
222
+ };
223
+ }, {
224
+ changeMeasurementState: changeMeasurementState,
225
+ setSnappingConfig: setSnappingConfig
226
+ })(Measure);