qwc2 2025.12.15 → 2025.12.18
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/AttributeForm.js +8 -8
- package/components/AttributeTableWidget.js +3 -3
- package/components/EditComboField.js +1 -1
- package/components/EditUploadField.js +1 -1
- package/components/IdentifyViewer.js +91 -38
- package/components/LinkFeatureForm.js +21 -4
- package/components/MeasureSwitcher.js +115 -0
- package/components/PluginsContainer.js +3 -2
- package/components/QtDesignerForm.js +2 -2
- package/components/ResizeableWindow.js +9 -1
- package/components/SearchBox.js +19 -12
- package/components/SideBar.js +4 -0
- package/components/map3d/drawtool/EditTool3D.js +1 -1
- package/components/style/IdentifyViewer.css +8 -6
- package/components/style/LocationRecorder.css +1 -6
- package/components/style/PluginsContainer.css +11 -6
- package/components/timeline/FixedTimeline.js +2 -2
- package/components/timeline/InfiniteTimeline.js +2 -2
- package/components/timeline/TimelineFeaturesSlider.js +1 -1
- package/components/widgets/EditableSelect.js +2 -1
- package/components/widgets/LayerCatalogWidget.js +26 -15
- 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/Editing.js +20 -5
- package/plugins/FeatureForm.js +1 -1
- package/plugins/FeatureSearch.js +3 -3
- package/plugins/GeometryDigitizer.js +32 -18
- package/plugins/HeightProfile.js +4 -1
- package/plugins/Identify.js +5 -4
- package/plugins/LayerTree.js +5 -1
- package/plugins/MapExport.js +4 -4
- package/plugins/MapFilter.js +10 -10
- package/plugins/Measure.js +5 -1
- package/plugins/NewsPopup.js +1 -1
- package/plugins/ObliqueView.js +88 -17
- package/plugins/Print.js +8 -8
- package/plugins/Redlining.js +25 -73
- package/plugins/Reports.js +3 -3
- package/plugins/Routing.js +4 -4
- package/plugins/TopBar.js +2 -0
- package/plugins/ValueTool.js +1 -1
- package/plugins/View3D.js +2 -2
- package/plugins/ZoomButtons.js +1 -1
- package/plugins/map/EditingSupport.js +50 -20
- package/plugins/map/MeasurementSupport.js +1 -0
- package/plugins/map/RedliningSupport.js +9 -7
- package/plugins/map/SnapSupport.js +12 -10
- package/plugins/map/style/SnappingSupport.css +1 -8
- package/plugins/map3d/Draw3D.js +2 -2
- package/plugins/map3d/ExportObjects3D.js +2 -2
- package/plugins/map3d/MapExport3D.js +4 -4
- package/reducers/editing.js +6 -1
- 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 +45 -75
- package/static/translations/ca-ES.json +45 -75
- package/static/translations/cs-CZ.json +45 -75
- package/static/translations/de-CH.json +45 -75
- package/static/translations/de-DE.json +45 -75
- package/static/translations/en-US.json +45 -75
- package/static/translations/es-ES.json +45 -75
- package/static/translations/fi-FI.json +45 -75
- package/static/translations/fr-FR.json +46 -76
- package/static/translations/hu-HU.json +45 -75
- package/static/translations/it-IT.json +45 -75
- package/static/translations/ja-JP.json +45 -75
- package/static/translations/nl-NL.json +45 -75
- package/static/translations/no-NO.json +45 -75
- package/static/translations/pl-PL.json +45 -75
- package/static/translations/pt-BR.json +45 -75
- package/static/translations/pt-PT.json +45 -75
- package/static/translations/ro-RO.json +45 -75
- package/static/translations/ru-RU.json +45 -75
- package/static/translations/sv-SE.json +45 -75
- package/static/translations/tr-TR.json +45 -75
- package/static/translations/tsconfig.json +35 -67
- package/static/translations/uk-UA.json +45 -75
- package/utils/FeatureStyles.js +18 -20
- package/utils/IdentifyUtils.js +14 -11
- package/utils/MiscUtils.js +2 -1
- package/utils/SearchProviders.js +1 -1
- package/utils/VectorLayerUtils.js +4 -2
package/utils/FeatureStyles.js
CHANGED
|
@@ -174,6 +174,7 @@ var defaultStyle = function defaultStyle(feature, options) {
|
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
if (feature.getGeometry().getType() === "LineString" && opts.headmarker in END_MARKERS) {
|
|
177
|
+
var _opts$markerscale;
|
|
177
178
|
var _p = feature.getGeometry().getCoordinates()[0];
|
|
178
179
|
var _p2 = feature.getGeometry().getCoordinates()[1];
|
|
179
180
|
var rotation = 0.5 * Math.PI + Math.atan2(_p[0] - _p2[0], _p[1] - _p2[1]);
|
|
@@ -184,11 +185,12 @@ var defaultStyle = function defaultStyle(feature, options) {
|
|
|
184
185
|
anchorYUnits: 'fraction',
|
|
185
186
|
color: opts.strokeColor,
|
|
186
187
|
rotation: END_MARKERS[opts.headmarker].baserotation / 180 * Math.PI + rotation,
|
|
187
|
-
scale: 0.125 * (1 + opts.strokeWidth) // Also update in VectorLayerUtils.generateMarkerGeometry
|
|
188
|
+
scale: 0.125 * (1 + opts.strokeWidth) * ((_opts$markerscale = opts.markerscale) !== null && _opts$markerscale !== void 0 ? _opts$markerscale : 1) // Also update in VectorLayerUtils.generateMarkerGeometry
|
|
188
189
|
}))
|
|
189
190
|
}));
|
|
190
191
|
}
|
|
191
192
|
if (feature.getGeometry().getType() === "LineString" && opts.tailmarker in END_MARKERS) {
|
|
193
|
+
var _opts$markerscale2;
|
|
192
194
|
var l = feature.getGeometry().getCoordinates().length;
|
|
193
195
|
var _p3 = feature.getGeometry().getCoordinates()[l - 1];
|
|
194
196
|
var _p4 = feature.getGeometry().getCoordinates()[l - 2];
|
|
@@ -200,7 +202,7 @@ var defaultStyle = function defaultStyle(feature, options) {
|
|
|
200
202
|
anchorYUnits: 'fraction',
|
|
201
203
|
color: opts.strokeColor,
|
|
202
204
|
rotation: END_MARKERS[opts.tailmarker].baserotation / 180 * Math.PI + _rotation,
|
|
203
|
-
scale: 0.125 * (1 + opts.strokeWidth) // Also update in VectorLayerUtils.generateMarkerGeometry
|
|
205
|
+
scale: 0.125 * (1 + opts.strokeWidth) * ((_opts$markerscale2 = opts.markerscale) !== null && _opts$markerscale2 !== void 0 ? _opts$markerscale2 : 1) // Also update in VectorLayerUtils.generateMarkerGeometry
|
|
204
206
|
}))
|
|
205
207
|
}));
|
|
206
208
|
}
|
|
@@ -235,25 +237,20 @@ export default {
|
|
|
235
237
|
})
|
|
236
238
|
})];
|
|
237
239
|
},
|
|
238
|
-
interaction: function interaction(options, isSnap) {
|
|
240
|
+
interaction: function interaction(feature, options, isSnap) {
|
|
239
241
|
var opts = _objectSpread(_objectSpread(_objectSpread({}, DEFAULT_INTERACTION_STYLE), ConfigUtils.getConfigProp("defaultInteractionStyle")), options);
|
|
240
|
-
var
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
strokeColor
|
|
246
|
-
strokeWidth
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
stroke: new ol.style.Stroke({
|
|
253
|
-
color: strokeColor,
|
|
254
|
-
width: strokeWidth
|
|
255
|
-
})
|
|
256
|
-
});
|
|
242
|
+
var styleOptions = isSnap ? {
|
|
243
|
+
strokeColor: opts.snapStrokeColor,
|
|
244
|
+
strokeWidth: opts.snapStrokeWidth,
|
|
245
|
+
fillColor: opts.snapFillColor
|
|
246
|
+
} : {
|
|
247
|
+
strokeColor: opts.strokeColor,
|
|
248
|
+
strokeWidth: opts.strokeWidth,
|
|
249
|
+
fillColor: opts.fillColor
|
|
250
|
+
};
|
|
251
|
+
styleOptions.strokeDash = [];
|
|
252
|
+
styleOptions.circleRadius = 0;
|
|
253
|
+
return defaultStyle(feature, styleOptions);
|
|
257
254
|
},
|
|
258
255
|
interactionVertex: function interactionVertex(options, isSnap) {
|
|
259
256
|
var opts = _objectSpread(_objectSpread(_objectSpread({}, DEFAULT_INTERACTION_STYLE), ConfigUtils.getConfigProp("defaultInteractionStyle")), options);
|
|
@@ -295,6 +292,7 @@ export default {
|
|
|
295
292
|
fillColor: opts.measureFillColor,
|
|
296
293
|
headmarker: opts.headmarker,
|
|
297
294
|
tailmarker: opts.tailmarker,
|
|
295
|
+
markerscale: opts.markerscale,
|
|
298
296
|
strokeDash: []
|
|
299
297
|
};
|
|
300
298
|
return defaultStyle(feature, styleOptions);
|
package/utils/IdentifyUtils.js
CHANGED
|
@@ -27,6 +27,8 @@ import CoordinatesUtils from '../utils/CoordinatesUtils';
|
|
|
27
27
|
import LayerUtils from '../utils/LayerUtils';
|
|
28
28
|
import MapUtils from '../utils/MapUtils';
|
|
29
29
|
import VectorLayerUtils from './VectorLayerUtils';
|
|
30
|
+
export var EXCLUDE_PROPS = ['featurereport', 'displayfield', 'layername', 'layertitle', 'layerinfo', 'attribnames', 'clickPos', 'displayname', 'bbox'];
|
|
31
|
+
export var EXCLUDE_ATTRS = ['htmlContent', 'htmlContentInline'];
|
|
30
32
|
function identifyRequestParams(layer, queryLayers, projection, params) {
|
|
31
33
|
var _layer$format;
|
|
32
34
|
var format = 'text/plain';
|
|
@@ -184,14 +186,14 @@ var IdentifyUtils = {
|
|
|
184
186
|
});
|
|
185
187
|
}
|
|
186
188
|
},
|
|
187
|
-
parseResponse: function parseResponse(response, layer, format, clickPoint, projection
|
|
189
|
+
parseResponse: function parseResponse(response, layer, format, clickPoint, projection) {
|
|
188
190
|
var decimals = CoordinatesUtils.getPrecision(projection);
|
|
189
191
|
var posstr = clickPoint ? clickPoint[0].toFixed(decimals) + ", " + clickPoint[1].toFixed(decimals) : "";
|
|
190
192
|
var results = {};
|
|
191
193
|
if (["application/json", "application/geojson", "application/geo+json", "GeoJSON"].includes(format)) {
|
|
192
194
|
results = IdentifyUtils.parseGeoJSONResponse(response, projection, layer);
|
|
193
195
|
} else if (format === "text/xml") {
|
|
194
|
-
results = IdentifyUtils.parseXmlResponse(response, projection, layer, posstr
|
|
196
|
+
results = IdentifyUtils.parseXmlResponse(response, projection, layer, posstr);
|
|
195
197
|
} else if (format === "application/vnd.ogc.gml") {
|
|
196
198
|
results = IdentifyUtils.parseGmlResponse(response, projection, layer, posstr);
|
|
197
199
|
} else if (format.startsWith("text/xml;subtype=gml/3.1") || format.startsWith("text/xml;subtype=gml/3.0")) {
|
|
@@ -310,8 +312,6 @@ var IdentifyUtils = {
|
|
|
310
312
|
_doc$firstChild$getEl,
|
|
311
313
|
_this = this;
|
|
312
314
|
var posstr = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
|
313
|
-
var featureInfoReturnsLayerName = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
314
|
-
var mapLayers = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;
|
|
315
315
|
var parser = new DOMParser();
|
|
316
316
|
var doc = parser.parseFromString(response, "text/xml");
|
|
317
317
|
var layersEl = [].slice.call(((_doc$firstChild = doc.firstChild) === null || _doc$firstChild === void 0 || (_doc$firstChild$getEl = _doc$firstChild.getElementsByTagName) === null || _doc$firstChild$getEl === void 0 ? void 0 : _doc$firstChild$getEl.call(_doc$firstChild, "Layer")) || []);
|
|
@@ -326,18 +326,21 @@ var IdentifyUtils = {
|
|
|
326
326
|
var displayfield = layerEl.attributes.displayfield ? layerEl.attributes.displayfield.value : null;
|
|
327
327
|
var layername = "";
|
|
328
328
|
var layertitle = "";
|
|
329
|
-
if (layerEl.attributes.
|
|
329
|
+
if (layerEl.attributes.title) {
|
|
330
330
|
var _layer$translations$l, _layer$translations;
|
|
331
|
+
// QGIS Server 3.36+ / qwc-feature-info-service 2025.12.18+
|
|
332
|
+
layername = layerEl.attributes.name.value;
|
|
333
|
+
layertitle = (_layer$translations$l = (_layer$translations = layer.translations) === null || _layer$translations === void 0 || (_layer$translations = _layer$translations.layertree) === null || _layer$translations === void 0 ? void 0 : _layer$translations[layername]) !== null && _layer$translations$l !== void 0 ? _layer$translations$l : layerEl.attributes.title.value;
|
|
334
|
+
} else if (layerEl.attributes.layername) {
|
|
335
|
+
var _layer$translations$l2, _layer$translations2;
|
|
336
|
+
// qwc-feature-info-service < 2025.12.18
|
|
331
337
|
layername = layerEl.attributes.layername.value;
|
|
332
|
-
layertitle = (_layer$translations$
|
|
333
|
-
} else
|
|
338
|
+
layertitle = (_layer$translations$l2 = (_layer$translations2 = layer.translations) === null || _layer$translations2 === void 0 || (_layer$translations2 = _layer$translations2.layertree) === null || _layer$translations2 === void 0 ? void 0 : _layer$translations2[layername]) !== null && _layer$translations$l2 !== void 0 ? _layer$translations$l2 : layerEl.attributes.name.value;
|
|
339
|
+
} else {
|
|
334
340
|
var _LayerUtils$searchSub, _LayerUtils$searchSub2;
|
|
341
|
+
// QGIS Server < 3.36
|
|
335
342
|
layername = layerEl.attributes.name.value;
|
|
336
343
|
layertitle = (_LayerUtils$searchSub = (_LayerUtils$searchSub2 = LayerUtils.searchSubLayer(layer, 'name', layername)) === null || _LayerUtils$searchSub2 === void 0 ? void 0 : _LayerUtils$searchSub2.title) !== null && _LayerUtils$searchSub !== void 0 ? _LayerUtils$searchSub : layername;
|
|
337
|
-
} else {
|
|
338
|
-
var _LayerUtils$searchSub3, _LayerUtils$searchSub4;
|
|
339
|
-
layertitle = layerEl.attributes.name.value;
|
|
340
|
-
layername = (_LayerUtils$searchSub3 = (_LayerUtils$searchSub4 = LayerUtils.searchSubLayer(layer, 'title', layertitle)) === null || _LayerUtils$searchSub4 === void 0 ? void 0 : _LayerUtils$searchSub4.name) !== null && _LayerUtils$searchSub3 !== void 0 ? _LayerUtils$searchSub3 : layertitle;
|
|
341
344
|
}
|
|
342
345
|
var layerinfo = layerEl.attributes.layerinfo ? layerEl.attributes.layerinfo.value : null;
|
|
343
346
|
var features = [].slice.call(layerEl.getElementsByTagName("Feature"));
|
package/utils/MiscUtils.js
CHANGED
|
@@ -93,7 +93,8 @@ var MiscUtils = {
|
|
|
93
93
|
},
|
|
94
94
|
checkKeyActivate: function checkKeyActivate(ev) {
|
|
95
95
|
var onEsc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
96
|
-
|
|
96
|
+
var spaceActivate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
97
|
+
if (spaceActivate && ev.code === "Space" || ev.code === "Enter") {
|
|
97
98
|
MiscUtils.killEvent(ev);
|
|
98
99
|
ev.currentTarget.click();
|
|
99
100
|
} else if (ev.code === "Escape" && onEsc) {
|
package/utils/SearchProviders.js
CHANGED
|
@@ -419,7 +419,7 @@ export var FulltextSearch = /*#__PURE__*/function () {
|
|
|
419
419
|
resultCount: placeResultCount,
|
|
420
420
|
type: SearchResultType.PLACE,
|
|
421
421
|
items: data.results.filter(function (entry) {
|
|
422
|
-
return entry.feature;
|
|
422
|
+
return entry.feature && entry.feature.bbox;
|
|
423
423
|
}).map(function (entry) {
|
|
424
424
|
return {
|
|
425
425
|
id: entry.feature.feature_id,
|
|
@@ -95,12 +95,14 @@ var VectorLayerUtils = {
|
|
|
95
95
|
var properties = feature.properties || {};
|
|
96
96
|
var geometry = VectorLayerUtils.reprojectGeometry(feature.geometry, feature.crs || printCrs, printCrs);
|
|
97
97
|
if (feature.geometry.type === "LineString") {
|
|
98
|
+
var _styleOptions$markers;
|
|
99
|
+
var markerScale = (_styleOptions$markers = styleOptions.markerscale) !== null && _styleOptions$markers !== void 0 ? _styleOptions$markers : 1;
|
|
98
100
|
// Generate arrow heads
|
|
99
101
|
if (styleOptions.headmarker) {
|
|
100
|
-
VectorLayerUtils.generateMarkerGeometry(params, styleOptions.headmarker, false, feature, layer, dpi, printScale, printCrs, scaleFactor);
|
|
102
|
+
VectorLayerUtils.generateMarkerGeometry(params, styleOptions.headmarker, false, feature, layer, dpi, printScale, printCrs, scaleFactor * markerScale);
|
|
101
103
|
}
|
|
102
104
|
if (styleOptions.tailmarker) {
|
|
103
|
-
VectorLayerUtils.generateMarkerGeometry(params, styleOptions.tailmarker, true, feature, layer, dpi, printScale, printCrs, scaleFactor);
|
|
105
|
+
VectorLayerUtils.generateMarkerGeometry(params, styleOptions.tailmarker, true, feature, layer, dpi, printScale, printCrs, scaleFactor * markerScale);
|
|
104
106
|
}
|
|
105
107
|
}
|
|
106
108
|
if (feature.geometry.type === "LineString" && !isEmpty(properties.segment_labels)) {
|