qwc2 2025.7.22 → 2025.7.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/actions/theme.js +1 -1
  2. package/components/AppMenu.js +1 -1
  3. package/components/AttributeForm.js +2 -2
  4. package/components/AttributeTableWidget.js +4 -4
  5. package/components/EditComboField.js +4 -4
  6. package/components/ExportSelection.js +7 -0
  7. package/components/QtDesignerForm.js +10 -10
  8. package/components/map3d/Map3D.js +7 -6
  9. package/components/map3d/MapExport3D.js +4 -5
  10. package/components/map3d/Settings3D.js +7 -0
  11. package/components/map3d/TopBar3D.js +1 -1
  12. package/components/map3d/layers/GeoTIFFLayer3D.js +7 -0
  13. package/components/map3d/layers/index.js +1 -1
  14. package/components/map3d/style/Map3D.css +1 -0
  15. package/components/map3d/style/Settings3D.css +11 -0
  16. package/components/style/ExportSelection.css +103 -0
  17. package/components/widgets/Input.js +1 -1
  18. package/package.json +2 -1
  19. package/plugins/MapInfoTooltip.js +1 -1
  20. package/plugins/View3D.js +1 -1
  21. package/reducers/layers.js +1 -2
  22. package/static/translations/bg-BG.json +5 -1
  23. package/static/translations/ca-ES.json +5 -1
  24. package/static/translations/cs-CZ.json +5 -1
  25. package/static/translations/de-CH.json +5 -1
  26. package/static/translations/de-DE.json +5 -1
  27. package/static/translations/en-US.json +5 -1
  28. package/static/translations/es-ES.json +5 -1
  29. package/static/translations/fi-FI.json +5 -1
  30. package/static/translations/fr-FR.json +5 -1
  31. package/static/translations/hu-HU.json +4 -0
  32. package/static/translations/it-IT.json +5 -1
  33. package/static/translations/ja-JP.json +5 -1
  34. package/static/translations/nl-NL.json +5 -1
  35. package/static/translations/no-NO.json +5 -1
  36. package/static/translations/pl-PL.json +5 -1
  37. package/static/translations/pt-BR.json +5 -1
  38. package/static/translations/pt-PT.json +5 -1
  39. package/static/translations/ro-RO.json +5 -1
  40. package/static/translations/ru-RU.json +4 -0
  41. package/static/translations/sv-SE.json +5 -1
  42. package/static/translations/tr-TR.json +5 -1
  43. package/static/translations/tsconfig.json +2 -0
  44. package/utils/EditingInterface.js +4 -8
  45. package/utils/EditingUtils.js +11 -7
  46. package/utils/ElevationInterface.js +1 -1
  47. package/utils/LayerUtils.js +5 -4
  48. package/utils/ServiceLayerUtils.js +1 -1
  49. package/utils/ThemeUtils.js +2 -2
  50. package/utils/expr_grammar/grammar.js +1 -1
  51. package/utils/expr_grammar/grammar.ne +37 -9
  52. package/utils/expr_grammar/test.js +4 -2
  53. package/components/map3d/style/MapExport3D.css +0 -25
@@ -0,0 +1,103 @@
1
+ div.export-selection-container {
2
+ z-index: 2;
3
+ position: absolute;
4
+ left: 0;
5
+ top: 0;
6
+ right: 0;
7
+ bottom: 0;
8
+ pointer-events: none;
9
+ }
10
+
11
+ div.export-selection {
12
+ pointer-events: initial;
13
+ position: absolute;
14
+ box-shadow: rgba(0, 0, 0, 0.5) 0 0 0 30000px;
15
+ white-space: nowrap;
16
+ display: flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ font-size: small;
20
+ user-select: none;
21
+ cursor: grab;
22
+ }
23
+
24
+ div.export-selection-resize-top {
25
+ background-color: #3499cc;
26
+ position: absolute;
27
+ left: 0;
28
+ right: 0;
29
+ top: -4px;
30
+ bottom: 100%;
31
+ cursor: ns-resize;
32
+ }
33
+
34
+ div.export-selection-resize-bottom {
35
+ background-color: #3499cc;
36
+ position: absolute;
37
+ left: 0;
38
+ right: 0;
39
+ top: 100%;
40
+ bottom: -4px;
41
+ cursor: ns-resize;
42
+ }
43
+
44
+ div.export-selection-resize-left {
45
+ background-color: #3499cc;
46
+ position: absolute;
47
+ left: -4px;
48
+ right: 100%;
49
+ top: 0;
50
+ bottom: 0;
51
+ cursor: ew-resize;
52
+ }
53
+
54
+ div.export-selection-resize-right {
55
+ background-color: #3499cc;
56
+ position: absolute;
57
+ left: 100%;
58
+ right: -4px;
59
+ top: 0;
60
+ bottom: 0;
61
+ cursor: ew-resize;
62
+ }
63
+
64
+ div.export-selection-resize-topleft,
65
+ div.export-selection-resize-topright,
66
+ div.export-selection-resize-bottomleft,
67
+ div.export-selection-resize-bottomright {
68
+ position: absolute;
69
+ width: 12px;
70
+ height: 12px;
71
+ background-color: white;
72
+ border: 2px solid #3499cc;
73
+ border-radius: 6px;
74
+ }
75
+
76
+ div.export-selection-resize-topleft {
77
+ left: -8px;
78
+ top: -8px;
79
+ cursor: nwse-resize;
80
+ }
81
+
82
+ div.export-selection-resize-topright {
83
+ right: -8px;
84
+ top: -8px;
85
+ cursor: nesw-resize;
86
+ }
87
+
88
+ div.export-selection-resize-bottomleft {
89
+ left: -8px;
90
+ bottom: -8px;
91
+ cursor: nesw-resize;
92
+ }
93
+
94
+ div.export-selection-resize-bottomright {
95
+ right: -8px;
96
+ bottom: -8px;
97
+ cursor: nwse-resize;
98
+ }
99
+
100
+ span.export-selection-label {
101
+ padding: 0.25em;
102
+ background: rgba(255, 255, 255, 0.5);
103
+ }
@@ -4,4 +4,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
4
4
  *
5
5
  * This source code is licensed under the BSD-style license found in the
6
6
  * LICENSE file in the root directory of this source tree.
