From 46ee3622f3d32f9d21577220247baa0ecb9ef797 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 23 Mar 2018 14:05:13 +0100
Subject: [PATCH] Molstar is required on demand

---
 frontend-js/package-lock.json                 |  66 ++++++++++
 .../src/main/js/map/structure/MolStar.js      | 124 +++++++++---------
 frontend-js/src/test/js/mocha-config.js       |   5 +
 3 files changed, 134 insertions(+), 61 deletions(-)

diff --git a/frontend-js/package-lock.json b/frontend-js/package-lock.json
index 5fb93d8111..76a99cd12b 100644
--- a/frontend-js/package-lock.json
+++ b/frontend-js/package-lock.json
@@ -10,6 +10,21 @@
       "integrity": "sha512-bYDPZTX0/s1aihdjLuAgogUAT5M+TpoWChEMea2p0yOcfn5bu3k6cJb9cp6nw268XeSNIGGr+4+/8V5K6BGzLQ==",
       "dev": true
     },
+    "@types/react": {
+      "version": "15.6.14",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-15.6.14.tgz",
+      "integrity": "sha512-k6YJBmHfzkCtk3iT6aN2hclkPYL2fxlSc3dW//G2kENlmMJ/V+pKhqsHdJJeVluIi1bA296cCLLGATLm7WXToQ==",
+      "dev": true
+    },
+    "@types/react-dom": {
+      "version": "15.5.7",
+      "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-15.5.7.tgz",
+      "integrity": "sha512-XGLjgNtPnBuO1cITYWZAk4KbH0UEDqMg2kuG3xx0UgnrcSd6ijO57Fp9rimmrDKcBnx3b2vFQuEYRXu2GihRYQ==",
+      "dev": true,
+      "requires": {
+        "@types/react": "15.6.14"
+      }
+    },
     "JSONStream": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.1.tgz",
@@ -20,6 +35,43 @@
         "through": "2.3.8"
       }
     },
+    "MolStar": {
+      "version": "git://github.com/davidhoksza/MolStar.git#45c20d0ab3ed81bdb555349b953b8add61ae1c55",
+      "dev": true,
+      "requires": {
+        "ProtVista": "git://github.com/davidhoksza/protvista.git#4e4bb737ba1e183291505bd25f8bae2e651ce21e",
+        "downloadjs": "1.4.7",
+        "jquery": "3.3.1",
+        "litemol": "github:dsehnal/LiteMol#a5419c696faa84530dd93acd55b747cf8136902b"
+      },
+      "dependencies": {
+        "jquery": {
+          "version": "3.3.1",
+          "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz",
+          "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==",
+          "dev": true
+        }
+      }
+    },
+    "ProtVista": {
+      "version": "git://github.com/davidhoksza/protvista.git#4e4bb737ba1e183291505bd25f8bae2e651ce21e",
+      "dev": true,
+      "requires": {
+        "d3": "3.5.17",
+        "file-saver": "1.3.3",
+        "jquery": "2.2.4",
+        "jszip": "3.1.4",
+        "underscore": "1.8.3"
+      },
+      "dependencies": {
+        "jquery": {
+          "version": "2.2.4",
+          "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz",
+          "integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI=",
+          "dev": true
+        }
+      }
+    },
     "abab": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz",
@@ -1048,6 +1100,12 @@
         "domelementtype": "1.3.0"
       }
     },
+    "downloadjs": {
+      "version": "1.4.7",
+      "resolved": "https://registry.npmjs.org/downloadjs/-/downloadjs-1.4.7.tgz",
+      "integrity": "sha1-9p+W+UDg0FU9rCkROYZaPNAQHjw=",
+      "dev": true
+    },
     "dual-listbox": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/dual-listbox/-/dual-listbox-1.0.7.tgz",
@@ -1992,6 +2050,14 @@
         "immediate": "3.0.6"
       }
     },
