Skip to content
Snippets Groups Projects
Commit 443ea4c3 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

JS api call for removing listener

parent 0d249a58
No related branches found
No related tags found
1 merge request!125Resolve "plugin API"
...@@ -229,17 +229,43 @@ function createProjectMap(options) { ...@@ -229,17 +229,43 @@ function createProjectMap(options) {
map.registerDbOverlay(new UserDbOverlay({name: pluginId, map: map})); map.registerDbOverlay(new UserDbOverlay({name: pluginId, map: map}));
var listenersData = [];
return { return {
getVisibleDataOverlays: function () { getVisibleDataOverlays: function () {
return map.getVisibleDataOverlays(); return map.getVisibleDataOverlays();
}, },
addListener: function (param) { addListener: function (param) {
var dbOverlay = getOverlayByName(map, param.dbOverlayName); var dbOverlay = getOverlayByName(map, param.dbOverlayName);
dbOverlay.addListener(param.type, function (e) {
var listenerWrapper = function (e) {
return getFullElements(map, e.arg.identifiedElements).then(function (result) { return getFullElements(map, e.arg.identifiedElements).then(function (result) {
return param.callback(result); return param.callback(result);
}); });
}); };
dbOverlay.addListener(param.type, listenerWrapper);
listenersData.push({listener: param.callback, wrapper: listenerWrapper, object: dbOverlay, type: param.type});
},
removeListener: function (param) {
var dbOverlay = getOverlayByName(map, param.dbOverlayName);
var indexToBeRemoved = -1;
for (var i = 0; i < listenersData.length; i++) {
var listenerData = listenersData[i];
if (listenerData.listener === param.callback &&
listenerData.object === dbOverlay &&
listenerData.type === param.type) {
indexToBeRemoved = i;
}
}
if (indexToBeRemoved === -1) {
throw new Error("Listener doesn't exist");
}
var listenerWrapper = listenersData[indexToBeRemoved].wrapper;
dbOverlay.removeListener(param.type, listenerWrapper);
listenersData.splice(indexToBeRemoved, 1);
}, },
getHighlightedBioEntities: function (dbOverlayName) { getHighlightedBioEntities: function (dbOverlayName) {
if (dbOverlayName === undefined) { if (dbOverlayName === undefined) {
......
...@@ -73,6 +73,59 @@ describe('MinervaPluginProxy', function () { ...@@ -73,6 +73,59 @@ describe('MinervaPluginProxy', function () {
}); });
}); });
describe('removeListener', function () {
it('valid listener', function () {
var callbackOk = false;
var map, options;
return ServerConnector.getProject().then(function (project) {
map = helper.createCustomMap(project);
helper.createSearchDbOverlay(map);
var proxy = createProxy(map);
options = {
dbOverlayName: "search",
type: "onSearch",
callback: function (elements) {
assert.ok(elements.length > 0);
assert.ok(elements[0].length !== undefined, "Array of arrays expected as onSearch result");
callbackOk = true;
}
};
proxy.project.map.addListener(options);
proxy.project.map.removeListener(options);
assert.equal(0, logger.getWarnings().length);
return map.destroy();
});
});
it('unknown listener', function () {
var callbackOk = false;
var map, options;
return ServerConnector.getProject().then(function (project) {
map = helper.createCustomMap(project);
helper.createSearchDbOverlay(map);
var proxy = createProxy(map);
options = {
dbOverlayName: "search",
type: "onSearch",
callback: function (elements) {
assert.ok(elements.length > 0);
assert.ok(elements[0].length !== undefined, "Array of arrays expected as onSearch result");
callbackOk = true;
}
};
proxy.project.map.addListener(options);
proxy.project.map.removeListener({});
}).then(function () {
assert.notOk("Exception expected");
}, function (error) {
assert.ok(error.message.indexOf("Listener doesn't exist") >= 0);
return map.destroy();
});
});
});
describe("getBioEntityById", function () { describe("getBioEntityById", function () {
it("for alias", function () { it("for alias", function () {
var map, proxy; var map, proxy;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment