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,12 +1,386 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n2=0,F=function F(){};return{s:F,n:function n(){return _n2>=r.length?{done:!0}:{done:!1,value:r[_n2++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o)}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e))}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t)}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t})()}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},_getPrototypeOf(t)}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e)}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},_setPrototypeOf(t,e)}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/**
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 _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n2 = 0, F = function F() {}; return { s: F, n: function n() { return _n2 >= r.length ? { done: !0 } : { done: !1, value: r[_n2++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
3
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
4
+ 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."); }
5
+ 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; } }
6
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
7
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
8
+ 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; }
9
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
10
+ 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); } }
11
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
12
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
13
+ 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); }
14
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
15
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
16
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
17
+ 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); }
18
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
19
+ 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; }
20
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
21
+ 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); }
22
+ /**
2
23
  * Copyright 2020-2024 Sourcepole AG
3
24
  * All rights reserved.
4
25
  *
5
26
  * This source code is licensed under the BSD-style license found in the
6
27
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import{connect}from"react-redux";import axios from"axios";import{remove as removeDiacritics}from"diacritics";import DOMPurify from"dompurify";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{setActiveLayerInfo}from"../actions/layerinfo";import{LayerRole,addLayer}from"../actions/layers";import{setUserInfoFields}from"../actions/localConfig";import{setCurrentTask}from"../actions/task";import{setCurrentTheme,setThemeLayersList}from"../actions/theme";import ConfigUtils from"../utils/ConfigUtils";import LocaleUtils from"../utils/LocaleUtils";import ThemeUtils from"../utils/ThemeUtils";import Icon from"./Icon";import"./style/ThemeList.css";var ThemeList=/*#__PURE__*/function(_React$Component){function ThemeList(){var _this;_classCallCheck(this,ThemeList);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,ThemeList,[].concat(args));_defineProperty(_this,"state",{expandedGroups:[],visibleThemeInfoMenu:null});_defineProperty(_this,"groupMatchesFilter",function(group,filter){if(group&&group.items){for(var i=0,n=group.items.length;i<n;++i){if(removeDiacritics(group.items[i].title).match(filter)||removeDiacritics(group.items[i].keywords||"").match(filter)||removeDiacritics(group.items[i]["abstract"]||"").match(filter)){return true}}}if(group&&group.subdirs){for(var _i=0,_n=group.subdirs.length;_i<_n;++_i){if(_this.groupMatchesFilter(group.subdirs[_i],filter)){return true}}}return false});_defineProperty(_this,"renderThemeGroup",function(group,filter){var assetsPath=ConfigUtils.getAssetsPath();var subdirs=group&&group.subdirs?group.subdirs:[];if(filter){subdirs=subdirs.filter(function(subdir){return _this.groupMatchesFilter(subdir,filter)})}var subtree=subdirs.map(function(subdir){var expanded=!_this.props.collapsibleGroups||filter||_this.state.expandedGroups.includes(subdir.id)||_this.props.activeTheme&&_this.groupContainsActiveTheme(subdir);if(isEmpty(subdir.items)&&isEmpty(subdir.subdirs)){return null}return/*#__PURE__*/React.createElement("li",{className:"theme-group-header "+(expanded?"theme-group-header-expanded":""),key:subdir.id},/*#__PURE__*/React.createElement("span",{onClick:function onClick(){return _this.setState(function(state){return{expandedGroups:expanded?state.expandedGroups.filter(function(id){return id!==subdir.id}):[].concat(_toConsumableArray(state.expandedGroups),[subdir.id])}})}},_this.props.collapsibleGroups?/*#__PURE__*/React.createElement(Icon,{icon:expanded?"collapse":"expand"}):null," ",subdir.title),expanded?_this.renderThemeGroup(subdir,filter):null)});var activeThemeId=_this.props.activeTheme?_this.props.activeTheme.id:null;var addLayersTitle=LocaleUtils.tr("themeswitcher.addlayerstotheme");var addTitle=LocaleUtils.tr("themeswitcher.addtotheme");var changeDefaultUrlTitle=LocaleUtils.tr("themeswitcher.changedefaulttheme");var openTabTitle=LocaleUtils.tr("themeswitcher.openintab");var username=ConfigUtils.getConfigProp("username");return/*#__PURE__*/React.createElement("ul",{className:"theme-group-body"},(!isEmpty(group.items)?group.items:[]).map(function(item){var infoLinks=(item.themeInfoLinks&&item.themeInfoLinks.entries||[]).map(function(name){return _this.props.themes.themeInfoLinks.find(function(entry){return entry.name===name})}).filter(function(entry){return entry});var matches=[];if(filter){var match=null;if(match=removeDiacritics(item.title).match(filter)){matches.push([LocaleUtils.tr("themeswitcher.match.title"),_this.extractSubstr(match,item.title),item.title])}if(match=removeDiacritics(item.keywords||"").match(filter)){matches.push([LocaleUtils.tr("themeswitcher.match.keywords"),_this.extractSubstr(match,item.keywords),item.keywords])}if(match=removeDiacritics(item["abstract"]||"").match(filter)){matches.push([LocaleUtils.tr("themeswitcher.match.abstract"),_this.extractSubstr(match,item["abstract"]),item["abstract"]])}if(isEmpty(matches)){return null}}var title=item["abstract"];if(title&&item.keywords){title+="\n\n"}if(item.keywords){title+=LocaleUtils.tr("themeswitcher.match.keywords")+": "+item.keywords}return/*#__PURE__*/React.createElement("li",{className:activeThemeId===item.id?"theme-item theme-item-active":"theme-item",key:item.id,onClick:function onClick(){return _this.setTheme(item)},title:title},/*#__PURE__*/React.createElement("div",{className:"theme-item-title",title:item.title},/*#__PURE__*/React.createElement("span",null,item.title)),!isEmpty(infoLinks)?/*#__PURE__*/React.createElement("div",{className:"theme-item-info-menu "+(_this.state.visibleThemeInfoMenu?"theme-item-info-menu-active":""),onClick:function onClick(ev){return _this.toggleThemeInfoMenu(ev,item.id)}},/*#__PURE__*/React.createElement(Icon,{icon:"info"}),item.themeInfoLinks.title?/*#__PURE__*/React.createElement("span",null,item.themeInfoLinks.title):LocaleUtils.tr(item.themeInfoLinks.titleMsgId),/*#__PURE__*/React.createElement(Icon,{icon:"triangle-down"}),_this.state.visibleThemeInfoMenu===item.id?/*#__PURE__*/React.createElement("div",{className:"theme-item-info-links",onClick:function onClick(ev){return ev.stopPropagation()}},infoLinks.map(function(link){return/*#__PURE__*/React.createElement("a",{href:link.url,key:link.name,target:link.target},link.title)})):null):null,/*#__PURE__*/React.createElement("div",{className:"theme-item-body"},item.description?/*#__PURE__*/React.createElement("div",{className:"theme-item-description",dangerouslySetInnerHTML:{__html:DOMPurify.sanitize(item.description)}}):null,/*#__PURE__*/React.createElement("img",{className:"theme-item-thumbnail",src:assetsPath+"/"+item.thumbnail})),!item.restricted?/*#__PURE__*/React.createElement("div",{className:"theme-item-icons"},_this.props.allowAddingOtherThemeLayers?/*#__PURE__*/React.createElement(Icon,{icon:"layers",onClick:function onClick(ev){return _this.getThemeLayersToList(ev,item)},title:addLayersTitle}):null,_this.props.allowAddingOtherThemes?/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(ev){return _this.addThemeLayers(ev,item)},title:addTitle}):null,/*#__PURE__*/React.createElement(Icon,{icon:"open_link",onClick:function onClick(ev){return _this.openInTab(ev,item.id)},title:openTabTitle}),_this.props.showDefaultThemeSelector&&username?/*#__PURE__*/React.createElement(Icon,{className:_this.extractThemeId(_this.props.defaultUrlParams)===item.id?"icon-active":"",icon:"new",onClick:function onClick(ev){return _this.changeDefaultUrlParams(ev,item.id)},title:changeDefaultUrlTitle}):null):/*#__PURE__*/React.createElement("div",{className:"theme-item-restricted-overlay"},/*#__PURE__*/React.createElement(Icon,{icon:"lock"})),isEmpty(matches)?null:/*#__PURE__*/React.createElement("div",{className:"theme-item-filterinfo-overlay"},matches.map(function(match){return/*#__PURE__*/React.createElement("div",{key:match[0],title:match[2]},/*#__PURE__*/React.createElement("i",null,match[0],":"),/*#__PURE__*/React.createElement("br",null),match[1][0],/*#__PURE__*/React.createElement("b",null,match[1][1]),match[1][2])})))}),subtree)});_defineProperty(_this,"groupContainsActiveTheme",function(group){var _iterator=_createForOfIteratorHelper(group.items||[]),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var item=_step.value;if(item.id===_this.props.activeTheme.id){return true}}}catch(err){_iterator.e(err)}finally{_iterator.f()}var _iterator2=_createForOfIteratorHelper(group.subdirs||[]),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var subdir=_step2.value;if(_this.groupContainsActiveTheme(subdir)){return true}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return false});_defineProperty(_this,"extractSubstr",function(match,text){var cleanText=removeDiacritics(text);var cleanFilter=removeDiacritics(_this.props.filter);var padding=Math.round((20-cleanFilter.length)/2);// Add unused right padding to left
8
- padding+=-Math.min(cleanText.length-(match.index+cleanFilter.length)-padding,0);var leftStart=Math.max(match.index-padding,0);var leftLen=Math.min(match.index,padding);return[(leftStart>0?"\u2026":"")+cleanText.substr(leftStart,leftLen),cleanText.substr(match.index,cleanFilter.length),cleanText.substr(match.index+cleanFilter.length)]});_defineProperty(_this,"extractThemeId",function(text){return Object.fromEntries(text.split("&").map(function(x){return x.split("=")})).t});_defineProperty(_this,"setTheme",function(theme){if(theme.restricted){// eslint-disable-next-line
9
- alert(LocaleUtils.tr("themeswitcher.restrictedthemeinfo"));return}var hasUserLayer=_this.props.layers.find(function(layer){return layer.role===LayerRole.USERLAYER});var preserveNonThemeLayers=ConfigUtils.getConfigProp("preserveNonThemeLayersOnThemeSwitch",_this.props.activeTheme);// eslint-disable-next-line
10
- if(hasUserLayer&&!preserveNonThemeLayers&&!confirm(LocaleUtils.tr("themeswitcher.confirmswitch"))){return}_this.props.setActiveLayerInfo(null,null);if(_this.props.showLayerAfterChangeTheme){_this.props.setCurrentTask("LayerTree")}else{_this.props.setCurrentTask(null)}_this.props.changeTheme(theme,_this.props.themes,!_this.props.dontPreserveSettingsOnSwitch)});_defineProperty(_this,"toggleThemeInfoMenu",function(ev,themeId){ev.stopPropagation();_this.setState(function(state){return{visibleThemeInfoMenu:state.visibleThemeInfoMenu===themeId?null:themeId}})});_defineProperty(_this,"addThemeLayers",function(ev,theme){ev.stopPropagation();_this.props.addLayer(ThemeUtils.createThemeLayer(theme,_this.props.themes,LayerRole.USERLAYER));// Show layer tree to notify user that something has happened
11
- _this.props.setCurrentTask("LayerTree")});_defineProperty(_this,"getThemeLayersToList",function(ev,theme){ev.stopPropagation();_this.props.setThemeLayersList(theme);// Show layer tree to notify user that something has happened
12
- _this.props.setCurrentTask("LayerTree")});_defineProperty(_this,"openInTab",function(ev,themeid){ev.stopPropagation();var url=location.href.split("?")[0]+"?t="+themeid;window.open(url,"_blank")});_defineProperty(_this,"changeDefaultUrlParams",function(ev,themeid){ev.stopPropagation();var params={default_url_params:"t="+themeid};var baseurl=location.href.split("?")[0].replace(/\/$/,"");axios.get(baseurl+"/setuserinfo",{params:params}).then(function(response){if(!response.data.success){/* eslint-disable-next-line */alert(LocaleUtils.tr("settings.defaultthemefailed",response.data.error))}else{_this.props.setUserInfoFields(response.data.fields)}})["catch"](function(e){/* eslint-disable-next-line */alert(LocaleUtils.tr("settings.defaultthemefailed",String(e)))})});return _this}_inherits(ThemeList,_React$Component);return _createClass(ThemeList,[{key:"render",value:function render(){var filter=this.props.filter?new RegExp(removeDiacritics(this.props.filter).replace(/[-[\]/{}()*+?.\\^$|]/g,"\\$&"),"i"):null;return/*#__PURE__*/React.createElement("div",{className:"ThemeList"},this.renderThemeGroup(this.props.themes,filter))}}])}(React.Component);_defineProperty(ThemeList,"propTypes",{activeTheme:PropTypes.object,addLayer:PropTypes.func,allowAddingOtherThemeLayers:PropTypes.bool,allowAddingOtherThemes:PropTypes.bool,changeTheme:PropTypes.func,collapsibleGroups:PropTypes.bool,defaultUrlParams:PropTypes.string,dontPreserveSettingsOnSwitch:PropTypes.bool,filter:PropTypes.string,layers:PropTypes.array,mapConfig:PropTypes.object,setActiveLayerInfo:PropTypes.func,setCurrentTask:PropTypes.func,setThemeLayersList:PropTypes.func,setUserInfoFields:PropTypes.func,showDefaultThemeSelector:PropTypes.bool,showLayerAfterChangeTheme:PropTypes.bool,themes:PropTypes.object});var selector=function selector(state){var _state$localConfig$us;return{themes:state.theme.themes||{},layers:state.layers.flat,mapConfig:state.map,defaultUrlParams:((_state$localConfig$us=state.localConfig.user_infos)===null||_state$localConfig$us===void 0?void 0:_state$localConfig$us.default_url_params)||""}};export default connect(selector,{changeTheme:setCurrentTheme,setCurrentTask:setCurrentTask,addLayer:addLayer,setActiveLayerInfo:setActiveLayerInfo,setThemeLayersList:setThemeLayersList,setUserInfoFields:setUserInfoFields})(ThemeList);
28
+ */
29
+
30
+ import React from 'react';
31
+ import { connect } from 'react-redux';
32
+ import axios from 'axios';
33
+ import { remove as removeDiacritics } from 'diacritics';
34
+ import DOMPurify from 'dompurify';
35
+ import isEmpty from 'lodash.isempty';
36
+ import PropTypes from 'prop-types';
37
+ import { setActiveLayerInfo } from '../actions/layerinfo';
38
+ import { LayerRole, addLayer } from '../actions/layers';
39
+ import { setUserInfoFields } from '../actions/localConfig';
40
+ import { setCurrentTask } from '../actions/task';
41
+ import { setCurrentTheme, setThemeLayersList } from '../actions/theme';
42
+ import ConfigUtils from '../utils/ConfigUtils';
43
+ import LocaleUtils from '../utils/LocaleUtils';
44
+ import ThemeUtils from '../utils/ThemeUtils';
45
+ import Icon from './Icon';
46
+ import './style/ThemeList.css';
47
+ var ThemeList = /*#__PURE__*/function (_React$Component) {
48
+ function ThemeList() {
49
+ var _this;
50
+ _classCallCheck(this, ThemeList);
51
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
52
+ args[_key] = arguments[_key];
53
+ }
54
+ _this = _callSuper(this, ThemeList, [].concat(args));
55
+ _defineProperty(_this, "state", {
56
+ expandedGroups: [],
57
+ visibleThemeInfoMenu: null
58
+ });
59
+ _defineProperty(_this, "groupMatchesFilter", function (group, filter) {
60
+ if (group && group.items) {
61
+ for (var i = 0, n = group.items.length; i < n; ++i) {
62
+ if (removeDiacritics(group.items[i].title).match(filter) || removeDiacritics(group.items[i].keywords || "").match(filter) || removeDiacritics(group.items[i]["abstract"] || "").match(filter)) {
63
+ return true;
64
+ }
65
+ }
66
+ }
67
+ if (group && group.subdirs) {
68
+ for (var _i = 0, _n = group.subdirs.length; _i < _n; ++_i) {
69
+ if (_this.groupMatchesFilter(group.subdirs[_i], filter)) {
70
+ return true;
71
+ }
72
+ }
73
+ }
74
+ return false;
75
+ });
76
+ _defineProperty(_this, "renderThemeGroup", function (group, filter) {
77
+ var assetsPath = ConfigUtils.getAssetsPath();
78
+ var subdirs = group && group.subdirs ? group.subdirs : [];
79
+ if (filter) {
80
+ subdirs = subdirs.filter(function (subdir) {
81
+ return _this.groupMatchesFilter(subdir, filter);
82
+ });
83
+ }
84
+ var subtree = subdirs.map(function (subdir) {
85
+ var expanded = !_this.props.collapsibleGroups || filter || _this.state.expandedGroups.includes(subdir.id) || _this.props.activeTheme && _this.groupContainsActiveTheme(subdir);
86
+ if (isEmpty(subdir.items) && isEmpty(subdir.subdirs)) {
87
+ return null;
88
+ }
89
+ return /*#__PURE__*/React.createElement("li", {
90
+ className: "theme-group-header " + (expanded ? "theme-group-header-expanded" : ""),
91
+ key: subdir.id
92
+ }, /*#__PURE__*/React.createElement("span", {
93
+ onClick: function onClick() {
94
+ return _this.setState(function (state) {
95
+ return {
96
+ expandedGroups: expanded ? state.expandedGroups.filter(function (id) {
97
+ return id !== subdir.id;
98
+ }) : [].concat(_toConsumableArray(state.expandedGroups), [subdir.id])
99
+ };
100
+ });
101
+ }
102
+ }, _this.props.collapsibleGroups ? /*#__PURE__*/React.createElement(Icon, {
103
+ icon: expanded ? "collapse" : "expand"
104
+ }) : null, " ", subdir.title), expanded ? _this.renderThemeGroup(subdir, filter) : null);
105
+ });
106
+ var activeThemeId = _this.props.activeTheme ? _this.props.activeTheme.id : null;
107
+ var addLayersTitle = LocaleUtils.tr("themeswitcher.addlayerstotheme");
108
+ var addTitle = LocaleUtils.tr("themeswitcher.addtotheme");
109
+ var changeDefaultUrlTitle = LocaleUtils.tr("themeswitcher.changedefaulttheme");
110
+ var openTabTitle = LocaleUtils.tr("themeswitcher.openintab");
111
+ var username = ConfigUtils.getConfigProp("username");
112
+ return /*#__PURE__*/React.createElement("ul", {
113
+ className: "theme-group-body"
114
+ }, (!isEmpty(group.items) ? group.items : []).map(function (item) {
115
+ var infoLinks = (item.themeInfoLinks && item.themeInfoLinks.entries || []).map(function (name) {
116
+ return _this.props.themes.themeInfoLinks.find(function (entry) {
117
+ return entry.name === name;
118
+ });
119
+ }).filter(function (entry) {
120
+ return entry;
121
+ });
122
+ var matches = [];
123
+ if (filter) {
124
+ var match = null;
125
+ if (match = removeDiacritics(item.title).match(filter)) {
126
+ matches.push([LocaleUtils.tr("themeswitcher.match.title"), _this.extractSubstr(match, item.title), item.title]);
127
+ }
128
+ if (match = removeDiacritics(item.keywords || "").match(filter)) {
129
+ matches.push([LocaleUtils.tr("themeswitcher.match.keywords"), _this.extractSubstr(match, item.keywords), item.keywords]);
130
+ }
131
+ if (match = removeDiacritics(item["abstract"] || "").match(filter)) {
132
+ matches.push([LocaleUtils.tr("themeswitcher.match.abstract"), _this.extractSubstr(match, item["abstract"]), item["abstract"]]);
133
+ }
134
+ if (isEmpty(matches)) {
135
+ return null;
136
+ }
137
+ }
138
+ var title = item["abstract"];
139
+ if (title && item.keywords) {
140
+ title += "\n\n";
141
+ }
142
+ if (item.keywords) {
143
+ title += LocaleUtils.tr("themeswitcher.match.keywords") + ": " + item.keywords;
144
+ }
145
+ return /*#__PURE__*/React.createElement("li", {
146
+ className: activeThemeId === item.id ? "theme-item theme-item-active" : "theme-item",
147
+ key: item.id,
148
+ onClick: function onClick() {
149
+ return _this.setTheme(item);
150
+ },
151
+ title: title
152
+ }, /*#__PURE__*/React.createElement("div", {
153
+ className: "theme-item-title",
154
+ title: item.title
155
+ }, /*#__PURE__*/React.createElement("span", null, item.title)), !isEmpty(infoLinks) ? /*#__PURE__*/React.createElement("div", {
156
+ className: "theme-item-info-menu " + (_this.state.visibleThemeInfoMenu ? "theme-item-info-menu-active" : ""),
157
+ onClick: function onClick(ev) {
158
+ return _this.toggleThemeInfoMenu(ev, item.id);
159
+ }
160
+ }, /*#__PURE__*/React.createElement(Icon, {
161
+ icon: "info"
162
+ }), item.themeInfoLinks.title ? /*#__PURE__*/React.createElement("span", null, item.themeInfoLinks.title) : LocaleUtils.tr(item.themeInfoLinks.titleMsgId), /*#__PURE__*/React.createElement(Icon, {
163
+ icon: "triangle-down"
164
+ }), _this.state.visibleThemeInfoMenu === item.id ? /*#__PURE__*/React.createElement("div", {
165
+ className: "theme-item-info-links",
166
+ onClick: function onClick(ev) {
167
+ return ev.stopPropagation();
168
+ }
169
+ }, infoLinks.map(function (link) {
170
+ return /*#__PURE__*/React.createElement("a", {
171
+ href: link.url,
172
+ key: link.name,
173
+ target: link.target
174
+ }, link.title);
175
+ })) : null) : null, /*#__PURE__*/React.createElement("div", {
176
+ className: "theme-item-body"
177
+ }, item.description ? /*#__PURE__*/React.createElement("div", {
178
+ className: "theme-item-description",
179
+ dangerouslySetInnerHTML: {
180
+ __html: DOMPurify.sanitize(item.description)
181
+ }
182
+ }) : null, /*#__PURE__*/React.createElement("img", {
183
+ className: "theme-item-thumbnail",
184
+ src: assetsPath + "/" + item.thumbnail
185
+ })), !item.restricted ? /*#__PURE__*/React.createElement("div", {
186
+ className: "theme-item-icons"
187
+ }, _this.props.allowAddingOtherThemeLayers ? /*#__PURE__*/React.createElement(Icon, {
188
+ icon: "layers",
189
+ onClick: function onClick(ev) {
190
+ return _this.getThemeLayersToList(ev, item);
191
+ },
192
+ title: addLayersTitle
193
+ }) : null, _this.props.allowAddingOtherThemes ? /*#__PURE__*/React.createElement(Icon, {
194
+ icon: "plus",
195
+ onClick: function onClick(ev) {
196
+ return _this.addThemeLayers(ev, item);
197
+ },
198
+ title: addTitle
199
+ }) : null, /*#__PURE__*/React.createElement(Icon, {
200
+ icon: "open_link",
201
+ onClick: function onClick(ev) {
202
+ return _this.openInTab(ev, item.id);
203
+ },
204
+ title: openTabTitle
205
+ }), _this.props.showDefaultThemeSelector && username ? /*#__PURE__*/React.createElement(Icon, {
206
+ className: _this.extractThemeId(_this.props.defaultUrlParams) === item.id ? "icon-active" : "",
207
+ icon: "new",
208
+ onClick: function onClick(ev) {
209
+ return _this.changeDefaultUrlParams(ev, item.id);
210
+ },
211
+ title: changeDefaultUrlTitle
212
+ }) : null) : /*#__PURE__*/React.createElement("div", {
213
+ className: "theme-item-restricted-overlay"
214
+ }, /*#__PURE__*/React.createElement(Icon, {
215
+ icon: "lock"
216
+ })), isEmpty(matches) ? null : /*#__PURE__*/React.createElement("div", {
217
+ className: "theme-item-filterinfo-overlay"
218
+ }, matches.map(function (match) {
219
+ return /*#__PURE__*/React.createElement("div", {
220
+ key: match[0],
221
+ title: match[2]
222
+ }, /*#__PURE__*/React.createElement("i", null, match[0], ":"), /*#__PURE__*/React.createElement("br", null), match[1][0], /*#__PURE__*/React.createElement("b", null, match[1][1]), match[1][2]);
223
+ })));
224
+ }), subtree);
225
+ });
226
+ _defineProperty(_this, "groupContainsActiveTheme", function (group) {
227
+ var _iterator = _createForOfIteratorHelper(group.items || []),
228
+ _step;
229
+ try {
230
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
231
+ var item = _step.value;
232
+ if (item.id === _this.props.activeTheme.id) {
233
+ return true;
234
+ }
235
+ }
236
+ } catch (err) {
237
+ _iterator.e(err);
238
+ } finally {
239
+ _iterator.f();
240
+ }
241
+ var _iterator2 = _createForOfIteratorHelper(group.subdirs || []),
242
+ _step2;
243
+ try {
244
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
245
+ var subdir = _step2.value;
246
+ if (_this.groupContainsActiveTheme(subdir)) {
247
+ return true;
248
+ }
249
+ }
250
+ } catch (err) {
251
+ _iterator2.e(err);
252
+ } finally {
253
+ _iterator2.f();
254
+ }
255
+ return false;
256
+ });
257
+ _defineProperty(_this, "extractSubstr", function (match, text) {
258
+ var cleanText = removeDiacritics(text);
259
+ var cleanFilter = removeDiacritics(_this.props.filter);
260
+ var padding = Math.round((20 - cleanFilter.length) / 2);
261
+ // Add unused right padding to left
262
+ padding += -Math.min(cleanText.length - (match.index + cleanFilter.length) - padding, 0);
263
+ var leftStart = Math.max(match.index - padding, 0);
264
+ var leftLen = Math.min(match.index, padding);
265
+ return [(leftStart > 0 ? "\u2026" : "") + cleanText.substr(leftStart, leftLen), cleanText.substr(match.index, cleanFilter.length), cleanText.substr(match.index + cleanFilter.length)];
266
+ });
267
+ _defineProperty(_this, "extractThemeId", function (text) {
268
+ return Object.fromEntries(text.split("&").map(function (x) {
269
+ return x.split("=");
270
+ })).t;
271
+ });
272
+ _defineProperty(_this, "setTheme", function (theme) {
273
+ if (theme.restricted) {
274
+ // eslint-disable-next-line
275
+ alert(LocaleUtils.tr("themeswitcher.restrictedthemeinfo"));
276
+ return;
277
+ }
278
+ var hasUserLayer = _this.props.layers.find(function (layer) {
279
+ return layer.role === LayerRole.USERLAYER;
280
+ });
281
+ var preserveNonThemeLayers = ConfigUtils.getConfigProp("preserveNonThemeLayersOnThemeSwitch", _this.props.activeTheme);
282
+ // eslint-disable-next-line
283
+ if (hasUserLayer && !preserveNonThemeLayers && !confirm(LocaleUtils.tr("themeswitcher.confirmswitch"))) {
284
+ return;
285
+ }
286
+ _this.props.setActiveLayerInfo(null, null);
287
+ if (_this.props.showLayerAfterChangeTheme) {
288
+ _this.props.setCurrentTask('LayerTree');
289
+ } else {
290
+ _this.props.setCurrentTask(null);
291
+ }
292
+ _this.props.changeTheme(theme, _this.props.themes, !_this.props.dontPreserveSettingsOnSwitch);
293
+ });
294
+ _defineProperty(_this, "toggleThemeInfoMenu", function (ev, themeId) {
295
+ ev.stopPropagation();
296
+ _this.setState(function (state) {
297
+ return {
298
+ visibleThemeInfoMenu: state.visibleThemeInfoMenu === themeId ? null : themeId
299
+ };
300
+ });
301
+ });
302
+ _defineProperty(_this, "addThemeLayers", function (ev, theme) {
303
+ ev.stopPropagation();
304
+ _this.props.addLayer(ThemeUtils.createThemeLayer(theme, _this.props.themes, LayerRole.USERLAYER));
305
+ // Show layer tree to notify user that something has happened
306
+ _this.props.setCurrentTask('LayerTree');
307
+ });
308
+ _defineProperty(_this, "getThemeLayersToList", function (ev, theme) {
309
+ ev.stopPropagation();
310
+ _this.props.setThemeLayersList(theme);
311
+ // Show layer tree to notify user that something has happened
312
+ _this.props.setCurrentTask('LayerTree');
313
+ });
314
+ _defineProperty(_this, "openInTab", function (ev, themeid) {
315
+ ev.stopPropagation();
316
+ var url = location.href.split("?")[0] + '?t=' + themeid;
317
+ window.open(url, '_blank');
318
+ });
319
+ _defineProperty(_this, "changeDefaultUrlParams", function (ev, themeid) {
320
+ ev.stopPropagation();
321
+ var params = {
322
+ default_url_params: "t=" + themeid
323
+ };
324
+ var baseurl = location.href.split("?")[0].replace(/\/$/, '');
325
+ axios.get(baseurl + "/setuserinfo", {
326
+ params: params
327
+ }).then(function (response) {
328
+ if (!response.data.success) {
329
+ /* eslint-disable-next-line */
330
+ alert(LocaleUtils.tr("settings.defaultthemefailed", response.data.error));
331
+ } else {
332
+ _this.props.setUserInfoFields(response.data.fields);
333
+ }
334
+ })["catch"](function (e) {
335
+ /* eslint-disable-next-line */
336
+ alert(LocaleUtils.tr("settings.defaultthemefailed", String(e)));
337
+ });
338
+ });
339
+ return _this;
340
+ }
341
+ _inherits(ThemeList, _React$Component);
342
+ return _createClass(ThemeList, [{
343
+ key: "render",
344
+ value: function render() {
345
+ var filter = this.props.filter ? new RegExp(removeDiacritics(this.props.filter).replace(/[-[\]/{}()*+?.\\^$|]/g, "\\$&"), "i") : null;
346
+ return /*#__PURE__*/React.createElement("div", {
347
+ className: "ThemeList"
348
+ }, this.renderThemeGroup(this.props.themes, filter));
349
+ }
350
+ }]);
351
+ }(React.Component);
352
+ _defineProperty(ThemeList, "propTypes", {
353
+ activeTheme: PropTypes.object,
354
+ addLayer: PropTypes.func,
355
+ allowAddingOtherThemeLayers: PropTypes.bool,
356
+ allowAddingOtherThemes: PropTypes.bool,
357
+ changeTheme: PropTypes.func,
358
+ collapsibleGroups: PropTypes.bool,
359
+ defaultUrlParams: PropTypes.string,
360
+ dontPreserveSettingsOnSwitch: PropTypes.bool,
361
+ filter: PropTypes.string,
362
+ layers: PropTypes.array,
363
+ setActiveLayerInfo: PropTypes.func,
364
+ setCurrentTask: PropTypes.func,
365
+ setThemeLayersList: PropTypes.func,
366
+ setUserInfoFields: PropTypes.func,
367
+ showDefaultThemeSelector: PropTypes.bool,
368
+ showLayerAfterChangeTheme: PropTypes.bool,
369
+ themes: PropTypes.object
370
+ });
371
+ var selector = function selector(state) {
372
+ var _state$localConfig$us;
373
+ return {
374
+ themes: state.theme.themes || {},
375
+ layers: state.layers.flat,
376
+ defaultUrlParams: ((_state$localConfig$us = state.localConfig.user_infos) === null || _state$localConfig$us === void 0 ? void 0 : _state$localConfig$us.default_url_params) || ""
377
+ };
378
+ };
379
+ export default connect(selector, {
380
+ changeTheme: setCurrentTheme,
381
+ setCurrentTask: setCurrentTask,
382
+ addLayer: addLayer,
383
+ setActiveLayerInfo: setActiveLayerInfo,
384
+ setThemeLayersList: setThemeLayersList,
385
+ setUserInfoFields: setUserInfoFields
386
+ })(ThemeList);
@@ -1,7 +1,111 @@
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 2016-2024 Sourcepole AG
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 Mousetrap from"mousetrap";import PropTypes from"prop-types";import{setCurrentTask}from"../actions/task";import LocaleUtils from"../utils/LocaleUtils";import Icon from"./Icon";import"./style/Toolbar.css";var Toolbar=/*#__PURE__*/function(_React$Component){function Toolbar(props){var _this;_classCallCheck(this,Toolbar);_this=_callSuper(this,Toolbar,[props]);_defineProperty(_this,"renderToolbarItem",function(item){var active=_this.props.currentTask===(item.task||item.key)&&_this.props.currentTaskMode===(item.mode||null);var title=LocaleUtils.tr("appmenu.items."+item.key+(item.mode||""));return/*#__PURE__*/React.createElement(Icon,{className:active?"toolbar-item-active":"",icon:item.icon,key:item.key+item.mode,onClick:function onClick(){return _this.itemClicked(item,active)},size:"xlarge",title:title})});_defineProperty(_this,"itemClicked",function(item,active){if(item.url){_this.props.openExternalUrl(item.url,item.target,LocaleUtils.tr("appmenu.items."+item.key),item.icon)}else if(active){_this.props.setCurrentTask(null)}else{_this.props.setCurrentTask(item.task||item.key,item.mode,item.mapClickAction||(item.identifyEnabled?"identify":null))}});_this.boundShortcuts=[];return _this}_inherits(Toolbar,_React$Component);return _createClass(Toolbar,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this2=this;if(this.props.toolbarItems!==prevProps.toolbarItems){this.boundShortcuts.forEach(function(shortcut){return Mousetrap.unbind(shortcut)});this.boundShortcuts=[];if(this.props.toolbarItemsShortcutPrefix){var index=1;this.props.toolbarItems.forEach(function(item){var shortcut=_this2.props.toolbarItemsShortcutPrefix+"+"+index;Mousetrap.bind(shortcut,function(){var active=_this2.props.currentTask===(item.task||item.key)&&_this2.props.currentTaskMode===(item.mode||null);_this2.itemClicked(item,active);return false});_this2.boundShortcuts.push(shortcut);index+=1})}}}},{key:"render",value:function render(){return/*#__PURE__*/React.createElement("div",{className:"Toolbar"},this.props.toolbarItems.map(this.renderToolbarItem))}}])}(React.Component);_defineProperty(Toolbar,"propTypes",{currentTask:PropTypes.string,currentTaskMode:PropTypes.string,openExternalUrl:PropTypes.func,setCurrentTask:PropTypes.func,toolbarItems:PropTypes.array,toolbarItemsShortcutPrefix:PropTypes.string});export default connect(function(state){return{currentTask:state.task.id,currentTaskMode:state.task.mode}},{setCurrentTask:setCurrentTask})(Toolbar);
21
+ */
22
+
23
+ import React from 'react';
24
+ import { connect } from 'react-redux';
25
+ import Mousetrap from 'mousetrap';
26
+ import PropTypes from 'prop-types';
27
+ import { setCurrentTask } from '../actions/task';
28
+ import LocaleUtils from '../utils/LocaleUtils';
29
+ import Icon from './Icon';
30
+ import './style/Toolbar.css';
31
+ var Toolbar = /*#__PURE__*/function (_React$Component) {
32
+ function Toolbar(props) {
33
+ var _this;
34
+ _classCallCheck(this, Toolbar);
35
+ _this = _callSuper(this, Toolbar, [props]);
36
+ _defineProperty(_this, "renderToolbarItem", function (item) {
37
+ var active = _this.props.currentTask === (item.task || item.key) && _this.props.currentTaskMode === (item.mode || null);
38
+ var title = LocaleUtils.tr("appmenu.items." + item.key + (item.mode || ""));
39
+ return /*#__PURE__*/React.createElement(Icon, {
40
+ className: active ? "toolbar-item-active" : "",
41
+ icon: item.icon,
42
+ key: item.key + item.mode,
43
+ onClick: function onClick() {
44
+ return _this.itemClicked(item, active);
45
+ },
46
+ size: "xlarge",
47
+ title: title
48
+ });
49
+ });
50
+ _defineProperty(_this, "itemClicked", function (item, active) {
51
+ if (item.url) {
52
+ _this.props.openExternalUrl(item.url, item.target, LocaleUtils.tr("appmenu.items." + item.key), item.icon);
53
+ } else if (active) {
54
+ _this.props.setCurrentTask(null);
55
+ } else {
56
+ _this.props.setCurrentTask(item.task || item.key, item.mode, item.mapClickAction || (item.identifyEnabled ? "identify" : null));
57
+ }
58
+ });
59
+ _this.boundShortcuts = [];
60
+ return _this;
61
+ }
62
+ _inherits(Toolbar, _React$Component);
63
+ return _createClass(Toolbar, [{
64
+ key: "componentDidUpdate",
65
+ value: function componentDidUpdate(prevProps) {
66
+ var _this2 = this;
67
+ if (this.props.toolbarItems !== prevProps.toolbarItems) {
68
+ this.boundShortcuts.forEach(function (shortcut) {
69
+ return Mousetrap.unbind(shortcut);
70
+ });
71
+ this.boundShortcuts = [];
72
+ if (this.props.toolbarItemsShortcutPrefix) {
73
+ var index = 1;
74
+ this.props.toolbarItems.forEach(function (item) {
75
+ var shortcut = _this2.props.toolbarItemsShortcutPrefix + '+' + index;
76
+ Mousetrap.bind(shortcut, function () {
77
+ var active = _this2.props.currentTask === (item.task || item.key) && _this2.props.currentTaskMode === (item.mode || null);
78
+ _this2.itemClicked(item, active);
79
+ return false;
80
+ });
81
+ _this2.boundShortcuts.push(shortcut);
82
+ index += 1;
83
+ });
84
+ }
85
+ }
86
+ }
87
+ }, {
88
+ key: "render",
89
+ value: function render() {
90
+ return /*#__PURE__*/React.createElement("div", {
91
+ className: "Toolbar"
92
+ }, this.props.toolbarItems.map(this.renderToolbarItem));
93
+ }
94
+ }]);
95
+ }(React.Component);
96
+ _defineProperty(Toolbar, "propTypes", {
97
+ currentTask: PropTypes.string,
98
+ currentTaskMode: PropTypes.string,
99
+ openExternalUrl: PropTypes.func,
100
+ setCurrentTask: PropTypes.func,
101
+ toolbarItems: PropTypes.array,
102
+ toolbarItemsShortcutPrefix: PropTypes.string
103
+ });
104
+ export default connect(function (state) {
105
+ return {
106
+ currentTask: state.task.id,
107
+ currentTaskMode: state.task.mode
108
+ };
109
+ }, {
110
+ setCurrentTask: setCurrentTask
111
+ })(Toolbar);