diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js index eebb2c97939364987afdc238455ca3bc77be5d9e..7c5ee7d128a8a179f7cffd3573276fd889f81241 100644 --- a/frontend-js/src/main/js/ServerConnector.js +++ b/frontend-js/src/main/js/ServerConnector.js @@ -1693,7 +1693,7 @@ ServerConnector.getSessionData = function (project) { * @param {number} [params.projectId] * @param {Point} params.coordinates * @param {number} [params.count] - * @param {string} [params.type] + * @param {string[]} [params.type] * * @returns {PromiseLike<IdentifiedElement[]>} */ diff --git a/frontend-js/src/main/js/gui/leftPanel/GenericSearchPanel.js b/frontend-js/src/main/js/gui/leftPanel/GenericSearchPanel.js index d0352ecdec6ca3ae683be10341f4f005c8d25c8e..0b0ee47231ab245c0ce9b27aa357ec0214697c6d 100644 --- a/frontend-js/src/main/js/gui/leftPanel/GenericSearchPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/GenericSearchPanel.js @@ -6,6 +6,7 @@ var Promise = require("bluebird"); var AbstractDbPanel = require('./AbstractDbPanel'); var Alias = require('../../map/data/Alias'); +var IdentifiedElement = require('../../map/data/IdentifiedElement'); var InvalidArgumentError = require('../../InvalidArgumentError'); var PanelControlElementType = require('../PanelControlElementType'); var Reaction = require('../../map/data/Reaction'); @@ -22,15 +23,47 @@ var Functions = require('../../Functions'); * @extends AbstractDbPanel */ function GenericSearchPanel(params) { + var self = this; params.panelName = "search"; params.helpTip = "<p>search tab allows to search for particular elements or interactions in the map</p>" + "<p>perfect match tick box active: only terms with an exact match to the query will be returned</p>" + "<p>separate multiple search by semicolon</p>"; params.placeholder = "keyword"; - AbstractDbPanel.call(this, params); + AbstractDbPanel.call(self, params); + + self.createSearchGui(); + + self.getMap().addListener("onBioEntityClick", function (e) { + var identifiedElement = e.arg; + var queries = self.getOverlayDb().getQueries(); + var promises = []; + for (var i = 0; i < queries.length; i++) { + promises.push(self.getOverlayDb().getElementsByQuery(queries[i])); + } + return Promise.all(promises).then(function (elements) { + var tab = -1; + for (var i = 0; i < elements.length; i++) { + for (var j = 0; j < elements[i].length; j++) { + var element = elements[i][j].element; + if (element instanceof SearchBioEntityGroup) { + for (var k = 0; k < element.getBioEntities().length; k++) { + if (new IdentifiedElement(element.getBioEntities()[k]).equals(identifiedElement)) { + tab = i; + } + } + } else if (new IdentifiedElement(element).equals(identifiedElement)) { + tab = i; + } + } + } + var link = $(".parentTabs > .nav-tabs > li > a", self.getElement())[tab]; + if (link !== undefined) { + return link.click(); + } + }); + }); - this.createSearchGui(); } GenericSearchPanel.prototype = Object.create(AbstractDbPanel.prototype); diff --git a/frontend-js/src/main/js/map/data/IdentifiedElement.js b/frontend-js/src/main/js/map/data/IdentifiedElement.js index c2bbe28b91635f18d33c57e28c81c47da1a6492c..5b2e69861f0858a9653a9dea9eaf39ca746e2301 100644 --- a/frontend-js/src/main/js/map/data/IdentifiedElement.js +++ b/frontend-js/src/main/js/map/data/IdentifiedElement.js @@ -267,7 +267,7 @@ IdentifiedElement.prototype.setLineColor = function (lineColor) { /** * - * @param {IdentifiedElement} argument + * @param {Object} argument * @returns {boolean} */ IdentifiedElement.prototype.equals = function (argument) { diff --git a/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js b/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js index f92ba6c44050528ff40beb1403e56c0e3ea4da61..aba0743abf24bdebd69d926d7cb5705308649560 100644 --- a/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js +++ b/frontend-js/src/main/js/map/overlay/SearchDbOverlay.js @@ -95,11 +95,10 @@ SearchDbOverlay.prototype.getElementsByQuery = function (query) { * * @param {IdentifiedElement} identifiedElement * @param {number} zoomLevel - * @param {Point}coordinates * @returns {Promise} * @private */ -SearchDbOverlay.prototype._getFirstVisibleParentOrObject = function (identifiedElement, zoomLevel, coordinates) { +SearchDbOverlay.prototype._getFirstVisibleParentOrObject = function (identifiedElement, zoomLevel) { if (identifiedElement === undefined) { return Promise.resolve(); } @@ -129,7 +128,7 @@ SearchDbOverlay.prototype._getFirstVisibleParentOrObject = function (identifiedE type: "ALIAS", modelId: identifiedElement.getModelId() }); - return self._getFirstVisibleParentOrObject(parent, zoomLevel, coordinates); + return self._getFirstVisibleParentOrObject(parent, zoomLevel); } else { logger.warn("Cannot find visible parent for object. (zoomLevel=" + zoomLevel + ")"); logger.warn(fullElement); @@ -145,7 +144,7 @@ SearchDbOverlay.prototype._getFirstVisibleParentOrObject = function (identifiedE * @param {number} params.modelId * @param {Point} params.coordinates * @param {number} params.zoom - * @returns {Promise} + * @returns {Promise| PromiseLike} */ SearchDbOverlay.prototype.searchByCoordinates = function (params) { var modelId = params.modelId;