diff --git a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js index ad37c125c195eb7df8100f049686d28253205a14..206634e95edfe4320a4249f8b1ef72416da24445 100644 --- a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js @@ -51,7 +51,16 @@ function OverlayPanel(params) { $(self.getElement()).on("click", "[name='overlayLink']", function () { var overlayId = $(this).attr("data"); self.getMap().openDataOverlay(overlayId); - $(this.parentNode.parentNode).addClass('active').siblings().removeClass('active'); + }); + self.getMap().addListener("onBackgroundOverlayChange", function (e) { + var overlayId = e.arg.toString(); + var buttons = $("[name='overlayLink']", self.getElement()); + for (var i = 0; i < buttons.length; i++) { + var button = buttons[i]; + if ($(button).attr("data").toString() === overlayId) { + $(button.parentNode.parentNode).addClass('active').siblings().removeClass('active'); + } + } }); $(self.getElement()).on("click", "[name='download-overlay']", function () { var overlayId = $(this).attr("data"); diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js index 882a665b97767d31e7f0e4142de2827917192df0..26824f4642b5aecc05381ef15e6723cc2e1152c6 100644 --- a/frontend-js/src/main/js/map/CustomMap.js +++ b/frontend-js/src/main/js/map/CustomMap.js @@ -37,6 +37,7 @@ function CustomMap(options) { this.registerListenerType("onBioEntityClick"); this.registerListenerType("onShowOverlay"); this.registerListenerType("onHideOverlay"); + this.registerListenerType("onBackgroundOverlayChange"); this._selectedOverlays = []; @@ -230,14 +231,18 @@ CustomMap.prototype.openDataOverlay = function (param) { }); } } else { - self.getGoogleMap().setMapTypeId(identifier.toString()); + if (identifier.toString() === self.getGoogleMap().getMapTypeId()) { + return Promise.resolve(); + } else { + self.getGoogleMap().setMapTypeId(identifier.toString()); - var submaps = self.getSubmaps(); - for (var i = 0; i < submaps.length; i++) { - var submap = submaps[i]; - submap.openDataOverlay(identifier); + var submaps = self.getSubmaps(); + for (var i = 0; i < submaps.length; i++) { + var submap = submaps[i]; + submap.openDataOverlay(identifier); + } + return self.callListeners("onBackgroundOverlayChange", identifier); } - return Promise.resolve(); } }).then(function () { return self.callListeners("onShowOverlay", overlayToOpen); diff --git a/frontend-js/src/test/js/map/CustomMap-test.js b/frontend-js/src/test/js/map/CustomMap-test.js index 6c14e03b7afa5b4a32510ed961baaadd070d47f2..f2aac9e96cded5bf6715c33f0ca1a398ff6b8446 100644 --- a/frontend-js/src/test/js/map/CustomMap-test.js +++ b/frontend-js/src/test/js/map/CustomMap-test.js @@ -132,6 +132,35 @@ describe('CustomMap', function () { }); }); + it("check backgroundChangeListener", function () { + var map = helper.createCustomMap(); + var overlay = helper.createOverlay(); + overlay.setInitialized(true); + overlay.setInputDataAvailable(true); + map.getProject().addDataOverlay(overlay); + var overlay2 = helper.createOverlay(); + overlay2.setInitialized(true); + overlay2.setInputDataAvailable(true); + map.getProject().addDataOverlay(overlay2); + + var emptyBackground = helper.createOverlay(); + emptyBackground.setInputDataAvailable(false); + emptyBackground.setName("Empty"); + map.getProject().addDataOverlay(emptyBackground); + + var counter = 0; + map.addListener("onBackgroundOverlayChange", function () { + counter++; + }); + + return map.openDataOverlay(overlay.getId()).then(function () { + assert.equal(1, counter, "listener wasn't fired"); + return map.openDataOverlay(overlay2.getId()); + }).then(function () { + assert.equal(1, counter, "listener shouldn't be fired again because nothing changed"); + }); + }); + it("simple", function () { var map = helper.createCustomMap(); var alias = helper.createAlias(map);