qwc2 2025.8.7 → 2025.8.14

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 (80) hide show
  1. package/actions/localConfig.js +1 -1
  2. package/actions/locale.js +1 -6
  3. package/components/LayerInfoWindow.js +1 -1
  4. package/components/PluginsContainer.js +2 -2
  5. package/components/ResizeableWindow.js +2 -2
  6. package/components/SearchBox.js +1 -1
  7. package/components/ServiceInfoWindow.js +1 -1
  8. package/components/SideBar.js +2 -2
  9. package/components/StandardApp.js +12 -16
  10. package/components/ThemeList.js +1 -1
  11. package/components/map3d/Map3D.js +9 -8
  12. package/components/map3d/SearchField3D.js +1 -1
  13. package/components/map3d/utils/OrbitControls3D.js +6 -2
  14. package/components/widgets/TextInput.js +1 -1
  15. package/package.json +3 -2
  16. package/plugins/API.js +3 -3
  17. package/plugins/BottomBar.js +1 -1
  18. package/plugins/HeightProfile.js +10 -7
  19. package/plugins/MapCopyright.js +2 -2
  20. package/plugins/MapExport.js +1 -1
  21. package/plugins/Reports.js +1 -1
  22. package/plugins/Routing.js +1 -1
  23. package/plugins/TopBar.js +1 -1
  24. package/plugins/View3D.js +3 -3
  25. package/{components/map3d/Settings3D.js → plugins/map3d/BackgroundSwitcher3D.js} +3 -1
  26. package/{components → plugins}/map3d/BottomBar3D.js +1 -1
  27. package/plugins/map3d/Compare3D.js +12 -0
  28. package/{components → plugins}/map3d/Draw3D.js +2 -2
  29. package/{components → plugins}/map3d/ExportObjects3D.js +2 -2
  30. package/{components → plugins}/map3d/HideObjects3D.js +2 -2
  31. package/{components → plugins}/map3d/Identify3D.js +2 -2
  32. package/plugins/map3d/LayerTree3D.js +7 -0
  33. package/{components → plugins}/map3d/MapExport3D.js +2 -2
  34. package/{components → plugins}/map3d/Measure3D.js +2 -2
  35. package/{components → plugins}/map3d/OverviewMap3D.js +2 -2
  36. package/plugins/map3d/Settings3D.js +7 -0
  37. package/plugins/map3d/TopBar3D.js +7 -0
  38. package/plugins/style/HeightProfile.css +10 -0
  39. package/reducers/localConfig.js +1 -1
  40. package/reducers/windows.js +1 -1
  41. package/static/translations/bg-BG.json +1 -0
  42. package/static/translations/ca-ES.json +1 -0
  43. package/static/translations/cs-CZ.json +1 -0
  44. package/static/translations/de-CH.json +1 -0
  45. package/static/translations/de-DE.json +1 -0
  46. package/static/translations/en-US.json +1 -0
  47. package/static/translations/es-ES.json +1 -0
  48. package/static/translations/fi-FI.json +1 -0
  49. package/static/translations/fr-FR.json +1 -0
  50. package/static/translations/hu-HU.json +1 -0
  51. package/static/translations/it-IT.json +1 -0
  52. package/static/translations/ja-JP.json +1 -0
  53. package/static/translations/nl-NL.json +1 -0
  54. package/static/translations/no-NO.json +1 -0
  55. package/static/translations/pl-PL.json +1 -0
  56. package/static/translations/pt-BR.json +1 -0
  57. package/static/translations/pt-PT.json +1 -0
  58. package/static/translations/ro-RO.json +1 -0
  59. package/static/translations/ru-RU.json +1 -0
  60. package/static/translations/sv-SE.json +1 -0
  61. package/static/translations/tr-TR.json +1 -0
  62. package/static/translations/tsconfig.json +3 -1
  63. package/static/translations/uk-UA.json +745 -0
  64. package/utils/LayerUtils.js +1 -1
  65. package/utils/LocaleUtils.js +6 -1
  66. package/utils/PluginStore.js +1 -0
  67. package/utils/ThemeUtils.js +2 -2
  68. package/components/map3d/Compare3D.js +0 -12
  69. package/components/map3d/LayerTree3D.js +0 -7
  70. package/components/map3d/TopBar3D.js +0 -7
  71. package/components/map3d/img/viewcone.svg +0 -124
  72. package/components/map3d/models/arrow.glb +0 -0
  73. package/components/map3d/models/pin.glb +0 -0
  74. package/utils/img/person.png +0 -0
  75. /package/{components → plugins}/map3d/style/BottomBar3D.css +0 -0
  76. /package/{components → plugins}/map3d/style/Compare3D.css +0 -0
  77. /package/{components → plugins}/map3d/style/HideObjects3D.css +0 -0
  78. /package/{components → plugins}/map3d/style/LayerTree3D.css +0 -0
  79. /package/{components → plugins}/map3d/style/OverviewMap3D.css +0 -0
  80. /package/{components → plugins}/map3d/style/Settings3D.css +0 -0
@@ -4,4 +4,4 @@
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 ReducerIndex from"../reducers/index";import localConfigReducer from"../reducers/localConfig";ReducerIndex.register("localConfig",localConfigReducer);export var LOCAL_CONFIG_LOADED="LOCAL_CONFIG_LOADED";export var SET_STARTUP_PARAMETERS="SET_STARTUP_PARAMETERS";export var SET_COLOR_SCHEME="SET_COLOR_SCHEME";export var SET_USER_INFO_FIELDS="SET_USER_INFO_FIELDS";export var SET_PERMALINK_PARAMETERS="SET_PERMALINK_PARAMETERS";export var REGISTER_CUSTOM_PLUGIN="REGISTER_CUSTOM_PLUGIN";export var UNREGISTER_CUSTOM_PLUGIN="UNREGISTER_CUSTOM_PLUGIN";export function localConfigLoaded(config){return{type:LOCAL_CONFIG_LOADED,config:config}}export function setStartupParameters(params,state){return{type:SET_STARTUP_PARAMETERS,params:params,state:state}}export function setColorScheme(colorScheme){var storeInLocalStorage=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;return{type:SET_COLOR_SCHEME,colorScheme:colorScheme,storeInLocalStorage:storeInLocalStorage}}export function setUserInfoFields(fields){return{type:SET_USER_INFO_FIELDS,fields:fields}}export function setPermalinkParameters(params){return{type:SET_PERMALINK_PARAMETERS,params:params}}export function registerCustomPlugin(name){return{type:REGISTER_CUSTOM_PLUGIN,name:name}}export function unregisterCustomPlugin(name){return{type:UNREGISTER_CUSTOM_PLUGIN,name:name}}
7
+ */import ReducerIndex from"../reducers/index";import localConfigReducer from"../reducers/localConfig";ReducerIndex.register("localConfig",localConfigReducer);export var LOCAL_CONFIG_LOADED="LOCAL_CONFIG_LOADED";export var SET_STARTUP_PARAMETERS="SET_STARTUP_PARAMETERS";export var SET_COLOR_SCHEME="SET_COLOR_SCHEME";export var SET_USER_INFO_FIELDS="SET_USER_INFO_FIELDS";export var SET_PERMALINK_PARAMETERS="SET_PERMALINK_PARAMETERS";export var REGISTER_CUSTOM_PLUGIN="REGISTER_CUSTOM_PLUGIN";export var UNREGISTER_CUSTOM_PLUGIN="UNREGISTER_CUSTOM_PLUGIN";export function localConfigLoaded(config){return{type:LOCAL_CONFIG_LOADED,config:config}}export function setStartupParameters(params,state){return{type:SET_STARTUP_PARAMETERS,params:params,state:state}}export function setColorScheme(colorScheme){var storeInLocalStorage=arguments.length>1&&arguments[1]!==undefined?arguments[1]:false;return{type:SET_COLOR_SCHEME,colorScheme:colorScheme,storeInLocalStorage:storeInLocalStorage}}export function setUserInfoFields(fields){return{type:SET_USER_INFO_FIELDS,fields:fields}}export function setPermalinkParameters(params){return{type:SET_PERMALINK_PARAMETERS,params:params}}export function registerCustomPlugin(name,availableIn2D,availableIn3D){return{type:REGISTER_CUSTOM_PLUGIN,name:name,availableIn2D:availableIn2D,availableIn3D:availableIn3D}}export function unregisterCustomPlugin(name){return{type:UNREGISTER_CUSTOM_PLUGIN,name:name}}
package/actions/locale.js CHANGED
@@ -5,9 +5,4 @@
5
5
  *
6
6
  * This source code is licensed under the BSD-style license found in the
7
7
  * LICENSE file in the root directory of this source tree.
8
- */import ReducerIndex from"../reducers/index";import localeReducer from"../reducers/locale";ReducerIndex.register("locale",localeReducer);import axios from"axios";import deepmerge from"deepmerge";import ConfigUtils from"../utils/ConfigUtils";import{UrlParams}from"../utils/PermaLinkUtils";export var CHANGE_LOCALE="CHANGE_LOCALE";export var ADD_TRANSLATIONS="ADD_TRANSLATIONS";export function loadLocale(defaultLangData){var defaultLang=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"";return function(dispatch){var lang=defaultLang||UrlParams.getParam("lang")||navigator.language;var loadLang=null;var availableLanguages=process.env.AvailableLanguages;if(availableLanguages.indexOf(lang)!==-1){// Exact match: lang-REGION
9
- loadLang=lang}else if(availableLanguages.indexOf(lang.slice(0,2))!==-1){// Exact match: lang
10
- loadLang=lang.slice(0,2)}else{// Try match lang-<OTHER_REGION>
11
- loadLang=availableLanguages.find(function(lc){return lc.slice(0,2)===lang.slice(0,2)})}var config={headers:{"Content-Type":"application/json"},data:{}};var translationsPath=ConfigUtils.getTranslationsPath();var dispatchChangeLocale=function dispatchChangeLocale(locale,messages){if(ConfigUtils.getConfigProp("loadTranslationOverrides")){axios.get(translationsPath+"/"+locale+"_overrides.json",config).then(function(response){var overrideMessages=response.data.messages;dispatch({type:CHANGE_LOCALE,locale:locale,messages:deepmerge(messages,overrideMessages),fallbackMessages:defaultLangData.messages})})["catch"](function(){dispatch({type:CHANGE_LOCALE,locale:locale,messages:messages,fallbackMessages:defaultLangData.messages})})}else{dispatch({type:CHANGE_LOCALE,locale:locale,messages:messages,fallbackMessages:defaultLangData.messages})}};if(!loadLang){// eslint-disable-next-line
12
- console.warn("No suitable translations available for "+lang+", defaulting to "+defaultLangData.locale);dispatchChangeLocale(defaultLangData.locale,defaultLangData.messages)}else{axios.get(translationsPath+"/"+loadLang+".json",config).then(function(response){dispatchChangeLocale(loadLang,response.data.messages)})["catch"](function(){// eslint-disable-next-line
13
- console.warn("Failed to load translations for "+loadLang+", defaulting to "+defaultLangData.locale);dispatchChangeLocale(defaultLangData.locale,defaultLangData.messages)})}}}export function addTranslations(translations){return{type:ADD_TRANSLATIONS,translations:translations}}
8
+ */import ReducerIndex from"../reducers/index";import localeReducer from"../reducers/locale";ReducerIndex.register("locale",localeReducer);export var CHANGE_LOCALE="CHANGE_LOCALE";export var ADD_TRANSLATIONS="ADD_TRANSLATIONS";export function changeLocale(localeData,fallbackLocaleData){return{type:CHANGE_LOCALE,locale:localeData.locale,messages:localeData.messages,fallbackMessages:fallbackLocaleData.messages}}export function addTranslations(translations){return{type:ADD_TRANSLATIONS,translations:translations}}
@@ -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{connect}from"react-redux";import PropTypes from"prop-types";import{setActiveLayerInfo}from"../actions/layerinfo";import ResizeableWindow from"../components/ResizeableWindow";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import MiscUtils from"../utils/MiscUtils";import{Image}from"./widgets/Primitives";import"./style/LayerInfoWindow.css";var LayerInfoWindow=/*#__PURE__*/function(_React$Component){function LayerInfoWindow(){var _this;_classCallCheck(this,LayerInfoWindow);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,LayerInfoWindow,[].concat(args));_defineProperty(_this,"renderRow",function(title,content){var html=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;if(content){return/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,title,":"),html?/*#__PURE__*/React.createElement("td",{dangerouslySetInnerHTML:{__html:MiscUtils.addLinkAnchors(content)}}):/*#__PURE__*/React.createElement("td",null,content))}return null});_defineProperty(_this,"renderMetadata",function(metadata){return metadata.map(function(entry){return _this.renderRow(LocaleUtils.tr(entry.label),entry.content,true)})});_defineProperty(_this,"renderScale",function(scale){if(scale===0){return"0"}else if(scale>=1){return"1:"+Math.round(scale)}else{return Math.round(1/scale)+":1"}});_defineProperty(_this,"onClose",function(){_this.props.setActiveLayerInfo(null,null)});return _this}_inherits(LayerInfoWindow,_React$Component);return _createClass(LayerInfoWindow,[{key:"renderLink",value:function renderLink(text,url){if(url){return/*#__PURE__*/React.createElement("a",{href:url,rel:"noreferrer",target:"_blank"},text)}else if(text){return text}return null}},{key:"render",value:function render(){if(!this.props.layer||!this.props.sublayer){return null}var legend=null;var scale=MapUtils.computeForZoom(this.props.map.scales,this.props.map.zoom);var legendUrl=LayerUtils.getLegendUrl(this.props.layer,this.props.sublayer,scale,this.props.map,this.props.bboxDependentLegend,this.props.scaleDependentLegend);if(legendUrl){legend=/*#__PURE__*/React.createElement(Image,{className:"layer-info-window-legend",src:legendUrl})}else if(this.props.layer.color){legend=/*#__PURE__*/React.createElement("span",{className:"layer-info-window-coloricon",style:{backgroundColor:this.props.layer.color}})}return/*#__PURE__*/React.createElement(ResizeableWindow,{icon:"info-sign",initialHeight:this.props.layerInfoGeometry.initialHeight,initialWidth:this.props.layerInfoGeometry.initialWidth,initialX:this.props.layerInfoGeometry.initialX,initialY:this.props.layerInfoGeometry.initialY,initiallyDocked:this.props.layerInfoGeometry.initiallyDocked,onClose:this.onClose,title:LocaleUtils.tr("layerinfo.title")},/*#__PURE__*/React.createElement("div",{className:"layer-info-window-body",role:"body"},/*#__PURE__*/React.createElement("h4",{className:"layer-info-window-title"},this.props.sublayer.title),/*#__PURE__*/React.createElement("div",{className:"layer-info-window-frame"},/*#__PURE__*/React.createElement("table",{className:"layer-info-window-table"},/*#__PURE__*/React.createElement("tbody",null,this.renderRow(LocaleUtils.tr("layerinfo.abstract"),this.props.sublayer["abstract"],true),this.props.sublayer.attribution?this.renderRow(LocaleUtils.tr("layerinfo.attribution"),this.renderLink(this.props.sublayer.attribution.Title,this.props.sublayer.attribution.OnlineResource)):null,this.renderRow(LocaleUtils.tr("layerinfo.keywords"),this.props.sublayer.keywords),this.renderRow(LocaleUtils.tr("layerinfo.dataUrl"),this.renderLink(this.props.sublayer.dataUrl,this.props.sublayer.dataUrl)),this.renderRow(LocaleUtils.tr("layerinfo.metadataUrl"),this.renderLink(this.props.sublayer.metadataUrl,this.props.sublayer.metadataUrl)),this.props.sublayer.minScale!==undefined?this.renderRow(LocaleUtils.tr("layerinfo.maxscale"),this.renderScale(this.props.sublayer.minScale)):null,this.props.sublayer.maxScale!==undefined?this.renderRow(LocaleUtils.tr("layerinfo.minscale"),this.renderScale(this.props.sublayer.maxScale)):null,this.renderRow(LocaleUtils.tr("layerinfo.legend"),legend),this.props.sublayer.metadata!==undefined?this.renderMetadata(this.props.sublayer.metadata):null)))))}}])}(React.Component);_defineProperty(LayerInfoWindow,"propTypes",{bboxDependentLegend:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),layer:PropTypes.object,layerInfoGeometry:PropTypes.object,map:PropTypes.object,scaleDependentLegend:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),setActiveLayerInfo:PropTypes.func,sublayer:PropTypes.object});var selector=function selector(state){return{map:state.map,layer:state.layerinfo.layer,sublayer:state.layerinfo.sublayer}};export default connect(selector,{setActiveLayerInfo:setActiveLayerInfo})(LayerInfoWindow);
7
+ */import React from"react";import{connect}from"react-redux";import DOMPurify from"dompurify";import PropTypes from"prop-types";import{setActiveLayerInfo}from"../actions/layerinfo";import ResizeableWindow from"../components/ResizeableWindow";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import MiscUtils from"../utils/MiscUtils";import{Image}from"./widgets/Primitives";import"./style/LayerInfoWindow.css";var LayerInfoWindow=/*#__PURE__*/function(_React$Component){function LayerInfoWindow(){var _this;_classCallCheck(this,LayerInfoWindow);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,LayerInfoWindow,[].concat(args));_defineProperty(_this,"renderRow",function(title,content){var html=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;if(content){return/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,title,":"),html?/*#__PURE__*/React.createElement("td",{dangerouslySetInnerHTML:{__html:MiscUtils.addLinkAnchors(DOMPurify.sanitize(content))}}):/*#__PURE__*/React.createElement("td",null,content))}return null});_defineProperty(_this,"renderMetadata",function(metadata){return metadata.map(function(entry){return _this.renderRow(LocaleUtils.tr(entry.label),entry.content,true)})});_defineProperty(_this,"renderScale",function(scale){if(scale===0){return"0"}else if(scale>=1){return"1:"+Math.round(scale)}else{return Math.round(1/scale)+":1"}});_defineProperty(_this,"onClose",function(){_this.props.setActiveLayerInfo(null,null)});return _this}_inherits(LayerInfoWindow,_React$Component);return _createClass(LayerInfoWindow,[{key:"renderLink",value:function renderLink(text,url){if(url){return/*#__PURE__*/React.createElement("a",{href:url,rel:"noreferrer",target:"_blank"},text)}else if(text){return text}return null}},{key:"render",value:function render(){if(!this.props.layer||!this.props.sublayer){return null}var legend=null;var scale=MapUtils.computeForZoom(this.props.map.scales,this.props.map.zoom);var legendUrl=LayerUtils.getLegendUrl(this.props.layer,this.props.sublayer,scale,this.props.map,this.props.bboxDependentLegend,this.props.scaleDependentLegend);if(legendUrl){legend=/*#__PURE__*/React.createElement(Image,{className:"layer-info-window-legend",src:legendUrl})}else if(this.props.layer.color){legend=/*#__PURE__*/React.createElement("span",{className:"layer-info-window-coloricon",style:{backgroundColor:this.props.layer.color}})}return/*#__PURE__*/React.createElement(ResizeableWindow,{icon:"info-sign",initialHeight:this.props.layerInfoGeometry.initialHeight,initialWidth:this.props.layerInfoGeometry.initialWidth,initialX:this.props.layerInfoGeometry.initialX,initialY:this.props.layerInfoGeometry.initialY,initiallyDocked:this.props.layerInfoGeometry.initiallyDocked,onClose:this.onClose,title:LocaleUtils.tr("layerinfo.title")},/*#__PURE__*/React.createElement("div",{className:"layer-info-window-body",role:"body"},/*#__PURE__*/React.createElement("h4",{className:"layer-info-window-title"},this.props.sublayer.title),/*#__PURE__*/React.createElement("div",{className:"layer-info-window-frame"},/*#__PURE__*/React.createElement("table",{className:"layer-info-window-table"},/*#__PURE__*/React.createElement("tbody",null,this.renderRow(LocaleUtils.tr("layerinfo.abstract"),this.props.sublayer["abstract"],true),this.props.sublayer.attribution?this.renderRow(LocaleUtils.tr("layerinfo.attribution"),this.renderLink(this.props.sublayer.attribution.Title,this.props.sublayer.attribution.OnlineResource)):null,this.renderRow(LocaleUtils.tr("layerinfo.keywords"),this.props.sublayer.keywords),this.renderRow(LocaleUtils.tr("layerinfo.dataUrl"),this.renderLink(this.props.sublayer.dataUrl,this.props.sublayer.dataUrl)),this.renderRow(LocaleUtils.tr("layerinfo.metadataUrl"),this.renderLink(this.props.sublayer.metadataUrl,this.props.sublayer.metadataUrl)),this.props.sublayer.minScale!==undefined?this.renderRow(LocaleUtils.tr("layerinfo.maxscale"),this.renderScale(this.props.sublayer.minScale)):null,this.props.sublayer.maxScale!==undefined?this.renderRow(LocaleUtils.tr("layerinfo.minscale"),this.renderScale(this.props.sublayer.maxScale)):null,this.renderRow(LocaleUtils.tr("layerinfo.legend"),legend),this.props.sublayer.metadata!==undefined?this.renderMetadata(this.props.sublayer.metadata):null)))))}}])}(React.Component);_defineProperty(LayerInfoWindow,"propTypes",{bboxDependentLegend:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),layer:PropTypes.object,layerInfoGeometry:PropTypes.object,map:PropTypes.object,scaleDependentLegend:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),setActiveLayerInfo:PropTypes.func,sublayer:PropTypes.object});var selector=function selector(state){return{map:state.map,layer:state.layerinfo.layer,sublayer:state.layerinfo.sublayer}};export default connect(selector,{setActiveLayerInfo:setActiveLayerInfo})(LayerInfoWindow);
@@ -5,9 +5,9 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
5
5
  *
