From 45aea5a8b33beae7f531d46fd0f651d9c45060cb Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Thu, 2 Aug 2018 17:20:18 +0200
Subject: [PATCH] configurationAdminPanel separates options into tabs

---
 frontend-js/src/main/js/Configuration.js      |   5 +
 .../js/gui/admin/ConfigurationAdminPanel.js   | 163 ++++++++----------
 .../gui/admin/ConfigurationAdminPanel-test.js |  29 ++--
 ...-datatable-length=10&token=ADMIN_TOKEN_ID& |   1 +
 4 files changed, 93 insertions(+), 105 deletions(-)
 create mode 100644 frontend-js/testFiles/apiCalls/users/admin.updatePreferences/PATCH_preferences.gui-preferences.admin-configuration-datatable-length=10&token=ADMIN_TOKEN_ID&

diff --git a/frontend-js/src/main/js/Configuration.js b/frontend-js/src/main/js/Configuration.js
index 871d070dcc..be283044b0 100644
--- a/frontend-js/src/main/js/Configuration.js
+++ b/frontend-js/src/main/js/Configuration.js
@@ -309,6 +309,11 @@ Configuration.prototype.getPrivilegeTypes = function () {
   return this._privilegeTypes;
 };
 
+/**
+ *
+ * @param name
+ * @returns {PrivilegeType}
+ */
 Configuration.prototype.getPrivilegeType = function (name) {
   var self = this;
   var privilegeTypes = self.getPrivilegeTypes();
diff --git a/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js b/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
index 4d19d6bb4b..425efcb4bc 100644
--- a/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
+++ b/frontend-js/src/main/js/gui/admin/ConfigurationAdminPanel.js
@@ -1,18 +1,13 @@
 "use strict";
 
-/* exported Promise*/
-
 var AbstractAdminPanel = require('./AbstractAdminPanel');
 var PrivilegeType = require('../../map/data/PrivilegeType');
 
 var Functions = require('../../Functions');
 var GuiConnector = require('../../GuiConnector');
 
-/* exported logger */
-// noinspection JSUnusedLocalSymbols
 var logger = require('../../logger');
 
-// noinspection JSUnusedLocalSymbols
 var Promise = require("bluebird");
 var xss = require("xss");
 
@@ -31,6 +26,7 @@ function ConfigurationAdminPanel(params) {
   AbstractAdminPanel.call(this, params);
 
   var self = this;
+  $(self.getElement()).removeClass("pre-scrollable");
   $(self.getElement()).addClass("minerva-configuration-tab");
 
   self._createGui();
@@ -45,21 +41,57 @@ ConfigurationAdminPanel.prototype.constructor = ConfigurationAdminPanel;
  */
 ConfigurationAdminPanel.prototype._createGui = function () {
   var self = this;
-  var configurationDiv = Functions.createElement({
-    type: "div"
-  });
-  self.getElement().appendChild(configurationDiv);
+  self.getGuiUtils().initTabContent(self);
 
-  configurationDiv.appendChild(Functions.createElement({
-    type: "h3",
-    content: 'Configuration category: <select name="categorySelect"></select>',
-    xss: false
-  }));
 
-  configurationDiv.appendChild(Functions.createElement({
-    type: "br"
-  }));
+  $(self.getElement()).on("click", "[name='saveOption']", function () {
+    var button = this;
+    return self.saveOption($(button).attr("data")).then(null, GuiConnector.alert);
+  });
+  $(self.getElement()).on("input", ".minerva-color-input", function () {
+    var input = this;
+    var value = $(input).val();
+    var type = $(input).attr("data");
+    if (value.length !== 6) {
+      value = "FFFFFF";
+    }
+    $("[name='edit-color-" + type + "']", self.getElement()).css("background-color", "#" + value);
+  });
+  $(self.getElement()).on("click", ".minerva-color-button", function () {
+    var button = this;
+    var value = $(button).css("background-color");
+    var type = $(button).attr("data");
+    // noinspection JSUnusedGlobalSymbols
+    var colorPicker = $(button).parent().spectrum({
+      color: value,
+      move: function (color) {
+        var value = color.toHexString().replace("#", '');
+        $("[name='edit-" + type + "']", self.getElement()).val(value);
+        $("[name='edit-color-" + type + "']", self.getElement()).css("background-color", "#" + value);
+      },
+      hide: function () {
+        colorPicker.spectrum("destroy");
+      }
+    });
+    return new Promise.delay(1).then(function () {
+      colorPicker.show();
+      colorPicker.spectrum("show");
+    });
+  });
+};
 
+/**
+ *
+ * @param {ConfigurationOption[]} options
+ * @param {string} type
+ */
+ConfigurationAdminPanel.prototype.createOptionsTable = function (options, type) {
+  var self = this;
+
+  var configurationDiv = Functions.createElement({
+    type: "div",
+    className: "pre-scrollable"
+  });
   var configurationTable = Functions.createElement({
     type: "table",
     name: "configurationTable",
@@ -69,10 +101,8 @@ ConfigurationAdminPanel.prototype._createGui = function () {
   configurationDiv.appendChild(configurationTable);
 
   // noinspection JSUnusedGlobalSymbols
-  $(configurationTable).DataTable({
+  var dataTable = $(configurationTable).DataTable({
     columns: [{
-      title: 'Category'
-    }, {
       title: 'Name'
     }, {
       title: 'Value'
@@ -95,40 +125,19 @@ ConfigurationAdminPanel.prototype._createGui = function () {
     }
   });
 
-  $(configurationTable).on("click", "[name='saveOption']", function () {
-    var button = this;
-    return self.saveOption($(button).attr("data")).then(null, GuiConnector.alert);
-  });
-  $(configurationTable).on("input", ".minerva-color-input", function () {
-    var input = this;
-    var value = $(input).val();
-    var type = $(input).attr("data");
-    if (value.length !== 6) {
-      value = "FFFFFF";
+  var data = [];
+
+  for (var i = 0; i < options.length; i++) {
+    var option = options[i];
+    if (option.getGroup() === type) {
+      var rowData = self.optionToTableRow(option);
+      data.push(rowData);
     }
-    $("[name='edit-color-" + type + "']", configurationTable).css("background-color", "#" + value);
-  });
-  $(configurationTable).on("click", ".minerva-color-button", function () {
-    var button = this;
-    var value = $(button).css("background-color");
-    var type = $(button).attr("data");
-    // noinspection JSUnusedGlobalSymbols
-    var colorPicker = $(button).parent().spectrum({
-      color: value,
-      move: function (color) {
-        var value = color.toHexString().replace("#", '');
-        $("[name='edit-" + type + "']", configurationTable).val(value);
-        $("[name='edit-color-" + type + "']", configurationTable).css("background-color", "#" + value);
-      },
-      hide: function () {
-        colorPicker.spectrum("destroy");
-      }
-    });
-    return new Promise.delay(1).then(function () {
-      colorPicker.show();
-      colorPicker.spectrum("show");
-    });
-  });
+  }
+
+  dataTable.clear().rows.add(data).draw();
+
+  self.getGuiUtils().addTab(self, {name: type, content: configurationDiv});
 };
 
 /**
@@ -141,61 +150,42 @@ ConfigurationAdminPanel.prototype.init = function () {
     var configuration = self.getConfiguration();
     var privilege = configuration.getPrivilegeType(PrivilegeType.CONFIGURATION_MANAGE);
     if (user.hasPrivilege(privilege)) {
-      self.setOptions(configuration.getOptions(), true);
+      self.setOptions(configuration.getOptions());
     } else {
       self.disablePanel("You have no privilege to manage configuration");
     }
+  }).then(function(){
   });
 };
 
 /**
  *
  * @param {ConfigurationOption[]} options
- * @param {boolean} editable
  */
-ConfigurationAdminPanel.prototype.setOptions = function (options, editable) {
+ConfigurationAdminPanel.prototype.setOptions = function (options) {
   var self = this;
-  var dataTable = $("[name='configurationTable']", self.getElement()).DataTable();
-  var data = [];
-
-  var categoryDropDown = $("[name='categorySelect']", self.getElement());
-  categoryDropDown.empty();
 
   var categories = {"": true};
-  categoryDropDown.append('<option value=""></option>');
   for (var i = 0; i < options.length; i++) {
     var option = options[i];
-    var rowData = self.optionToTableRow(option, editable);
-    data.push(rowData);
 
     var group = option.getGroup();
     if (categories[group] === undefined && group !== undefined) {
       categories[group] = true;
-      categoryDropDown.append('<option value="' + group + '">' + group + '</option>')
+      self.createOptionsTable(options, group);
     }
   }
-  categoryDropDown.change(function () {
-    logger.warn($(this).val());
-    dataTable.column(0).search($(this).val()).draw();
-  });
-
-  dataTable.clear().rows.add(data).draw();
 };
 
 /**
  *
  * @param {ConfigurationOption} option
- * @param {boolean} editable
  * @returns {Array}
  */
-ConfigurationAdminPanel.prototype.optionToTableRow = function (option, editable) {
+ConfigurationAdminPanel.prototype.optionToTableRow = function (option) {
   var value = option.getValue();
   var row = [];
   var editOption;
-  var disabled = '';
-  if (!editable) {
-    disabled = " disabled ";
-  }
 
   if (option.getValueType() === "STRING" ||
     option.getValueType() === "INTEGER" ||
@@ -221,14 +211,9 @@ ConfigurationAdminPanel.prototype.optionToTableRow = function (option, editable)
     logger.warn("Don't know how to handle: " + option.getValueType());
     editOption = "<input name='edit-" + option.getType() + "' value='" + value + "' readonly/>";
   }
-  var group = option.getGroup();
-  if (group === undefined) {
-    group = "";
-  }
-  row[0] = group;
-  row[1] = option.getCommonName();
-  row[2] = editOption;
-  row[3] = "<button name='saveOption' data='" + option.getType() + "' " + disabled + "><i class='fa fa-save' style='font-size:17px'></i></button>";
+  row[0] = option.getCommonName();
+  row[1] = editOption;
+  row[2] = "<button name='saveOption' data='" + option.getType() + "' ><i class='fa fa-save' style='font-size:17px'></i></button>";
   return row;
 };
 
@@ -262,9 +247,11 @@ ConfigurationAdminPanel.prototype.saveOption = function (type) {
  */
 ConfigurationAdminPanel.prototype.destroy = function () {
   var self = this;
-  var table = $("[name='configurationTable']", self.getElement())[0];
-  if ($.fn.DataTable.isDataTable(table)) {
-    $(table).DataTable().destroy();
+  var tables = $("[name='configurationTable']", self.getElement());
+  for (var i = 0; i < tables.length; i++) {
+    if ($.fn.DataTable.isDataTable(tables[i])) {
+      $(tables[i]).DataTable().destroy();
+    }
   }
 
 };
diff --git a/frontend-js/src/test/js/gui/admin/ConfigurationAdminPanel-test.js b/frontend-js/src/test/js/gui/admin/ConfigurationAdminPanel-test.js
index 88c7e88371..e587f9681a 100644
--- a/frontend-js/src/test/js/gui/admin/ConfigurationAdminPanel-test.js
+++ b/frontend-js/src/test/js/gui/admin/ConfigurationAdminPanel-test.js
@@ -10,10 +10,14 @@ var logger = require('../../logger');
 var chai = require('chai');
 var assert = chai.assert;
 
-function createConfigurationTab(configuration) {
+/**
+ *
+ * @returns {ConfigurationAdminPanel}
+ */
+function createConfigurationTab() {
   return new ConfigurationAdminPanel({
     element: testDiv,
-    configuration: configuration,
+    configuration: helper.getConfiguration(),
     serverConnector: ServerConnector
   });
 }
@@ -23,11 +27,8 @@ describe('ConfigurationAdminPanel', function () {
   describe('init', function () {
     it('admin', function () {
       helper.loginAsAdmin();
-      var mapTab;
-      return ServerConnector.getConfiguration().then(function (configuration) {
-        mapTab = createConfigurationTab(configuration);
-        return mapTab.init();
-      }).then(function () {
+      var mapTab = createConfigurationTab();
+      return mapTab.init().then(function () {
         assert.equal(0, logger.getWarnings().length);
         assert.ok($("[name='saveOption']", testDiv).length > 0);
         assert.notOk($("[name='saveOption']", testDiv).prop('disabled'));
@@ -36,11 +37,8 @@ describe('ConfigurationAdminPanel', function () {
     });
     it('no access', function () {
       helper.loginWithoutAccess();
-      var mapTab;
-      return ServerConnector.getConfiguration().then(function (configuration) {
-        mapTab = createConfigurationTab(configuration);
-        return mapTab.init();
-      }).then(function () {
+      var mapTab = createConfigurationTab();
+      return mapTab.init().then(function () {
         assert.equal(0, logger.getWarnings().length);
         assert.equal($("[name='saveOption']", testDiv).length, 0);
         return mapTab.destroy();
@@ -49,11 +47,8 @@ describe('ConfigurationAdminPanel', function () {
   });
   it('saveOption', function () {
     helper.loginAsAdmin();
-    var mapTab;
-    return ServerConnector.getConfiguration().then(function (configuration) {
-      mapTab = createConfigurationTab(configuration);
-      return mapTab.init();
-    }).then(function () {
+    var mapTab = createConfigurationTab();
+    return mapTab.init().then(function () {
       return mapTab.saveOption(ConfigurationType.DEFAULT_MAP);
     }).then(function () {
       return mapTab.destroy();
diff --git a/frontend-js/testFiles/apiCalls/users/admin.updatePreferences/PATCH_preferences.gui-preferences.admin-configuration-datatable-length=10&token=ADMIN_TOKEN_ID& b/frontend-js/testFiles/apiCalls/users/admin.updatePreferences/PATCH_preferences.gui-preferences.admin-configuration-datatable-length=10&token=ADMIN_TOKEN_ID&
new file mode 100644
index 0000000000..c194425b27
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/users/admin.updatePreferences/PATCH_preferences.gui-preferences.admin-configuration-datatable-length=10&token=ADMIN_TOKEN_ID&
@@ -0,0 +1 @@
+{"preferences":{"annotators-parameters":{},"element-annotators":{"lcsb.mapviewer.model.map.BioEntity":[],"lcsb.mapviewer.model.map.compartment.BottomSquareCompartment":["Gene Ontology"],"lcsb.mapviewer.model.map.compartment.Compartment":["Gene Ontology"],"lcsb.mapviewer.model.map.compartment.LeftSquareCompartment":["Gene Ontology"],"lcsb.mapviewer.model.map.compartment.OvalCompartment":["Gene Ontology"],"lcsb.mapviewer.model.map.compartment.PathwayCompartment":["Gene Ontology"],"lcsb.mapviewer.model.map.compartment.RightSquareCompartment":["Gene Ontology"],"lcsb.mapviewer.model.map.compartment.SquareCompartment":["Gene Ontology"],"lcsb.mapviewer.model.map.compartment.TopSquareCompartment":["Gene Ontology"],"lcsb.mapviewer.model.map.reaction.Reaction":[],"lcsb.mapviewer.model.map.reaction.type.BooleanLogicGateReaction":[],"lcsb.mapviewer.model.map.reaction.type.DissociationReaction":[],"lcsb.mapviewer.model.map.reaction.type.HeterodimerAssociationReaction":[],"lcsb.mapviewer.model.map.reaction.type.KnownTransitionOmittedReaction":[],"lcsb.mapviewer.model.map.reaction.type.NegativeInfluenceReaction":[],"lcsb.mapviewer.model.map.reaction.type.PositiveInfluenceReaction":[],"lcsb.mapviewer.model.map.reaction.type.ReducedModulationReaction":[],"lcsb.mapviewer.model.map.reaction.type.ReducedPhysicalStimulationReaction":[],"lcsb.mapviewer.model.map.reaction.type.ReducedTriggerReaction":[],"lcsb.mapviewer.model.map.reaction.type.StateTransitionReaction":[],"lcsb.mapviewer.model.map.reaction.type.TranscriptionReaction":[],"lcsb.mapviewer.model.map.reaction.type.TranslationReaction":[],"lcsb.mapviewer.model.map.reaction.type.TransportReaction":[],"lcsb.mapviewer.model.map.reaction.type.TruncationReaction":[],"lcsb.mapviewer.model.map.reaction.type.UnknownNegativeInfluenceReaction":[],"lcsb.mapviewer.model.map.reaction.type.UnknownPositiveInfluenceReaction":[],"lcsb.mapviewer.model.map.reaction.type.UnknownReducedModulationReaction":[],"lcsb.mapviewer.model.map.reaction.type.UnknownReducedPhysicalStimulationReaction":[],"lcsb.mapviewer.model.map.reaction.type.UnknownReducedTriggerReaction":[],"lcsb.mapviewer.model.map.reaction.type.UnknownTransitionReaction":[],"lcsb.mapviewer.model.map.species.AntisenseRna":[],"lcsb.mapviewer.model.map.species.Chemical":["Chebi"],"lcsb.mapviewer.model.map.species.Complex":["Gene Ontology"],"lcsb.mapviewer.model.map.species.Degraded":[],"lcsb.mapviewer.model.map.species.Drug":[],"lcsb.mapviewer.model.map.species.Element":[],"lcsb.mapviewer.model.map.species.Gene":["HGNC"],"lcsb.mapviewer.model.map.species.GenericProtein":["Biocompendium","HGNC"],"lcsb.mapviewer.model.map.species.Ion":["Chebi"],"lcsb.mapviewer.model.map.species.IonChannelProtein":["Biocompendium","HGNC"],"lcsb.mapviewer.model.map.species.Phenotype":["Gene Ontology"],"lcsb.mapviewer.model.map.species.Protein":["Biocompendium","HGNC"],"lcsb.mapviewer.model.map.species.ReceptorProtein":["Biocompendium","HGNC"],"lcsb.mapviewer.model.map.species.Rna":["HGNC"],"lcsb.mapviewer.model.map.species.SimpleMolecule":["Chebi"],"lcsb.mapviewer.model.map.species.Species":[],"lcsb.mapviewer.model.map.species.TruncatedProtein":["Biocompendium","HGNC"],"lcsb.mapviewer.model.map.species.Unknown":[]},"element-required-annotations":{"lcsb.mapviewer.model.map.BioEntity":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.compartment.BottomSquareCompartment":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.compartment.Compartment":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.compartment.LeftSquareCompartment":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.compartment.OvalCompartment":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.compartment.PathwayCompartment":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.compartment.RightSquareCompartment":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.compartment.SquareCompartment":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.compartment.TopSquareCompartment":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.Reaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.BooleanLogicGateReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.DissociationReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.HeterodimerAssociationReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.KnownTransitionOmittedReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.NegativeInfluenceReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.PositiveInfluenceReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.ReducedModulationReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.ReducedPhysicalStimulationReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.ReducedTriggerReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.StateTransitionReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.TranscriptionReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.TranslationReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.TransportReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.TruncationReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.UnknownNegativeInfluenceReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.UnknownPositiveInfluenceReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.UnknownReducedModulationReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.UnknownReducedPhysicalStimulationReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.UnknownReducedTriggerReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.reaction.type.UnknownTransitionReaction":{"annotation-list":["PUBMED"],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.AntisenseRna":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.Chemical":{"annotation-list":["CHEBI","PUBCHEM","PUBCHEM_SUBSTANCE"],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.Complex":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.Degraded":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.Drug":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.Element":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.Gene":{"annotation-list":["HGNC","HGNC_SYMBOL"],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.GenericProtein":{"annotation-list":["HGNC","HGNC_SYMBOL"],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.Ion":{"annotation-list":["CHEBI","PUBCHEM","PUBCHEM_SUBSTANCE"],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.IonChannelProtein":{"annotation-list":["HGNC","HGNC_SYMBOL"],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.Phenotype":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.Protein":{"annotation-list":["HGNC","HGNC_SYMBOL"],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.ReceptorProtein":{"annotation-list":["HGNC","HGNC_SYMBOL"],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.Rna":{"annotation-list":["HGNC","HGNC_SYMBOL"],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.SimpleMolecule":{"annotation-list":["CHEBI","PUBCHEM","PUBCHEM_SUBSTANCE"],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.Species":{"annotation-list":[],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.TruncatedProtein":{"annotation-list":["HGNC","HGNC_SYMBOL","CHEMBL_COMPOUND"],"require-at-least-one":true},"lcsb.mapviewer.model.map.species.Unknown":{"annotation-list":[],"require-at-least-one":true}},"element-valid-annotations":{"lcsb.mapviewer.model.map.BioEntity":["PUBMED"],"lcsb.mapviewer.model.map.compartment.BottomSquareCompartment":["GO","MESH_2012","PUBMED"],"lcsb.mapviewer.model.map.compartment.Compartment":["GO","MESH_2012","PUBMED"],"lcsb.mapviewer.model.map.compartment.LeftSquareCompartment":["GO","MESH_2012","PUBMED"],"lcsb.mapviewer.model.map.compartment.OvalCompartment":["GO","MESH_2012","PUBMED"],"lcsb.mapviewer.model.map.compartment.PathwayCompartment":["GO","MESH_2012","PUBMED"],"lcsb.mapviewer.model.map.compartment.RightSquareCompartment":["GO","MESH_2012","PUBMED"],"lcsb.mapviewer.model.map.compartment.SquareCompartment":["GO","MESH_2012","PUBMED"],"lcsb.mapviewer.model.map.compartment.TopSquareCompartment":["GO","MESH_2012","PUBMED"],"lcsb.mapviewer.model.map.reaction.Reaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.BooleanLogicGateReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.DissociationReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.HeterodimerAssociationReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.KnownTransitionOmittedReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.NegativeInfluenceReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.PositiveInfluenceReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.ReducedModulationReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.ReducedPhysicalStimulationReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.ReducedTriggerReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.StateTransitionReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.TranscriptionReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.TranslationReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.TransportReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.TruncationReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.UnknownNegativeInfluenceReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.UnknownPositiveInfluenceReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.UnknownReducedModulationReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.UnknownReducedPhysicalStimulationReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.UnknownReducedTriggerReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.reaction.type.UnknownTransitionReaction":["KEGG_PATHWAY","KEGG_REACTION","PUBMED","REACTOME"],"lcsb.mapviewer.model.map.species.AntisenseRna":["PUBMED"],"lcsb.mapviewer.model.map.species.Chemical":["CHEBI","HMDB","KEGG_COMPOUND","PUBCHEM","PUBCHEM_SUBSTANCE","PUBMED"],"lcsb.mapviewer.model.map.species.Complex":["CHEMBL_TARGET","EC","GO","INTERPRO","MESH_2012","PUBMED"],"lcsb.mapviewer.model.map.species.Degraded":["PUBMED"],"lcsb.mapviewer.model.map.species.Drug":["CHEBI","CHEMBL_COMPOUND","DRUGBANK","HMDB","PUBMED"],"lcsb.mapviewer.model.map.species.Element":["PUBMED"],"lcsb.mapviewer.model.map.species.Gene":["ENSEMBL","ENTREZ","HGNC","HGNC_SYMBOL","KEGG_GENES","MGD","PANTHER","PUBMED","REFSEQ","UNIPROT"],"lcsb.mapviewer.model.map.species.GenericProtein":["CHEMBL_TARGET","EC","ENSEMBL","ENTREZ","HGNC","HGNC_SYMBOL","INTERPRO","KEGG_GENES","MGD","PANTHER","PUBMED","REFSEQ","UNIPROT","UNIPROT_ISOFORM"],"lcsb.mapviewer.model.map.species.Ion":["CHEBI","HMDB","KEGG_COMPOUND","PUBCHEM","PUBCHEM_SUBSTANCE","PUBMED"],"lcsb.mapviewer.model.map.species.IonChannelProtein":["CHEMBL_TARGET","EC","ENSEMBL","ENTREZ","HGNC","HGNC_SYMBOL","INTERPRO","KEGG_GENES","MGD","PANTHER","PUBMED","REFSEQ","UNIPROT","UNIPROT_ISOFORM"],"lcsb.mapviewer.model.map.species.Phenotype":["GO","MESH_2012","OMIM","PUBMED"],"lcsb.mapviewer.model.map.species.Protein":["CHEMBL_TARGET","EC","ENSEMBL","ENTREZ","HGNC","HGNC_SYMBOL","INTERPRO","KEGG_GENES","MGD","PANTHER","PUBMED","REFSEQ","UNIPROT","UNIPROT_ISOFORM","CHEMBL_COMPOUND"],"lcsb.mapviewer.model.map.species.ReceptorProtein":["CHEMBL_TARGET","EC","ENSEMBL","ENTREZ","HGNC","HGNC_SYMBOL","INTERPRO","KEGG_GENES","MGD","PANTHER","PUBMED","REFSEQ","UNIPROT","UNIPROT_ISOFORM"],"lcsb.mapviewer.model.map.species.Rna":["ENSEMBL","ENTREZ","HGNC","HGNC_SYMBOL","KEGG_GENES","MGD","PANTHER","PUBMED","REFSEQ","UNIPROT"],"lcsb.mapviewer.model.map.species.SimpleMolecule":["CHEBI","HMDB","KEGG_COMPOUND","PUBCHEM","PUBCHEM_SUBSTANCE","PUBMED"],"lcsb.mapviewer.model.map.species.Species":["PUBMED"],"lcsb.mapviewer.model.map.species.TruncatedProtein":["CHEMBL_TARGET","EC","ENSEMBL","ENTREZ","HGNC","HGNC_SYMBOL","INTERPRO","KEGG_GENES","MGD","PANTHER","PUBMED","REFSEQ","UNIPROT","UNIPROT_ISOFORM","CHEMBL_COMPOUND"],"lcsb.mapviewer.model.map.species.Unknown":["PUBMED"]},"gui-preferences":{"admin-projects-datatable-length":"10"},"project-upload":{"annotate-model":false,"auto-resize":true,"cache-data":false,"sbgn":false,"semantic-zooming":false,"validate-miriam":true}}}
\ No newline at end of file
-- 
GitLab