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) {
map.registerDbOverlay(new UserDbOverlay({name: pluginId, map: map}));
var listenersData = [];
return {
getVisibleDataOverlays: function () {
return map.getVisibleDataOverlays();
},
addListener: function (param) {
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 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) {
if (dbOverlayName === undefined) {
......
......@@ -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 () {
it("for alias", function () {
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