+    "litemol": {
+      "version": "github:dsehnal/LiteMol#a5419c696faa84530dd93acd55b747cf8136902b",
+      "dev": true,
+      "requires": {
+        "@types/react": "15.6.14",
+        "@types/react-dom": "15.5.7"
+      }
+    },
     "lodash": {
       "version": "4.17.4",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
diff --git a/frontend-js/src/main/js/map/structure/MolStar.js b/frontend-js/src/main/js/map/structure/MolStar.js
index e1b64f75d8..98e3a0f261 100644
--- a/frontend-js/src/main/js/map/structure/MolStar.js
+++ b/frontend-js/src/main/js/map/structure/MolStar.js
@@ -1,91 +1,93 @@
 var Functions = require('../../Functions');
 var SubMenu = require('../../gui/SubMenu');
 
-var MolStarPlugin = require('MolStar');
 
 function MolStar(containerParentElement, customMap) {
 
-    var molstarDiv = Functions.createElement({
-        type: "div",
-        id: "minervaMolStarContainer",
-        className: "minerva-molstar-container"
-      });
-      containerParentElement.appendChild(molstarDiv);
+  var molstarDiv = Functions.createElement({
+    type: "div",
+    id: "minervaMolStarContainer",
+    className: "minerva-molstar-container"
+  });
+  containerParentElement.appendChild(molstarDiv);
 
-    this.setContainerElement(molstarDiv);
-    this._customMap = customMap;
+  this.setContainerElement(molstarDiv);
+  this._customMap = customMap;
 }
 
 MolStar.prototype.setContainerElement = function (containerElement) {
-    this._containerElement = containerElement;
+  this._containerElement = containerElement;
 };
 
 MolStar.prototype.getContainerElement = function () {
-    return this._containerElement;
+  return this._containerElement;
 };
 
-function removeFromContextMenu(menu){
-    $(menu.getElement()).find('li:contains("MolStar")').remove();
+function removeFromContextMenu(menu) {
+  $(menu.getElement()).find('li:contains("MolStar")').remove();
 }
 
-MolStar.prototype.activateInContextMenu = function(uniprotIds) {
-
-    var self = this;
-    var menu = this._customMap.getContextMenu();
-    removeFromContextMenu(menu);
-
-    var submenu = new SubMenu({
-        element: Functions.createElement({type: "li"}),
-        name: "Open MolStar",
-        customMap: self._customMap
-    });
-    for (var i=0; i < uniprotIds.length; i++) {
-        var uniprotId = uniprotIds[i];
-        submenu.addOption(uniprotId, function() {
-            self._activate(uniprotId);
-        }, false);
-    }
-    menu.addOption(submenu);
+MolStar.prototype.activateInContextMenu = function (uniprotIds) {
+
+  var self = this;
+  var menu = this._customMap.getContextMenu();
+  removeFromContextMenu(menu);
+
+  var submenu = new SubMenu({
+    element: Functions.createElement({type: "li"}),
+    name: "Open MolStar",
+    customMap: self._customMap
+  });
+  for (var i = 0; i < uniprotIds.length; i++) {
+    var uniprotId = uniprotIds[i];
+    submenu.addOption(uniprotId, function () {
+      self._activate(uniprotId);
+    }, false);
+  }
+  menu.addOption(submenu);
 
 };
 
-MolStar.prototype.deactivateInContextMenu = function() {
-    var menu = this._customMap.getContextMenu();
-    removeFromContextMenu(menu);
-    menu.addOption("Open MolStar (no UniProt ID available)", function(){}, true);
+MolStar.prototype.deactivateInContextMenu = function () {
+  var menu = this._customMap.getContextMenu();
+  removeFromContextMenu(menu);
+  menu.addOption("Open MolStar (no UniProt ID available)", function () {
+  }, true);
 };
 
 MolStar.prototype._deactivate = function () {
-    var container = this.getContainerElement();
-    container.style.display = 'none';
-    $(container).empty();
-    this.molStar.destroy();
-    this.molStar = undefined;
+  var container = this.getContainerElement();
+  container.style.display = 'none';
+  $(container).empty();
+  this.molStar.destroy();
+  this.molStar = undefined;
 };
 
 MolStar.prototype._activate = function (uniprotId) {
 
-    var self = this;
-
-    var container = this.getContainerElement();
-    if (!container) return;
-
-    var molStarCloseButton = Functions.createElement({
-        type: "div",
-        className: "minerva-molstar-close-button",
-        content: 'x'
-    });
-    molStarCloseButton.addEventListener('click', function(){
-        self._deactivate();
-        return false;
-    });
-    container.appendChild(molStarCloseButton);
-
-    this.molStar = new MolStarPlugin({
-        uniprotId: uniprotId,
-        containerId: container.id
-    });
-    container.style.display = 'block';
+  var self = this;
+
+  var container = this.getContainerElement();
+  if (!container) return;
+
+  var molStarCloseButton = Functions.createElement({
+    type: "div",
+    className: "minerva-molstar-close-button",
+    content: 'x'
+  });
+  molStarCloseButton.addEventListener('click', function () {
+    self._deactivate();
+    return false;
+  });
+  container.appendChild(molStarCloseButton);
+
+  var MolStarPlugin = require('MolStar');
+
+  this.molStar = new MolStarPlugin({
+    uniprotId: uniprotId,
+    containerId: container.id
+  });
+  container.style.display = 'block';
 };
 
 
diff --git a/frontend-js/src/test/js/mocha-config.js b/frontend-js/src/test/js/mocha-config.js
index 9d2ffcb822..942792fccc 100644
--- a/frontend-js/src/test/js/mocha-config.js
+++ b/frontend-js/src/test/js/mocha-config.js
@@ -101,6 +101,11 @@ before(function () {
     return {};
   };
 // ---
+  // MolStar is inproperly packed
+  global.MolStar = function(){
+
+  };
+// ---
 
   require('jquery-ui-dist/jquery-ui.js');
 
-- 
GitLab