From 473f913a1f8ef09b355b19aa601ae2464c3885f2 Mon Sep 17 00:00:00 2001
From: Piotr Gawron <piotr.gawron@uni.lu>
Date: Fri, 30 Mar 2018 17:04:28 +0200
Subject: [PATCH] help butrton for upload file

---
 .../src/main/js/gui/admin/AddProjectDialog.js | 11 ++-
 .../src/main/js/gui/admin/MapsAdminPanel.js   |  3 +-
 .../src/main/js/gui/leftPanel/GuiUtils.js     |  1 +
 .../js/gui/admin/AddProjectDialog-test.js     | 84 +++++++------------
 .../test/js/gui/leftPanel/GuiUtils-test.js    |  6 ++
 5 files changed, 50 insertions(+), 55 deletions(-)

diff --git a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js
index 79677e9ce9..aa790153ee 100644
--- a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js
+++ b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js
@@ -10,6 +10,8 @@ var ChooseValidatorsDialog = require('./ChooseValidatorsDialog');
 var GuiConnector = require('../../GuiConnector');
 var OverlayParser = require('../../map/OverlayParser');
 var ZipEntry = require('./ZipEntry');
+var GuiUtils = require('../leftPanel/GuiUtils');
+var ConfigurationType = require('../../ConfigurationType');
 
 var Functions = require('../../Functions');
 // noinspection JSUnusedLocalSymbols
@@ -195,7 +197,10 @@ AddProjectDialog.prototype.createGeneralTabContent = function () {
     var file = e.arg;
     return self.setFileParserForFilename(file.name);
   });
