qwc2 2025.10.13 → 2025.10.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/actions/display.js +30 -1
- package/actions/editing.js +22 -1
- package/actions/layerinfo.js +13 -1
- package/actions/layers.js +213 -3
- package/actions/localConfig.js +58 -1
- package/actions/locale.js +21 -1
- package/actions/locate.js +26 -1
- package/actions/logging.js +10 -1
- package/actions/map.js +105 -2
- package/actions/measurement.js +12 -1
- package/actions/processNotifications.js +37 -1
- package/actions/redlining.js +18 -1
- package/actions/redliningPick.js +12 -1
- package/actions/search.js +12 -1
- package/actions/serviceinfo.js +12 -1
- package/actions/task.js +55 -3
- package/actions/theme.js +339 -19
- package/actions/windows.js +164 -5
- package/components/AppMenu.js +435 -3
- package/components/AttributeForm.js +928 -32
- package/components/AttributeTableWidget.js +1105 -13
- package/components/AutoEditForm.js +189 -3
- package/components/CoordinateDisplayer.js +78 -2
- package/components/EditComboField.js +190 -6
- package/components/EditUploadField.js +315 -3
- package/components/ExportSelection.js +203 -2
- package/components/FullscreenSwitcher.js +90 -3
- package/components/Icon.js +81 -2
- package/components/IdentifyViewer.js +1161 -6
- package/components/ImportLayer.js +718 -20
- package/components/LayerInfoWindow.js +145 -2
- package/components/LinkFeatureForm.js +246 -5
- package/components/MapButton.js +88 -2
- package/components/MapSelection.js +287 -8
- package/components/MessageBar.js +68 -2
- package/components/NumericInputWindow.js +359 -2
- package/components/PickFeature.js +266 -2
- package/components/PluginsContainer.js +227 -8
- package/components/PrintSelection.js +620 -49
- package/components/ProcessNotifications.js +104 -2
- package/components/QtDesignerForm.js +1137 -18
- package/components/ResizeableWindow.js +591 -8
- package/components/SearchBox.js +1307 -20
- package/components/ServiceInfoWindow.js +107 -2
- package/components/SideBar.js +204 -4
- package/components/StandardApp.js +381 -20
- package/components/Swipeable.js +15 -1
- package/components/TaskBar.js +85 -2
- package/components/ThemeLayersListWindow.js +216 -4
- package/components/ThemeList.js +381 -7
- package/components/Toolbar.js +106 -2
- package/components/WindowManager.js +178 -2
- package/components/map/OlLayer.js +257 -6
- package/components/map/OlMap.js +405 -5
- package/components/map/layers/BingLayer.js +31 -2
- package/components/map/layers/GoogleLayer.js +222 -19
- package/components/map/layers/GraticuleLayer.js +21 -1
- package/components/map/layers/ImageLayer.js +15 -1
- package/components/map/layers/MVTLayer.js +52 -2
- package/components/map/layers/OSMLayer.js +24 -2
- package/components/map/layers/OverlayLayer.js +55 -3
- package/components/map/layers/VectorLayer.js +173 -8
- package/components/map/layers/WFSLayer.js +220 -6
- package/components/map/layers/WMSLayer.js +180 -6
- package/components/map/layers/WMTSLayer.js +67 -3
- package/components/map/layers/XYZLayer.js +24 -2
- package/components/map/layers/index.js +28 -1
- package/components/map3d/EditDataset3D.js +190 -3
- package/components/map3d/HeightProfile3D.js +402 -3
- package/components/map3d/ImportObjects3D.js +162 -2
- package/components/map3d/Map3D.js +1304 -38
- package/components/map3d/MapControls3D.js +392 -7
- package/components/map3d/SearchField3D.js +183 -11
- package/components/map3d/View3DSwitcher.js +98 -2
- package/components/map3d/drawtool/CreateTool3D.js +174 -4
- package/components/map3d/drawtool/EditTool3D.js +590 -6
- package/components/map3d/drawtool/NumericInput3D.js +336 -4
- package/components/map3d/layers/GeoTIFFLayer3D.js +15 -1
- package/components/map3d/layers/VectorLayer3D.js +53 -2
- package/components/map3d/layers/WFSLayer3D.js +109 -3
- package/components/map3d/layers/WMSLayer3D.js +70 -2
- package/components/map3d/layers/WMTSLayer3D.js +27 -3
- package/components/map3d/layers/index.js +14 -1
- package/components/map3d/utils/FirstPersonControls3D.js +423 -16
- package/components/map3d/utils/MiscUtils3D.js +221 -13
- package/components/map3d/utils/OrbitControls3D.js +176 -5
- package/components/map3d/utils/Tiles3DStyle.js +238 -9
- package/components/share/ShareLink.js +54 -2
- package/components/share/ShareQRCode.js +62 -2
- package/components/share/ShareSocials.js +125 -3
- package/components/timeline/FixedTimeline.js +236 -5
- package/components/timeline/InfiniteTimeline.js +347 -8
- package/components/timeline/TimelineFeaturesSlider.js +439 -5
- package/components/widgets/AccordeonWidget.js +96 -2
- package/components/widgets/ButtonBar.js +124 -2
- package/components/widgets/ColorButton.js +201 -3
- package/components/widgets/ComboBox.js +166 -2
- package/components/widgets/CopyButton.js +110 -2
- package/components/widgets/DateTimeInput.js +100 -3
- package/components/widgets/EditableSelect.js +230 -3
- package/components/widgets/FileSelector.js +128 -4
- package/components/widgets/Input.js +124 -2
- package/components/widgets/InputContainer.js +96 -2
- package/components/widgets/LayerCatalogWidget.js +219 -3
- package/components/widgets/MenuButton.js +157 -1
- package/components/widgets/ModalDialog.js +64 -2
- package/components/widgets/NavBar.js +119 -2
- package/components/widgets/NumberInput.js +226 -4
- package/components/widgets/PopupMenu.js +72 -1
- package/components/widgets/Primitives.js +6 -1
- package/components/widgets/ReCaptchaWidget.js +55 -1
- package/components/widgets/SearchWidget.js +255 -2
- package/components/widgets/Spinner.js +44 -2
- package/components/widgets/SuggestionInput.js +77 -2
- package/components/widgets/TextInput.js +308 -2
- package/components/widgets/ToggleSwitch.js +85 -2
- package/components/widgets/VectorLayerPicker.js +85 -3
- package/libs/openlayers.js +225 -5
- package/package.json +1 -1
- package/plugins/API.js +358 -15
- package/plugins/AttributeTable.js +109 -3
- package/plugins/Authentication.js +130 -5
- package/plugins/BackgroundSwitcher.js +218 -4
- package/plugins/Bookmark.js +289 -3
- package/plugins/BottomBar.js +298 -4
- package/plugins/CookiePopup.js +67 -3
- package/plugins/Cyclomedia.js +442 -5
- package/plugins/Editing.js +497 -9
- package/plugins/FeatureForm.js +366 -4
- package/plugins/FeatureSearch.js +458 -3
- package/plugins/GeometryDigitizer.js +664 -7
- package/plugins/HeightProfile.js +768 -15
- package/plugins/Help.js +102 -3
- package/plugins/HomeButton.js +80 -3
- package/plugins/Identify.js +543 -5
- package/plugins/LayerCatalog.js +215 -4
- package/plugins/LayerTree.js +1194 -6
- package/plugins/LocateButton.js +94 -3
- package/plugins/Map.js +320 -16
- package/plugins/MapCompare.js +94 -3
- package/plugins/MapCopyright.js +127 -5
- package/plugins/MapExport.js +613 -20
- package/plugins/MapFilter.js +868 -12
- package/plugins/MapInfoTooltip.js +277 -3
- package/plugins/MapLegend.js +253 -4
- package/plugins/MapTip.js +290 -4
- package/plugins/Measure.js +220 -4
- package/plugins/NewsPopup.js +137 -3
- package/plugins/OverviewMap.js +167 -7
- package/plugins/Panoramax.js +340 -2
- package/plugins/Portal.js +199 -4
- package/plugins/Print.js +1231 -15
- package/plugins/Redlining.js +750 -6
- package/plugins/Reports.js +332 -3
- package/plugins/Routing.js +1278 -15
- package/plugins/ScratchDrawing.js +173 -5
- package/plugins/Settings.js +241 -4
- package/plugins/Share.js +198 -3
- package/plugins/StartupMarker.js +84 -4
- package/plugins/TaskButton.js +88 -3
- package/plugins/ThemeSwitcher.js +164 -4
- package/plugins/TimeManager.js +971 -10
- package/plugins/TopBar.js +300 -7
- package/plugins/TourGuide.js +213 -2
- package/plugins/ValueTool.js +419 -4
- package/plugins/View3D.js +519 -14
- package/plugins/ZoomButtons.js +165 -3
- package/plugins/map/EditingSupport.js +199 -7
- package/plugins/map/LocateSupport.js +260 -4
- package/plugins/map/MeasurementSupport.js +216 -8
- package/plugins/map/RedliningPickSupport.js +201 -7
- package/plugins/map/RedliningSupport.js +726 -17
- package/plugins/map/SnapInteraction.js +101 -1
- package/plugins/map/SnapSupport.js +210 -2
- package/plugins/map/SnappingSupport.js +356 -17
- package/plugins/map3d/BackgroundSwitcher3D.js +44 -3
- package/plugins/map3d/BottomBar3D.js +118 -3
- package/plugins/map3d/Compare3D.js +422 -8
- package/plugins/map3d/Draw3D.js +353 -6
- package/plugins/map3d/ExportObjects3D.js +393 -18
- package/plugins/map3d/HideObjects3D.js +313 -12
- package/plugins/map3d/Identify3D.js +283 -12
- package/plugins/map3d/LayerTree3D.js +323 -3
- package/plugins/map3d/MapCopyright3D.js +128 -5
- package/plugins/map3d/MapExport3D.js +590 -10
- package/plugins/map3d/MapLight3D.js +553 -6
- package/plugins/map3d/Measure3D.js +571 -20
- package/plugins/map3d/OverviewMap3D.js +169 -3
- package/plugins/map3d/Settings3D.js +73 -3
- package/plugins/map3d/TopBar3D.js +207 -9
- package/plugins/redlining/RedliningBufferSupport.js +206 -3
- package/reducers/display.js +34 -2
- package/reducers/editing.js +68 -3
- package/reducers/index.js +9 -1
- package/reducers/layerinfo.js +26 -2
- package/reducers/layers.js +456 -9
- package/reducers/localConfig.js +122 -2
- package/reducers/locale.js +38 -2
- package/reducers/locate.js +40 -2
- package/reducers/map.js +176 -5
- package/reducers/measurement.js +42 -2
- package/reducers/processNotifications.js +49 -2
- package/reducers/redlining.js +50 -2
- package/reducers/redliningPick.js +27 -2
- package/reducers/search.js +20 -1
- package/reducers/serviceinfo.js +25 -2
- package/reducers/task.js +45 -2
- package/reducers/theme.js +51 -2
- package/reducers/windows.js +203 -2
- package/scripts/dist.sh +1 -1
- package/scripts/gen-plugin-docs.js +152 -2
- package/scripts/makeIconkit.js +85 -6
- package/scripts/themesConfig.js +742 -40
- package/scripts/updateTranslations.js +251 -10
- package/selectors/searchproviders.js +44 -2
- package/stores/StandardStore.js +42 -2
- package/utils/ConfigUtils.js +84 -3
- package/utils/CoordinatesUtils.js +234 -23
- package/utils/DxfUtils.js +237 -11
- package/utils/EditingInterface.js +421 -87
- package/utils/EditingUtils.js +357 -13
- package/utils/ElevationInterface.js +83 -22
- package/utils/FeatureStyles.js +429 -5
- package/utils/IdentifyUtils.js +443 -7
- package/utils/ImageEditor.js +79 -9
- package/utils/LayerUtils.js +1516 -50
- package/utils/LocaleUtils.js +117 -7
- package/utils/MapUtils.js +241 -59
- package/utils/MeasureUtils.js +323 -2
- package/utils/MiscUtils.js +189 -11
- package/utils/PermaLinkUtils.js +429 -6
- package/utils/PluginStore.js +27 -1
- package/utils/ResourceRegistry.js +15 -1
- package/utils/RoutingInterface.js +307 -7
- package/utils/SearchProviders.js +722 -19
- package/utils/ServiceLayerUtils.js +669 -14
- package/utils/Signal.js +32 -2
- package/utils/ThemeUtils.js +341 -7
- package/utils/VectorLayerUtils.js +589 -15
- package/utils/expr_grammar/grammar.js +2239 -2
- package/utils/expr_grammar/test.js +65 -3
|
@@ -1,13 +1,138 @@
|
|
|
1
|
-
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){
|
|
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 2018-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
|
-
*/
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
import React from 'react';
|
|
24
|
+
import ReactDOM from 'react-dom';
|
|
25
|
+
import { connect } from 'react-redux';
|
|
26
|
+
import PropTypes from 'prop-types';
|
|
27
|
+
import url from 'url';
|
|
28
|
+
import Icon from '../components/Icon';
|
|
29
|
+
import { AppInfosPortalContext } from '../components/PluginsContainer';
|
|
30
|
+
import ConfigUtils from '../utils/ConfigUtils';
|
|
31
|
+
import './style/Authentication.css';
|
|
32
|
+
|
|
33
|
+
/**
|
|
8
34
|
* Handles authentication
|
|
9
35
|
*
|
|
10
36
|
* Invokes the the authentication service specified by `authServiceUrl` in `config.json`.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
|
|
37
|
+
*/
|
|
38
|
+
var Authentication = /*#__PURE__*/function (_React$Component) {
|
|
39
|
+
function Authentication(props) {
|
|
40
|
+
var _this;
|
|
41
|
+
_classCallCheck(this, Authentication);
|
|
42
|
+
_this = _callSuper(this, Authentication, [props]);
|
|
43
|
+
_defineProperty(_this, "showLogin", function () {
|
|
44
|
+
var urlObj = url.parse(window.location.href, true);
|
|
45
|
+
if (_this.props.clearLayerParam) {
|
|
46
|
+
delete urlObj.query.l;
|
|
47
|
+
}
|
|
48
|
+
urlObj.search = undefined;
|
|
49
|
+
window.location.href = ConfigUtils.getConfigProp("authServiceUrl") + "login?url=" + encodeURIComponent(url.format(urlObj));
|
|
50
|
+
});
|
|
51
|
+
_defineProperty(_this, "resetIdleTimer", function () {
|
|
52
|
+
if (_this.idleTimer) {
|
|
53
|
+
clearTimeout(_this.idleTimer);
|
|
54
|
+
_this.idleTimer = setTimeout(_this.idleAutologout, _this.props.idleTimeout * 1000);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
_defineProperty(_this, "idleAutologout", function () {
|
|
58
|
+
var urlObj = url.parse(window.location.href, true);
|
|
59
|
+
urlObj.search = undefined;
|
|
60
|
+
var loginUrl = ConfigUtils.getConfigProp("authServiceUrl") + "login?url=" + encodeURIComponent(url.format(urlObj));
|
|
61
|
+
window.location.href = ConfigUtils.getConfigProp("authServiceUrl") + "logout?url=" + encodeURIComponent(loginUrl);
|
|
62
|
+
});
|
|
63
|
+
_this.idleTimer = null;
|
|
64
|
+
return _this;
|
|
65
|
+
}
|
|
66
|
+
_inherits(Authentication, _React$Component);
|
|
67
|
+
return _createClass(Authentication, [{
|
|
68
|
+
key: "componentDidMount",
|
|
69
|
+
value: function componentDidMount() {
|
|
70
|
+
var username = ConfigUtils.getConfigProp("username");
|
|
71
|
+
if (this.props.requireLogin && !username) {
|
|
72
|
+
this.showLogin();
|
|
73
|
+
}
|
|
74
|
+
if (this.props.idleTimeout && username) {
|
|
75
|
+
this.idleTimer = setTimeout(this.idleAutologout, this.props.idleTimeout * 1000);
|
|
76
|
+
window.addEventListener('keydown', this.resetIdleTimer, {
|
|
77
|
+
passive: true
|
|
78
|
+
});
|
|
79
|
+
window.addEventListener('mousedown', this.resetIdleTimer, {
|
|
80
|
+
passive: true
|
|
81
|
+
});
|
|
82
|
+
window.addEventListener('wheel', this.resetIdleTimer, {
|
|
83
|
+
passive: true
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}, {
|
|
88
|
+
key: "componentDidUpdate",
|
|
89
|
+
value: function componentDidUpdate(prevProps) {
|
|
90
|
+
var task = this.props.task;
|
|
91
|
+
if (task !== prevProps.task) {
|
|
92
|
+
// "Login" and "Logout" task ids are legacy
|
|
93
|
+
if (task.id === "Login" || task.id === "Authentication" && task.mode === "Login") {
|
|
94
|
+
this.showLogin();
|
|
95
|
+
} else if (task.id === "Logout" || task.id === "Authentication" && task.mode === "Logout") {
|
|
96
|
+
// logout and redirect to custom logoutTargetUrl or current location if not set
|
|
97
|
+
window.location.href = ConfigUtils.getConfigProp("authServiceUrl") + "logout?url=" + encodeURIComponent(this.props.logoutTargetUrl || window.location.href);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}, {
|
|
102
|
+
key: "render",
|
|
103
|
+
value: function render() {
|
|
104
|
+
if (!this.props.showLoginUser) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
var username = ConfigUtils.getConfigProp("username");
|
|
108
|
+
if (!username) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
return /*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/React.createElement("div", {
|
|
112
|
+
className: "app-info login-user"
|
|
113
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
114
|
+
icon: "login"
|
|
115
|
+
}), /*#__PURE__*/React.createElement("span", null, username)), this.context);
|
|
116
|
+
}
|
|
117
|
+
}]);
|
|
118
|
+
}(React.Component);
|
|
119
|
+
_defineProperty(Authentication, "contextType", AppInfosPortalContext);
|
|
120
|
+
_defineProperty(Authentication, "availableIn3D", true);
|
|
121
|
+
_defineProperty(Authentication, "propTypes", {
|
|
122
|
+
/** Whether to clear the layer parameter from the URL on login. */
|
|
123
|
+
clearLayerParam: PropTypes.bool,
|
|
124
|
+
/** An idle timeout in seconds after which the user is automatically logged of. */
|
|
125
|
+
idleTimeout: PropTypes.number,
|
|
126
|
+
/** An URL to redirect to on logout, instead of the viewer URL. */
|
|
127
|
+
logoutTargetUrl: PropTypes.string,
|
|
128
|
+
/** Whether authentication is required, i.e. the viewer automatically redirects to the login page if no user is authenticated. */
|
|
129
|
+
requireLogin: PropTypes.bool,
|
|
130
|
+
/** Whether to display the currently logged in user below the application menu button. */
|
|
131
|
+
showLoginUser: PropTypes.bool,
|
|
132
|
+
task: PropTypes.object
|
|
133
|
+
});
|
|
134
|
+
export default connect(function (state) {
|
|
135
|
+
return {
|
|
136
|
+
task: state.task
|
|
137
|
+
};
|
|
138
|
+
}, {})(Authentication);
|
|
@@ -1,10 +1,224 @@
|
|
|
1
|
-
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){
|
|
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
|
-
*/
|
|
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 { LayerRole, changeLayerProperty } from '../actions/layers';
|
|
29
|
+
import Icon from '../components/Icon';
|
|
30
|
+
import MapButton from '../components/MapButton';
|
|
31
|
+
import ConfigUtils from '../utils/ConfigUtils';
|
|
32
|
+
import LocaleUtils from '../utils/LocaleUtils';
|
|
33
|
+
import './style/BackgroundSwitcher.css';
|
|
34
|
+
|
|
35
|
+
/**
|
|
8
36
|
* Map button for switching the background layer.
|
|
9
|
-
*/
|
|
10
|
-
|
|
37
|
+
*/
|
|
38
|
+
export var BackgroundSwitcher = /*#__PURE__*/function (_React$Component) {
|
|
39
|
+
function BackgroundSwitcher() {
|
|
40
|
+
var _this;
|
|
41
|
+
_classCallCheck(this, BackgroundSwitcher);
|
|
42
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
43
|
+
args[_key] = arguments[_key];
|
|
44
|
+
}
|
|
45
|
+
_this = _callSuper(this, BackgroundSwitcher, [].concat(args));
|
|
46
|
+
_defineProperty(_this, "state", {
|
|
47
|
+
visible: false
|
|
48
|
+
});
|
|
49
|
+
_defineProperty(_this, "itemTitle", function (item) {
|
|
50
|
+
var _item$title;
|
|
51
|
+
return item.titleMsgId ? LocaleUtils.tr(item.titleMsgId) : (_item$title = item.title) !== null && _item$title !== void 0 ? _item$title : item.name;
|
|
52
|
+
});
|
|
53
|
+
_defineProperty(_this, "renderLayerItem", function (layer, visible) {
|
|
54
|
+
var assetsPath = ConfigUtils.getAssetsPath();
|
|
55
|
+
var itemclasses = classnames({
|
|
56
|
+
"background-switcher-item": true,
|
|
57
|
+
"background-switcher-item-active": visible
|
|
58
|
+
});
|
|
59
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
60
|
+
className: itemclasses,
|
|
61
|
+
key: layer ? layer.name : "empty",
|
|
62
|
+
onClick: function onClick() {
|
|
63
|
+
return _this.backgroundLayerClicked(layer);
|
|
64
|
+
}
|
|
65
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
66
|
+
className: "background-switcher-item-title"
|
|
67
|
+
}, layer ? /*#__PURE__*/React.createElement("span", {
|
|
68
|
+
title: _this.itemTitle(layer)
|
|
69
|
+
}, _this.itemTitle(layer)) : /*#__PURE__*/React.createElement("span", null, LocaleUtils.tr("bgswitcher.nobg"))), /*#__PURE__*/React.createElement("div", {
|
|
70
|
+
className: "background-switcher-item-thumbnail"
|
|
71
|
+
}, /*#__PURE__*/React.createElement("img", {
|
|
72
|
+
src: layer ? assetsPath + "/" + layer.thumbnail : "data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
|
|
73
|
+
})));
|
|
74
|
+
});
|
|
75
|
+
_defineProperty(_this, "renderGroupItem", function (entry) {
|
|
76
|
+
var assetsPath = ConfigUtils.getAssetsPath();
|
|
77
|
+
var layer = entry.layers.find(function (l) {
|
|
78
|
+
return l.visibility === true;
|
|
79
|
+
}) || entry.layers.find(function (l) {
|
|
80
|
+
return l["default"] === true;
|
|
81
|
+
}) || entry.layers[entry.layers.length - 1];
|
|
82
|
+
var itemclasses = classnames({
|
|
83
|
+
"background-switcher-item": true,
|
|
84
|
+
"background-switcher-item-active": layer.visibility
|
|
85
|
+
});
|
|
86
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
87
|
+
className: itemclasses,
|
|
88
|
+
key: layer.name
|
|
89
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
90
|
+
className: "background-switcher-item-title"
|
|
91
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
92
|
+
title: _this.itemTitle(layer)
|
|
93
|
+
}, _this.itemTitle(layer)), /*#__PURE__*/React.createElement(Icon, {
|
|
94
|
+
icon: "chevron-down"
|
|
95
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
96
|
+
className: "background-switcher-item-thumbnail"
|
|
97
|
+
}, /*#__PURE__*/React.createElement("img", {
|
|
98
|
+
onClick: function onClick() {
|
|
99
|
+
return _this.backgroundLayerClicked(layer);
|
|
100
|
+
},
|
|
101
|
+
src: assetsPath + "/" + layer.thumbnail
|
|
102
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
103
|
+
className: "background-switcher-group"
|
|
104
|
+
}, entry.layers.map(function (l) {
|
|
105
|
+
var menuitemclasses = classnames({
|
|
106
|
+
"background-switcher-group-item": true,
|
|
107
|
+
"background-switcher-group-item-active": l.visibility
|
|
108
|
+
});
|
|
109
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
110
|
+
className: menuitemclasses,
|
|
111
|
+
key: l.name,
|
|
112
|
+
onClick: function onClick() {
|
|
113
|
+
return _this.backgroundLayerClicked(l);
|
|
114
|
+
},
|
|
115
|
+
onMouseEnter: function onMouseEnter(ev) {
|
|
116
|
+
return _this.updateGroupItem(ev, l);
|
|
117
|
+
},
|
|
118
|
+
onMouseLeave: function onMouseLeave(ev) {
|
|
119
|
+
return _this.updateGroupItem(ev, layer);
|
|
120
|
+
},
|
|
121
|
+
title: _this.itemTitle(l)
|
|
122
|
+
}, _this.itemTitle(l));
|
|
123
|
+
})));
|
|
124
|
+
});
|
|
125
|
+
_defineProperty(_this, "updateGroupItem", function (ev, layer) {
|
|
126
|
+
var assetsPath = ConfigUtils.getAssetsPath();
|
|
127
|
+
ev.target.parentElement.parentElement.childNodes[0].firstChild.innerText = _this.itemTitle(layer);
|
|
128
|
+
ev.target.parentElement.parentElement.childNodes[1].firstChild.src = assetsPath + "/" + layer.thumbnail;
|
|
129
|
+
});
|
|
130
|
+
_defineProperty(_this, "buttonClicked", function () {
|
|
131
|
+
_this.setState(function (state) {
|
|
132
|
+
return {
|
|
133
|
+
visible: !state.visible
|
|
134
|
+
};
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
_defineProperty(_this, "backgroundLayerClicked", function (layer) {
|
|
138
|
+
if (layer) {
|
|
139
|
+
_this.props.changeLayerVisibility(layer, true);
|
|
140
|
+
} else {
|
|
141
|
+
var visible = _this.props.layers.find(function (l) {
|
|
142
|
+
return l.visibility;
|
|
143
|
+
});
|
|
144
|
+
if (visible) {
|
|
145
|
+
_this.props.changeLayerVisibility(visible, false);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
_this.setState({
|
|
149
|
+
visible: false
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
return _this;
|
|
153
|
+
}
|
|
154
|
+
_inherits(BackgroundSwitcher, _React$Component);
|
|
155
|
+
return _createClass(BackgroundSwitcher, [{
|
|
156
|
+
key: "render",
|
|
157
|
+
value: function render() {
|
|
158
|
+
var _this2 = this;
|
|
159
|
+
var backgroundLayers = this.props.layers.slice(0).reverse();
|
|
160
|
+
// Re-sort layers, ensuring grouped layers are grouped together
|
|
161
|
+
var idx = 0;
|
|
162
|
+
var indices = backgroundLayers.reduce(function (res, l) {
|
|
163
|
+
var name = l.group || l.name;
|
|
164
|
+
if (!res[name]) {
|
|
165
|
+
res[name] = ++idx;
|
|
166
|
+
}
|
|
167
|
+
return res;
|
|
168
|
+
}, {});
|
|
169
|
+
backgroundLayers.sort(function (a, b) {
|
|
170
|
+
return indices[a.group || a.name] - indices[b.group || b.name];
|
|
171
|
+
});
|
|
172
|
+
var entries = backgroundLayers.reduce(function (res, layer) {
|
|
173
|
+
if (!isEmpty(res) && layer.group && layer.group === res[res.length - 1].group) {
|
|
174
|
+
res[res.length - 1].layers.push(layer);
|
|
175
|
+
} else if (layer.group) {
|
|
176
|
+
res.push({
|
|
177
|
+
group: layer.group,
|
|
178
|
+
layers: [layer]
|
|
179
|
+
});
|
|
180
|
+
} else {
|
|
181
|
+
res.push(layer);
|
|
182
|
+
}
|
|
183
|
+
return res;
|
|
184
|
+
}, []);
|
|
185
|
+
if (entries.length > 0) {
|
|
186
|
+
return /*#__PURE__*/React.createElement(MapButton, {
|
|
187
|
+
active: this.state.visible,
|
|
188
|
+
icon: "bglayer",
|
|
189
|
+
onClick: this.buttonClicked,
|
|
190
|
+
position: this.props.position,
|
|
191
|
+
tooltip: LocaleUtils.tr("tooltip.background")
|
|
192
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
193
|
+
className: "background-switcher " + (this.state.visible ? 'background-switcher-active' : '')
|
|
194
|
+
}, this.renderLayerItem(null, backgroundLayers.filter(function (layer) {
|
|
195
|
+
return layer.visibility === true;
|
|
196
|
+
}).length === 0), entries.map(function (entry) {
|
|
197
|
+
return entry.group ? _this2.renderGroupItem(entry) : _this2.renderLayerItem(entry, entry.visibility === true);
|
|
198
|
+
})));
|
|
199
|
+
}
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
}]);
|
|
203
|
+
}(React.Component);
|
|
204
|
+
_defineProperty(BackgroundSwitcher, "propTypes", {
|
|
205
|
+
changeLayerVisibility: PropTypes.func,
|
|
206
|
+
layers: PropTypes.array,
|
|
207
|
+
/** The position slot index of the map button, from the bottom (0: bottom slot). */
|
|
208
|
+
position: PropTypes.number
|
|
209
|
+
});
|
|
210
|
+
_defineProperty(BackgroundSwitcher, "defaultProps", {
|
|
211
|
+
position: 0
|
|
212
|
+
});
|
|
213
|
+
var selector = function selector(state) {
|
|
214
|
+
return {
|
|
215
|
+
layers: state.layers.flat.filter(function (layer) {
|
|
216
|
+
return layer.role === LayerRole.BACKGROUND;
|
|
217
|
+
})
|
|
218
|
+
};
|
|
219
|
+
};
|
|
220
|
+
export default connect(selector, {
|
|
221
|
+
changeLayerVisibility: function changeLayerVisibility(layer, visibility) {
|
|
222
|
+
return changeLayerProperty(layer.id, "visibility", visibility);
|
|
223
|
+
}
|
|
224
|
+
})(BackgroundSwitcher);
|