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
@@ -1,13 +1,299 @@
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)}/**
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 _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
3
+ 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); } }
4
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
5
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
6
+ 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); }
7
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
8
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
9
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
10
+ 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); }
11
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
12
+ 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; }
13
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
14
+ 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); }
15
+ /**
2
16
  * Copyright 2021 Oslandia SAS <infos+qwc2@oslandia.com>
3
17
  * All rights reserved.
4
18
  *
5
19
  * This source code is licensed under the BSD-style license found in the
6
20
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import{connect}from"react-redux";import classnames from"classnames";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{zoomToExtent,zoomToPoint}from"../actions/map";import Icon from"../components/Icon";import SideBar from"../components/SideBar";import Spinner from"../components/widgets/Spinner";import ConfigUtils from"../utils/ConfigUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import{createBookmark,getUserBookmarks,removeBookmark,resolveBookmark,updateBookmark}from"../utils/PermaLinkUtils";import"./style/Bookmark.css";/**
21
+ */
22
+
23
+ import React from 'react';
24
+ import { connect } from 'react-redux';
25
+ import classnames from 'classnames';
26
+ import isEmpty from 'lodash.isempty';
27
+ import PropTypes from 'prop-types';
28
+ import { zoomToExtent, zoomToPoint } from '../actions/map';
29
+ import Icon from '../components/Icon';
30
+ import SideBar from '../components/SideBar';
31
+ import Spinner from '../components/widgets/Spinner';
32
+ import ConfigUtils from '../utils/ConfigUtils';
33
+ import LocaleUtils from '../utils/LocaleUtils';
34
+ import MapUtils from '../utils/MapUtils';
35
+ import { createBookmark, getUserBookmarks, removeBookmark, resolveBookmark, updateBookmark } from '../utils/PermaLinkUtils';
36
+ import './style/Bookmark.css';
37
+
38
+ /**
8
39
  * Allows managing user bookmarks.
9
40
  *
10
41
  * Bookmarks are only allowed for authenticated users.
11
42
  *
12
43
  * Requires `permalinkServiceUrl` to point to a `qwc-permalink-service`.
13
- */var Bookmark=/*#__PURE__*/function(_React$Component){function Bookmark(){var _this;_classCallCheck(this,Bookmark);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,Bookmark,[].concat(args));_defineProperty(_this,"state",{bookmarks:[],currentBookmark:null,description:"",saving:false});_defineProperty(_this,"open",function(bookmarkkey,newtab){var url=location.href.split("?")[0]+"?bk="+bookmarkkey;if(newtab){window.open(url,"_blank")}else{location.href=url}});_defineProperty(_this,"zoomToBookmarkExtent",function(bookmarkkey){resolveBookmark(bookmarkkey,function(params){if("c"in params&&"s"in params){var _params$crs;var scale=parseFloat(params.s);var zoom=MapUtils.computeZoom(_this.props.mapScales,scale);var center=params.c.split(/[;,]/g).map(function(x){return parseFloat(x)});_this.props.zoomToPoint(center,zoom,(_params$crs=params.crs)!==null&&_params$crs!==void 0?_params$crs:_this.props.mapCrs)}else if("e"in params){var _params$crs2;var bounds=params.e.split(",").map(function(n){return parseFloat(n)});_this.props.zoomToExtent(bounds,(_params$crs2=params.crs)!==null&&_params$crs2!==void 0?_params$crs2:_this.props.mapCrs)}})});_defineProperty(_this,"toggleCurrentBookmark",function(bookmark){if(_this.state.currentBookmark===bookmark.key){_this.setState({currentBookmark:null,description:""})}else{_this.setState({currentBookmark:bookmark.key,description:bookmark.description})}});_defineProperty(_this,"addBookmark",function(){createBookmark(_this.state.description,function(success){if(!success){/* eslint-disable-next-line */alert(LocaleUtils.tr("bookmark.addfailed"))}_this.refresh()});_this.setState({description:"",currentBookmark:null})});_defineProperty(_this,"updateBookmark",function(bookmark){_this.setState({saving:true});updateBookmark(bookmark.key,_this.state.description,function(success){if(!success){/* eslint-disable-next-line */alert(LocaleUtils.tr("bookmark.savefailed"))}_this.setState({saving:false,description:"",currentBookmark:null});_this.refresh()})});_defineProperty(_this,"removeBookmark",function(bookmark){removeBookmark(bookmark.key,function(success){if(!success){/* eslint-disable-next-line */alert(LocaleUtils.tr("bookmark.removefailed"))}_this.refresh()})});_defineProperty(_this,"refresh",function(){getUserBookmarks(ConfigUtils.getConfigProp("username"),function(bookmarks){_this.setState({bookmarks:bookmarks})})});return _this}_inherits(Bookmark,_React$Component);return _createClass(Bookmark,[{key:"componentDidMount",value:function componentDidMount(){this.refresh()}},{key:"render",value:function render(){var _this2=this;var openTitle=LocaleUtils.tr("bookmark.open");var openTabTitle=LocaleUtils.tr("bookmark.openTab");var zoomTitle=LocaleUtils.tr("bookmark.zoomToExtent");var username=ConfigUtils.getConfigProp("username");var placeholder=LocaleUtils.tr("bookmark.description");var addBookmarkTitle=LocaleUtils.tr("bookmark.add");var updateTitle=LocaleUtils.tr("bookmark.update");var removeTitle=LocaleUtils.tr("bookmark.remove");var lastUpdateTitle=LocaleUtils.tr("bookmark.lastUpdate");var currentBookmark=this.state.bookmarks.find(function(bookmark){return bookmark.key===_this2.state.currentBookmark});return/*#__PURE__*/React.createElement(SideBar,{icon:"bookmark",id:"Bookmark",side:this.props.side,title:LocaleUtils.tr("appmenu.items.Bookmark"),width:"20em"},!username?/*#__PURE__*/React.createElement("div",{className:"bookmark-body",role:"body"},LocaleUtils.tr("bookmark.notloggedin")):/*#__PURE__*/React.createElement("div",{className:"bookmark-body",role:"body"},/*#__PURE__*/React.createElement("h4",null,LocaleUtils.tr("bookmark.manage")),/*#__PURE__*/React.createElement("div",{className:"bookmark-create"},/*#__PURE__*/React.createElement("input",{onChange:function onChange(ev){return _this2.setState({description:ev.target.value})},onKeyDown:function onKeyDown(ev){if(ev.key==="Enter"&&_this2.state.description!==""){_this2.addBookmark()}},placeholder:placeholder,type:"text",value:this.state.description})),/*#__PURE__*/React.createElement("div",{className:"bookmark-actions controlgroup"},/*#__PURE__*/React.createElement("button",{className:"button",disabled:!currentBookmark,onClick:function onClick(){return _this2.open(currentBookmark.key,false)},title:openTitle},/*#__PURE__*/React.createElement(Icon,{icon:"folder-open"})),/*#__PURE__*/React.createElement("button",{className:"button",disabled:!currentBookmark,onClick:function onClick(){return _this2.open(currentBookmark.key,true)},title:openTabTitle},/*#__PURE__*/React.createElement(Icon,{icon:"open_link"})),this.props.mapCrs&&this.props.mapScales?/*#__PURE__*/React.createElement("button",{className:"button",disabled:!currentBookmark,onClick:function onClick(){return _this2.zoomToBookmarkExtent(currentBookmark.key)},title:zoomTitle},/*#__PURE__*/React.createElement(Icon,{icon:"zoom"})):null,/*#__PURE__*/React.createElement("span",{className:"bookmark-actions-spacer"}),/*#__PURE__*/React.createElement("button",{className:"button",disabled:!this.state.description,onClick:this.addBookmark,title:addBookmarkTitle},/*#__PURE__*/React.createElement(Icon,{icon:"plus"})),/*#__PURE__*/React.createElement("button",{className:"button",disabled:!currentBookmark||!this.state.description,onClick:function onClick(){return _this2.updateBookmark(currentBookmark)},title:updateTitle},this.state.saving?/*#__PURE__*/React.createElement(Spinner,null):/*#__PURE__*/React.createElement(Icon,{icon:"save"})),/*#__PURE__*/React.createElement("button",{className:"button",disabled:!currentBookmark,onClick:function onClick(){return _this2.removeBookmark(currentBookmark)},title:removeTitle},/*#__PURE__*/React.createElement(Icon,{icon:"trash"}))),/*#__PURE__*/React.createElement("div",{className:"bookmark-list"},this.state.bookmarks.map(function(bookmark){var itemclasses=classnames({"bookmark-list-item":true,"bookmark-list-item-active":_this2.state.currentBookmark===bookmark.key});return/*#__PURE__*/React.createElement("div",{className:itemclasses,key:bookmark.key,onClick:function onClick(){return _this2.toggleCurrentBookmark(bookmark)},onDoubleClick:function onDoubleClick(){return _this2.open(bookmark.key,false)},title:lastUpdateTitle+": "+bookmark.date},bookmark.description)}),isEmpty(this.state.bookmarks)?/*#__PURE__*/React.createElement("div",{className:"bookmark-list-item-empty"},LocaleUtils.tr("bookmark.nobookmarks")):null)))}}])}(React.Component);_defineProperty(Bookmark,"availableIn3D",true);_defineProperty(Bookmark,"propTypes",{mapCrs:PropTypes.string,mapScales:PropTypes.array,/** The side of the application on which to display the sidebar. */side:PropTypes.string,zoomToExtent:PropTypes.func,zoomToPoint:PropTypes.func});_defineProperty(Bookmark,"defaultProps",{side:"right"});var selector=function selector(state){var _state$map,_state$map2;return{mapCrs:(_state$map=state.map)===null||_state$map===void 0?void 0:_state$map.projection,mapScales:(_state$map2=state.map)===null||_state$map2===void 0?void 0:_state$map2.scales}};export default connect(selector,{zoomToExtent:zoomToExtent,zoomToPoint:zoomToPoint})(Bookmark);
44
+ */
45
+ var Bookmark = /*#__PURE__*/function (_React$Component) {
46
+ function Bookmark() {
47
+ var _this;
48
+ _classCallCheck(this, Bookmark);
49
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
50
+ args[_key] = arguments[_key];
51
+ }
52
+ _this = _callSuper(this, Bookmark, [].concat(args));
53
+ _defineProperty(_this, "state", {
54
+ bookmarks: [],
55
+ currentBookmark: null,
56
+ description: "",
57
+ saving: false
58
+ });
59
+ _defineProperty(_this, "open", function (bookmarkkey, newtab) {
60
+ var url = location.href.split("?")[0] + '?bk=' + bookmarkkey;
61
+ if (newtab) {
62
+ window.open(url, '_blank');
63
+ } else {
64
+ location.href = url;
65
+ }
66
+ });
67
+ _defineProperty(_this, "zoomToBookmarkExtent", function (bookmarkkey) {
68
+ resolveBookmark(bookmarkkey, function (params) {
69
+ if ('c' in params && 's' in params) {
70
+ var _params$crs;
71
+ var scale = parseFloat(params.s);
72
+ var zoom = MapUtils.computeZoom(_this.props.mapScales, scale);
73
+ var center = params.c.split(/[;,]/g).map(function (x) {
74
+ return parseFloat(x);
75
+ });
76
+ _this.props.zoomToPoint(center, zoom, (_params$crs = params.crs) !== null && _params$crs !== void 0 ? _params$crs : _this.props.mapCrs);
77
+ } else if ('e' in params) {
78
+ var _params$crs2;
79
+ var bounds = params.e.split(',').map(function (n) {
80
+ return parseFloat(n);
81
+ });
82
+ _this.props.zoomToExtent(bounds, (_params$crs2 = params.crs) !== null && _params$crs2 !== void 0 ? _params$crs2 : _this.props.mapCrs);
83
+ }
84
+ });
85
+ });
86
+ _defineProperty(_this, "toggleCurrentBookmark", function (bookmark) {
87
+ if (_this.state.currentBookmark === bookmark.key) {
88
+ _this.setState({
89
+ currentBookmark: null,
90
+ description: ""
91
+ });
92
+ } else {
93
+ _this.setState({
94
+ currentBookmark: bookmark.key,
95
+ description: bookmark.description
96
+ });
97
+ }
98
+ });
99
+ _defineProperty(_this, "addBookmark", function () {
100
+ createBookmark(_this.state.description, function (success) {
101
+ if (!success) {
102
+ /* eslint-disable-next-line */
103
+ alert(LocaleUtils.tr("bookmark.addfailed"));
104
+ }
105
+ _this.refresh();
106
+ });
107
+ _this.setState({
108
+ description: "",
109
+ currentBookmark: null
110
+ });
111
+ });
112
+ _defineProperty(_this, "updateBookmark", function (bookmark) {
113
+ _this.setState({
114
+ saving: true
115
+ });
116
+ updateBookmark(bookmark.key, _this.state.description, function (success) {
117
+ if (!success) {
118
+ /* eslint-disable-next-line */
119
+ alert(LocaleUtils.tr("bookmark.savefailed"));
120
+ }
121
+ _this.setState({
122
+ saving: false,
123
+ description: "",
124
+ currentBookmark: null
125
+ });
126
+ _this.refresh();
127
+ });
128
+ });
129
+ _defineProperty(_this, "removeBookmark", function (bookmark) {
130
+ removeBookmark(bookmark.key, function (success) {
131
+ if (!success) {
132
+ /* eslint-disable-next-line */
133
+ alert(LocaleUtils.tr("bookmark.removefailed"));
134
+ }
135
+ _this.refresh();
136
+ });
137
+ });
138
+ _defineProperty(_this, "refresh", function () {
139
+ getUserBookmarks(ConfigUtils.getConfigProp("username"), function (bookmarks) {
140
+ _this.setState({
141
+ bookmarks: bookmarks
142
+ });
143
+ });
144
+ });
145
+ return _this;
146
+ }
147
+ _inherits(Bookmark, _React$Component);
148
+ return _createClass(Bookmark, [{
149
+ key: "componentDidMount",
150
+ value: function componentDidMount() {
151
+ this.refresh();
152
+ }
153
+ }, {
154
+ key: "render",
155
+ value: function render() {
156
+ var _this2 = this;
157
+ var openTitle = LocaleUtils.tr("bookmark.open");
158
+ var openTabTitle = LocaleUtils.tr("bookmark.openTab");
159
+ var zoomTitle = LocaleUtils.tr("bookmark.zoomToExtent");
160
+ var username = ConfigUtils.getConfigProp("username");
161
+ var placeholder = LocaleUtils.tr("bookmark.description");
162
+ var addBookmarkTitle = LocaleUtils.tr("bookmark.add");
163
+ var updateTitle = LocaleUtils.tr("bookmark.update");
164
+ var removeTitle = LocaleUtils.tr("bookmark.remove");
165
+ var lastUpdateTitle = LocaleUtils.tr("bookmark.lastUpdate");
166
+ var currentBookmark = this.state.bookmarks.find(function (bookmark) {
167
+ return bookmark.key === _this2.state.currentBookmark;
168
+ });
169
+ return /*#__PURE__*/React.createElement(SideBar, {
170
+ icon: "bookmark",
171
+ id: "Bookmark",
172
+ side: this.props.side,
173
+ title: LocaleUtils.tr("appmenu.items.Bookmark"),
174
+ width: "20em"
175
+ }, !username ? /*#__PURE__*/React.createElement("div", {
176
+ className: "bookmark-body",
177
+ role: "body"
178
+ }, LocaleUtils.tr("bookmark.notloggedin")) : /*#__PURE__*/React.createElement("div", {
179
+ className: "bookmark-body",
180
+ role: "body"
181
+ }, /*#__PURE__*/React.createElement("h4", null, LocaleUtils.tr("bookmark.manage")), /*#__PURE__*/React.createElement("div", {
182
+ className: "bookmark-create"
183
+ }, /*#__PURE__*/React.createElement("input", {
184
+ onChange: function onChange(ev) {
185
+ return _this2.setState({
186
+ description: ev.target.value
187
+ });
188
+ },
189
+ onKeyDown: function onKeyDown(ev) {
190
+ if (ev.key === "Enter" && _this2.state.description !== "") {
191
+ _this2.addBookmark();
192
+ }
193
+ },
194
+ placeholder: placeholder,
195
+ type: "text",
196
+ value: this.state.description
197
+ })), /*#__PURE__*/React.createElement("div", {
198
+ className: "bookmark-actions controlgroup"
199
+ }, /*#__PURE__*/React.createElement("button", {
200
+ className: "button",
201
+ disabled: !currentBookmark,
202
+ onClick: function onClick() {
203
+ return _this2.open(currentBookmark.key, false);
204
+ },
205
+ title: openTitle
206
+ }, /*#__PURE__*/React.createElement(Icon, {
207
+ icon: "folder-open"
208
+ })), /*#__PURE__*/React.createElement("button", {
209
+ className: "button",
210
+ disabled: !currentBookmark,
211
+ onClick: function onClick() {
212
+ return _this2.open(currentBookmark.key, true);
213
+ },
214
+ title: openTabTitle
215
+ }, /*#__PURE__*/React.createElement(Icon, {
216
+ icon: "open_link"
217
+ })), this.props.mapCrs && this.props.mapScales ? /*#__PURE__*/React.createElement("button", {
218
+ className: "button",
219
+ disabled: !currentBookmark,
220
+ onClick: function onClick() {
221
+ return _this2.zoomToBookmarkExtent(currentBookmark.key);
222
+ },
223
+ title: zoomTitle
224
+ }, /*#__PURE__*/React.createElement(Icon, {
225
+ icon: "zoom"
226
+ })) : null, /*#__PURE__*/React.createElement("span", {
227
+ className: "bookmark-actions-spacer"
228
+ }), /*#__PURE__*/React.createElement("button", {
229
+ className: "button",
230
+ disabled: !this.state.description,
231
+ onClick: this.addBookmark,
232
+ title: addBookmarkTitle
233
+ }, /*#__PURE__*/React.createElement(Icon, {
234
+ icon: "plus"
235
+ })), /*#__PURE__*/React.createElement("button", {
236
+ className: "button",
237
+ disabled: !currentBookmark || !this.state.description,
238
+ onClick: function onClick() {
239
+ return _this2.updateBookmark(currentBookmark);
240
+ },
241
+ title: updateTitle
242
+ }, this.state.saving ? /*#__PURE__*/React.createElement(Spinner, null) : /*#__PURE__*/React.createElement(Icon, {
243
+ icon: "save"
244
+ })), /*#__PURE__*/React.createElement("button", {
245
+ className: "button",
246
+ disabled: !currentBookmark,
247
+ onClick: function onClick() {
248
+ return _this2.removeBookmark(currentBookmark);
249
+ },
250
+ title: removeTitle
251
+ }, /*#__PURE__*/React.createElement(Icon, {
252
+ icon: "trash"
253
+ }))), /*#__PURE__*/React.createElement("div", {
254
+ className: "bookmark-list"
255
+ }, this.state.bookmarks.map(function (bookmark) {
256
+ var itemclasses = classnames({
257
+ "bookmark-list-item": true,
258
+ "bookmark-list-item-active": _this2.state.currentBookmark === bookmark.key
259
+ });
260
+ return /*#__PURE__*/React.createElement("div", {
261
+ className: itemclasses,
262
+ key: bookmark.key,
263
+ onClick: function onClick() {
264
+ return _this2.toggleCurrentBookmark(bookmark);
265
+ },
266
+ onDoubleClick: function onDoubleClick() {
267
+ return _this2.open(bookmark.key, false);
268
+ },
269
+ title: lastUpdateTitle + ": " + bookmark.date
270
+ }, bookmark.description);
271
+ }), isEmpty(this.state.bookmarks) ? /*#__PURE__*/React.createElement("div", {
272
+ className: "bookmark-list-item-empty"
273
+ }, LocaleUtils.tr("bookmark.nobookmarks")) : null)));
274
+ }
275
+ }]);
276
+ }(React.Component);
277
+ _defineProperty(Bookmark, "availableIn3D", true);
278
+ _defineProperty(Bookmark, "propTypes", {
279
+ mapCrs: PropTypes.string,
280
+ mapScales: PropTypes.array,
281
+ /** The side of the application on which to display the sidebar. */
282
+ side: PropTypes.string,
283
+ zoomToExtent: PropTypes.func,
284
+ zoomToPoint: PropTypes.func
285
+ });
286
+ _defineProperty(Bookmark, "defaultProps", {
287
+ side: 'right'
288
+ });
289
+ var selector = function selector(state) {
290
+ var _state$map, _state$map2;
291
+ return {
292
+ mapCrs: (_state$map = state.map) === null || _state$map === void 0 ? void 0 : _state$map.projection,
293
+ mapScales: (_state$map2 = state.map) === null || _state$map2 === void 0 ? void 0 : _state$map2.scales
294
+ };
295
+ };
296
+ export default connect(selector, {
297
+ zoomToExtent: zoomToExtent,
298
+ zoomToPoint: zoomToPoint
299
+ })(Bookmark);