From 8814432d069f05a8e373cfac6e7b57a544c96130 Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Wed, 23 Aug 2017 09:56:13 +0200 Subject: [PATCH] empty add project dialog added --- frontend-js/.jshintrc | 10 +- frontend-js/src/main/js/ServerConnector.js | 3 - .../src/main/js/gui/AddOverlayDialog.js | 4 +- .../src/main/js/gui/admin/AddProjectDialog.js | 281 ++++++++++++++++++ .../main/js/gui/admin/EditProjectDialog.js | 11 +- .../src/main/js/gui/admin/MapsAdminPanel.js | 27 +- .../src/main/js/gui/leftPanel/OverlayPanel.js | 5 +- .../src/test/js/gui/AddOverlayDialog-test.js | 4 +- .../js/gui/admin/AddProjectDialog-test.js | 19 ++ ...ectDialog.js => EditProjectDialog-test.js} | 0 .../test/js/gui/admin/MapsAdminPanel-test.js | 40 +++ 11 files changed, 380 insertions(+), 24 deletions(-) create mode 100644 frontend-js/src/main/js/gui/admin/AddProjectDialog.js create mode 100644 frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js rename frontend-js/src/test/js/gui/admin/{EditProjectDialog.js => EditProjectDialog-test.js} (100%) diff --git a/frontend-js/.jshintrc b/frontend-js/.jshintrc index 2f82656937..f4cf0adf39 100644 --- a/frontend-js/.jshintrc +++ b/frontend-js/.jshintrc @@ -49,8 +49,12 @@ /* jQuery */ "$" : false, - "jQuery" : false - - } + "jQuery" : false, + + /* bluebird promise */ + "Promise" : true + + }, + "predef": [ "-Promise" ] } diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js index 64753855ee..e8e70b8eb4 100644 --- a/frontend-js/src/main/js/ServerConnector.js +++ b/frontend-js/src/main/js/ServerConnector.js @@ -782,7 +782,6 @@ ServerConnector.updateUserPrivileges = function(params) { var queryParams = { login : params.user.getLogin(), }; - var filterParams = {}; return self.sendPatchRequest(self.getUpdateUserPrivilegesUrl(queryParams), { privileges : params.privileges @@ -800,8 +799,6 @@ ServerConnector.updateUserPrivileges = function(params) { ServerConnector.getUsers = function(forceRefresh) { var self = this; - var queryParams = {}; - var filterParams = {}; if (self._users.length > 0 && !forceRefresh) { return Promise.resolve(self._users); diff --git a/frontend-js/src/main/js/gui/AddOverlayDialog.js b/frontend-js/src/main/js/gui/AddOverlayDialog.js index 05e6116d1d..0dd06950a0 100644 --- a/frontend-js/src/main/js/gui/AddOverlayDialog.js +++ b/frontend-js/src/main/js/gui/AddOverlayDialog.js @@ -3,7 +3,6 @@ /* exported logger */ var AbstractGuiElement = require('./AbstractGuiElement'); -var Annotation = require('../map/data/Annotation'); var GuiConnector = require('../GuiConnector'); var GuiUtils = require('./leftPanel/GuiUtils'); var LayoutData = require('../map/data/LayoutData'); @@ -13,7 +12,7 @@ var Functions = require('../Functions'); var logger = require('../logger'); var HttpStatus = require('http-status-codes'); -var guiUtils = new (require('./leftPanel/GuiUtils'))(); +var Promise = require("bluebird"); function AddOverlayDialog(params) { AbstractGuiElement.call(this, params); @@ -28,7 +27,6 @@ AddOverlayDialog.prototype.constructor = AddOverlayDialog; AddOverlayDialog.prototype.createGui = function() { var self = this; var guiUtils = new GuiUtils(); - var fileContent = null; var content = document.createElement("div"); content.style.width = "100%"; content.style.height = "100%"; diff --git a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js new file mode 100644 index 0000000000..7b07c1e37d --- /dev/null +++ b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js @@ -0,0 +1,281 @@ +"use strict"; + +/* exported logger */ +var Promise = require("bluebird"); + +var AbstractGuiElement = require('../AbstractGuiElement'); +var GuiConnector = require('../../GuiConnector'); + +var Functions = require('../../functions'); +var logger = require('../../logger'); + +var guiUtils = new (require('../leftPanel/GuiUtils'))(); + +function AddProjectDialog(params) { + AbstractGuiElement.call(this, params); + var self = this; + $(self.getElement()).addClass("minerva-edit-project-dialog"); + + self.createGui(); +} + +AddProjectDialog.prototype = Object.create(AbstractGuiElement.prototype); +AddProjectDialog.prototype.constructor = AddProjectDialog; + +AddProjectDialog.prototype.createGui = function() { + var self = this; + var element = self.getElement(); + + var tabDiv = Functions.createElement({ + type : "div", + name : "tabView", + className : "tabbable boxed parentTabs" + }); + element.appendChild(tabDiv); + + var tabMenuDiv = Functions.createElement({ + type : "ul", + className : "nav nav-tabs" + }); + tabDiv.appendChild(tabMenuDiv); + + var tabContentDiv = Functions.createElement({ + type : "div", + className : "tab-content" + }); + tabDiv.appendChild(tabContentDiv); + + self.createGeneralTab(tabMenuDiv, tabContentDiv); + self.createOverlaysTab(tabMenuDiv, tabContentDiv); + self.createSubmapsTab(tabMenuDiv, tabContentDiv); + self.createOverviewImagesTab(tabMenuDiv, tabContentDiv); +}; + +AddProjectDialog.prototype.createGeneralTab = function(tabMenuDiv, tabContentDiv) { + var self = this; + self.addTab({ + tabMenuDiv : tabMenuDiv, + tabContentDiv : tabContentDiv, + name : "GENERAL", + id : "add_project_general_tab", + content : self.createGeneralTabContent(), + }); + +}; + +AddProjectDialog.prototype.addTab = function(params) { + var navLi = guiUtils.createTabMenuObject({ + id : params.id, + name : params.name, + navigationBar : params.tabMenuDiv + }); + params.tabMenuDiv.appendChild(navLi); + + var contentDiv = guiUtils.createTabContentObject({ + id : params.id, + navigationObject : navLi, + navigationBar : params.tabMenuDiv + }); + + if (params.content !== undefined) { + contentDiv.appendChild(params.content); + } + + params.tabContentDiv.appendChild(contentDiv); +}; + +AddProjectDialog.prototype.createGeneralTabContent = function() { + var self = this; + + var result = new Functions.createElement({ + type : "div", + }); + + var table = new Functions.createElement({ + type : "div", + style : "display:table" + }); + result.appendChild(table); + + table.appendChild(self.createInputRow("ProjectId:", "id", "project-id")); + table.appendChild(self.createInputRow("Project name:", "UNKNOWN DISEASE MAP", "project-name")); + table.appendChild(self.createInputRow("Project Disease:", "", "project-disease")); + table.appendChild(self.createInputRow("Organism:", "", "project-organism")); + table.appendChild(self.createInputRow("Version:", "", "project-version")); + + table.appendChild(self.createCheckboxRow("Annotate model automatically:", false, "project-annotate-automatically")); + table.appendChild(self.createCheckboxRow("Verify manual annotations:", false, "project-verify-annotations")); + table.appendChild(self.createCheckboxRow("Cache data:", false, "project-cache-data")); + table.appendChild(self.createCheckboxRow("Auto margin:", true, "project-auto-margin")); + table.appendChild(self.createCheckboxRow("Display as SBGN:", false, "project-sbgn-visualization")); + table.appendChild(self.createCheckboxRow("Semantic zooming:", false, "project-semantic-zooming")); + + var saveProjectButton = Functions.createElement({ + type : "button", + name : "saveProject", + content : '<span class="ui-icon ui-icon-disk"></span> SAVE', + onclick : function() { + return self.onSaveClicked().then(function() { + return self.close(); + }, GuiConnector.alert); + }, + }); + var cancelButton = Functions.createElement({ + type : "button", + name : "cancelProject", + content : '<span class="ui-icon ui-icon-cancel"></span> CANCEL', + onclick : function() { + return self.close(); + }, + }); + var menuRow = Functions.createElement({ + type : "div", + className : "minerva-menu-row", + style : "display:table-row; margin:10px", + }); + result.appendChild(menuRow); + menuRow.appendChild(saveProjectButton); + menuRow.appendChild(cancelButton); + + return result; +}; +AddProjectDialog.prototype.createInputRow = function(labelName, defaultValue, inputName) { + var result = new Functions.createElement({ + type : "div", + style : "display:table-row" + }); + result.appendChild(new Functions.createElement({ + type : "div", + style : "display:table-cell", + content : labelName, + })); + result.appendChild(new Functions.createElement({ + type : "div", + style : "display:table-cell", + content : "<input name='" + inputName + "' value='" + defaultValue + "'/>", + })); + return result; +}; + +AddProjectDialog.prototype.createCheckboxRow = function(labelName, defaultValue, inputName) { + var result = new Functions.createElement({ + type : "div", + style : "display:table-row" + }); + result.appendChild(new Functions.createElement({ + type : "div", + style : "display:table-cell", + content : labelName, + })); + var checked = ""; + if (defaultValue) { + checked = "checked"; + } + result.appendChild(new Functions.createElement({ + type : "div", + style : "display:table-cell", + content : "<checkbox name='" + inputName + "' " + checked + "/>", + })); + return result; +}; + +AddProjectDialog.prototype.createOverlaysTab = function(tabMenuDiv, tabContentDiv) { + var self = this; + self.addTab({ + tabMenuDiv : tabMenuDiv, + tabContentDiv : tabContentDiv, + name : "OVERLAYS", + id : "project_overlays_tab", + content : self.createOverlaysTabContent(), + }); +}; + +AddProjectDialog.prototype.createOverlaysTabContent = function() { + var self = this; + var result = Functions.createElement({ + type : "div", + }); + result.appendChild(self._createOverlayTable()); + return result; +}; + +AddProjectDialog.prototype._createOverlayTable = function() { + var result = Functions.createElement({ + type : "div", + style : "margin-top:10px;", + }); + + return result; +}; + +AddProjectDialog.prototype.createSubmapsTab = function(tabMenuDiv, tabContentDiv) { + var self = this; + self.addTab({ + tabMenuDiv : tabMenuDiv, + tabContentDiv : tabContentDiv, + name : "USERS", + id : "project_submaps_tab", + content : self.createSubmapsTabContent(), + }); +}; + +AddProjectDialog.prototype.createSubmapsTabContent = function() { + var result = Functions.createElement({ + type : "div", + style : "margin-top:10px;", + }); + return result; +}; + +AddProjectDialog.prototype.createOverviewImagesTab = function(tabMenuDiv, tabContentDiv) { + var self = this; + self.addTab({ + tabMenuDiv : tabMenuDiv, + tabContentDiv : tabContentDiv, + name : "USERS", + id : "project_overview_images_tab", + content : self.createOverviewImagesTabContent(), + }); +}; + +AddProjectDialog.prototype.createOverviewImagesTabContent = function() { + var result = Functions.createElement({ + type : "div", + style : "margin-top:10px;", + }); + return result; +}; + +AddProjectDialog.prototype.init = function() { + return Promise.resolve(); +}; + +AddProjectDialog.prototype.destroy = function() { + $(this.getElement()).dialog("destroy"); +}; + +AddProjectDialog.prototype.open = function() { + var self = this; + var div = self.getElement(); + if (!$(div).hasClass("ui-dialog-content")) { + $(div).dialog({ + title : "ADD PROJECT", + width : window.innerWidth / 2, + height : window.innerHeight / 2, + }); + } + $(div).dialog("open"); +}; + +AddProjectDialog.prototype.close = function() { + var self = this; + $(self.getElement()).dialog("close"); +}; + +AddProjectDialog.prototype.clear = function() { + var self = this; + $("input", self.getElement()).val(""); + return Promise.resolve(); +}; + +module.exports = AddProjectDialog; diff --git a/frontend-js/src/main/js/gui/admin/EditProjectDialog.js b/frontend-js/src/main/js/gui/admin/EditProjectDialog.js index 344d41b2ad..702f796670 100644 --- a/frontend-js/src/main/js/gui/admin/EditProjectDialog.js +++ b/frontend-js/src/main/js/gui/admin/EditProjectDialog.js @@ -1,6 +1,7 @@ "use strict"; /* exported logger */ +var Promise = require("bluebird"); var AbstractGuiElement = require('../AbstractGuiElement'); var AddOverlayDialog = require('../AddOverlayDialog'); @@ -275,7 +276,7 @@ EditProjectDialog.prototype._createOverlayTable = function() { result.appendChild(overlaysTable); $(overlaysTable).DataTable({ - fnRowCallback : function(nRow, aData, iDisplayIndex) { + fnRowCallback : function(nRow, aData) { nRow.setAttribute('id', "overlay-" + aData[0]); }, columns : [ { @@ -454,7 +455,7 @@ EditProjectDialog.prototype.setOverlays = function(overlays) { for (var i = 0; i < overlays.length; i++) { var overlay = overlays[i]; self._overlayById[overlay.getId()] = overlay; - var rowData = self.overlayToTableRow(overlay, users) + var rowData = self.overlayToTableRow(overlay, users); data.push(rowData); } dataTable.clear().rows.add(data).draw(); @@ -581,7 +582,7 @@ var prepareMiriamData = function(type, resource) { resource : resource }); } -} +}; EditProjectDialog.prototype.onSaveClicked = function() { var self = this; @@ -645,9 +646,9 @@ EditProjectDialog.prototype.openAddOverlayDialog = function() { customMap : null, element : document.createElement("div"), }); - addOverlayDialog.addListener("onAddOverlay", function(e) { + addOverlayDialog.addListener("onAddOverlay", function() { return self.refreshOverlays(); - }) + }); return addOverlayDialog.init().then(function() { return addOverlayDialog.open(); }); diff --git a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js index c57b920340..47c4e2ce94 100644 --- a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js +++ b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js @@ -3,6 +3,7 @@ /* exported logger */ var AbstractAdminPanel = require('./AbstractAdminPanel'); +var AddProjectDialog = require('./AddProjectDialog'); var EditProjectDialog = require('./EditProjectDialog'); var logger = require('../../logger'); @@ -87,7 +88,7 @@ MapsAdminPanel.prototype._createProjectTableRow = function() { projectsRow.appendChild(projectsTable); $(projectsTable).DataTable({ - fnRowCallback : function(nRow, aData, iDisplayIndex) { + fnRowCallback : function(nRow, aData) { nRow.setAttribute('id', aData[0]); }, columns : [ { @@ -166,7 +167,7 @@ MapsAdminPanel.prototype.setProjects = function(projects) { var data = []; for (var i = 0; i < projects.length; i++) { var project = projects[i]; - var rowData = self.projectToTableRow(project) + var rowData = self.projectToTableRow(project); self.addUpdateListener(project, rowData); data.push(rowData); } @@ -196,8 +197,26 @@ MapsAdminPanel.prototype.addUpdateListener = function(project, dataTableRow) { }; MapsAdminPanel.prototype.onAddClicked = function() { - return Promise.reject(new Error("Not implemented")); + var self = this; + var dialog = self._addDialog; + if (dialog === undefined) { + dialog = new AddProjectDialog({ + element : Functions.createElement({ + type : "div" + }), + customMap : null, + }); + self._addDialog = dialog; + return dialog.init().then(function() { + return dialog.open(); + }); + } else { + dialog.clear(); + dialog.open(); + return Promise.resolve(); + } }; + MapsAdminPanel.prototype.onRefreshClicked = function() { var self = this; return ServerConnector.getProjects(true).then(function(projects) { @@ -231,7 +250,6 @@ MapsAdminPanel.prototype.getDialog = function(project) { MapsAdminPanel.prototype.showEditDialog = function(id) { var self = this; GuiConnector.showProcessing(); - var dialog; return ServerConnector.getProject(id).then(function(project) { return self.getDialog(project); }).then(function(dialog) { @@ -243,6 +261,7 @@ MapsAdminPanel.prototype.showEditDialog = function(id) { return Promise.reject(error); }); }; + MapsAdminPanel.prototype.removeProject = function(id) { return Promise.reject(new Error("Not implemented")); }; diff --git a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js index b0582070f9..f4c13ff149 100644 --- a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js @@ -9,9 +9,6 @@ var PanelControlElementType = require('../PanelControlElementType'); var GuiConnector = require('../../GuiConnector'); var logger = require('../../logger'); var Functions = require('../../Functions'); -var NetworkError = require('../../NetworkError'); - -var HttpStatus = require('http-status-codes'); function OverlayPanel(params) { params.panelName = "overlays"; @@ -365,7 +362,7 @@ OverlayPanel.prototype.openAddOverlayDialog = function() { addOverlayDialog.addListener("onAddOverlay", function(e) { self.getMap().getModel().addLayout(e.arg); return self.refresh(); - }) + }); return addOverlayDialog.init().then(function() { return addOverlayDialog.open(); }); diff --git a/frontend-js/src/test/js/gui/AddOverlayDialog-test.js b/frontend-js/src/test/js/gui/AddOverlayDialog-test.js index dd4759e577..4dae00c29d 100644 --- a/frontend-js/src/test/js/gui/AddOverlayDialog-test.js +++ b/frontend-js/src/test/js/gui/AddOverlayDialog-test.js @@ -25,7 +25,7 @@ describe('AddOverlayDialog', function() { return dialog.processFile(file).then(function(content) { assert.ok(content !== null); }); - }) + }); }); }); @@ -39,7 +39,7 @@ describe('AddOverlayDialog', function() { dialog.setFileContent("s1\n"); return dialog.addOverlay(); - }) + }); }); diff --git a/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js b/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js new file mode 100644 index 0000000000..cf366e7591 --- /dev/null +++ b/frontend-js/src/test/js/gui/admin/AddProjectDialog-test.js @@ -0,0 +1,19 @@ +"use strict"; + +/* exported assert */ +/* exported logger */ + +var AddProjectDialog = require('../../../../main/js/gui/admin/AddProjectDialog'); +var logger = require('../../logger'); + +var assert = require('assert'); + +describe('AddProjectDialog', function() { + it('init', function() { + var dialog = new AddProjectDialog({ + element : testDiv, + customMap : null, + }); + return dialog.init(); + }); +}); diff --git a/frontend-js/src/test/js/gui/admin/EditProjectDialog.js b/frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js similarity index 100% rename from frontend-js/src/test/js/gui/admin/EditProjectDialog.js rename to frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js diff --git a/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js b/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js index 22da3cd520..3d55123783 100644 --- a/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js +++ b/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js @@ -28,4 +28,44 @@ describe('MapsAdminPanel', function() { }); }); + describe('onAddClicked', function() { + it('default', function() { + var mapTab; + var project; + return ServerConnector.getProject().then(function(result) { + project = result; + return ServerConnector.getConfiguration(); + }).then(function(configuration) { + mapTab = new MapsAdminPanel({ + element : testDiv, + project : project, + configuration : configuration, + }); + return mapTab.init(); + }).then(function() { + return mapTab.onAddClicked(); + }); + }); + it('close and reopen', function() { + var mapTab; + var project; + return ServerConnector.getProject().then(function(result) { + project = result; + return ServerConnector.getConfiguration(); + }).then(function(configuration) { + mapTab = new MapsAdminPanel({ + element : testDiv, + project : project, + configuration : configuration, + }); + return mapTab.init(); + }).then(function() { + return mapTab.onAddClicked(); + }).then(function() { + mapTab._addDialog.close(); + return mapTab.onAddClicked(); + }); + }); + }); + }); -- GitLab