diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js index 7f839f1ca11c57120de8f7d2830cd053bd1d7ae1..9fa139d1c02941adcb69e0cf55eeb21d73702b73 100644 --- a/frontend-js/src/main/js/map/CustomMap.js +++ b/frontend-js/src/main/js/map/CustomMap.js @@ -727,15 +727,6 @@ CustomMap.prototype.renderOverlayCollection = function (params) { promises.push(submaps[i].getMarkerSurfaceCollection().renderOverlay(identifiedElements, overlayCollection)); } return Promise.all(promises); - }).then(function () { - return Promise.each(elements, function (element) { - var infoWindow = self.getInfoWindowForIdentifiedElement(element); - if (infoWindow !== null && infoWindow !== undefined) { - return self.retrieveOverlayDetailDataForElement(element, infoWindow.getOverlayFullViewArray()).then(function () { - return self.updateInfoWindowForIdentifiedElement(element); - }); - } - }); }).then(function () { return self.fetchIdentifiedElements(elements, true); }).then(function (fullElements) { @@ -838,23 +829,6 @@ CustomMap.prototype.retrieveOverlayDetailDataForElement = function (element, gen return Promise.all(promises); }; -/** - * Updates info window identified by element given as a parameter. - * - * @param {IdentifiedElement} identifiedElement - * element for which info window should be updated - * - * @returns {PromiseLike|Promise} - */ -CustomMap.prototype.updateInfoWindowForIdentifiedElement = function (identifiedElement) { - var infoWindow = this.getInfoWindowForIdentifiedElement(identifiedElement); - if (infoWindow === null || infoWindow === undefined) { - return Promise.resolve(); - } else { - return infoWindow.update(); - } -}; - /** * Returns data from all {OverlayCollection} for a given alias. * diff --git a/frontend-js/src/main/js/map/window/AbstractInfoWindow.js b/frontend-js/src/main/js/map/window/AbstractInfoWindow.js index 97c192a9216766a9bd3deb7bd7d5d65b5214f338..9ca02dc551756c99b7e274cb6c05c6f9f5202378 100644 --- a/frontend-js/src/main/js/map/window/AbstractInfoWindow.js +++ b/frontend-js/src/main/js/map/window/AbstractInfoWindow.js @@ -25,22 +25,35 @@ function AbstractInfoWindow(params) { // call super constructor ObjectWithListeners.call(this); - this.setIdentifiedElement(params.identifiedElement); + var self = this; + + self.setIdentifiedElement(params.identifiedElement); - this.setCustomMap(params.map); - this.setMarker(params.marker); + self.setCustomMap(params.map); + self.setMarker(params.marker); - this.setContent(this.createWaitingContentDiv()); + self.setContent(this.createWaitingContentDiv()); - this._overlayFullView = []; + self._overlayFullView = []; - this.registerPropertyType("overlayFullView"); + self.registerPropertyType("overlayFullView"); - this.registerListenerType("onShow"); - this.registerListenerType("onUpdate"); + self.registerListenerType("onShow"); + self.registerListenerType("onUpdate"); - this.setGuiUtils(new GuiUtils()); + self.setGuiUtils(new GuiUtils()); + var dbOverlaySearchChanged = function () { + return self.update(); + }; + var searchDbOverlay = params.map.getTopMap().getOverlayByName("search"); + if (searchDbOverlay !== undefined) { + searchDbOverlay.addListener("onSearch", dbOverlaySearchChanged); + } + var commentDbOverlay = params.map.getTopMap().getOverlayByName("comment"); + if (commentDbOverlay !== undefined) { + commentDbOverlay.addListener("onSearch", dbOverlaySearchChanged); + } } AbstractInfoWindow.prototype = Object.create(ObjectWithListeners.prototype); diff --git a/frontend-js/src/main/js/map/window/AliasInfoWindow.js b/frontend-js/src/main/js/map/window/AliasInfoWindow.js index ce8fcecf6223cdf548b7e08844525b9bfd7c7bc9..5f9957d418f073468ce95763fe133a99d75c6df2 100644 --- a/frontend-js/src/main/js/map/window/AliasInfoWindow.js +++ b/frontend-js/src/main/js/map/window/AliasInfoWindow.js @@ -42,8 +42,25 @@ function AliasInfoWindow(params) { }); }; + var dbOverlaySearchChanged = function () { + return self.update(); + }; + params.map.getTopMap().addListener("onShowOverlay", overlayListChanged); params.map.getTopMap().addListener("onHideOverlay", overlayListChanged); + + var drugDbOverlay = params.map.getTopMap().getOverlayByName("drug"); + if (drugDbOverlay !== undefined) { + drugDbOverlay.addListener("onSearch", dbOverlaySearchChanged); + } + var chemicalDbOverlay = params.map.getTopMap().getOverlayByName("chemical"); + if (chemicalDbOverlay !== undefined) { + chemicalDbOverlay.addListener("onSearch", dbOverlaySearchChanged); + } + var mirnaDbOverlay = params.map.getTopMap().getOverlayByName("mirna"); + if (mirnaDbOverlay !== undefined) { + mirnaDbOverlay.addListener("onSearch", dbOverlaySearchChanged); + } } AliasInfoWindow.prototype = Object.create(AbstractInfoWindow.prototype); diff --git a/frontend-js/src/test/js/map/AbstractCustomMap-test.js b/frontend-js/src/test/js/map/AbstractCustomMap-test.js index 642c1db6c89157026254be9ad75846470a958b47..5d433c2ffcbc42189434c798c7092744b5a1299a 100644 --- a/frontend-js/src/test/js/map/AbstractCustomMap-test.js +++ b/frontend-js/src/test/js/map/AbstractCustomMap-test.js @@ -85,7 +85,7 @@ describe('AbstractCustomMap', function () { // mock the behaviour of the map mockObject.getTopMap = function () { - return mockObject; + return helper.createCustomMap(); }; mockObject.getOverlayDataForReaction = function () { return Promise.resolve([]); diff --git a/frontend-js/src/test/js/map/overlay/AbstractDbOverlay-test.js b/frontend-js/src/test/js/map/overlay/AbstractDbOverlay-test.js index 872390761f84edff948e06a4d7436aa53e3c45ea..a5f1240c5dd7497c31dd8e20665559804bbf0714 100644 --- a/frontend-js/src/test/js/map/overlay/AbstractDbOverlay-test.js +++ b/frontend-js/src/test/js/map/overlay/AbstractDbOverlay-test.js @@ -10,8 +10,6 @@ var logger = require('../../logger'); describe('AbstractDbOverlay', function () { var mapMock = { registerDbOverlay: function () { - }, - updateInfoWindowForIdentifiedElement: function () { } }; describe("constructor", function () { diff --git a/frontend-js/src/test/js/map/overlay/DrugDbOverlay-test.js b/frontend-js/src/test/js/map/overlay/DrugDbOverlay-test.js index 0c0666f87f8906fd578ba5d89bcf9ce72e52bfc8..04d73c7b26f9d60aa9c3fa258e521933f6ab4de6 100644 --- a/frontend-js/src/test/js/map/overlay/DrugDbOverlay-test.js +++ b/frontend-js/src/test/js/map/overlay/DrugDbOverlay-test.js @@ -5,9 +5,11 @@ require("../../mocha-config"); var IdentifiedElement = require('../../../../main/js/map/data/IdentifiedElement'); var DrugDbOverlay = require('../../../../main/js/map/overlay/DrugDbOverlay'); +var Point = require('../../../../main/js/map/canvas/Point'); var ServerConnector = require('../../ServerConnector-mock'); -var assert = require('assert'); +var chai = require('chai'); +var assert = chai.assert; describe('DrugDbOverlay', function () { it("constructor 1", function () { @@ -22,23 +24,60 @@ describe('DrugDbOverlay', function () { assert.equal(logger.getWarnings.length, 0); }); - it("searchByQuery", function () { - helper.setUrl("http://test/?id=drug_target_sample"); - - var map, searchDb; - return ServerConnector.getProject("drug_target_sample").then(function (project) { - map = helper.createCustomMap(project); - searchDb = helper.createDrugDbOverlay(map); - return searchDb.searchByQuery("NADH"); - }).then(function (drugs) { - assert.equal(drugs.length, 1); - assert.equal(searchDb.getQueries().length, 1); - return searchDb.getElementsByQuery(searchDb.getQueries()[0]); - }).then(function (elements) { - assert.ok(elements.length > 1); - return searchDb.getIdentifiedElements(); - }).then(function (elements) { - assert.equal(elements.length, 1); + describe("searchByQuery", function () { + it("simple", function () { + helper.setUrl("http://test/?id=drug_target_sample"); + + var map, searchDb; + return ServerConnector.getProject("drug_target_sample").then(function (project) { + map = helper.createCustomMap(project); + searchDb = helper.createDrugDbOverlay(map); + return searchDb.searchByQuery("NADH"); + }).then(function (drugs) { + assert.equal(drugs.length, 1); + assert.equal(searchDb.getQueries().length, 1); + return searchDb.getElementsByQuery(searchDb.getQueries()[0]); + }).then(function (elements) { + assert.ok(elements.length > 1); + return searchDb.getIdentifiedElements(); + }).then(function (elements) { + assert.equal(elements.length, 1); + }); + }); + it("check if info window updated", function () { + helper.setUrl("http://test/?id=drug_target_sample"); + + var map, searchDb, alias, marker, infoWindow; + var ie = new IdentifiedElement({ + id: 436152, + modelId: 20637, + type: 'ALIAS' + }); + return ServerConnector.getProject("drug_target_sample").then(function (project) { + map = helper.createCustomMap(project); + searchDb = helper.createDrugDbOverlay(map); + + return map.getModel().getByIdentifiedElement(ie); + }).then(function (result) { + alias = result; + marker = map.getMapCanvas().createMarker({icon: "empty.png", position: new Point(0, 0)}); + return map.openInfoWindowForIdentifiedElement(ie, marker) + }).then(function (result) { + infoWindow = result; + assert.notOk(infoWindow.getContent().innerHTML.indexOf("NADH") >= 0); + + return searchDb.searchByQuery("NADH"); + }).then(function (drugs) { + assert.equal(drugs.length, 1); + assert.equal(searchDb.getQueries().length, 1); + return searchDb.getElementsByQuery(searchDb.getQueries()[0]); + }).then(function (elements) { + assert.ok(elements.length > 1); + return searchDb.getIdentifiedElements(); + }).then(function (elements) { + assert.ok(infoWindow.getContent().innerHTML.indexOf("NADH") >= 0); + assert.equal(elements.length, 1); + }); }); });