From 75d039447fcd1434a2c0de1a4b44ecd73da2f1bc Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Wed, 24 May 2017 16:15:28 +0200
Subject: [PATCH] google map on center change event fix for submaps

---
 frontend-js/src/main/js/map/AbstractCustomMap.js | 15 +++++++++++++++
 frontend-js/src/main/js/map/CustomMap.js         | 13 ++-----------
 frontend-js/src/main/js/map/Submap.js            |  1 +
 frontend-js/src/test/js/map/CustomMap-test.js    |  2 +-
 4 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/frontend-js/src/main/js/map/AbstractCustomMap.js b/frontend-js/src/main/js/map/AbstractCustomMap.js
index 7f991b8f71..56f8556095 100644
--- a/frontend-js/src/main/js/map/AbstractCustomMap.js
+++ b/frontend-js/src/main/js/map/AbstractCustomMap.js
@@ -835,6 +835,21 @@ AbstractCustomMap.prototype._openInfoWindowForReaction = function(reactionId) {
   });
 };
 
+AbstractCustomMap.prototype._createMapChangedCallbacks = function() {
+  var self = this;
+  var sessionData = ServerConnector.getSessionData(self.getTopMap().getProject());
+  // listener for changing zoom level
+  google.maps.event.addListener(this.getGoogleMap(), 'zoom_changed', function() {
+    sessionData.setZoomLevel(self.getModel(), self.getGoogleMap().getZoom());
+  });
+  // listener for changing location of the map (moving left/reght/top/bottom
+  google.maps.event.addListener(this.getGoogleMap(), 'center_changed', function() {
+    var coord = self.getGoogleMap().getCenter();
+    var point = self.fromLatLngToPoint(coord);
+    sessionData.setCenter(self.getModel(), point);
+  });
+};
+
 /**
  * Returns {@link ReactionInfoWindow} for given reaction identifier
  * 
diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js
index 37f4ad33f9..90107f6e44 100644
--- a/frontend-js/src/main/js/map/CustomMap.js
+++ b/frontend-js/src/main/js/map/CustomMap.js
@@ -486,15 +486,12 @@ CustomMap.prototype.setZoom = function(mapIdentifier, zoom) {
  * user session.
  */
 CustomMap.prototype.createMapChangedCallbacks = function() {
+  this._createMapChangedCallbacks();
   var customMapSelf = this;
   var sessionData = ServerConnector.getSessionData(customMapSelf.getProject());
-  // listener for changing zoom level
-  google.maps.event.addListener(this.getGoogleMap(), 'zoom_changed', function() {
-    sessionData.setZoomLevel(customMapSelf.getModel(), customMapSelf.getGoogleMap().getZoom());
-  });
 
   // if we have zoom level data stored in session then restore it
-  var level = ServerConnector.getSessionData(customMapSelf.getProject()).getZoomLevel(this.getModel());
+  var level = sessionData.getZoomLevel(this.getModel());
   if (parseInt(level) > 0) {
     level = parseInt(level);
     this.getGoogleMap().setZoom(level);
@@ -502,12 +499,6 @@ CustomMap.prototype.createMapChangedCallbacks = function() {
     sessionData.setZoomLevel(customMapSelf.getModel(), customMapSelf.getGoogleMap().getZoom());
   }
 
-  // listener for changing location of the map (moving left/reght/top/bottom
-  google.maps.event.addListener(this.getGoogleMap(), 'center_changed', function() {
-    var coord = customMapSelf.getGoogleMap().getCenter();
-    var point = customMapSelf.fromLatLngToPoint(coord);
-    sessionData.setCenter(customMapSelf.getModel(), point);
-  });
 
   // listener for changing type of layout
   google.maps.event.addListener(this.getGoogleMap(), 'maptypeid_changed', function() {
diff --git a/frontend-js/src/main/js/map/Submap.js b/frontend-js/src/main/js/map/Submap.js
index 18448ff764..05b1dc955d 100644
--- a/frontend-js/src/main/js/map/Submap.js
+++ b/frontend-js/src/main/js/map/Submap.js
@@ -68,6 +68,7 @@ Submap.prototype.open = function(htmlTag) {
     $(this.htmlTag).dialog("option", "height", Math.floor(window.innerHeight * 2 / 3));
 
     self.setGoogleMap(new google.maps.Map(mapDiv, mapOptions));
+    self._createMapChangedCallbacks();
 
     $(self.htmlTag).bind("resize", function() {
       google.maps.event.trigger(self.getGoogleMap(), 'resize');
diff --git a/frontend-js/src/test/js/map/CustomMap-test.js b/frontend-js/src/test/js/map/CustomMap-test.js
index 226afc67da..f0181916cb 100644
--- a/frontend-js/src/test/js/map/CustomMap-test.js
+++ b/frontend-js/src/test/js/map/CustomMap-test.js
@@ -731,7 +731,7 @@ describe('CustomMap', function() {
     var map = new CustomMap(options);
     map.openSubmap(submodel.getId());
     map.setCenter(submodel.getId(), new google.maps.LatLng(10,20));
-    assert.ok(ServerConnector.getSessionData().getCenter(map.getModel()));
+    assert.ok(ServerConnector.getSessionData().getCenter(submodel));
   });
 
 });
-- 
GitLab