-  table.appendChild(self.createRow([guiUtils.createLabel("Upload file: "), fileInput]));
+
+  var manualUrl = self.getConfiguration().getOption(ConfigurationType.USER_MANUAL_FILE);
+  table.appendChild(self.createRow([guiUtils.createLabel("Upload file: "), fileInput,
+    guiUtils.createHelpButton('File with the map. For a quick start, CellDesigner files are accepted directly. Available options and configurations of the source file are discussed in <a href="' + manualUrl + '">manual</a>.')]));
 
   var fileFormatSelect = Functions.createElement({
     type: "select",
@@ -319,6 +324,7 @@ AddProjectDialog.prototype.createCheckboxRow = function (params) {
   var defaultValue = params.defaultValue;
   var inputName = params.inputName;
   var elements = params.elements;
+  var tooltip = params.tooltip;
   if (elements === undefined) {
     elements = [];
   }
@@ -341,6 +347,9 @@ AddProjectDialog.prototype.createCheckboxRow = function (params) {
   checkBoxDiv.appendChild(checkbox);
   var rowElements = [label, checkBoxDiv];
 
+  if (tooltip !== undefined) {
+    rowElements.append(new GuiUtils().createHelpButton(tooltip));
+  }
   for (var i = 0; i < elements.length; i++) {
     $(elements[i]).css("float", "left");
     checkBoxDiv.appendChild(elements[i]);
diff --git a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js
index 81b5d6bae5..afd6e5dcb6 100644
--- a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js
+++ b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js
@@ -243,7 +243,8 @@ MapsAdminPanel.prototype.onAddClicked = function () {
       element: Functions.createElement({
         type: "div"
       }),
-      customMap: null
+      customMap: null,
+      configuration: self.getConfiguration()
     });
     self._addDialog = dialog;
     return dialog.init().then(function () {
diff --git a/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js b/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js
index 03f86f7ef2..a1011046ec 100644
--- a/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js
+++ b/frontend-js/src/main/js/gui/leftPanel/GuiUtils.js
@@ -9,6 +9,7 @@ var AbstractGuiElement = require('../AbstractGuiElement');
 var Functions = require('../../Functions');
 
 var logger = require('../../logger');
+var xss= require('xss');
 
 var tabIdCounter = 0;
 
diff --git a/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js b/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js
index 79ce43f690..df927fa1d0 100644
--- a/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js
+++ b/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js
@@ -3,6 +3,7 @@
 require("../../mocha-config");
 
 var AddProjectDialog = require('../../../../main/js/gui/admin/AddProjectDialog');
+var ConfigurationType = require('../../../../main/js/ConfigurationType');
 var ServerConnector = require('../../ServerConnector-mock');
 var ValidationError = require('../../../../main/js/ValidationError');
 
@@ -14,12 +15,17 @@ var chai = require('chai');
 var assert = chai.assert;
 
 describe('AddProjectDialog', function () {
-  it('init', function () {
-    helper.loginAsAdmin();
-    var dialog = new AddProjectDialog({
+  var createDialog = function () {
+    return new AddProjectDialog({
       element: testDiv,
-      customMap: null
+      customMap: null,
+      configuration: helper.getConfiguration()
     });
+  };
+  it('init', function () {
+    helper.loginAsAdmin();
+    var dialog = createDialog();
+    var manualUrl;
     return dialog.init().then(function () {
       assert.ok(dialog.getNotifyEmail() !== "");
       assert.equal(0, logger.getWarnings().length);
@@ -27,12 +33,18 @@ describe('AddProjectDialog', function () {
     });
   });
 
-  it('onUserPreferencesChange', function () {
+  it('check help buttons', function () {
     helper.loginAsAdmin();
-    var dialog = new AddProjectDialog({
-      element: testDiv,
-      customMap: null
+    var dialog = createDialog();
+    return dialog.init().then(function () {
+      assert.ok(testDiv.innerHTML.indexOf("minerva-help-button") >= 0);
+      return dialog.destroy();
     });
+  });
+
+  it('onUserPreferencesChange', function () {
+    helper.loginAsAdmin();
+    var dialog = createDialog();
     return dialog.init().then(function () {
       dialog.setCache(false);
       assert.notOk(dialog.isCache());
@@ -44,10 +56,7 @@ describe('AddProjectDialog', function () {
 
   describe('onFileUpload', function () {
     it('default', function () {
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
+      var dialog = createDialog();
 
       var file = new Blob(["<node></node>"]);
       file.name = "test.xml";
@@ -66,10 +75,7 @@ describe('AddProjectDialog', function () {
 
   describe('setZipFileContent', function () {
     it('submaps', function () {
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
+      var dialog = createDialog();
       var buf = fs.readFileSync("testFiles/map/complex_model_with_submaps.zip");
       buf.name = "complex_model_with_submaps.zip";
       return dialog.init().then(function () {
@@ -80,10 +86,7 @@ describe('AddProjectDialog', function () {
       });
     });
     it('overlays', function () {
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
+      var dialog = createDialog();
       var buf = fs.readFileSync("testFiles/map/complex_model_with_overlays.zip");
       buf.name = "complex_model_with_overlays.zip";
       return dialog.init().then(function () {
@@ -100,10 +103,7 @@ describe('AddProjectDialog', function () {
 
   describe('showAnnotatorsDialog', function () {
     it('default', function () {
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
+      var dialog = createDialog();
 
       return dialog.showAnnotatorsDialog().then(function () {
         return dialog.destroy();
@@ -125,11 +125,7 @@ describe('AddProjectDialog', function () {
       ServerConnector.addProject = function (params) {
         options = params;
       };
-
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
+      var dialog = createDialog();
 
       var file = new Blob(["<node></node>"]);
       file.name = "test.xml";
@@ -158,10 +154,7 @@ describe('AddProjectDialog', function () {
   });
 
   it('getOrganism', function () {
-    var dialog = new AddProjectDialog({
-      element: testDiv,
-      customMap: null
-    });
+    var dialog = createDialog();
     dialog.setOrganism("9606");
     assert.equal("9606", dialog.getOrganism());
     return dialog.destroy();
@@ -169,10 +162,7 @@ describe('AddProjectDialog', function () {
 
   describe('checkValidity', function () {
     it('invalid project name', function () {
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
+      var dialog = createDialog();
 
       var file = new Blob(["<node></node>"]);
       file.name = "test.xml";
@@ -190,10 +180,7 @@ describe('AddProjectDialog', function () {
       });
     });
     it('valid project name', function () {
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
+      var dialog = createDialog();
 
       var file = new Blob(["<node></node>"]);
       file.name = "test.xml";
@@ -210,20 +197,14 @@ describe('AddProjectDialog', function () {
 
   describe('isIgnoredZipEntry', function () {
     it('valid entry', function () {
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
+      var dialog = createDialog();
 
       assert.notOk(dialog.isIgnoredZipEntry("images/a.png"));
       assert.notOk(dialog.isIgnoredZipEntry("main.xml"));
       return dialog.destroy();
     });
     it('invalid MAC OS entry', function () {
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
+      var dialog = createDialog();
 
       // noinspection SpellCheckingInspection
       assert.ok(dialog.isIgnoredZipEntry("__MACOSX/.desc"));
@@ -231,10 +212,7 @@ describe('AddProjectDialog', function () {
       return dialog.destroy();
     });
     it('invalid old MAC OS entry', function () {
-      var dialog = new AddProjectDialog({
-        element: testDiv,
-        customMap: null
-      });
+      var dialog = createDialog();
 
       assert.ok(dialog.isIgnoredZipEntry(".DS_Store/.desc"));
       assert.ok(dialog.isIgnoredZipEntry(".ds_store/.desc"));
diff --git a/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js b/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js
index bfa7e4381f..dedf1de8bb 100644
--- a/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js
+++ b/frontend-js/src/test/js/gui/leftPanel/GuiUtils-test.js
@@ -189,4 +189,10 @@ describe('GuiUtils', function () {
     });
 
   });
+  it('createHelpButton', function () {
+    var guiUtils = new GuiUtils(helper.getConfiguration());
+    var button = guiUtils.createHelpButton("test tooltip");
+    button.onclick();
+    $(".ui-dialog-titlebar-close").click();
+  });
 });
-- 
GitLab