6
6
  * This source code is licensed under the BSD-style license found in the
7
7
  * LICENSE file in the root directory of this source tree.
8
- */import React from"react";import{connect}from"react-redux";import PropTypes from"prop-types";import ConfigUtils from"../utils/ConfigUtils";import ProcessNotifications from"./ProcessNotifications";import WindowManager from"./WindowManager";import"./style/PluginsContainer.css";export var MapButtonPortalContext=/*#__PURE__*/React.createContext(null);export var MapContainerPortalContext=/*#__PURE__*/React.createContext(null);var PluginsContainer=/*#__PURE__*/function(_React$Component){function PluginsContainer(){var _this;_classCallCheck(this,PluginsContainer);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,PluginsContainer,[].concat(args));_defineProperty(_this,"state",{mapButtonsContainerRef:null,mapContainerRef:null});_defineProperty(_this,"renderPlugins",function(){var mode=ConfigUtils.isMobile()?"mobile":"desktop";var pluginsConfig=_this.props.pluginsConfig[mode];return pluginsConfig.map(function(pluginConf,idx){var _this$props$theme,_this$props$theme2;var Plugin=_this.props.plugins[pluginConf.name+"Plugin"];if(!Plugin){return null}var themeDevicePluginConfig=((_this$props$theme=_this.props.theme)===null||_this$props$theme===void 0||(_this$props$theme=_this$props$theme.config)===null||_this$props$theme===void 0||(_this$props$theme=_this$props$theme[mode])===null||_this$props$theme===void 0||(_this$props$theme=_this$props$theme.plugins)===null||_this$props$theme===void 0?void 0:_this$props$theme[pluginConf.name])||{};var themePluginConfig=((_this$props$theme2=_this.props.theme)===null||_this$props$theme2===void 0||(_this$props$theme2=_this$props$theme2.config)===null||_this$props$theme2===void 0||(_this$props$theme2=_this$props$theme2.plugins)===null||_this$props$theme2===void 0?void 0:_this$props$theme2[pluginConf.name])||{};var cfg=_objectSpread(_objectSpread(_objectSpread({},pluginConf.cfg||{}),themePluginConfig),themeDevicePluginConfig);var appCfg=_this.props.pluginsAppConfig[pluginConf.name+"Plugin"]||{};return/*#__PURE__*/React.createElement(Plugin,_extends({key:pluginConf.name+idx},cfg,appCfg))})});_defineProperty(_this,"setupTouchEvents",function(el){if(el){el.addEventListener("touchstart",function(ev){_this.touchY=ev.targetTouches[0].clientY},{passive:false});el.addEventListener("touchmove",_this.preventOverscroll,{passive:false})}});_defineProperty(_this,"preventOverscroll",function(ev){if(ev.touches[0].touchType!=="direct"){// Don't do anything for stylus inputs
8
+ */import React from"react";import{connect}from"react-redux";import PropTypes from"prop-types";import ConfigUtils from"../utils/ConfigUtils";import ProcessNotifications from"./ProcessNotifications";import WindowManager from"./WindowManager";import"./style/PluginsContainer.css";export var MapButtonPortalContext=/*#__PURE__*/React.createContext(null);export var MapContainerPortalContext=/*#__PURE__*/React.createContext(null);var PluginsContainer=/*#__PURE__*/function(_React$Component){function PluginsContainer(){var _this;_classCallCheck(this,PluginsContainer);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,PluginsContainer,[].concat(args));_defineProperty(_this,"state",{mapButtonsContainerRef:null,mapContainerRef:null});_defineProperty(_this,"renderPlugins",function(){var device=ConfigUtils.isMobile()?"mobile":"desktop";return _this.props.pluginsConfig.map(function(pluginConf){var _this$props$theme,_this$props$theme2,_pluginConf$key;var Plugin=_this.props.plugins[pluginConf.name+"Plugin"];if(!Plugin){return null}var themeDevicePluginConfig=((_this$props$theme=_this.props.theme)===null||_this$props$theme===void 0||(_this$props$theme=_this$props$theme.config)===null||_this$props$theme===void 0||(_this$props$theme=_this$props$theme[device])===null||_this$props$theme===void 0||(_this$props$theme=_this$props$theme.plugins)===null||_this$props$theme===void 0?void 0:_this$props$theme[pluginConf.name])||{};var themePluginConfig=((_this$props$theme2=_this.props.theme)===null||_this$props$theme2===void 0||(_this$props$theme2=_this$props$theme2.config)===null||_this$props$theme2===void 0||(_this$props$theme2=_this$props$theme2.plugins)===null||_this$props$theme2===void 0?void 0:_this$props$theme2[pluginConf.name])||{};var cfg=_objectSpread(_objectSpread(_objectSpread({},pluginConf.cfg||{}),themePluginConfig),themeDevicePluginConfig);return/*#__PURE__*/React.createElement(Plugin,_extends({key:(_pluginConf$key=pluginConf.key)!==null&&_pluginConf$key!==void 0?_pluginConf$key:pluginConf.name},cfg))})});_defineProperty(_this,"setupTouchEvents",function(el){if(el){el.addEventListener("touchstart",function(ev){_this.touchY=ev.targetTouches[0].clientY},{passive:false});el.addEventListener("touchmove",_this.preventOverscroll,{passive:false})}});_defineProperty(_this,"preventOverscroll",function(ev){if(ev.touches[0].touchType!=="direct"){// Don't do anything for stylus inputs
9
9
  return}var scrollEvent=false;var element=ev.target;var direction=ev.targetTouches[0].clientY-_this.touchY;_this.touchY=ev.targetTouches[0].clientY;while(!scrollEvent&&element){var scrollable=element.scrollHeight>element.clientHeight;// Workaround for resizeable-window having scrollHeight > clientHeight even though it has no scrollbar
10
10
  if(element.classList.contains("resizeable-window")){scrollable=false}if(element.type==="range"){// If it is a range element, treat it as a scroll event
11
11
  scrollEvent=true}else if(scrollable&&element.scrollTop+element.clientHeight<element.scrollHeight&&direction<0){// User scrolls down and element is not at end of scroll
12
12
  scrollEvent=true}else if(scrollable&&element.scrollTop>0&&direction>0){// User scrolls up and element is not at start of scroll
13
- scrollEvent=true}else{element=element.parentElement}}if(!scrollEvent){ev.preventDefault()}});_defineProperty(_this,"setOverlayContainerRef",function(el){_this.setState({mapContainerRef:el})});_defineProperty(_this,"setButtonContainerRef",function(el){_this.setState({mapButtonsContainerRef:el});if(el){var resizeObserver=new ResizeObserver(function(entries){var contentRectEntry=entries.find(function(entry){return entry.contentRect});if(contentRectEntry){var width=contentRectEntry.contentRect.width;var height=contentRectEntry.contentRect.height;el.style.setProperty("--buttons-container-width","".concat(width,"px"));el.style.setProperty("--buttons-container-height","".concat(height,"px"))}});resizeObserver.observe(el);el.recomputeSpacers=function(){var slots=new Set;Array.from(el.childNodes).forEach(function(child){if(child.dataset.spacer){el.removeChild(child)}else{slots.add(child.dataset.slot)}});var maxSlot=Math.max.apply(Math,_toConsumableArray(slots));for(var i=0;i<maxSlot;++i){if(!slots.has(String(i))){var child=document.createElement("div");child.className="map-buttons-spacer";child.dataset.spacer=1;child.style.order=i;el.appendChild(child)}}}}});return _this}_inherits(PluginsContainer,_React$Component);return _createClass(PluginsContainer,[{key:"render",value:function render(){var left=this.props.mapMargins.left;var top=this.props.mapMargins.top;var right=this.props.mapMargins.right;var bottom=this.props.mapMargins.bottom;var mapContainerStyle={left:"calc("+left+"px)",top:"calc(var(--topbar-height) + "+top+"px)",right:"calc("+right+"px)",bottom:"calc(var(--bottombar-height) + "+bottom+"px)"};var haveRefs=this.state.mapButtonsContainerRef&&this.state.mapContainerRef;return/*#__PURE__*/React.createElement("div",{className:"plugins-container "+this.props.className,ref:this.setupTouchEvents},/*#__PURE__*/React.createElement(MapButtonPortalContext.Provider,{value:this.state.mapButtonsContainerRef},/*#__PURE__*/React.createElement(MapContainerPortalContext.Provider,{value:this.state.mapContainerRef},haveRefs?this.renderPlugins():null,haveRefs?this.props.children:null)),/*#__PURE__*/React.createElement(WindowManager,null),/*#__PURE__*/React.createElement("div",{className:"map-container",ref:this.setOverlayContainerRef,style:mapContainerStyle},/*#__PURE__*/React.createElement(ProcessNotifications,null)),/*#__PURE__*/React.createElement("div",{className:"map-buttons-container",ref:this.setButtonContainerRef,style:mapContainerStyle}))}}])}(React.Component);_defineProperty(PluginsContainer,"propTypes",{children:PropTypes.oneOfType([PropTypes.node,PropTypes.func]),className:PropTypes.string,mapMargins:PropTypes.object,plugins:PropTypes.object,pluginsAppConfig:PropTypes.object,pluginsConfig:PropTypes.object,theme:PropTypes.object});export default connect(function(state){return{mapMargins:state.windows.mapMargins,theme:state.theme.current}})(PluginsContainer);
13
+ scrollEvent=true}else{element=element.parentElement}}if(!scrollEvent){ev.preventDefault()}});_defineProperty(_this,"setOverlayContainerRef",function(el){_this.setState({mapContainerRef:el})});_defineProperty(_this,"setButtonContainerRef",function(el){_this.setState({mapButtonsContainerRef:el});if(el){var resizeObserver=new ResizeObserver(function(entries){var contentRectEntry=entries.find(function(entry){return entry.contentRect});if(contentRectEntry){var width=contentRectEntry.contentRect.width;var height=contentRectEntry.contentRect.height;el.style.setProperty("--buttons-container-width","".concat(width,"px"));el.style.setProperty("--buttons-container-height","".concat(height,"px"))}});resizeObserver.observe(el);el.recomputeSpacers=function(){var slots=new Set;Array.from(el.childNodes).forEach(function(child){if(child.dataset.spacer){el.removeChild(child)}else{slots.add(child.dataset.slot)}});var maxSlot=Math.max.apply(Math,_toConsumableArray(slots));for(var i=0;i<maxSlot;++i){if(!slots.has(String(i))){var child=document.createElement("div");child.className="map-buttons-spacer";child.dataset.spacer=1;child.style.order=i;el.appendChild(child)}}}}});return _this}_inherits(PluginsContainer,_React$Component);return _createClass(PluginsContainer,[{key:"render",value:function render(){var left=this.props.mapMargins.left+this.props.mapMargins.outerLeft;var top=this.props.mapMargins.top;var right=this.props.mapMargins.right+this.props.mapMargins.outerRight;var bottom=this.props.mapMargins.bottom;var mapContainerStyle={left:"calc("+left+"px)",top:"calc(var(--topbar-height) + "+top+"px)",right:"calc("+right+"px)",bottom:"calc(var(--bottombar-height) + "+bottom+"px)"};var haveRefs=this.state.mapButtonsContainerRef&&this.state.mapContainerRef;return/*#__PURE__*/React.createElement("div",{className:"plugins-container "+this.props.className,ref:this.setupTouchEvents},/*#__PURE__*/React.createElement(MapButtonPortalContext.Provider,{value:this.state.mapButtonsContainerRef},/*#__PURE__*/React.createElement(MapContainerPortalContext.Provider,{value:this.state.mapContainerRef},haveRefs?this.renderPlugins():null,haveRefs?this.props.children:null)),/*#__PURE__*/React.createElement(WindowManager,null),/*#__PURE__*/React.createElement("div",{className:"map-container",ref:this.setOverlayContainerRef,style:mapContainerStyle},/*#__PURE__*/React.createElement(ProcessNotifications,null)),/*#__PURE__*/React.createElement("div",{className:"map-buttons-container",ref:this.setButtonContainerRef,style:mapContainerStyle}))}}])}(React.Component);_defineProperty(PluginsContainer,"propTypes",{children:PropTypes.oneOfType([PropTypes.node,PropTypes.func]),className:PropTypes.string,mapMargins:PropTypes.object,plugins:PropTypes.object,pluginsConfig:PropTypes.array,theme:PropTypes.object});export default connect(function(state){return{mapMargins:state.windows.mapMargins,theme:state.theme.current}})(PluginsContainer);
@@ -4,9 +4,9 @@ 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 ReactDOM from"react-dom";import{connect}from"react-redux";import*as portals from"react-reverse-portal";import{Rnd}from"react-rnd";import classnames from"classnames";import PropTypes from"prop-types";import{v1 as uuidv1}from"uuid";import{raiseWindow,registerWindow,unregisterWindow,setSplitScreen}from"../actions/windows";import ConfigUtils from"../utils/ConfigUtils";import LocaleUtils from"../utils/LocaleUtils";import MiscUtils from"../utils/MiscUtils";import Icon from"./Icon";import Spinner from"./widgets/Spinner";import"./style/ResizeableWindow.css";var WINDOW_GEOMETRIES={};var ResizeableWindow=/*#__PURE__*/function(_React$Component){function ResizeableWindow(props){var _this;_classCallCheck(this,ResizeableWindow);_this=_callSuper(this,ResizeableWindow,[props]);_defineProperty(_this,"state",{geometry:null});_defineProperty(_this,"renderRole",function(role){return React.Children.toArray(_this.props.children).find(function(child){return child.props.role===role})});_defineProperty(_this,"onClose",function(ev){if(_this.state.externalWindow){_this.state.externalWindow.removeEventListener("beforeunload",_this.props.onClose)}_this.props.onClose();ev.stopPropagation()});_defineProperty(_this,"renderTitleBar",function(){if(_this.props.fullscreen){return null}var maximized=_this.state.geometry.maximized?true:false;var minimized=_this.state.geometry.minimized?true:false;var docked=_this.state.geometry.docked;var dockSide=_this.props.dockable===true?"left":_this.props.dockable;var dockable=_this.props.dockable&&!_this.state.externalWindow;if(ConfigUtils.getConfigProp("globallyDisableDockableDialogs")){dockable=false}var maximizeable=_this.props.maximizeable&&!_this.state.externalWindow&&!_this.props.fitHeight;if(ConfigUtils.getConfigProp("globallyDisableMaximizeableDialogs")){maximizeable=false}var minimizeable=_this.props.minimizeable&&!_this.state.externalWindow;var icon=null;if(_this.props.busyIcon){icon=/*#__PURE__*/React.createElement(Spinner,null)}else if(_this.props.icon){icon=/*#__PURE__*/React.createElement(Icon,{className:"resizeable-window-titlebar-icon",icon:_this.props.icon,size:"large"})}var dockIcon=docked?"undock":"dock";dockIcon=dockIcon+"_"+dockSide;var iconClasses=classnames({"resizeable-window-titlebar-control":true,"resizeable-window-nodrag":true});var detachIcons=null;if(!ConfigUtils.isMobile()&&!ConfigUtils.getConfigProp("globallyDisableDetachableDialogs")){detachIcons=_this.state.externalWindow?/*#__PURE__*/React.createElement(Icon,{className:iconClasses,icon:"embed",onClick:_this.moveToInternalWindow,title:LocaleUtils.tr("window.embed")}):/*#__PURE__*/React.createElement(Icon,{className:iconClasses,icon:"detach",onClick:_this.moveToExternalWindow,title:LocaleUtils.tr("window.detach")})}return/*#__PURE__*/React.createElement("div",{className:"resizeable-window-titlebar",onDoubleClick:_this.state.externalWindow?null:_this.toggleMaximize},icon,/*#__PURE__*/React.createElement("span",{className:"resizeable-window-titlebar-title"},_this.props.title),(_this.props.extraControls||[]).map(function(entry){var extraIconClasses=classnames({"resizeable-window-titlebar-extra-control":true,"resizeable-window-titlebar-extra-control-active":entry.active,"resizeable-window-nodrag":true});return/*#__PURE__*/React.createElement(Icon,{className:extraIconClasses,icon:entry.icon,key:entry.icon,onClick:entry.callback,title:entry.title})}),!maximized&&dockable?/*#__PURE__*/React.createElement(Icon,{className:iconClasses,icon:dockIcon,onClick:_this.toggleDock,title:_this.state.geometry.docked?LocaleUtils.tr("window.undock"):LocaleUtils.tr("window.dock")}):null,minimizeable?/*#__PURE__*/React.createElement(Icon,{className:iconClasses,icon:minimized?"unminimize":"minimize",onClick:_this.toggleMinimize,title:minimized?LocaleUtils.tr("window.unminimize"):LocaleUtils.tr("window.minimize")}):null,maximizeable?/*#__PURE__*/React.createElement(Icon,{className:iconClasses,icon:maximized?"unmaximize":"maximize",onClick:_this.toggleMaximize,title:maximized?LocaleUtils.tr("window.unmaximize"):LocaleUtils.tr("window.maximize")}):null,detachIcons,_this.props.onClose?/*#__PURE__*/React.createElement(Icon,{className:iconClasses,icon:"remove",onClick:_this.onClose,title:LocaleUtils.tr("window.close")}):null)});_defineProperty(_this,"renderInternalWindowContainer",function(){var _this$state$geometry$,_this$state$geometry,_this$state$geometry$2,_this$state$geometry2;var docked=(_this$state$geometry$=(_this$state$geometry=_this.state.geometry)===null||_this$state$geometry===void 0?void 0:_this$state$geometry.docked)!==null&&_this$state$geometry$!==void 0?_this$state$geometry$:_this.props.initiallyDocked;var maximized=(_this$state$geometry$2=(_this$state$geometry2=_this.state.geometry)===null||_this$state$geometry2===void 0?void 0:_this$state$geometry2.maximized)!==null&&_this$state$geometry$2!==void 0?_this$state$geometry$2:false;var splitTopAndBottomBar=_this.props.splitTopAndBottomBar&&_this.props.splitScreenWhenDocked&&(docked||maximized);var marginLeft=_this.props.mapMargins.splitTopAndBottomBar&&!splitTopAndBottomBar?_this.props.mapMargins.left:0;var marginRight=_this.props.mapMargins.splitTopAndBottomBar&&!splitTopAndBottomBar?_this.props.mapMargins.right:0;var containerStyle={left:marginLeft+"px",right:marginRight+"px",top:splitTopAndBottomBar?0:_this.props.topbarHeight+"px",bottom:splitTopAndBottomBar?0:_this.props.bottombarHeight+"px",zIndex:splitTopAndBottomBar?110:_this.props.baseZIndex+_this.props.windowStacking.findIndex(function(item){return item===_this.id})};return/*#__PURE__*/React.createElement("div",{className:"resizeable-window-container",key:"InternalWindow",ref:_this.setInitialSize,style:containerStyle},_this.props.visible&&_this.state.geometry?_this.renderInternalWindow():null)});_defineProperty(_this,"renderInternalWindow",function(){var maximized=_this.state.geometry.maximized||_this.props.fullscreen?true:false;var minimized=_this.state.geometry.minimized?true:false;var dockSide=_this.props.dockable===true?"left":_this.props.dockable;var bodyclasses=classnames({"resizeable-window-body":true,"resizeable-window-body-scrollable":_this.props.scrollable,"resizeable-window-body-nonscrollable":!_this.props.scrollable,"resizeable-window-nodrag":true});var windowclasses=classnames({"resizeable-window":true,"resizeable-window-maximized":maximized,"resizeable-window-minimized":minimized,"resizeable-window-fit-height":_this.props.fitHeight,"resizeable-window-docked-left":!_this.props.splitScreenWhenDocked&&_this.state.geometry.docked&&dockSide==="left"&&!maximized,"resizeable-window-docked-right":!_this.props.splitScreenWhenDocked&&_this.state.geometry.docked&&dockSide==="right"&&!maximized,"resizeable-window-split-left":_this.props.splitScreenWhenDocked&&_this.state.geometry.docked&&dockSide==="left"&&!maximized,"resizeable-window-split-right":_this.props.splitScreenWhenDocked&&_this.state.geometry.docked&&dockSide==="right"&&!maximized,"resizeable-window-docked-top":_this.state.geometry.docked&&dockSide==="top"&&!maximized,"resizeable-window-docked-bottom":_this.state.geometry.docked&&dockSide==="bottom"&&!maximized});var resizeMode={left:true,right:true,top:true,bottom:true,bottomLeft:true,bottomRight:true,topLeft:true,topRight:true};if(maximized||minimized){resizeMode=false}else if(_this.state.geometry.docked){resizeMode={left:dockSide==="right",right:dockSide==="left",top:dockSide==="bottom",bottom:dockSide!=="bottom"&&!_this.props.splitScreenWhenDocked||_this.props.splitScreenWhenDocked&&dockSide==="top"}}if(_this.props.fitHeight){resizeMode.top=false;resizeMode.bottom=false;resizeMode.bottomLeft=true;resizeMode.bottomRight=true;resizeMode.topLeft=true;resizeMode.topRight=true}return/*#__PURE__*/React.createElement(Rnd,{bounds:"parent",cancel:".resizeable-window-nodrag",className:windowclasses,"default":_this.state.geometry,disableDragging:maximized||_this.state.geometry.docked,enableResizing:resizeMode,maxHeight:_this.props.maxHeight||"100%",maxWidth:_this.props.maxWidth||"100%",minHeight:_this.props.minHeight,minWidth:_this.props.minWidth,onDragStart:_this.onDragStart,onDragStop:_this.onDragStop,onMouseDown:function onMouseDown(){return _this.props.raiseWindow(_this.id)},onResizeStop:_this.onResizeStop,ref:_this.initRnd},/*#__PURE__*/React.createElement("div",{className:"resizeable-window-contents"},_this.renderTitleBar(),/*#__PURE__*/React.createElement("div",{className:bodyclasses,onMouseDown:function onMouseDown(){return _this.props.raiseWindow(_this.id)}},/*#__PURE__*/React.createElement("div",{className:"resizeable-window-drag-shield",ref:function ref(el){_this.dragShield=el}}),_this.portalNode?/*#__PURE__*/React.createElement("div",{className:"resizeable-window-portal-container"},/*#__PURE__*/React.createElement(portals.OutPortal,{node:_this.portalNode})):_this.renderRole("body"))))});_defineProperty(_this,"setInitialSize",function(container){if(!container){return}var width=Math.min(_this.props.initialWidth,container.offsetWidth);var height=Math.min(_this.props.initialHeight,container.offsetHeight);var geometry=null;if(WINDOW_GEOMETRIES[_this.props.title]){geometry=WINDOW_GEOMETRIES[_this.props.title]}else{geometry={x:_this.props.initialX!==null?_this.computeInitialX(container,_this.props.initialX):Math.max(0,Math.round(0.5*(container.offsetWidth-width))),y:_this.props.initialY!==null?_this.computeInitialY(container,_this.props.initialY):Math.max(0,Math.round(0.5*(container.offsetHeight-height))),width:width,height:height,docked:_this.props.initiallyDocked,detached:false}}if(_this.props.splitScreenWhenDocked&&geometry.docked){var dockSide=_this.props.dockable===true?"left":_this.props.dockable;var dockSize=["left","right"].includes(dockSide)?geometry.width:geometry.height;_this.props.setSplitScreen(_this.id,dockSide,dockSize,_this.props.splitTopAndBottomBar)}_this.setState({geometry:geometry})});_defineProperty(_this,"computeInitialX",function(container,x){return x>0||Object.is(x,0)?x:container.offsetWidth-_this.props.initialWidth-Math.abs(x)});_defineProperty(_this,"computeInitialY",function(container,y){return y>0||Object.is(y,0)?y:container.offsetHeight-_this.props.initialHeight-Math.abs(y)});_defineProperty(_this,"renderExternalWindow",function(){return/*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/React.createElement("div",{className:"resizeable-window-contents"},_this.renderTitleBar(),/*#__PURE__*/React.createElement("div",{className:"resizeable-window-body"},_this.portalNode?/*#__PURE__*/React.createElement("div",{className:"resizeable-window-portal-container"},/*#__PURE__*/React.createElement(portals.OutPortal,{node:_this.portalNode})):_this.renderRole("body"))),_this.state.externalWindow.document.body)});_defineProperty(_this,"initRnd",function(el){if(el){_this.rnd=el;_this.rnd.updatePosition(_this.state.geometry)}});_defineProperty(_this,"onDragStart",function(){if(_this.dragShield){_this.dragShield.style.display="initial"}});_defineProperty(_this,"onDragStop",function(ev,data){_this.setState(function(state){return{geometry:_objectSpread(_objectSpread({},state.geometry),{},{x:data.x,y:data.y})}});if(_this.dragShield){_this.dragShield.style.display="none"}});_defineProperty(_this,"onResizeStop",function(ev,dir,ref,delta,position){// Delay one event loop cycle else clientWidth / clientHeight may not yet be up-to-date
7
+ */import React from"react";import ReactDOM from"react-dom";import{connect}from"react-redux";import*as portals from"react-reverse-portal";import{Rnd}from"react-rnd";import classnames from"classnames";import PropTypes from"prop-types";import{v1 as uuidv1}from"uuid";import{raiseWindow,registerWindow,unregisterWindow,setSplitScreen}from"../actions/windows";import ConfigUtils from"../utils/ConfigUtils";import LocaleUtils from"../utils/LocaleUtils";import MiscUtils from"../utils/MiscUtils";import Icon from"./Icon";import Spinner from"./widgets/Spinner";import"./style/ResizeableWindow.css";var WINDOW_GEOMETRIES={};var ResizeableWindow=/*#__PURE__*/function(_React$Component){function ResizeableWindow(props){var _this;_classCallCheck(this,ResizeableWindow);_this=_callSuper(this,ResizeableWindow,[props]);_defineProperty(_this,"state",{geometry:null});_defineProperty(_this,"renderRole",function(role){return React.Children.toArray(_this.props.children).find(function(child){return child.props.role===role})});_defineProperty(_this,"onClose",function(ev){if(_this.state.externalWindow){_this.state.externalWindow.removeEventListener("beforeunload",_this.props.onClose)}_this.props.onClose();ev.stopPropagation()});_defineProperty(_this,"renderTitleBar",function(){if(_this.props.fullscreen){return null}var maximized=_this.state.geometry.maximized?true:false;var minimized=_this.state.geometry.minimized?true:false;var docked=_this.state.geometry.docked;var dockSide=_this.props.dockable===true?"left":_this.props.dockable;var dockable=_this.props.dockable&&!_this.state.externalWindow;if(ConfigUtils.getConfigProp("globallyDisableDockableDialogs")){dockable=false}var maximizeable=_this.props.maximizeable&&!_this.state.externalWindow&&!_this.props.fitHeight;if(ConfigUtils.getConfigProp("globallyDisableMaximizeableDialogs")){maximizeable=false}var minimizeable=_this.props.minimizeable&&!_this.state.externalWindow;var icon=null;if(_this.props.busyIcon){icon=/*#__PURE__*/React.createElement(Spinner,null)}else if(_this.props.icon){icon=/*#__PURE__*/React.createElement(Icon,{className:"resizeable-window-titlebar-icon",icon:_this.props.icon,size:"large"})}var dockIcon=docked?"undock":"dock";dockIcon=dockIcon+"_"+dockSide;var iconClasses=classnames({"resizeable-window-titlebar-control":true,"resizeable-window-nodrag":true});var detachIcons=null;if(!ConfigUtils.isMobile()&&!ConfigUtils.getConfigProp("globallyDisableDetachableDialogs")){detachIcons=_this.state.externalWindow?/*#__PURE__*/React.createElement(Icon,{className:iconClasses,icon:"embed",onClick:_this.moveToInternalWindow,title:LocaleUtils.tr("window.embed")}):/*#__PURE__*/React.createElement(Icon,{className:iconClasses,icon:"detach",onClick:_this.moveToExternalWindow,title:LocaleUtils.tr("window.detach")})}return/*#__PURE__*/React.createElement("div",{className:"resizeable-window-titlebar",onDoubleClick:_this.state.externalWindow?null:_this.toggleMaximize},icon,/*#__PURE__*/React.createElement("span",{className:"resizeable-window-titlebar-title"},_this.props.title),(_this.props.extraControls||[]).map(function(entry){var extraIconClasses=classnames({"resizeable-window-titlebar-extra-control":true,"resizeable-window-titlebar-extra-control-active":entry.active,"resizeable-window-nodrag":true});return/*#__PURE__*/React.createElement(Icon,{className:extraIconClasses,icon:entry.icon,key:entry.icon,onClick:entry.callback,title:entry.title})}),!maximized&&dockable?/*#__PURE__*/React.createElement(Icon,{className:iconClasses,icon:dockIcon,onClick:_this.toggleDock,title:_this.state.geometry.docked?LocaleUtils.tr("window.undock"):LocaleUtils.tr("window.dock")}):null,minimizeable?/*#__PURE__*/React.createElement(Icon,{className:iconClasses,icon:minimized?"unminimize":"minimize",onClick:_this.toggleMinimize,title:minimized?LocaleUtils.tr("window.unminimize"):LocaleUtils.tr("window.minimize")}):null,maximizeable?/*#__PURE__*/React.createElement(Icon,{className:iconClasses,icon:maximized?"unmaximize":"maximize",onClick:_this.toggleMaximize,title:maximized?LocaleUtils.tr("window.unmaximize"):LocaleUtils.tr("window.maximize")}):null,detachIcons,_this.props.onClose?/*#__PURE__*/React.createElement(Icon,{className:iconClasses,icon:"remove",onClick:_this.onClose,title:LocaleUtils.tr("window.close")}):null)});_defineProperty(_this,"renderInternalWindowContainer",function(){var _this$state$geometry$,_this$state$geometry,_this$state$geometry$2,_this$state$geometry2;var docked=(_this$state$geometry$=(_this$state$geometry=_this.state.geometry)===null||_this$state$geometry===void 0?void 0:_this$state$geometry.docked)!==null&&_this$state$geometry$!==void 0?_this$state$geometry$:_this.props.initiallyDocked;var maximized=(_this$state$geometry$2=(_this$state$geometry2=_this.state.geometry)===null||_this$state$geometry2===void 0?void 0:_this$state$geometry2.maximized)!==null&&_this$state$geometry$2!==void 0?_this$state$geometry$2:false;var splitTopAndBottomBar=_this.props.splitTopAndBottomBar&&_this.props.splitScreenWhenDocked&&(docked||maximized);var marginLeft=0;var marginRight=0;if(!splitTopAndBottomBar){marginLeft=_this.props.mapMargins.outerLeft+_this.props.menuMargins.left;marginRight=_this.props.mapMargins.outerRight+_this.props.menuMargins.right}var containerStyle={left:marginLeft+"px",right:marginRight+"px",top:splitTopAndBottomBar?0:_this.props.topbarHeight+"px",bottom:splitTopAndBottomBar?0:_this.props.bottombarHeight+"px",zIndex:splitTopAndBottomBar?110:_this.props.baseZIndex+_this.props.windowStacking.findIndex(function(item){return item===_this.id})};return/*#__PURE__*/React.createElement("div",{className:"resizeable-window-container",key:"InternalWindow",ref:_this.setInitialSize,style:containerStyle},_this.props.visible&&_this.state.geometry?_this.renderInternalWindow():null)});_defineProperty(_this,"renderInternalWindow",function(){var maximized=_this.state.geometry.maximized||_this.props.fullscreen?true:false;var minimized=_this.state.geometry.minimized?true:false;var dockSide=_this.props.dockable===true?"left":_this.props.dockable;var bodyclasses=classnames({"resizeable-window-body":true,"resizeable-window-body-scrollable":_this.props.scrollable,"resizeable-window-body-nonscrollable":!_this.props.scrollable,"resizeable-window-nodrag":true});var windowclasses=classnames({"resizeable-window":true,"resizeable-window-maximized":maximized,"resizeable-window-minimized":minimized,"resizeable-window-fit-height":_this.props.fitHeight,"resizeable-window-docked-left":!_this.props.splitScreenWhenDocked&&_this.state.geometry.docked&&dockSide==="left"&&!maximized,"resizeable-window-docked-right":!_this.props.splitScreenWhenDocked&&_this.state.geometry.docked&&dockSide==="right"&&!maximized,"resizeable-window-split-left":_this.props.splitScreenWhenDocked&&_this.state.geometry.docked&&dockSide==="left"&&!maximized,"resizeable-window-split-right":_this.props.splitScreenWhenDocked&&_this.state.geometry.docked&&dockSide==="right"&&!maximized,"resizeable-window-docked-top":_this.state.geometry.docked&&dockSide==="top"&&!maximized,"resizeable-window-docked-bottom":_this.state.geometry.docked&&dockSide==="bottom"&&!maximized});var resizeMode={left:true,right:true,top:true,bottom:true,bottomLeft:true,bottomRight:true,topLeft:true,topRight:true};if(maximized||minimized){resizeMode=false}else if(_this.state.geometry.docked){resizeMode={left:dockSide==="right",right:dockSide==="left",top:dockSide==="bottom",bottom:dockSide!=="bottom"&&!_this.props.splitScreenWhenDocked||_this.props.splitScreenWhenDocked&&dockSide==="top"}}if(_this.props.fitHeight){resizeMode.top=false;resizeMode.bottom=false;resizeMode.bottomLeft=true;resizeMode.bottomRight=true;resizeMode.topLeft=true;resizeMode.topRight=true}return/*#__PURE__*/React.createElement(Rnd,{bounds:"parent",cancel:".resizeable-window-nodrag",className:windowclasses,"default":_this.state.geometry,disableDragging:maximized||_this.state.geometry.docked,enableResizing:resizeMode,maxHeight:_this.props.maxHeight||"100%",maxWidth:_this.props.maxWidth||"100%",minHeight:_this.props.minHeight,minWidth:_this.props.minWidth,onDragStart:_this.onDragStart,onDragStop:_this.onDragStop,onMouseDown:function onMouseDown(){return _this.props.raiseWindow(_this.id)},onResizeStop:_this.onResizeStop,ref:_this.initRnd},/*#__PURE__*/React.createElement("div",{className:"resizeable-window-contents"},_this.renderTitleBar(),/*#__PURE__*/React.createElement("div",{className:bodyclasses,onMouseDown:function onMouseDown(){return _this.props.raiseWindow(_this.id)}},/*#__PURE__*/React.createElement("div",{className:"resizeable-window-drag-shield",ref:function ref(el){_this.dragShield=el}}),_this.portalNode?/*#__PURE__*/React.createElement("div",{className:"resizeable-window-portal-container"},/*#__PURE__*/React.createElement(portals.OutPortal,{node:_this.portalNode})):_this.renderRole("body"))))});_defineProperty(_this,"setInitialSize",function(container){if(!container){return}var width=Math.min(_this.props.initialWidth,container.offsetWidth);var height=Math.min(_this.props.initialHeight,container.offsetHeight);var geometry=null;if(WINDOW_GEOMETRIES[_this.props.title]){geometry=WINDOW_GEOMETRIES[_this.props.title]}else{geometry={x:_this.props.initialX!==null?_this.computeInitialX(container,_this.props.initialX):Math.max(0,Math.round(0.5*(container.offsetWidth-width))),y:_this.props.initialY!==null?_this.computeInitialY(container,_this.props.initialY):Math.max(0,Math.round(0.5*(container.offsetHeight-height))),width:width,height:height,docked:_this.props.initiallyDocked,detached:false}}if(_this.props.splitScreenWhenDocked&&geometry.docked){var dockSide=_this.props.dockable===true?"left":_this.props.dockable;var dockSize=["left","right"].includes(dockSide)?geometry.width:geometry.height;_this.props.setSplitScreen(_this.id,dockSide,dockSize,_this.props.splitTopAndBottomBar)}_this.setState({geometry:geometry})});_defineProperty(_this,"computeInitialX",function(container,x){return x>0||Object.is(x,0)?x:container.offsetWidth-_this.props.initialWidth-Math.abs(x)});_defineProperty(_this,"computeInitialY",function(container,y){return y>0||Object.is(y,0)?y:container.offsetHeight-_this.props.initialHeight-Math.abs(y)});_defineProperty(_this,"renderExternalWindow",function(){return/*#__PURE__*/ReactDOM.createPortal(/*#__PURE__*/React.createElement("div",{className:"resizeable-window-contents"},_this.renderTitleBar(),/*#__PURE__*/React.createElement("div",{className:"resizeable-window-body"},_this.portalNode?/*#__PURE__*/React.createElement("div",{className:"resizeable-window-portal-container"},/*#__PURE__*/React.createElement(portals.OutPortal,{node:_this.portalNode})):_this.renderRole("body"))),_this.state.externalWindow.document.body)});_defineProperty(_this,"initRnd",function(el){if(el){_this.rnd=el;_this.rnd.updatePosition(_this.state.geometry)}});_defineProperty(_this,"onDragStart",function(){if(_this.dragShield){_this.dragShield.style.display="initial"}});_defineProperty(_this,"onDragStop",function(ev,data){_this.setState(function(state){return{geometry:_objectSpread(_objectSpread({},state.geometry),{},{x:data.x,y:data.y})}});if(_this.dragShield){_this.dragShield.style.display="none"}});_defineProperty(_this,"onResizeStop",function(ev,dir,ref,delta,position){// Delay one event loop cycle else clientWidth / clientHeight may not yet be up-to-date
8
8
  setTimeout(function(){_this.setState(function(state){return{geometry:_objectSpread(_objectSpread({},state.geometry),{},{x:position.x,y:position.y,width:ref.clientWidth,height:ref.clientHeight})}})},0)});_defineProperty(_this,"toggleDock",function(){_this.setState(function(state){return{geometry:_objectSpread(_objectSpread({},state.geometry),{},{docked:!state.geometry.docked})}});_this.rnd.updatePosition(_this.state.geometry)});_defineProperty(_this,"toggleMinimize",function(){_this.setState(function(state){return{geometry:_objectSpread(_objectSpread({},state.geometry),{},{minimized:!state.geometry.minimized})}})});_defineProperty(_this,"toggleMaximize",function(){_this.setState(function(state){return{geometry:_objectSpread(_objectSpread({},state.geometry),{},{maximized:!state.geometry.maximized,minimized:false})}})});_defineProperty(_this,"moveToExternalWindow",function(){var title=_this.props.title;var windowOptions=["popup=true","toolbar=no","locationbar=no","location=no","directories=no","status=no","menubar=no","scrollbars=yes","resizable=yes","width="+_this.state.geometry.width,"height="+_this.state.geometry.height].join(", ");var externalWindow=window.open("about:blank","_blank",windowOptions);externalWindow.addEventListener("resize",_this.props.onExternalWindowResized,false);var loadInterval=setInterval(function(){if(externalWindow.document.readyState!=="complete"){return}clearInterval(loadInterval);externalWindow.addEventListener("beforeunload",_this.props.onClose,{capture:false,once:true});var titleEl=externalWindow.document.createElement("title");titleEl.appendChild(externalWindow.document.createTextNode(title));externalWindow.document.head.appendChild(titleEl);var icon=MiscUtils.getFaviconFromIcon(_this.props.icon,48);if(icon){var iconEl=externalWindow.document.createElement("link");iconEl.rel="icon";iconEl.href=icon;iconEl.sizes="48x48";externalWindow.document.head.appendChild(iconEl)}// Inherit styles
9
9
  Array.from(document.styleSheets).forEach(function(styleSheet){if(styleSheet.href){// External styles
10
10
  var linkElement=externalWindow.document.createElement("link");linkElement.rel="stylesheet";linkElement.href=styleSheet.href;externalWindow.document.head.appendChild(linkElement)}else if(styleSheet.cssRules){// Inline styles
11
11
  var styleElement=externalWindow.document.createElement("style");var cssText=Array.from(styleSheet.cssRules).map(function(rule){return rule.cssText}).join("\n");styleElement.appendChild(externalWindow.document.createTextNode(cssText));externalWindow.document.head.appendChild(styleElement)}});externalWindow.document.querySelector(":root").style.setProperty("--topbar-height",document.querySelector(":root").style.getPropertyValue("--topbar-height"));externalWindow.document.querySelector(":root").style.setProperty("--bottombar-height",document.querySelector(":root").style.getPropertyValue("--bottombar-height"));_this.setState(function(state){return{externalWindow:externalWindow,geometry:_objectSpread(_objectSpread({},state.geometry),{},{detached:true})}})},50)});_defineProperty(_this,"moveToInternalWindow",function(){if(_this.state.externalWindow){_this.state.externalWindow.removeEventListener("beforeunload",_this.props.onClose);_this.state.externalWindow.removeEventListener("resize",_this.props.onExternalWindowResized,false);_this.state.externalWindow.close();_this.setState(function(state){var newGeometry=_objectSpread(_objectSpread({},state.geometry),{},{detached:false});WINDOW_GEOMETRIES[_this.props.title]=newGeometry;return{externalWindow:null,geometry:newGeometry}})}});_defineProperty(_this,"closeExternalWindow",function(){if(_this.state.externalWindow){_this.state.externalWindow.close()}});_this.rnd=null;_this.dragShield=null;_this.id=uuidv1();_this.portalNode=props.usePortal?portals.createHtmlPortalNode():null;return _this}_inherits(ResizeableWindow,_React$Component);return _createClass(ResizeableWindow,[{key:"componentDidMount",value:function componentDidMount(){this.props.registerWindow(this.id);window.addEventListener("beforeunload",this.closeExternalWindow,{once:true})}},{key:"componentWillUnmount",value:function componentWillUnmount(){this.props.unregisterWindow(this.id);if(this.props.splitScreenWhenDocked){this.props.setSplitScreen(this.id,null,null,false)}if(this.state.externalWindow){this.state.externalWindow.close()}window.removeEventListener("beforeunload",this.closeExternalWindow)}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps,prevState){if(!this.state.geometry||!prevState.geometry){return}if(this.rnd&&this.props.visible&&this.props.visible!==prevProps.visible){this.props.onGeometryChanged(this.state.geometry);this.rnd.updatePosition(this.state.geometry)}if(this.state.geometry!==prevState.geometry){this.props.onGeometryChanged(this.state.geometry);WINDOW_GEOMETRIES[this.props.title]=this.state.geometry}if(this.props.splitScreenWhenDocked&&(this.props.visible!==prevProps.visible||this.state.geometry!==prevState.geometry||this.state.externalWindow!==prevState.externalWindow)){if(!this.props.visible&&prevProps.visible||this.state.geometry.docked===false&&prevState.geometry.docked!==false||this.state.geometry.maximized===true&&prevState.geometry.maximized!==true||this.state.externalWindow&&!prevState.externalWindow){this.props.setSplitScreen(this.id,null,null,false)}else if(this.props.visible&&this.state.geometry.docked&&!this.state.externalWindow&&!this.state.geometry.maximized){var dockSide=this.props.dockable===true?"left":this.props.dockable;var dockSize=["left","right"].includes(dockSide)?this.state.geometry.width:this.state.geometry.height;this.props.setSplitScreen(this.id,dockSide,dockSize,this.props.splitTopAndBottomBar)}}if(!this.props.visible&&prevProps.visible&&this.state.externalWindow){// Cannot hide an external window
12
- this.moveToInternalWindow()}}},{key:"render",value:function render(){return[this.portalNode?/*#__PURE__*/React.createElement(portals.InPortal,{key:"InPortal",node:this.portalNode},this.renderRole("body")):null,this.state.externalWindow?this.renderExternalWindow():this.renderInternalWindowContainer()]}}])}(React.Component);_defineProperty(ResizeableWindow,"propTypes",{baseZIndex:PropTypes.number,bottombarHeight:PropTypes.number,busyIcon:PropTypes.bool,children:PropTypes.oneOfType([PropTypes.node,PropTypes.func]),dockable:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),extraControls:PropTypes.arrayOf(PropTypes.shape({active:PropTypes.bool,icon:PropTypes.string.isRequired,callback:PropTypes.func.isRequired,title:PropTypes.string})),fitHeight:PropTypes.bool,fullscreen:PropTypes.bool,icon:PropTypes.string,initialHeight:PropTypes.number,initialWidth:PropTypes.number,initialX:PropTypes.number,initialY:PropTypes.number,initiallyDocked:PropTypes.bool,mapMargins:PropTypes.object,maxHeight:PropTypes.number,maxWidth:PropTypes.number,maximizeable:PropTypes.bool,minHeight:PropTypes.number,minWidth:PropTypes.number,minimizeable:PropTypes.bool,onClose:PropTypes.func,onExternalWindowResized:PropTypes.func,onGeometryChanged:PropTypes.func,raiseWindow:PropTypes.func,registerWindow:PropTypes.func,scrollable:PropTypes.bool,setSplitScreen:PropTypes.func,splitScreenWhenDocked:PropTypes.bool,splitTopAndBottomBar:PropTypes.bool,title:PropTypes.string,topbarHeight:PropTypes.number,unregisterWindow:PropTypes.func,usePortal:PropTypes.bool,visible:PropTypes.bool,windowStacking:PropTypes.array});_defineProperty(ResizeableWindow,"defaultProps",{baseZIndex:10,initialX:null,initialY:null,initialWidth:240,initialHeight:320,minWidth:50,minHeight:50,maxWidth:null,maxHeight:null,maximizeable:true,minimizeable:false,visible:true,dockable:true,onExternalWindowResized:function onExternalWindowResized(){},onGeometryChanged:function onGeometryChanged(){},externalWindow:null,usePortal:true});export default connect(function(state){return{windowStacking:state.windows.stacking,topbarHeight:state.windows.topbarHeight,bottombarHeight:state.windows.bottombarHeight,mapMargins:state.windows.mapMargins}},{raiseWindow:raiseWindow,registerWindow:registerWindow,setSplitScreen:setSplitScreen,unregisterWindow:unregisterWindow})(ResizeableWindow);
12
+ this.moveToInternalWindow()}}},{key:"render",value:function render(){return[this.portalNode?/*#__PURE__*/React.createElement(portals.InPortal,{key:"InPortal",node:this.portalNode},this.renderRole("body")):null,this.state.externalWindow?this.renderExternalWindow():this.renderInternalWindowContainer()]}}])}(React.Component);_defineProperty(ResizeableWindow,"propTypes",{baseZIndex:PropTypes.number,bottombarHeight:PropTypes.number,busyIcon:PropTypes.bool,children:PropTypes.oneOfType([PropTypes.node,PropTypes.func]),dockable:PropTypes.oneOfType([PropTypes.bool,PropTypes.string]),extraControls:PropTypes.arrayOf(PropTypes.shape({active:PropTypes.bool,icon:PropTypes.string.isRequired,callback:PropTypes.func.isRequired,title:PropTypes.string})),fitHeight:PropTypes.bool,fullscreen:PropTypes.bool,icon:PropTypes.string,initialHeight:PropTypes.number,initialWidth:PropTypes.number,initialX:PropTypes.number,initialY:PropTypes.number,initiallyDocked:PropTypes.bool,mapMargins:PropTypes.object,maxHeight:PropTypes.number,maxWidth:PropTypes.number,maximizeable:PropTypes.bool,menuMargins:PropTypes.object,minHeight:PropTypes.number,minWidth:PropTypes.number,minimizeable:PropTypes.bool,onClose:PropTypes.func,onExternalWindowResized:PropTypes.func,onGeometryChanged:PropTypes.func,raiseWindow:PropTypes.func,registerWindow:PropTypes.func,scrollable:PropTypes.bool,setSplitScreen:PropTypes.func,splitScreenWhenDocked:PropTypes.bool,splitTopAndBottomBar:PropTypes.bool,title:PropTypes.string,topbarHeight:PropTypes.number,unregisterWindow:PropTypes.func,usePortal:PropTypes.bool,visible:PropTypes.bool,windowStacking:PropTypes.array});_defineProperty(ResizeableWindow,"defaultProps",{baseZIndex:10,initialX:null,initialY:null,initialWidth:240,initialHeight:320,minWidth:50,minHeight:50,maxWidth:null,maxHeight:null,maximizeable:true,minimizeable:false,visible:true,dockable:true,onExternalWindowResized:function onExternalWindowResized(){},onGeometryChanged:function onGeometryChanged(){},externalWindow:null,usePortal:true});export default connect(function(state){return{windowStacking:state.windows.stacking,topbarHeight:state.windows.topbarHeight,bottombarHeight:state.windows.bottombarHeight,mapMargins:state.windows.mapMargins,menuMargins:state.windows.menuMargins}},{raiseWindow:raiseWindow,registerWindow:registerWindow,setSplitScreen:setSplitScreen,unregisterWindow:unregisterWindow})(ResizeableWindow);
@@ -4,7 +4,7 @@ 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{connect}from"react-redux";import axios from"axios";import classnames from"classnames";import isEmpty from"lodash.isempty";import pointInPolygon from"point-in-polygon";import polygonIntersectTest from"polygon-intersect-test";import PropTypes from"prop-types";import{createSelector}from"reselect";import{v1 as uuidv1}from"uuid";import{LayerRole,addLayerFeatures,addThemeSublayer,changeLayerProperty,removeLayer,addLayer}from"../actions/layers";import{logAction}from"../actions/logging";import{panTo,zoomToExtent,zoomToPoint}from"../actions/map";import{setCurrentSearchResult}from"../actions/search";import{setCurrentTask}from"../actions/task";import{setCurrentTheme}from"../actions/theme";import{openExternalUrl,showNotification}from"../actions/windows";import searchProvidersSelector from"../selectors/searchproviders";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import MiscUtils from"../utils/MiscUtils";import{UrlParams}from"../utils/PermaLinkUtils";import{FulltextSearch,SearchResultType}from"../utils/SearchProviders";import VectorLayerUtils from"../utils/VectorLayerUtils";import Icon from"./Icon";import MapSelection from"./MapSelection";import ButtonBar from"./widgets/ButtonBar";import ComboBox from"./widgets/ComboBox";import InputContainer from"./widgets/InputContainer";import NumberInput from"./widgets/NumberInput";import Spinner from"./widgets/Spinner";import"./style/SearchBox.css";var SearchBox=/*#__PURE__*/function(_React$Component){function SearchBox(props){var _this;_classCallCheck(this,SearchBox);_this=_callSuper(this,SearchBox,[props]);_defineProperty(_this,"state",{searchText:"",searchSession:null,pendingSearches:[],recentSearches:[],searchResults:{},resultsVisible:false,collapsedSections:{},expandedLayerGroup:null,activeLayerInfo:null,filterOptionsVisible:false,selectedProvider:"",filterRegionName:"",filterGeomType:null,filterGeometry:null});_defineProperty(_this,"renderFilterOptions",function(){var _this$state$filterGeo;if(!_this.state.filterOptionsVisible){return null}var providerSelection=/*#__PURE__*/React.createElement(ComboBox,{onChange:function onChange(value){return _this.setState({selectedProvider:value})},value:_this.state.selectedProvider},/*#__PURE__*/React.createElement("div",{value:""},LocaleUtils.tr("search.all")),Object.entries(_this.props.searchProviders).map(function(_ref){var _prov$params,_prov$label;var _ref2=_slicedToArray(_ref,2),key=_ref2[0],prov=_ref2[1];return/*#__PURE__*/React.createElement("div",{key:key,value:key},(prov===null||prov===void 0||(_prov$params=prov.params)===null||_prov$params===void 0?void 0:_prov$params.title)||((_prov$label=prov.label)!==null&&_prov$label!==void 0?_prov$label:LocaleUtils.tr(prov.labelmsgid)))}));var searchRegionSelection=null;var searchRegions=ConfigUtils.getConfigProp("searchFilterRegions",_this.props.theme);if(!isEmpty(searchRegions)){searchRegionSelection=/*#__PURE__*/React.createElement(ComboBox,{onChange:function onChange(value){return _this.setFilterRegion(value,searchRegions)},value:_this.state.filterRegionName},/*#__PURE__*/React.createElement("div",{value:""},LocaleUtils.tr("search.none")),searchRegions.map(function(group,gidx){return[/*#__PURE__*/React.createElement("div",{"data-group-header":gidx,disabled:true,key:"group"+gidx},group.name)].concat(_toConsumableArray(group.items.map(function(item,idx){return/*#__PURE__*/React.createElement("div",{"data-group":gidx,key:item.name,value:gidx+":"+idx+":"+item.name},item.name)})))}))}var filterButtons=[{key:"Polygon",tooltip:LocaleUtils.tr("redlining.polygon"),icon:"polygon",label:LocaleUtils.tr("redlining.polygon")},{key:"Circle",tooltip:LocaleUtils.tr("redlining.circle"),icon:"circle",label:LocaleUtils.tr("redlining.circle")}];return/*#__PURE__*/React.createElement("div",{className:"searchbox-filter-options"},/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("search.providerselection"),":"),/*#__PURE__*/React.createElement("td",null,providerSelection)),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("search.limittoarea"),":"),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("div",{className:"searchbox-filter-options-geometry controlgroup"},/*#__PURE__*/React.createElement(ButtonBar,{active:_this.state.filterGeomType,buttons:filterButtons,onClick:_this.setFilterGeomType}),searchRegionSelection,/*#__PURE__*/React.createElement("button",{className:"button",onClick:_this.clearFilter,title:LocaleUtils.tr("search.clearfilter")},/*#__PURE__*/React.createElement(Icon,{icon:"clear"}))))),_this.state.filterGeomType==="Circle"?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("search.circleradius"),":"),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement(NumberInput,{disabled:!_this.state.filterGeometry,min:1,mobile:true,onChange:_this.setCircleRadius,suffix:" m",value:((_this$state$filterGeo=_this.state.filterGeometry)===null||_this$state$filterGeo===void 0?void 0:_this$state$filterGeo.radius)||0}))):null)))});_defineProperty(_this,"setFilterGeomType",function(geomType){_this.setState({filterGeomType:geomType,filterRegionName:"",filterGeometry:null})});_defineProperty(_this,"setFilterRegion",function(value,searchRegions){if(value){var parts=value.split(":");var item=searchRegions[parts[0]].items[parts[1]];var geometry={type:"Polygon",coordinates:[item.coordinates]};var mapGeometry=VectorLayerUtils.reprojectGeometry(geometry,item.crs,_this.props.map.projection);_this.setState({filterGeomType:null,filterRegionName:value,filterGeometry:mapGeometry})}else{_this.setState({filterGeomType:null,filterRegionName:"",filterGeometry:null})}});_defineProperty(_this,"setCircleRadius",function(value){_this.setState(function(state){return{filterGeometry:_objectSpread(_objectSpread({},state.filterGeometry),{},{radius:value})}})});_defineProperty(_this,"clearFilter",function(){_this.setState({filterGeomType:null,filterRegionName:"",filterGeometry:null})});_defineProperty(_this,"renderResultsMenu",function(){if(!_this.state.resultsVisible){return false}var children=[_this.renderRecentResults(),_this.renderFilters(),_this.renderResults()];children=children.filter(function(child){return!isEmpty(child)});if(isEmpty(children)){if(isEmpty(_this.state.pendingSearches)&&_this.state.searchResults.query_text){children=/*#__PURE__*/React.createElement("div",{className:"searchbox-noresults"},LocaleUtils.tr("search.noresults"))}else{return null}}return/*#__PURE__*/React.createElement("div",{className:"searchbox-results",onMouseDown:_this.setPreventBlur,ref:MiscUtils.setupKillTouchEvents},children)});_defineProperty(_this,"renderRecentResults",function(){var recentSearches=_this.state.recentSearches.filter(function(entry){return entry.toLowerCase().includes(_this.state.searchText.toLowerCase())});if(isEmpty(recentSearches)||recentSearches.length===1&&recentSearches[0].toLowerCase()===_this.state.searchText.toLowerCase()){return null}return/*#__PURE__*/React.createElement("div",{key:"recent"},/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-title",onClick:function onClick(){return _this.toggleSection("recent")},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement(Icon,{icon:_this.isCollapsed("recent")?"expand":"collapse"}),LocaleUtils.tr("search.recent")),!_this.isCollapsed("recent")?/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-body"},recentSearches.map(function(entry,idx){return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:"r"+idx,onClick:function onClick(){return _this.searchTextChanged(entry)},onMouseDown:MiscUtils.killEvent},entry)})):null)});_defineProperty(_this,"renderFilters",function(){return Object.entries(_this.state.searchResults).map(function(_ref3){var _ref4=_slicedToArray(_ref3,2),provider=_ref4[0],results=_ref4[1];if(isEmpty(results.result_counts)||results.result_counts.length<2){return null}var collapsed=_this.isCollapsed("filter",false);var values=results.result_counts.map(function(entry){return entry.filterword+": "+_this.state.searchResults.query_text});values.sort(function(a,b){return a.localeCompare(b)});return/*#__PURE__*/React.createElement("div",{key:"filter"},/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-title",onClick:function onClick(){return _this.toggleSection("filter")},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement(Icon,{icon:collapsed?"expand":"collapse"}),LocaleUtils.tr("search.filter")),!collapsed?/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-body"},values.map(function(value,idx){return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:"f"+idx,onClick:function onClick(){return _this.searchTextChanged(value,true,provider)},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label"},value))})):null)}).filter(Boolean)});_defineProperty(_this,"renderResults",function(){var resultRenderers=_defineProperty(_defineProperty(_defineProperty({},SearchResultType.PLACE,_this.renderPlaceResult),SearchResultType.THEMELAYER,_this.renderThemeLayerResult),SearchResultType.THEME,_this.renderThemeResult);var layersBeforePlaces=_this.props.searchOptions.showLayerResultsBeforePlaces;var priorities=_defineProperty(_defineProperty(_defineProperty({},SearchResultType.PLACE,layersBeforePlaces?0:2),SearchResultType.THEMELAYER,layersBeforePlaces?2:1),SearchResultType.THEME,layersBeforePlaces?1:0);var results=Object.keys(_this.props.searchProviders).reduce(function(result,provider){if(!_this.state.searchResults[provider]){return result}return result.concat(_this.state.searchResults[provider].results.map(function(group){var _group$type,_group$type2,_group$title,_group$title2;var sectionId=provider+":"+group.id;var moreLabel=null;if(group.resultCount>0&&group.resultCount>group.items.length){moreLabel=LocaleUtils.tr("search.more",group.resultCount-group.items.length)}else if(group.resultCount===-1){moreLabel=LocaleUtils.tr("search.unknownmore")}if(group.items.length===0){return null}var renderer=resultRenderers[(_group$type=group.type)!==null&&_group$type!==void 0?_group$type:SearchResultType.PLACE];if(!renderer){return null}var priority=priorities[(_group$type2=group.type)!==null&&_group$type2!==void 0?_group$type2:SearchResultType.PLACE];return{priority:priority*1000000+(group.priority||0),title:(_group$title=group.title)!==null&&_group$title!==void 0?_group$title:LocaleUtils.tr(group.titlemsgid),tree:/*#__PURE__*/React.createElement("div",{key:sectionId},/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-title",onClick:function onClick(){return _this.toggleSection(sectionId)},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement(Icon,{icon:_this.isCollapsed(sectionId)?"expand":"collapse"}),/*#__PURE__*/React.createElement("span",null,(_group$title2=group.title)!==null&&_group$title2!==void 0?_group$title2:LocaleUtils.tr(group.titlemsgid))),!_this.isCollapsed(sectionId)?/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-body"},group.items.map(function(entry){return renderer(provider,group,entry)}),moreLabel?/*#__PURE__*/React.createElement("div",{className:"searchbox-more-results"},moreLabel):null):null)}}))},[]).filter(Boolean);results.sort(function(a,b){if(b.priority!==a.priority){return b.priority-a.priority}else{return b.title.localeCompare(a.title)}});return isEmpty(results)?null:results.map(function(entry){return entry.tree})});_defineProperty(_this,"renderPlaceResult",function(provider,group,result){var _result$label;var key=provider+":"+group.id+":"+result.id;return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:key,onClick:function onClick(){_this.selectPlaceResult(provider,group,result);_this.blur()},onMouseDown:MiscUtils.killEvent},result.thumbnail?/*#__PURE__*/React.createElement("img",{className:"searchbox-result-thumbnail",onError:function onError(ev){return _this.loadFallbackResultImage(ev,result)},src:result.thumbnail}):null,/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label",dangerouslySetInnerHTML:{__html:result.text.replace(/<br\s*\/>/ig," ")},title:(_result$label=result.label)!==null&&_result$label!==void 0?_result$label:result.text}),result.externalLink?/*#__PURE__*/React.createElement(Icon,{icon:"info-sign",onClick:function onClick(ev){var _result$label2;MiscUtils.killEvent(ev);_this.openUrl(result.externalLink,result.target,(_result$label2=result.label)!==null&&_result$label2!==void 0?_result$label2:result.text)}}):null)});_defineProperty(_this,"renderThemeLayerResult",function(provider,group,result){var _result$label3,_result$layer;var parent=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var key=provider+":"+group.id+":"+result.id;var addThemes=ConfigUtils.getConfigProp("allowAddingOtherThemes",_this.props.theme);var icon=null;if(result.sublayers){var toggleLayerGroup=function toggleLayerGroup(){_this.setState(function(state){return{expandedLayerGroup:state.expandedLayerGroup===key?null:key}})};icon=/*#__PURE__*/React.createElement(Icon,{className:"searchbox-result-thumbnail",icon:_this.state.expandedLayerGroup===key?"minus":"plus",onClick:function onClick(ev){MiscUtils.killEvent(ev);toggleLayerGroup()}})}else if(result.thumbnail){icon=/*#__PURE__*/React.createElement("img",{className:"searchbox-result-thumbnail",onError:function onError(ev){return _this.loadFallbackResultImage(ev,result)},src:result.thumbnail})}var selectResult=result.theme?_this.selectThemeResult:_this.selectThemeLayerResult;return/*#__PURE__*/React.createElement("div",{key:key},/*#__PURE__*/React.createElement("div",{className:"searchbox-result",onClick:function onClick(){selectResult(provider,group,result);_this.blur()},onMouseDown:MiscUtils.killEvent},icon,result.theme?/*#__PURE__*/React.createElement(Icon,{className:"searchbox-result-openicon",icon:"open"}):null,/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label",dangerouslySetInnerHTML:{__html:result.text.replace(/<br\s*\/>/ig," ")},title:(_result$label3=result.label)!==null&&_result$label3!==void 0?_result$label3:result.text}),result.theme&&addThemes?/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.selectThemeLayerResult(provider,group,result);_this.blur()},title:LocaleUtils.tr("themeswitcher.addtotheme")}):null,result.info?/*#__PURE__*/React.createElement(Icon,{icon:"info-sign",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.toggleLayerInfo(provider,group,result,key,parent)}}):null),_this.state.activeLayerInfo===key?/*#__PURE__*/React.createElement("div",{className:"searchbox-result-abstract",dangerouslySetInnerHTML:{__html:MiscUtils.addLinkAnchors(((_result$layer=result.layer)===null||_result$layer===void 0?void 0:_result$layer["abstract"])||"")||LocaleUtils.tr("search.nodescription")}}):null,_this.state.expandedLayerGroup===key?/*#__PURE__*/React.createElement("div",{className:"searchbox-result-group"},result.sublayers.map(function(sublayer){return _this.renderThemeLayerResult(provider,group,sublayer,result.id)})):null)});_defineProperty(_this,"renderThemeResult",function(provider,group,result){var _result$label4;var addThemes=ConfigUtils.getConfigProp("allowAddingOtherThemes",_this.props.theme);return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:provider+":"+group.id+":"+result.id,onClick:function onClick(){_this.selectThemeResult(provider,group,result);_this.blur()},onMouseDown:MiscUtils.killEvent},result.thumbnail?/*#__PURE__*/React.createElement("img",{className:"searchbox-result-thumbnail",onError:function onError(ev){return _this.loadFallbackResultImage(ev,result)},src:result.thumbnail}):null,/*#__PURE__*/React.createElement(Icon,{className:"searchbox-result-openicon",icon:"open"}),/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label",dangerouslySetInnerHTML:{__html:result.text.replace(/<br\s*\/>/ig," ")},title:(_result$label4=result.label)!==null&&_result$label4!==void 0?_result$label4:result.text}),result.theme&&addThemes?/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.addThemeLayers(result.layer);_this.blur()},title:LocaleUtils.tr("themeswitcher.addtotheme")}):null)});_defineProperty(_this,"selectPlaceResult",function(provider,group,result){var resultText=result.text.replace(/<\/?\w+\s*\/?>/g,"");if(_this.props.searchOptions.showResultInSearchText!==false){// Show selected result text in search field
7
+ */import React from"react";import{connect}from"react-redux";import axios from"axios";import classnames from"classnames";import DOMPurify from"dompurify";import isEmpty from"lodash.isempty";import pointInPolygon from"point-in-polygon";import polygonIntersectTest from"polygon-intersect-test";import PropTypes from"prop-types";import{createSelector}from"reselect";import{v1 as uuidv1}from"uuid";import{LayerRole,addLayerFeatures,addThemeSublayer,changeLayerProperty,removeLayer,addLayer}from"../actions/layers";import{logAction}from"../actions/logging";import{panTo,zoomToExtent,zoomToPoint}from"../actions/map";import{setCurrentSearchResult}from"../actions/search";import{setCurrentTask}from"../actions/task";import{setCurrentTheme}from"../actions/theme";import{openExternalUrl,showNotification}from"../actions/windows";import searchProvidersSelector from"../selectors/searchproviders";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import LayerUtils from"../utils/LayerUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import MiscUtils from"../utils/MiscUtils";import{UrlParams}from"../utils/PermaLinkUtils";import{FulltextSearch,SearchResultType}from"../utils/SearchProviders";import VectorLayerUtils from"../utils/VectorLayerUtils";import Icon from"./Icon";import MapSelection from"./MapSelection";import ButtonBar from"./widgets/ButtonBar";import ComboBox from"./widgets/ComboBox";import InputContainer from"./widgets/InputContainer";import NumberInput from"./widgets/NumberInput";import Spinner from"./widgets/Spinner";import"./style/SearchBox.css";var SearchBox=/*#__PURE__*/function(_React$Component){function SearchBox(props){var _this;_classCallCheck(this,SearchBox);_this=_callSuper(this,SearchBox,[props]);_defineProperty(_this,"state",{searchText:"",searchSession:null,pendingSearches:[],recentSearches:[],searchResults:{},resultsVisible:false,collapsedSections:{},expandedLayerGroup:null,activeLayerInfo:null,filterOptionsVisible:false,selectedProvider:"",filterRegionName:"",filterGeomType:null,filterGeometry:null});_defineProperty(_this,"renderFilterOptions",function(){var _this$state$filterGeo;if(!_this.state.filterOptionsVisible){return null}var providerSelection=/*#__PURE__*/React.createElement(ComboBox,{onChange:function onChange(value){return _this.setState({selectedProvider:value})},value:_this.state.selectedProvider},/*#__PURE__*/React.createElement("div",{value:""},LocaleUtils.tr("search.all")),Object.entries(_this.props.searchProviders).map(function(_ref){var _prov$params,_prov$label;var _ref2=_slicedToArray(_ref,2),key=_ref2[0],prov=_ref2[1];return/*#__PURE__*/React.createElement("div",{key:key,value:key},(prov===null||prov===void 0||(_prov$params=prov.params)===null||_prov$params===void 0?void 0:_prov$params.title)||((_prov$label=prov.label)!==null&&_prov$label!==void 0?_prov$label:LocaleUtils.tr(prov.labelmsgid)))}));var searchRegionSelection=null;var searchRegions=ConfigUtils.getConfigProp("searchFilterRegions",_this.props.theme);if(!isEmpty(searchRegions)){searchRegionSelection=/*#__PURE__*/React.createElement(ComboBox,{onChange:function onChange(value){return _this.setFilterRegion(value,searchRegions)},value:_this.state.filterRegionName},/*#__PURE__*/React.createElement("div",{value:""},LocaleUtils.tr("search.none")),searchRegions.map(function(group,gidx){return[/*#__PURE__*/React.createElement("div",{"data-group-header":gidx,disabled:true,key:"group"+gidx},group.name)].concat(_toConsumableArray(group.items.map(function(item,idx){return/*#__PURE__*/React.createElement("div",{"data-group":gidx,key:item.name,value:gidx+":"+idx+":"+item.name},item.name)})))}))}var filterButtons=[{key:"Polygon",tooltip:LocaleUtils.tr("redlining.polygon"),icon:"polygon",label:LocaleUtils.tr("redlining.polygon")},{key:"Circle",tooltip:LocaleUtils.tr("redlining.circle"),icon:"circle",label:LocaleUtils.tr("redlining.circle")}];return/*#__PURE__*/React.createElement("div",{className:"searchbox-filter-options"},/*#__PURE__*/React.createElement("table",null,/*#__PURE__*/React.createElement("tbody",null,/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("search.providerselection"),":"),/*#__PURE__*/React.createElement("td",null,providerSelection)),/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("search.limittoarea"),":"),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement("div",{className:"searchbox-filter-options-geometry controlgroup"},/*#__PURE__*/React.createElement(ButtonBar,{active:_this.state.filterGeomType,buttons:filterButtons,onClick:_this.setFilterGeomType}),searchRegionSelection,/*#__PURE__*/React.createElement("button",{className:"button",onClick:_this.clearFilter,title:LocaleUtils.tr("search.clearfilter")},/*#__PURE__*/React.createElement(Icon,{icon:"clear"}))))),_this.state.filterGeomType==="Circle"?/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,LocaleUtils.tr("search.circleradius"),":"),/*#__PURE__*/React.createElement("td",null,/*#__PURE__*/React.createElement(NumberInput,{disabled:!_this.state.filterGeometry,min:1,mobile:true,onChange:_this.setCircleRadius,suffix:" m",value:((_this$state$filterGeo=_this.state.filterGeometry)===null||_this$state$filterGeo===void 0?void 0:_this$state$filterGeo.radius)||0}))):null)))});_defineProperty(_this,"setFilterGeomType",function(geomType){_this.setState({filterGeomType:geomType,filterRegionName:"",filterGeometry:null})});_defineProperty(_this,"setFilterRegion",function(value,searchRegions){if(value){var parts=value.split(":");var item=searchRegions[parts[0]].items[parts[1]];var geometry={type:"Polygon",coordinates:[item.coordinates]};var mapGeometry=VectorLayerUtils.reprojectGeometry(geometry,item.crs,_this.props.map.projection);_this.setState({filterGeomType:null,filterRegionName:value,filterGeometry:mapGeometry})}else{_this.setState({filterGeomType:null,filterRegionName:"",filterGeometry:null})}});_defineProperty(_this,"setCircleRadius",function(value){_this.setState(function(state){return{filterGeometry:_objectSpread(_objectSpread({},state.filterGeometry),{},{radius:value})}})});_defineProperty(_this,"clearFilter",function(){_this.setState({filterGeomType:null,filterRegionName:"",filterGeometry:null})});_defineProperty(_this,"renderResultsMenu",function(){if(!_this.state.resultsVisible){return false}var children=[_this.renderRecentResults(),_this.renderFilters(),_this.renderResults()];children=children.filter(function(child){return!isEmpty(child)});if(isEmpty(children)){if(isEmpty(_this.state.pendingSearches)&&_this.state.searchResults.query_text){children=/*#__PURE__*/React.createElement("div",{className:"searchbox-noresults"},LocaleUtils.tr("search.noresults"))}else{return null}}return/*#__PURE__*/React.createElement("div",{className:"searchbox-results",onMouseDown:_this.setPreventBlur,ref:MiscUtils.setupKillTouchEvents},children)});_defineProperty(_this,"renderRecentResults",function(){var recentSearches=_this.state.recentSearches.filter(function(entry){return entry.toLowerCase().includes(_this.state.searchText.toLowerCase())});if(isEmpty(recentSearches)||recentSearches.length===1&&recentSearches[0].toLowerCase()===_this.state.searchText.toLowerCase()){return null}return/*#__PURE__*/React.createElement("div",{key:"recent"},/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-title",onClick:function onClick(){return _this.toggleSection("recent")},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement(Icon,{icon:_this.isCollapsed("recent")?"expand":"collapse"}),LocaleUtils.tr("search.recent")),!_this.isCollapsed("recent")?/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-body"},recentSearches.map(function(entry,idx){return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:"r"+idx,onClick:function onClick(){return _this.searchTextChanged(entry)},onMouseDown:MiscUtils.killEvent},entry)})):null)});_defineProperty(_this,"renderFilters",function(){return Object.entries(_this.state.searchResults).map(function(_ref3){var _ref4=_slicedToArray(_ref3,2),provider=_ref4[0],results=_ref4[1];if(isEmpty(results.result_counts)||results.result_counts.length<2){return null}var collapsed=_this.isCollapsed("filter",false);var values=results.result_counts.map(function(entry){return entry.filterword+": "+_this.state.searchResults.query_text});values.sort(function(a,b){return a.localeCompare(b)});return/*#__PURE__*/React.createElement("div",{key:"filter"},/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-title",onClick:function onClick(){return _this.toggleSection("filter")},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement(Icon,{icon:collapsed?"expand":"collapse"}),LocaleUtils.tr("search.filter")),!collapsed?/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-body"},values.map(function(value,idx){return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:"f"+idx,onClick:function onClick(){return _this.searchTextChanged(value,true,provider)},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label"},value))})):null)}).filter(Boolean)});_defineProperty(_this,"renderResults",function(){var resultRenderers=_defineProperty(_defineProperty(_defineProperty({},SearchResultType.PLACE,_this.renderPlaceResult),SearchResultType.THEMELAYER,_this.renderThemeLayerResult),SearchResultType.THEME,_this.renderThemeResult);var layersBeforePlaces=_this.props.searchOptions.showLayerResultsBeforePlaces;var priorities=_defineProperty(_defineProperty(_defineProperty({},SearchResultType.PLACE,layersBeforePlaces?0:2),SearchResultType.THEMELAYER,layersBeforePlaces?2:1),SearchResultType.THEME,layersBeforePlaces?1:0);var results=Object.keys(_this.props.searchProviders).reduce(function(result,provider){if(!_this.state.searchResults[provider]){return result}return result.concat(_this.state.searchResults[provider].results.map(function(group){var _group$type,_group$type2,_group$title,_group$title2;var sectionId=provider+":"+group.id;var moreLabel=null;if(group.resultCount>0&&group.resultCount>group.items.length){moreLabel=LocaleUtils.tr("search.more",group.resultCount-group.items.length)}else if(group.resultCount===-1){moreLabel=LocaleUtils.tr("search.unknownmore")}if(group.items.length===0){return null}var renderer=resultRenderers[(_group$type=group.type)!==null&&_group$type!==void 0?_group$type:SearchResultType.PLACE];if(!renderer){return null}var priority=priorities[(_group$type2=group.type)!==null&&_group$type2!==void 0?_group$type2:SearchResultType.PLACE];return{priority:priority*1000000+(group.priority||0),title:(_group$title=group.title)!==null&&_group$title!==void 0?_group$title:LocaleUtils.tr(group.titlemsgid),tree:/*#__PURE__*/React.createElement("div",{key:sectionId},/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-title",onClick:function onClick(){return _this.toggleSection(sectionId)},onMouseDown:MiscUtils.killEvent},/*#__PURE__*/React.createElement(Icon,{icon:_this.isCollapsed(sectionId)?"expand":"collapse"}),/*#__PURE__*/React.createElement("span",null,(_group$title2=group.title)!==null&&_group$title2!==void 0?_group$title2:LocaleUtils.tr(group.titlemsgid))),!_this.isCollapsed(sectionId)?/*#__PURE__*/React.createElement("div",{className:"searchbox-results-section-body"},group.items.map(function(entry){return renderer(provider,group,entry)}),moreLabel?/*#__PURE__*/React.createElement("div",{className:"searchbox-more-results"},moreLabel):null):null)}}))},[]).filter(Boolean);results.sort(function(a,b){if(b.priority!==a.priority){return b.priority-a.priority}else{return b.title.localeCompare(a.title)}});return isEmpty(results)?null:results.map(function(entry){return entry.tree})});_defineProperty(_this,"renderPlaceResult",function(provider,group,result){var _result$label;var key=provider+":"+group.id+":"+result.id;return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:key,onClick:function onClick(){_this.selectPlaceResult(provider,group,result);_this.blur()},onMouseDown:MiscUtils.killEvent},result.thumbnail?/*#__PURE__*/React.createElement("img",{className:"searchbox-result-thumbnail",onError:function onError(ev){return _this.loadFallbackResultImage(ev,result)},src:result.thumbnail}):null,/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label",dangerouslySetInnerHTML:{__html:DOMPurify.sanitize(result.text).replace(/<br\s*\/>/ig," ")},title:(_result$label=result.label)!==null&&_result$label!==void 0?_result$label:result.text}),result.externalLink?/*#__PURE__*/React.createElement(Icon,{icon:"info-sign",onClick:function onClick(ev){var _result$label2;MiscUtils.killEvent(ev);_this.openUrl(result.externalLink,result.target,(_result$label2=result.label)!==null&&_result$label2!==void 0?_result$label2:result.text)}}):null)});_defineProperty(_this,"renderThemeLayerResult",function(provider,group,result){var _result$label3,_result$layer;var parent=arguments.length>3&&arguments[3]!==undefined?arguments[3]:null;var key=provider+":"+group.id+":"+result.id;var addThemes=ConfigUtils.getConfigProp("allowAddingOtherThemes",_this.props.theme);var icon=null;if(result.sublayers){var toggleLayerGroup=function toggleLayerGroup(){_this.setState(function(state){return{expandedLayerGroup:state.expandedLayerGroup===key?null:key}})};icon=/*#__PURE__*/React.createElement(Icon,{className:"searchbox-result-thumbnail",icon:_this.state.expandedLayerGroup===key?"minus":"plus",onClick:function onClick(ev){MiscUtils.killEvent(ev);toggleLayerGroup()}})}else if(result.thumbnail){icon=/*#__PURE__*/React.createElement("img",{className:"searchbox-result-thumbnail",onError:function onError(ev){return _this.loadFallbackResultImage(ev,result)},src:result.thumbnail})}var selectResult=result.theme?_this.selectThemeResult:_this.selectThemeLayerResult;return/*#__PURE__*/React.createElement("div",{key:key},/*#__PURE__*/React.createElement("div",{className:"searchbox-result",onClick:function onClick(){selectResult(provider,group,result);_this.blur()},onMouseDown:MiscUtils.killEvent},icon,result.theme?/*#__PURE__*/React.createElement(Icon,{className:"searchbox-result-openicon",icon:"open"}):null,/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label",dangerouslySetInnerHTML:{__html:DOMPurify.sanitize(result.text).replace(/<br\s*\/>/ig," ")},title:(_result$label3=result.label)!==null&&_result$label3!==void 0?_result$label3:result.text}),result.theme&&addThemes?/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.selectThemeLayerResult(provider,group,result);_this.blur()},title:LocaleUtils.tr("themeswitcher.addtotheme")}):null,result.info?/*#__PURE__*/React.createElement(Icon,{icon:"info-sign",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.toggleLayerInfo(provider,group,result,key,parent)}}):null),_this.state.activeLayerInfo===key?/*#__PURE__*/React.createElement("div",{className:"searchbox-result-abstract",dangerouslySetInnerHTML:{__html:MiscUtils.addLinkAnchors(DOMPurify.sanitize(((_result$layer=result.layer)===null||_result$layer===void 0?void 0:_result$layer["abstract"])||""))||LocaleUtils.tr("search.nodescription")}}):null,_this.state.expandedLayerGroup===key?/*#__PURE__*/React.createElement("div",{className:"searchbox-result-group"},result.sublayers.map(function(sublayer){return _this.renderThemeLayerResult(provider,group,sublayer,result.id)})):null)});_defineProperty(_this,"renderThemeResult",function(provider,group,result){var _result$label4;var addThemes=ConfigUtils.getConfigProp("allowAddingOtherThemes",_this.props.theme);return/*#__PURE__*/React.createElement("div",{className:"searchbox-result",key:provider+":"+group.id+":"+result.id,onClick:function onClick(){_this.selectThemeResult(provider,group,result);_this.blur()},onMouseDown:MiscUtils.killEvent},result.thumbnail?/*#__PURE__*/React.createElement("img",{className:"searchbox-result-thumbnail",onError:function onError(ev){return _this.loadFallbackResultImage(ev,result)},src:result.thumbnail}):null,/*#__PURE__*/React.createElement(Icon,{className:"searchbox-result-openicon",icon:"open"}),/*#__PURE__*/React.createElement("span",{className:"searchbox-result-label",dangerouslySetInnerHTML:{__html:DOMPurify.sanitize(result.text).replace(/<br\s*\/>/ig," ")},title:(_result$label4=result.label)!==null&&_result$label4!==void 0?_result$label4:result.text}),result.theme&&addThemes?/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(ev){MiscUtils.killEvent(ev);_this.addThemeLayers(result.layer);_this.blur()},title:LocaleUtils.tr("themeswitcher.addtotheme")}):null)});_defineProperty(_this,"selectPlaceResult",function(provider,group,result){var resultText=result.text.replace(/<\/?\w+\s*\/?>/g,"");if(_this.props.searchOptions.showResultInSearchText!==false){// Show selected result text in search field
8
8
  _this.setState({searchText:resultText,searchResults:_defineProperty({query_text:resultText},provider,{results:[_objectSpread(_objectSpread({},group),{},{items:[result]})],tot_result_count:1})})}_this.updateRecentSearches();if(result.geometry){_this.showResultGeometry(result,{feature:{type:"Feature",geometry:result.geometry},crs:result.crs})}else if(_this.props.searchProviders[provider].getResultGeometry){_this.props.searchProviders[provider].getResultGeometry(result,function(response){_this.showResultGeometry(result,response)},axios)}else{// Display marker
9
9
  _this.showResultGeometry(result,{feature:{type:"Feature",geometry:{type:"Point",coordinates:[result.x,result.y]}},crs:result.crs})}if(result.dataproduct_id){var quot=typeof result.id==="string"?"\"":"";var filter="[[\"".concat(result.id_field_name,"\",\"=\", ").concat(quot).concat(result.id).concat(quot,"]]");UrlParams.updateParams({hp:result.dataproduct_id,hf:filter,st:resultText})}else{UrlParams.updateParams({hp:undefined,hf:undefined,st:resultText})}_this.props.logAction("SEARCH_TEXT",{searchText:_this.state.searchText});_this.props.logAction("SEARCH_RESULT_SELECTED",{place:resultText});// Enable layer
10
10
  if(result.layername){var path=[];var sublayer=null;var layer=_this.props.layers.find(function(l){return l.role===LayerRole.THEME&&(sublayer=LayerUtils.searchSubLayer(l,"name",result.layername,path))});if(layer&&sublayer){_this.props.changeLayerProperty(layer.id,"visibility",true,path,"both")}}});_defineProperty(_this,"selectThemeLayerResult",function(provider,group,result){if(result.layer){if(result.theme){_this.addThemeLayers(result.layer)}else{_this.props.addThemeSublayer(result.layer)}// Show layer tree to notify user that something has happened
@@ -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{connect}from"react-redux";import PropTypes from"prop-types";import{setActiveServiceInfo}from"../actions/serviceinfo";import ResizeableWindow from"../components/ResizeableWindow";import LocaleUtils from"../utils/LocaleUtils";import MiscUtils from"../utils/MiscUtils";import"./style/ServiceInfoWindow.css";var ServiceInfoWindow=/*#__PURE__*/function(_React$Component){function ServiceInfoWindow(){var _this;_classCallCheck(this,ServiceInfoWindow);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,ServiceInfoWindow,[].concat(args));_defineProperty(_this,"renderRow",function(title,content){var html=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;if(content){return/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,title,":"),html?/*#__PURE__*/React.createElement("td",{dangerouslySetInnerHTML:{__html:MiscUtils.addLinkAnchors(content)}}):/*#__PURE__*/React.createElement("td",null,content))}return null});_defineProperty(_this,"onClose",function(){_this.props.setActiveServiceInfo(null)});return _this}_inherits(ServiceInfoWindow,_React$Component);return _createClass(ServiceInfoWindow,[{key:"renderLink",value:function renderLink(text,url){if(url){return/*#__PURE__*/React.createElement("a",{href:url,rel:"noreferrer",target:"_blank"},text)}else if(text){return text}return null}},{key:"render",value:function render(){var _this$props$service$c,_this$props$service$c2,_this$props$service$c3,_this$props$service$c4,_this$props$service$c5;if(!this.props.service){return null}return/*#__PURE__*/React.createElement(ResizeableWindow,{icon:"info-sign",initialHeight:this.props.layerInfoGeometry.initialHeight,initialWidth:this.props.layerInfoGeometry.initialWidth,initialX:this.props.layerInfoGeometry.initialX,initialY:this.props.layerInfoGeometry.initialY,initiallyDocked:this.props.layerInfoGeometry.initiallyDocked,onClose:this.onClose,title:LocaleUtils.tr("serviceinfo.title")},/*#__PURE__*/React.createElement("div",{className:"service-info-window-body",role:"body"},/*#__PURE__*/React.createElement("h4",{className:"service-info-window-title"},this.props.service.title),/*#__PURE__*/React.createElement("div",{className:"service-info-window-frame"},/*#__PURE__*/React.createElement("table",{className:"service-info-window-table"},/*#__PURE__*/React.createElement("tbody",null,this.renderRow(LocaleUtils.tr("serviceinfo.abstract"),this.props.service["abstract"],true),this.renderRow(LocaleUtils.tr("serviceinfo.keywords"),this.props.service.keywords),this.renderRow(LocaleUtils.tr("serviceinfo.onlineResource"),this.renderLink(this.props.service.onlineResource,this.props.service.onlineResource)),this.renderRow(LocaleUtils.tr("serviceinfo.contactPerson"),(_this$props$service$c=this.props.service.contact)===null||_this$props$service$c===void 0?void 0:_this$props$service$c.person),this.renderRow(LocaleUtils.tr("serviceinfo.contactOrganization"),(_this$props$service$c2=this.props.service.contact)===null||_this$props$service$c2===void 0?void 0:_this$props$service$c2.organization),this.renderRow(LocaleUtils.tr("serviceinfo.contactPosition"),(_this$props$service$c3=this.props.service.contact)===null||_this$props$service$c3===void 0?void 0:_this$props$service$c3.position),this.renderRow(LocaleUtils.tr("serviceinfo.contactPhone"),(_this$props$service$c4=this.props.service.contact)===null||_this$props$service$c4===void 0?void 0:_this$props$service$c4.phone),this.renderRow(LocaleUtils.tr("serviceinfo.contactEmail"),(_this$props$service$c5=this.props.service.contact)===null||_this$props$service$c5===void 0?void 0:_this$props$service$c5.email))))))}}])}(React.Component);_defineProperty(ServiceInfoWindow,"propTypes",{layerInfoGeometry:PropTypes.object,service:PropTypes.object,setActiveServiceInfo:PropTypes.func});var selector=function selector(state){return{service:state.serviceinfo.service}};export default connect(selector,{setActiveServiceInfo:setActiveServiceInfo})(ServiceInfoWindow);
7
+ */import React from"react";import{connect}from"react-redux";import DOMPurify from"dompurify";import PropTypes from"prop-types";import{setActiveServiceInfo}from"../actions/serviceinfo";import ResizeableWindow from"../components/ResizeableWindow";import LocaleUtils from"../utils/LocaleUtils";import MiscUtils from"../utils/MiscUtils";import"./style/ServiceInfoWindow.css";var ServiceInfoWindow=/*#__PURE__*/function(_React$Component){function ServiceInfoWindow(){var _this;_classCallCheck(this,ServiceInfoWindow);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,ServiceInfoWindow,[].concat(args));_defineProperty(_this,"renderRow",function(title,content){var html=arguments.length>2&&arguments[2]!==undefined?arguments[2]:false;if(content){return/*#__PURE__*/React.createElement("tr",null,/*#__PURE__*/React.createElement("td",null,title,":"),html?/*#__PURE__*/React.createElement("td",{dangerouslySetInnerHTML:{__html:MiscUtils.addLinkAnchors(DOMPurify.sanitize(content))}}):/*#__PURE__*/React.createElement("td",null,content))}return null});_defineProperty(_this,"onClose",function(){_this.props.setActiveServiceInfo(null)});return _this}_inherits(ServiceInfoWindow,_React$Component);return _createClass(ServiceInfoWindow,[{key:"renderLink",value:function renderLink(text,url){if(url){return/*#__PURE__*/React.createElement("a",{href:url,rel:"noreferrer",target:"_blank"},text)}else if(text){return text}return null}},{key:"render",value:function render(){var _this$props$service$c,_this$props$service$c2,_this$props$service$c3,_this$props$service$c4,_this$props$service$c5;if(!this.props.service){return null}return/*#__PURE__*/React.createElement(ResizeableWindow,{icon:"info-sign",initialHeight:this.props.layerInfoGeometry.initialHeight,initialWidth:this.props.layerInfoGeometry.initialWidth,initialX:this.props.layerInfoGeometry.initialX,initialY:this.props.layerInfoGeometry.initialY,initiallyDocked:this.props.layerInfoGeometry.initiallyDocked,onClose:this.onClose,title:LocaleUtils.tr("serviceinfo.title")},/*#__PURE__*/React.createElement("div",{className:"service-info-window-body",role:"body"},/*#__PURE__*/React.createElement("h4",{className:"service-info-window-title"},this.props.service.title),/*#__PURE__*/React.createElement("div",{className:"service-info-window-frame"},/*#__PURE__*/React.createElement("table",{className:"service-info-window-table"},/*#__PURE__*/React.createElement("tbody",null,this.renderRow(LocaleUtils.tr("serviceinfo.abstract"),this.props.service["abstract"],true),this.renderRow(LocaleUtils.tr("serviceinfo.keywords"),this.props.service.keywords),this.renderRow(LocaleUtils.tr("serviceinfo.onlineResource"),this.renderLink(this.props.service.onlineResource,this.props.service.onlineResource)),this.renderRow(LocaleUtils.tr("serviceinfo.contactPerson"),(_this$props$service$c=this.props.service.contact)===null||_this$props$service$c===void 0?void 0:_this$props$service$c.person),this.renderRow(LocaleUtils.tr("serviceinfo.contactOrganization"),(_this$props$service$c2=this.props.service.contact)===null||_this$props$service$c2===void 0?void 0:_this$props$service$c2.organization),this.renderRow(LocaleUtils.tr("serviceinfo.contactPosition"),(_this$props$service$c3=this.props.service.contact)===null||_this$props$service$c3===void 0?void 0:_this$props$service$c3.position),this.renderRow(LocaleUtils.tr("serviceinfo.contactPhone"),(_this$props$service$c4=this.props.service.contact)===null||_this$props$service$c4===void 0?void 0:_this$props$service$c4.phone),this.renderRow(LocaleUtils.tr("serviceinfo.contactEmail"),(_this$props$service$c5=this.props.service.contact)===null||_this$props$service$c5===void 0?void 0:_this$props$service$c5.email))))))}}])}(React.Component);_defineProperty(ServiceInfoWindow,"propTypes",{layerInfoGeometry:PropTypes.object,service:PropTypes.object,setActiveServiceInfo:PropTypes.func});var selector=function selector(state){return{service:state.serviceinfo.service}};export default connect(selector,{setActiveServiceInfo:setActiveServiceInfo})(ServiceInfoWindow);
@@ -5,5 +5,5 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
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
7
  */import React from"react";import{connect}from"react-redux";import classnames from"classnames";import PropTypes from"prop-types";import{setCurrentTask}from"../actions/task";import Icon from"./Icon";import{Swipeable}from"./Swipeable";import"./style/SideBar.css";var SideBar=/*#__PURE__*/function(_React$Component){function SideBar(props){var _this;_classCallCheck(this,SideBar);_this=_callSuper(this,SideBar,[props]);_defineProperty(_this,"state",{render:false});_defineProperty(_this,"closeClicked",function(){if(_this.props.currentTask.id===_this.props.id){_this.props.setCurrentTask(null)}});_defineProperty(_this,"renderRole",function(role){var children=typeof _this.props.children==="function"?_this.props.children():React.Children.toArray(_this.props.children).reduce(function(res,child){return _objectSpread(_objectSpread({},res),{},_defineProperty({},child.props.role,child))},{});return children[role]});_defineProperty(_this,"setRef",function(el){_this.sidebar=el});_defineProperty(_this,"startSidebarResize",function(ev){var startWidth=_this.sidebar.offsetWidth;var startMouseX=ev.clientX;var sign=_this.props.side==="left"?-1:1;var resizeSidebar=function resizeSidebar(event){_this.sidebar.style.width=startWidth+sign*(startMouseX-event.clientX)+"px"};ev.view.document.body.style.userSelect="none";ev.view.addEventListener("pointermove",resizeSidebar);ev.view.addEventListener("pointerup",function(){ev.view.document.body.style.userSelect="";ev.view.removeEventListener("pointermove",resizeSidebar)},{once:true})});_defineProperty(_this,"startSidebarBottomResize",function(ev){var startHeight=_this.sidebar.offsetHeight;var startMouseY=ev.clientY;var resizeSidebar=function resizeSidebar(event){_this.sidebar.style.height=Math.max(64,startHeight+(event.clientY-startMouseY))+"px"};ev.view.document.body.style.userSelect="none";ev.view.addEventListener("pointermove",resizeSidebar);ev.view.addEventListener("pointerup",function(){ev.view.document.body.style.userSelect="";ev.view.removeEventListener("pointermove",resizeSidebar)},{once:true})});_this.state.render=props.currentTask&&props.currentTask.id===props.id;_this.sidebar=null;return _this}_inherits(SideBar,_React$Component);return _createClass(SideBar,[{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){var _this2=this;var newVisible=this.props.currentTask&&this.props.currentTask.id===this.props.id;var oldVisible=prevProps.currentTask&&prevProps.currentTask.id===prevProps.id;if(newVisible&&(!oldVisible||this.props.currentTask.mode!==prevProps.currentTask.mode)){this.setState({render:true});this.props.onShow(this.props.currentTask.mode)}else if(!newVisible&&oldVisible){this.props.onHide();// Hide the element after the transition period (see SideBar.css)
8
- setTimeout(function(){_this2.setState({render:false})},300)}if(!this.props.heightResizeable&&prevProps.heightResizeable){this.sidebar.style.height=""}}},{key:"render",value:function render(){var visible=this.props.currentTask.id===this.props.id;var render=visible||this.state.render;var style={width:this.props.width,minWidth:this.props.minWidth,zIndex:visible?5:4,maxWidth:"calc(100vw - "+this.props.windowMargins.left+"px - "+this.props.windowMargins.right+"px)"};var isLeftSide=this.props.side==="left";if(isLeftSide){style.left=visible?this.props.menuMargins.left:0}else{style.right=visible?this.props.menuMargins.right:0}var classes=classnames({"sidebar":true,"sidebar-open":visible,"sidebar-left":isLeftSide,"sidebar-right":!isLeftSide});var closeIcon=isLeftSide?"chevron-left":"chevron-right";var body=null;var extra=null;if(render){body=this.renderRole("body");extra=this.renderRole("extra")}return/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement(Swipeable,{delta:30,onSwipedRight:this.closeClicked},/*#__PURE__*/React.createElement("div",{className:"".concat(classes," ").concat(this.props.extraClasses),id:this.props.id,ref:this.setRef,style:style},/*#__PURE__*/React.createElement("div",{className:"sidebar-resize-handle sidebar-resize-handle-"+this.props.side,onPointerDown:this.startSidebarResize}),/*#__PURE__*/React.createElement("div",{className:"sidebar-titlebar"},this.state.render?this.props.extraBeforeContent:null,/*#__PURE__*/React.createElement(Icon,{className:"sidebar-titlebar-icon",icon:this.props.icon,size:"large"}),/*#__PURE__*/React.createElement("span",{className:"sidebar-titlebar-title"},this.props.title),this.state.render?this.props.extraTitlebarContent:null,/*#__PURE__*/React.createElement("span",{className:"sidebar-titlebar-spacer"}),/*#__PURE__*/React.createElement(Icon,{className:"sidebar-titlebar-closeicon",icon:closeIcon,onClick:this.closeClicked})),/*#__PURE__*/React.createElement("div",{className:"sidebar-body"},body),this.props.heightResizeable?/*#__PURE__*/React.createElement("div",{className:"sidebar-resize-handle-bottom",onPointerDown:this.startSidebarBottomResize}):null)),extra)}}])}(React.Component);_defineProperty(SideBar,"propTypes",{children:PropTypes.oneOfType([PropTypes.node,PropTypes.func]),currentTask:PropTypes.object,extraBeforeContent:PropTypes.object,extraClasses:PropTypes.string,extraTitlebarContent:PropTypes.object,heightResizeable:PropTypes.bool,icon:PropTypes.string,id:PropTypes.string.isRequired,menuMargins:PropTypes.object,minWidth:PropTypes.string,onHide:PropTypes.func,onShow:PropTypes.func,setCurrentTask:PropTypes.func,side:PropTypes.string,title:PropTypes.string,width:PropTypes.string,windowMargins:PropTypes.object});_defineProperty(SideBar,"defaultProps",{extraClasses:"",onShow:function onShow(){},onHide:function onHide(){},width:"15em",minWidth:"15em",// allowed values are 'left' and 'right'
9
- side:"right"});export default connect(function(state){return{currentTask:state.task,menuMargins:state.windows.menuMargins,windowMargins:state.windows.windowMargins}},{setCurrentTask:setCurrentTask})(SideBar);
8
+ setTimeout(function(){_this2.setState({render:false})},300)}if(!this.props.heightResizeable&&prevProps.heightResizeable){this.sidebar.style.height=""}}},{key:"render",value:function render(){var visible=this.props.currentTask.id===this.props.id;var render=visible||this.state.render;var marginLeft=this.props.mapMargins.left+this.props.mapMargins.outerLeft;var marginRight=this.props.mapMargins.right+this.props.mapMargins.outerRight;var style={width:this.props.width,minWidth:this.props.minWidth,zIndex:visible?5:4,maxWidth:"calc(100vw - "+marginLeft+"px - "+marginRight+"px)"};var isLeftSide=this.props.side==="left";if(isLeftSide){style.left=visible?this.props.mapMargins.left+this.props.mapMargins.outerLeft:0}else{style.right=visible?this.props.mapMargins.right+this.props.mapMargins.outerRight:0}var classes=classnames({"sidebar":true,"sidebar-open":visible,"sidebar-left":isLeftSide,"sidebar-right":!isLeftSide});var closeIcon=isLeftSide?"chevron-left":"chevron-right";var body=null;var extra=null;if(render){body=this.renderRole("body");extra=this.renderRole("extra")}return/*#__PURE__*/React.createElement("div",null,/*#__PURE__*/React.createElement(Swipeable,{delta:30,onSwipedRight:this.closeClicked},/*#__PURE__*/React.createElement("div",{className:"".concat(classes," ").concat(this.props.extraClasses),id:this.props.id,ref:this.setRef,style:style},/*#__PURE__*/React.createElement("div",{className:"sidebar-resize-handle sidebar-resize-handle-"+this.props.side,onPointerDown:this.startSidebarResize}),/*#__PURE__*/React.createElement("div",{className:"sidebar-titlebar"},this.state.render?this.props.extraBeforeContent:null,/*#__PURE__*/React.createElement(Icon,{className:"sidebar-titlebar-icon",icon:this.props.icon,size:"large"}),/*#__PURE__*/React.createElement("span",{className:"sidebar-titlebar-title"},this.props.title),this.state.render?this.props.extraTitlebarContent:null,/*#__PURE__*/React.createElement("span",{className:"sidebar-titlebar-spacer"}),/*#__PURE__*/React.createElement(Icon,{className:"sidebar-titlebar-closeicon",icon:closeIcon,onClick:this.closeClicked})),/*#__PURE__*/React.createElement("div",{className:"sidebar-body"},body),this.props.heightResizeable?/*#__PURE__*/React.createElement("div",{className:"sidebar-resize-handle-bottom",onPointerDown:this.startSidebarBottomResize}):null)),extra)}}])}(React.Component);_defineProperty(SideBar,"propTypes",{children:PropTypes.oneOfType([PropTypes.node,PropTypes.func]),currentTask:PropTypes.object,extraBeforeContent:PropTypes.object,extraClasses:PropTypes.string,extraTitlebarContent:PropTypes.object,heightResizeable:PropTypes.bool,icon:PropTypes.string,id:PropTypes.string.isRequired,mapMargins:PropTypes.object,minWidth:PropTypes.string,onHide:PropTypes.func,onShow:PropTypes.func,setCurrentTask:PropTypes.func,side:PropTypes.string,title:PropTypes.string,width:PropTypes.string});_defineProperty(SideBar,"defaultProps",{extraClasses:"",onShow:function onShow(){},onHide:function onHide(){},width:"15em",minWidth:"15em",// allowed values are 'left' and 'right'
9
+ side:"right"});export default connect(function(state){return{currentTask:state.task,mapMargins:state.windows.mapMargins}},{setCurrentTask:setCurrentTask})(SideBar);
@@ -5,26 +5,22 @@ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof
5
5
  *
