qwc2 2025.12.15 → 2025.12.17
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/components/IdentifyViewer.js +89 -35
- package/components/ResizeableWindow.js +8 -0
- package/components/SearchBox.js +12 -5
- package/components/SideBar.js +4 -0
- package/components/style/IdentifyViewer.css +7 -5
- package/components/widgets/EditableSelect.js +2 -1
- package/components/widgets/LayerCatalogWidget.js +25 -14
- package/components/widgets/MenuButton.js +7 -2
- package/components/widgets/NavBar.js +4 -2
- package/components/widgets/PopupMenu.js +44 -13
- package/components/widgets/SearchWidget.js +39 -50
- package/components/widgets/style/SearchWidget.css +3 -19
- package/package.json +1 -1
- package/plugins/HeightProfile.js +4 -1
- package/plugins/Identify.js +4 -0
- package/plugins/LayerTree.js +5 -1
- package/plugins/Measure.js +5 -1
- package/plugins/Print.js +1 -1
- package/plugins/TopBar.js +2 -0
- package/plugins/map/MeasurementSupport.js +1 -0
- package/plugins/map/RedliningSupport.js +7 -5
- package/reducers/layers.js +18 -36
- package/reducers/measurement.js +2 -1
- package/scripts/wmts_config_generator.py +1 -1
- package/static/translations/bg-BG.json +6 -1
- package/static/translations/ca-ES.json +6 -1
- package/static/translations/cs-CZ.json +6 -1
- package/static/translations/de-CH.json +6 -1
- package/static/translations/de-DE.json +6 -1
- package/static/translations/en-US.json +6 -1
- package/static/translations/es-ES.json +6 -1
- package/static/translations/fi-FI.json +6 -1
- package/static/translations/fr-FR.json +7 -2
- package/static/translations/hu-HU.json +6 -1
- package/static/translations/it-IT.json +6 -1
- package/static/translations/ja-JP.json +6 -1
- package/static/translations/nl-NL.json +6 -1
- package/static/translations/no-NO.json +6 -1
- package/static/translations/pl-PL.json +6 -1
- package/static/translations/pt-BR.json +6 -1
- package/static/translations/pt-PT.json +6 -1
- package/static/translations/ro-RO.json +6 -1
- package/static/translations/ru-RU.json +6 -1
- package/static/translations/sv-SE.json +6 -1
- package/static/translations/tr-TR.json +6 -1
- package/static/translations/tsconfig.json +5 -0
- package/static/translations/uk-UA.json +6 -1
- package/utils/FeatureStyles.js +5 -2
- package/utils/MiscUtils.js +2 -1
- package/utils/VectorLayerUtils.js +4 -2
|
@@ -34,11 +34,11 @@ import isEmpty from 'lodash.isempty';
|
|
|
34
34
|
import PropTypes from 'prop-types';
|
|
35
35
|
import { v4 as uuidv4 } from 'uuid';
|
|
36
36
|
import LocaleUtils from '../../utils/LocaleUtils';
|
|
37
|
-
import MiscUtils from '../../utils/MiscUtils';
|
|
38
37
|
import { SearchResultType } from '../../utils/SearchProviders';
|
|
39
38
|
import VectorLayerUtils from '../../utils/VectorLayerUtils';
|
|
40
39
|
import Icon from '../Icon';
|
|
41
40
|
import InputContainer from './InputContainer';
|
|
41
|
+
import PopupMenu from './PopupMenu';
|
|
42
42
|
import Spinner from './Spinner';
|
|
43
43
|
import './style/SearchWidget.css';
|
|
44
44
|
var SearchWidget = /*#__PURE__*/function (_React$Component) {
|
|
@@ -51,42 +51,40 @@ var SearchWidget = /*#__PURE__*/function (_React$Component) {
|
|
|
51
51
|
reqId: null,
|
|
52
52
|
results: [],
|
|
53
53
|
pending: 0,
|
|
54
|
-
|
|
54
|
+
resultsVisible: false
|
|
55
55
|
});
|
|
56
56
|
_defineProperty(_this, "renderResults", function () {
|
|
57
|
-
return /*#__PURE__*/React.createElement(
|
|
57
|
+
return /*#__PURE__*/React.createElement(PopupMenu, {
|
|
58
|
+
anchor: _this.input,
|
|
58
59
|
className: "search-widget-results",
|
|
59
|
-
|
|
60
|
+
onClose: function onClose() {
|
|
61
|
+
return _this.setState({
|
|
62
|
+
resultsVisible: false
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
setMaxWidth: true,
|
|
66
|
+
spaceKeyActivation: false
|
|
60
67
|
}, _this.state.results.filter(function (group) {
|
|
61
68
|
var _group$type;
|
|
62
69
|
return _this.props.resultTypeFilter.includes((_group$type = group.type) !== null && _group$type !== void 0 ? _group$type : SearchResultType.PLACE);
|
|
63
70
|
}).map(function (group) {
|
|
64
71
|
var _group$title;
|
|
65
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
66
|
-
className: "search-widget-results-group",
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
70
|
-
className: "search-widget-results-group-title"
|
|
72
|
+
return [/*#__PURE__*/React.createElement("div", {
|
|
73
|
+
className: "search-widget-results-group-title",
|
|
74
|
+
disabled: true,
|
|
75
|
+
key: group.id
|
|
71
76
|
}, /*#__PURE__*/React.createElement("span", null, (_group$title = group.title) !== null && _group$title !== void 0 ? _group$title : LocaleUtils.tr(group.titlemsgid))), group.items.map(function (item) {
|
|
72
77
|
item.text = (item.label !== undefined ? item.label : item.text || '').replace(/<\/?\w+\s*\/?>/g, '');
|
|
73
78
|
return /*#__PURE__*/React.createElement("div", {
|
|
74
|
-
className: "search-widget-results-
|
|
75
|
-
key: item.id,
|
|
79
|
+
className: "search-widget-results-item",
|
|
80
|
+
key: group.id + ":" + item.id,
|
|
76
81
|
onClick: function onClick() {
|
|
77
82
|
return _this.resultSelected(group, item);
|
|
78
83
|
},
|
|
79
84
|
title: item.text
|
|
80
85
|
}, item.text);
|
|
81
|
-
})
|
|
82
|
-
}));
|
|
83
|
-
});
|
|
84
|
-
_defineProperty(_this, "setPreventBlur", function () {
|
|
85
|
-
_this.preventBlur = true;
|
|
86
|
-
setTimeout(function () {
|
|
87
|
-
_this.preventBlur = false;
|
|
88
|
-
return false;
|
|
89
|
-
}, 100);
|
|
86
|
+
})];
|
|
87
|
+
}).flat());
|
|
90
88
|
});
|
|
91
89
|
_defineProperty(_this, "textChanged", function (ev) {
|
|
92
90
|
_this.setState({
|
|
@@ -102,27 +100,19 @@ var SearchWidget = /*#__PURE__*/function (_React$Component) {
|
|
|
102
100
|
_this.searchTimeout = setTimeout(_this.startSearch, 250);
|
|
103
101
|
}
|
|
104
102
|
});
|
|
105
|
-
_defineProperty(_this, "onBlur", function () {
|
|
106
|
-
if (!_this.preventBlur) {
|
|
107
|
-
clearTimeout(_this.searchTimeout);
|
|
108
|
-
_this.props.onBlur();
|
|
109
|
-
_this.setState({
|
|
110
|
-
active: false
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
103
|
_defineProperty(_this, "onFocus", function (ev) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
active: true
|
|
119
|
-
});
|
|
104
|
+
if (_this.input && !_this.state.resultsVisible) {
|
|
105
|
+
ev.target.select();
|
|
106
|
+
}
|
|
120
107
|
});
|
|
121
108
|
_defineProperty(_this, "onKeyDown", function (ev) {
|
|
122
109
|
if (ev.key === 'Enter') {
|
|
123
110
|
_this.startSearch();
|
|
124
|
-
} else if (ev.key === '
|
|
125
|
-
ev.
|
|
111
|
+
} else if (ev.key === 'ArrowDown' || ev.key === 'ArrowUp') {
|
|
112
|
+
ev.preventDefault();
|
|
113
|
+
_this.setState({
|
|
114
|
+
resultsVisible: true
|
|
115
|
+
});
|
|
126
116
|
}
|
|
127
117
|
});
|
|
128
118
|
_defineProperty(_this, "startSearch", function () {
|
|
@@ -149,7 +139,8 @@ var SearchWidget = /*#__PURE__*/function (_React$Component) {
|
|
|
149
139
|
provider: provider
|
|
150
140
|
});
|
|
151
141
|
}))),
|
|
152
|
-
pending: state.pending - 1
|
|
142
|
+
pending: state.pending - 1,
|
|
143
|
+
resultsVisible: true
|
|
153
144
|
};
|
|
154
145
|
});
|
|
155
146
|
}, axios);
|
|
@@ -174,14 +165,12 @@ var SearchWidget = /*#__PURE__*/function (_React$Component) {
|
|
|
174
165
|
} : null
|
|
175
166
|
}));
|
|
176
167
|
}
|
|
177
|
-
if (_this.input) {
|
|
178
|
-
_this.input.blur();
|
|
179
|
-
}
|
|
180
168
|
});
|
|
181
169
|
_defineProperty(_this, "clear", function () {
|
|
182
170
|
_this.setState({
|
|
183
171
|
results: [],
|
|
184
|
-
text: ""
|
|
172
|
+
text: "",
|
|
173
|
+
resultsVisible: false
|
|
185
174
|
});
|
|
186
175
|
_this.props.resultSelected(null);
|
|
187
176
|
});
|
|
@@ -209,13 +198,17 @@ var SearchWidget = /*#__PURE__*/function (_React$Component) {
|
|
|
209
198
|
}, {
|
|
210
199
|
key: "render",
|
|
211
200
|
value: function render() {
|
|
212
|
-
var
|
|
213
|
-
|
|
201
|
+
var _this2 = this,
|
|
202
|
+
_this$props$placehold;
|
|
214
203
|
return /*#__PURE__*/React.createElement("div", {
|
|
215
204
|
className: "search-widget-container"
|
|
216
205
|
}, /*#__PURE__*/React.createElement(InputContainer, null, /*#__PURE__*/React.createElement("input", {
|
|
217
|
-
onBlur: this.onBlur,
|
|
218
206
|
onChange: this.textChanged,
|
|
207
|
+
onClick: function onClick() {
|
|
208
|
+
return _this2.setState({
|
|
209
|
+
resultsVisible: true
|
|
210
|
+
});
|
|
211
|
+
},
|
|
219
212
|
onFocus: this.onFocus,
|
|
220
213
|
onKeyDown: this.onKeyDown,
|
|
221
214
|
placeholder: (_this$props$placehold = this.props.placeholder) !== null && _this$props$placehold !== void 0 ? _this$props$placehold : LocaleUtils.tr("search.search"),
|
|
@@ -231,14 +224,12 @@ var SearchWidget = /*#__PURE__*/function (_React$Component) {
|
|
|
231
224
|
icon: "clear",
|
|
232
225
|
onClick: this.clear,
|
|
233
226
|
role: "suffix"
|
|
234
|
-
})), (!isEmpty(this.state.results) || this.state.pending > 0) && this.state.
|
|
227
|
+
})), (!isEmpty(this.state.results) || this.state.pending > 0) && this.state.resultsVisible ? this.renderResults() : null);
|
|
235
228
|
}
|
|
236
229
|
}]);
|
|
237
230
|
}(React.Component);
|
|
238
231
|
_defineProperty(SearchWidget, "propTypes", {
|
|
239
232
|
className: PropTypes.string,
|
|
240
|
-
onBlur: PropTypes.func,
|
|
241
|
-
onFocus: PropTypes.func,
|
|
242
233
|
placeholder: PropTypes.string,
|
|
243
234
|
queryGeometries: PropTypes.bool,
|
|
244
235
|
resultSelected: PropTypes.func.isRequired,
|
|
@@ -251,8 +242,6 @@ _defineProperty(SearchWidget, "propTypes", {
|
|
|
251
242
|
value: PropTypes.string
|
|
252
243
|
});
|
|
253
244
|
_defineProperty(SearchWidget, "defaultProps", {
|
|
254
|
-
onBlur: function onBlur() {},
|
|
255
|
-
onFocus: function onFocus() {},
|
|
256
245
|
resultTypeFilter: [SearchResultType.PLACE],
|
|
257
246
|
searchParams: {},
|
|
258
247
|
searchProviders: []
|
|
@@ -11,31 +11,15 @@ div.search-widget-container > div.input-container > div.spinner {
|
|
|
11
11
|
height: 2em;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
div.search-widget-results {
|
|
15
|
-
position: absolute;
|
|
16
|
-
left: 0;
|
|
17
|
-
right: 0;
|
|
18
|
-
top: 100%;
|
|
19
|
-
border: 1px solid var(--border-color);
|
|
20
|
-
background-color: var(--list-bg-color);
|
|
21
|
-
max-height: 10em;
|
|
22
|
-
overflow-y: auto;
|
|
23
|
-
z-index: 1;
|
|
24
|
-
box-shadow: 0px 2px 4px rgba(136, 136, 136, 0.5);
|
|
25
|
-
}
|
|
26
14
|
|
|
27
15
|
div.search-widget-results-group-title {
|
|
28
16
|
background-color: var(--list-section-bg-color);
|
|
29
17
|
color: var(--list-section-text-color);
|
|
30
|
-
font-weight: bold
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
div.search-widget-results-group-item:hover {
|
|
34
|
-
background-color: var(--list-item-bg-color-hover);
|
|
35
|
-
color: var(--list-item-text-color-hover);
|
|
18
|
+
font-weight: bold;
|
|
19
|
+
padding: 0.25em;
|
|
36
20
|
}
|
|
37
21
|
|
|
38
|
-
div.search-widget-results-
|
|
22
|
+
div.search-widget-results-item {
|
|
39
23
|
padding: 0.25em;
|
|
40
24
|
white-space: nowrap;
|
|
41
25
|
overflow: hidden;
|
package/package.json
CHANGED
package/plugins/HeightProfile.js
CHANGED
|
@@ -124,7 +124,8 @@ var HeightProfilePrintDialog_ = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
124
124
|
strokeWidth: 4,
|
|
125
125
|
strokeDash: [],
|
|
126
126
|
headmarker: _this.props.measurement.lineHeadMarker,
|
|
127
|
-
tailmarker: _this.props.measurement.lineTailMarker
|
|
127
|
+
tailmarker: _this.props.measurement.lineTailMarker,
|
|
128
|
+
markerscale: _this.props.measurement.markerScale
|
|
128
129
|
},
|
|
129
130
|
properties: {
|
|
130
131
|
segment_labels: measurement.segment_lengths.map(function (length) {
|
|
@@ -147,6 +148,8 @@ var HeightProfilePrintDialog_ = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
147
148
|
REQUEST: 'GetMap',
|
|
148
149
|
TRANSPARENT: 'true',
|
|
149
150
|
TILED: 'false',
|
|
151
|
+
filename: 'heightprofile.png',
|
|
152
|
+
// To make the ogc-service treat this as a raster export
|
|
150
153
|
CRS: _this.props.map.projection,
|
|
151
154
|
BBOX: bounds,
|
|
152
155
|
WIDTH: _this.props.map.size.width,
|
package/plugins/Identify.js
CHANGED
|
@@ -415,6 +415,7 @@ var Identify = /*#__PURE__*/function (_React$Component) {
|
|
|
415
415
|
longAttributesDisplay: this.props.longAttributesDisplay,
|
|
416
416
|
replaceImageUrls: this.props.replaceImageUrls,
|
|
417
417
|
resultDisplayMode: this.props.resultDisplayMode,
|
|
418
|
+
resultGridSize: this.props.resultGridSize,
|
|
418
419
|
showLayerSelector: this.props.showLayerSelector
|
|
419
420
|
});
|
|
420
421
|
}
|
|
@@ -507,6 +508,8 @@ _defineProperty(Identify, "propTypes", {
|
|
|
507
508
|
replaceImageUrls: PropTypes.bool,
|
|
508
509
|
/** Result display mode, one of `tree`, `flat`, `paginated`. */
|
|
509
510
|
resultDisplayMode: PropTypes.string,
|
|
511
|
+
/** Target cell size of the result grid in comparison mode. */
|
|
512
|
+
resultGridSize: PropTypes.number,
|
|
510
513
|
selection: PropTypes.object,
|
|
511
514
|
setCurrentTask: PropTypes.func,
|
|
512
515
|
/** Whether to show a layer selector to filter the identify results by layer. */
|
|
@@ -522,6 +525,7 @@ _defineProperty(Identify, "defaultProps", {
|
|
|
522
525
|
customExporters: [],
|
|
523
526
|
longAttributesDisplay: 'ellipsis',
|
|
524
527
|
resultDisplayMode: 'flat',
|
|
528
|
+
resultGridSize: 200,
|
|
525
529
|
replaceImageUrls: true,
|
|
526
530
|
featureInfoReturnsLayerName: true,
|
|
527
531
|
geometry: {
|
package/plugins/LayerTree.js
CHANGED
|
@@ -441,7 +441,8 @@ var LayerTree = /*#__PURE__*/function (_React$Component) {
|
|
|
441
441
|
icon: "tree",
|
|
442
442
|
onClick: function onClick() {
|
|
443
443
|
return _this.props.changeLayerProperty(layer.id, "visibility", subtreevisibility !== 1, path, "children");
|
|
444
|
-
}
|
|
444
|
+
},
|
|
445
|
+
title: LocaleUtils.tr("layertree.togglegroup")
|
|
445
446
|
});
|
|
446
447
|
}
|
|
447
448
|
var infoButton = null;
|
|
@@ -689,18 +690,21 @@ var LayerTree = /*#__PURE__*/function (_React$Component) {
|
|
|
689
690
|
}), _this.state.visibilityMenu ? /*#__PURE__*/React.createElement(PopupMenu, {
|
|
690
691
|
anchor: _this.visibilityButton,
|
|
691
692
|
className: "layertree-visibility-menu",
|
|
693
|
+
keepMenuOpen: true,
|
|
692
694
|
onClose: function onClose() {
|
|
693
695
|
return _this.setState({
|
|
694
696
|
visibilityMenu: false
|
|
695
697
|
});
|
|
696
698
|
}
|
|
697
699
|
}, _this.props.showToggleAllLayersCheckbox ? /*#__PURE__*/React.createElement("div", {
|
|
700
|
+
key: "hidealllayers",
|
|
698
701
|
onClick: function onClick() {
|
|
699
702
|
return _this.toggleLayerTreeVisibility(vis === 0);
|
|
700
703
|
}
|
|
701
704
|
}, /*#__PURE__*/React.createElement(Icon, {
|
|
702
705
|
icon: vis === 0 ? "checked" : "unchecked"
|
|
703
706
|
}), " ", LocaleUtils.tr("layertree.hidealllayers")) : null, _this.props.enableVisibleFilter ? /*#__PURE__*/React.createElement("div", {
|
|
707
|
+
key: "filtervisible",
|
|
704
708
|
onClick: function onClick() {
|
|
705
709
|
return _this.setState(function (state) {
|
|
706
710
|
return {
|
package/plugins/Measure.js
CHANGED
|
@@ -52,7 +52,8 @@ var Measure = /*#__PURE__*/function (_React$Component) {
|
|
|
52
52
|
bearingHeadMarker: _this.props.bearingHeadMarker,
|
|
53
53
|
bearingTailMarker: _this.props.bearingTailMarker,
|
|
54
54
|
lineHeadMarker: _this.props.lineHeadMarker,
|
|
55
|
-
lineTailMarker: _this.props.lineTailMarker
|
|
55
|
+
lineTailMarker: _this.props.lineTailMarker,
|
|
56
|
+
markerScale: _this.props.markerScale
|
|
56
57
|
});
|
|
57
58
|
_this.props.setSnappingConfig(_this.props.snapping, _this.props.snappingActive);
|
|
58
59
|
});
|
|
@@ -199,6 +200,8 @@ _defineProperty(Measure, "propTypes", {
|
|
|
199
200
|
/** Tail marker of distance line measurement geometry. Can be one of `OUTARROW`, `INARROW`, `LINE`. */
|
|
200
201
|
lineTailMarker: PropTypes.string,
|
|
201
202
|
mapCrs: PropTypes.string,
|
|
203
|
+
/** Scale factor for all heade/tail markers. */
|
|
204
|
+
markerScale: PropTypes.number,
|
|
202
205
|
measureState: PropTypes.object,
|
|
203
206
|
setSnappingConfig: PropTypes.func,
|
|
204
207
|
/** Whether to show the widget to switch between measure modes. */
|
|
@@ -210,6 +213,7 @@ _defineProperty(Measure, "propTypes", {
|
|
|
210
213
|
snappingActive: PropTypes.oneOfType([PropTypes.bool, PropTypes.string])
|
|
211
214
|
});
|
|
212
215
|
_defineProperty(Measure, "defaultProps", {
|
|
216
|
+
markerScale: 1,
|
|
213
217
|
showMeasureModeSwitcher: true,
|
|
214
218
|
snapping: true,
|
|
215
219
|
snappingActive: true
|
package/plugins/Print.js
CHANGED
|
@@ -1196,7 +1196,7 @@ _defineProperty(Print, "propTypes", {
|
|
|
1196
1196
|
printExternalLayers: PropTypes.bool,
|
|
1197
1197
|
/** Whether to print highlights on the map, e.g. selected features or redlining. */
|
|
1198
1198
|
printMapHighlights: PropTypes.bool,
|
|
1199
|
-
/** Restrict print scale to list of
|
|
1199
|
+
/** Restrict print scale to list of predefined print scales, if any. */
|
|
1200
1200
|
restrictToPrintScales: PropTypes.bool,
|
|
1201
1201
|
/** Scale factor to apply to line widths, font sizes, ... of redlining drawings passed to GetPrint. */
|
|
1202
1202
|
scaleFactor: PropTypes.number,
|
package/plugins/TopBar.js
CHANGED
|
@@ -243,6 +243,8 @@ _defineProperty(TopBar, "propTypes", {
|
|
|
243
243
|
searchOptions: PropTypes.shape({
|
|
244
244
|
/** Whether to show the search filter widget. */
|
|
245
245
|
allowSearchFilters: PropTypes.bool,
|
|
246
|
+
/** Whether to focus the search field on startup. */
|
|
247
|
+
focusOnStartup: PropTypes.bool,
|
|
246
248
|
/** Whether to hide the result labels on the map. */
|
|
247
249
|
hideResultLabels: PropTypes.bool,
|
|
248
250
|
/** The style used for highlighting search result geometries. */
|
|
@@ -179,6 +179,7 @@ var MeasurementSupport = /*#__PURE__*/function (_React$Component) {
|
|
|
179
179
|
opts.headmarker = _this.props.measurement.bearingHeadMarker;
|
|
180
180
|
opts.tailmarker = _this.props.measurement.bearingTailMarker;
|
|
181
181
|
}
|
|
182
|
+
opts.markerscale = _this.props.measurement.markerScale;
|
|
182
183
|
return [].concat(_toConsumableArray(FeatureStyles.measureInteraction(feature, opts)), [FeatureStyles.measureInteractionVertex({
|
|
183
184
|
geometryFunction: geometryFunction
|
|
184
185
|
})]);
|
|
@@ -181,7 +181,7 @@ var RedliningSupport = /*#__PURE__*/function (_React$Component) {
|
|
|
181
181
|
var isText = feature.get("shape") === "Text";
|
|
182
182
|
var styleName = isText ? "text" : "default";
|
|
183
183
|
var opts = _this.styleOptions(styleProps, isText);
|
|
184
|
-
if (!feature.get('measurements')) {
|
|
184
|
+
if (!feature.get('measurements') && _this.selectedFeatures.length <= 1 && !(isText && !styleProps.text)) {
|
|
185
185
|
feature.set('label', styleProps.text);
|
|
186
186
|
}
|
|
187
187
|
feature.set('styleName', styleName);
|
|
@@ -559,7 +559,6 @@ var RedliningSupport = /*#__PURE__*/function (_React$Component) {
|
|
|
559
559
|
cloneIds.push(featureObj.id);
|
|
560
560
|
return featureObj;
|
|
561
561
|
});
|
|
562
|
-
_this.updateRedliningState(true);
|
|
563
562
|
var layer = {
|
|
564
563
|
id: _this.props.redlining.layer,
|
|
565
564
|
title: _this.props.redlining.layerTitle,
|
|
@@ -570,7 +569,7 @@ var RedliningSupport = /*#__PURE__*/function (_React$Component) {
|
|
|
570
569
|
var features = cloneIds.map(function (id) {
|
|
571
570
|
return l.getSource().getFeatureById(id);
|
|
572
571
|
});
|
|
573
|
-
_this.selectFeatures(features);
|
|
572
|
+
_this.selectFeatures(features, false);
|
|
574
573
|
while (_this.interactions.length > 0) {
|
|
575
574
|
_this.props.map.removeInteraction(_this.interactions.shift());
|
|
576
575
|
}
|
|
@@ -606,13 +605,16 @@ var RedliningSupport = /*#__PURE__*/function (_React$Component) {
|
|
|
606
605
|
}
|
|
607
606
|
});
|
|
608
607
|
_defineProperty(_this, "selectFeatures", function (features) {
|
|
608
|
+
var updateState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
609
609
|
var firstSelection = isEmpty(_this.selectedFeatures);
|
|
610
610
|
features.forEach(function (feature) {
|
|
611
611
|
feature.setStyle(_this.styleFunction);
|
|
612
612
|
feature.on('change', _this.updateMeasurements);
|
|
613
613
|
_this.selectedFeatures.push(feature);
|
|
614
614
|
});
|
|
615
|
-
|
|
615
|
+
if (updateState) {
|
|
616
|
+
_this.updateRedliningState(firstSelection);
|
|
617
|
+
}
|
|
616
618
|
});
|
|
617
619
|
_defineProperty(_this, "deselectFeature", function (feature, updateState) {
|
|
618
620
|
var styleName = feature.get("shape") === "Text" ? "text" : "default";
|
|
@@ -655,7 +657,7 @@ var RedliningSupport = /*#__PURE__*/function (_React$Component) {
|
|
|
655
657
|
return featureObj;
|
|
656
658
|
}).filter(Boolean);
|
|
657
659
|
if (isEmpty(featureObjects)) {
|
|
658
|
-
return
|
|
660
|
+
return [];
|
|
659
661
|
}
|
|
660
662
|
var layer = {
|
|
661
663
|
id: redliningProps.layer,
|
package/reducers/layers.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
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
2
|
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
3
3
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
+
function _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; } }
|
|
4
5
|
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
5
6
|
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
6
|
-
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
7
|
-
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; } }
|
|
8
7
|
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
8
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
10
9
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -175,20 +174,12 @@ export default function layers() {
|
|
|
175
174
|
// Compress layers if possible
|
|
176
175
|
_newLayers2 = LayerUtils.implodeLayers(LayerUtils.explodeLayers(_newLayers2));
|
|
177
176
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
182
|
-
var lyr = _step.value;
|
|
183
|
-
if (lyr.type === "wms") {
|
|
184
|
-
Object.assign(lyr, LayerUtils.buildWMSLayerParams(lyr, state.filter));
|
|
185
|
-
}
|
|
177
|
+
_newLayers2 = _newLayers2.map(function (layer) {
|
|
178
|
+
if (layer.type === "wms") {
|
|
179
|
+
return _objectSpread(_objectSpread({}, layer), LayerUtils.buildWMSLayerParams(layer, state.filter));
|
|
186
180
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
} finally {
|
|
190
|
-
_iterator.f();
|
|
191
|
-
}
|
|
181
|
+
return layer;
|
|
182
|
+
});
|
|
192
183
|
UrlParams.updateParams({
|
|
193
184
|
l: LayerUtils.buildWMSLayerUrlParam(_newLayers2)
|
|
194
185
|
});
|
|
@@ -208,21 +199,12 @@ export default function layers() {
|
|
|
208
199
|
}
|
|
209
200
|
case ADD_LAYER_SEPARATOR:
|
|
210
201
|
{
|
|
211
|
-
var _newLayers3 = LayerUtils.insertSeparator(state.flat, action.title, action.afterLayerId, action.afterSublayerPath)
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
try {
|
|
215
|
-
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
216
|
-
var layer = _step2.value;
|
|
217
|
-
if (layer.type === "wms") {
|
|
218
|
-
Object.assign(layer, LayerUtils.buildWMSLayerParams(layer, state.filter));
|
|
219
|
-
}
|
|
202
|
+
var _newLayers3 = LayerUtils.insertSeparator(state.flat, action.title, action.afterLayerId, action.afterSublayerPath).map(function (layer) {
|
|
203
|
+
if (layer.type === "wms") {
|
|
204
|
+
return _objectSpread(_objectSpread({}, layer), LayerUtils.buildWMSLayerParams(layer, state.filter));
|
|
220
205
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
} finally {
|
|
224
|
-
_iterator2.f();
|
|
225
|
-
}
|
|
206
|
+
return layer;
|
|
207
|
+
});
|
|
226
208
|
UrlParams.updateParams({
|
|
227
209
|
l: LayerUtils.buildWMSLayerUrlParam(_newLayers3)
|
|
228
210
|
});
|
|
@@ -232,30 +214,30 @@ export default function layers() {
|
|
|
232
214
|
}
|
|
233
215
|
case REMOVE_LAYER:
|
|
234
216
|
{
|
|
235
|
-
var
|
|
217
|
+
var layer = state.flat.find(function (l) {
|
|
236
218
|
return l.id === action.layerId;
|
|
237
219
|
});
|
|
238
|
-
if (!
|
|
220
|
+
if (!layer) {
|
|
239
221
|
return state;
|
|
240
222
|
}
|
|
241
223
|
var _newLayers4 = state.flat;
|
|
242
224
|
var _newEditConfigs = state.editConfigs;
|
|
243
|
-
if (
|
|
225
|
+
if (layer.role === LayerRole.BACKGROUND || isEmpty(action.sublayerpath)) {
|
|
244
226
|
var position = state.flat.findIndex(function (l) {
|
|
245
227
|
return l.id === action.layerId;
|
|
246
228
|
});
|
|
247
229
|
_newLayers4 = _toConsumableArray(_newLayers4);
|
|
248
230
|
_newLayers4.splice(position, 1);
|
|
249
|
-
if (position > 0 && position < _newLayers4.length && _newLayers4[position - 1].
|
|
231
|
+
if (position > 0 && position < _newLayers4.length && _newLayers4[position - 1].url && _newLayers4[position - 1].url === _newLayers4[position].url) {
|
|
250
232
|
// Compress layers
|
|
251
233
|
_newLayers4 = LayerUtils.implodeLayers(LayerUtils.explodeLayers(_newLayers4));
|
|
252
234
|
}
|
|
253
|
-
if (_newEditConfigs[
|
|
235
|
+
if (_newEditConfigs[layer.wms_name]) {
|
|
254
236
|
_newEditConfigs = _objectSpread({}, _newEditConfigs);
|
|
255
|
-
delete _newEditConfigs[
|
|
237
|
+
delete _newEditConfigs[layer.wms_name];
|
|
256
238
|
}
|
|
257
239
|
} else {
|
|
258
|
-
_newLayers4 = LayerUtils.removeLayer(state.flat,
|
|
240
|
+
_newLayers4 = LayerUtils.removeLayer(state.flat, layer, action.sublayerpath).map(function (l) {
|
|
259
241
|
if (l.type === "wms") {
|
|
260
242
|
return _objectSpread(_objectSpread({}, l), LayerUtils.buildWMSLayerParams(l, state.filter));
|
|
261
243
|
} else {
|
package/reducers/measurement.js
CHANGED
|
@@ -39,7 +39,8 @@ export default function measurement() {
|
|
|
39
39
|
bearingHeadMarker: state.bearingHeadMarker,
|
|
40
40
|
bearingTailMarker: state.bearingTailMarker,
|
|
41
41
|
lineHeadMarker: state.lineHeadMarker,
|
|
42
|
-
lineTailMarker: state.lineTailMarker
|
|
42
|
+
lineTailMarker: state.lineTailMarker,
|
|
43
|
+
markerScale: state.markerScale
|
|
43
44
|
}, action.data);
|
|
44
45
|
}
|
|
45
46
|
default:
|
|
@@ -126,7 +126,7 @@ if not styleIdentifier:
|
|
|
126
126
|
break
|
|
127
127
|
|
|
128
128
|
# Resource URL
|
|
129
|
-
tileUrl =
|
|
129
|
+
tileUrl = capabilitiesUrl.split("?")[0]
|
|
130
130
|
for resourceURL in targetLayer.getElementsByTagName("ResourceURL"):
|
|
131
131
|
if resourceURL.getAttribute("resourceType") == "tile":
|
|
132
132
|
tileUrl = resourceURL.getAttribute("template")
|
|
@@ -268,11 +268,13 @@
|
|
|
268
268
|
"featurecount": "",
|
|
269
269
|
"layerall": "Всички слоеве",
|
|
270
270
|
"link": "Връзка към",
|
|
271
|
+
"multiview": "",
|
|
271
272
|
"noattributes": "Без атрибути",
|
|
272
273
|
"noresults": "Няма налична информация за избраната точка",
|
|
273
274
|
"querying": "Запитване...",
|
|
274
275
|
"reportfail": "Неуспешно генериране на отчет",
|
|
275
276
|
"results": "",
|
|
277
|
+
"selectforcompare": "",
|
|
276
278
|
"selectreport": "",
|
|
277
279
|
"title": "Информация за функциите"
|
|
278
280
|
},
|
|
@@ -331,6 +333,7 @@
|
|
|
331
333
|
"printlegend": "Легенда за печат",
|
|
332
334
|
"separator": "Сепаратор",
|
|
333
335
|
"separatortooltip": "Добавяне на разделител",
|
|
336
|
+
"togglegroup": "",
|
|
334
337
|
"transparency": "Trasparency",
|
|
335
338
|
"visiblefilter": "Филтриране на невидими слоеве",
|
|
336
339
|
"zoomtolayer": "Увеличаване на слоя"
|
|
@@ -446,7 +449,9 @@
|
|
|
446
449
|
"ctrlclickhint": "Отваряне с Ctrl+Click"
|
|
447
450
|
},
|
|
448
451
|
"navbar": {
|
|
449
|
-
"
|
|
452
|
+
"next": "",
|
|
453
|
+
"perpage": "на страница",
|
|
454
|
+
"prev": ""
|
|
450
455
|
},
|
|
451
456
|
"newspopup": {
|
|
452
457
|
"dialogclose": "Затвори",
|
|
@@ -268,11 +268,13 @@
|
|
|
268
268
|
"featurecount": "{0} element(s)",
|
|
269
269
|
"layerall": "Totes les capes",
|
|
270
270
|
"link": "Link",
|
|
271
|
+
"multiview": "",
|
|
271
272
|
"noattributes": "Sense atributs",
|
|
272
273
|
"noresults": "Sense informació disponible sobre el punt seleccionat",
|
|
273
274
|
"querying": "Consultant...",
|
|
274
275
|
"reportfail": "No s'ha pogut generar l'informe",
|
|
275
276
|
"results": "Resultats",
|
|
277
|
+
"selectforcompare": "",
|
|
276
278
|
"selectreport": "Seleccionar informe...",
|
|
277
279
|
"title": "Informació del element"
|
|
278
280
|
},
|
|
@@ -331,6 +333,7 @@
|
|
|
331
333
|
"printlegend": "Imprimir llegenda",
|
|
332
334
|
"separator": "Separador",
|
|
333
335
|
"separatortooltip": "Afegir separador",
|
|
336
|
+
"togglegroup": "",
|
|
334
337
|
"transparency": "Transparència",
|
|
335
338
|
"visiblefilter": "Filtrar capes no visibles",
|
|
336
339
|
"zoomtolayer": "Zoom a la capa"
|
|
@@ -446,7 +449,9 @@
|
|
|
446
449
|
"ctrlclickhint": "Obrir amb Ctrl+Click"
|
|
447
450
|
},
|
|
448
451
|
"navbar": {
|
|
449
|
-
"
|
|
452
|
+
"next": "",
|
|
453
|
+
"perpage": "per pàgina",
|
|
454
|
+
"prev": ""
|
|
450
455
|
},
|
|
451
456
|
"newspopup": {
|
|
452
457
|
"dialogclose": "Tancar",
|
|
@@ -268,11 +268,13 @@
|
|
|
268
268
|
"featurecount": "",
|
|
269
269
|
"layerall": "",
|
|
270
270
|
"link": "Odkaz",
|
|
271
|
+
"multiview": "",
|
|
271
272
|
"noattributes": "Bez atributů",
|
|
272
273
|
"noresults": "V tomto bodu nejsou k dispozici informace o žádném prvku",
|
|
273
274
|
"querying": "Dotazování...",
|
|
274
275
|
"reportfail": "",
|
|
275
276
|
"results": "",
|
|
277
|
+
"selectforcompare": "",
|
|
276
278
|
"selectreport": "",
|
|
277
279
|
"title": "Informace o prvku"
|
|
278
280
|
},
|
|
@@ -331,6 +333,7 @@
|
|
|
331
333
|
"printlegend": "Tisk legendy",
|
|
332
334
|
"separator": "",
|
|
333
335
|
"separatortooltip": "",
|
|
336
|
+
"togglegroup": "",
|
|
334
337
|
"transparency": "Průhlednost",
|
|
335
338
|
"visiblefilter": "Skrýt nezobrazující se vrstvy",
|
|
336
339
|
"zoomtolayer": "Vycentrovat na vrstvu"
|
|
@@ -446,7 +449,9 @@
|
|
|
446
449
|
"ctrlclickhint": ""
|
|
447
450
|
},
|
|
448
451
|
"navbar": {
|
|
449
|
-
"
|
|
452
|
+
"next": "",
|
|
453
|
+
"perpage": "na stránku",
|
|
454
|
+
"prev": ""
|
|
450
455
|
},
|
|
451
456
|
"newspopup": {
|
|
452
457
|
"dialogclose": "Zavřít",
|