diff --git a/frontend-js/src/main/js/gui/Legend.js b/frontend-js/src/main/js/gui/Legend.js new file mode 100644 index 0000000000000000000000000000000000000000..777241f625a8b328da9ff18c7f64b52d83492806 --- /dev/null +++ b/frontend-js/src/main/js/gui/Legend.js @@ -0,0 +1,24 @@ +"use strict"; + +/* exported logger */ + +var AbstractGuiElement = require('./AbstractGuiElement'); +var Functions = require('../Functions'); + +var logger = require('../logger'); + +function Legend(params) { + AbstractGuiElement.call(this, params); +} + +Legend.prototype = Object.create(AbstractGuiElement.prototype); +Legend.prototype.constructor = Legend; + +Legend.prototype.hide = function() { + this.getElement().style.display = "none"; +}; +Legend.prototype.show = function() { + this.getElement().style.display = "block"; +}; + +module.exports = Legend; diff --git a/frontend-js/src/main/js/gui/PanelControlElementType.js b/frontend-js/src/main/js/gui/PanelControlElementType.js index 53066616592d0a2c630d4f8c137ddd72b8d5d4d5..9d58a4a1c8ba3dabbb3fe72b5d4210c7d1a76064 100644 --- a/frontend-js/src/main/js/gui/PanelControlElementType.js +++ b/frontend-js/src/main/js/gui/PanelControlElementType.js @@ -29,10 +29,10 @@ var PanelControlElementType = { USER_TAB_SURNAME_TEXT : "USER_TAB_SURNAME_TEXT", USER_TAB_EMAIL_TEXT : "USER_TAB_EMAIL_TEXT", USER_TAB_LOGOUT_BUTTON : "USER_TAB_LOGOUT_BUTTON", - + SUBMAP_TABLE : "SUBMAP_TABLE", SUBMAP_DIV : "SUBMAP_DIV", - + INFO_DIV : "INFO_DIV", INFO_PROJECT_NAME_TEXT : "INFO_PROJECT_NAME_TEXT", INFO_PROJECT_VERSION_TEXT : "INFO_PROJECT_VERSION_TEXT", @@ -40,7 +40,16 @@ var PanelControlElementType = { INFO_PROJECT_PUBLICATIONS_TEXT : "INFO_PROJECT_PUBLICATIONS_TEXT", INFO_PROJECT_SHOW_PUBLICATIONS_BUTTON : "INFO_PROJECT_SHOW_PUBLICATIONS_BUTTON", INFO_PROJECT_GET_ORIGINAL_FILE_BUTTON : "INFO_PROJECT_GET_ORIGINAL_FILE_BUTTON", - + + MENU_LEGEND_CHECKBOX : "MENU_LEGEND_CHECKBOX", + MENU_HIDE_LEFT_PANEL_BUTTON : "MENU_HIDE_LEFT_PANEL_BUTTON", + MENU_HIDE_LEFT_PANEL_BUTTON_ICON : "MENU_HIDE_LEFT_PANEL_BUTTON_ICON", + MENU_COMMENTS_CHECKBOX : "MENU_COMMENTS_CHECKBOX", + MENU_REFRESH_COMMENTS_BUTTON : "MENU_REFRESH_COMMENTS_BUTTON", + MENU_CLEAR_BUTTON : "MENU_CLEAR_BUTTON", + OVERVIEW_DIALOG_DIV : "OVERVIEW_DIALOG_DIV", + MENU_SHOW_OVERVIEW_BUTTON : "MENU_SHOW_OVERVIEW_BUTTON", + MENU_VERSION_DIV: "MENU_VERSION_DIV", }; module.exports = PanelControlElementType; diff --git a/frontend-js/src/main/js/gui/topMenu/TopMenu.js b/frontend-js/src/main/js/gui/topMenu/TopMenu.js new file mode 100644 index 0000000000000000000000000000000000000000..8c581255d9afc8be11ba1e38a76c7b78923d5b6c --- /dev/null +++ b/frontend-js/src/main/js/gui/topMenu/TopMenu.js @@ -0,0 +1,229 @@ +"use strict"; + +/* exported logger */ + +var AbstractGuiElement = require('../AbstractGuiElement'); +var OverviewDialog = require('../OverviewDialog'); +var PanelControlElementType = require('../PanelControlElementType'); + +var Functions = require('../../Functions'); +var logger = require('../../logger'); + +function TopMenu(params) { + AbstractGuiElement.call(this, params); + var self = this; + + self._createGui(); +} + +TopMenu.prototype = Object.create(AbstractGuiElement.prototype); +TopMenu.prototype.constructor = TopMenu; + +TopMenu.prototype._createGui = function() { + var self = this; + + var overviewDialogDiv = Functions.createElement({ + type : "div", + name : "overviewDialog" + }); + self.getElement().appendChild(overviewDialogDiv); + self.setControlElement(PanelControlElementType.OVERVIEW_DIALOG_DIV, overviewDialogDiv); + + + var hideButtonDiv = Functions.createElement({ + type : "div", + className : "headerHideDivButton" + }); + self.getElement().appendChild(hideButtonDiv); + + var hideButton = Functions.createElement({ + type : "button", + className : "headerHideButton", + name : "hideButton", + }); + hideButtonDiv.appendChild(hideButton); + self.setControlElement(PanelControlElementType.MENU_HIDE_LEFT_PANEL_BUTTON, hideButton); + + var hideButtonIcon = Functions.createElement({ + type : "i", + className : "fa fa-chevron-left", + name : "hideButtonIcon", + }); + hideButton.appendChild(hideButtonIcon); + self.setControlElement(PanelControlElementType.MENU_HIDE_LEFT_PANEL_BUTTON_ICON, hideButtonIcon); + + var versionDiv = Functions.createElement({ + type : "div", + className: "headerTextBold", + name : "versionDiv" + }); + self.getElement().appendChild(versionDiv); + self.setControlElement(PanelControlElementType.MENU_VERSION_DIV, versionDiv); + + var showOverviewDiv = Functions.createElement({ + type : "div", + style : "float: left;", + }); + self.getElement().appendChild(showOverviewDiv); + + var showOverviewButton = Functions.createElement({ + type : "button", + className : "overview_button", + name : "showOverviewButton", + content : "<i class='fa fa-sitemap' style='font-size:18px; font-weight:400; padding-right:10px;'/>SHOW OVERVIEW", + style : "display:none", + }); + showOverviewDiv.appendChild(showOverviewButton); + self.setControlElement(PanelControlElementType.MENU_SHOW_OVERVIEW_BUTTON, showOverviewButton); + + var rightHeaderMenuDiv = Functions.createElement({ + type : "div", + className : "rightHeaderMenu", + }); + self.getElement().appendChild(rightHeaderMenuDiv); + + var div4checkboxes = Functions.createElement({ + type : "div", + className : "div4checkboxes", + }); + rightHeaderMenuDiv.appendChild(div4checkboxes); + + var legendCheckbox = Functions.createElement({ + type : "input", + inputType : "checkbox", + name : "legendCheckbox", + }); + div4checkboxes.appendChild(legendCheckbox); + self.setControlElement(PanelControlElementType.MENU_LEGEND_CHECKBOX, legendCheckbox); + + div4checkboxes.appendChild(Functions.createElement({ + type : "label", + content : "LEGEND", + })); + + var commentCheckbox = Functions.createElement({ + type : "input", + inputType : "checkbox", + name : "commentCheckbox", + }); + div4checkboxes.appendChild(commentCheckbox); + self.setControlElement(PanelControlElementType.MENU_COMMENTS_CHECKBOX, commentCheckbox); + + div4checkboxes.appendChild(Functions.createElement({ + type : "label", + content : "COMMENTS", + })); + + var refreshCommentButton = Functions.createElement({ + type : "button", + className : "overview_button", + name : "refreshCommentButton", + content : "<i class='fa fa-refresh' style='font-size:21px; font-weight:400;'></i>", + style : "display:none", + }); + div4checkboxes.appendChild(refreshCommentButton); + self.setControlElement(PanelControlElementType.MENU_REFRESH_COMMENTS_BUTTON, refreshCommentButton); + + var clearButton = Functions.createElement({ + type : "button", + className : "overview_button", + name : "clearButton", + content : "<i class='fa fa-times' style='font-size:18px; font-weight:300; padding-right:10px;'></i>CLEAR", + }); + rightHeaderMenuDiv.appendChild(clearButton); + self.setControlElement(PanelControlElementType.MENU_CLEAR_BUTTON, clearButton); + +}; + +TopMenu.prototype.init = function() { + var self = this; + self.getControlElement(PanelControlElementType.MENU_LEGEND_CHECKBOX).onclick = function() { + var legend = self.getLegend(); + if (this.checked) { + legend.show(); + } else { + legend.hide(); + } + }; + var hideButton = self.getControlElement(PanelControlElementType.MENU_HIDE_LEFT_PANEL_BUTTON); + var icon = self.getControlElement(PanelControlElementType.MENU_HIDE_LEFT_PANEL_BUTTON_ICON); + hideButton.onclick = function() { + if (icon.className.indexOf("fa-chevron-left") >= 0) { + icon.className = "fa fa-chevron-right"; + self.getLeftPanel().hide(); + } else { + icon.className = "fa fa-chevron-left"; + self.getLeftPanel().show(); + } + google.maps.event.trigger(self.getMap().getGoogleMap(), 'resize'); + }; + + var project = self.getMap().getProject(); + self.getControlElement(PanelControlElementType.MENU_VERSION_DIV).innerHTML = project.getVersion(); + + var commentCheckbox = self.getControlElement(PanelControlElementType.MENU_COMMENTS_CHECKBOX); + var refreshCommentButton = self.getControlElement(PanelControlElementType.MENU_REFRESH_COMMENTS_BUTTON); + commentCheckbox.onclick = function() { + ServerConnector.getSessionData(project).setShowComments(commentCheckbox.checked); + if (commentCheckbox.checked) { + refreshCommentButton.style.display = 'inline'; + } else { + refreshCommentButton.style.display = 'none'; + } + return self.getMap().refreshComments(); + }; + refreshCommentButton.onclick = (function() { + return function() { + self.getMap().refreshComments(); + return false; + }; + })(); + + var clearButton = self.getControlElement(PanelControlElementType.MENU_CLEAR_BUTTON); + clearButton.onclick = (function() { + return function() { + self.getMap().clearData(); + return false; + }; + })(); + + if (project.getTopOverviewImage() !== undefined && project.getTopOverviewImage() !== null) { + var overviewDialog = new OverviewDialog({ + customMap : self.getMap(), + element : self.getControlElement(PanelControlElementType.OVERVIEW_DIALOG_DIV) + }); + var showOverviewButton = self.getControlElement(PanelControlElementType.MENU_SHOW_OVERVIEW_BUTTON); + showOverviewButton.onclick = (function() { + return function() { + overviewDialog.showOverview(); + return false; + }; + })(); + showOverviewButton.style.display = ""; + } + + if (ServerConnector.getSessionData().getShowComments()) { + self.getControlElement(PanelControlElementType.MENU_COMMENTS_CHECKBOX).checked = true; + return self.getMap().refreshComments(); + } else { + return Promise.resolve(); + } +}; + +TopMenu.prototype.setLegend = function(legend) { + this._legend = legend; +}; + +TopMenu.prototype.getLegend = function() { + return this._legend; +}; + +TopMenu.prototype.setLeftPanel = function(leftPanel) { + this._leftPanel = leftPanel; +}; + +TopMenu.prototype.getLeftPanel = function() { + return this._leftPanel; +}; + +module.exports = TopMenu; \ No newline at end of file diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js index a1cb8da06b1ff5ff709c9b7a2e5a8a4f4382bc26..ffd6cb28b4f7110bc32e311c804425b52f11cda2 100644 --- a/frontend-js/src/main/js/minerva.js +++ b/frontend-js/src/main/js/minerva.js @@ -7,10 +7,11 @@ var DbOverlayCollection = require('./map/overlay/DbOverlayCollection'); var ConfigurationType = require('./ConfigurationType'); var ControlType = require('./map/ControlType'); var CustomMap = require('./map/CustomMap'); -var OverviewDialog = require('./gui/OverviewDialog'); var SearchDbOverlay = require('./map/overlay/SearchDbOverlay'); var LeftPanel = require('./gui/leftPanel/LeftPanel'); +var TopMenu = require('./gui/topMenu/TopMenu'); +var Legend = require('./gui/Legend'); var OriginalGuiConnector = require('./GuiConnector'); var OriginalServerConnector = require('./ServerConnector'); @@ -155,6 +156,19 @@ function create(params) { element : document.getElementById("leftPanel"), customMap : result }); + + var topMenu = new TopMenu({ + element : document.getElementById("menuBelt"), + customMap : result + }); + + var legend = new Legend({ + element : document.getElementById("legend"), + customMap : result + }); + + topMenu.setLegend(legend); + topMenu.setLeftPanel(leftPanel); return new Promise(function(resolve, reject) { insertGoogleAnalyticsCode(result).then(function(){ @@ -162,81 +176,8 @@ function create(params) { }).then(function(){ return createLegend(document.getElementById("legend")); }).then(function(){ - document.getElementsByName("legendCheckbox")[0].onclick = function(){ - var legend = document.getElementById("legend"); - if (this.checked) { - legend.style.display="block"; - } else { - legend.style.display="none"; - } - }; - var hideButton = document.getElementsByName("hideButton")[0]; - var icon = document.getElementsByName("hideButtonIcon")[0]; - hideButton.onclick = function(){ - if (icon.className.indexOf("fa-chevron-left")>=0) { - icon.className = "fa fa-chevron-right"; - leftPanel.hide(); - } else { - icon.className = "fa fa-chevron-left"; - leftPanel.show(); - } - google.maps.event.trigger(result.getGoogleMap(), 'resize'); - }; - - var project = params.project; - if (project===undefined) { - project = params.getProject(); - } - document.getElementsByName("versionDiv")[0].innerHTML=project.getVersion(); - - var commentCheckbox = document.getElementsByName("commentCheckbox")[0]; - var refreshCommentButton = document.getElementsByName("refreshCommentButton")[0]; - commentCheckbox.onclick = function() { - ServerConnector.getSessionData(project).setShowComments(commentCheckbox.checked); - if (commentCheckbox.checked) { - refreshCommentButton.style.display = 'inline'; - } else { - refreshCommentButton.style.display = 'none'; - } - return result.refreshComments(); - }; - refreshCommentButton.onclick = (function() { - return function() { - result.refreshComments(); - return false; - }; - })(); - - var clearButton = document.getElementsByName("clearButton")[0]; - clearButton.onclick = (function() { - return function() { - result.clearData(); - return false; - }; - })(); - - if (project.getTopOverviewImage()!== undefined && project.getTopOverviewImage()!== null) { - var overviewDialog = new OverviewDialog({ - customMap: result, - element: document.getElementsByName("overviewDialog")[0] - }); - var showOverviewButton = document.getElementsByName("showOverviewButton")[0]; - showOverviewButton.onclick = (function() { - return function() { - overviewDialog.showOverview(); - return false; - }; - })(); - showOverviewButton.style.display=""; - } - - if (ServerConnector.getSessionData().getShowComments()) { - result.getControl(ControlType.COMMENT_CHECKBOX).checked=true; - return result.refreshComments(); - } else { - return Promise.resolve(); - }}).then(function(){ - + return topMenu.init(); + }).then(function(){ if (GuiConnector.getParams["layout"] !== undefined) { var layouts = params.project.getModel().getLayouts(); var found = false; diff --git a/frontend-js/src/test/js/gui/topMenu/TopMenu-test.js b/frontend-js/src/test/js/gui/topMenu/TopMenu-test.js new file mode 100644 index 0000000000000000000000000000000000000000..707ddb82c715ae7dd70252537da26bfddcaa4314 --- /dev/null +++ b/frontend-js/src/test/js/gui/topMenu/TopMenu-test.js @@ -0,0 +1,46 @@ +"use strict"; + +/* exported logger */ + +var Helper = require('../../helper'); + +require('../../mocha-config.js'); + +var TopMenu = require('../../../../main/js/gui/topMenu/TopMenu'); + +var chai = require('chai'); +var assert = chai.assert; +var logger = require('../../logger'); + +describe('TopMenu', function() { + + var helper; + before(function() { + helper = new Helper(); + }); + + it('constructor', function() { + var map = helper.createCustomMap(); + + new TopMenu({ + element : testDiv, + customMap : map + }); + + assert.equal(logger.getWarnings().length, 0); + + }); + + it('init', function() { + var map = helper.createCustomMap(); + + var topMenu = new TopMenu({ + element : testDiv, + customMap : map + }); + + return topMenu.init(); + + }); + +}); diff --git a/frontend-js/src/test/js/helper.js b/frontend-js/src/test/js/helper.js index 130ee54cb3430895541ca25d308d4357734cf518..d5af8332b57d1127c24e4f619c6fcfbf21687d2b 100644 --- a/frontend-js/src/test/js/helper.js +++ b/frontend-js/src/test/js/helper.js @@ -30,45 +30,7 @@ function Helper() { Helper.prototype.createMenuDiv = function() { var result = document.createElement("div"); - - var hideDiv = document.createElement("div"); - result.appendChild(hideDiv); - - var versionDiv = document.createElement("div"); - versionDiv.setAttribute("name", "versionDiv"); - result.appendChild(versionDiv); - - var button = document.createElement("button"); - button.setAttribute("name", "hideButton"); - hideDiv.appendChild(button); - - var icon = document.createElement("i"); - icon.className = "fa fa-chevron-left"; - icon.setAttribute("name", "hideButtonIcon"); - button.appendChild(icon); - - var legendCheckbox = document.createElement("input"); - legendCheckbox.setAttribute("type", "checkbox"); - legendCheckbox.setAttribute("name", "legendCheckbox"); - result.appendChild(legendCheckbox); - - var commentCheckbox = document.createElement("input"); - commentCheckbox.setAttribute("type", "checkbox"); - commentCheckbox.setAttribute("name", "commentCheckbox"); - result.appendChild(commentCheckbox); - - var refreshCommentButton = document.createElement("button"); - refreshCommentButton.setAttribute("name", "refreshCommentButton"); - result.appendChild(refreshCommentButton); - - var clearButton = document.createElement("button"); - clearButton.setAttribute("name", "clearButton"); - result.appendChild(clearButton); - - var showOverviewButton = document.createElement("button"); - showOverviewButton.setAttribute("name", "showOverviewButton"); - result.appendChild(showOverviewButton); - + result.id="menuBelt"; return result; }; diff --git a/minerva-big/5918/miRTarBase_SE_WR.xls b/minerva-big/5918/miRTarBase_SE_WR.xls new file mode 100644 index 0000000000000000000000000000000000000000..468d4c1038085692575caccd95fc27c0611692c4 Binary files /dev/null and b/minerva-big/5918/miRTarBase_SE_WR.xls differ