diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js index 36497cd2e704329f9a7f1f4a78951c0b92f8d6be..ca76ab33ced81255ff3923af3cea7328fefd2bd2 100644 --- a/frontend-js/src/main/js/map/CustomMap.js +++ b/frontend-js/src/main/js/map/CustomMap.js @@ -36,6 +36,8 @@ function CustomMap(options) { AbstractCustomMap.call(this, options.getProject().getModel(), options); this.registerListenerType("onBioEntityClick"); + this.registerListenerType("onShowOverlay"); + this.registerListenerType("onHideOverlay"); this._selectedOverlays = []; @@ -242,6 +244,8 @@ CustomMap.prototype.openDataOverlay = function (param) { } return Promise.resolve(); } + }).then(function () { + return self.callListeners("onShowOverlay", overlayToOpen); }); } }; @@ -538,6 +542,10 @@ CustomMap.prototype.hideDataOverlay = function (identifier) { } ServerConnector.getSessionData(self.getProject()).setVisibleOverlays(ids); return self.redrawSelectedDataOverlays(); + }).then(function () { + return self.getProject().getDataOverlayById(identifier); + }).then(function (overlay) { + return self.callListeners("onHideOverlay", overlay); }); } }; diff --git a/frontend-js/src/main/js/plugin/MinervaPluginProxy.js b/frontend-js/src/main/js/plugin/MinervaPluginProxy.js index f9fd55bb7c995b0aefa9f792a669e99c4369b30a..fcf85d76f905da564daa38452f04bb4625d9b302 100644 --- a/frontend-js/src/main/js/plugin/MinervaPluginProxy.js +++ b/frontend-js/src/main/js/plugin/MinervaPluginProxy.js @@ -5,6 +5,8 @@ var IdentifiedElement = require('../map/data/IdentifiedElement'); var UserDbOverlay = require('../map/overlay/UserDbOverlay'); var Configuration = require('../Configuration'); +var logger= require('../logger'); + var Promise = require("bluebird"); function getOverlayByName(customMap, dbOverlayName) { @@ -244,6 +246,7 @@ function createProjectMap(options) { addListener: function (param) { var object = null; var listenerWrapper = null; + var listenerType = param.type; if (param.dbOverlayName !== undefined) { object = getOverlayByName(map, param.dbOverlayName); listenerWrapper = function (e) { @@ -256,12 +259,24 @@ function createProjectMap(options) { listenerWrapper = function () { return param.callback(); }; + } else if (param.object === "overlay") { + object = map; + if (param.type === "onShow") { + listenerType = "onShowOverlay"; + } else if (param.type === "onHide") { + listenerType = "onHideOverlay"; + } else { + throw new Error("Unknown listener type: " + param.type); + } + listenerWrapper = function (e) { + return param.callback(e.arg); + }; } else { throw new Error("Invalid argument"); } - object.addListener(param.type, listenerWrapper); - listenersData.push({listener: param.callback, wrapper: listenerWrapper, object: object, type: param.type}); + object.addListener(listenerType, listenerWrapper); + listenersData.push({listener: param.callback, wrapper: listenerWrapper, object: object, type: listenerType}); }, removeListener: function (param) { var dbOverlay = getOverlayByName(map, param.dbOverlayName); diff --git a/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js b/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js index 31fdd59f88a3c9e2ae4baeaede3571f5c4936f16..406d45524ce65a50cabf550c9ed98ab5def83c6c 100644 --- a/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js +++ b/frontend-js/src/test/js/plugin/MinervaPluginProxy-test.js @@ -3,6 +3,7 @@ require("../mocha-config"); var Alias = require('../../../main/js/map/data/Alias'); +var DataOverlay = require('../../../main/js/map/data/DataOverlay'); var MinervaPluginProxy = require('../../../main/js/plugin/MinervaPluginProxy'); var ServerConnector = require('../ServerConnector-mock'); @@ -487,5 +488,55 @@ describe('MinervaPluginProxy', function () { }); }); + describe('addListener', function () { + it('on show overlay', 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: "overlay", + type: "onShow", + callback: function (overlay) { + assert.ok(overlay instanceof DataOverlay); + callbackOk = true; + } + }); + return map.openDataOverlay(map.getProject().getDataOverlays()[0]); + }).then(function () { + assert.ok(callbackOk); + return map.destroy(); + }); + }); + it('on hide overlay', 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: "overlay", + type: "onHide", + callback: function (overlay) { + assert.ok(overlay instanceof DataOverlay); + callbackOk = true; + } + }); + return map.openDataOverlay(18077); + }).then(function () { + assert.notOk(callbackOk); + return map.hideDataOverlay(18077); + }).then(function () { + assert.ok(callbackOk); + return map.destroy(); + }); + }); + }); + });