From e1700608e4bf8f3af1a9bb576224ca14c9d06a5c Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Mon, 31 Jul 2017 18:34:17 +0200
Subject: [PATCH] link on element provides to search results on the map

---
 .../js/gui/leftPanel/PublicationListDialog.js | 101 ++++++++++--------
 1 file changed, 56 insertions(+), 45 deletions(-)

diff --git a/frontend-js/src/main/js/gui/leftPanel/PublicationListDialog.js b/frontend-js/src/main/js/gui/leftPanel/PublicationListDialog.js
index 6cd57ed65f..8288248455 100644
--- a/frontend-js/src/main/js/gui/leftPanel/PublicationListDialog.js
+++ b/frontend-js/src/main/js/gui/leftPanel/PublicationListDialog.js
@@ -64,51 +64,62 @@ PublicationListDialog.prototype._dataTableAjaxCall = function(data, callback) {
     sortColumn : self.getColumnsDefinition()[data.order[0].column].name,
     sortOrder : data.order[0].dir,
     search : data.search.value,
-  })
-      .then(
-          function(publicationList) {
-            var out = [];
-            var allElements = [];
-            for (var i = 0; i < publicationList.data.length; i++) {
-              var publication = publicationList.data[i].publication.article;
-              var elements = publicationList.data[i].elements;
-
-              var row = [];
-              row[0] = "<a href='" + publication.link + "'>" + publication.id + "</a>";
-              row[1] = publication.title;
-              row[2] = publication.authors.join();
-              row[3] = publication.journal;
-              row[4] = publication.year;
-              row[5] = "<div>";
-              for (var j = 0; j < elements.length; j++) {
-                row[5] += "<a name='" + elements[j].id + "' href='#'>" + elements[j].type + ":" + elements[j].id
-                    + "</a>, ";
-                allElements.push(new IdentifiedElement(elements[j]));
-              }
-              row[5] += "</div>";
-              out.push(row);
-            }
-            callback({
-              draw : data.draw,
-              recordsTotal : publicationList.totalSize,
-              recordsFiltered : publicationList.filteredSize,
-              data : out,
-            });
-            var promises = [];
-            allElements.forEach(function(element) {
-              promises.push(self.getMap().getSubmapById(element.getModelId()).getModel().getByIdentifiedElement(
-                  element, true).then(function(elementData) {
-                var name = null;
-                if (elementData instanceof Alias) {
-                  name = elementData.getName();
-                } else if (elementData instanceof Reaction) {
-                  name = elementData.getReactionId();
-                }
-                $("a[name=" + elementData.getId() + "]", $(self.getElement())).html(name);
-              }));
-            });
-            return Promise.all(promises);
-          });
+  }).then(function(publicationList) {
+    var out = [];
+    var allElements = [];
+    for (var i = 0; i < publicationList.data.length; i++) {
+      var publication = publicationList.data[i].publication.article;
+      var elements = publicationList.data[i].elements;
+
+      var row = [];
+      row[0] = "<a href='" + publication.link + "'>" + publication.id + "</a>";
+      row[1] = publication.title;
+      row[2] = publication.authors.join();
+      row[3] = publication.journal;
+      row[4] = publication.year;
+      row[5] = "<div>";
+      for (var j = 0; j < elements.length; j++) {
+        row[5] += "<a name='" + elements[j].id + "' href='#'>" + elements[j].type + ":" + elements[j].id + "</a>, ";
+        allElements.push(new IdentifiedElement(elements[j]));
+      }
+      row[5] += "</div>";
+      out.push(row);
+    }
+    callback({
+      draw : data.draw,
+      recordsTotal : publicationList.totalSize,
+      recordsFiltered : publicationList.filteredSize,
+      data : out,
+    });
+    var promises = [];
+    allElements.forEach(function(element) {
+      var model = self.getMap().getSubmapById(element.getModelId()).getModel();
+      promises.push(model.getByIdentifiedElement(element, true).then(function(elementData) {
+        var name = null;
+        if (elementData instanceof Alias) {
+          name = elementData.getName();
+        } else if (elementData instanceof Reaction) {
+          name = elementData.getReactionId();
+        }
+        $("a[name=" + elementData.getId() + "]", $(self.getElement())).html(name);
+        var onclick = function() {
+          var searchOverlay = self.getMap().getOverlayByName("search");
+          var query;
+          if (element.getType() === "ALIAS") {
+            query = "element:" + element.getId();
+          } else {
+            query = "reaction:" + element.getId();
+          }
+          self.getMap().openSubmap(elementData.getModelId());
+          return searchOverlay.searchByQuery(query, true, true).then(function() {
+            $(self.getElement()).dialog("close");
+          }).then(null, GuiConnector.alert);
+        }
+        $("a[name=" + elementData.getId() + "]", $(self.getElement())).click(onclick);
+      }));
+    });
+    return Promise.all(promises);
+  });
 };
 
 PublicationListDialog.prototype.show = function() {
-- 
GitLab