6
6
  * This source code is licensed under the BSD-style license found in the
7
7
  * LICENSE file in the root directory of this source tree.
8
- */import React from"react";import{Provider,connect}from"react-redux";import axios from"axios";import deepmerge from"deepmerge";import{register as olProj4Register}from"ol/proj/proj4";import Proj4js from"proj4";import PropTypes from"prop-types";import{localConfigLoaded,setStartupParameters,setColorScheme}from"../actions/localConfig";import{loadLocale}from"../actions/locale";import{setCurrentTask}from"../actions/task";import{themesLoaded,setCurrentTheme}from"../actions/theme";import{NotificationType,showNotification,setBottombarHeight,setTopbarHeight}from"../actions/windows";import ReducerIndex from"../reducers/index";import{createStore}from"../stores/StandardStore";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import MiscUtils from"../utils/MiscUtils";import{UrlParams,resolvePermaLink}from"../utils/PermaLinkUtils";import ThemeUtils from"../utils/ThemeUtils";import PluginsContainer from"./PluginsContainer";import"./style/App.css";import"./style/DefaultColorScheme.css";var CSRF_TOKEN=MiscUtils.getCsrfToken();if(CSRF_TOKEN){axios.interceptors.request.use(function(config){if(["POST","PUT","PATCH","DELETE"].includes(config.method.toUpperCase())){config.headers["X-CSRF-TOKEN"]=CSRF_TOKEN}return config},function(error){return Promise.reject(error)})}var AppContainerComponent=/*#__PURE__*/function(_React$Component){function AppContainerComponent(props){var _this;_classCallCheck(this,AppContainerComponent);_this=_callSuper(this,AppContainerComponent,[props]);_defineProperty(_this,"loadThemes",function(){_this.themesLoaded=true;var _this$props$startupCo=_this.props.startupConfig,state=_this$props$startupCo.state,permalinkInvalid=_this$props$startupCo.permalinkInvalid;var params=_objectSpread({},_this.props.startupConfig.params);// Clone as changed below
8
+ */import React from"react";import{Provider,connect}from"react-redux";import axios from"axios";import deepmerge from"deepmerge";import{register as olProj4Register}from"ol/proj/proj4";import Proj4js from"proj4";import PropTypes from"prop-types";import{localConfigLoaded,setStartupParameters,setColorScheme}from"../actions/localConfig";import{changeLocale}from"../actions/locale";import{setCurrentTask}from"../actions/task";import{themesLoaded,setCurrentTheme}from"../actions/theme";import{NotificationType,showNotification,setBottombarHeight,setTopbarHeight}from"../actions/windows";import ReducerIndex from"../reducers/index";import{createStore}from"../stores/StandardStore";import ConfigUtils from"../utils/ConfigUtils";import CoordinatesUtils from"../utils/CoordinatesUtils";import LocaleUtils from"../utils/LocaleUtils";import MapUtils from"../utils/MapUtils";import MiscUtils from"../utils/MiscUtils";import{UrlParams,resolvePermaLink}from"../utils/PermaLinkUtils";import PluginStore from"../utils/PluginStore";import ThemeUtils from"../utils/ThemeUtils";import PluginsContainer from"./PluginsContainer";import"./style/App.css";import"./style/DefaultColorScheme.css";var CSRF_TOKEN=MiscUtils.getCsrfToken();if(CSRF_TOKEN){axios.interceptors.request.use(function(config){if(["POST","PUT","PATCH","DELETE"].includes(config.method.toUpperCase())){config.headers["X-CSRF-TOKEN"]=CSRF_TOKEN}return config},function(error){return Promise.reject(error)})}var AppContainerComponent=/*#__PURE__*/function(_React$Component){function AppContainerComponent(props){var _this;_classCallCheck(this,AppContainerComponent);_this=_callSuper(this,AppContainerComponent,[props]);_defineProperty(_this,"loadThemes",function(){_this.themesLoaded=true;var _this$props$startupCo=_this.props.startupConfig,state=_this$props$startupCo.state,permalinkInvalid=_this$props$startupCo.permalinkInvalid;var params=_objectSpread({},_this.props.startupConfig.params);// Clone as changed below
9
9
  // Warn if permalink key is invalid
10
10
  if(permalinkInvalid){_this.props.showNotification("missingtheme",LocaleUtils.tr("app.missingpermalink"),NotificationType.WARN,true)}// Load themes.json
11
11
  axios.get("themes.json").then(function(response){var _this$props$appConfig,_this$props$appConfig2,_theme;var themes=response.data.themes||{};(_this$props$appConfig=(_this$props$appConfig2=_this.props.appConfig).themePreprocessor)===null||_this$props$appConfig===void 0||_this$props$appConfig.call(_this$props$appConfig2,themes);_this.props.themesLoaded(themes);var theme=ThemeUtils.getThemeById(themes,params.t);if((!theme||theme.restricted)&&!ConfigUtils.getConfigProp("dontLoadDefaultTheme")){if(params.t){_this.props.showNotification("missingtheme",LocaleUtils.tr("app.missingtheme",params.t),NotificationType.WARN,true);params.l=undefined}var defaultTheme=Object.fromEntries(_this.props.defaultUrlParams.split("&").map(function(x){return x.split("=")})).t||themes.defaultTheme;theme=ThemeUtils.getThemeById(themes,defaultTheme);params.t=defaultTheme}if(theme){var _params$bl;// Compute initial view
12
12
  var initialView=params.v;var initialExtent=null;if(params.c&&params.s!==undefined){var coords=params.c.split(/[;,]/g).map(function(x){return parseFloat(x)||0});var scales=theme.scales||themes.defaultScales;var zoom=MapUtils.computeZoom(scales,params.s);if(coords.length===2){var p=CoordinatesUtils.reproject(coords,params.crs||theme.mapCrs,theme.bbox.crs);var bounds=theme.bbox.bounds;// Only accept c if it is within the theme bounds
13
13
  if(bounds[0]<=p[0]&&p[0]<=bounds[2]&&bounds[1]<=p[1]&&p[1]<=bounds[3]){initialExtent={center:coords,zoom:zoom,crs:params.crs||theme.mapCrs}}else{initialExtent={center:[0.5*(bounds[0]+bounds[2]),0.5*(bounds[1]+bounds[3])],zoom:zoom,crs:theme.bbox.crs}}}}else if(params.e){var _bounds=params.e.split(/[;,]/g).map(function(x){return parseFloat(x)||0});if(CoordinatesUtils.isValidExtent(_bounds)){initialExtent={bounds:_bounds,crs:params.crs||theme.mapCrs}}}var layerParams=params.l!==undefined?params.l.split(",").filter(function(entry){return entry}):null;if(layerParams&&ConfigUtils.getConfigProp("urlReverseLayerOrder")){layerParams.reverse()}_this.props.setCurrentTheme(theme,themes,false,initialExtent,layerParams,(_params$bl=params.bl)!==null&&_params$bl!==void 0?_params$bl:null,state.layers,_this.props.appConfig.themeLayerRestorer,_this.props.appConfig.externalLayerRestorer,initialView)}var task=ConfigUtils.getConfigProp("startupTask");if(task&&!((_theme=theme)!==null&&_theme!==void 0&&(_theme=_theme.config)!==null&&_theme!==void 0&&_theme.startupTask)){var mapClickAction=ConfigUtils.getPluginConfig(task.key).mapClickAction;_this.props.setCurrentTask(task.key,task.mode,mapClickAction)}})});_this.themesLoaded=false;// Set initial bottom/topbar height to zero in case not topbar/bottombar is enabled
14
14
  // The components will set the proper height if and when initialized
15
- props.setTopbarHeight(0);props.setBottombarHeight(0);return _this}_inherits(AppContainerComponent,_React$Component);return _createClass(AppContainerComponent,[{key:"componentDidMount",value:function componentDidMount(){var _this2=this;window.addEventListener("QWC2ApiReady",function(){var _window$qwc;// Warn about non-existing plugins
16
- var plugins=_objectSpread(_objectSpread({},_this2.props.appConfig.pluginsDef.plugins),(_window$qwc=window.qwc2)===null||_window$qwc===void 0?void 0:_window$qwc.__customPlugins);var mode=ConfigUtils.isMobile()?"mobile":"desktop";_this2.props.localConfig.plugins[mode].filter(function(entry){return!plugins[entry.name+"Plugin"]}).forEach(function(entry){// eslint-disable-next-line
17
- console.warn("Non-existing plugin: "+entry.name)})})}},{key:"componentDidUpdate",value:function componentDidUpdate(){// The map component needs to have finished loading before theme initialization can proceed
18
- if(this.props.haveMapSize&&!this.themesLoaded){this.loadThemes()}}},{key:"render",value:function render(){var _window$qwc2;// Ensure translations and config are loaded
19
- if(!this.props.haveLocale||!this.props.localConfig.plugins||!this.props.localConfig.startupParams){return null}var plugins=_objectSpread(_objectSpread({},this.props.appConfig.pluginsDef.plugins),(_window$qwc2=window.qwc2)===null||_window$qwc2===void 0?void 0:_window$qwc2.__customPlugins);var pluginsConfig=this.props.localConfig.plugins;var appPluginConfig=_objectSpread({},this.props.appConfig.pluginsDef.cfg);// Inject plugins available in 3d view to View3D plugin configuration
20
- appPluginConfig.View3DPlugin=_objectSpread(_objectSpread({},appPluginConfig.View3DPlugin),{},{plugins:Object.entries(plugins).reduce(function(res,_ref){var _plugin$WrappedCompon;var _ref2=_slicedToArray(_ref,2),key=_ref2[0],plugin=_ref2[1];if((_plugin$WrappedCompon=plugin.WrappedComponent)!==null&&_plugin$WrappedCompon!==void 0&&_plugin$WrappedCompon.availableIn3D||plugin.availableIn3D){return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,plugin))}return res},{})});return/*#__PURE__*/React.createElement(PluginsContainer,{plugins:plugins,pluginsAppConfig:appPluginConfig,pluginsConfig:pluginsConfig})}}])}(React.Component);_defineProperty(AppContainerComponent,"propTypes",{appConfig:PropTypes.object,defaultUrlParams:PropTypes.string,haveLocale:PropTypes.bool,haveMapSize:PropTypes.bool,localConfig:PropTypes.object,setBottombarHeight:PropTypes.func,setCurrentTask:PropTypes.func,setCurrentTheme:PropTypes.func,setTopbarHeight:PropTypes.func,showNotification:PropTypes.func,startupConfig:PropTypes.object,themesLoaded:PropTypes.func});var AppContainer=connect(function(state){var _state$localConfig$us;return{customPlugins:state.localConfig.customPlugins,// Unused, just to ensure component reacts when custom plugins change
21
- haveLocale:state.locale.current!==null,haveMapSize:state.map.size!==null,defaultUrlParams:((_state$localConfig$us=state.localConfig.user_infos)===null||_state$localConfig$us===void 0?void 0:_state$localConfig$us.default_url_params)||"",localConfig:state.localConfig}},{themesLoaded:themesLoaded,setCurrentTask:setCurrentTask,setCurrentTheme:setCurrentTheme,showNotification:showNotification,setTopbarHeight:setTopbarHeight,setBottombarHeight:setBottombarHeight})(AppContainerComponent);var StandardApp=/*#__PURE__*/function(_React$Component2){function StandardApp(props){var _this3;_classCallCheck(this,StandardApp);_this3=_callSuper(this,StandardApp,[props]);_defineProperty(_this3,"state",{startupConfig:null});_defineProperty(_this3,"computeVh",function(){// https://css-tricks.com/the-trick-to-viewport-units-on-mobile/
22
- document.documentElement.style.setProperty("--vh",window.innerHeight*0.01+"px")});_defineProperty(_this3,"init",function(){// Save initial params and clear URL
23
- var initialParams=UrlParams.getParams();UrlParams.clear();// Load config.json
24
- var configParams=Object.entries(initialParams).reduce(function(res,_ref3){var _ref4=_slicedToArray(_ref3,2),key=_ref4[0],value=_ref4[1];if(key.startsWith("config:")){res[key.slice(7)]=value}return res},{});ConfigUtils.loadConfiguration(configParams).then(function(config){var _window$QWC2PluginCon,_window$QWC2PluginCon2,_window$QWC2PluginCon3;// Merge common config into mobile/desktop config
25
- var renameTaskButtons=function renameTaskButtons(res,entry){var key=entry.name+(entry.name==="TaskButton"?"#"+(entry.cfg||{}).task:"");return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,entry))};var commonConfig=[].concat(_toConsumableArray(config.plugins.common||[]),_toConsumableArray(((_window$QWC2PluginCon=window.QWC2PluginConfig)===null||_window$QWC2PluginCon===void 0?void 0:_window$QWC2PluginCon.common)||[])).reduce(renameTaskButtons,{});var desktopConfig=[].concat(_toConsumableArray(config.plugins.desktop||[]),_toConsumableArray(((_window$QWC2PluginCon2=window.QWC2PluginConfig)===null||_window$QWC2PluginCon2===void 0?void 0:_window$QWC2PluginCon2.desktop)||[]));var mobileConfig=[].concat(_toConsumableArray(config.plugins.mobile||[]),_toConsumableArray(((_window$QWC2PluginCon3=window.QWC2PluginConfig)===null||_window$QWC2PluginCon3===void 0?void 0:_window$QWC2PluginCon3.mobile)||[]));config.plugins.desktop=Object.values(deepmerge(commonConfig,desktopConfig.reduce(renameTaskButtons,{})));config.plugins.mobile=Object.values(deepmerge(commonConfig,mobileConfig.reduce(renameTaskButtons,{})));delete config.plugins.common;// Store whether to show plugin in 2d/3d mode
26
- var plugins=_this3.props.appConfig.pluginsDef.plugins;config.plugins.mobile.forEach(function(entry){var plugin=plugins[entry.name+"Plugin"];if(plugin){var _plugin$WrappedCompon2;var component=(_plugin$WrappedCompon2=plugin.WrappedComponent)!==null&&_plugin$WrappedCompon2!==void 0?_plugin$WrappedCompon2:plugin;entry.availableIn3D=component.availableIn3D===true;entry.availableIn2D=component.availableIn2D===true||component.availableIn2D===undefined}});config.plugins.desktop.forEach(function(entry){var plugin=plugins[entry.name+"Plugin"];if(plugin){var _plugin$WrappedCompon3;var component=(_plugin$WrappedCompon3=plugin.WrappedComponent)!==null&&_plugin$WrappedCompon3!==void 0?_plugin$WrappedCompon3:plugin;entry.availableIn3D=component.availableIn3D===true;entry.availableIn2D=component.availableIn2D===true||component.availableIn2D===undefined}});// Add projections from config
27
- var _iterator=_createForOfIteratorHelper(config.projections||[]),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var proj=_step.value;if(Proj4js.defs(proj.code)===undefined){Proj4js.defs(proj.code,proj.proj)}CoordinatesUtils.setCrsLabels(_defineProperty({},proj.code,proj.label))}}catch(err){_iterator.e(err)}finally{_iterator.f()}olProj4Register(Proj4js);StandardApp.store.dispatch(localConfigLoaded(config));// Load locale
28
- var defaultLocale=_this3.props.appConfig.getDefaultLocale?_this3.props.appConfig.getDefaultLocale():"";StandardApp.store.dispatch(loadLocale(_this3.props.appConfig.defaultLocaleData,defaultLocale));// Set color scheme
15
+ props.setTopbarHeight(0);props.setBottombarHeight(0);return _this}_inherits(AppContainerComponent,_React$Component);return _createClass(AppContainerComponent,[{key:"componentDidMount",value:function componentDidMount(){this.componentDidUpdate({})}},{key:"componentDidUpdate",value:function componentDidUpdate(prevProps){// The map component needs to have finished loading before theme initialization can proceed
16
+ if(this.props.haveMapSize&&!this.themesLoaded){this.loadThemes()}}},{key:"render",value:function render(){// Filter 2D plugins
17
+ var device=ConfigUtils.isMobile()?"mobile":"desktop";var pluginsConf=this.props.localConfig.plugins[device].filter(function(entry){return entry.availableIn2D});return/*#__PURE__*/React.createElement(PluginsContainer,{plugins:PluginStore.getPlugins(),pluginsConfig:pluginsConf})}}])}(React.Component);_defineProperty(AppContainerComponent,"propTypes",{appConfig:PropTypes.object,customPlugins:PropTypes.array,defaultUrlParams:PropTypes.string,haveLocale:PropTypes.bool,haveMapSize:PropTypes.bool,localConfig:PropTypes.object,setBottombarHeight:PropTypes.func,setCurrentTask:PropTypes.func,setCurrentTheme:PropTypes.func,setTopbarHeight:PropTypes.func,showNotification:PropTypes.func,startupConfig:PropTypes.object,themesLoaded:PropTypes.func});var AppContainer=connect(function(state){var _state$localConfig$us;return{haveLocale:state.locale.current!==null,haveMapSize:state.map.size!==null,defaultUrlParams:((_state$localConfig$us=state.localConfig.user_infos)===null||_state$localConfig$us===void 0?void 0:_state$localConfig$us.default_url_params)||"",localConfig:state.localConfig}},{themesLoaded:themesLoaded,setCurrentTask:setCurrentTask,setCurrentTheme:setCurrentTheme,showNotification:showNotification,setTopbarHeight:setTopbarHeight,setBottombarHeight:setBottombarHeight})(AppContainerComponent);var StandardApp=/*#__PURE__*/function(_React$Component2){function StandardApp(props){var _this2;_classCallCheck(this,StandardApp);_this2=_callSuper(this,StandardApp,[props]);_defineProperty(_this2,"state",{startupConfig:null,haveConfig:false,haveLocale:false});_defineProperty(_this2,"computeVh",function(){// https://css-tricks.com/the-trick-to-viewport-units-on-mobile/
18
+ document.documentElement.style.setProperty("--vh",window.innerHeight*0.01+"px")});_defineProperty(_this2,"init",function(){// Save initial params and clear URL
19
+ var initialParams=UrlParams.getParams();UrlParams.clear();// Set builtin plugins
20
+ PluginStore.setBuiltinPlugins(_this2.props.appConfig.pluginsDef.plugins);// Load config.json
21
+ var configParams=Object.entries(initialParams).reduce(function(res,_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],value=_ref2[1];if(key.startsWith("config:")){res[key.slice(7)]=value}return res},{});ConfigUtils.loadConfiguration(configParams).then(function(config){var _window$QWC2PluginCon,_window$QWC2PluginCon2,_window$QWC2PluginCon3,_ref5,_this2$props$appConfi,_this2$props$appConfi2,_this2$props$appConfi3;// Merge common config into mobile/desktop config, merge config from appConfig
22
+ var renameTaskButtons=function renameTaskButtons(res,entry){var _entry$cfg$task,_entry$cfg;var key=entry.name+(entry.name==="TaskButton"?"#"+((_entry$cfg$task=(_entry$cfg=entry.cfg)===null||_entry$cfg===void 0?void 0:_entry$cfg.task)!==null&&_entry$cfg$task!==void 0?_entry$cfg$task:""):"");return _objectSpread(_objectSpread({},res),{},_defineProperty({},key,entry))};var commonConfig=[].concat(_toConsumableArray(config.plugins.common||[]),_toConsumableArray(((_window$QWC2PluginCon=window.QWC2PluginConfig)===null||_window$QWC2PluginCon===void 0?void 0:_window$QWC2PluginCon.common)||[])).reduce(renameTaskButtons,{});var desktopConfig=[].concat(_toConsumableArray(config.plugins.desktop||[]),_toConsumableArray(((_window$QWC2PluginCon2=window.QWC2PluginConfig)===null||_window$QWC2PluginCon2===void 0?void 0:_window$QWC2PluginCon2.desktop)||[])).reduce(renameTaskButtons,{});var mobileConfig=[].concat(_toConsumableArray(config.plugins.mobile||[]),_toConsumableArray(((_window$QWC2PluginCon3=window.QWC2PluginConfig)===null||_window$QWC2PluginCon3===void 0?void 0:_window$QWC2PluginCon3.mobile)||[])).reduce(renameTaskButtons,{});var completePluginConfig=function completePluginConfig(pluginConfig){return Object.entries(pluginConfig).map(function(_ref3){var _plugin$WrappedCompon,_component$availableI,_component$availableI2;var _ref4=_slicedToArray(_ref3,2),key=_ref4[0],entry=_ref4[1];var plugin=_this2.props.appConfig.pluginsDef.plugins[entry.name+"Plugin"];var component=(_plugin$WrappedCompon=plugin===null||plugin===void 0?void 0:plugin.WrappedComponent)!==null&&_plugin$WrappedCompon!==void 0?_plugin$WrappedCompon:plugin;var availableIn2D=(_component$availableI=component===null||component===void 0?void 0:component.availableIn2D)!==null&&_component$availableI!==void 0?_component$availableI:true;var availableIn3D=(_component$availableI2=component===null||component===void 0?void 0:component.availableIn3D)!==null&&_component$availableI2!==void 0?_component$availableI2:false;return _objectSpread(_objectSpread({},entry),{},{key:key,availableIn2D:availableIn2D,availableIn3D:availableIn3D,cfg:_objectSpread(_objectSpread({},entry.cfg),_this2.props.appConfig.pluginsDef.cfg[entry.name+"Plugin"])})})};config.plugins.desktop=completePluginConfig(deepmerge(commonConfig,desktopConfig));config.plugins.mobile=completePluginConfig(deepmerge(commonConfig,mobileConfig));delete config.plugins.common;// Add projections from config
23
+ var _iterator=_createForOfIteratorHelper(config.projections||[]),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var proj=_step.value;if(Proj4js.defs(proj.code)===undefined){Proj4js.defs(proj.code,proj.proj)}CoordinatesUtils.setCrsLabels(_defineProperty({},proj.code,proj.label))}}catch(err){_iterator.e(err)}finally{_iterator.f()}olProj4Register(Proj4js);StandardApp.store.dispatch(localConfigLoaded(config));_this2.setState({haveConfig:true});// Load locale
24
+ var lang=(_ref5=(_this2$props$appConfi=(_this2$props$appConfi2=(_this2$props$appConfi3=_this2.props.appConfig).getDefaultLocale)===null||_this2$props$appConfi2===void 0?void 0:_this2$props$appConfi2.call(_this2$props$appConfi3))!==null&&_this2$props$appConfi!==void 0?_this2$props$appConfi:initialParams.lang)!==null&&_ref5!==void 0?_ref5:navigator.language;LocaleUtils.loadLocale(lang,_this2.props.appConfig.defaultLocaleData).then(function(localeData){StandardApp.store.dispatch(changeLocale(localeData,_this2.props.appConfig.defaultLocaleData));_this2.setState({haveLocale:true})});// Set color scheme
29
25
  var storedColorScheme=ConfigUtils.havePlugin("Settings")?localStorage.getItem("qwc2-color-scheme"):null;var colorScheme=initialParams.style||storedColorScheme||ConfigUtils.getConfigProp("defaultColorScheme");StandardApp.store.dispatch(setColorScheme(colorScheme));// Resolve permalink and restore settings
30
- resolvePermaLink(initialParams,function(params,state,success){StandardApp.store.dispatch(setStartupParameters(params,state));_this3.setState({startupConfig:{params:params,state:state,permalinkInvalid:!success}})})})});var initialState=_this3.props.appConfig.initialState||{};StandardApp.store=createStore(ReducerIndex.reducers,initialState,_this3.props.appConfig.actionLogger);_this3.init();_this3.touchY=null;return _this3}_inherits(StandardApp,_React$Component2);return _createClass(StandardApp,[{key:"componentDidMount",value:function componentDidMount(){window.addEventListener("resize",this.computeVh);this.computeVh()}},{key:"componentWillUnmount",value:function componentWillUnmount(){window.removeEventListener("resize",this.computeVh)}},{key:"render",value:function render(){if(!this.state.startupConfig){return null}return/*#__PURE__*/React.createElement(Provider,{store:StandardApp.store},/*#__PURE__*/React.createElement(AppContainer,{appConfig:this.props.appConfig,startupConfig:this.state.startupConfig}))}}])}(React.Component);_defineProperty(StandardApp,"store",null);_defineProperty(StandardApp,"propTypes",{appConfig:PropTypes.object});export{StandardApp as default};
26
+ resolvePermaLink(initialParams,function(params,state,success){StandardApp.store.dispatch(setStartupParameters(params,state));_this2.setState({startupConfig:{params:params,state:state,permalinkInvalid:!success}})})})});var initialState=_this2.props.appConfig.initialState||{};StandardApp.store=createStore(ReducerIndex.reducers,initialState,_this2.props.appConfig.actionLogger);_this2.init();_this2.touchY=null;return _this2}_inherits(StandardApp,_React$Component2);return _createClass(StandardApp,[{key:"componentDidMount",value:function componentDidMount(){window.addEventListener("resize",this.computeVh);this.computeVh()}},{key:"componentWillUnmount",value:function componentWillUnmount(){window.removeEventListener("resize",this.computeVh)}},{key:"render",value:function render(){if(!this.state.startupConfig||!this.state.haveConfig||!this.state.haveLocale){return null}return/*#__PURE__*/React.createElement(Provider,{store:StandardApp.store},/*#__PURE__*/React.createElement(AppContainer,{appConfig:this.props.appConfig,startupConfig:this.state.startupConfig}))}}])}(React.Component);_defineProperty(StandardApp,"store",null);_defineProperty(StandardApp,"propTypes",{appConfig:PropTypes.object});export{StandardApp as default};
@@ -4,7 +4,7 @@ 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{connect}from"react-redux";import axios from"axios";import{remove as removeDiacritics}from"diacritics";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{setActiveLayerInfo}from"../actions/layerinfo";import{LayerRole,addLayer}from"../actions/layers";import{setUserInfoFields}from"../actions/localConfig";import{setCurrentTask}from"../actions/task";import{setCurrentTheme,setThemeLayersList}from"../actions/theme";import ConfigUtils from"../utils/ConfigUtils";import LocaleUtils from"../utils/LocaleUtils";import ThemeUtils from"../utils/ThemeUtils";import Icon from"./Icon";import"./style/ThemeList.css";var ThemeList=/*#__PURE__*/function(_React$Component){function ThemeList(){var _this;_classCallCheck(this,ThemeList);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,ThemeList,[].concat(args));_defineProperty(_this,"state",{expandedGroups:[],visibleThemeInfoMenu:null});_defineProperty(_this,"groupMatchesFilter",function(group,filter){if(group&&group.items){for(var i=0,n=group.items.length;i<n;++i){if(removeDiacritics(group.items[i].title).match(filter)||removeDiacritics(group.items[i].keywords||"").match(filter)||removeDiacritics(group.items[i]["abstract"]||"").match(filter)){return true}}}if(group&&group.subdirs){for(var _i=0,_n=group.subdirs.length;_i<_n;++_i){if(_this.groupMatchesFilter(group.subdirs[_i],filter)){return true}}}return false});_defineProperty(_this,"renderThemeGroup",function(group,filter){var assetsPath=ConfigUtils.getAssetsPath();var subdirs=group&&group.subdirs?group.subdirs:[];if(filter){subdirs=subdirs.filter(function(subdir){return _this.groupMatchesFilter(subdir,filter)})}var subtree=subdirs.map(function(subdir){var expanded=!_this.props.collapsibleGroups||filter||_this.state.expandedGroups.includes(subdir.id)||_this.props.activeTheme&&_this.groupContainsActiveTheme(subdir);if(isEmpty(subdir.items)&&isEmpty(subdir.subdirs)){return null}return/*#__PURE__*/React.createElement("li",{className:"theme-group-header "+(expanded?"theme-group-header-expanded":""),key:subdir.id},/*#__PURE__*/React.createElement("span",{onClick:function onClick(){return _this.setState(function(state){return{expandedGroups:expanded?state.expandedGroups.filter(function(id){return id!==subdir.id}):[].concat(_toConsumableArray(state.expandedGroups),[subdir.id])}})}},_this.props.collapsibleGroups?/*#__PURE__*/React.createElement(Icon,{icon:expanded?"collapse":"expand"}):null," ",subdir.title),expanded?_this.renderThemeGroup(subdir,filter):null)});var activeThemeId=_this.props.activeTheme?_this.props.activeTheme.id:null;var addLayersTitle=LocaleUtils.tr("themeswitcher.addlayerstotheme");var addTitle=LocaleUtils.tr("themeswitcher.addtotheme");var changeDefaultUrlTitle=LocaleUtils.tr("themeswitcher.changedefaulttheme");var openTabTitle=LocaleUtils.tr("themeswitcher.openintab");var username=ConfigUtils.getConfigProp("username");return/*#__PURE__*/React.createElement("ul",{className:"theme-group-body"},(!isEmpty(group.items)?group.items:[]).map(function(item){var infoLinks=(item.themeInfoLinks&&item.themeInfoLinks.entries||[]).map(function(name){return _this.props.themes.themeInfoLinks.find(function(entry){return entry.name===name})}).filter(function(entry){return entry});var matches=[];if(filter){var match=null;if(match=removeDiacritics(item.title).match(filter)){matches.push([LocaleUtils.tr("themeswitcher.match.title"),_this.extractSubstr(match,item.title),item.title])}if(match=removeDiacritics(item.keywords||"").match(filter)){matches.push([LocaleUtils.tr("themeswitcher.match.keywords"),_this.extractSubstr(match,item.keywords),item.keywords])}if(match=removeDiacritics(item["abstract"]||"").match(filter)){matches.push([LocaleUtils.tr("themeswitcher.match.abstract"),_this.extractSubstr(match,item["abstract"]),item["abstract"]])}if(isEmpty(matches)){return null}}var title=item["abstract"];if(title&&item.keywords){title+="\n\n"}if(item.keywords){title+=LocaleUtils.tr("themeswitcher.match.keywords")+": "+item.keywords}return/*#__PURE__*/React.createElement("li",{className:activeThemeId===item.id?"theme-item theme-item-active":"theme-item",key:item.id,onClick:function onClick(){return _this.setTheme(item)},title:title},/*#__PURE__*/React.createElement("div",{className:"theme-item-title",title:item.title},/*#__PURE__*/React.createElement("span",null,item.title)),!isEmpty(infoLinks)?/*#__PURE__*/React.createElement("div",{className:"theme-item-info-menu "+(_this.state.visibleThemeInfoMenu?"theme-item-info-menu-active":""),onClick:function onClick(ev){return _this.toggleThemeInfoMenu(ev,item.id)}},/*#__PURE__*/React.createElement(Icon,{icon:"info"}),item.themeInfoLinks.title?/*#__PURE__*/React.createElement("span",null,item.themeInfoLinks.title):LocaleUtils.tr(item.themeInfoLinks.titleMsgId),/*#__PURE__*/React.createElement(Icon,{icon:"triangle-down"}),_this.state.visibleThemeInfoMenu===item.id?/*#__PURE__*/React.createElement("div",{className:"theme-item-info-links",onClick:function onClick(ev){return ev.stopPropagation()}},infoLinks.map(function(link){return/*#__PURE__*/React.createElement("a",{href:link.url,key:link.name,target:link.target},link.title)})):null):null,/*#__PURE__*/React.createElement("div",{className:"theme-item-body"},item.description?/*#__PURE__*/React.createElement("div",{className:"theme-item-description",dangerouslySetInnerHTML:{__html:item.description}}):null,/*#__PURE__*/React.createElement("img",{className:"theme-item-thumbnail",src:assetsPath+"/"+item.thumbnail})),!item.restricted?/*#__PURE__*/React.createElement("div",{className:"theme-item-icons"},_this.props.allowAddingOtherThemeLayers?/*#__PURE__*/React.createElement(Icon,{icon:"layers",onClick:function onClick(ev){return _this.getThemeLayersToList(ev,item)},title:addLayersTitle}):null,_this.props.allowAddingOtherThemes?/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(ev){return _this.addThemeLayers(ev,item)},title:addTitle}):null,/*#__PURE__*/React.createElement(Icon,{icon:"open_link",onClick:function onClick(ev){return _this.openInTab(ev,item.id)},title:openTabTitle}),_this.props.showDefaultThemeSelector&&username?/*#__PURE__*/React.createElement(Icon,{className:_this.extractThemeId(_this.props.defaultUrlParams)===item.id?"icon-active":"",icon:"new",onClick:function onClick(ev){return _this.changeDefaultUrlParams(ev,item.id)},title:changeDefaultUrlTitle}):null):/*#__PURE__*/React.createElement("div",{className:"theme-item-restricted-overlay"},/*#__PURE__*/React.createElement(Icon,{icon:"lock"})),isEmpty(matches)?null:/*#__PURE__*/React.createElement("div",{className:"theme-item-filterinfo-overlay"},matches.map(function(match){return/*#__PURE__*/React.createElement("div",{key:match[0],title:match[2]},/*#__PURE__*/React.createElement("i",null,match[0],":"),/*#__PURE__*/React.createElement("br",null),match[1][0],/*#__PURE__*/React.createElement("b",null,match[1][1]),match[1][2])})))}),subtree)});_defineProperty(_this,"groupContainsActiveTheme",function(group){var _iterator=_createForOfIteratorHelper(group.items||[]),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var item=_step.value;if(item.id===_this.props.activeTheme.id){return true}}}catch(err){_iterator.e(err)}finally{_iterator.f()}var _iterator2=_createForOfIteratorHelper(group.subdirs||[]),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var subdir=_step2.value;if(_this.groupContainsActiveTheme(subdir)){return true}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return false});_defineProperty(_this,"extractSubstr",function(match,text){var cleanText=removeDiacritics(text);var cleanFilter=removeDiacritics(_this.props.filter);var padding=Math.round((20-cleanFilter.length)/2);// Add unused right padding to left
7
+ */import React from"react";import{connect}from"react-redux";import axios from"axios";import{remove as removeDiacritics}from"diacritics";import DOMPurify from"dompurify";import isEmpty from"lodash.isempty";import PropTypes from"prop-types";import{setActiveLayerInfo}from"../actions/layerinfo";import{LayerRole,addLayer}from"../actions/layers";import{setUserInfoFields}from"../actions/localConfig";import{setCurrentTask}from"../actions/task";import{setCurrentTheme,setThemeLayersList}from"../actions/theme";import ConfigUtils from"../utils/ConfigUtils";import LocaleUtils from"../utils/LocaleUtils";import ThemeUtils from"../utils/ThemeUtils";import Icon from"./Icon";import"./style/ThemeList.css";var ThemeList=/*#__PURE__*/function(_React$Component){function ThemeList(){var _this;_classCallCheck(this,ThemeList);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key]}_this=_callSuper(this,ThemeList,[].concat(args));_defineProperty(_this,"state",{expandedGroups:[],visibleThemeInfoMenu:null});_defineProperty(_this,"groupMatchesFilter",function(group,filter){if(group&&group.items){for(var i=0,n=group.items.length;i<n;++i){if(removeDiacritics(group.items[i].title).match(filter)||removeDiacritics(group.items[i].keywords||"").match(filter)||removeDiacritics(group.items[i]["abstract"]||"").match(filter)){return true}}}if(group&&group.subdirs){for(var _i=0,_n=group.subdirs.length;_i<_n;++_i){if(_this.groupMatchesFilter(group.subdirs[_i],filter)){return true}}}return false});_defineProperty(_this,"renderThemeGroup",function(group,filter){var assetsPath=ConfigUtils.getAssetsPath();var subdirs=group&&group.subdirs?group.subdirs:[];if(filter){subdirs=subdirs.filter(function(subdir){return _this.groupMatchesFilter(subdir,filter)})}var subtree=subdirs.map(function(subdir){var expanded=!_this.props.collapsibleGroups||filter||_this.state.expandedGroups.includes(subdir.id)||_this.props.activeTheme&&_this.groupContainsActiveTheme(subdir);if(isEmpty(subdir.items)&&isEmpty(subdir.subdirs)){return null}return/*#__PURE__*/React.createElement("li",{className:"theme-group-header "+(expanded?"theme-group-header-expanded":""),key:subdir.id},/*#__PURE__*/React.createElement("span",{onClick:function onClick(){return _this.setState(function(state){return{expandedGroups:expanded?state.expandedGroups.filter(function(id){return id!==subdir.id}):[].concat(_toConsumableArray(state.expandedGroups),[subdir.id])}})}},_this.props.collapsibleGroups?/*#__PURE__*/React.createElement(Icon,{icon:expanded?"collapse":"expand"}):null," ",subdir.title),expanded?_this.renderThemeGroup(subdir,filter):null)});var activeThemeId=_this.props.activeTheme?_this.props.activeTheme.id:null;var addLayersTitle=LocaleUtils.tr("themeswitcher.addlayerstotheme");var addTitle=LocaleUtils.tr("themeswitcher.addtotheme");var changeDefaultUrlTitle=LocaleUtils.tr("themeswitcher.changedefaulttheme");var openTabTitle=LocaleUtils.tr("themeswitcher.openintab");var username=ConfigUtils.getConfigProp("username");return/*#__PURE__*/React.createElement("ul",{className:"theme-group-body"},(!isEmpty(group.items)?group.items:[]).map(function(item){var infoLinks=(item.themeInfoLinks&&item.themeInfoLinks.entries||[]).map(function(name){return _this.props.themes.themeInfoLinks.find(function(entry){return entry.name===name})}).filter(function(entry){return entry});var matches=[];if(filter){var match=null;if(match=removeDiacritics(item.title).match(filter)){matches.push([LocaleUtils.tr("themeswitcher.match.title"),_this.extractSubstr(match,item.title),item.title])}if(match=removeDiacritics(item.keywords||"").match(filter)){matches.push([LocaleUtils.tr("themeswitcher.match.keywords"),_this.extractSubstr(match,item.keywords),item.keywords])}if(match=removeDiacritics(item["abstract"]||"").match(filter)){matches.push([LocaleUtils.tr("themeswitcher.match.abstract"),_this.extractSubstr(match,item["abstract"]),item["abstract"]])}if(isEmpty(matches)){return null}}var title=item["abstract"];if(title&&item.keywords){title+="\n\n"}if(item.keywords){title+=LocaleUtils.tr("themeswitcher.match.keywords")+": "+item.keywords}return/*#__PURE__*/React.createElement("li",{className:activeThemeId===item.id?"theme-item theme-item-active":"theme-item",key:item.id,onClick:function onClick(){return _this.setTheme(item)},title:title},/*#__PURE__*/React.createElement("div",{className:"theme-item-title",title:item.title},/*#__PURE__*/React.createElement("span",null,item.title)),!isEmpty(infoLinks)?/*#__PURE__*/React.createElement("div",{className:"theme-item-info-menu "+(_this.state.visibleThemeInfoMenu?"theme-item-info-menu-active":""),onClick:function onClick(ev){return _this.toggleThemeInfoMenu(ev,item.id)}},/*#__PURE__*/React.createElement(Icon,{icon:"info"}),item.themeInfoLinks.title?/*#__PURE__*/React.createElement("span",null,item.themeInfoLinks.title):LocaleUtils.tr(item.themeInfoLinks.titleMsgId),/*#__PURE__*/React.createElement(Icon,{icon:"triangle-down"}),_this.state.visibleThemeInfoMenu===item.id?/*#__PURE__*/React.createElement("div",{className:"theme-item-info-links",onClick:function onClick(ev){return ev.stopPropagation()}},infoLinks.map(function(link){return/*#__PURE__*/React.createElement("a",{href:link.url,key:link.name,target:link.target},link.title)})):null):null,/*#__PURE__*/React.createElement("div",{className:"theme-item-body"},item.description?/*#__PURE__*/React.createElement("div",{className:"theme-item-description",dangerouslySetInnerHTML:{__html:DOMPurify.sanitize(item.description)}}):null,/*#__PURE__*/React.createElement("img",{className:"theme-item-thumbnail",src:assetsPath+"/"+item.thumbnail})),!item.restricted?/*#__PURE__*/React.createElement("div",{className:"theme-item-icons"},_this.props.allowAddingOtherThemeLayers?/*#__PURE__*/React.createElement(Icon,{icon:"layers",onClick:function onClick(ev){return _this.getThemeLayersToList(ev,item)},title:addLayersTitle}):null,_this.props.allowAddingOtherThemes?/*#__PURE__*/React.createElement(Icon,{icon:"plus",onClick:function onClick(ev){return _this.addThemeLayers(ev,item)},title:addTitle}):null,/*#__PURE__*/React.createElement(Icon,{icon:"open_link",onClick:function onClick(ev){return _this.openInTab(ev,item.id)},title:openTabTitle}),_this.props.showDefaultThemeSelector&&username?/*#__PURE__*/React.createElement(Icon,{className:_this.extractThemeId(_this.props.defaultUrlParams)===item.id?"icon-active":"",icon:"new",onClick:function onClick(ev){return _this.changeDefaultUrlParams(ev,item.id)},title:changeDefaultUrlTitle}):null):/*#__PURE__*/React.createElement("div",{className:"theme-item-restricted-overlay"},/*#__PURE__*/React.createElement(Icon,{icon:"lock"})),isEmpty(matches)?null:/*#__PURE__*/React.createElement("div",{className:"theme-item-filterinfo-overlay"},matches.map(function(match){return/*#__PURE__*/React.createElement("div",{key:match[0],title:match[2]},/*#__PURE__*/React.createElement("i",null,match[0],":"),/*#__PURE__*/React.createElement("br",null),match[1][0],/*#__PURE__*/React.createElement("b",null,match[1][1]),match[1][2])})))}),subtree)});_defineProperty(_this,"groupContainsActiveTheme",function(group){var _iterator=_createForOfIteratorHelper(group.items||[]),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var item=_step.value;if(item.id===_this.props.activeTheme.id){return true}}}catch(err){_iterator.e(err)}finally{_iterator.f()}var _iterator2=_createForOfIteratorHelper(group.subdirs||[]),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var subdir=_step2.value;if(_this.groupContainsActiveTheme(subdir)){return true}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}return false});_defineProperty(_this,"extractSubstr",function(match,text){var cleanText=removeDiacritics(text);var cleanFilter=removeDiacritics(_this.props.filter);var padding=Math.round((20-cleanFilter.length)/2);// Add unused right padding to left
8
8
  padding+=-Math.min(cleanText.length-(match.index+cleanFilter.length)-padding,0);var leftStart=Math.max(match.index-padding,0);var leftLen=Math.min(match.index,padding);return[(leftStart>0?"\u2026":"")+cleanText.substr(leftStart,leftLen),cleanText.substr(match.index,cleanFilter.length),cleanText.substr(match.index+cleanFilter.length)]});_defineProperty(_this,"extractThemeId",function(text){return Object.fromEntries(text.split("&").map(function(x){return x.split("=")})).t});_defineProperty(_this,"setTheme",function(theme){if(theme.restricted){// eslint-disable-next-line
9
9
  alert(LocaleUtils.tr("themeswitcher.restrictedthemeinfo"));return}var hasUserLayer=_this.props.layers.find(function(layer){return layer.role===LayerRole.USERLAYER});var preserveNonThemeLayers=ConfigUtils.getConfigProp("preserveNonThemeLayersOnThemeSwitch",_this.props.activeTheme);// eslint-disable-next-line
10
10
  if(hasUserLayer&&!preserveNonThemeLayers&&!confirm(LocaleUtils.tr("themeswitcher.confirmswitch"))){return}_this.props.setActiveLayerInfo(null,null);if(_this.props.showLayerAfterChangeTheme){_this.props.setCurrentTask("LayerTree")}else{_this.props.setCurrentTask(null)}_this.props.changeTheme(theme,_this.props.themes,!_this.props.dontPreserveSettingsOnSwitch)});_defineProperty(_this,"toggleThemeInfoMenu",function(ev,themeId){ev.stopPropagation();_this.setState(function(state){return{visibleThemeInfoMenu:state.visibleThemeInfoMenu===themeId?null:themeId}})});_defineProperty(_this,"addThemeLayers",function(ev,theme){ev.stopPropagation();_this.props.addLayer(ThemeUtils.createThemeLayer(theme,_this.props.themes,LayerRole.USERLAYER));// Show layer tree to notify user that something has happened