From 6c481debadd6c3563a2b808e255af4d1041df820 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 2 Nov 2018 09:55:51 +0100
Subject: [PATCH] drug/chemical/mirna targets are clickable

---
 frontend-js/src/main/css/global.css           |  9 ++++
 .../main/js/gui/leftPanel/AbstractDbPanel.js  | 41 ++++++++++++++-----
 .../src/main/js/gui/leftPanel/GuiUtils.js     |  6 +--
 3 files changed, 42 insertions(+), 14 deletions(-)

diff --git a/frontend-js/src/main/css/global.css b/frontend-js/src/main/css/global.css
index 1255f3f4e6..383e60080b 100644
--- a/frontend-js/src/main/css/global.css
+++ b/frontend-js/src/main/css/global.css
@@ -155,6 +155,15 @@
     font-weight: 900;
 }
 
+.minerva-search-result-icon {
+    float: left;
+    margin: 0 10px;
+}
+
+.minerva-clickable {
+    cursor: pointer;
+}
+
 .input-field {
     background-color: #21BDF1;
     color: #ffffff;
diff --git a/frontend-js/src/main/js/gui/leftPanel/AbstractDbPanel.js b/frontend-js/src/main/js/gui/leftPanel/AbstractDbPanel.js
index 75fab272c2..cc7c332a7f 100644
--- a/frontend-js/src/main/js/gui/leftPanel/AbstractDbPanel.js
+++ b/frontend-js/src/main/js/gui/leftPanel/AbstractDbPanel.js
@@ -228,10 +228,10 @@ AbstractDbPanel.prototype.refreshSearchResults = function () {
     promises.push(searchDb.getElementsByQuery(queries[i]));
   }
   return Promise.all(promises).then(function (results) {
-    return Promise.each(queries, function(query, index){
+    return Promise.each(queries, function (query, index) {
       return self.addResultTab(query, results[index]);
     });
-  }).then(function(){
+  }).then(function () {
     self.onresize();
   });
 };
@@ -348,7 +348,34 @@ AbstractDbPanel.prototype.createTargetRow = function (target, icon) {
   var i;
   if (target.getTargetElements().length > 0) {
     var submapAddedIds = [];
-    iconColumn.appendChild(guiUtils.createIcon(icon));
+    var elements = target.getTargetElements();
+    for (i = 0; i < elements.length; i++) {
+      var elementId = elements[i].getModelId();
+      if (elementId !== self.getMap().getId() && !submapAddedIds[elementId]) {
+        submaps.push(elementId);
+        submapAddedIds[elementId] = true;
+      }
+    }
+
+    iconColumn.appendChild(guiUtils.createIcon(icon, function () {
+      var maps = submaps.concat([self.getMap().getId()]);
+      var promises = [];
+      for (var j = 0; j < maps.length; j++) {
+        var submap = self.getMap().getSubmapById(maps[j]);
+        var submapElements = [];
+        for (var k = 0; k < elements.length; k++) {
+          if (elements[k].getModelId() === submap.getId()) {
+            submapElements.push(elements[k]);
+          }
+        }
+        if (submap.isInitialized()) {
+          promises.push(submap.getModel().getByIdentifiedElements(submapElements, false).then(function (fetchedElements) {
+            return self.getMap().getSubmapById(fetchedElements[0].getModelId()).fitBounds(fetchedElements);
+          }));
+        }
+      }
+      return Promise.all(promises);
+    }));
     var checkbox = document.createElement('input');
     checkbox.type = "checkbox";
     checkbox.checked = target.isVisible();
@@ -358,14 +385,6 @@ AbstractDbPanel.prototype.createTargetRow = function (target, icon) {
     };
 
     iconColumn.appendChild(checkbox);
-    var elements = target.getTargetElements();
-    for (i = 0; i < elements.length; i++) {
-      var elementId = elements[i].getModelId();
-      if (elementId !== self.getMap().getId() && !submapAddedIds[elementId]) {
-        submaps.push(elementId);
-        submapAddedIds[elementId] = true;
-      }
-    }
   }
 
   var descColumn = document.createElement("td");
diff --git a/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js b/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js
index 58e06c3634..6ccfa96199 100644
--- a/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js
+++ b/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js
@@ -510,11 +510,11 @@ GuiUtils.prototype.createIcon = function (icon, onclickFunction) {
   if (icon !== undefined && icon !== null) {
     var img = document.createElement("img");
     img.src = GuiConnector.getImgPrefix() + icon;
-    img.style.float = "left";
-    img.hspace = 5;
     if (onclickFunction !== undefined) {
       img.onclick = onclickFunction;
-      img.style.cursor = "pointer";
+      img.className = "minerva-search-result-icon minerva-clickable";
+    } else {
+      img.className = "minerva-search-result-icon";
     }
     result.appendChild(img);
   }
-- 
GitLab