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