From 2661f56d5dd4384babec29bde304634731c45cab Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 15 Mar 2018 10:52:01 +0100
Subject: [PATCH] oncenter changed listener

---
 .../src/main/js/map/AbstractCustomMap.js      |  4 +++
 .../src/main/js/plugin/MinervaPluginProxy.js  | 13 +++++---
 .../test/js/plugin/MinervaPluginProxy-test.js | 30 +++++++++++++++++++
 3 files changed, 43 insertions(+), 4 deletions(-)

diff --git a/frontend-js/src/main/js/map/AbstractCustomMap.js b/frontend-js/src/main/js/map/AbstractCustomMap.js
index 3c9ca63ffa..8aa7acaf55 100644
--- a/frontend-js/src/main/js/map/AbstractCustomMap.js
+++ b/frontend-js/src/main/js/map/AbstractCustomMap.js
@@ -27,6 +27,7 @@ function AbstractCustomMap(model, options) {
     throw Error("Model must be defined");
   }
   this.registerListenerType("onZoomChanged");
+  this.registerListenerType("onCenterChanged");
 
   this.setElement(options.getElement());
   this.setConfiguration(options.getConfiguration());
@@ -896,6 +897,9 @@ AbstractCustomMap.prototype._createMapChangedCallbacks = function () {
     var point = self.fromLatLngToPoint(coord);
     sessionData.setCenter(self.getModel(), point);
   });
+  google.maps.event.addListener(this.getGoogleMap(), 'center_changed', function () {
+    return self.callListeners("onCenterChanged", self.getCenter());
+  });
 };
 
 AbstractCustomMap.prototype.addCenterButton = function () {
diff --git a/frontend-js/src/main/js/plugin/MinervaPluginProxy.js b/frontend-js/src/main/js/plugin/MinervaPluginProxy.js
index 496f20b31e..0130243f84 100644
--- a/frontend-js/src/main/js/plugin/MinervaPluginProxy.js
+++ b/frontend-js/src/main/js/plugin/MinervaPluginProxy.js
@@ -273,12 +273,17 @@ function createProjectMap(options) {
         };
       } else if (param.object === "map") {
         object = map;
-        if (param.type !== "onZoomChanged" && param.type !== "onCenterChanged") {
+        if (param.type === "onZoomChanged") {
+          listenerWrapper = function (e) {
+            return param.callback({modelId: e.object.getId(), zoom: e.arg});
+          };
+        } else if (param.type === "onCenterChanged") {
+          listenerWrapper = function (e) {
+            return param.callback({modelId: e.object.getId(), center: e.arg});
+          };
+        } else {
           throw new Error("Unknown listener type: " + param.type);
         }
-        listenerWrapper = function (e) {
-          return param.callback({modelId: e.object.getId(), zoom: e.arg});
-        };
       } else {
         throw new Error("Invalid argument");
       }
diff --git a/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js b/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js
index 72bb640b70..02d81973cf 100644
--- a/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js
+++ b/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js
@@ -596,6 +596,36 @@ describe('MinervaPluginProxy', function () {
         return map.destroy();
       });
     });
+    it('on center changed', function () {
+      var callbackOk = false;
+      var map;
+      return ServerConnector.getProject().then(function (project) {
+        map = helper.createCustomMap(project);
+        helper.createSearchDbOverlay(map);
+        var proxy = createProxy(map);
+
+        proxy.project.map.addListener({
+          object: "map",
+          type: "onCenterChanged",
+          callback: function (data) {
+            assert.equal(map.getId(), data.modelId);
+            var center =  data.center;
+            assert.ok(center instanceof google.maps.Point);
+            assert.closeTo(parseFloat(center.x), 10, helper.EPSILON);
+            assert.closeTo(parseFloat(center.y), 20, helper.EPSILON);
+            callbackOk = true;
+          }
+        });
+        return proxy.project.map.setCenter({
+          modelId: 15781,
+          x: 10,
+          y: 20
+        });
+      }).then(function () {
+        assert.ok(callbackOk);
+        return map.destroy();
+      });
+    });
   });
 
 
-- 
GitLab