diff --git a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js index 79677e9ce9354580dadde4803c8ca9a024d26a9f..aa790153eee47fab1520b54cd07f4cf16e54b467 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 81b5d6bae542c8081088977c4a7dab79563375b3..afd6e5dcb6c08212c1fa179e9c114dd76ba24f5f 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 03f86f7ef2e542ea19f94845e943b173585e671f..a1011046ecd1b85b7e25558d69f6bcfd8cad74b3 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 79ce43f69091a9ca4f6441b3b240ef557981bb67..df927fa1d0288361dfe69130a675ffcca8e0d08e 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 bfa7e4381fcdb56a319461502b4f00bb7169fe96..dedf1de8bb5aafdf079686b12a0b3648aedaf972 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(); + }); });