7
- */import React from"react";import PropTypes from"prop-types";var Input=/*#__PURE__*/function(_React$Component){function Input(){var _this;_classCallCheck(this,Input);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,Input,[].concat(args));_defineProperty(_this,"state",{value:"",curValue:"",changed:false});_defineProperty(_this,"onChange",function(ev){_this.setState({curValue:ev.target.value,changed:true});if(document.activeElement!==ev.target){_this.setState({value:ev.target.value});_this.props.onChange(ev.target.value)}});_defineProperty(_this,"onBlur",function(){_this.commit()});_defineProperty(_this,"onKeyDown",function(ev){if(ev.key==="Enter"){_this.commit()}});_defineProperty(_this,"commit",function(){if(_this.state.changed){_this.setState(function(state){var newValue=state.curValue===""&&!_this.props.allowEmpty?_this.props.value:state.curValue;return{value:newValue,curValue:newValue,changed:false}},function(){_this.props.onChange(_this.state.value)})}});return _this}_inherits(Input,_React$Component);return _createClass(Input,[{key:"render",value:function render(){return/*#__PURE__*/React.createElement("input",{className:this.props.className,disabled:this.props.disabled,onBlur:this.onBlur,onChange:this.onChange,onKeyDown:this.onKeyDown,readOnly:this.props.readOnly,required:this.props.required,type:this.props.type,value:this.state.curValue})}}],[{key:"getDerivedStateFromProps",value:function getDerivedStateFromProps(nextProps,state){if(state.value!==nextProps.value){return{value:nextProps.value,curValue:nextProps.value||"",changed:false}}return null}}])}(React.Component);_defineProperty(Input,"propTypes",{allowEmpty:PropTypes.bool,className:PropTypes.string,disabled:PropTypes.bool,onChange:PropTypes.func,readOnly:PropTypes.bool,required:PropTypes.bool,type:PropTypes.string,value:PropTypes.string});_defineProperty(Input,"defaultProps",{allowEmpty:true});export{Input as default};
7
+ */import React from"react";import PropTypes from"prop-types";var Input=/*#__PURE__*/function(_React$Component){function Input(){var _this;_classCallCheck(this,Input);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,Input,[].concat(args));_defineProperty(_this,"state",{value:"",curValue:"",changed:false});_defineProperty(_this,"onChange",function(ev){_this.setState({curValue:ev.target.value,changed:true});if(document.activeElement!==ev.target){_this.setState({value:ev.target.value});_this.props.onChange(ev.target.value)}});_defineProperty(_this,"onBlur",function(){_this.commit()});_defineProperty(_this,"onKeyDown",function(ev){if(ev.key==="Enter"){_this.commit()}});_defineProperty(_this,"onMouseUp",function(ev){if(_this.props.type==="range"){_this.commit()}});_defineProperty(_this,"commit",function(){if(_this.state.changed){_this.setState(function(state){var newValue=state.curValue===""&&!_this.props.allowEmpty?_this.props.value:state.curValue;_this.props.onChange(newValue);return{value:newValue,curValue:newValue,changed:false}})}});return _this}_inherits(Input,_React$Component);return _createClass(Input,[{key:"render",value:function render(){return/*#__PURE__*/React.createElement("input",{className:this.props.className,disabled:this.props.disabled,max:this.props.max,min:this.props.min,onBlur:this.onBlur,onChange:this.onChange,onKeyDown:this.onKeyDown,onMouseUp:this.onMouseUp,readOnly:this.props.readOnly,required:this.props.required,step:this.props.step,type:this.props.type,value:this.state.curValue})}}],[{key:"getDerivedStateFromProps",value:function getDerivedStateFromProps(nextProps,state){var strValue=String(nextProps.value||"");if(state.value!==strValue){return{value:strValue,curValue:strValue,changed:false}}return null}}])}(React.Component);_defineProperty(Input,"propTypes",{allowEmpty:PropTypes.bool,className:PropTypes.string,disabled:PropTypes.bool,max:PropTypes.oneOfType([PropTypes.string,PropTypes.number]),min:PropTypes.oneOfType([PropTypes.string,PropTypes.number]),onChange:PropTypes.func,readOnly:PropTypes.bool,required:PropTypes.bool,step:PropTypes.number,type:PropTypes.string,value:PropTypes.oneOfType([PropTypes.string,PropTypes.number])});_defineProperty(Input,"defaultProps",{allowEmpty:true});export{Input as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qwc2",
3
- "version": "2025.07.22",
3
+ "version": "2025.07.29",
4
4
  "description": "QGIS Web Client",
5
5
  "author": "Sourcepole AG",
6
6
  "license": "BSD-2-Clause",
@@ -86,6 +86,7 @@
86
86
  "three": "^0.170.0",
87
87
  "three-csg-ts": "^3.2.0",
88
88
  "three.meshline": "^1.4.0",
89
+ "toposort": "^2.0.2",
89
90
  "url": "^0.11.4",
90
91
  "utif": "^3.1.0",
91
92
  "uuid": "^11.0.3"
@@ -31,4 +31,4 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
31
31
  * render() { return ...; }
32
32
  * };
