From eb37fb00b1d0c1ac3d570873a28b0af92b264087 Mon Sep 17 00:00:00 2001 From: Francois Prunayre Date: Fri, 2 Jun 2023 09:26:02 +0200 Subject: [PATCH] Map / Avoid JSON parse error on context having layer with filter. Clear queue on context load. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Context layer can contain a JSON extension which could be formatted and XML formatting may add extra space which needs to be clean up for proper JSON string: ```xml ``` Clear map queue on load - may have side effect when loading differents maps quickly. Avoid JS error if server layer is not defined (which should not be the case unless custom context with new layer types was created). --- .../catalog/components/common/map/wmsQueue.js | 8 ++++++++ .../baselayerswitcher/BaseLayerSwitcherDirective.js | 3 +++ .../components/viewer/owscontext/OwsContextService.js | 10 +++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/web-ui/src/main/resources/catalog/components/common/map/wmsQueue.js b/web-ui/src/main/resources/catalog/components/common/map/wmsQueue.js index e72d2978df8f..6f400e5f91b4 100644 --- a/web-ui/src/main/resources/catalog/components/common/map/wmsQueue.js +++ b/web-ui/src/main/resources/catalog/components/common/map/wmsQueue.js @@ -45,6 +45,14 @@ this.queue = queue; this.errors = errors; + var clear = function (map) { + var type = (map && map.get && map.get("type")) || "viewer"; + if (queue[type]) { + queue[type].queue.length = 0; + queue[type].errors.length = 0; + } + }; + var getMapType = function (map) { var type = (map && map.get && map.get("type")) || "viewer"; if (queue[type] === undefined) { diff --git a/web-ui/src/main/resources/catalog/components/viewer/baselayerswitcher/BaseLayerSwitcherDirective.js b/web-ui/src/main/resources/catalog/components/viewer/baselayerswitcher/BaseLayerSwitcherDirective.js index 05ddd827ef4e..de20c4d58b06 100644 --- a/web-ui/src/main/resources/catalog/components/viewer/baselayerswitcher/BaseLayerSwitcherDirective.js +++ b/web-ui/src/main/resources/catalog/components/viewer/baselayerswitcher/BaseLayerSwitcherDirective.js @@ -38,6 +38,7 @@ "gnViewerSettings", "gnSearchSettings", "gnOwsContextService", + "gnWmsQueue", "$rootScope", "gnMapsManager", "gnMap", @@ -45,6 +46,7 @@ gnViewerSettings, gnSearchSettings, gnOwsContextService, + gnWmsQueue, $rootScope, gnMapsManager, gnMap @@ -91,6 +93,7 @@ scope.reset = function () { $rootScope.$broadcast("owsContextReseted"); + gnWmsQueue.clear(scope.map); var mapViewerConfig = gnMap.getMapConfig()["map-" + gnMapsManager.VIEWER_MAP]; if (gnViewerSettings.defaultContext) { loadContext(); diff --git a/web-ui/src/main/resources/catalog/components/viewer/owscontext/OwsContextService.js b/web-ui/src/main/resources/catalog/components/viewer/owscontext/OwsContextService.js index e2d2cbf30f41..2267f41b8cfe 100644 --- a/web-ui/src/main/resources/catalog/components/viewer/owscontext/OwsContextService.js +++ b/web-ui/src/main/resources/catalog/components/viewer/owscontext/OwsContextService.js @@ -311,7 +311,8 @@ // load extension content (JSON) var extension = layer.extension && layer.extension.any - ? JSON.parse(layer.extension.any) + ? // Formatted XML may contains extra space and line feed + JSON.parse(layer.extension.any.replaceAll("\\n^ +", " ")) : {}; var loadingId = extension.label ? extension.label : layer.name; @@ -710,8 +711,11 @@ * @param {numeric} index of the layer in the tree */ this.createLayer = function (layer, map, bgIdx, index, style) { - var server = layer.server[0]; - var res = server.onlineResource[0]; + var res = { href: "" }; + if (layer.server) { + var server = layer.server[0]; + res = server.onlineResource[0]; + } var createOnly = angular.isDefined(bgIdx) || angular.isDefined(index); if (layer.name && layer.name.match(reT)) {