qwc2 2025.12.18 → 2025.12.24
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 +6 -6
- package/actions/theme.js +4 -19
- package/components/AppMenu.js +1 -1
- package/components/AttributeForm.js +7 -7
- package/components/AttributeTableWidget.js +2 -2
- package/components/AutoEditForm.js +6 -3
- package/components/EditComboField.js +1 -4
- package/components/IdentifyViewer.js +33 -34
- package/components/ImportLayer.js +78 -79
- package/components/OverviewMapButton.js +147 -0
- package/components/PluginsContainer.js +2 -2
- package/components/ResizeableWindow.js +8 -1
- package/components/SearchBox.js +2 -2
- package/components/SideBar.js +1 -0
- package/components/StandardApp.js +1 -2
- package/components/ThemeLayersListWindow.js +10 -1
- package/components/{map3d/View3DSwitcher.js → ViewSwitcher.js} +74 -29
- package/components/map/OlMap.js +1 -1
- package/components/map3d/Map3D.js +50 -48
- package/components/map3d/MapControls3D.js +4 -1
- package/components/map3d/drawtool/EditTool3D.js +1 -1
- package/components/map3d/layers/WFSLayer3D.js +1 -1
- package/components/share/ShareQRCode.js +1 -1
- package/{plugins/map3d/style/OverviewMap3D.css → components/style/OverviewMapButton.css} +4 -4
- package/components/style/ViewSwitcher.css +36 -0
- package/components/widgets/ColorButton.js +2 -2
- package/components/widgets/CopyButton.js +1 -1
- package/components/widgets/LayerCatalogWidget.js +4 -4
- package/libs/openlayers.js +11 -11
- package/package.json +54 -55
- package/plugins/API.js +4 -4
- package/plugins/FeatureForm.js +2 -2
- package/plugins/FeatureSearch.js +12 -12
- package/plugins/GeometryDigitizer.js +12 -13
- package/plugins/Map.js +11 -4
- package/plugins/MapFilter.js +12 -12
- package/plugins/MapTip.js +1 -1
- package/plugins/ObliqueView.js +115 -51
- package/plugins/Print.js +79 -91
- package/plugins/Routing.js +1 -1
- package/plugins/Share.js +5 -5
- package/plugins/TimeManager.js +1 -2
- package/plugins/View3D.js +135 -123
- package/plugins/map/RedliningSupport.js +3 -3
- package/plugins/map3d/Draw3D.js +4 -4
- package/plugins/map3d/ExportObjects3D.js +1 -1
- package/plugins/map3d/HideObjects3D.js +7 -7
- package/plugins/map3d/Identify3D.js +1 -1
- package/plugins/map3d/LayerTree3D.js +1 -1
- package/plugins/map3d/MapExport3D.js +25 -25
- package/plugins/map3d/Measure3D.js +1 -1
- package/plugins/map3d/OverviewMap3D.js +27 -102
- package/plugins/map3d/TopBar3D.js +7 -7
- package/plugins/style/ObliqueView.css +27 -11
- package/reducers/display.js +2 -2
- package/reducers/layers.js +11 -11
- package/scripts/gen-plugin-docs.js +11 -4
- package/scripts/makeIconkit.js +2 -2
- package/scripts/themesConfig.js +5 -5
- package/scripts/updateTranslations.js +2 -2
- package/utils/CoordinatesUtils.js +1 -1
- package/utils/EditingUtils.js +6 -6
- package/utils/FeatureStyles.js +1 -1
- package/utils/LayerUtils.js +73 -74
- package/utils/MiscUtils.js +10 -3
- package/utils/PermaLinkUtils.js +68 -71
- package/utils/SearchProviders.js +2 -2
- package/utils/ServiceLayerUtils.js +12 -12
- package/utils/ThemeUtils.js +1 -1
- package/utils/VectorLayerUtils.js +3 -3
- package/components/map3d/style/View3DSwitcher.css +0 -19
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "qwc2",
|
|
3
|
-
"version": "2025.12.
|
|
3
|
+
"version": "2025.12.24",
|
|
4
4
|
"description": "QGIS Web Client",
|
|
5
5
|
"author": "Sourcepole AG",
|
|
6
6
|
"license": "BSD-2-Clause",
|
|
@@ -16,75 +16,74 @@
|
|
|
16
16
|
"geospatial"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@furkot/webfonts-generator": "^2.0.
|
|
20
|
-
"@kayahr/text-encoding": "^2.
|
|
21
|
-
"@loaders.gl/core": "^4.3.
|
|
22
|
-
"@loaders.gl/shapefile": "^4.3.
|
|
23
|
-
"@loaders.gl/zip": "^4.3.
|
|
19
|
+
"@furkot/webfonts-generator": "^2.0.3",
|
|
20
|
+
"@kayahr/text-encoding": "^2.1.0",
|
|
21
|
+
"@loaders.gl/core": "^4.3.4",
|
|
22
|
+
"@loaders.gl/shapefile": "^4.3.4",
|
|
23
|
+
"@loaders.gl/zip": "^4.3.4",
|
|
24
24
|
"@mapbox/shp-write": "^0.4.3",
|
|
25
25
|
"@norbulcz/num-parse": "^0.1.0",
|
|
26
|
-
"@panoramax/web-viewer": "^4.0
|
|
27
|
-
"@reduxjs/toolkit": "^2.
|
|
26
|
+
"@panoramax/web-viewer": "^4.2.0",
|
|
27
|
+
"@reduxjs/toolkit": "^2.11.2",
|
|
28
28
|
"@sourcepole/qwc-giro3d": "^0.44.0-dev",
|
|
29
|
-
"@turf/buffer": "^
|
|
29
|
+
"@turf/buffer": "^7.3.1",
|
|
30
30
|
"@turf/clean-coords": "^7.3.1",
|
|
31
|
-
"@turf/helpers": "^
|
|
31
|
+
"@turf/helpers": "^7.3.1",
|
|
32
32
|
"@vtaits/react-color-picker": "^2.0.0",
|
|
33
33
|
"any-date-parser": "^1.5.4",
|
|
34
|
-
"axios": "^1.
|
|
35
|
-
"chart.js": "^4.
|
|
34
|
+
"axios": "^1.13.2",
|
|
35
|
+
"chart.js": "^4.5.1",
|
|
36
36
|
"classnames": "^2.5.1",
|
|
37
37
|
"clone": "^2.1.2",
|
|
38
|
-
"dayjs": "^1.11.
|
|
38
|
+
"dayjs": "^1.11.19",
|
|
39
39
|
"deepmerge": "^4.3.1",
|
|
40
40
|
"diacritics": "^1.3.0",
|
|
41
|
-
"dompurify": "^3.
|
|
42
|
-
"driver.js": "^1.
|
|
41
|
+
"dompurify": "^3.3.1",
|
|
42
|
+
"driver.js": "^1.4.0",
|
|
43
43
|
"expr-eval": "^2.0.2",
|
|
44
|
-
"fast-xml-parser": "^
|
|
44
|
+
"fast-xml-parser": "^5.3.3",
|
|
45
45
|
"file-saver": "^2.0.5",
|
|
46
46
|
"flat": "^6.0.1",
|
|
47
47
|
"formdata-json": "^1.0.0",
|
|
48
48
|
"geojson-bounding-box": "^0.2.0",
|
|
49
|
-
"html-react-parser": "^5.2.
|
|
49
|
+
"html-react-parser": "^5.2.11",
|
|
50
50
|
"ismobilejs": "^1.1.1",
|
|
51
|
-
"js-yaml": "^4.1.
|
|
51
|
+
"js-yaml": "^4.1.1",
|
|
52
52
|
"jszip": "^3.10.1",
|
|
53
53
|
"lodash.isempty": "^4.4.0",
|
|
54
54
|
"lodash.isequal": "^4.5.0",
|
|
55
|
-
"lodash.omit": "^4.5.0",
|
|
56
55
|
"mime-to-extensions": "^1.0.2",
|
|
57
56
|
"mkdirp": "^3.0.1",
|
|
58
57
|
"mousetrap": "^1.6.5",
|
|
59
58
|
"nearley": "^2.20.1",
|
|
60
59
|
"object-path": "^0.11.8",
|
|
61
|
-
"ol": "^10.
|
|
62
|
-
"ol-ext": "^4.0.
|
|
63
|
-
"ol-mapbox-style": "^
|
|
64
|
-
"painterro": "^1.2.
|
|
60
|
+
"ol": "^10.7.0",
|
|
61
|
+
"ol-ext": "^4.0.37",
|
|
62
|
+
"ol-mapbox-style": "^13.2.0",
|
|
63
|
+
"painterro": "^1.2.92",
|
|
65
64
|
"parse-css-color": "^0.2.1",
|
|
66
65
|
"path-browserify": "^1.0.1",
|
|
67
66
|
"pdf-lib": "^1.17.1",
|
|
68
|
-
"pdfjs-dist": "^4.
|
|
67
|
+
"pdfjs-dist": "^5.4.449",
|
|
69
68
|
"point-in-polygon": "^1.1.0",
|
|
70
69
|
"polygon-intersect-test": "^1.0.1",
|
|
71
|
-
"proj4": "^2.
|
|
70
|
+
"proj4": "^2.20.2",
|
|
72
71
|
"prop-types": "^15.8.1",
|
|
73
|
-
"qrcode.react": "^4.
|
|
72
|
+
"qrcode.react": "^4.2.0",
|
|
74
73
|
"randomcolor": "^0.6.2",
|
|
75
|
-
"react": "^
|
|
76
|
-
"react-chartjs-2": "^5.
|
|
77
|
-
"react-dom": "^
|
|
74
|
+
"react": "^19.2.3",
|
|
75
|
+
"react-chartjs-2": "^5.3.1",
|
|
76
|
+
"react-dom": "^19.2.3",
|
|
78
77
|
"react-google-recaptcha": "^3.1.0",
|
|
79
|
-
"react-redux": "^9.
|
|
80
|
-
"react-reverse-portal": "^2.
|
|
81
|
-
"react-rnd": "^10.
|
|
82
|
-
"react-share": "^5.
|
|
78
|
+
"react-redux": "^9.2.0",
|
|
79
|
+
"react-reverse-portal": "^2.3.0",
|
|
80
|
+
"react-rnd": "^10.5.2",
|
|
81
|
+
"react-share": "^5.2.2",
|
|
83
82
|
"react-sortablejs": "^1.5.1",
|
|
84
83
|
"react-swipeable": "^7.0.2",
|
|
85
84
|
"redux-logger": "^3.0.6",
|
|
86
85
|
"reselect": "^5.1.1",
|
|
87
|
-
"simplepolygon": "^
|
|
86
|
+
"simplepolygon": "^2.0.2",
|
|
88
87
|
"sortablejs": "^1.15.6",
|
|
89
88
|
"suncalc": "^1.9.0",
|
|
90
89
|
"svgpath": "^2.6.0",
|
|
@@ -94,36 +93,36 @@
|
|
|
94
93
|
"toposort": "^2.0.2",
|
|
95
94
|
"url": "^0.11.4",
|
|
96
95
|
"utif": "^3.1.0",
|
|
97
|
-
"uuid": "^
|
|
96
|
+
"uuid": "^13.0.0",
|
|
98
97
|
"xlsx": "^0.18.5"
|
|
99
98
|
},
|
|
100
99
|
"devDependencies": {
|
|
101
|
-
"@babel/cli": "^7.
|
|
102
|
-
"@babel/core": "^7.
|
|
103
|
-
"@babel/eslint-parser": "^7.
|
|
104
|
-
"@babel/plugin-transform-class-properties": "^7.
|
|
105
|
-
"@babel/plugin-transform-object-rest-spread": "^7.
|
|
106
|
-
"@babel/preset-env": "^7.
|
|
107
|
-
"@babel/preset-react": "^7.
|
|
100
|
+
"@babel/cli": "^7.28.3",
|
|
101
|
+
"@babel/core": "^7.28.5",
|
|
102
|
+
"@babel/eslint-parser": "^7.28.5",
|
|
103
|
+
"@babel/plugin-transform-class-properties": "^7.27.1",
|
|
104
|
+
"@babel/plugin-transform-object-rest-spread": "^7.28.4",
|
|
105
|
+
"@babel/preset-env": "^7.28.5",
|
|
106
|
+
"@babel/preset-react": "^7.28.5",
|
|
108
107
|
"@microsoft/eslint-formatter-sarif": "^3.1.0",
|
|
109
|
-
"@types/react": "^
|
|
110
|
-
"
|
|
108
|
+
"@types/react": "^19.2.7",
|
|
109
|
+
"@types/three": "^0.170.0",
|
|
110
|
+
"babel-loader": "^10.0.0",
|
|
111
111
|
"babel-plugin-transform-react-remove-prop-types": "^0.4.24",
|
|
112
|
-
"
|
|
113
|
-
"copy-webpack-plugin": "^12.0.2",
|
|
112
|
+
"copy-webpack-plugin": "^13.0.1",
|
|
114
113
|
"css-loader": "^7.1.2",
|
|
115
|
-
"eslint": "^
|
|
116
|
-
"eslint-plugin-perfectionist": "^
|
|
117
|
-
"eslint-plugin-react": "^7.37.
|
|
118
|
-
"html-webpack-plugin": "^5.6.
|
|
119
|
-
"react-docgen": "^
|
|
114
|
+
"eslint": "^9.39.2",
|
|
115
|
+
"eslint-plugin-perfectionist": "^5.1.0",
|
|
116
|
+
"eslint-plugin-react": "^7.37.5",
|
|
117
|
+
"html-webpack-plugin": "^5.6.5",
|
|
118
|
+
"react-docgen": "^8.0.2",
|
|
120
119
|
"source-map-loader": "^5.0.0",
|
|
121
120
|
"style-loader": "^4.0.0",
|
|
122
|
-
"typescript": "^5.
|
|
123
|
-
"webpack": "^5.
|
|
121
|
+
"typescript": "^5.9.3",
|
|
122
|
+
"webpack": "^5.104.1",
|
|
124
123
|
"webpack-bundle-size-analyzer": "^3.1.0",
|
|
125
|
-
"webpack-cli": "^
|
|
126
|
-
"webpack-dev-server": "^5.
|
|
124
|
+
"webpack-cli": "^6.0.1",
|
|
125
|
+
"webpack-dev-server": "^5.2.2"
|
|
127
126
|
},
|
|
128
127
|
"bin": {
|
|
129
128
|
"qwc_build_iconfont": "./scripts/makeIconkit.js",
|
package/plugins/API.js
CHANGED
|
@@ -69,18 +69,18 @@ import QtDesignerForm from '../components/QtDesignerForm';
|
|
|
69
69
|
import ResizeableWindow from '../components/ResizeableWindow';
|
|
70
70
|
import SearchBox from '../components/SearchBox';
|
|
71
71
|
import ServiceInfoWindow from '../components/ServiceInfoWindow';
|
|
72
|
+
import ShareLink from '../components/share/ShareLink';
|
|
73
|
+
import ShareQRCode from '../components/share/ShareQRCode';
|
|
74
|
+
import ShareSocials from '../components/share/ShareSocials';
|
|
72
75
|
import SideBar from '../components/SideBar';
|
|
73
76
|
import { Swipeable } from '../components/Swipeable';
|
|
74
77
|
import TaskBar from '../components/TaskBar';
|
|
75
78
|
import ThemeLayersListWindow from '../components/ThemeLayersListWindow';
|
|
76
79
|
import ThemeList from '../components/ThemeList';
|
|
77
|
-
import Toolbar from '../components/Toolbar';
|
|
78
|
-
import ShareLink from '../components/share/ShareLink';
|
|
79
|
-
import ShareQRCode from '../components/share/ShareQRCode';
|
|
80
|
-
import ShareSocials from '../components/share/ShareSocials';
|
|
81
80
|
import FixedTimeline from '../components/timeline/FixedTimeline';
|
|
82
81
|
import InfiniteTimeline from '../components/timeline/InfiniteTimeline';
|
|
83
82
|
import TimelineFeaturesSlider from '../components/timeline/TimelineFeaturesSlider';
|
|
83
|
+
import Toolbar from '../components/Toolbar';
|
|
84
84
|
import AccordeonWidget from '../components/widgets/AccordeonWidget';
|
|
85
85
|
import ButtonBar from '../components/widgets/ButtonBar';
|
|
86
86
|
import ColorButton from '../components/widgets/ColorButton';
|
package/plugins/FeatureForm.js
CHANGED
|
@@ -259,7 +259,7 @@ var FeatureForm = /*#__PURE__*/function (_React$Component) {
|
|
|
259
259
|
},
|
|
260
260
|
value: this.state.selectedFeature
|
|
261
261
|
}, Object.entries(this.state.pickedFeatures).map(function (_ref7) {
|
|
262
|
-
var _ref9,
|
|
262
|
+
var _ref9, _ref0, _match$layer$translat, _match$layer$translat2, _match$sublayer;
|
|
263
263
|
var _ref8 = _slicedToArray(_ref7, 2),
|
|
264
264
|
id = _ref8[0],
|
|
265
265
|
feature = _ref8[1];
|
|
@@ -270,7 +270,7 @@ var FeatureForm = /*#__PURE__*/function (_React$Component) {
|
|
|
270
270
|
featureId = _id$split2[2];
|
|
271
271
|
var editConfig = _this2.props.editConfigs[mapName][layerName];
|
|
272
272
|
var match = LayerUtils.searchLayer(_this2.props.layers, 'wms_name', mapName, 'name', layerName);
|
|
273
|
-
var layerTitle = (_ref9 = (
|
|
273
|
+
var layerTitle = (_ref9 = (_ref0 = (_match$layer$translat = (_match$layer$translat2 = match.layer.translations) === null || _match$layer$translat2 === void 0 || (_match$layer$translat2 = _match$layer$translat2.layertree) === null || _match$layer$translat2 === void 0 ? void 0 : _match$layer$translat2[layerName]) !== null && _match$layer$translat !== void 0 ? _match$layer$translat : editConfig.layerTitle) !== null && _ref0 !== void 0 ? _ref0 : match === null || match === void 0 || (_match$sublayer = match.sublayer) === null || _match$sublayer === void 0 ? void 0 : _match$sublayer.title) !== null && _ref9 !== void 0 ? _ref9 : layerName;
|
|
274
274
|
var featureName = editConfig.displayField ? feature.properties[editConfig.displayField] : featureText + " " + featureId;
|
|
275
275
|
return /*#__PURE__*/React.createElement("option", {
|
|
276
276
|
key: id,
|
package/plugins/FeatureSearch.js
CHANGED
|
@@ -294,18 +294,18 @@ var FeatureSearch = /*#__PURE__*/function (_React$Component) {
|
|
|
294
294
|
});
|
|
295
295
|
_defineProperty(_this, "reloadSelectOptions", function () {
|
|
296
296
|
var _this$state$searchPro, _this$state$searchPro2;
|
|
297
|
-
Object.entries((_this$state$searchPro = (_this$state$searchPro2 = _this.state.searchProviders[_this.state.selectedProvider]) === null || _this$state$searchPro2 === void 0 || (_this$state$searchPro2 = _this$state$searchPro2.params) === null || _this$state$searchPro2 === void 0 ? void 0 : _this$state$searchPro2.fields) !== null && _this$state$searchPro !== void 0 ? _this$state$searchPro : {}).forEach(function (
|
|
298
|
-
var
|
|
299
|
-
name =
|
|
300
|
-
fieldcfg =
|
|
297
|
+
Object.entries((_this$state$searchPro = (_this$state$searchPro2 = _this.state.searchProviders[_this.state.selectedProvider]) === null || _this$state$searchPro2 === void 0 || (_this$state$searchPro2 = _this$state$searchPro2.params) === null || _this$state$searchPro2 === void 0 ? void 0 : _this$state$searchPro2.fields) !== null && _this$state$searchPro !== void 0 ? _this$state$searchPro : {}).forEach(function (_ref0) {
|
|
298
|
+
var _ref1 = _slicedToArray(_ref0, 2),
|
|
299
|
+
name = _ref1[0],
|
|
300
|
+
fieldcfg = _ref1[1];
|
|
301
301
|
if (fieldcfg.type === "select") {
|
|
302
302
|
if (fieldcfg.options_query) {
|
|
303
303
|
var _this$state$providerS3;
|
|
304
304
|
var url = fieldcfg.options_query;
|
|
305
|
-
Object.entries(_this.state.formValues).forEach(function (
|
|
306
|
-
var
|
|
307
|
-
key =
|
|
308
|
-
value =
|
|
305
|
+
Object.entries(_this.state.formValues).forEach(function (_ref10) {
|
|
306
|
+
var _ref11 = _slicedToArray(_ref10, 2),
|
|
307
|
+
key = _ref11[0],
|
|
308
|
+
value = _ref11[1];
|
|
309
309
|
url = url.replace("$".concat(key, "$"), value);
|
|
310
310
|
});
|
|
311
311
|
if (((_this$state$providerS3 = _this.state.providerSelectOptions[name]) === null || _this$state$providerS3 === void 0 ? void 0 : _this$state$providerS3.source) !== url) {
|
|
@@ -415,10 +415,10 @@ var FeatureSearch = /*#__PURE__*/function (_React$Component) {
|
|
|
415
415
|
this.setState(function (state) {
|
|
416
416
|
var _state$searchProvider;
|
|
417
417
|
return {
|
|
418
|
-
formValues: Object.entries(((_state$searchProvider = state.searchProviders[state.selectedProvider]) === null || _state$searchProvider === void 0 || (_state$searchProvider = _state$searchProvider.params) === null || _state$searchProvider === void 0 ? void 0 : _state$searchProvider.fields) || []).reduce(function (res,
|
|
419
|
-
var
|
|
420
|
-
field =
|
|
421
|
-
cfg =
|
|
418
|
+
formValues: Object.entries(((_state$searchProvider = state.searchProviders[state.selectedProvider]) === null || _state$searchProvider === void 0 || (_state$searchProvider = _state$searchProvider.params) === null || _state$searchProvider === void 0 ? void 0 : _state$searchProvider.fields) || []).reduce(function (res, _ref12) {
|
|
419
|
+
var _ref13 = _slicedToArray(_ref12, 2),
|
|
420
|
+
field = _ref13[0],
|
|
421
|
+
cfg = _ref13[1];
|
|
422
422
|
return _objectSpread(_objectSpread({}, res), {}, _defineProperty({}, field, ""));
|
|
423
423
|
}, {})
|
|
424
424
|
};
|
|
@@ -32,7 +32,6 @@ import React from 'react';
|
|
|
32
32
|
import { connect } from 'react-redux';
|
|
33
33
|
import polySelfIntersections from 'geojson-polygon-self-intersections';
|
|
34
34
|
import isEmpty from 'lodash.isempty';
|
|
35
|
-
import omit from 'lodash.omit';
|
|
36
35
|
import PropTypes from 'prop-types';
|
|
37
36
|
import { LayerRole, removeLayer, addLayerFeatures, removeLayerFeatures, clearLayer } from '../actions/layers';
|
|
38
37
|
import { changeRedliningState, resetRedliningState } from '../actions/redlining';
|
|
@@ -67,16 +66,16 @@ import './style/Redlining.css';
|
|
|
67
66
|
* "pluginData": {
|
|
68
67
|
* "geometryLinks": [
|
|
69
68
|
* {
|
|
70
|
-
* "name": "<geomLinkName>",
|
|
71
|
-
* "title": "<geomLinkTitle>",
|
|
72
|
-
* "geomType": ["<geomType>", "<geomType>"] // Supported geometry types (Point, LineString, Polygon)
|
|
73
|
-
* "format": "wkt|geojson",
|
|
74
|
-
* "url": "<targetApplicationUrl>",
|
|
75
|
-
* "params": {"<key>": "<value>", ...}
|
|
76
|
-
* "target": "<target>" | {
|
|
77
|
-
* "iframedialog": true,
|
|
78
|
-
* "w": <dialogWidth>,
|
|
79
|
-
* "h": <dialogHeight>
|
|
69
|
+
* "name": "<geomLinkName>", // Link name referenced in theme item
|
|
70
|
+
* "title": "<geomLinkTitle>", // Link title, displayed in the selection combo
|
|
71
|
+
* "geomType": ["<geomType>", "<geomType>"], // Supported geometry types (Point, LineString, Polygon)
|
|
72
|
+
* "format": "wkt|geojson", // Format of data to send to application
|
|
73
|
+
* "url": "<targetApplicationUrl>", // Application target URL, receiving the POST submit. Can contain the $username$ placeholder parameter.
|
|
74
|
+
* "params": {"<key>": "<value>", ...} // Optional: additional form parameters to post to URL
|
|
75
|
+
* "target": "<target>" | { // Optional: form POST target which to display the result
|
|
76
|
+
* "iframedialog": true, // Use an iframe dialog
|
|
77
|
+
* "w": <dialogWidth>, // Dialog width
|
|
78
|
+
* "h": <dialogHeight> // Dialog height
|
|
80
79
|
* }
|
|
81
80
|
* }
|
|
82
81
|
* ]
|
|
@@ -511,8 +510,8 @@ var GeometryDigitizer = /*#__PURE__*/function (_React$Component) {
|
|
|
511
510
|
}).join(";") : JSON.stringify({
|
|
512
511
|
type: "FeatureCollection",
|
|
513
512
|
features: supportedFeatures.map(function (feature) {
|
|
514
|
-
var newFeature =
|
|
515
|
-
newFeature.properties =
|
|
513
|
+
var newFeature = MiscUtils.objectOmit(feature, EXCLUDE_PROPS);
|
|
514
|
+
newFeature.properties = MiscUtils.objectOmit(newFeature.properties, EXCLUDE_ATTRS);
|
|
516
515
|
return newFeature;
|
|
517
516
|
})
|
|
518
517
|
});
|
package/plugins/Map.js
CHANGED
|
@@ -36,9 +36,10 @@ import { connect } from 'react-redux';
|
|
|
36
36
|
import isEmpty from 'lodash.isempty';
|
|
37
37
|
import PropTypes from 'prop-types';
|
|
38
38
|
import { LayerRole } from '../actions/layers';
|
|
39
|
-
import { MapContainerPortalContext } from '../components/PluginsContainer';
|
|
40
39
|
import OlLayer from '../components/map/OlLayer';
|
|
41
40
|
import OlMap from '../components/map/OlMap';
|
|
41
|
+
import { MapContainerPortalContext } from '../components/PluginsContainer';
|
|
42
|
+
import ViewSwitcher from '../components/ViewSwitcher';
|
|
42
43
|
import Spinner from '../components/widgets/Spinner';
|
|
43
44
|
import LayerUtils from '../utils/LayerUtils';
|
|
44
45
|
import LocaleUtils from '../utils/LocaleUtils';
|
|
@@ -273,7 +274,10 @@ var Map = /*#__PURE__*/function (_React$Component) {
|
|
|
273
274
|
mapOptions: this.props.mapOptions
|
|
274
275
|
}, this.props.map, {
|
|
275
276
|
fullExtent: (_this$props$theme = this.props.theme) === null || _this$props$theme === void 0 ? void 0 : _this$props$theme.bbox
|
|
276
|
-
}), this.renderLayers(), this.renderSupportTools())),
|
|
277
|
+
}), this.renderLayers(), this.renderSupportTools())), /*#__PURE__*/React.createElement(ViewSwitcher, {
|
|
278
|
+
key: "ViewSwitcher",
|
|
279
|
+
position: this.props.viewSwitcherPosition
|
|
280
|
+
}), loadingIndicator], this.context);
|
|
277
281
|
}
|
|
278
282
|
}]);
|
|
279
283
|
}(React.Component);
|
|
@@ -303,7 +307,9 @@ _defineProperty(Map, "propTypes", {
|
|
|
303
307
|
tools: PropTypes.object,
|
|
304
308
|
/** Options to pass to the map support plugins, in the form `{"<Name>": {<options>}}`.
|
|
305
309
|
* Refer to the documentation of the <a href="#mapSupportPlugins">Map support plugins</a> for settable options. */
|
|
306
|
-
toolsOptions: PropTypes.object
|
|
310
|
+
toolsOptions: PropTypes.object,
|
|
311
|
+
/** Position of the view switcher button. */
|
|
312
|
+
viewSwitcherPosition: PropTypes.number
|
|
307
313
|
});
|
|
308
314
|
_defineProperty(Map, "defaultProps", {
|
|
309
315
|
mapOptions: {},
|
|
@@ -311,7 +317,8 @@ _defineProperty(Map, "defaultProps", {
|
|
|
311
317
|
swipeGeometryTypeBlacklist: [],
|
|
312
318
|
swipeLayerNameBlacklist: [],
|
|
313
319
|
tools: {},
|
|
314
|
-
toolsOptions: {}
|
|
320
|
+
toolsOptions: {},
|
|
321
|
+
viewSwitcherPosition: 6
|
|
315
322
|
});
|
|
316
323
|
export default (function (tools) {
|
|
317
324
|
return connect(function (state) {
|
package/plugins/MapFilter.js
CHANGED
|
@@ -145,7 +145,7 @@ var MapFilter = /*#__PURE__*/function (_React$Component) {
|
|
|
145
145
|
var expr = '';
|
|
146
146
|
try {
|
|
147
147
|
expr = JSON.parse(entry.expr);
|
|
148
|
-
} catch (
|
|
148
|
+
} catch (_unused) {
|
|
149
149
|
return;
|
|
150
150
|
}
|
|
151
151
|
if (layerExpressions[entry.layer]) {
|
|
@@ -225,7 +225,7 @@ var MapFilter = /*#__PURE__*/function (_React$Component) {
|
|
|
225
225
|
var expr = null;
|
|
226
226
|
try {
|
|
227
227
|
expr = JSON.parse(entry.expr);
|
|
228
|
-
} catch (
|
|
228
|
+
} catch (_unused2) {
|
|
229
229
|
return null;
|
|
230
230
|
}
|
|
231
231
|
return {
|
|
@@ -339,7 +339,7 @@ var MapFilter = /*#__PURE__*/function (_React$Component) {
|
|
|
339
339
|
var filterexpr = null;
|
|
340
340
|
try {
|
|
341
341
|
filterexpr = JSON.parse(_this.state.filterEditor.value);
|
|
342
|
-
} catch (
|
|
342
|
+
} catch (_unused3) {
|
|
343
343
|
// Pass
|
|
344
344
|
}
|
|
345
345
|
if (!Array.isArray(filterexpr) || !_validateExpression(filterexpr)) {
|
|
@@ -704,16 +704,16 @@ var MapFilter = /*#__PURE__*/function (_React$Component) {
|
|
|
704
704
|
if (!prevProps.theme && (_this$props$startupPa = this.props.startupParams) !== null && _this$props$startupPa !== void 0 && _this$props$startupPa.f) {
|
|
705
705
|
try {
|
|
706
706
|
var startupConfig = JSON.parse(this.props.startupParams.f);
|
|
707
|
-
Object.entries(startupConfig).forEach(function (
|
|
708
|
-
var
|
|
709
|
-
filterId =
|
|
710
|
-
values =
|
|
707
|
+
Object.entries(startupConfig).forEach(function (_ref0) {
|
|
708
|
+
var _ref1 = _slicedToArray(_ref0, 2),
|
|
709
|
+
filterId = _ref1[0],
|
|
710
|
+
values = _ref1[1];
|
|
711
711
|
if (filterId in filters) {
|
|
712
712
|
filters[filterId].active = true;
|
|
713
|
-
Object.entries(values).forEach(function (
|
|
714
|
-
var
|
|
715
|
-
fieldId =
|
|
716
|
-
value =
|
|
713
|
+
Object.entries(values).forEach(function (_ref10) {
|
|
714
|
+
var _ref11 = _slicedToArray(_ref10, 2),
|
|
715
|
+
fieldId = _ref11[0],
|
|
716
|
+
value = _ref11[1];
|
|
717
717
|
filters[filterId].values[fieldId] = value;
|
|
718
718
|
});
|
|
719
719
|
}
|
|
@@ -737,7 +737,7 @@ var MapFilter = /*#__PURE__*/function (_React$Component) {
|
|
|
737
737
|
}));
|
|
738
738
|
}, {});
|
|
739
739
|
}
|
|
740
|
-
} catch (
|
|
740
|
+
} catch (_unused4) {
|
|
741
741
|
/* eslint-disable-next-line */
|
|
742
742
|
console.log("Error while parsing startup filter");
|
|
743
743
|
}
|
package/plugins/MapTip.js
CHANGED
|
@@ -29,11 +29,11 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
29
29
|
* LICENSE file in the root directory of this source tree.
|
|
30
30
|
*/
|
|
31
31
|
|
|
32
|
+
import htmlReactParser, { domToReact } from 'html-react-parser';
|
|
32
33
|
import React from 'react';
|
|
33
34
|
import ReactDOM from 'react-dom';
|
|
34
35
|
import { connect } from 'react-redux';
|
|
35
36
|
import DOMPurify from 'dompurify';
|
|
36
|
-
import htmlReactParser, { domToReact } from 'html-react-parser';
|
|
37
37
|
import isEmpty from 'lodash.isempty';
|
|
38
38
|
import PropTypes from 'prop-types';
|
|
39
39
|
import { v4 as uuidv4 } from 'uuid';
|