33
33
  * ```
34
- */var MapInfoTooltip=/*#__PURE__*/function(_React$Component){function MapInfoTooltip(){var _this;_classCallCheck(this,MapInfoTooltip);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,MapInfoTooltip,[].concat(args));_defineProperty(_this,"state",{point:null,elevation:null,extraInfo:null});_defineProperty(_this,"clear",function(){_this.setState({point:null,elevation:null,extraInfo:null})});return _this}_inherits(MapInfoTooltip,_React$Component);return _createClass(MapInfoTooltip,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this2=this;if(!this.props.enabled&&this.state.point){this.clear();return}var newPoint=this.props.map.click;if(!newPoint||newPoint.button!==2){if(this.state.point){this.clear()}}else{var oldPoint=prevProps.map.click;if(!oldPoint||oldPoint.pixel[0]!==newPoint.pixel[0]||oldPoint.pixel[1]!==newPoint.pixel[1]){this.setState({point:newPoint,elevation:null,extraInfo:null});var pos=newPoint.coordinate;var crs=this.props.map.projection;getElevationInterface().getElevation(pos,crs).then(function(elevation){_this2.setState({elevation:elevation})})["catch"](function(){});var mapInfoService=ConfigUtils.getConfigProp("mapInfoService");if(mapInfoService){axios.get(mapInfoService,{params:{pos:pos.join(","),crs:crs}}).then(function(response){_this2.setState({extraInfo:response.data.results})})["catch"](function(){})}}}}},{key:"render",value:function render(){var _this3=this;if(!this.state.point){return null}var info=[];var projections=[this.props.map.displayCrs];if(!projections.includes(this.props.map.projection)){projections.push(this.props.map.projection)}if(this.props.includeWGS84&&!projections.includes("EPSG:4326")){projections.push("EPSG:4326")}projections.map(function(crs){var coo=CoordinatesUtils.reproject(_this3.state.point.coordinate,_this3.props.map.projection,crs);var decimals=CoordinatesUtils.getPrecision(crs);info.push([(CoordinatesUtils.getAvailableCRS()[crs]||{label:crs}).label,coo.map(function(x){return LocaleUtils.toLocaleFixed(x,decimals)}).join(", ")])});if(this.state.elevation){var elevs=this.state.elevation.list;if(!elevs){elevs=[{elevation:this.state.elevation,dataset:null}]}var _iterator=_createForOfIteratorHelper(elevs),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var data=_step.value;info.push([LocaleUtils.tr("mapinfotooltip.elevation")+(data.dataset?" ("+data.dataset+")":""),data.elevation.toFixed(this.props.elevationPrecision)+" m"])}}catch(err){_iterator.e(err)}finally{_iterator.f()}}if(this.state.extraInfo){info.push.apply(info,_toConsumableArray(this.state.extraInfo))}var title=LocaleUtils.tr("mapinfotooltip.title");var pixel=MapUtils.getHook(MapUtils.GET_PIXEL_FROM_COORDINATES_HOOK)(this.state.point.coordinate);var style={left:pixel[0]+"px",top:pixel[1]+"px"};var text=info.map(function(entry){return entry.join(": ")}).join("\n");var routingButtons=null;if(ConfigUtils.havePlugin("Routing")){var prec=CoordinatesUtils.getPrecision(this.props.map.displayCrs);var pos=CoordinatesUtils.reproject(this.state.point.coordinate,this.props.map.projection,this.props.map.displayCrs);var point={text:pos.map(function(x){return x.toFixed(prec)}).join(", ")+" ("+this.props.map.displayCrs+")",pos:_toConsumableArray(pos),crs:this.props.map.displayCrs};routingButtons=/*#__PURE__*/React.createElement("table",{className:"mapinfotooltip-body-routing"},/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("b",null,LocaleUtils.tr("routing.route"),":")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("div",{className:"controlgroup"},/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{from:point})}},LocaleUtils.tr("routing.fromhere")),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{to:point})}},LocaleUtils.tr("routing.tohere")),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{via:point})}},LocaleUtils.tr("routing.addviapoint"))))),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("b",null,LocaleUtils.tr("routing.reachability"),":")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("div",{className:"controlgroup"},/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{isocenter:point})}},LocaleUtils.tr("routing.isocenter")),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{isoextracenter:point})}},LocaleUtils.tr("routing.isoextracenter")))))))}return/*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip",style:style},/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip-window"},/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip-titlebar"},/*#__PURE__*/React.createElement("span",{className:"mapinfotooltip-title"},title),/*#__PURE__*/React.createElement(CopyButton,{buttonClass:"mapinfotooltip-button",text:text}),/*#__PURE__*/React.createElement(Icon,{className:"mapinfotooltip-button",icon:"remove",onClick:this.clear})),/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip-body"},/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,info.map(function(entry,index){return/*#__PURE__*/React.createElement("tr",{key:"row"+index},/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("b",null,entry[0],":")),/*#__PURE__*/React.createElement("td",null,entry[1]))}))),routingButtons,this.props.plugins.map(function(Plugin,idx){return/*#__PURE__*/React.createElement(Plugin,{closePopup:_this3.clear,key:idx,point:_this3.state.point,projection:_this3.props.map.projection})})))),this.context)}}])}(React.Component);_defineProperty(MapInfoTooltip,"contextType",MapContainerPortalContext);_defineProperty(MapInfoTooltip,"propTypes",{/** The number of decimal places to display for elevation values. */elevationPrecision:PropTypes.number,enabled:PropTypes.bool,includeWGS84:PropTypes.bool,map:PropTypes.object,/** Additional plugin components for the map info tooltip. */plugins:PropTypes.array,setCurrentTask:PropTypes.func});_defineProperty(MapInfoTooltip,"defaultProps",{elevationPrecision:0,includeWGS84:true,plugins:[]});export default(function(plugins){return connect(function(state){return{enabled:state.task.identifyEnabled,map:state.map,plugins:plugins}},{setCurrentTask:setCurrentTask})(MapInfoTooltip)});
34
+ */var MapInfoTooltip=/*#__PURE__*/function(_React$Component){function MapInfoTooltip(){var _this;_classCallCheck(this,MapInfoTooltip);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,MapInfoTooltip,[].concat(args));_defineProperty(_this,"state",{point:null,elevation:null,extraInfo:null});_defineProperty(_this,"clear",function(){_this.setState({point:null,elevation:null,extraInfo:null})});return _this}_inherits(MapInfoTooltip,_React$Component);return _createClass(MapInfoTooltip,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this2=this;if(!this.props.enabled&&this.state.point){this.clear();return}var newPoint=this.props.map.click;if(!newPoint||newPoint.button!==2){if(this.state.point){this.clear()}}else{var oldPoint=prevProps.map.click;if(!oldPoint||oldPoint.pixel[0]!==newPoint.pixel[0]||oldPoint.pixel[1]!==newPoint.pixel[1]){this.setState({point:newPoint,elevation:null,extraInfo:null});var pos=newPoint.coordinate;var crs=this.props.map.projection;getElevationInterface().getElevation(pos,crs).then(function(elevation){_this2.setState({elevation:elevation})})["catch"](function(){});var mapInfoService=ConfigUtils.getConfigProp("mapInfoService");if(mapInfoService){axios.get(mapInfoService,{params:{pos:pos.join(","),crs:crs}}).then(function(response){_this2.setState({extraInfo:response.data.results})})["catch"](function(){})}}}}},{key:"render",value:function render(){var _this3=this;if(!this.state.point){return null}var info=[];var projections=[this.props.map.displayCrs];if(!projections.includes(this.props.map.projection)){projections.push(this.props.map.projection)}if(this.props.includeWGS84&&!projections.includes("EPSG:4326")){projections.push("EPSG:4326")}projections.map(function(crs){var coo=CoordinatesUtils.reproject(_this3.state.point.coordinate,_this3.props.map.projection,crs);var decimals=CoordinatesUtils.getPrecision(crs);info.push([(CoordinatesUtils.getAvailableCRS()[crs]||{label:crs}).label,coo.map(function(x){return LocaleUtils.toLocaleFixed(x,decimals)}).join(", ")])});if(this.state.elevation!==undefined&&this.state.elevation!==null){var elevs=this.state.elevation.list;if(!elevs){elevs=[{elevation:this.state.elevation,dataset:null}]}var _iterator=_createForOfIteratorHelper(elevs),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var data=_step.value;info.push([LocaleUtils.tr("mapinfotooltip.elevation")+(data.dataset?" ("+data.dataset+")":""),data.elevation.toFixed(this.props.elevationPrecision)+" m"])}}catch(err){_iterator.e(err)}finally{_iterator.f()}}if(this.state.extraInfo){info.push.apply(info,_toConsumableArray(this.state.extraInfo))}var title=LocaleUtils.tr("mapinfotooltip.title");var pixel=MapUtils.getHook(MapUtils.GET_PIXEL_FROM_COORDINATES_HOOK)(this.state.point.coordinate);var style={left:pixel[0]+"px",top:pixel[1]+"px"};var text=info.map(function(entry){return entry.join(": ")}).join("\n");var routingButtons=null;if(ConfigUtils.havePlugin("Routing")){var prec=CoordinatesUtils.getPrecision(this.props.map.displayCrs);var pos=CoordinatesUtils.reproject(this.state.point.coordinate,this.props.map.projection,this.props.map.displayCrs);var point={text:pos.map(function(x){return x.toFixed(prec)}).join(", ")+" ("+this.props.map.displayCrs+")",pos:_toConsumableArray(pos),crs:this.props.map.displayCrs};routingButtons=/*#__PURE__*/React.createElement("table",{className:"mapinfotooltip-body-routing"},/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("b",null,LocaleUtils.tr("routing.route"),":")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("div",{className:"controlgroup"},/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{from:point})}},LocaleUtils.tr("routing.fromhere")),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{to:point})}},LocaleUtils.tr("routing.tohere")),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{via:point})}},LocaleUtils.tr("routing.addviapoint"))))),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("b",null,LocaleUtils.tr("routing.reachability"),":")),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("div",{className:"controlgroup"},/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{isocenter:point})}},LocaleUtils.tr("routing.isocenter")),/*#__PURE__*/React.createElement("button",{className:"button",onClick:function onClick(){return _this3.props.setCurrentTask("Routing",null,null,{isoextracenter:point})}},LocaleUtils.tr("routing.isoextracenter")))))))}return/*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip",style:style},/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip-window"},/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip-titlebar"},/*#__PURE__*/React.createElement("span",{className:"mapinfotooltip-title"},title),/*#__PURE__*/React.createElement(CopyButton,{buttonClass:"mapinfotooltip-button",text:text}),/*#__PURE__*/React.createElement(Icon,{className:"mapinfotooltip-button",icon:"remove",onClick:this.clear})),/*#__PURE__*/React.createElement("div",{className:"mapinfotooltip-body"},/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,info.map(function(entry,index){return/*#__PURE__*/React.createElement("tr",{key:"row"+index},/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("b",null,entry[0],":")),/*#__PURE__*/React.createElement("td",null,entry[1]))}))),routingButtons,this.props.plugins.map(function(Plugin,idx){return/*#__PURE__*/React.createElement(Plugin,{closePopup:_this3.clear,key:idx,point:_this3.state.point,projection:_this3.props.map.projection})})))),this.context)}}])}(React.Component);_defineProperty(MapInfoTooltip,"contextType",MapContainerPortalContext);_defineProperty(MapInfoTooltip,"propTypes",{/** The number of decimal places to display for elevation values. */elevationPrecision:PropTypes.number,enabled:PropTypes.bool,includeWGS84:PropTypes.bool,map:PropTypes.object,/** Additional plugin components for the map info tooltip. */plugins:PropTypes.array,setCurrentTask:PropTypes.func});_defineProperty(MapInfoTooltip,"defaultProps",{elevationPrecision:0,includeWGS84:true,plugins:[]});export default(function(plugins){return connect(function(state){return{enabled:state.task.identifyEnabled,map:state.map,plugins:plugins}},{setCurrentTask:setCurrentTask})(MapInfoTooltip)});
package/plugins/View3D.js CHANGED
@@ -95,7 +95,7 @@ if(_this.state.viewsLocked&&_this.focusedMap==="map3d"){var rotation=undefined;i
95
95
  var _ReducerIndex$reducer=ReducerIndex.reducers,processNotifications=_ReducerIndex$reducer.processNotifications,task=_ReducerIndex$reducer.task,windows=_ReducerIndex$reducer.windows;// Reducer for syncronization with parent store
96
96
  var forwardReducer=function forwardReducer(key,forwardActions,syncAction){return function(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var action=arguments.length>1?arguments[1]:undefined;if(forwardActions.includes(action.type)){// Forward to parent store
97
97
  StandardApp.store.dispatch(action);return state}else{return action.type===syncAction?action[key]:state}}};var displayActions=Object.values(displayExports).filter(function(x){return typeof x==="string"});var layersActions=Object.values(layersExports).filter(function(x){return typeof x==="string"});var mapActions=Object.values(mapExports).filter(function(x){return typeof x==="string"});var themeActions=Object.values(themeExports).filter(function(x){return typeof x==="string"});var display=forwardReducer("display",displayActions,"SYNC_DISPLAY_FROM_PARENT_STORE");var layers=forwardReducer("layers",layersActions,"SYNC_LAYERS_FROM_PARENT_STORE");var map=forwardReducer("map",mapActions,"SYNC_MAP_FROM_PARENT_STORE");var localConfig=forwardReducer("localConfig",[],"SYNC_LOCAL_CONFIG_FROM_PARENT_STORE");var theme=forwardReducer("theme",themeActions,"SYNC_THEME_FROM_PARENT_STORE");_this.store=createStore({display:display,layers:layers,localConfig:localConfig,map:map,processNotifications:processNotifications,theme:theme,task:task,windows:windows});// Set stored state
98
- var storedState=_objectSpread({},props.startupState.map3d);if(props.startupParams.v3d){var values=props.startupParams.v3d.split(",").map(parseFloat).filter(function(x){return!isNaN(x)});if(values.length>=6){var _values$;storedState.camera=[values[0],values[1],values[2]];storedState.target=[values[3],values[4],values[5]];storedState.personHeight=(_values$=values[6])!==null&&_values$!==void 0?_values$:0}}if(props.startupParams.bl3d!==undefined){storedState.baselayer=props.startupParams.bl3d}_this.state.storedState=storedState;return _this}_inherits(View3D,_React$Component);return _createClass(View3D,[{key:"componentDidMount",value:function componentDidMount(){if(this.props.startupParams.v==="3d"){this.props.setView3dMode(View3DMode.FULLSCREEN)}else if(this.props.startupParams.v==="3d2d"){this.props.setView3dMode(View3DMode.SPLITSCREEN)}window.addEventListener("focus",this.trackFocus,true)}},{key:"componentWillUnmount",value:function componentWillUnmount(){window.removeEventListener("focus",this.trackFocus)}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){var _this2=this,_this$props$theme$cur;if(this.props.view3dMode!==View3DMode.DISABLED&&prevProps.view3dMode===View3DMode.DISABLED){import("../components/map3d/Map3D").then(function(component){_this2.map3dComponent=component["default"];_this2.map3dComponentRef=null;_this2.setState({componentLoaded:true})})}else if(this.props.view3dMode===View3DMode.DISABLING&&prevProps.view3dMode!==View3DMode.DISABLING){this.map3dComponentRef.store3dState().then(function(storedState){_this2.setState({storedState:storedState});UrlParams.updateParams({v3d:undefined,bl3d:undefined});_this2.props.setView3dMode(View3DMode.DISABLED)})}else if(this.props.view3dMode===View3DMode.DISABLED&&prevProps.view3dMode!==View3DMode.DISABLED){this.map3dComponent=null;this.map3dComponentRef=null;this.setState({componentLoaded:false});if(this.firstPersonMarker){this.props.removeLayer("view3d-firstperson-marker");this.firstPersonMarker=false}}// Sync parts of parent store
98
+ var storedState=_objectSpread({},props.startupState.map3d);if(props.startupParams.v3d){var values=props.startupParams.v3d.split(",").map(parseFloat).filter(function(x){return!isNaN(x)});if(values.length>=6){var _values$;storedState.camera=[values[0],values[1],values[2]];storedState.target=[values[3],values[4],values[5]];storedState.personHeight=(_values$=values[6])!==null&&_values$!==void 0?_values$:0}}if(props.startupParams.bl3d!==undefined){storedState.baseLayer=props.startupParams.bl3d}_this.state.storedState=storedState;return _this}_inherits(View3D,_React$Component);return _createClass(View3D,[{key:"componentDidMount",value:function componentDidMount(){if(this.props.startupParams.v==="3d"){this.props.setView3dMode(View3DMode.FULLSCREEN)}else if(this.props.startupParams.v==="3d2d"){this.props.setView3dMode(View3DMode.SPLITSCREEN)}window.addEventListener("focus",this.trackFocus,true)}},{key:"componentWillUnmount",value:function componentWillUnmount(){window.removeEventListener("focus",this.trackFocus)}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){var _this2=this,_this$props$theme$cur;if(this.props.view3dMode!==View3DMode.DISABLED&&prevProps.view3dMode===View3DMode.DISABLED){import("../components/map3d/Map3D").then(function(component){_this2.map3dComponent=component["default"];_this2.map3dComponentRef=null;_this2.setState({componentLoaded:true})})}else if(this.props.view3dMode===View3DMode.DISABLING&&prevProps.view3dMode!==View3DMode.DISABLING){this.map3dComponentRef.store3dState().then(function(storedState){_this2.setState({storedState:storedState});UrlParams.updateParams({v3d:undefined,bl3d:undefined});_this2.props.setView3dMode(View3DMode.DISABLED)})}else if(this.props.view3dMode===View3DMode.DISABLED&&prevProps.view3dMode!==View3DMode.DISABLED){this.map3dComponent=null;this.map3dComponentRef=null;this.setState({componentLoaded:false});if(this.firstPersonMarker){this.props.removeLayer("view3d-firstperson-marker");this.firstPersonMarker=false}}// Sync parts of parent store
99
99
  if(this.props.display!==prevProps.display){this.store.dispatch({type:"SYNC_DISPLAY_FROM_PARENT_STORE",display:this.props.display})}if(this.props.theme!==prevProps.theme){this.store.dispatch({type:"SYNC_THEME_FROM_PARENT_STORE",theme:this.props.theme})}if(this.props.localConfig!==prevProps.localConfig){this.store.dispatch({type:"SYNC_LOCAL_CONFIG_FROM_PARENT_STORE",localConfig:this.props.localConfig})}if(this.props.layers!==prevProps.layers){this.store.dispatch({type:"SYNC_LAYERS_FROM_PARENT_STORE",layers:this.props.layers})}if(this.props.map!==prevProps.map){this.store.dispatch({type:"SYNC_MAP_FROM_PARENT_STORE",map:this.props.map})}if(this.props.view3dMode!==prevProps.view3dMode){if(this.props.view3dMode===View3DMode.FULLSCREEN){UrlParams.updateParams({v:"3d"});this.setState({viewsLocked:false})}else if(this.props.view3dMode===View3DMode.SPLITSCREEN){UrlParams.updateParams({v:"3d2d"})}else{UrlParams.updateParams({v:undefined})}}// Switch to 2D mode if new theme has no 3D configuration
100
100
  if(this.props.theme.current!==prevProps.theme.current&&!((_this$props$theme$cur=this.props.theme.current)!==null&&_this$props$theme$cur!==void 0&&_this$props$theme$cur.map3d)&&this.props.view3dMode!==View3DMode.DISABLED){this.props.setView3dMode(View3D.DISABLED)}// Lock views
101
101
  if(this.state.viewsLocked&&this.props.map.bbox!==prevProps.map.bbox&&this.focusedMap==="map"){this.sync2DExtent()}// Clear stored state when switching away from a theme
@@ -12,5 +12,4 @@ LayerUtils.propagateLayerProperty(newsublayer,action.property,action.newvalue)}i
12
12
  LayerUtils.propagateLayerProperty(newlayer,action.property,action.newvalue,action.sublayerpath)}if(newlayer.type==="wms"){Object.assign(newlayer,LayerUtils.buildWMSLayerParams(newlayer,state.filter))}if(newlayer.role===LayerRole.BACKGROUND){UrlParams.updateParams({bl:newlayer.visibility?newlayer.name:""})}return newlayer}else if(layer.role===LayerRole.BACKGROUND&&backgroundVisibilityChanged){return _objectSpread(_objectSpread({},layer),{},{visibility:false})}return layer});UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(newLayers)});return _objectSpread(_objectSpread({},state),{},{flat:newLayers})}case SET_LAYER_DIMENSIONS:{var _state$flat$find;// Set dimensions for all layers with the same URL (i.e. if a WMS is split)
13
13
  var layerUrl=(_state$flat$find=state.flat.find(function(layer){return layer.id===action.layerId}))===null||_state$flat$find===void 0?void 0:_state$flat$find.url;if(!layerUrl){return""}var _newLayers=(state.flat||[]).map(function(layer){if(layer.url===layerUrl){var newLayer=_objectSpread(_objectSpread({},layer),{},{dimensionValues:action.dimensions});Object.assign(newLayer,LayerUtils.buildWMSLayerParams(newLayer,state.filter));return newLayer}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers})}case ADD_LAYER:{var _action$layer$visibil,_action$layer$opacity,_action$options,_action$options2;var _newLayers2=(state.flat||[]).concat();var layerId=action.layer.id||uuidv4();var newLayer=_objectSpread(_objectSpread({},action.layer),{},{id:layerId,name:action.layer.name||layerId,role:action.layer.role||LayerRole.USERLAYER,queryable:action.layer.queryable||false,visibility:(_action$layer$visibil=action.layer.visibility)!==null&&_action$layer$visibil!==void 0?_action$layer$visibil:true,opacity:(_action$layer$opacity=action.layer.opacity)!==null&&_action$layer$opacity!==void 0?_action$layer$opacity:255,layertreehidden:action.layer.layertreehidden||action.layer.role>LayerRole.USERLAYER});if((_action$options=action.options)!==null&&_action$options!==void 0&&_action$options.beforeLayerName||(_action$options2=action.options)!==null&&_action$options2!==void 0&&_action$options2.afterLayerName){_newLayers2=LayerUtils.insertLayer(_newLayers2,newLayer,"name",action.options.beforeLayerName||action.options.afterLayerName,action.options.afterLayerName?true:false)}else{var inspos=0;if(action.pos===null){for(;inspos<_newLayers2.length&&newLayer.role<_newLayers2[inspos].role;++inspos);}else{inspos=action.pos}_newLayers2.splice(inspos,0,newLayer);// Compress layers if possible
14
14
  _newLayers2=LayerUtils.implodeLayers(LayerUtils.explodeLayers(_newLayers2))}var _iterator=_createForOfIteratorHelper(_newLayers2),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var lyr=_step.value;if(lyr.type==="wms"){Object.assign(lyr,LayerUtils.buildWMSLayerParams(lyr,state.filter))}}}catch(err){_iterator.e(err)}finally{_iterator.f()}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers2)});if(newLayer.role===LayerRole.BACKGROUND&&newLayer.visibility){UrlParams.updateParams({bl:newLayer.name})}return _objectSpread(_objectSpread({},state),{},{flat:_newLayers2})}case ADD_LAYER_SEPARATOR:{var _newLayers3=LayerUtils.insertSeparator(state.flat,action.title,action.afterLayerId,action.afterSublayerPath);var _iterator2=_createForOfIteratorHelper(_newLayers3),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var layer=_step2.value;if(layer.type==="wms"){Object.assign(layer,LayerUtils.buildWMSLayerParams(layer,state.filter))}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers3)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers3})}case REMOVE_LAYER:{var _layer=state.flat.find(function(l){return l.id===action.layerId});if(!_layer){return state}var _newLayers4=state.flat;if(_layer.role===LayerRole.BACKGROUND||isEmpty(action.sublayerpath)){var position=state.flat.findIndex(function(l){return l.id===action.layerId});_newLayers4=_toConsumableArray(_newLayers4);_newLayers4.splice(position,1);if(position>0&&position<_newLayers4.length&&_newLayers4[position-1].id===_newLayers4[position].id){// Compress layers
15
- _newLayers4=LayerUtils.implodeLayers(LayerUtils.explodeLayers(_newLayers4))}}else{_newLayers4=LayerUtils.removeLayer(state.flat,_layer,action.sublayerpath).map(function(l){if(l.type==="wms"){return _objectSpread(_objectSpread({},l),LayerUtils.buildWMSLayerParams(l,state.filter))}else{return l}})}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers4)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers4})}case ADD_LAYER_FEATURES:{var _layerId=action.layer.id||uuidv4();var _newLayers5=(state.flat||[]).concat();var idx=_newLayers5.findIndex(function(layer){return layer.id===_layerId});if(idx===-1){var newFeatures=action.features.map(function(f){return _objectSpread(_objectSpread({},f),{},{id:f.id||(f.properties||{}).id||uuidv4()})});var _newLayer=_objectSpread(_objectSpread({},action.layer),{},{id:_layerId,type:"vector",name:action.layer.name||_layerId,features:newFeatures,role:action.layer.role||LayerRole.USERLAYER,queryable:action.layer.queryable||false,visibility:action.layer.visibility||true,opacity:action.layer.opacity||255,layertreehidden:action.layer.layertreehidden||action.layer.role>LayerRole.USERLAYER,bbox:VectorLayerUtils.computeFeaturesBBox(action.features)});var _inspos=0;for(;_inspos<_newLayers5.length&&_newLayer.role<_newLayers5[_inspos].role;++_inspos);_newLayers5.splice(_inspos,0,_newLayer)}else{var addFeatures=action.features.map(function(f){return _objectSpread(_objectSpread({},f),{},{id:f.id||(f.properties||{}).id||uuidv4()})});var _newFeatures=action.clear?addFeatures:[].concat(_toConsumableArray((_newLayers5[idx].features||[]).filter(function(f){return!addFeatures.find(function(g){return g.id===f.id})})),_toConsumableArray(addFeatures));_newLayers5[idx]=_objectSpread(_objectSpread({},_newLayers5[idx]),{},{features:_newFeatures,bbox:VectorLayerUtils.computeFeaturesBBox(_newFeatures),rev:action.layer.rev})}return _objectSpread(_objectSpread({},state),{},{flat:_newLayers5})}case REMOVE_LAYER_FEATURES:{var changed=false;var _newLayers6=(state.flat||[]).reduce(function(result,layer){if(layer.id===action.layerId){var _newFeatures2=(layer.features||[]).filter(function(f){return action.featureIds.includes(f.id)===false});if(!isEmpty(_newFeatures2)||action.keepEmptyLayer){result.push(_objectSpread(_objectSpread({},layer),{},{features:_newFeatures2,bbox:VectorLayerUtils.computeFeaturesBBox(_newFeatures2)}))}changed=true}else{result.push(layer)}return result},[]);if(changed){return _objectSpread(_objectSpread({},state),{},{flat:_newLayers6})}else{return state}}case CLEAR_LAYER:{var _newLayers7=(state.flat||[]).map(function(layer){if(layer.id===action.layerId){return _objectSpread(_objectSpread({},layer),{},{features:[],bbox:null})}else{return layer}});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers7})}case ADD_THEME_SUBLAYER:{var themeLayerIdx=state.flat.findIndex(function(layer){return layer.role===LayerRole.THEME});if(themeLayerIdx>=0){var _newLayers8=state.flat.slice(0);_newLayers8[themeLayerIdx]=LayerUtils.mergeSubLayers(state.flat[themeLayerIdx],action.layer);_newLayers8[themeLayerIdx].visibility=true;Object.assign(_newLayers8[themeLayerIdx],LayerUtils.buildWMSLayerParams(_newLayers8[themeLayerIdx],state.filter));UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers8)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers8})}return state}case REFRESH_LAYER:{var _newLayers9=(state.flat||[]).map(function(layer){if(action.filter(layer)){return _objectSpread(_objectSpread({},layer),{},{rev:+new Date})}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers9})}case REMOVE_ALL_LAYERS:{return defaultState}case REORDER_LAYER:{var _newLayers10=LayerUtils.reorderLayer(state.flat,action.layer,action.sublayerpath,action.direction,action.preventSplittingGroups).map(function(layer){if(layer.type==="wms"){return _objectSpread(_objectSpread({},layer),LayerUtils.buildWMSLayerParams(layer,state.filter))}else{return layer}});UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers10)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers10})}case REPLACE_PLACEHOLDER_LAYER:{var _newLayers11=state.flat||[];if(action.layer){_newLayers11=_newLayers11.map(function(layer){if(layer.type==="placeholder"&&layer.id===action.id){var _newLayer2=_objectSpread(_objectSpread(_objectSpread({},layer),action.layer),{},{role:layer.role,id:layer.id});// For background layers, preserve any custom name/title/attribution/opacity
16
- if(layer.role===LayerRole.BACKGROUND){_newLayer2.name=layer.name||action.layer.name;_newLayer2.title=layer.title||action.layer.title;_newLayer2.attribution=layer.attribution||action.layer.attribution;_newLayer2.opacity=layer.opacity||action.layer.opacity}delete _newLayer2.loading;if(_newLayer2.type==="wms"){Object.assign(_newLayer2,LayerUtils.buildWMSLayerParams(_newLayer2,state.filter))}return _newLayer2}else{return layer}})}else{_newLayers11=_newLayers11.filter(function(layer){return!(layer.type==="placeholder"&&layer.id===action.id)})}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers11)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers11})}case SET_SWIPE:{return _objectSpread(_objectSpread({},state),{},{swipe:action.swipe})}case SET_FILTER:{var filter={filterParams:action.filter,filterGeom:action.filterGeom,timeRange:action.timeRange};var _newLayers12=state.flat.map(function(layer){if(layer.type==="wms"){return _objectSpread(_objectSpread({},layer),LayerUtils.buildWMSLayerParams(layer,filter))}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers12,filter:filter})}case SET_THEME_LAYERS_VISIBILITY_PRESET:{var _newLayers13=state.flat.map(function(layer){if(layer.role===LayerRole.THEME){var _newLayer3=LayerUtils.applyVisibilityPreset(layer,action.preset);return _objectSpread(_objectSpread({},_newLayer3),LayerUtils.buildWMSLayerParams(_newLayer3,state.filter))}else{return layer}});UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers13)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers13})}default:return state}}
15
+ _newLayers4=LayerUtils.implodeLayers(LayerUtils.explodeLayers(_newLayers4))}}else{_newLayers4=LayerUtils.removeLayer(state.flat,_layer,action.sublayerpath).map(function(l){if(l.type==="wms"){return _objectSpread(_objectSpread({},l),LayerUtils.buildWMSLayerParams(l,state.filter))}else{return l}})}UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers4)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers4})}case ADD_LAYER_FEATURES:{var _layerId=action.layer.id||uuidv4();var _newLayers5=(state.flat||[]).concat();var idx=_newLayers5.findIndex(function(layer){return layer.id===_layerId});if(idx===-1){var newFeatures=action.features.map(function(f){return _objectSpread(_objectSpread({},f),{},{id:f.id||(f.properties||{}).id||uuidv4()})});var _newLayer=_objectSpread(_objectSpread({},action.layer),{},{id:_layerId,type:"vector",name:action.layer.name||_layerId,features:newFeatures,role:action.layer.role||LayerRole.USERLAYER,queryable:action.layer.queryable||false,visibility:action.layer.visibility||true,opacity:action.layer.opacity||255,layertreehidden:action.layer.layertreehidden||action.layer.role>LayerRole.USERLAYER,bbox:VectorLayerUtils.computeFeaturesBBox(action.features)});var _inspos=0;for(;_inspos<_newLayers5.length&&_newLayer.role<_newLayers5[_inspos].role;++_inspos);_newLayers5.splice(_inspos,0,_newLayer)}else{var addFeatures=action.features.map(function(f){return _objectSpread(_objectSpread({},f),{},{id:f.id||(f.properties||{}).id||uuidv4()})});var _newFeatures=action.clear?addFeatures:[].concat(_toConsumableArray((_newLayers5[idx].features||[]).filter(function(f){return!addFeatures.find(function(g){return g.id===f.id})})),_toConsumableArray(addFeatures));_newLayers5[idx]=_objectSpread(_objectSpread({},_newLayers5[idx]),{},{features:_newFeatures,bbox:VectorLayerUtils.computeFeaturesBBox(_newFeatures),rev:action.layer.rev})}return _objectSpread(_objectSpread({},state),{},{flat:_newLayers5})}case REMOVE_LAYER_FEATURES:{var changed=false;var _newLayers6=(state.flat||[]).reduce(function(result,layer){if(layer.id===action.layerId){var _newFeatures2=(layer.features||[]).filter(function(f){return action.featureIds.includes(f.id)===false});if(!isEmpty(_newFeatures2)||action.keepEmptyLayer){result.push(_objectSpread(_objectSpread({},layer),{},{features:_newFeatures2,bbox:VectorLayerUtils.computeFeaturesBBox(_newFeatures2)}))}changed=true}else{result.push(layer)}return result},[]);if(changed){return _objectSpread(_objectSpread({},state),{},{flat:_newLayers6})}else{return state}}case CLEAR_LAYER:{var _newLayers7=(state.flat||[]).map(function(layer){if(layer.id===action.layerId){return _objectSpread(_objectSpread({},layer),{},{features:[],bbox:null})}else{return layer}});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers7})}case ADD_THEME_SUBLAYER:{var themeLayerIdx=state.flat.findIndex(function(layer){return layer.role===LayerRole.THEME});if(themeLayerIdx>=0){var _newLayers8=state.flat.slice(0);_newLayers8[themeLayerIdx]=LayerUtils.mergeSubLayers(state.flat[themeLayerIdx],action.layer);_newLayers8[themeLayerIdx].visibility=true;Object.assign(_newLayers8[themeLayerIdx],LayerUtils.buildWMSLayerParams(_newLayers8[themeLayerIdx],state.filter));UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers8)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers8})}return state}case REFRESH_LAYER:{var _newLayers9=(state.flat||[]).map(function(layer){if(action.filter(layer)){return _objectSpread(_objectSpread({},layer),{},{rev:+new Date})}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers9})}case REMOVE_ALL_LAYERS:{return defaultState}case REORDER_LAYER:{var _newLayers10=LayerUtils.reorderLayer(state.flat,action.layer,action.sublayerpath,action.direction,action.preventSplittingGroups).map(function(layer){if(layer.type==="wms"){return _objectSpread(_objectSpread({},layer),LayerUtils.buildWMSLayerParams(layer,state.filter))}else{return layer}});UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers10)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers10})}case REPLACE_PLACEHOLDER_LAYER:{var _newLayers11=LayerUtils.replacePlaceholderLayer(state.flat,action.id,action.layer,state.filter);UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers11)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers11})}case SET_SWIPE:{return _objectSpread(_objectSpread({},state),{},{swipe:action.swipe})}case SET_FILTER:{var filter={filterParams:action.filter,filterGeom:action.filterGeom,timeRange:action.timeRange};var _newLayers12=state.flat.map(function(layer){if(layer.type==="wms"){return _objectSpread(_objectSpread({},layer),LayerUtils.buildWMSLayerParams(layer,filter))}return layer});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers12,filter:filter})}case SET_THEME_LAYERS_VISIBILITY_PRESET:{var _newLayers13=state.flat.map(function(layer){if(layer.role===LayerRole.THEME){var _newLayer2=LayerUtils.applyVisibilityPreset(layer,action.preset);return _objectSpread(_objectSpread({},_newLayer2),LayerUtils.buildWMSLayerParams(_newLayer2,state.filter))}else{return layer}});UrlParams.updateParams({l:LayerUtils.buildWMSLayerUrlParam(_newLayers13)});return _objectSpread(_objectSpread({},state),{},{flat:_newLayers13})}default:return state}}
@@ -26,11 +26,12 @@
26
26
  "Print": "Отпечатване",
27
27
  "Reports": "Доклади",
28
28
  "Settings": "Настройки",
29
+ "Settings3D": "",
29
30
  "Share": "Споделяне на връзка",
30
31
  "ThemeSwitcher": "Тема",
31
32
  "AttributeTable": "Таблица на атрибутите",
32
33
  "AuthenticationLogin": "Вход",
33
- "AuthenticationLogout": "Излизане от системата",
34
+ "AuthenticationLogout": "Излизане от системата - {0}",
34
35
  "Cyclomedia": "Cyclomedia",
35
36
  "Draw3D": "Начертайте",
36
37
  "FeatureForm": "Формуляр за функция",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Език на системата",
595
596
  "themes": "Теми"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR код",
599
603
  "directLinkTitle": "Чрез директна връзка",
@@ -26,11 +26,12 @@
26
26
  "Print": "Imprimir",
27
27
  "Reports": "Informes",
28
28
  "Settings": "Opcions",
29
+ "Settings3D": "",
29
30
  "Share": "Compartir link",
30
31
  "ThemeSwitcher": "Tema",
31
32
  "AttributeTable": "Taula d'atributs",
32
33
  "AuthenticationLogin": "Inicio de sessió",
33
- "AuthenticationLogout": "Tancament de sessió",
34
+ "AuthenticationLogout": "Tancament de sessió - {0}",
34
35
  "Cyclomedia": "Visor Cyclomedia",
35
36
  "Draw3D": "Dibuixar",
36
37
  "FeatureForm": "Formulari d'element",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Idioma del sistema",
595
596
  "themes": "Temes"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "Codi QR",
599
603
  "directLinkTitle": "Via link",
@@ -26,11 +26,12 @@
26
26
  "Print": "Tisk",
27
27
  "Reports": "",
28
28
  "Settings": "Nastavení",
29
+ "Settings3D": "",
29
30
  "Share": "Sdílet odkaz",
30
31
  "ThemeSwitcher": "Téma",
31
32
  "AttributeTable": "Atributy",
32
33
  "AuthenticationLogin": "Přihlášení",
33
- "AuthenticationLogout": "Odhlášení",
34
+ "AuthenticationLogout": "Odhlášení - {0}",
34
35
  "Cyclomedia": "Cyclomedia",
35
36
  "Draw3D": "",
36
37
  "FeatureForm": "Editační formulář",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Systémový jazyk",
595
596
  "themes": ""
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR kód",
599
603
  "directLinkTitle": "Přes přímý odkaz",
@@ -26,11 +26,12 @@
26
26
  "Print": "Drucken",
27
27
  "Reports": "Berichte",
28
28
  "Settings": "Einstellungen",
29
+ "Settings3D": "Einstellungen",
29
30
  "Share": "Teilen",
30
31
  "ThemeSwitcher": "Themen",
31
32
  "AttributeTable": "Attributtabelle",
32
33
  "AuthenticationLogin": "Anmelden",
33
- "AuthenticationLogout": "Abmelden",
34
+ "AuthenticationLogout": "Abmelden - {0}",
34
35
  "Cyclomedia": "Cyclomedia",
35
36
  "Draw3D": "Zeichnen",
36
37
  "FeatureForm": "Objektformular",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Systemsprache",
595
596
  "themes": "Themen"
596
597
  },
598
+ "settings3d": {
599
+ "quality": "Qualität"
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR Code (Smartphone)",
599
603
  "directLinkTitle": "Über einen direkten Link",
@@ -26,11 +26,12 @@
26
26
  "Print": "Drucken",
27
27
  "Reports": "Berichte",
28
28
  "Settings": "Einstellungen",
29
+ "Settings3D": "Einstellungen",
29
30
  "Share": "Teilen",
30
31
  "ThemeSwitcher": "Themen",
31
32
  "AttributeTable": "Attributtabelle",
32
33
  "AuthenticationLogin": "Anmelden",
33
- "AuthenticationLogout": "Abmelden",
34
+ "AuthenticationLogout": "Abmelden - {0}",
34
35
  "Cyclomedia": "Cyclomedia",
35
36
  "Draw3D": "Zeichnen",
36
37
  "FeatureForm": "Objektformular",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Systemsprache",
595
596
  "themes": "Themen"
596
597
  },
598
+ "settings3d": {
599
+ "quality": "Qualität"
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR Code (Smartphone)",
599
603
  "directLinkTitle": "Über einen direkten Link",
@@ -26,11 +26,12 @@
26
26
  "Print": "Print",
27
27
  "Reports": "Reports",
28
28
  "Settings": "Settings",
29
+ "Settings3D": "Settings",
29
30
  "Share": "Share Link",
30
31
  "ThemeSwitcher": "Theme",
31
32
  "AttributeTable": "Attribute Table",
32
33
  "AuthenticationLogin": "Login",
33
- "AuthenticationLogout": "Logout",
34
+ "AuthenticationLogout": "Logout - {0}",
34
35
  "Cyclomedia": "Cyclomedia",
35
36
  "Draw3D": "Draw",
36
37
  "FeatureForm": "Feature Form",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "System language",
595
596
  "themes": "Themes"
596
597
  },
598
+ "settings3d": {
599
+ "quality": "Quality"
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR Code",
599
603
  "directLinkTitle": "Via a direct link",
@@ -26,11 +26,12 @@
26
26
  "Print": "Imprimir",
27
27
  "Reports": "Informes",
28
28
  "Settings": "Opciones",
29
+ "Settings3D": "",
29
30
  "Share": "Compartir enlace",
30
31
  "ThemeSwitcher": "Tema",
31
32
  "AttributeTable": "Tabla de Atributos",
32
33
  "AuthenticationLogin": "Inicio de sesión",
33
- "AuthenticationLogout": "Cierre de sesión",
34
+ "AuthenticationLogout": "Cierre de sesión - {0}",
34
35
  "Cyclomedia": "Visor Cyclomedia",
35
36
  "Draw3D": "Dibujar",
36
37
  "FeatureForm": "Formulario de Elemento",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Idioma del sistema",
595
596
  "themes": "Temas"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "Código QR",
599
603
  "directLinkTitle": "Vía un vínculo directo",
@@ -26,11 +26,12 @@
26
26
  "Print": "Tulosta",
27
27
  "Reports": "",
28
28
  "Settings": "",
29
+ "Settings3D": "",
29
30
  "Share": "Jaa linkki",
30
31
  "ThemeSwitcher": "Teema",
31
32
  "AttributeTable": "",
32
33
  "AuthenticationLogin": "Kirjaudu",
33
- "AuthenticationLogout": "Kirjaudu ulos",
34
+ "AuthenticationLogout": "Kirjaudu ulos - {0}",
34
35
  "Cyclomedia": "",
35
36
  "Draw3D": "",
36
37
  "FeatureForm": "",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "",
595
596
  "themes": ""
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR-koodi",
599
603
  "directLinkTitle": "Suora linkillä",
@@ -26,11 +26,12 @@
26
26
  "Print": "Imprimer",
27
27
  "Reports": "Rapports",
28
28
  "Settings": "Paramètres",
29
+ "Settings3D": "Paramètres",
29
30
  "Share": "Partager",
30
31
  "ThemeSwitcher": "Thèmes",
31
32
  "AttributeTable": "Table d'attributs",
32
33
  "AuthenticationLogin": "Connexion",
33
- "AuthenticationLogout": "Déconnexion",
34
+ "AuthenticationLogout": "Déconnexion - {0}",
34
35
  "Cyclomedia": "Cyclomedia",
35
36
  "Draw3D": "Dessiner",
36
37
  "FeatureForm": "Formulaire d'objet",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Langue du système",
595
596
  "themes": "Thèmes"
596
597
  },
598
+ "settings3d": {
599
+ "quality": "Qualité"
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR code",
599
603
  "directLinkTitle": "Via un lien direct",
@@ -26,6 +26,7 @@
26
26
  "Print": "Nyomtatás",
27
27
  "Reports": "",
28
28
  "Settings": "",
29
+ "Settings3D": "",
29
30
  "Share": "Megosztható link",
30
31
  "ThemeSwitcher": "Térkép",
31
32
  "AttributeTable": "",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "",
595
596
  "themes": ""
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR-kód",
599
603
  "directLinkTitle": "Közvetlen hivatkozással...",
@@ -26,11 +26,12 @@
26
26
  "Print": "Stampa",
27
27
  "Reports": "Rapporti",
28
28
  "Settings": "Impostazioni",
29
+ "Settings3D": "Impostazioni",
29
30
  "Share": "Condividi",
30
31
  "ThemeSwitcher": "Temi",
31
32
  "AttributeTable": "Tabella attributi",
32
33
  "AuthenticationLogin": "Accedi",
33
- "AuthenticationLogout": "Disconnetti",
34
+ "AuthenticationLogout": "Disconnetti - {0}",
34
35
  "Cyclomedia": "Cyclomedia",
35
36
  "Draw3D": "Disegnare",
36
37
  "FeatureForm": "Formulario oggetto",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Lingua del sistema",
595
596
  "themes": "Temi"
596
597
  },
598
+ "settings3d": {
599
+ "quality": "Qualità"
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "Codice QR",
599
603
  "directLinkTitle": "Collegamento diretto",
@@ -26,11 +26,12 @@
26
26
  "Print": "印刷",
27
27
  "Reports": "レポート",
28
28
  "Settings": "設定",
29
+ "Settings3D": "",
29
30
  "Share": "リンクを共有",
30
31
  "ThemeSwitcher": "テーマ",
31
32
  "AttributeTable": "属性テーブル",
32
33
  "AuthenticationLogin": "ログイン",
33
- "AuthenticationLogout": "ログアウト",
34
+ "AuthenticationLogout": "ログアウト - {0}",
34
35
  "Cyclomedia": "Cyclomedia",
35
36
  "Draw3D": "作図",
36
37
  "FeatureForm": "地物フォーム",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "システム言語",
595
596
  "themes": "テーマ"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR コード",
599
603
  "directLinkTitle": "直接リンクで",
@@ -26,11 +26,12 @@
26
26
  "Print": "Print",
27
27
  "Reports": "",
28
28
  "Settings": "Instellingen",
29
+ "Settings3D": "",
29
30
  "Share": "Link delen",
30
31
  "ThemeSwitcher": "Kaartselectie",
31
32
  "AttributeTable": "Attributentabel",
32
33
  "AuthenticationLogin": "Inloggen",
33
- "AuthenticationLogout": "Uitloggen",
34
+ "AuthenticationLogout": "Uitloggen - {0}",
34
35
  "Cyclomedia": "Cyclomedia",
35
36
  "Draw3D": "",
36
37
  "FeatureForm": "Objectgegevens",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Systeemtaal",
595
596
  "themes": "Kaarten"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR-code",
599
603
  "directLinkTitle": "Via een directe link",
@@ -26,11 +26,12 @@
26
26
  "Print": "Skriv ut",
27
27
  "Reports": "",
28
28
  "Settings": "",
29
+ "Settings3D": "",
29
30
  "Share": "Del lenke",
30
31
  "ThemeSwitcher": "Tema",
31
32
  "AttributeTable": "",
32
33
  "AuthenticationLogin": "Logg inn",
33
- "AuthenticationLogout": "Logg ut",
34
+ "AuthenticationLogout": "Logg ut - {0}",
34
35
  "Cyclomedia": "",
35
36
  "Draw3D": "",
36
37
  "FeatureForm": "",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "",
595
596
  "themes": ""
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR kode",
599
603
  "directLinkTitle": "Direktelenke",
@@ -26,11 +26,12 @@
26
26
  "Print": "Drukuj",
27
27
  "Reports": "",
28
28
  "Settings": "",
29
+ "Settings3D": "",
29
30
  "Share": "Udostępnij Link",
30
31
  "ThemeSwitcher": "Motyw",
31
32
  "AttributeTable": "",
32
33
  "AuthenticationLogin": "Zaloguj",
33
- "AuthenticationLogout": "Wyloguj",
34
+ "AuthenticationLogout": "Wyloguj - {0}",
34
35
  "Cyclomedia": "",
35
36
  "Draw3D": "",
36
37
  "FeatureForm": "",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "",
595
596
  "themes": ""
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "QR code",
599
603
  "directLinkTitle": "Poprzez link bezpośredni",
@@ -26,11 +26,12 @@
26
26
  "Print": "Imprimir",
27
27
  "Reports": "",
28
28
  "Settings": "Configurações",
29
+ "Settings3D": "",
29
30
  "Share": "Compartilhar link",
30
31
  "ThemeSwitcher": "Tema",
31
32
  "AttributeTable": "Tabela de atributos",
32
33
  "AuthenticationLogin": "Inicio da sessão",
33
- "AuthenticationLogout": "Fim da sessão",
34
+ "AuthenticationLogout": "Fim da sessão - {0}",
34
35
  "Cyclomedia": "Cyclomedia",
35
36
  "Draw3D": "",
36
37
  "FeatureForm": "Atributos da feição",
@@ -594,6 +595,9 @@
594
595
  "systemlang": "Idioma do sistema",
595
596
  "themes": "Temas"
596
597
  },
598
+ "settings3d": {
599
+ "quality": ""
600
+ },
597
601
  "share": {
598
602
  "QRCodeLinkTitle": "Código QR",
599
603
  "directLinkTitle": "Link direto",