diff --git a/frontend-js/src/main/js/gui/Header.js b/frontend-js/src/main/js/gui/Header.js index 0c5b50f08fd65aa427961d6df3edf1053c167e73..318906298f5171774729c02346907b46399f45b4 100644 --- a/frontend-js/src/main/js/gui/Header.js +++ b/frontend-js/src/main/js/gui/Header.js @@ -11,107 +11,109 @@ var Promise = require("bluebird"); var logger = require('../logger'); function Header(params) { - AbstractGuiElement.call(this, params); - var self = this; + AbstractGuiElement.call(this, params); + var self = this; - var guiParams = { - adminLink : true, - }; - if (params.adminLink !== undefined) { - guiParams.adminLink = params.adminLink; - } + var guiParams = { + adminLink: true, + }; + if (params.adminLink !== undefined) { + guiParams.adminLink = params.adminLink; + } - self._createHeaderGui(guiParams); + self._createHeaderGui(guiParams); } Header.prototype = Object.create(AbstractGuiElement.prototype); Header.prototype.constructor = Header; -Header.prototype._createHeaderGui = function(guiParams) { - var self = this; - self.getElement().className = "minerva-header"; - - var projectId = self.getProject().getProjectId(); - var projectName = self.getProject().getName(); - - var loadingDiv = Functions.createElement({ - type : "div", - style : "display:none; ", - }); - loadingDiv.style.float = "right"; - - var loadingImg = Functions.createElement({ - type : "img", - src : 'resources/images/icons/ajax-loader.gif', - }); - loadingImg.style.height = "35px"; - loadingDiv.appendChild(loadingImg); - this.setControlElement(PanelControlElementType.FOOTER_LOADING_DIV, loadingDiv); - - if (guiParams.adminLink) { - var link = Functions.createElement({ - type : "a", - style : "padding-right:15px; float:right", - content : '<i class="fa fa-lock" style="font-size:17px"></i> ', +Header.prototype._createHeaderGui = function (guiParams) { + var self = this; + self.getElement().className = "minerva-header"; + + var projectId = self.getProject().getProjectId(); + var projectName = self.getProject().getName(); + + var loadingDiv = Functions.createElement({ + type: "div", + style: "display:none; ", + }); + loadingDiv.style.float = "right"; + + var loadingImg = Functions.createElement({ + type: "img", + src: 'resources/images/icons/ajax-loader.gif', + }); + loadingImg.style.height = "35px"; + loadingDiv.appendChild(loadingImg); + this.setControlElement(PanelControlElementType.FOOTER_LOADING_DIV, loadingDiv); + + if (guiParams.adminLink) { + var link = Functions.createElement({ + type: "a", + style: "padding-right:15px; float:right", + content: '<i class="fa fa-lock" style="font-size:17px"></i> ', + }); + link.href = ServerConnector.getServerBaseUrl() + "admin.xhtml?id=" + projectId; + self.getElement().appendChild(link); + } + + self.getElement().appendChild(loadingDiv); + + var homeLink = Functions.createElement({ + type: "a", + content: '<i class="fa fa-home" style="font-size:17px"></i> ' + projectName, }); - link.href = ServerConnector.getServerBaseUrl() + "admin.xhtml?id=" + projectId; - self.getElement().appendChild(link); - } - - self.getElement().appendChild(loadingDiv); - - var homeLink = Functions.createElement({ - type : "a", - content : '<i class="fa fa-home" style="font-size:17px"></i> ' + projectName, - }); - homeLink.href = ServerConnector.getServerBaseUrl() + "?id=" + projectId; - self.getElement().appendChild(homeLink); + homeLink.href = ServerConnector.getServerBaseUrl() + "?id=" + projectId; + self.getElement().appendChild(homeLink); }; -Header.prototype.addLoadMessage = function(message) { - var self = this; - self._loadMessages.push(message); +Header.prototype.addLoadMessage = function (message) { + var self = this; + self._loadMessages.push(message); }; -Header.prototype.removeLoadMessage = function(message) { - var self = this; - var index = self._loadMessages.indexOf(message); - if (index > -1) { - self._loadMessages.splice(index, 1); - } else { - logger.debug("Removing message that is not there: " + message); - } +Header.prototype.removeLoadMessage = function (message) { + var self = this; + var index = self._loadMessages.indexOf(message); + if (index > -1) { + self._loadMessages.splice(index, 1); + } else { + logger.debug("Removing message that is not there: " + message); + } }; -Header.prototype.init = function() { - var self = this; - return new Promise(function(resolve) { - var div = self.getControlElement(PanelControlElementType.FOOTER_LOADING_DIV); - - self._loadMessages = []; - self._onDataLoadStart = function(e) { - self.addLoadMessage(e.arg); - div.style.display = "block"; - div.title = e.arg; - }; - - self._onDataLoadStop = function(e) { - self.removeLoadMessage(e.arg); - if (self._loadMessages.length > 0) { - div.title = self._loadMessages[0]; - } else { - div.style.display = "none"; - } - }; - ServerConnector.addListener("onDataLoadStart", self._onDataLoadStart); - ServerConnector.addListener("onDataLoadStop", self._onDataLoadStop); - resolve(); - }); +Header.prototype.init = function () { + var self = this; + return new Promise(function (resolve) { + var div = self.getControlElement(PanelControlElementType.FOOTER_LOADING_DIV); + + self._loadMessages = []; + self._onDataLoadStart = function (e) { + self.addLoadMessage(e.arg); + div.style.display = "block"; + div.title = e.arg; + }; + + self._onDataLoadStop = function (e) { + self.removeLoadMessage(e.arg); + if (self._loadMessages.length > 0) { + div.title = self._loadMessages[0]; + } else { + div.style.display = "none"; + } + }; + ServerConnector.addListener("onDataLoadStart", self._onDataLoadStart); + ServerConnector.addListener("onDataLoadStop", self._onDataLoadStop); + resolve(); + }); }; -Header.prototype.destroy = function() { - var self = this; - ServerConnector.removeListener("onDataLoadStart", self._onDataLoadStart); - ServerConnector.removeListener("onDataLoadStop", self._onDataLoadStop); +Header.prototype.destroy = function () { + var self = this; + if (self._onDataLoadStart) { + ServerConnector.removeListener("onDataLoadStart", self._onDataLoadStart); + ServerConnector.removeListener("onDataLoadStop", self._onDataLoadStop); + } }; module.exports = Header; diff --git a/frontend-js/src/main/js/gui/LoginDialog.js b/frontend-js/src/main/js/gui/LoginDialog.js index 3df04cffff422f59c05771a8e0424f6c88160096..9898081494801c1868670a1abb480a0d317300a7 100644 --- a/frontend-js/src/main/js/gui/LoginDialog.js +++ b/frontend-js/src/main/js/gui/LoginDialog.js @@ -16,18 +16,18 @@ function LoginDialog(params) { var self = this; self._createLoginTab(); $(self.getElement()).dialog({ - autoOpen: false, - resizable: false, + autoOpen : false, + resizable : false, }); var loginButton = self.getControlElement(PanelControlElementType.USER_TAB_LOGIN_BUTTON); - loginButton.onclick = function () { + loginButton.onclick = function() { var login = self.getControlElement(PanelControlElementType.USER_TAB_LOGIN_INPUT_TEXT).value; var password = self.getControlElement(PanelControlElementType.USER_TAB_PASSOWRD_INPUT_TEXT).value; - return ServerConnector.login(login, password).then(function () { + return ServerConnector.login(login, password).then(function() { window.location.reload(false); - }).then(null, function (error) { + }).then(null, function(error) { if (error instanceof InvalidCredentialsError) { GuiConnector.alert("invalid credentials"); } else { @@ -42,15 +42,15 @@ LoginDialog.prototype = Object.create(AbstractGuiElement.prototype); LoginDialog.prototype.constructor = LoginDialog; LoginDialog.prototype.createTableRow = function (elements) { - var row = Functions.createElement({ - type: "div", - style: "display: table-row;" - }); + var row = Functions.createElement({ + type: "div", + style: "display: table-row;" + }); for (var i = 0; i < elements.length; i++) { var cell = Functions.createElement({ - type: "div", - style: "display: table-cell;" + type : "div", + style : "display: table-cell;" }); cell.appendChild(elements[i]); row.appendChild(cell); @@ -59,46 +59,46 @@ LoginDialog.prototype.createTableRow = function (elements) { }; LoginDialog.prototype._createLoginTab = function () { - var self = this; + var self = this; - var authorizationFormTab = Functions.createElement({ - type: "div", - style: "width:100%;display: table;border-spacing: 10px;" - }); - this.getElement().appendChild(authorizationFormTab); + var authorizationFormTab = Functions.createElement({ + type: "div", + style: "width:100%;display: table;border-spacing: 10px;" + }); + this.getElement().appendChild(authorizationFormTab); - var loginLabel = Functions.createElement({ - type: "div", - content: "LOGIN:" - }); - var loginInput = Functions.createElement({ - type: "input", - inputType: "text", - style: "width:100%", - name: "loginText" - }); - this.setControlElement(PanelControlElementType.USER_TAB_LOGIN_INPUT_TEXT, loginInput); + var loginLabel = Functions.createElement({ + type: "div", + content: "LOGIN:" + }); + var loginInput = Functions.createElement({ + type: "input", + inputType: "text", + style: "width:100%", + name: "loginText" + }); + this.setControlElement(PanelControlElementType.USER_TAB_LOGIN_INPUT_TEXT, loginInput); - authorizationFormTab.appendChild(self.createTableRow([loginLabel, loginInput])); + authorizationFormTab.appendChild(self.createTableRow([loginLabel, loginInput])); - var passwordLabel = Functions.createElement({ - type: "div", - content: "PASSWORD:" - }); - var passwordInput = Functions.createElement({ - type: "input", - inputType: "password", - style: "width:100%", - name: "passwordText" - }); - this.setControlElement(PanelControlElementType.USER_TAB_PASSOWRD_INPUT_TEXT, passwordInput); + var passwordLabel = Functions.createElement({ + type: "div", + content: "PASSWORD:" + }); + var passwordInput = Functions.createElement({ + type: "input", + inputType: "password", + style: "width:100%", + name: "passwordText" + }); + this.setControlElement(PanelControlElementType.USER_TAB_PASSOWRD_INPUT_TEXT, passwordInput); - authorizationFormTab.appendChild(self.createTableRow([passwordLabel, passwordInput])); + authorizationFormTab.appendChild(self.createTableRow([passwordLabel, passwordInput])); - var centerTag = Functions.createElement({ - type: "center" - }); - this.getElement().appendChild(centerTag); + var centerTag = Functions.createElement({ + type: "center" + }); + this.getElement().appendChild(centerTag); var loginButton = Functions.createElement({ type: "button", @@ -127,13 +127,13 @@ LoginDialog.prototype.init = function () { }; LoginDialog.prototype.open = function () { - var self = this; - $(self.getElement()).dialog('option', 'title', 'AUTHORIZATION FORM'); - $(self.getElement()).dialog("open"); + var self = this; + $(self.getElement()).dialog('option', 'title', 'AUTHORIZATION FORM'); + $(self.getElement()).dialog("open"); }; LoginDialog.prototype.destroy = function () { - $(this.getElement()).dialog("destroy"); + $(this.getElement()).dialog("destroy"); }; module.exports = LoginDialog; diff --git a/frontend-js/src/main/js/gui/Panel.js b/frontend-js/src/main/js/gui/Panel.js index d4c85402ef7ad3016073ef23f540018e21145813..4daa6ce7105a3e08d6a5f9cf9025a80d22ce891a 100644 --- a/frontend-js/src/main/js/gui/Panel.js +++ b/frontend-js/src/main/js/gui/Panel.js @@ -11,280 +11,291 @@ var Functions = require('../Functions'); var logger = require('../logger'); function Panel(params) { - AbstractGuiElement.call(this, params); - - var self = this; - - self.setParent(params.parent); - var configuration = params.configuration; - if (params.configuration === undefined) { - configuration = self.getMap().getConfiguration(); - } - var guiUtils = new GuiUtils(configuration); - self.setGuiUtils(guiUtils); - if (self.getMap() !== undefined) { - this.getGuiUtils().setMap(self.getMap()); - } - self.setPanelName(params.panelName); - - if (params.scrollable) { - $(self.getElement()).addClass("pre-scrollable"); - } else { - $(self.getElement()).css("overflow-y", "auto"); - } - - $(self.getElement()).css("position", "relative"); - if (params.helpTip !== undefined) { - self.createHelpButton(); - self.setHelpTip(params.helpTip); - } - - GuiConnector.addWindowResizeEvent(function() { - self.onresize(); - }); - - $("a[href='#" + self.getElement().id + "']").on('shown.bs.tab', function() { - self.onresize(); - }); + AbstractGuiElement.call(this, params); + + var self = this; + + self.setParent(params.parent); + var configuration = params.configuration; + if (params.configuration === undefined) { + configuration = self.getMap().getConfiguration(); + } + var guiUtils = new GuiUtils(configuration); + self.setGuiUtils(guiUtils); + if (self.getMap() !== undefined) { + this.getGuiUtils().setMap(self.getMap()); + } + self.setPanelName(params.panelName); + + if (params.scrollable) { + $(self.getElement()).addClass("pre-scrollable"); + } else { + $(self.getElement()).css("overflow-y", "auto"); + } + + $(self.getElement()).css("position", "relative"); + if (params.helpTip !== undefined) { + self.createHelpButton(); + self.setHelpTip(params.helpTip); + } + + GuiConnector.addWindowResizeEvent(function () { + self.onresize(); + }); + + $("a[href='#" + self.getElement().id + "']").on('shown.bs.tab', function () { + self.onresize(); + }); } Panel.prototype = Object.create(AbstractGuiElement.prototype); Panel.prototype.constructor = Panel; -Panel.prototype.createHelpButton = function() { - var self = this; - var helpTipButton = Functions.createElement({ - type : "button", - className : "minerva-help-button", - content : '<span class="ui-icon ui-icon-help" style="margin-left: -0.5em;"/>', - }); - helpTipButton.onclick = function() { - var helpDialogDiv = Functions.createElement({ - type : "div", - content : self.getHelpTip(), +Panel.prototype.createHelpButton = function () { + var self = this; + var helpTipButton = Functions.createElement({ + type: "button", + className: "minerva-help-button", + content: '<span class="ui-icon ui-icon-help" style="margin-left: -0.5em;"/>', }); - $(helpDialogDiv).dialog({ - close : function() { - $(this).dialog('destroy').remove(); - }, - position : { - my : "left top", - at : "left bottom", - of : helpTipButton - }, - }); - $('.ui-dialog').find("a").blur(); - }; - self.getElement().appendChild(helpTipButton); + helpTipButton.onclick = function () { + var helpDialogDiv = Functions.createElement({ + type: "div", + content: self.getHelpTip(), + }); + $(helpDialogDiv).dialog({ + close: function () { + $(this).dialog('destroy').remove(); + }, + position: { + my: "left top", + at: "left bottom", + of: helpTipButton + }, + }); + $('.ui-dialog').find("a").blur(); + }; + self.getElement().appendChild(helpTipButton); }; -Panel.prototype.disablePanel = function(message) { - var self = this; +Panel.prototype.disablePanel = function (message) { + var self = this; - var searchQueryElement = self.getControlElement(PanelControlElementType.SEARCH_DIV); - var searchResultsElement = self.getControlElement(PanelControlElementType.SEARCH_RESULTS_DIV); + var searchQueryElement = self.getControlElement(PanelControlElementType.SEARCH_DIV); + var searchResultsElement = self.getControlElement(PanelControlElementType.SEARCH_RESULTS_DIV); - searchQueryElement.style.visibility = "hidden"; - searchResultsElement.style.visibility = "hidden"; - var hideReasonDiv = document.createElement("div"); - hideReasonDiv.className = "searchPanel"; + searchQueryElement.style.visibility = "hidden"; + searchResultsElement.style.visibility = "hidden"; + var hideReasonDiv = document.createElement("div"); + hideReasonDiv.className = "searchPanel"; - var center = document.createElement("center"); - var messageDiv = document.createElement("h4"); - messageDiv.innerHTML = message; - center.appendChild(messageDiv); - hideReasonDiv.appendChild(center); + var center = document.createElement("center"); + var messageDiv = document.createElement("h4"); + messageDiv.innerHTML = message; + center.appendChild(messageDiv); + hideReasonDiv.appendChild(center); - self.getElement().insertBefore(hideReasonDiv, searchQueryElement); + self.getElement().insertBefore(hideReasonDiv, searchQueryElement); }; -Panel.prototype.isDisbaled = function() { - var self = this; - var searchQueryElement = self.getControlElement(PanelControlElementType.SEARCH_DIV); - return searchQueryElement.style.visibility === "hidden"; +Panel.prototype.isDisbaled = function () { + var self = this; + var searchQueryElement = self.getControlElement(PanelControlElementType.SEARCH_DIV); + return searchQueryElement.style.visibility === "hidden"; }; -Panel.prototype.setMap = function(map) { - this._map = map; +Panel.prototype.setMap = function (map) { + this._map = map; }; -Panel.prototype.getMap = function() { - return this._map; +Panel.prototype.getMap = function () { + return this._map; }; -Panel.prototype.setPanelName = function(panelName) { - this._panelName = panelName; +Panel.prototype.setPanelName = function (panelName) { + this._panelName = panelName; }; -Panel.prototype.getPanelName = function() { - return this._panelName; +Panel.prototype.getPanelName = function () { + return this._panelName; }; -Panel.prototype.setElement = function(element) { - if (element === undefined || element === null) { - throw new Error("DOM Element must be defined"); - } - this._element = element; +Panel.prototype.setElement = function (element) { + if (element === undefined || element === null) { + throw new Error("DOM Element must be defined"); + } + this._element = element; }; -Panel.prototype.getElement = function() { - return this._element; +Panel.prototype.getElement = function () { + return this._element; }; -Panel.prototype.getElementByName = function(element, name) { - if (element !== undefined) { - if (element.getAttribute("name") === name) { - return element; - } - var children = element.children; - for (var i = 0; i < children.length; i++) { - var child = children[i]; - var res = this.getElementByName(child, name); - if (res !== undefined) { - return res; - } +Panel.prototype.getElementByName = function (element, name) { + if (element !== undefined) { + if (element.getAttribute("name") === name) { + return element; + } + var children = element.children; + for (var i = 0; i < children.length; i++) { + var child = children[i]; + var res = this.getElementByName(child, name); + if (res !== undefined) { + return res; + } + } } - } - return undefined; + return undefined; }; -Panel.prototype.getDialogDiv = function(id) { - var dialogs = this.getElementByName(this.getElement(), "dialogs"); - if (dialogs === undefined) { - dialogs = document.createElement("div"); - dialogs.setAttribute("name", "dialogs"); - this.getElement().appendChild(dialogs); +Panel.prototype.getDialogDiv = function (id) { + var dialogs = this.getElementByName(this.getElement(), "dialogs"); + if (dialogs === undefined) { + dialogs = document.createElement("div"); + dialogs.setAttribute("name", "dialogs"); + this.getElement().appendChild(dialogs); - this._dialogs = []; - } + this._dialogs = []; + } - var dialogDiv = this._dialogs[id]; + var dialogDiv = this._dialogs[id]; - if (dialogDiv === undefined) { - dialogDiv = document.createElement("div"); - dialogDiv.className = "ui-widget"; - dialogDiv.setAttribute("name", "dialog-" + id); + if (dialogDiv === undefined) { + dialogDiv = document.createElement("div"); + dialogDiv.className = "ui-widget"; + dialogDiv.setAttribute("name", "dialog-" + id); - var contentDiv = document.createElement("div"); - contentDiv.setAttribute("name", "content"); - dialogDiv.appendChild(contentDiv); + var contentDiv = document.createElement("div"); + contentDiv.setAttribute("name", "content"); + dialogDiv.appendChild(contentDiv); - dialogs.appendChild(dialogDiv); + dialogs.appendChild(dialogDiv); - this._dialogs[id] = dialogDiv; - } - return dialogDiv; + this._dialogs[id] = dialogDiv; + } + return dialogDiv; }; -Panel.prototype.assignDialogOptions = function(div, params) { - var dialog = $(div); - for ( var key in params) { - if (params.hasOwnProperty(key)) { - if (key === "id") { - div.setAttribute("name", "dialog-" + params[key]); - } else if (key === "modal") { - dialog.dialog('option', 'modal', params[key]); - } else if (key === "buttons") { - dialog.dialog('option', 'buttons', params[key]); - } else if (key === "className") { - dialog.dialog('option', 'dialogClass', params[key]); - } else if (key === "title") { - dialog.dialog('option', 'title', params[key]); - } else { - throw new Error("Unknown dialog param: " + key + " - " + params[key]); - } +Panel.prototype.assignDialogOptions = function (div, params) { + var dialog = $(div); + for (var key in params) { + if (params.hasOwnProperty(key)) { + if (key === "id") { + div.setAttribute("name", "dialog-" + params[key]); + } else if (key === "modal") { + dialog.dialog('option', 'modal', params[key]); + } else if (key === "buttons") { + dialog.dialog('option', 'buttons', params[key]); + } else if (key === "className") { + dialog.dialog('option', 'dialogClass', params[key]); + } else if (key === "title") { + dialog.dialog('option', 'title', params[key]); + } else { + throw new Error("Unknown dialog param: " + key + " - " + params[key]); + } + } } - } }; -Panel.prototype.openDialog = function(content, options) { - if (options === undefined) { - options = {}; - } - - if (options.id === undefined) { - logger.warn("Id of dialog is not defined"); - } +Panel.prototype.openDialog = function (content, options) { + if (options === undefined) { + options = {}; + } - var div = this.getDialogDiv(options.id); + if (options.id === undefined) { + logger.warn("Id of dialog is not defined"); + } - var contentDiv = this.getElementByName(div, "content"); - while (contentDiv.hasChildNodes()) { - contentDiv.removeChild(contentDiv.lastChild); - } - contentDiv.appendChild(content); - contentDiv.style.display = "block"; + var div = this.getDialogDiv(options.id); - $(div).dialog({ - close : function() { - contentDiv.style.display = "none"; - $(this).dialog('destroy'); - }, - dialogClass : options.className, - }); + var contentDiv = this.getElementByName(div, "content"); + while (contentDiv.hasChildNodes()) { + contentDiv.removeChild(contentDiv.lastChild); + } + contentDiv.appendChild(content); + contentDiv.style.display = "block"; + + $(div).dialog({ + close: function () { + contentDiv.style.display = "none"; + $(this).dialog('destroy'); + }, + dialogClass: options.className, + }); - this.assignDialogOptions(div, options); + this.assignDialogOptions(div, options); - $(div).dialog("open"); + $(div).dialog("open"); }; -Panel.prototype.init = function() { - throw new Error(this.getPanelName() + " Not implemented"); +Panel.prototype.init = function () { + throw new Error(this.getPanelName() + " Not implemented"); }; -Panel.prototype.setParent = function(parent) { - this._parent = parent; +Panel.prototype.setParent = function (parent) { + this._parent = parent; }; -Panel.prototype.getParent = function() { - return this._parent; +Panel.prototype.getParent = function () { + return this._parent; }; -Panel.prototype.setGuiUtils = function(guiUtils) { - this._guiUtils = guiUtils; +Panel.prototype.setGuiUtils = function (guiUtils) { + this._guiUtils = guiUtils; }; -Panel.prototype.getGuiUtils = function() { - return this._guiUtils; +Panel.prototype.getGuiUtils = function () { + return this._guiUtils; }; -Panel.prototype.setHelpTip = function(helpTip) { - this._helpTip = helpTip; +Panel.prototype.setHelpTip = function (helpTip) { + this._helpTip = helpTip; }; -Panel.prototype.getHelpTip = function() { - return this._helpTip; +Panel.prototype.getHelpTip = function () { + return this._helpTip; }; -Panel.prototype.onresize = function() { - var self = this; - var footerPosition = window.innerHeight; - - // compute the width (we can only compute it for visible elements) - var size = 100000; +Panel.prototype.onresize = function () { + var self = this; + var footerPosition = window.innerHeight; + + // compute the width (we can only compute it for visible elements) + var size = 100000; + + if ($(self.getElement()).is(":visible")) { + + $(".pre-scrollable", self.getElement()).each(function (index, element) { + if ($(element).is(":visible")) { + size = Math.min(size, footerPosition - $(element).offset().top); + } + }); + if ($(self.getElement()).hasClass("pre-scrollable") && $(self.getElement()).is(":visible")) { + size = Math.min(size, footerPosition - $(self.getElement()).offset().top); + } + if (size !== 100000) { + $(".pre-scrollable", self.getElement()).each(function (index, element) { + $(element).css('max-height', size); + $(element).css('height', size); + }); + } + if ($(self.getElement()).hasClass("pre-scrollable") && $(self.getElement()).is(":visible")) { + $(self.getElement()).css('max-height', size); + $(self.getElement()).css('height', size); + } + } - if ($(self.getElement()).is(":visible")) { +}; - $(".pre-scrollable", self.getElement()).each(function(index, element) { - if ($(element).is(":visible")) { - size = Math.min(size, footerPosition - $(element).offset().top); - } - }); - if ($(self.getElement()).hasClass("pre-scrollable") && $(self.getElement()).is(":visible")) { - size = Math.min(size, footerPosition - $(self.getElement()).offset().top); +Panel.prototype.destroy = function () { + for (var id in this._dialogs) { + if (this._dialogs.hasOwnProperty(id)) { + var div = this._dialogs[id]; + if ($(div).hasClass("ui-dialog-content")) { + $(div).dialog("destroy"); + } + } } - if (size !== 100000) { - $(".pre-scrollable", self.getElement()).each(function(index, element) { - $(element).css('max-height', size); - $(element).css('height', size); - }); - } - if ($(self.getElement()).hasClass("pre-scrollable") && $(self.getElement()).is(":visible")) { - $(self.getElement()).css('max-height', size); - $(self.getElement()).css('height', size); - } - } - }; module.exports = Panel; diff --git a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js index b795684725a8951e126d858514bf8b33bf4f6ec3..8abb8cd323817b0f3c44f084a043d50cf3fe16d0 100644 --- a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js +++ b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js @@ -6,7 +6,7 @@ var Promise = require("bluebird"); var AbstractGuiElement = require('../AbstractGuiElement'); var GuiConnector = require('../../GuiConnector'); -var Functions = require('../../functions'); +var Functions = require('../../Functions'); var logger = require('../../logger'); var guiUtils = new (require('../leftPanel/GuiUtils'))(); diff --git a/frontend-js/src/main/js/gui/admin/EditProjectDialog.js b/frontend-js/src/main/js/gui/admin/EditProjectDialog.js index 702f7966703c8d059dcccdb674a105b29b56ef46..461428927b93bec9f360e3774ffd1ad25ed5a4ec 100644 --- a/frontend-js/src/main/js/gui/admin/EditProjectDialog.js +++ b/frontend-js/src/main/js/gui/admin/EditProjectDialog.js @@ -14,644 +14,655 @@ var logger = require('../../logger'); var guiUtils = new (require('../leftPanel/GuiUtils'))(); function EditProjectDialog(params) { - AbstractGuiElement.call(this, params); - var self = this; - $(self.getElement()).addClass("minerva-edit-project-dialog"); + AbstractGuiElement.call(this, params); + var self = this; + $(self.getElement()).addClass("minerva-edit-project-dialog"); - self.createGui(); + self.createGui(); } EditProjectDialog.prototype = Object.create(AbstractGuiElement.prototype); EditProjectDialog.prototype.constructor = EditProjectDialog; -EditProjectDialog.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.createUsersTab(tabMenuDiv, tabContentDiv); +EditProjectDialog.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.createUsersTab(tabMenuDiv, tabContentDiv); }; -EditProjectDialog.prototype.createGeneralTab = function(tabMenuDiv, tabContentDiv) { - var self = this; - self.addTab({ - tabMenuDiv : tabMenuDiv, - tabContentDiv : tabContentDiv, - name : "GENERAL", - id : self.getProject().getProjectId() + "_general_tab", - content : self.createGeneralTabContent(), - }); +EditProjectDialog.prototype.createGeneralTab = function (tabMenuDiv, tabContentDiv) { + var self = this; + self.addTab({ + tabMenuDiv: tabMenuDiv, + tabContentDiv: tabContentDiv, + name: "GENERAL", + id: self.getProject().getProjectId() + "_general_tab", + content: self.createGeneralTabContent(), + }); }; -EditProjectDialog.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); +EditProjectDialog.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); }; -EditProjectDialog.prototype.createGeneralTabContent = function() { - var self = this; - var project = self.getProject(); - - var result = new Functions.createElement({ - type : "div", - }); - - var table = new Functions.createElement({ - type : "div", - style : "display:table" - }); - result.appendChild(table); - - var projectIdRow = new Functions.createElement({ - type : "div", - style : "display:table-row" - }); - table.appendChild(projectIdRow); - projectIdRow.appendChild(new Functions.createElement({ - type : "div", - style : "display:table-cell", - content : "ProjectId", - })); - projectIdRow.appendChild(new Functions.createElement({ - type : "div", - style : "display:table-cell", - content : project.getProjectId(), - })); - - var nameRow = new Functions.createElement({ - type : "div", - style : "display:table-row" - }); - table.appendChild(nameRow); - nameRow.appendChild(new Functions.createElement({ - type : "div", - style : "display:table-cell", - content : "Name", - })); - nameRow.appendChild(new Functions.createElement({ - type : "div", - style : "display:table-cell", - content : "<input name='projectName' value='" + project.getName() + "'/>", - })); - - var versionRow = new Functions.createElement({ - type : "div", - style : "display:table-row" - }); - table.appendChild(versionRow); - versionRow.appendChild(new Functions.createElement({ - type : "div", - style : "display:table-cell", - content : "Version", - })); - versionRow.appendChild(new Functions.createElement({ - type : "div", - style : "display:table-cell", - content : "<input name='projectVersion' value='" + project.getVersion() + "'/>", - })); - - var diseaseRow = new Functions.createElement({ - type : "div", - style : "display:table-row" - }); - table.appendChild(diseaseRow); - diseaseRow.appendChild(new Functions.createElement({ - type : "div", - style : "display:table-cell", - content : "Disease", - })); - var disease = ""; - if (project.getDisease() !== undefined) { - disease = project.getDisease().getResource(); - } - diseaseRow.appendChild(new Functions.createElement({ - type : "div", - style : "display:table-cell", - content : "<input name='projectDisease' value='" + disease + "'/>", - })); - - var organismRow = new Functions.createElement({ - type : "div", - style : "display:table-row" - }); - table.appendChild(organismRow); - organismRow.appendChild(new Functions.createElement({ - type : "div", - style : "display:table-cell", - content : "Organism", - })); - var organism = ""; - if (project.getOrganism() !== undefined) { - organism = project.getOrganism().getResource(); - } - organismRow.appendChild(new Functions.createElement({ - type : "div", - style : "display:table-cell", - content : "<input name='projectOrganism' value='" + organism + "'/>", - })); - - var emailRow = new Functions.createElement({ - type : "div", - style : "display:table-row" - }); - table.appendChild(emailRow); - emailRow.appendChild(new Functions.createElement({ - type : "div", - style : "display:table-cell", - content : "Notify email", - })); - var email = ""; - if (project.getNotifyEmail() !== undefined) { - email = project.getNotifyEmail(); - } - emailRow.appendChild(new Functions.createElement({ - type : "div", - style : "display:table-cell", - content : "<input name='projectNotifyEmail' value='" + email + "'/>", - })); - - var menuRow = Functions.createElement({ - type : "div", - className : "minerva-menu-row", - style : "display:table-row; margin:10px", - }); - result.appendChild(menuRow); - - 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(); - }, - }); - menuRow.appendChild(saveProjectButton); - menuRow.appendChild(cancelButton); - - return result; +EditProjectDialog.prototype.createGeneralTabContent = function () { + var self = this; + var project = self.getProject(); + + var result = new Functions.createElement({ + type: "div", + }); + + var table = new Functions.createElement({ + type: "div", + style: "display:table" + }); + result.appendChild(table); + + var projectIdRow = new Functions.createElement({ + type: "div", + style: "display:table-row" + }); + table.appendChild(projectIdRow); + projectIdRow.appendChild(new Functions.createElement({ + type: "div", + style: "display:table-cell", + content: "ProjectId", + })); + projectIdRow.appendChild(new Functions.createElement({ + type: "div", + style: "display:table-cell", + content: project.getProjectId(), + })); + + var nameRow = new Functions.createElement({ + type: "div", + style: "display:table-row" + }); + table.appendChild(nameRow); + nameRow.appendChild(new Functions.createElement({ + type: "div", + style: "display:table-cell", + content: "Name", + })); + nameRow.appendChild(new Functions.createElement({ + type: "div", + style: "display:table-cell", + content: "<input name='projectName' value='" + project.getName() + "'/>", + })); + + var versionRow = new Functions.createElement({ + type: "div", + style: "display:table-row" + }); + table.appendChild(versionRow); + versionRow.appendChild(new Functions.createElement({ + type: "div", + style: "display:table-cell", + content: "Version", + })); + versionRow.appendChild(new Functions.createElement({ + type: "div", + style: "display:table-cell", + content: "<input name='projectVersion' value='" + project.getVersion() + "'/>", + })); + + var diseaseRow = new Functions.createElement({ + type: "div", + style: "display:table-row" + }); + table.appendChild(diseaseRow); + diseaseRow.appendChild(new Functions.createElement({ + type: "div", + style: "display:table-cell", + content: "Disease", + })); + var disease = ""; + if (project.getDisease() !== undefined) { + disease = project.getDisease().getResource(); + } + diseaseRow.appendChild(new Functions.createElement({ + type: "div", + style: "display:table-cell", + content: "<input name='projectDisease' value='" + disease + "'/>", + })); + + var organismRow = new Functions.createElement({ + type: "div", + style: "display:table-row" + }); + table.appendChild(organismRow); + organismRow.appendChild(new Functions.createElement({ + type: "div", + style: "display:table-cell", + content: "Organism", + })); + var organism = ""; + if (project.getOrganism() !== undefined) { + organism = project.getOrganism().getResource(); + } + organismRow.appendChild(new Functions.createElement({ + type: "div", + style: "display:table-cell", + content: "<input name='projectOrganism' value='" + organism + "'/>", + })); + + var emailRow = new Functions.createElement({ + type: "div", + style: "display:table-row" + }); + table.appendChild(emailRow); + emailRow.appendChild(new Functions.createElement({ + type: "div", + style: "display:table-cell", + content: "Notify email", + })); + var email = ""; + if (project.getNotifyEmail() !== undefined) { + email = project.getNotifyEmail(); + } + emailRow.appendChild(new Functions.createElement({ + type: "div", + style: "display:table-cell", + content: "<input name='projectNotifyEmail' value='" + email + "'/>", + })); + + var menuRow = Functions.createElement({ + type: "div", + className: "minerva-menu-row", + style: "display:table-row; margin:10px", + }); + result.appendChild(menuRow); + + 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(); + }, + }); + menuRow.appendChild(saveProjectButton); + menuRow.appendChild(cancelButton); + + return result; }; -EditProjectDialog.prototype.createOverlaysTab = function(tabMenuDiv, tabContentDiv) { - var self = this; - self.addTab({ - tabMenuDiv : tabMenuDiv, - tabContentDiv : tabContentDiv, - name : "OVERLAYS", - id : self.getProject().getProjectId() + "_overlays_tab", - content : self.createOverlaysTabContent(), - }); +EditProjectDialog.prototype.createOverlaysTab = function (tabMenuDiv, tabContentDiv) { + var self = this; + self.addTab({ + tabMenuDiv: tabMenuDiv, + tabContentDiv: tabContentDiv, + name: "OVERLAYS", + id: self.getProject().getProjectId() + "_overlays_tab", + content: self.createOverlaysTabContent(), + }); }; -EditProjectDialog.prototype.createOverlaysTabContent = function() { - var self = this; - var result = Functions.createElement({ - type : "div", - }); - result.appendChild(self._createOverlayTable()); - return result; +EditProjectDialog.prototype.createOverlaysTabContent = function () { + var self = this; + var result = Functions.createElement({ + type: "div", + }); + result.appendChild(self._createOverlayTable()); + return result; }; -EditProjectDialog.prototype._createOverlayTable = function() { - var self = this; - - var result = Functions.createElement({ - type : "div", - style : "margin-top:10px;", - }); - - var overlaysTable = Functions.createElement({ - type : "table", - name : "overlaysTable", - className : "display", - style : "width:100%", - }); - result.appendChild(overlaysTable); - - $(overlaysTable).DataTable({ - fnRowCallback : function(nRow, aData) { - nRow.setAttribute('id', "overlay-" + aData[0]); - }, - columns : [ { - title : 'Id', - }, { - title : 'Name', - }, { - title : 'Description', - }, { - title : 'Public', - }, { - title : 'Owner', - }, { - title : 'Data', - }, { - title : 'Update', - }, { - title : 'Remove', - }, ], - dom : '<"minerva-datatable-toolbar">frtip', - initComplete : function() { - $("div.minerva-datatable-toolbar", $(result)).html('<button name="addOverlay">Add overlay</button>'); - }, - - }); - - $(overlaysTable).on("click", "[name='removeOverlay']", function() { - var button = this; - return self.removeOverlay($(button).attr("data")).then(null, GuiConnector.alert); - }); - - $(overlaysTable).on("click", "[name='saveOverlay']", function() { - var button = this; - GuiConnector.showProcessing("Updating"); - return self.saveOverlay($(button).attr("data")).then(function() { - GuiConnector.hideProcessing(); - GuiConnector.info("Overlay updated successfully"); - }, function(error) { - GuiConnector.hideProcessing(); - GuiConnector.alert(error); - }); - }); - - $(overlaysTable).on("click", "[name='downloadSource']", function() { - var button = this; - return ServerConnector.getOverlaySourceDownloadUrl({ - overlayId : $(button).attr("data") - }).then(function(url) { - return self.downloadFile(url); - }).then(null, GuiConnector.alert); - }); - - $(result).on("click", "[name='addOverlay']", function() { - return self.openAddOverlayDialog(); - }); - - return result; +EditProjectDialog.prototype._createOverlayTable = function () { + var self = this; + + var result = Functions.createElement({ + type: "div", + style: "margin-top:10px;", + }); + + var overlaysTable = Functions.createElement({ + type: "table", + name: "overlaysTable", + className: "display", + style: "width:100%", + }); + result.appendChild(overlaysTable); + + $(overlaysTable).DataTable({ + fnRowCallback: function (nRow, aData) { + nRow.setAttribute('id', "overlay-" + aData[0]); + }, + columns: [{ + title: 'Id', + }, { + title: 'Name', + }, { + title: 'Description', + }, { + title: 'Public', + }, { + title: 'Owner', + }, { + title: 'Data', + }, { + title: 'Update', + }, { + title: 'Remove', + },], + dom: '<"minerva-datatable-toolbar">frtip', + initComplete: function () { + $("div.minerva-datatable-toolbar", $(result)).html('<button name="addOverlay">Add overlay</button>'); + }, + + }); + + $(overlaysTable).on("click", "[name='removeOverlay']", function () { + var button = this; + return self.removeOverlay($(button).attr("data")).then(null, GuiConnector.alert); + }); + + $(overlaysTable).on("click", "[name='saveOverlay']", function () { + var button = this; + GuiConnector.showProcessing("Updating"); + return self.saveOverlay($(button).attr("data")).then(function () { + GuiConnector.hideProcessing(); + GuiConnector.info("Overlay updated successfully"); + }, function (error) { + GuiConnector.hideProcessing(); + GuiConnector.alert(error); + }); + }); + + $(overlaysTable).on("click", "[name='downloadSource']", function () { + var button = this; + return ServerConnector.getOverlaySourceDownloadUrl({ + overlayId: $(button).attr("data") + }).then(function (url) { + return self.downloadFile(url); + }).then(null, GuiConnector.alert); + }); + + $(result).on("click", "[name='addOverlay']", function () { + return self.openAddOverlayDialog(); + }); + + return result; }; -EditProjectDialog.prototype.createUsersTab = function(tabMenuDiv, tabContentDiv) { - var self = this; - self.addTab({ - tabMenuDiv : tabMenuDiv, - tabContentDiv : tabContentDiv, - name : "USERS", - id : self.getProject().getProjectId() + "_users_tab", - content : self.createUsersTabContent(), - }); +EditProjectDialog.prototype.createUsersTab = function (tabMenuDiv, tabContentDiv) { + var self = this; + self.addTab({ + tabMenuDiv: tabMenuDiv, + tabContentDiv: tabContentDiv, + name: "USERS", + id: self.getProject().getProjectId() + "_users_tab", + content: self.createUsersTabContent(), + }); }; -EditProjectDialog.prototype.createUsersTabContent = function() { - var self = this; - - var result = Functions.createElement({ - type : "div", - style : "margin-top:10px;", - }); - - var usersTable = Functions.createElement({ - type : "table", - name : "usersTable", - className : "display", - style : "width:100%", - }); - result.appendChild(usersTable); - - $(usersTable).on("click", "[name='saveUser']", function() { - var button = this; - GuiConnector.showProcessing("Updating"); - return self.saveUser($(button).attr("data")).then(function() { - GuiConnector.hideProcessing(); - GuiConnector.info("User updated successfully"); - }, function(error) { - GuiConnector.hideProcessing(); - GuiConnector.alert(error); - }); - }); - - return result; +EditProjectDialog.prototype.createUsersTabContent = function () { + var self = this; + + var result = Functions.createElement({ + type: "div", + style: "margin-top:10px;", + }); + + var usersTable = Functions.createElement({ + type: "table", + name: "usersTable", + className: "display", + style: "width:100%", + }); + result.appendChild(usersTable); + + $(usersTable).on("click", "[name='saveUser']", function () { + var button = this; + GuiConnector.showProcessing("Updating"); + return self.saveUser($(button).attr("data")).then(function () { + GuiConnector.hideProcessing(); + GuiConnector.info("User updated successfully"); + }, function (error) { + GuiConnector.hideProcessing(); + GuiConnector.alert(error); + }); + }); + + return result; }; -EditProjectDialog.prototype.createUserPrivilegeColumns = function() { - var self = this; - - if (self._userPrivilegeColumns !== undefined) { - return Promise.resolve(self._userPrivilegeColumns); - } - - return ServerConnector.getConfiguration().then(function(configuration) { - self._userPrivilegeColumns = [ { - title : "Name" - } ]; - var privilegeTypes = configuration.getPrivilegeTypes(); - for (var i = 0; i < privilegeTypes.length; i++) { - var type = privilegeTypes[i]; - if (type.getObjectType() === "Project") { +EditProjectDialog.prototype.createUserPrivilegeColumns = function () { + var self = this; + + if (self._userPrivilegeColumns !== undefined) { + return Promise.resolve(self._userPrivilegeColumns); + } + + return ServerConnector.getConfiguration().then(function (configuration) { + self._userPrivilegeColumns = [{ + title: "Name" + }]; + var privilegeTypes = configuration.getPrivilegeTypes(); + for (var i = 0; i < privilegeTypes.length; i++) { + var type = privilegeTypes[i]; + if (type.getObjectType() === "Project") { + self._userPrivilegeColumns.push({ + "title": type.getCommonName(), + privilegeType: type, + }); + } + } self._userPrivilegeColumns.push({ - "title" : type.getCommonName(), - privilegeType : type, + "title": "Update" }); - } - } - self._userPrivilegeColumns.push({ - "title" : "Update" + return self._userPrivilegeColumns; }); - return self._userPrivilegeColumns; - }); }; -EditProjectDialog.prototype.init = function() { - var self = this; - return self.initUsersTab().then(function() { - return self.refreshUsers(); - }).then(function() { - return self.refreshOverlays(); - }).then(function() { - $(window).trigger('resize'); - }); +EditProjectDialog.prototype.init = function () { + var self = this; + return self.initUsersTab().then(function () { + return self.refreshUsers(); + }).then(function () { + return self.refreshOverlays(); + }).then(function () { + $(window).trigger('resize'); + }); }; -EditProjectDialog.prototype.initUsersTab = function() { - var self = this; +EditProjectDialog.prototype.initUsersTab = function () { + var self = this; - var usersTable = $("[name=usersTable]", self.getElement())[0]; + var usersTable = $("[name=usersTable]", self.getElement())[0]; - return self.createUserPrivilegeColumns().then(function(columns) { - $(usersTable).DataTable({ - columns : columns, + return self.createUserPrivilegeColumns().then(function (columns) { + $(usersTable).DataTable({ + columns: columns, + }); }); - }); }; -EditProjectDialog.prototype.refreshOverlays = function() { - var self = this; - return ServerConnector.getOverlays({ - projectId : self.getProject().getProjectId() - }).then(function(overlays) { - return self.setOverlays(overlays); - }); +EditProjectDialog.prototype.refreshOverlays = function () { + var self = this; + return ServerConnector.getOverlays({ + projectId: self.getProject().getProjectId() + }).then(function (overlays) { + return self.setOverlays(overlays); + }); }; -EditProjectDialog.prototype.refreshUsers = function() { - var self = this; - return ServerConnector.getUsers().then(function(users) { - return self.setUsers(users); - }); +EditProjectDialog.prototype.refreshUsers = function () { + var self = this; + return ServerConnector.getUsers().then(function (users) { + return self.setUsers(users); + }); }; -EditProjectDialog.prototype.setOverlays = function(overlays) { - var self = this; - self._overlayById = []; - return ServerConnector.getUsers().then(function(users) { - var dataTable = $($("[name='overlaysTable']", self.getElement())[0]).DataTable(); - var data = []; - for (var i = 0; i < overlays.length; i++) { - var overlay = overlays[i]; - self._overlayById[overlay.getId()] = overlay; - var rowData = self.overlayToTableRow(overlay, users); - data.push(rowData); - } - dataTable.clear().rows.add(data).draw(); - }); +EditProjectDialog.prototype.setOverlays = function (overlays) { + var self = this; + self._overlayById = []; + return ServerConnector.getUsers().then(function (users) { + var dataTable = $($("[name='overlaysTable']", self.getElement())[0]).DataTable(); + var data = []; + for (var i = 0; i < overlays.length; i++) { + var overlay = overlays[i]; + self._overlayById[overlay.getId()] = overlay; + var rowData = self.overlayToTableRow(overlay, users); + data.push(rowData); + } + dataTable.clear().rows.add(data).draw(); + }); }; -EditProjectDialog.prototype.setUsers = function(users) { - var self = this; - self._userByLogin = []; - return self.createUserPrivilegeColumns().then(function(columns) { - var dataTable = $($("[name='usersTable']", self.getElement())[0]).DataTable(); - var data = []; - for (var i = 0; i < users.length; i++) { - var user = users[i]; - self._userByLogin[user.getLogin()] = user; - var rowData = self.userToTableRow(user, columns); - data.push(rowData); - } - dataTable.clear().rows.add(data).draw(); - }); +EditProjectDialog.prototype.setUsers = function (users) { + var self = this; + self._userByLogin = []; + return self.createUserPrivilegeColumns().then(function (columns) { + var dataTable = $($("[name='usersTable']", self.getElement())[0]).DataTable(); + var data = []; + for (var i = 0; i < users.length; i++) { + var user = users[i]; + self._userByLogin[user.getLogin()] = user; + var rowData = self.userToTableRow(user, columns); + data.push(rowData); + } + dataTable.clear().rows.add(data).draw(); + }); }; -EditProjectDialog.prototype.userToTableRow = function(user, columns) { - var self = this; - var row = []; - var login = user.getLogin(); - - row[0] = user.getName() + " " + user.getSurname() + " (" + login + ")"; - for (var i = 1; i < columns.length; i++) { - var column = columns[i]; - if (column.privilegeType !== undefined) { - if (column.privilegeType.getValueType() === "boolean") { - var checked = ''; - if (user.hasPrivilege(column.privilegeType, self.getProject().getId())) { - checked = 'checked'; +EditProjectDialog.prototype.userToTableRow = function (user, columns) { + var self = this; + var row = []; + var login = user.getLogin(); + + row[0] = user.getName() + " " + user.getSurname() + " (" + login + ")"; + for (var i = 1; i < columns.length; i++) { + var column = columns[i]; + if (column.privilegeType !== undefined) { + if (column.privilegeType.getValueType() === "boolean") { + var checked = ''; + if (user.hasPrivilege(column.privilegeType, self.getProject().getId())) { + checked = 'checked'; + } + row[i] = "<input type='checkbox' name='privilege-" + login + "' data='" + column.privilegeType.getName() + "' " + + checked + "/>"; + } else { + throw new Error("Unsupported type: " + column.privilegeType.getValueType()); + } } - row[i] = "<input type='checkbox' name='privilege-" + login + "' data='" + column.privilegeType.getName() + "' " - + checked + "/>"; - } else { - throw new Error("Unsupported type: " + column.privilegeType.getValueType()); - } } - } - row.push("<button name='saveUser' data='" + login + "'>SAVE</button>"); + row.push("<button name='saveUser' data='" + login + "'>SAVE</button>"); - return row; + return row; }; -EditProjectDialog.prototype.overlayToTableRow = function(overlay, users) { - var row = []; - var id = overlay.getId(); - var creatorSelect; - if (overlay.getCreator() === "") { - creatorSelect = "<select name='creator-" + id + "' value=''>"; - } else { - creatorSelect = "<select name='creator-" + id + "'>"; - } - - creatorSelect += "<option value='' >---</option>"; - for (var i = 0; i < users.length; i++) { - var selected = ""; - var user = users[i]; - if (overlay.getCreator() === user.getLogin()) { - selected = "selected"; +EditProjectDialog.prototype.overlayToTableRow = function (overlay, users) { + var row = []; + var id = overlay.getId(); + var creatorSelect; + if (overlay.getCreator() === "") { + creatorSelect = "<select name='creator-" + id + "' value=''>"; + } else { + creatorSelect = "<select name='creator-" + id + "'>"; + } + + creatorSelect += "<option value='' >---</option>"; + for (var i = 0; i < users.length; i++) { + var selected = ""; + var user = users[i]; + if (overlay.getCreator() === user.getLogin()) { + selected = "selected"; + } else { + selected = ""; + } + + creatorSelect += "<option value='" + user.getLogin() + "' " + selected + ">" + user.getLogin() + "(" + + user.getName() + " " + user.getSurname() + ")</option>"; + } + creatorSelect += "</select>"; + + var checked = ''; + if (overlay.getPublicOverlay()) { + checked = "checked"; + } + var publicOverlayCheckbox = "<input type='checkbox' name='publicOverlay-" + id + "' " + checked + "/>"; + + var downloadSourceButton; + if (overlay.getInputDataAvailable()) { + downloadSourceButton = "<button name='downloadSource' data='" + id + "'>" + + "<span class='ui-icon ui-icon-arrowthickstop-1-s'></span>" + "</button>"; } else { - selected = ""; + downloadSourceButton = "N/A"; } - creatorSelect += "<option value='" + user.getLogin() + "' " + selected + ">" + user.getLogin() + "(" - + user.getName() + " " + user.getSurname() + ")</option>"; - } - creatorSelect += "</select>"; - - var checked = ''; - if (overlay.getPublicOverlay()) { - checked = "checked"; - } - var publicOverlayCheckbox = "<input type='checkbox' name='publicOverlay-" + id + "' " + checked + "/>"; - - var downloadSourceButton; - if (overlay.getInputDataAvailable()) { - downloadSourceButton = "<button name='downloadSource' data='" + id + "'>" - + "<span class='ui-icon ui-icon-arrowthickstop-1-s'></span>" + "</button>"; - } else { - downloadSourceButton = "N/A"; - } - - row[0] = id; - row[1] = "<input name='name-" + id + "' value='" + overlay.getName() + "'/>"; - row[2] = "<input name='description-" + id + "' value='" + overlay.getDescription() + "'/>"; - row[3] = publicOverlayCheckbox; - row[4] = creatorSelect; - row[5] = downloadSourceButton; - row[6] = "<button name='saveOverlay' data='" + id + "'>SAVE</button>"; - row[7] = "<button name='removeOverlay' data='" + id + "'>REMOVE</button>"; - - return row; + row[0] = id; + row[1] = "<input name='name-" + id + "' value='" + overlay.getName() + "'/>"; + row[2] = "<input name='description-" + id + "' value='" + overlay.getDescription() + "'/>"; + row[3] = publicOverlayCheckbox; + row[4] = creatorSelect; + row[5] = downloadSourceButton; + row[6] = "<button name='saveOverlay' data='" + id + "'>SAVE</button>"; + row[7] = "<button name='removeOverlay' data='" + id + "'>REMOVE</button>"; + + return row; }; -EditProjectDialog.prototype.destroy = function() { - $(this.getElement()).dialog("destroy"); +EditProjectDialog.prototype.destroy = function () { + var self = this; + var div = self.getElement(); + if ($(div).hasClass("ui-dialog-content")) { + $(div).dialog("destroy"); + } + if (self._addOverlayDialog !== undefined) { + self._addOverlayDialog.destroy(); + delete self._addOverlayDialog; + } }; -EditProjectDialog.prototype.open = function() { - var self = this; - var div = self.getElement(); - if (!$(div).hasClass("ui-dialog-content")) { - $(div).dialog({ - title : self.getProject().getProjectId(), - width : window.innerWidth / 2, - height : window.innerHeight / 2, - }); - } - $(div).dialog("open"); +EditProjectDialog.prototype.open = function () { + var self = this; + var div = self.getElement(); + if (!$(div).hasClass("ui-dialog-content")) { + $(div).dialog({ + title: self.getProject().getProjectId(), + width: window.innerWidth / 2, + height: window.innerHeight / 2, + }); + } + $(div).dialog("open"); }; -var prepareMiriamData = function(type, resource) { - if (resource === "" || resource === undefined || resource === null) { - return null; - } else { - return new Annotation({ - type : type, - resource : resource - }); - } +var prepareMiriamData = function (type, resource) { + if (resource === "" || resource === undefined || resource === null) { + return null; + } else { + return new Annotation({ + type: type, + resource: resource + }); + } }; -EditProjectDialog.prototype.onSaveClicked = function() { - var self = this; - var project = self.getProject(); - var element = self.getElement(); - project.setName($("[name='projectName']", element)[0].value); - project.setVersion($("[name='projectVersion']", element)[0].value); - project.setNotifyEmail($("[name='projectNotifyEmail']", element)[0].value); - var organism = prepareMiriamData("TAXONOMY", $("[name='projectOrganism']", element)[0].value); - project.setOrganism(organism); - var disease = prepareMiriamData("MESH_2012", $("[name='projectDisease']", element)[0].value); - project.setDisease(disease); - return ServerConnector.updateProject(project); +EditProjectDialog.prototype.onSaveClicked = function () { + var self = this; + var project = self.getProject(); + var element = self.getElement(); + project.setName($("[name='projectName']", element)[0].value); + project.setVersion($("[name='projectVersion']", element)[0].value); + project.setNotifyEmail($("[name='projectNotifyEmail']", element)[0].value); + var organism = prepareMiriamData("TAXONOMY", $("[name='projectOrganism']", element)[0].value); + project.setOrganism(organism); + var disease = prepareMiriamData("MESH_2012", $("[name='projectDisease']", element)[0].value); + project.setDisease(disease); + return ServerConnector.updateProject(project); }; -EditProjectDialog.prototype.close = function() { - var self = this; - $(self.getElement()).dialog("close"); +EditProjectDialog.prototype.close = function () { + var self = this; + $(self.getElement()).dialog("close"); }; -EditProjectDialog.prototype.saveOverlay = function(overlayId) { - var self = this; - var overlay = self._overlayById[overlayId]; - overlay.setName($("[name='name-" + overlayId + "']", self.getElement())[0].value); - overlay.setDescription($("[name='description-" + overlayId + "']", self.getElement())[0].value); - overlay.setPublicOverlay($("[name='publicOverlay-" + overlayId + "']", self.getElement())[0].checked); - overlay.setCreator($("[name='creator-" + overlayId + "']", self.getElement())[0].value); +EditProjectDialog.prototype.saveOverlay = function (overlayId) { + var self = this; + var overlay = self._overlayById[overlayId]; + overlay.setName($("[name='name-" + overlayId + "']", self.getElement())[0].value); + overlay.setDescription($("[name='description-" + overlayId + "']", self.getElement())[0].value); + overlay.setPublicOverlay($("[name='publicOverlay-" + overlayId + "']", self.getElement())[0].checked); + overlay.setCreator($("[name='creator-" + overlayId + "']", self.getElement())[0].value); - return ServerConnector.updateOverlay(overlay); + return ServerConnector.updateOverlay(overlay); }; -EditProjectDialog.prototype.saveUser = function(login) { - var self = this; - var checkboxes = $("[name='privilege-" + login + "']", self.getElement()); - var privileges = {}; - for (var i = 0; i < checkboxes.length; i++) { - var checkbox = checkboxes[i]; - var privilege = {}; - privilege[self.getProject().getId()] = checkbox.checked; - privileges[$(checkbox).attr("data")]= privilege; - } - - return ServerConnector.updateUserPrivileges({ - user : self._userByLogin[login], - privileges : privileges - }); +EditProjectDialog.prototype.saveUser = function (login) { + var self = this; + var checkboxes = $("[name='privilege-" + login + "']", self.getElement()); + var privileges = {}; + for (var i = 0; i < checkboxes.length; i++) { + var checkbox = checkboxes[i]; + var privilege = {}; + privilege[self.getProject().getId()] = checkbox.checked; + privileges[$(checkbox).attr("data")] = privilege; + } + + return ServerConnector.updateUserPrivileges({ + user: self._userByLogin[login], + privileges: privileges + }); }; -EditProjectDialog.prototype.removeOverlay = function(overlayId) { - var self = this; - return ServerConnector.removeOverlay({ - overlayId : overlayId - }).then(function() { - return self.refreshOverlays(); - }); +EditProjectDialog.prototype.removeOverlay = function (overlayId) { + var self = this; + return ServerConnector.removeOverlay({ + overlayId: overlayId + }).then(function () { + return self.refreshOverlays(); + }); }; -EditProjectDialog.prototype.openAddOverlayDialog = function() { - var self = this; - var addOverlayDialog = new AddOverlayDialog({ - project : self.getProject(), - customMap : null, - element : document.createElement("div"), - }); - addOverlayDialog.addListener("onAddOverlay", function() { - return self.refreshOverlays(); - }); - return addOverlayDialog.init().then(function() { - return addOverlayDialog.open(); - }); +EditProjectDialog.prototype.openAddOverlayDialog = function () { + var self = this; + if (self._addOverlayDialog !== undefined) { + self._addOverlayDialog.destroy(); + } + self._addOverlayDialog = new AddOverlayDialog({ + project: self.getProject(), + customMap: null, + element: document.createElement("div"), + }); + self._addOverlayDialog.addListener("onAddOverlay", function () { + return self.refreshOverlays(); + }); + return self._addOverlayDialog.init().then(function () { + return self._addOverlayDialog.open(); + }); }; module.exports = EditProjectDialog; diff --git a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js index 47c4e2ce945fb967a4febeff4712e59f91e5bbce..29efb960b44a8009d466bfb5165bf0578474426d 100644 --- a/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js +++ b/frontend-js/src/main/js/gui/admin/MapsAdminPanel.js @@ -13,257 +13,265 @@ var GuiConnector = require('../../GuiConnector'); var Promise = require("bluebird"); function MapsAdminPanel(params) { - var self = this; - AbstractAdminPanel.call(self, params); - self._createGui(); + var self = this; + AbstractAdminPanel.call(self, params); + self._createGui(); - $(self.getElement()).addClass("minerva-projects-tab"); + $(self.getElement()).addClass("minerva-projects-tab"); } MapsAdminPanel.prototype = Object.create(AbstractAdminPanel.prototype); MapsAdminPanel.prototype.constructor = MapsAdminPanel; -MapsAdminPanel.prototype._createGui = function() { - var self = this; - var projectsDiv = Functions.createElement({ - type : "div", - }); - self.getElement().appendChild(projectsDiv); +MapsAdminPanel.prototype._createGui = function () { + var self = this; + var projectsDiv = Functions.createElement({ + type: "div", + }); + self.getElement().appendChild(projectsDiv); - var dataDiv = Functions.createElement({ - type : "div", - style : "display:table; width:100%", - }); - projectsDiv.appendChild(dataDiv); + var dataDiv = Functions.createElement({ + type: "div", + style: "display:table; width:100%", + }); + projectsDiv.appendChild(dataDiv); - dataDiv.appendChild(self._createMenuRow()); - dataDiv.appendChild(self._createProjectTableRow()); - dataDiv.appendChild(self._createMenuRow()); + dataDiv.appendChild(self._createMenuRow()); + dataDiv.appendChild(self._createProjectTableRow()); + dataDiv.appendChild(self._createMenuRow()); }; -MapsAdminPanel.prototype._createMenuRow = function() { - var self = this; - var menuRow = Functions.createElement({ - type : "div", - className : "minerva-menu-row", - style : "display:table-row; margin:10px", - }); - - var addProjectButton = Functions.createElement({ - type : "button", - name : "addProject", - content : '<span class="ui-icon ui-icon-circle-plus"></span> ADD PROJECT', - onclick : function() { - return self.onAddClicked().then(null, GuiConnector.alert); - }, - }); - var refreshButton = Functions.createElement({ - type : "button", - name : "refreshProject", - content : '<span class="ui-icon ui-icon-refresh"></span> REFRESH', - onclick : function() { - return self.onRefreshClicked().then(null, GuiConnector.alert); - }, - }); - menuRow.appendChild(addProjectButton); - menuRow.appendChild(refreshButton); - return menuRow; +MapsAdminPanel.prototype._createMenuRow = function () { + var self = this; + var menuRow = Functions.createElement({ + type: "div", + className: "minerva-menu-row", + style: "display:table-row; margin:10px", + }); + + var addProjectButton = Functions.createElement({ + type: "button", + name: "addProject", + content: '<span class="ui-icon ui-icon-circle-plus"></span> ADD PROJECT', + onclick: function () { + return self.onAddClicked().then(null, GuiConnector.alert); + }, + }); + var refreshButton = Functions.createElement({ + type: "button", + name: "refreshProject", + content: '<span class="ui-icon ui-icon-refresh"></span> REFRESH', + onclick: function () { + return self.onRefreshClicked().then(null, GuiConnector.alert); + }, + }); + menuRow.appendChild(addProjectButton); + menuRow.appendChild(refreshButton); + return menuRow; }; -MapsAdminPanel.prototype._createProjectTableRow = function() { - var self = this; - var projectsRow = Functions.createElement({ - type : "div", - style : "display:table-row; width:100%", - }); - - var projectsTable = Functions.createElement({ - type : "table", - name : "projectsTable", - className : "display", - style : "width:100%", - }); - projectsRow.appendChild(projectsTable); - - $(projectsTable).DataTable({ - fnRowCallback : function(nRow, aData) { - nRow.setAttribute('id', aData[0]); - }, - columns : [ { - title : 'ProjectId', - }, { - title : 'Name', - }, { - title : 'Disease', - }, { - title : 'Organism', - }, { - title : 'Status', - }, { - title : 'Edit', - }, { - title : 'Remove', - }, ], - }); - $(projectsTable).on("click", "[name='removeProject']", function() { - var button = this; - return self.removeProject($(button).attr("data")).then(null, GuiConnector.alert); - }); - - $(projectsTable).on("click", "[name='showEditDialog']", function() { - var button = this; - return self.showEditDialog($(button).attr("data")).then(null, GuiConnector.alert); - }); - - return projectsRow; +MapsAdminPanel.prototype._createProjectTableRow = function () { + var self = this; + var projectsRow = Functions.createElement({ + type: "div", + style: "display:table-row; width:100%", + }); + + var projectsTable = Functions.createElement({ + type: "table", + name: "projectsTable", + className: "display", + style: "width:100%", + }); + projectsRow.appendChild(projectsTable); + + $(projectsTable).DataTable({ + fnRowCallback: function (nRow, aData) { + nRow.setAttribute('id', aData[0]); + }, + columns: [{ + title: 'ProjectId', + }, { + title: 'Name', + }, { + title: 'Disease', + }, { + title: 'Organism', + }, { + title: 'Status', + }, { + title: 'Edit', + }, { + title: 'Remove', + },], + }); + $(projectsTable).on("click", "[name='removeProject']", function () { + var button = this; + return self.removeProject($(button).attr("data")).then(null, GuiConnector.alert); + }); + + $(projectsTable).on("click", "[name='showEditDialog']", function () { + var button = this; + return self.showEditDialog($(button).attr("data")).then(null, GuiConnector.alert); + }); + + return projectsRow; }; -MapsAdminPanel.prototype.init = function() { - var self = this; - return ServerConnector.getProjects().then(function(projects) { - return self.setProjects(projects); - }).then(function() { - $(window).trigger('resize'); - }); +MapsAdminPanel.prototype.init = function () { + var self = this; + return ServerConnector.getProjects().then(function (projects) { + return self.setProjects(projects); + }).then(function () { + $(window).trigger('resize'); + }); }; -MapsAdminPanel.prototype.projectToTableRow = function(project, row) { - var self = this; - var disease = self.getHtmlStringLink(project.getDisease()); - var organism = self.getHtmlStringLink(project.getOrganism()); - - if (row === undefined) { - row = []; - } - row[0] = project.getProjectId(); - row[1] = project.getName(); - row[2] = disease; - row[3] = organism; - row[4] = project.getStatus(); - row[5] = "<button name='showEditDialog' data='" + project.getProjectId() + "'>EDIT</button>"; - row[6] = "<button name='removeProject' data='" + project.getProjectId() + "'>REMOVE</button>"; - - return row; +MapsAdminPanel.prototype.projectToTableRow = function (project, row) { + var self = this; + var disease = self.getHtmlStringLink(project.getDisease()); + var organism = self.getHtmlStringLink(project.getOrganism()); + + if (row === undefined) { + row = []; + } + row[0] = project.getProjectId(); + row[1] = project.getName(); + row[2] = disease; + row[3] = organism; + row[4] = project.getStatus(); + row[5] = "<button name='showEditDialog' data='" + project.getProjectId() + "'>EDIT</button>"; + row[6] = "<button name='removeProject' data='" + project.getProjectId() + "'>REMOVE</button>"; + + return row; }; -MapsAdminPanel.prototype.getHtmlStringLink = function(annotation) { - var self = this; - if (annotation !== undefined && annotation !== null) { - var link = self.getGuiUtils().createAnnotationLink(annotation, true); - var tmp = document.createElement("div"); - tmp.appendChild(link); - return tmp.innerHTML; - } else { - return "N/A"; - } +MapsAdminPanel.prototype.getHtmlStringLink = function (annotation) { + var self = this; + if (annotation !== undefined && annotation !== null) { + var link = self.getGuiUtils().createAnnotationLink(annotation, true); + var tmp = document.createElement("div"); + tmp.appendChild(link); + return tmp.innerHTML; + } else { + return "N/A"; + } }; -MapsAdminPanel.prototype.setProjects = function(projects) { - var self = this; - var dataTable = $($("[name='projectsTable']", self.getElement())[0]).DataTable(); - var data = []; - for (var i = 0; i < projects.length; i++) { - var project = projects[i]; - var rowData = self.projectToTableRow(project); - self.addUpdateListener(project, rowData); - data.push(rowData); - } - dataTable.clear().rows.add(data).draw(); +MapsAdminPanel.prototype.setProjects = function (projects) { + var self = this; + var dataTable = $($("[name='projectsTable']", self.getElement())[0]).DataTable(); + var data = []; + for (var i = 0; i < projects.length; i++) { + var project = projects[i]; + var rowData = self.projectToTableRow(project); + self.addUpdateListener(project, rowData); + data.push(rowData); + } + dataTable.clear().rows.add(data).draw(); }; -MapsAdminPanel.prototype.addUpdateListener = function(project, dataTableRow) { - var self = this; +MapsAdminPanel.prototype.addUpdateListener = function (project, dataTableRow) { + var self = this; - var listenerName = "PROJECT_LIST_LISTENER"; - var listeners = project.getListeners("onreload"); - for (var i = 0; i < listeners.length; i++) { - if (listeners[i].listenerName === listenerName) { - project.removeListener("onreload", listeners[i]); + var listenerName = "PROJECT_LIST_LISTENER"; + var listeners = project.getListeners("onreload"); + for (var i = 0; i < listeners.length; i++) { + if (listeners[i].listenerName === listenerName) { + project.removeListener("onreload", listeners[i]); + } } - } - var listener = function() { - self.projectToTableRow(project, dataTableRow); - var row = $($("[name='projectsTable']", self.getElement())[0]).DataTable().row("#" + project.getProjectId()); - if (row.length > 0) { - row.data(dataTableRow).draw(); + var listener = function () { + self.projectToTableRow(project, dataTableRow); + var row = $($("[name='projectsTable']", self.getElement())[0]).DataTable().row("#" + project.getProjectId()); + if (row.length > 0) { + row.data(dataTableRow).draw(); + } + + }; + listener.listenerName = listenerName; + project.addListener("onreload", listener); +}; + +MapsAdminPanel.prototype.onAddClicked = function () { + 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(); } +}; - }; - listener.listenerName = listenerName; - project.addListener("onreload", listener); +MapsAdminPanel.prototype.destroy = function () { + var self = this; + var dialog = self._addDialog; + if (dialog !== undefined) { + dialog.destroy(); + } }; -MapsAdminPanel.prototype.onAddClicked = function() { - 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(); +MapsAdminPanel.prototype.onRefreshClicked = function () { + var self = this; + return ServerConnector.getProjects(true).then(function (projects) { + return self.setProjects(projects); }); - } else { - dialog.clear(); - dialog.open(); - return Promise.resolve(); - } }; -MapsAdminPanel.prototype.onRefreshClicked = function() { - var self = this; - return ServerConnector.getProjects(true).then(function(projects) { - return self.setProjects(projects); - }); +MapsAdminPanel.prototype.getDialog = function (project) { + var self = this; + if (self._dialogs === undefined) { + self._dialogs = []; + } + var dialog = self._dialogs[project.getProjectId()]; + if (dialog === undefined) { + dialog = new EditProjectDialog({ + element: Functions.createElement({ + type: "div" + }), + project: project, + customMap: null, + }); + self._dialogs[project.getProjectId()] = dialog; + return dialog.init().then(function () { + return dialog; + }); + } else { + return Promise.resolve(dialog); + } }; -MapsAdminPanel.prototype.getDialog = function(project) { - var self = this; - if (self._dialogs === undefined) { - self._dialogs = []; - } - var dialog = self._dialogs[project.getProjectId()]; - if (dialog === undefined) { - dialog = new EditProjectDialog({ - element : Functions.createElement({ - type : "div" - }), - project : project, - customMap : null, +MapsAdminPanel.prototype.showEditDialog = function (id) { + var self = this; + GuiConnector.showProcessing(); + return ServerConnector.getProject(id).then(function (project) { + return self.getDialog(project); + }).then(function (dialog) { + + dialog.open(); + GuiConnector.hideProcessing(); + }).then(null, function (error) { + GuiConnector.hideProcessing(); + return Promise.reject(error); }); - self._dialogs[project.getProjectId()] = dialog; - return dialog.init().then(function() { - return dialog; - }); - } else { - return Promise.resolve(dialog); - } -}; - -MapsAdminPanel.prototype.showEditDialog = function(id) { - var self = this; - GuiConnector.showProcessing(); - return ServerConnector.getProject(id).then(function(project) { - return self.getDialog(project); - }).then(function(dialog) { - - dialog.open(); - GuiConnector.hideProcessing(); - }).then(null, function(error) { - GuiConnector.hideProcessing(); - return Promise.reject(error); - }); }; -MapsAdminPanel.prototype.removeProject = function(id) { - return Promise.reject(new Error("Not implemented")); +MapsAdminPanel.prototype.removeProject = function (id) { + return Promise.reject(new Error("Not implemented")); }; module.exports = MapsAdminPanel; diff --git a/frontend-js/src/main/js/gui/leftPanel/ChemicalPanel.js b/frontend-js/src/main/js/gui/leftPanel/ChemicalPanel.js index b927d2f85c6f1c5f9d805c9c5a3be02ef977161e..ef5fafe663e006d59dec687d614b663b676b4250 100644 --- a/frontend-js/src/main/js/gui/leftPanel/ChemicalPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/ChemicalPanel.js @@ -18,12 +18,11 @@ function ChemicalPanel(params) { + '<p>separate multiple search by semicolon'; params.placeholder = "full chemical name (CTD)"; + AbstractDbPanel.call(this, params); - AbstractDbPanel.call(this, params); - - if (this.getMap().getProject().getDisease() === undefined) { - this.disablePanel("DISEASE NOT DEFINED FOR PROJECT. PLEASE, DEFINE IT IN THE ADMIN SECTION."); - } + if (this.getMap().getProject().getDisease() === undefined) { + this.disablePanel("DISEASE NOT DEFINED FOR PROJECT. PLEASE, DEFINE IT IN THE ADMIN SECTION."); + } } ChemicalPanel.prototype = Object.create(AbstractDbPanel.prototype); @@ -45,27 +44,30 @@ ChemicalPanel.prototype.createPreamble = function (chemical) { result.appendChild(guiUtils.createNewLine()); } - return result; + return result; }; ChemicalPanel.prototype.createTableElement = function (target, icon) { - return this.createTargetRow(target, icon); + return this.createTargetRow(target, icon); }; ChemicalPanel.prototype.searchByQuery = function () { - var self = this; - var query = self.getControlElement(PanelControlElementType.SEARCH_INPUT).value; + var self = this; + var query = self.getControlElement(PanelControlElementType.SEARCH_INPUT).value; - return self.getOverlayDb().searchByQuery(query); + return self.getOverlayDb().searchByQuery(query); }; ChemicalPanel.prototype.init = function () { - var query = ServerConnector.getSessionData().getChemicalQuery(); - if (query !== undefined) { - return this.getOverlayDb().searchByEncodedQuery(query); - } else { - return Promise.resolve(); - } + var query = ServerConnector.getSessionData().getChemicalQuery(); + if (query !== undefined) { + return this.getOverlayDb().searchByEncodedQuery(query); + } else { + return Promise.resolve(); + } }; +ChemicalPanel.prototype.destroy = function () { + return Promise.resolve(); +}; module.exports = ChemicalPanel; diff --git a/frontend-js/src/main/js/gui/leftPanel/DrugPanel.js b/frontend-js/src/main/js/gui/leftPanel/DrugPanel.js index a5f84ab26d2c22976ef5b5a4b967cdd467ac7660..1b67a5116e1a10b3a9376baa8f3b3d23e3e3bb62 100644 --- a/frontend-js/src/main/js/gui/leftPanel/DrugPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/DrugPanel.js @@ -58,4 +58,8 @@ DrugPanel.prototype.init = function() { } }; +DrugPanel.prototype.destroy = function () { + return Promise.resolve(); +}; + module.exports = DrugPanel; diff --git a/frontend-js/src/main/js/gui/leftPanel/LeftPanel.js b/frontend-js/src/main/js/gui/leftPanel/LeftPanel.js index a8ae7a7e411f49c94e0851a80e900bb60f441590..4c8be9c50c4bf1abd30968b84787b59dd9e82ad5 100644 --- a/frontend-js/src/main/js/gui/leftPanel/LeftPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/LeftPanel.js @@ -21,121 +21,121 @@ var Functions = require('../../Functions'); var logger = require('../../logger'); function LeftPanel(params) { - AbstractGuiElement.call(this, params); - var self = this; + AbstractGuiElement.call(this, params); + var self = this; - this._tabIdCount = 0; - this._panels = []; + this._tabIdCount = 0; + this._panels = []; - self._createPanelGui(); + self._createPanelGui(); } LeftPanel.prototype = Object.create(AbstractGuiElement.prototype); LeftPanel.prototype.constructor = LeftPanel; -LeftPanel.prototype._createPanelGui = function() { - var self = this; - var panels = self.getPanelsDefinition(); +LeftPanel.prototype._createPanelGui = function () { + var self = this; + var panels = self.getPanelsDefinition(); - var headerDiv = Functions.createElement({ - type : "div", - id : "headerPanel" - }); - var header = new Header({ - element : headerDiv, - customMap : self.getMap(), - }); - self.getElement().appendChild(headerDiv); + var headerDiv = Functions.createElement({ + type: "div", + id: "headerPanel" + }); + var header = new Header({ + element: headerDiv, + customMap: self.getMap(), + }); + self.getElement().appendChild(headerDiv); - var loginDialogDiv = Functions.createElement({ - type : "div", - name : "loginDialog", - style : "display:none", - }); - self.getElement().appendChild(loginDialogDiv); - this.setLoginDialog(new LoginDialog({ - element : loginDialogDiv, - customMap : self.getMap(), - })); - - var tabDiv = Functions.createElement({ - type : "div", - name : "tabView", - className : "tabbable boxed parentTabs" - }); - self.getElement().appendChild(tabDiv); + var loginDialogDiv = Functions.createElement({ + type: "div", + name: "loginDialog", + style: "display:none", + }); + self.getElement().appendChild(loginDialogDiv); + this.setLoginDialog(new LoginDialog({ + element: loginDialogDiv, + customMap: self.getMap(), + })); + + var tabDiv = Functions.createElement({ + type: "div", + name: "tabView", + className: "tabbable boxed parentTabs" + }); + self.getElement().appendChild(tabDiv); - var tabMenuDiv = Functions.createElement({ - type : "ul", - className : "nav nav-tabs" - }); - tabDiv.appendChild(tabMenuDiv); + 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); + var tabContentDiv = Functions.createElement({ + type: "div", + className: "tab-content" + }); + tabDiv.appendChild(tabContentDiv); - self.setHeader(header); + self.setHeader(header); - var elementInfoDiv = Functions.createElement({ - name : "elementInfoDiv", - type : "div", - style : "background-color:#f3f3f3", - className : "minerva-element-info-div", - }); - self.elementInfoDiv = elementInfoDiv; + var elementInfoDiv = Functions.createElement({ + name: "elementInfoDiv", + type: "div", + style: "background-color:#f3f3f3", + className: "minerva-element-info-div", + }); + self.elementInfoDiv = elementInfoDiv; - for (var i = 0; i < panels.length; i++) { - self.addTab(panels[i], tabMenuDiv, tabContentDiv); - } + for (var i = 0; i < panels.length; i++) { + self.addTab(panels[i], tabMenuDiv, tabContentDiv); + } }; -LeftPanel.prototype.getPanelsDefinition = function() { - return [ { - name : "SEARCH", - className : "fa-search", - panelClass : SearchPanel, - }, { - name : "OVERLAYS", - className : "fa-th-list", - panelClass : OverlayPanel, - }, { - name : "SUBMAPS", - className : "fa-sitemap", - panelClass : SubmapPanel, - }, { - name : "INFO", - className : "fa-info", - panelClass : ProjectInfoPanel, - } ]; +LeftPanel.prototype.getPanelsDefinition = function () { + return [{ + name: "SEARCH", + className: "fa-search", + panelClass: SearchPanel, + }, { + name: "OVERLAYS", + className: "fa-th-list", + panelClass: OverlayPanel, + }, { + name: "SUBMAPS", + className: "fa-sitemap", + panelClass: SubmapPanel, + }, { + name: "INFO", + className: "fa-info", + panelClass: ProjectInfoPanel, + }]; }; -LeftPanel.prototype.hideTab = function(panel) { - var self = this; - var panelDeifinitions = self.getPanelsDefinition(); - for (var i = 0; i < panelDeifinitions.length; i++) { - if (panel instanceof panelDeifinitions[i].panelClass) { - var liElement = $("li:has(a[href='#left_panel_tab_" + i + "'])", $(self.getElement()))[0]; - if (liElement !== undefined) { - liElement.style.display = "none"; - } else { - logger.warn("Cannot find tab link for panel: " + panel.getPanelName()); - } +LeftPanel.prototype.hideTab = function (panel) { + var self = this; + var panelDeifinitions = self.getPanelsDefinition(); + for (var i = 0; i < panelDeifinitions.length; i++) { + if (panel instanceof panelDeifinitions[i].panelClass) { + var liElement = $("li:has(a[href='#left_panel_tab_" + i + "'])", $(self.getElement()))[0]; + if (liElement !== undefined) { + liElement.style.display = "none"; + } else { + logger.warn("Cannot find tab link for panel: " + panel.getPanelName()); + } + } } - } }; -LeftPanel.prototype.init = function() { - var self = this; +LeftPanel.prototype.init = function () { + var self = this; - var promises = []; - for (var i = 0; i < self._panels.length; i++) { - promises.push(self._panels[i].init()); - } - promises.push(self.getHeader().init()); + var promises = []; + for (var i = 0; i < self._panels.length; i++) { + promises.push(self._panels[i].init()); + } + promises.push(self.getHeader().init()); var initEvents = new Promise(function(resolve) { self.getMap().addListener("onBioEntityClick", function(e) { @@ -155,33 +155,33 @@ LeftPanel.prototype.init = function() { return Promise.all(promises); }; -LeftPanel.prototype.showElementDetails = function(element) { - var self = this; - var div = self.elementInfoDiv; - if (!$(div).hasClass("ui-dialog-content")) { - $(div).dialog({ - resizable : false, - width : $(self.getElement()).width(), - height : 200, - beforeclose : function() { - $(this).dialog('option', 'position', [ $(this).offset().left, $(this).offset().top ]); - $(this).dialog('option', 'width', $(this).width()); - $(this).dialog('option', 'height', $(this).height()); - }, - position : { - my : "left bottom", - at : "left bottom", - of : $(self.getElement()), - }, - }).siblings('.ui-dialog-titlebar').css("background", "gray"); - } +LeftPanel.prototype.showElementDetails = function (element) { + var self = this; + var div = self.elementInfoDiv; + if (!$(div).hasClass("ui-dialog-content")) { + $(div).dialog({ + resizable: false, + width: $(self.getElement()).width(), + height: 200, + beforeclose: function () { + $(this).dialog('option', 'position', [$(this).offset().left, $(this).offset().top]); + $(this).dialog('option', 'width', $(this).width()); + $(this).dialog('option', 'height', $(this).height()); + }, + position: { + my: "left bottom", + at: "left bottom", + of: $(self.getElement()), + }, + }).siblings('.ui-dialog-titlebar').css("background", "gray"); + } - var openTabName = $("[name='tabView'] > ul li.active a > .maintabdiv")[0].innerHTML; - var searchTabName = $("[name='tabView'] > ul li.active a > .maintabdiv")[1].innerHTML; - var isPanelHidden = (self.getElement().style.display === "none"); - if (isPanelHidden) { - openTabName = undefined; - } + var openTabName = $("[name='tabView'] > ul li.active a > .maintabdiv")[0].innerHTML; + var searchTabName = $("[name='tabView'] > ul li.active a > .maintabdiv")[1].innerHTML; + var isPanelHidden = (self.getElement().style.display === "none"); + if (isPanelHidden) { + openTabName = undefined; + } if (element !== undefined && (openTabName.indexOf("SEARCH") === -1 || searchTabName !== "GENERIC")) { var model = self.getMap().getSubmapById(element.getModelId()).getModel(); @@ -198,130 +198,134 @@ LeftPanel.prototype.showElementDetails = function(element) { } }; -LeftPanel.prototype.prepareElementDetailsContent = function(bioEntity) { - var guiUtils = new GuiUtils(this.getMap().getConfiguration()); - guiUtils.setMap(this.getMap()); - if (bioEntity instanceof Reaction) { - return guiUtils.createReactionElement({ - reaction : bioEntity, - showTitle : false, - }); - } else if (bioEntity instanceof Alias) { - return guiUtils.createAliasElement({ - alias : bioEntity, - showTitle : false, - }); - } else if (bioEntity instanceof PointData) { - return Functions.createElement({ - type : "div" - }); - } else { - throw new Error("Unknown element type:" + bioEntity); - } +LeftPanel.prototype.prepareElementDetailsContent = function (bioEntity) { + var guiUtils = new GuiUtils(this.getMap().getConfiguration()); + guiUtils.setMap(this.getMap()); + if (bioEntity instanceof Reaction) { + return guiUtils.createReactionElement({ + reaction: bioEntity, + showTitle: false, + }); + } else if (bioEntity instanceof Alias) { + return guiUtils.createAliasElement({ + alias: bioEntity, + showTitle: false, + }); + } else if (bioEntity instanceof PointData) { + return Functions.createElement({ + type: "div" + }); + } else { + throw new Error("Unknown element type:" + bioEntity); + } }; -LeftPanel.prototype.getElementTitle = function(bioEntity) { - if (bioEntity instanceof Reaction) { - return bioEntity.getType() + ": " + bioEntity.getReactionId(); - } else if (bioEntity instanceof Alias) { - return bioEntity.getType() + ": " + bioEntity.getName(); - } else if (bioEntity instanceof PointData) { - return "POINT: " + bioEntity.getId(); - } else { - throw new Error("Unknown element type:" + bioEntity); - } +LeftPanel.prototype.getElementTitle = function (bioEntity) { + if (bioEntity instanceof Reaction) { + return bioEntity.getType() + ": " + bioEntity.getReactionId(); + } else if (bioEntity instanceof Alias) { + return bioEntity.getType() + ": " + bioEntity.getName(); + } else if (bioEntity instanceof PointData) { + return "POINT: " + bioEntity.getId(); + } else { + throw new Error("Unknown element type:" + bioEntity); + } }; -LeftPanel.prototype.addTab = function(params, navElement, contentElement) { - var self = this; - - var name = params.name; +LeftPanel.prototype.addTab = function (params, navElement, contentElement) { + var self = this; - var tabId = "left_panel_tab_" + this._tabIdCount; - self._tabIdCount++; + var name = params.name; - var navClass = ''; - var contentClass = 'tab-pane'; - if (navElement.children.length === 0) { - navClass = "active"; - contentClass = "tab-pane active"; - } + var tabId = "left_panel_tab_" + this._tabIdCount; + self._tabIdCount++; - var navLi = document.createElement("li"); - navLi.className = navClass; + var navClass = ''; + var contentClass = 'tab-pane'; + if (navElement.children.length === 0) { + navClass = "active"; + contentClass = "tab-pane active"; + } - var navLink = document.createElement("a"); - navLink.href = "#" + tabId; - if (name !== undefined) { - if (name.length > 12) { - name = name.substring(0, 10) + "..."; + var navLi = document.createElement("li"); + navLi.className = navClass; + + var navLink = document.createElement("a"); + navLink.href = "#" + tabId; + if (name !== undefined) { + if (name.length > 12) { + name = name.substring(0, 10) + "..."; + } + } else { + name = ""; } - } else { - name = ""; - } - // add this when we want to have triangle below - // '<div class="tngContainer"><div class="tng"></div></div>' - - navLink.innerHTML = '<div class="maintabdiv"><i class="fa ' + params.className + ' maintab"></i><br>' + name - + '</div>'; - - navLink.onclick = function() { - $(this).tab('show'); - }; - navLi.appendChild(navLink); - navElement.appendChild(navLi); - - var contentDiv = document.createElement("div"); - contentDiv.style.height = "100%"; - contentDiv.className = contentClass; - contentDiv.id = tabId; - - contentElement.appendChild(contentDiv); - - this._panels.push(new params.panelClass({ - element : contentDiv, - customMap : self.getMap(), - parent : self, - })); + // add this when we want to have triangle below + // '<div class="tngContainer"><div class="tng"></div></div>' + + navLink.innerHTML = '<div class="maintabdiv"><i class="fa ' + params.className + ' maintab"></i><br>' + name + + '</div>'; + + navLink.onclick = function () { + $(this).tab('show'); + }; + navLi.appendChild(navLink); + navElement.appendChild(navLi); + + var contentDiv = document.createElement("div"); + contentDiv.style.height = "100%"; + contentDiv.className = contentClass; + contentDiv.id = tabId; + + contentElement.appendChild(contentDiv); + + this._panels.push(new params.panelClass({ + element: contentDiv, + customMap: self.getMap(), + parent: self, + })); }; -LeftPanel.prototype.hide = function() { - this.getElement().style.display = "none"; +LeftPanel.prototype.hide = function () { + this.getElement().style.display = "none"; }; -LeftPanel.prototype.show = function() { - this.getElement().style.display = "block"; +LeftPanel.prototype.show = function () { + this.getElement().style.display = "block"; }; -LeftPanel.prototype.setHeader = function(header) { - this._header = header; +LeftPanel.prototype.setHeader = function (header) { + this._header = header; }; -LeftPanel.prototype.getHeader = function() { - return this._header; +LeftPanel.prototype.getHeader = function () { + return this._header; }; -LeftPanel.prototype.setLoginDialog = function(loginDialog) { - this._loginDialog = loginDialog; +LeftPanel.prototype.setLoginDialog = function (loginDialog) { + this._loginDialog = loginDialog; }; -LeftPanel.prototype.getLoginDialog = function() { - return this._loginDialog; +LeftPanel.prototype.getLoginDialog = function () { + return this._loginDialog; }; -LeftPanel.prototype.destroy = function() { - var self = this; - var promises = []; - promises.push(self.getHeader().destroy()); - var div = self.elementInfoDiv; - - var destroyPanel = new Promise(function(resolve) { - if ($(div).hasClass("ui-dialog-content")) { - $(div).dialog("destroy"); +LeftPanel.prototype.destroy = function () { + var self = this; + var promises = []; + promises.push(self.getHeader().destroy()); + var div = self.elementInfoDiv; + + var destroyPanel = new Promise(function (resolve) { + if ($(div).hasClass("ui-dialog-content")) { + $(div).dialog("destroy"); + } + resolve(); + }); + promises.push(destroyPanel); + promises.push(self.getLoginDialog().destroy()); + for (var i = 0; i < self._panels.length; i++) { + promises.push(self._panels[i].destroy()); } - resolve(); - }); - promises.push(destroyPanel); - return Promise.all(promises); + return Promise.all(promises); }; module.exports = LeftPanel; diff --git a/frontend-js/src/main/js/gui/leftPanel/MiRnaPanel.js b/frontend-js/src/main/js/gui/leftPanel/MiRnaPanel.js index f3ea0d84c5c4e6ddddbc5a6382e0463a2d72754e..040c905beba955a4094162d005ca5480503b15f6 100644 --- a/frontend-js/src/main/js/gui/leftPanel/MiRnaPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/MiRnaPanel.js @@ -58,4 +58,8 @@ MiRnaPanel.prototype.init = function() { } }; +MiRnaPanel.prototype.destroy = function () { + return Promise.resolve(); +}; + module.exports = MiRnaPanel; diff --git a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js index f4c13ff1493d3f8bb8b227c609d95552cd32779a..64259fe14b260a6fb512c5be354ce1df1fa648ed 100644 --- a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js @@ -11,364 +11,378 @@ var logger = require('../../logger'); var Functions = require('../../Functions'); function OverlayPanel(params) { - params.panelName = "overlays"; - params.scrollable = true; - params.helpTip = "<p>Overlays tab allows to display or generate custom coloring of elements and interactions in the map.</p>" - + "<p>General overlays are overlays accessible for every user viewing the content.</p>" - + "<p>Custom overlays are user-provided overlays, this menu becomes available upon login (see below).</p>"; - Panel.call(this, params); + params.panelName = "overlays"; + params.scrollable = true; + params.helpTip = "<p>Overlays tab allows to display or generate custom coloring of elements and interactions in the map.</p>" + + "<p>General overlays are overlays accessible for every user viewing the content.</p>" + + "<p>Custom overlays are user-provided overlays, this menu becomes available upon login (see below).</p>"; + Panel.call(this, params); - var self = this; + var self = this; - self._createOverlayPanelGui(); + self._createOverlayPanelGui(); - var addButton = this.getControlElement(PanelControlElementType.OVERLAY_ADD_OVERLAY_BUTTON); + var addButton = this.getControlElement(PanelControlElementType.OVERLAY_ADD_OVERLAY_BUTTON); - addButton.onclick = function() { - self.openAddOverlayDialog(); - }; + addButton.onclick = function () { + return self.openAddOverlayDialog(); + }; - var titleElement = this.getControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_TITLE); - self.setCustomOverlaysMessage(titleElement.innerHTML); + var titleElement = this.getControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_TITLE); + self.setCustomOverlaysMessage(titleElement.innerHTML); } OverlayPanel.prototype = Object.create(Panel.prototype); OverlayPanel.prototype.constructor = OverlayPanel; -OverlayPanel.prototype._createOverlayPanelGui = function() { - var generalOverlaysDiv = Functions.createElement({ - type : "div", - name : "generalOverlays", - className : "searchPanel" - }); - this.getElement().appendChild(generalOverlaysDiv); - this.setControlElement(PanelControlElementType.OVERLAY_GENERAL_OVERLAY_DIV, generalOverlaysDiv); - - var generalOverlaysTitle = Functions.createElement({ - type : "h5", - content : "GENERAL OVERLAYS:" - }); - generalOverlaysDiv.appendChild(generalOverlaysTitle); - - var generalOverlaysTableDiv = Functions.createElement({ - type : "table", - name : "generalOverlaysTab", - className : "table table-bordered", - style : "width:100%" - }); - generalOverlaysDiv.appendChild(generalOverlaysTableDiv); - this.setControlElement(PanelControlElementType.OVERLAY_GENERAL_OVERLAY_TABLE, generalOverlaysTableDiv); - - var customOverlaysDiv = Functions.createElement({ - type : "div", - name : "customOverlays", - className : "searchPanel" - }); - this.getElement().appendChild(customOverlaysDiv); - this.setControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_DIV, customOverlaysDiv); - - var customOverlaysTitle = Functions.createElement({ - type : "h5", - name : "customOverlaysTitle", - content : "USER-PROVIDED OVERLAYS:" - }); - customOverlaysDiv.appendChild(customOverlaysTitle); - this.setControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_TITLE, customOverlaysTitle); - - var customOverlaysTableDiv = Functions.createElement({ - type : "table", - name : "customOverlaysTab", - className : "table table-bordered", - style : "width:100%" - }); - customOverlaysDiv.appendChild(customOverlaysTableDiv); - this.setControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_TABLE, customOverlaysTableDiv); - - var centerTag = Functions.createElement({ - type : "center" - }); - customOverlaysDiv.appendChild(centerTag); - - var addOverlayButton = Functions.createElement({ - type : "button", - name : "addOverlay", - content : "Add overlay" - }); - centerTag.appendChild(addOverlayButton); - this.setControlElement(PanelControlElementType.OVERLAY_ADD_OVERLAY_BUTTON, addOverlayButton); +OverlayPanel.prototype._createOverlayPanelGui = function () { + var generalOverlaysDiv = Functions.createElement({ + type: "div", + name: "generalOverlays", + className: "searchPanel" + }); + this.getElement().appendChild(generalOverlaysDiv); + this.setControlElement(PanelControlElementType.OVERLAY_GENERAL_OVERLAY_DIV, generalOverlaysDiv); + + var generalOverlaysTitle = Functions.createElement({ + type: "h5", + content: "GENERAL OVERLAYS:" + }); + generalOverlaysDiv.appendChild(generalOverlaysTitle); + + var generalOverlaysTableDiv = Functions.createElement({ + type: "table", + name: "generalOverlaysTab", + className: "table table-bordered", + style: "width:100%" + }); + generalOverlaysDiv.appendChild(generalOverlaysTableDiv); + this.setControlElement(PanelControlElementType.OVERLAY_GENERAL_OVERLAY_TABLE, generalOverlaysTableDiv); + + var customOverlaysDiv = Functions.createElement({ + type: "div", + name: "customOverlays", + className: "searchPanel" + }); + this.getElement().appendChild(customOverlaysDiv); + this.setControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_DIV, customOverlaysDiv); + + var customOverlaysTitle = Functions.createElement({ + type: "h5", + name: "customOverlaysTitle", + content: "USER-PROVIDED OVERLAYS:" + }); + customOverlaysDiv.appendChild(customOverlaysTitle); + this.setControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_TITLE, customOverlaysTitle); + + var customOverlaysTableDiv = Functions.createElement({ + type: "table", + name: "customOverlaysTab", + className: "table table-bordered", + style: "width:100%" + }); + customOverlaysDiv.appendChild(customOverlaysTableDiv); + this.setControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_TABLE, customOverlaysTableDiv); + + var centerTag = Functions.createElement({ + type: "center" + }); + customOverlaysDiv.appendChild(centerTag); + + var addOverlayButton = Functions.createElement({ + type: "button", + name: "addOverlay", + content: "Add overlay" + }); + centerTag.appendChild(addOverlayButton); + this.setControlElement(PanelControlElementType.OVERLAY_ADD_OVERLAY_BUTTON, addOverlayButton); }; -OverlayPanel.prototype.clear = function() { - var table = this.getControlElement(PanelControlElementType.OVERLAY_GENERAL_OVERLAY_TABLE); - while (table.firstChild) { - table.removeChild(table.firstChild); - } +OverlayPanel.prototype.clear = function () { + var table = this.getControlElement(PanelControlElementType.OVERLAY_GENERAL_OVERLAY_TABLE); + while (table.firstChild) { + table.removeChild(table.firstChild); + } - table = this.getControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_TABLE); - while (table.firstChild) { - table.removeChild(table.firstChild); - } + table = this.getControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_TABLE); + while (table.firstChild) { + table.removeChild(table.firstChild); + } }; -OverlayPanel.prototype.createTableHeader = function(edit) { - var result = document.createElement("thead"); +OverlayPanel.prototype.createTableHeader = function (edit) { + var result = document.createElement("thead"); - var row = document.createElement("tr"); + var row = document.createElement("tr"); - var nameTd = document.createElement("th"); - nameTd.innerHTML = "Name"; - row.appendChild(nameTd); + var nameTd = document.createElement("th"); + nameTd.innerHTML = "Name"; + row.appendChild(nameTd); - var viewTd = document.createElement("th"); - viewTd.innerHTML = "View"; - row.appendChild(viewTd); + var viewTd = document.createElement("th"); + viewTd.innerHTML = "View"; + row.appendChild(viewTd); - var dataTd = document.createElement("th"); - dataTd.innerHTML = "Data"; - row.appendChild(dataTd); + var dataTd = document.createElement("th"); + dataTd.innerHTML = "Data"; + row.appendChild(dataTd); - if (edit) { - var editTd = document.createElement("th"); - editTd.innerHTML = "Edit"; - row.appendChild(editTd); - } + if (edit) { + var editTd = document.createElement("th"); + editTd.innerHTML = "Edit"; + row.appendChild(editTd); + } - result.appendChild(row); - return result; + result.appendChild(row); + return result; }; -OverlayPanel.prototype.createOverlayRow = function(overlay, checked) { - var self = this; - var guiUtils = self.getGuiUtils(); - var result = document.createElement("tr"); - - if (checked) { - result.className = "active"; - } - - var nameTd = document.createElement("td"); - nameTd.innerHTML = overlay.getName(); - result.appendChild(nameTd); - - var viewTd = document.createElement("td"); - if (overlay.getInputDataAvailable()) { - var checkbox = document.createElement("input"); - checkbox.type = "checkbox"; - checkbox.checked = checked; - checkbox.onclick = function() { - if (this.checked) { - return self.getMap().openDataOverlay(overlay.getId()).then(null, GuiConnector.alert); - } else { - return self.getMap().removeSelectedLayout(overlay.getId()).then(null, GuiConnector.alert); - } - }; - viewTd.appendChild(checkbox); - } else { - var img = guiUtils.createIcon("icons/search.png"); - var link = document.createElement("a"); - link.href = "#"; - link.onclick = function() { - self.getMap().openDataOverlay(overlay.getId()); - $(result).addClass('active').siblings().removeClass('active'); - }; - link.appendChild(img); - viewTd.appendChild(link); - } - result.appendChild(viewTd); - - var dataTd = document.createElement("td"); - if (overlay.getInputDataAvailable()) { - var button = document.createElement("button"); - button.setAttribute("name", "download-overlay-" + overlay.getId()); - button.onclick = function() { - return ServerConnector.getOverlaySourceDownloadUrl({ - overlayId : overlay.getId() - }).then(function(url) { - return self.downloadFile(url); - }).then(null, GuiConnector.alert); - }; - button.innerHTML = "<span class='ui-icon ui-icon-arrowthickstop-1-s'></span>"; - dataTd.appendChild(button); - } - - result.appendChild(dataTd); - - if (overlay.getCreator() !== "" && overlay.getCreator() !== undefined) { - var editTd = document.createElement("td"); - var editButton = document.createElement("button"); - editButton.setAttribute("name", "editButton"); - editButton.onclick = function() { - self.openEditOverlayDialog(overlay); - }; - editButton.innerHTML = "<span class='ui-icon ui-icon-document'></span>"; - editTd.appendChild(editButton); - result.appendChild(editTd); - } - result.title = overlay.getDescription(); - return result; -}; +OverlayPanel.prototype.createOverlayRow = function (overlay, checked) { + var self = this; + var guiUtils = self.getGuiUtils(); + var result = document.createElement("tr"); -OverlayPanel.prototype.openEditOverlayDialog = function(overlay) { - var self = this; - var guiUtils = self.getGuiUtils(); - var content = document.createElement("fieldset"); - var nameInput = guiUtils.createInputText(overlay.getName()); - var row = guiUtils.createTableRow([ guiUtils.createLabel("Name: "), nameInput ]); - content.appendChild(row); - - var descriptionInput = guiUtils.createTextArea(overlay.getDescription()); - row = guiUtils.createTableRow([ guiUtils.createLabel("Description: "), descriptionInput ]); - content.appendChild(row); - - var buttons = [ { - text : "SAVE", - click : function() { - var windowSelf = this; - overlay.setName(nameInput.value); - overlay.setDescription(descriptionInput.value); - return ServerConnector.updateOverlay(overlay).then(function() { - return self.refresh(); - }).then(function() { - $(windowSelf).dialog("close"); - }).then(null, GuiConnector.alert); + if (checked) { + result.className = "active"; } - }, { - text : "REMOVE", - click : function() { - self.getMap().removeSelectedLayout(overlay.getId()); - - var windowSelf = this; - return ServerConnector.removeOverlay({ - overlayId : overlay.getId() - }).then(function() { - return self.refresh(); - }).then(function() { - $(windowSelf).dialog("close"); - }).then(null, GuiConnector.alert); + + var nameTd = document.createElement("td"); + nameTd.innerHTML = overlay.getName(); + result.appendChild(nameTd); + + var viewTd = document.createElement("td"); + if (overlay.getInputDataAvailable()) { + var checkbox = document.createElement("input"); + checkbox.type = "checkbox"; + checkbox.checked = checked; + checkbox.onclick = function () { + if (this.checked) { + return self.getMap().openDataOverlay(overlay.getId()).then(null, GuiConnector.alert); + } else { + return self.getMap().removeSelectedLayout(overlay.getId()).then(null, GuiConnector.alert); + } + }; + viewTd.appendChild(checkbox); + } else { + var img = guiUtils.createIcon("icons/search.png"); + var link = document.createElement("a"); + link.href = "#"; + link.onclick = function () { + self.getMap().openDataOverlay(overlay.getId()); + $(result).addClass('active').siblings().removeClass('active'); + }; + link.appendChild(img); + viewTd.appendChild(link); } - }, { - text : "CANCEL", - click : function() { - $(this).dialog("close"); + result.appendChild(viewTd); + + var dataTd = document.createElement("td"); + if (overlay.getInputDataAvailable()) { + var button = document.createElement("button"); + button.setAttribute("name", "download-overlay-" + overlay.getId()); + button.onclick = function () { + return ServerConnector.getOverlaySourceDownloadUrl({ + overlayId: overlay.getId() + }).then(function (url) { + return self.downloadFile(url); + }).then(null, GuiConnector.alert); + }; + button.innerHTML = "<span class='ui-icon ui-icon-arrowthickstop-1-s'></span>"; + dataTd.appendChild(button); } - } ]; - self.openDialog(content, { - id : overlay.getId(), - buttons : buttons, - title : "Data overlay: " + overlay.getName(), - className : "minerva-overlay-dialog", - }); -}; -OverlayPanel.prototype.refresh = function() { - var self = this; - var user = null; - - var overlayTypes = []; - var selectedOverlay = []; - - return ServerConnector.getOverlayTypes().then(function(types) { - overlayTypes = types; - return ServerConnector.getLoggedUser(); - }).then(function(loggedUser) { - user = loggedUser; - return self.getMap().getVisibleDataOverlays(); - }).then(function(visibleDataOverlays) { - for (var j = 0; j < visibleDataOverlays.length; j++) { - selectedOverlay[visibleDataOverlays[j].getId()] = true; + result.appendChild(dataTd); + + if (overlay.getCreator() !== "" && overlay.getCreator() !== undefined) { + var editTd = document.createElement("td"); + var editButton = document.createElement("button"); + editButton.setAttribute("name", "editButton"); + editButton.onclick = function () { + return self.openEditOverlayDialog(overlay); + }; + editButton.innerHTML = "<span class='ui-icon ui-icon-document'></span>"; + editTd.appendChild(editButton); + result.appendChild(editTd); } + result.title = overlay.getDescription(); + return result; +}; - return ServerConnector.getOverlays({ - publicOverlay : false, - creator : user.getLogin(), - }); - }).then( - function(customOverlays) { - - var id = self.getMap().getGoogleMap().getMapTypeId().substring(2); - selectedOverlay[id] = true; - - self.clear(); - - var generalOverlays = []; - var overlay; - - var overlays = self.getMap().getLayouts(); - for (var i = 0; i < overlays.length; i++) { - overlay = overlays[i]; - if (overlay.getCreator() === undefined || overlay.getCreator() === "") { - generalOverlays.push(overlay); - } +OverlayPanel.prototype.openEditOverlayDialog = function (overlay) { + var self = this; + var guiUtils = self.getGuiUtils(); + var content = document.createElement("fieldset"); + var nameInput = guiUtils.createInputText(overlay.getName()); + var row = guiUtils.createTableRow([guiUtils.createLabel("Name: "), nameInput]); + content.appendChild(row); + + var descriptionInput = guiUtils.createTextArea(overlay.getDescription()); + row = guiUtils.createTableRow([guiUtils.createLabel("Description: "), descriptionInput]); + content.appendChild(row); + + var buttons = [{ + text: "SAVE", + click: function () { + var windowSelf = this; + overlay.setName(nameInput.value); + overlay.setDescription(descriptionInput.value); + return ServerConnector.updateOverlay(overlay).then(function () { + return self.refresh(); + }).then(function () { + $(windowSelf).dialog("close"); + }).then(null, GuiConnector.alert); } - - var table = self.getControlElement(PanelControlElementType.OVERLAY_GENERAL_OVERLAY_TABLE); - table.appendChild(self.createTableHeader()); - - var body = document.createElement("tbody"); - table.appendChild(body); - for (i = 0; i < generalOverlays.length; i++) { - overlay = generalOverlays[i]; - body.appendChild(self.createOverlayRow(overlay, selectedOverlay[overlay.getId()])); + }, { + text: "REMOVE", + click: function () { + self.getMap().removeSelectedLayout(overlay.getId()); + + var windowSelf = this; + return ServerConnector.removeOverlay({ + overlayId: overlay.getId() + }).then(function () { + return self.refresh(); + }).then(function () { + $(windowSelf).dialog("close"); + }).then(null, GuiConnector.alert); + } + }, { + text: "CANCEL", + click: function () { + $(this).dialog("close"); } + }]; + self.openDialog(content, { + id: overlay.getId(), + buttons: buttons, + title: "Data overlay: " + overlay.getName(), + className: "minerva-overlay-dialog", + }); +}; - var title = self.getControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_TITLE); - var addButton = self.getControlElement(PanelControlElementType.OVERLAY_ADD_OVERLAY_BUTTON); - if (user.getLogin() === "anonymous") { - title.innerHTML = 'YOU ARE NOT LOGGED IN. PLEASE, <a href="#">LOG IN</a>' - + 'TO UPLOAD AND VIEW CUSTOM OVERLAYS<br/><center><button>LOGIN</button></center>'; - var openLoginDialog = function() { - return self.getParent().getLoginDialog().open(); - }; - $(title).find("a")[0].onclick = openLoginDialog; - $(title).find("button")[0].onclick = openLoginDialog; - addButton.style.display = "none"; - } else { - title.innerHTML = self.getCustomOverlaysMessage(); - addButton.style.display = "block"; - - table = self.getControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_TABLE); - table.appendChild(self.createTableHeader(true)); - - body = document.createElement("tbody"); - table.appendChild(body); - for (i = 0; i < customOverlays.length; i++) { - overlay = customOverlays[i]; - body.appendChild(self.createOverlayRow(overlay, selectedOverlay[overlay.getId()])); - } +OverlayPanel.prototype.refresh = function () { + var self = this; + var user = null; + + var overlayTypes = []; + var selectedOverlay = []; + + return ServerConnector.getOverlayTypes().then(function (types) { + overlayTypes = types; + return ServerConnector.getLoggedUser(); + }).then(function (loggedUser) { + user = loggedUser; + return self.getMap().getVisibleDataOverlays(); + }).then(function (visibleDataOverlays) { + for (var j = 0; j < visibleDataOverlays.length; j++) { + selectedOverlay[visibleDataOverlays[j].getId()] = true; } - self.onresize(); - }); + return ServerConnector.getOverlays({ + publicOverlay: false, + creator: user.getLogin(), + }); + }).then( + function (customOverlays) { + + var id = self.getMap().getGoogleMap().getMapTypeId().substring(2); + selectedOverlay[id] = true; + + self.clear(); + + var generalOverlays = []; + var overlay; + + var overlays = self.getMap().getLayouts(); + for (var i = 0; i < overlays.length; i++) { + overlay = overlays[i]; + if (overlay.getCreator() === undefined || overlay.getCreator() === "") { + generalOverlays.push(overlay); + } + } + + var table = self.getControlElement(PanelControlElementType.OVERLAY_GENERAL_OVERLAY_TABLE); + table.appendChild(self.createTableHeader()); + + var body = document.createElement("tbody"); + table.appendChild(body); + for (i = 0; i < generalOverlays.length; i++) { + overlay = generalOverlays[i]; + body.appendChild(self.createOverlayRow(overlay, selectedOverlay[overlay.getId()])); + } + + var title = self.getControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_TITLE); + var addButton = self.getControlElement(PanelControlElementType.OVERLAY_ADD_OVERLAY_BUTTON); + if (user.getLogin() === "anonymous") { + title.innerHTML = 'YOU ARE NOT LOGGED IN. PLEASE, <a href="#">LOG IN</a>' + + 'TO UPLOAD AND VIEW CUSTOM OVERLAYS<br/><center><button>LOGIN</button></center>'; + var openLoginDialog = function () { + return self.getParent().getLoginDialog().open(); + }; + $(title).find("a")[0].onclick = openLoginDialog; + $(title).find("button")[0].onclick = openLoginDialog; + addButton.style.display = "none"; + } else { + title.innerHTML = self.getCustomOverlaysMessage(); + addButton.style.display = "block"; + + table = self.getControlElement(PanelControlElementType.OVERLAY_CUSTOM_OVERLAY_TABLE); + table.appendChild(self.createTableHeader(true)); + + body = document.createElement("tbody"); + table.appendChild(body); + for (i = 0; i < customOverlays.length; i++) { + overlay = customOverlays[i]; + body.appendChild(self.createOverlayRow(overlay, selectedOverlay[overlay.getId()])); + } + } + + self.onresize(); + }); }; -OverlayPanel.prototype.setCustomOverlaysMessage = function(customOverlaysMessage) { - this._customOverlaysMessage = customOverlaysMessage; +OverlayPanel.prototype.setCustomOverlaysMessage = function (customOverlaysMessage) { + this._customOverlaysMessage = customOverlaysMessage; }; -OverlayPanel.prototype.getCustomOverlaysMessage = function() { - return this._customOverlaysMessage; +OverlayPanel.prototype.getCustomOverlaysMessage = function () { + return this._customOverlaysMessage; }; -OverlayPanel.prototype.openAddOverlayDialog = function() { - var self = this; - var addOverlayDialog = new AddOverlayDialog({ - project : self.getProject(), - customMap : self.getMap(), - element : document.createElement("div"), - }); - addOverlayDialog.addListener("onAddOverlay", function(e) { - self.getMap().getModel().addLayout(e.arg); - return self.refresh(); - }); - return addOverlayDialog.init().then(function() { - return addOverlayDialog.open(); - }); +OverlayPanel.prototype.openAddOverlayDialog = function () { + var self = this; + if (self._addOverlayDialog !== undefined) { + self._addOverlayDialog.destroy(); + } + self._addOverlayDialog = new AddOverlayDialog({ + project: self.getProject(), + customMap: self.getMap(), + element: document.createElement("div"), + }); + self._addOverlayDialog.addListener("onAddOverlay", function (e) { + self.getMap().getModel().addLayout(e.arg); + return self.refresh(); + }); + return self._addOverlayDialog.init().then(function () { + return self._addOverlayDialog.open(); + }); }; -OverlayPanel.prototype.init = function() { - return this.refresh(); +OverlayPanel.prototype.init = function () { + return this.refresh(); }; + +OverlayPanel.prototype.destroy = function () { + var self = this; + Panel.prototype.destroy.call(this); + if (self._addOverlayDialog !== undefined) { + return self._addOverlayDialog.destroy(); + } else { + return Promise.resolve(); + } +}; + module.exports = OverlayPanel; diff --git a/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js b/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js index 7de49eae84b03d2ac4391f7ee4a182a65f47880d..4971bba90cfc18458e58b6e93f478a32fe08a473 100644 --- a/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js @@ -11,21 +11,21 @@ var logger = require('../../logger'); var Functions = require('../../Functions'); function ProjectInfoPanel(params) { - params.panelName = "info"; - params.scrollable = true; - Panel.call(this, params); - var self = this; - self._createInfoPanelGui(); - self._createInfoPanelLogic(); - - self._createUserDataTab(); - var logoutButton = self.getControlElement(PanelControlElementType.USER_TAB_LOGOUT_BUTTON); - - logoutButton.onclick = function () { - return ServerConnector.logout().then(function () { - window.location.reload(false); - }).then(null, GuiConnector.alert); - }; + params.panelName = "info"; + params.scrollable = true; + Panel.call(this, params); + var self = this; + self._createInfoPanelGui(); + self._createInfoPanelLogic(); + + self._createUserDataTab(); + var logoutButton = self.getControlElement(PanelControlElementType.USER_TAB_LOGOUT_BUTTON); + + logoutButton.onclick = function () { + return ServerConnector.logout().then(function () { + window.location.reload(false); + }).then(null, GuiConnector.alert); + }; } @@ -33,281 +33,281 @@ ProjectInfoPanel.prototype = Object.create(Panel.prototype); ProjectInfoPanel.prototype.constructor = ProjectInfoPanel; ProjectInfoPanel.prototype._createInfoPanelGui = function () { - var self = this; - var guiUtils = self.getGuiUtils(); - var projectId = self.getMap().getProject().getProjectId(); - - var infoDiv = Functions.createElement({ - type: "div", - name: "infoDiv", - className: "searchPanel" - }); - this.getElement().appendChild(infoDiv); - this.setControlElement(PanelControlElementType.INFO_DIV, infoDiv); + var self = this; + var guiUtils = self.getGuiUtils(); + var projectId = self.getMap().getProject().getProjectId(); + + var infoDiv = Functions.createElement({ + type: "div", + name: "infoDiv", + className: "searchPanel" + }); + this.getElement().appendChild(infoDiv); + this.setControlElement(PanelControlElementType.INFO_DIV, infoDiv); - var infoTitle = Functions.createElement({ - type: "h4", - content: "PROJECT INFO:" - }); - infoDiv.appendChild(infoTitle); + var infoTitle = Functions.createElement({ + type: "h4", + content: "PROJECT INFO:" + }); + infoDiv.appendChild(infoTitle); - var dataTab = Functions.createElement({ - type: "div", - style: "width:100%;display: table;border-spacing: 10px;" - }); - infoDiv.appendChild(dataTab); + var dataTab = Functions.createElement({ + type: "div", + style: "width:100%;display: table;border-spacing: 10px;" + }); + infoDiv.appendChild(dataTab); - var projectNameLabel = Functions.createElement({ - type: "div", - content: "Name:" - }); - var projectNameText = Functions.createElement({ - type: "div", - style: "width:100%", - name: "projectNameText" - }); - this.setControlElement(PanelControlElementType.INFO_PROJECT_NAME_TEXT, projectNameText); - dataTab.appendChild(guiUtils.createTableRow([projectNameLabel, projectNameText])); + var projectNameLabel = Functions.createElement({ + type: "div", + content: "Name:" + }); + var projectNameText = Functions.createElement({ + type: "div", + style: "width:100%", + name: "projectNameText" + }); + this.setControlElement(PanelControlElementType.INFO_PROJECT_NAME_TEXT, projectNameText); + dataTab.appendChild(guiUtils.createTableRow([projectNameLabel, projectNameText])); - var projectVersionLabel = Functions.createElement({ - type: "div", - content: "Version:" - }); - var projectVersionText = Functions.createElement({ - type: "div", - style: "width:100%", - name: "projectVersionText" - }); - this.setControlElement(PanelControlElementType.INFO_PROJECT_VERSION_TEXT, projectVersionText); - dataTab.appendChild(guiUtils.createTableRow([projectVersionLabel, projectVersionText])); + var projectVersionLabel = Functions.createElement({ + type: "div", + content: "Version:" + }); + var projectVersionText = Functions.createElement({ + type: "div", + style: "width:100%", + name: "projectVersionText" + }); + this.setControlElement(PanelControlElementType.INFO_PROJECT_VERSION_TEXT, projectVersionText); + dataTab.appendChild(guiUtils.createTableRow([projectVersionLabel, projectVersionText])); - infoTitle = Functions.createElement({ - type: "h4", - content: "Data:" - }); - infoDiv.appendChild(infoTitle); + infoTitle = Functions.createElement({ + type: "h4", + content: "Data:" + }); + infoDiv.appendChild(infoTitle); - var dialogDiv = Functions.createElement({ - type: "div", - }); + var dialogDiv = Functions.createElement({ + type: "div", + }); - this.publicationListDialog = new PublicationListDialog({ - customMap: self.getMap(), - element: dialogDiv, - }); + this.publicationListDialog = new PublicationListDialog({ + customMap: self.getMap(), + element: dialogDiv, + }); - dataTab = Functions.createElement({ - type: "ul", - }); - infoDiv.appendChild(dataTab); + dataTab = Functions.createElement({ + type: "ul", + }); + infoDiv.appendChild(dataTab); - var projectPublicationsText = Functions.createElement({ - type: "span", - name: "projectPublicationsText", - style: "font-family:FontAwesome; font-weight: normal;font-style: normal;cursor: pointer", - }); - this.setControlElement(PanelControlElementType.INFO_PROJECT_PUBLICATIONS_TEXT, projectPublicationsText); + var projectPublicationsText = Functions.createElement({ + type: "span", + name: "projectPublicationsText", + style: "font-family:FontAwesome; font-weight: normal;font-style: normal;cursor: pointer", + }); + this.setControlElement(PanelControlElementType.INFO_PROJECT_PUBLICATIONS_TEXT, projectPublicationsText); - var projectPublicationsButton = Functions.createElement({ - type: "a", - name: "projectPublicationsButton", - }); - projectPublicationsButton.appendChild(Functions.createElement({ - type: "span", - content: "<i class='fa fa-list'> ", - })); - - projectPublicationsButton.appendChild(projectPublicationsText); - projectPublicationsButton.appendChild(Functions.createElement({ - type: "span", - style: "font-family:FontAwesome; font-weight: normal;font-style: normal;cursor: pointer", - content: " publication(s)", - })); - this.setControlElement(PanelControlElementType.INFO_PROJECT_SHOW_PUBLICATIONS_BUTTON, projectPublicationsButton); - - var liElement = Functions.createElement({ - type: "li", - style: "line-height: 30px;", - }); - liElement.appendChild(projectPublicationsButton); - dataTab.appendChild(liElement); - - var projectOriginalFileButton = Functions.createElement({ - type: "a", - name: "projectOriginalFileButton", - href: "#", - content: "<i class='fa fa-files-o'> source file", - }); - this.setControlElement(PanelControlElementType.INFO_PROJECT_GET_ORIGINAL_FILE_BUTTON, projectOriginalFileButton); - liElement = Functions.createElement({ - type: "li", - style: "line-height: 30px", - }); - liElement.appendChild(projectOriginalFileButton); - dataTab.appendChild(liElement); + var projectPublicationsButton = Functions.createElement({ + type: "a", + name: "projectPublicationsButton", + }); + projectPublicationsButton.appendChild(Functions.createElement({ + type: "span", + content: "<i class='fa fa-list'> ", + })); + + projectPublicationsButton.appendChild(projectPublicationsText); + projectPublicationsButton.appendChild(Functions.createElement({ + type: "span", + style: "font-family:FontAwesome; font-weight: normal;font-style: normal;cursor: pointer", + content: " publication(s)", + })); + this.setControlElement(PanelControlElementType.INFO_PROJECT_SHOW_PUBLICATIONS_BUTTON, projectPublicationsButton); + + var liElement = Functions.createElement({ + type: "li", + style: "line-height: 30px;", + }); + liElement.appendChild(projectPublicationsButton); + dataTab.appendChild(liElement); + + var projectOriginalFileButton = Functions.createElement({ + type: "a", + name: "projectOriginalFileButton", + href: "#", + content: "<i class='fa fa-files-o'> source file", + }); + this.setControlElement(PanelControlElementType.INFO_PROJECT_GET_ORIGINAL_FILE_BUTTON, projectOriginalFileButton); + liElement = Functions.createElement({ + type: "li", + style: "line-height: 30px", + }); + liElement.appendChild(projectOriginalFileButton); + dataTab.appendChild(liElement); - var exportButton = Functions.createElement({ - type: "a", - href: ServerConnector.getServerBaseUrl() + "/export.xhtml?id=" + projectId, - content: '<i class="fa fa-mail-forward"> EXPORT', - }); - liElement = Functions.createElement({ - type: "li", - style: "line-height: 30px", - }); - liElement.appendChild(exportButton); - dataTab.appendChild(liElement); + var exportButton = Functions.createElement({ + type: "a", + href: ServerConnector.getServerBaseUrl() + "/export.xhtml?id=" + projectId, + content: '<i class="fa fa-mail-forward"> EXPORT', + }); + liElement = Functions.createElement({ + type: "li", + style: "line-height: 30px", + }); + liElement.appendChild(exportButton); + dataTab.appendChild(liElement); - var manualButton = Functions.createElement({ - type: "a", - name: "manualLink", - content: '<i class="fa fa-file"> MANUAL', - }); - manualButton.href = "#"; - manualButton.onclick = function () { - return ServerConnector.getConfigurationParam(ConfigurationType.USER_MANUAL_FILE).then(function (manualFileUrl) { - var win = window.open(manualFileUrl, '_user_manual_'); - win.focus(); + var manualButton = Functions.createElement({ + type: "a", + name: "manualLink", + content: '<i class="fa fa-file"> MANUAL', }); - }; - liElement = Functions.createElement({ - type: "li", - style: "line-height: 30px", - }); - liElement.appendChild(manualButton); - dataTab.appendChild(liElement); + manualButton.href = "#"; + manualButton.onclick = function () { + return ServerConnector.getConfigurationParam(ConfigurationType.USER_MANUAL_FILE).then(function (manualFileUrl) { + var win = window.open(manualFileUrl, '_user_manual_'); + win.focus(); + }); + }; + liElement = Functions.createElement({ + type: "li", + style: "line-height: 30px", + }); + liElement.appendChild(manualButton); + dataTab.appendChild(liElement); }; ProjectInfoPanel.prototype._createInfoPanelLogic = function () { - var self = this; + var self = this; - var downloadSourceButton = self.getControlElement(PanelControlElementType.INFO_PROJECT_GET_ORIGINAL_FILE_BUTTON); - var showPublicationsButton = self.getControlElement(PanelControlElementType.INFO_PROJECT_SHOW_PUBLICATIONS_BUTTON); + var downloadSourceButton = self.getControlElement(PanelControlElementType.INFO_PROJECT_GET_ORIGINAL_FILE_BUTTON); + var showPublicationsButton = self.getControlElement(PanelControlElementType.INFO_PROJECT_SHOW_PUBLICATIONS_BUTTON); - downloadSourceButton.onclick = function () { - return self.downloadSourceFile(); - }; - showPublicationsButton.onclick = function () { - return self.showPublicationListDialog(); - }; + downloadSourceButton.onclick = function () { + return self.downloadSourceFile(); + }; + showPublicationsButton.onclick = function () { + return self.showPublicationListDialog(); + }; }; ProjectInfoPanel.prototype.downloadSourceFile = function () { - var self = this; - return ServerConnector.getProjectSourceDownloadUrl().then(function (url) { - return self.downloadFile(url); - }).then(null, GuiConnector.alert); + var self = this; + return ServerConnector.getProjectSourceDownloadUrl().then(function (url) { + return self.downloadFile(url); + }).then(null, GuiConnector.alert); }; ProjectInfoPanel.prototype.showPublicationListDialog = function () { - return this.publicationListDialog.show(); + return this.publicationListDialog.show(); }; ProjectInfoPanel.prototype.refresh = function () { - var self = this; - - var projectNameText = self.getControlElement(PanelControlElementType.INFO_PROJECT_NAME_TEXT); - var projectVersionText = self.getControlElement(PanelControlElementType.INFO_PROJECT_VERSION_TEXT); - var projectPublicationsText = self.getControlElement(PanelControlElementType.INFO_PROJECT_PUBLICATIONS_TEXT); - - return ServerConnector.getProject().then(function (project) { - projectNameText.innerHTML = project.getName(); - projectVersionText.innerHTML = project.getVersion(); - return ServerConnector.getProjectStatistics(); - }).then(function (statistics) { - projectPublicationsText.innerHTML = statistics.getPublicationCount(); - return ServerConnector.getLoggedUser(); - }).then(function (user) { - self.showUserProfilePage(user); - }); + var self = this; + + var projectNameText = self.getControlElement(PanelControlElementType.INFO_PROJECT_NAME_TEXT); + var projectVersionText = self.getControlElement(PanelControlElementType.INFO_PROJECT_VERSION_TEXT); + var projectPublicationsText = self.getControlElement(PanelControlElementType.INFO_PROJECT_PUBLICATIONS_TEXT); + + return ServerConnector.getProject().then(function (project) { + projectNameText.innerHTML = project.getName(); + projectVersionText.innerHTML = project.getVersion(); + return ServerConnector.getProjectStatistics(); + }).then(function (statistics) { + projectPublicationsText.innerHTML = statistics.getPublicationCount(); + return ServerConnector.getLoggedUser(); + }).then(function (user) { + self.showUserProfilePage(user); + }); }; ProjectInfoPanel.prototype._createUserDataTab = function () { - var self = this; - var guiUtils = self.getGuiUtils(); - var userDataDiv = Functions.createElement({ - type: "div", - name: "userDataTab", - className: "searchPanel", - style: "display:none" - }); - this.getElement().appendChild(userDataDiv); - this.setControlElement(PanelControlElementType.USER_TAB_USER_DIV, userDataDiv); + var self = this; + var guiUtils = self.getGuiUtils(); + var userDataDiv = Functions.createElement({ + type: "div", + name: "userDataTab", + className: "searchPanel", + style: "display:none" + }); + this.getElement().appendChild(userDataDiv); + this.setControlElement(PanelControlElementType.USER_TAB_USER_DIV, userDataDiv); - var userDataTitle = Functions.createElement({ - type: "h3", - content: '<img src="./resources/images/profile.png" border="0" align="left"/><br/>User data<br/>' - }); - userDataDiv.appendChild(userDataTitle); + var userDataTitle = Functions.createElement({ + type: "h3", + content: '<img src="./resources/images/profile.png" border="0" align="left"/><br/>User data<br/>' + }); + userDataDiv.appendChild(userDataTitle); - var userDataFormTab = Functions.createElement({ - type: "div", - style: "width:100%;display: table;border-spacing: 10px;" - }); - userDataDiv.appendChild(userDataFormTab); + var userDataFormTab = Functions.createElement({ + type: "div", + style: "width:100%;display: table;border-spacing: 10px;" + }); + userDataDiv.appendChild(userDataFormTab); - var loginLabel = Functions.createElement({ - type: "span", - content: "LOGIN:", - style: "color:#999999" - }); - var loginText = Functions.createElement({ - type: "span", - name: "loginValue" - }); - this.setControlElement(PanelControlElementType.USER_TAB_LOGIN_TEXT, loginText); - userDataDiv.appendChild(guiUtils.createTableRow([loginLabel, loginText])); + var loginLabel = Functions.createElement({ + type: "span", + content: "LOGIN:", + style: "color:#999999" + }); + var loginText = Functions.createElement({ + type: "span", + name: "loginValue" + }); + this.setControlElement(PanelControlElementType.USER_TAB_LOGIN_TEXT, loginText); + userDataDiv.appendChild(guiUtils.createTableRow([loginLabel, loginText])); - var nameLabel = Functions.createElement({ - type: "span", - content: "NAME:", - style: "color:#999999" - }); - var nameText = Functions.createElement({ - type: "span", - name: "nameValue" - }); - this.setControlElement(PanelControlElementType.USER_TAB_NAME_TEXT, nameText); - userDataDiv.appendChild(guiUtils.createTableRow([nameLabel, nameText])); + var nameLabel = Functions.createElement({ + type: "span", + content: "NAME:", + style: "color:#999999" + }); + var nameText = Functions.createElement({ + type: "span", + name: "nameValue" + }); + this.setControlElement(PanelControlElementType.USER_TAB_NAME_TEXT, nameText); + userDataDiv.appendChild(guiUtils.createTableRow([nameLabel, nameText])); - var surnameLabel = Functions.createElement({ - type: "span", - content: "SURNAME:", - style: "color:#999999" - }); - var surnameText = Functions.createElement({ - type: "span", - name: "surnameValue" - }); - this.setControlElement(PanelControlElementType.USER_TAB_SURNAME_TEXT, surnameText); - userDataDiv.appendChild(guiUtils.createTableRow([surnameLabel, surnameText])); + var surnameLabel = Functions.createElement({ + type: "span", + content: "SURNAME:", + style: "color:#999999" + }); + var surnameText = Functions.createElement({ + type: "span", + name: "surnameValue" + }); + this.setControlElement(PanelControlElementType.USER_TAB_SURNAME_TEXT, surnameText); + userDataDiv.appendChild(guiUtils.createTableRow([surnameLabel, surnameText])); - var emailLabel = Functions.createElement({ - type: "span", - content: "EMAIL:", - style: "color:#999999" - }); - var emailText = Functions.createElement({ - type: "span", - name: "emailValue" - }); - self.setControlElement(PanelControlElementType.USER_TAB_EMAIL_TEXT, emailText); - userDataDiv.appendChild(guiUtils.createTableRow([emailLabel, emailText])); + var emailLabel = Functions.createElement({ + type: "span", + content: "EMAIL:", + style: "color:#999999" + }); + var emailText = Functions.createElement({ + type: "span", + name: "emailValue" + }); + self.setControlElement(PanelControlElementType.USER_TAB_EMAIL_TEXT, emailText); + userDataDiv.appendChild(guiUtils.createTableRow([emailLabel, emailText])); - var centerTag = Functions.createElement({ - type: "center" - }); - userDataDiv.appendChild(centerTag); + var centerTag = Functions.createElement({ + type: "center" + }); + userDataDiv.appendChild(centerTag); - var logoutButton = Functions.createElement({ - type: "button", - name: "logoutButton", - content: "LOGOUT" - }); - centerTag.appendChild(logoutButton); - self.setControlElement(PanelControlElementType.USER_TAB_LOGOUT_BUTTON, logoutButton); - self.setControlElement(PanelControlElementType.USER_TAB_USER_DIV, userDataDiv); + var logoutButton = Functions.createElement({ + type: "button", + name: "logoutButton", + content: "LOGOUT" + }); + centerTag.appendChild(logoutButton); + self.setControlElement(PanelControlElementType.USER_TAB_LOGOUT_BUTTON, logoutButton); + self.setControlElement(PanelControlElementType.USER_TAB_USER_DIV, userDataDiv); var loginTabDiv = Functions.createElement({ type: "div", @@ -322,34 +322,34 @@ ProjectInfoPanel.prototype._createUserDataTab = function () { return self.getParent().getLoginDialog().open(); }; - self.getElement().appendChild(loginTabDiv); - self.setControlElement(PanelControlElementType.USER_TAB_LOGIN_DIV, loginTabDiv); + self.getElement().appendChild(loginTabDiv); + self.setControlElement(PanelControlElementType.USER_TAB_LOGIN_DIV, loginTabDiv); }; ProjectInfoPanel.prototype.showUserProfilePage = function (user) { - var self = this; - var userDataTabDiv = self.getControlElement(PanelControlElementType.USER_TAB_USER_DIV); - var userLoginTabDiv = self.getControlElement(PanelControlElementType.USER_TAB_LOGIN_DIV); - if (user.getLogin() !== "anonymous") { - var loginText = self.getControlElement(PanelControlElementType.USER_TAB_LOGIN_TEXT); - var nameText = self.getControlElement(PanelControlElementType.USER_TAB_NAME_TEXT); - var surnameText = self.getControlElement(PanelControlElementType.USER_TAB_SURNAME_TEXT); - var emailText = self.getControlElement(PanelControlElementType.USER_TAB_EMAIL_TEXT); - - userLoginTabDiv.style.display = "none"; - userDataTabDiv.style.display = "block"; - - loginText.innerHTML = user.getLogin(); - nameText.innerHTML = user.getName(); - surnameText.innerHTML = user.getSurname(); - emailText.innerHTML = user.getEmail(); - } else { - - userLoginTabDiv.style.display = "block"; - userDataTabDiv.style.display = "none"; - } + var self = this; + var userDataTabDiv = self.getControlElement(PanelControlElementType.USER_TAB_USER_DIV); + var userLoginTabDiv = self.getControlElement(PanelControlElementType.USER_TAB_LOGIN_DIV); + if (user.getLogin() !== "anonymous") { + var loginText = self.getControlElement(PanelControlElementType.USER_TAB_LOGIN_TEXT); + var nameText = self.getControlElement(PanelControlElementType.USER_TAB_NAME_TEXT); + var surnameText = self.getControlElement(PanelControlElementType.USER_TAB_SURNAME_TEXT); + var emailText = self.getControlElement(PanelControlElementType.USER_TAB_EMAIL_TEXT); + + userLoginTabDiv.style.display = "none"; + userDataTabDiv.style.display = "block"; + + loginText.innerHTML = user.getLogin(); + nameText.innerHTML = user.getName(); + surnameText.innerHTML = user.getSurname(); + emailText.innerHTML = user.getEmail(); + } else { + + userLoginTabDiv.style.display = "block"; + userDataTabDiv.style.display = "none"; + } }; ProjectInfoPanel.prototype.init = function () { @@ -361,4 +361,7 @@ ProjectInfoPanel.prototype.init = function () { }); }; +ProjectInfoPanel.prototype.destroy = function () { + return this.publicationListDialog.destroy(); +} module.exports = ProjectInfoPanel; diff --git a/frontend-js/src/main/js/gui/leftPanel/SearchPanel.js b/frontend-js/src/main/js/gui/leftPanel/SearchPanel.js index fd9775099dc73153100940b9447cbe81b7036017..5726cba066afa6a2acacb99ad475b1587a2efdb3 100644 --- a/frontend-js/src/main/js/gui/leftPanel/SearchPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/SearchPanel.js @@ -152,4 +152,9 @@ SearchPanel.prototype.addTab = function(params, navElement, contentElement) { })); }; +SearchPanel.prototype.destroy = function () { + return Promise.resolve(); +}; + + module.exports = SearchPanel; diff --git a/frontend-js/src/main/js/gui/leftPanel/SubmapPanel.js b/frontend-js/src/main/js/gui/leftPanel/SubmapPanel.js index 2cc077f69fd8abf2e46f9c7ff7f9b4576981d163..bf20da848aa2ed5f236e226b9b9ab294198762f0 100644 --- a/frontend-js/src/main/js/gui/leftPanel/SubmapPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/SubmapPanel.js @@ -11,132 +11,136 @@ var logger = require('../../logger'); var Functions = require('../../Functions'); function SubmapPanel(params) { - params.panelName = "submap"; - params.helpTip = "The Submaps tab summarizes all the submap networks uploaded together and linked to the main network of <b>'" - + params.parent.getMap().getProject().getName() + "'</b> project."; - Panel.call(this, params); + params.panelName = "submap"; + params.helpTip = "The Submaps tab summarizes all the submap networks uploaded together and linked to the main network of <b>'" + + params.parent.getMap().getProject().getName() + "'</b> project."; + Panel.call(this, params); - var self = this; - self._createSubmapGui(); + var self = this; + self._createSubmapGui(); } SubmapPanel.prototype = Object.create(Panel.prototype); SubmapPanel.prototype.constructor = SubmapPanel; -SubmapPanel.prototype._createSubmapGui = function() { - var submapDiv = Functions.createElement({ - type : "div", - name : "submapDiv", - className : "searchPanel" - }); - this.getElement().appendChild(submapDiv); - this.setControlElement(PanelControlElementType.SUBMAP_DIV, submapDiv); +SubmapPanel.prototype._createSubmapGui = function () { + var submapDiv = Functions.createElement({ + type: "div", + name: "submapDiv", + className: "searchPanel" + }); + this.getElement().appendChild(submapDiv); + this.setControlElement(PanelControlElementType.SUBMAP_DIV, submapDiv); }; -SubmapPanel.prototype.createRow = function(model) { - var self = this; - var guiUtils = self.getGuiUtils(); - var result = document.createElement("tr"); - - var nameTd = document.createElement("td"); - nameTd.innerHTML = model.getName(); - result.appendChild(nameTd); - - var openTd = document.createElement("td"); - - if (model.getId() !== self.getMap().getId()) { - var img = guiUtils.createIcon("icons/search.png"); - var link = document.createElement("a"); - link.href = "#"; - link.onclick = function() { - self.getMap().openSubmap(model.getId()); - }; - link.appendChild(img); - openTd.appendChild(link); - } +SubmapPanel.prototype.createRow = function (model) { + var self = this; + var guiUtils = self.getGuiUtils(); + var result = document.createElement("tr"); + + var nameTd = document.createElement("td"); + nameTd.innerHTML = model.getName(); + result.appendChild(nameTd); + + var openTd = document.createElement("td"); + + if (model.getId() !== self.getMap().getId()) { + var img = guiUtils.createIcon("icons/search.png"); + var link = document.createElement("a"); + link.href = "#"; + link.onclick = function () { + self.getMap().openSubmap(model.getId()); + }; + link.appendChild(img); + openTd.appendChild(link); + } - result.appendChild(openTd); + result.appendChild(openTd); - return result; + return result; }; -SubmapPanel.prototype.createTableHeader = function() { - var result = document.createElement("thead"); +SubmapPanel.prototype.createTableHeader = function () { + var result = document.createElement("thead"); - var row = document.createElement("tr"); + var row = document.createElement("tr"); - var nameTd = document.createElement("th"); - nameTd.innerHTML = "Name"; - row.appendChild(nameTd); + var nameTd = document.createElement("th"); + nameTd.innerHTML = "Name"; + row.appendChild(nameTd); - row.appendChild(Functions.createElement({ - type : "th", - style : "width: 60px;", - content : "View" - })); + row.appendChild(Functions.createElement({ + type: "th", + style: "width: 60px;", + content: "View" + })); - result.appendChild(row); - return result; + result.appendChild(row); + return result; }; -SubmapPanel.prototype.init = function() { - var self = this; - return new Promise(function(resolve) { - var div = self.getControlElement(PanelControlElementType.SUBMAP_DIV); - div.innerHTML = ""; - var models = self.getMap().getProject().getModel().getSubmodels(); - var modelsByType = []; - var types = []; - var i; - for (i = 0; i < models.length; i++) { - var model = models[i]; - if (modelsByType[model.getSubmodelType()] === undefined) { - modelsByType[model.getSubmodelType()] = []; - types.push(model.getSubmodelType()); - } - modelsByType[model.getSubmodelType()].push(model); - } - for (i = 0; i < types.length; i++) { - var type = types[i]; - div.appendChild(self.createTable(modelsByType[type], type + " submaps")); - } - if (models.length === 0) { - self.getParent().hideTab(self); +SubmapPanel.prototype.init = function () { + var self = this; + return new Promise(function (resolve) { + var div = self.getControlElement(PanelControlElementType.SUBMAP_DIV); + div.innerHTML = ""; + var models = self.getMap().getProject().getModel().getSubmodels(); + var modelsByType = []; + var types = []; + var i; + for (i = 0; i < models.length; i++) { + var model = models[i]; + if (modelsByType[model.getSubmodelType()] === undefined) { + modelsByType[model.getSubmodelType()] = []; + types.push(model.getSubmodelType()); + } + modelsByType[model.getSubmodelType()].push(model); + } + for (i = 0; i < types.length; i++) { + var type = types[i]; + div.appendChild(self.createTable(modelsByType[type], type + " submaps")); + } + if (models.length === 0) { + self.getParent().hideTab(self); + } + return resolve(); + }); +}; + +SubmapPanel.prototype.createTable = function (models, type) { + var self = this; + var result = Functions.createElement({ + type: "div", + }); + + var title = Functions.createElement({ + type: "h5", + content: type + }); + result.appendChild(title); + + var table = Functions.createElement({ + type: "table", + className: "table table-bordered", + style: "width:100%" + }); + result.appendChild(table); + + table.appendChild(self.createTableHeader()); + var tableBody = Functions.createElement({ + type: "tbody", + }); + table.appendChild(tableBody); + + for (var i = 0; i < models.length; i++) { + tableBody.appendChild(self.createRow(models[i])); } - return resolve(); - }); + return result; }; -SubmapPanel.prototype.createTable = function(models, type) { - var self = this; - var result = Functions.createElement({ - type : "div", - }); - - var title = Functions.createElement({ - type : "h5", - content : type - }); - result.appendChild(title); - - var table = Functions.createElement({ - type : "table", - className : "table table-bordered", - style : "width:100%" - }); - result.appendChild(table); - - table.appendChild(self.createTableHeader()); - var tableBody = Functions.createElement({ - type : "tbody", - }); - table.appendChild(tableBody); - - for (var i = 0; i < models.length; i++) { - tableBody.appendChild(self.createRow(models[i])); - } - return result; +SubmapPanel.prototype.destroy = function () { + return Promise.resolve(); }; module.exports = SubmapPanel; diff --git a/frontend-js/src/main/js/gui/topMenu/TopMenu.js b/frontend-js/src/main/js/gui/topMenu/TopMenu.js index cd80bd94f685681a1b457fa460fef4e6ebeeb845..062a1d4caeca374455459e44dd11bc266c7a299c 100644 --- a/frontend-js/src/main/js/gui/topMenu/TopMenu.js +++ b/frontend-js/src/main/js/gui/topMenu/TopMenu.js @@ -12,218 +12,223 @@ var Functions = require('../../Functions'); var logger = require('../../logger'); function TopMenu(params) { - AbstractGuiElement.call(this, params); - var self = this; + AbstractGuiElement.call(this, params); + var self = this; - self._createGui(); + 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 : "minerva-overview-button", - name : "showOverviewButton", - content : "<i class='fa fa-sitemap' style='font-size:18px; font-weight:400; padding-right:10px;'></i><span >SHOW OVERVIEW</span>", - 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 : "minerva-top-checkbox-div", - }); - 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 : "minerva-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 : "minerva-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._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: "minerva-overview-button", + name: "showOverviewButton", + content: "<i class='fa fa-sitemap' style='font-size:18px; font-weight:400; padding-right:10px;'></i><span >SHOW OVERVIEW</span>", + 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: "minerva-top-checkbox-div", + }); + 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: "minerva-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: "minerva-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().then(null, GuiConnector.alert); - }; - refreshCommentButton.onclick = (function() { - return function() { - self.getMap().refreshComments(); - return false; +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 clearButton = self.getControlElement(PanelControlElementType.MENU_CLEAR_BUTTON); - clearButton.onclick = (function() { - return function() { - return self.getMap().clearDbOverlays(); + 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().then(null, GuiConnector.alert); }; - })(); + refreshCommentButton.onclick = (function () { + return function () { + self.getMap().refreshComments(); + 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; - }; + var clearButton = self.getControlElement(PanelControlElementType.MENU_CLEAR_BUTTON); + clearButton.onclick = (function () { + return function () { + return self.getMap().clearDbOverlays(); + }; })(); - showOverviewButton.style.display = ""; - } - if (ServerConnector.getSessionData().getShowComments()) { - self.getControlElement(PanelControlElementType.MENU_COMMENTS_CHECKBOX).checked = true; - return self.getMap().refreshComments(); - } else { - return Promise.resolve(); - } + if (project.getTopOverviewImage() !== undefined && project.getTopOverviewImage() !== null) { + self._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 self._overviewDialog.showOverview(); + }; + 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.setLegend = function(legend) { - this._legend = legend; +TopMenu.prototype.getLegend = function () { + return this._legend; }; -TopMenu.prototype.getLegend = function() { - return this._legend; +TopMenu.prototype.setLeftPanel = function (leftPanel) { + this._leftPanel = leftPanel; }; -TopMenu.prototype.setLeftPanel = function(leftPanel) { - this._leftPanel = leftPanel; +TopMenu.prototype.getLeftPanel = function () { + return this._leftPanel; }; -TopMenu.prototype.getLeftPanel = function() { - return this._leftPanel; +TopMenu.prototype.destroy = function () { + var self = this; + if (self._overviewDialog !== undefined) { + self._overviewDialog.destroy(); + } + return Promise.resolve(); }; module.exports = TopMenu; \ No newline at end of file diff --git a/frontend-js/src/main/js/map/CustomMap.js b/frontend-js/src/main/js/map/CustomMap.js index 9d55d00fe139b738143d44e2d285dce0ffa644cc..5af13d335afb2a66633d4798115019ee5367bd5c 100644 --- a/frontend-js/src/main/js/map/CustomMap.js +++ b/frontend-js/src/main/js/map/CustomMap.js @@ -1238,6 +1238,10 @@ CustomMap.prototype.destroy = function () { if (commentDialog !== undefined) { commentDialog.destroy(); } + var submaps = self.getSubmaps(); + for (var i=0;i<submaps.length;i++) { + submaps[i].destroy(); + } }; CustomMap.prototype.getVisibleDataOverlays = function () { diff --git a/frontend-js/src/main/js/map/Submap.js b/frontend-js/src/main/js/map/Submap.js index ea36bbea10d201196e5516b7b2abf9a66e7d5607..4ce6afb62c60fe25caa4a6720cf75e6316289f11 100644 --- a/frontend-js/src/main/js/map/Submap.js +++ b/frontend-js/src/main/js/map/Submap.js @@ -10,25 +10,25 @@ var TouchMap = require('./TouchMap'); /** * Constructor of a submap. Submaps are created on application start. But dialog * (popup window) is initialized on demand using init function. - * + * * @param customMap * parent CustomMap * @param id * identifier of the submap */ function Submap(customMap, model) { - this.setCustomMap(customMap); - - AbstractCustomMap.call(this, model, new CustomMapOptions({ - element : customMap.getGoogleMap().getDiv(), - markerOptimization : customMap.isMarkerOptimization(), - bigLogo : customMap.isBigLogo(), - customTouchInterface : customMap.isCustomTouchInterface(), - project : null, - debug : customMap.isDebug() - })); - - this.initialized = false; + this.setCustomMap(customMap); + + AbstractCustomMap.call(this, model, new CustomMapOptions({ + element: customMap.getGoogleMap().getDiv(), + markerOptimization: customMap.isMarkerOptimization(), + bigLogo: customMap.isBigLogo(), + customTouchInterface: customMap.isCustomTouchInterface(), + project: null, + debug: customMap.isDebug() + })); + + this.initialized = false; } // implementation of object inheritance @@ -38,100 +38,107 @@ Submap.prototype.constructor = Submap; /** * This method initializes submap with gui component. Before this point submap * is created and contains data, but cannot be visualized in the broswer. - * + * * @param htmlTag * html div tag where google map should be placed * @param jsVar * javascript component of primefaces popup dialog where submap will be * visualized */ -Submap.prototype.open = function(htmlTag) { - var self = this; +Submap.prototype.open = function (htmlTag) { + var self = this; - if (!this.initialized) { - self.htmlTag = htmlTag; + if (!this.initialized) { + self.htmlTag = htmlTag; - var mapOptions = self.creatMapOptions(self.getLayouts().length); + var mapOptions = self.creatMapOptions(self.getLayouts().length); - var contentDiv = document.createElement("div"); - contentDiv.setAttribute("name", "submap-div-" + self.getId()); - contentDiv.style.width = "100%"; - contentDiv.style.height = "100%"; - htmlTag.appendChild(contentDiv); + var contentDiv = document.createElement("div"); + contentDiv.setAttribute("name", "submap-div-" + self.getId()); + contentDiv.style.width = "100%"; + contentDiv.style.height = "100%"; + htmlTag.appendChild(contentDiv); - var mapDiv = document.createElement("div"); - mapDiv.style.width = "100%"; - mapDiv.style.height = "100%"; - contentDiv.appendChild(mapDiv); + var mapDiv = document.createElement("div"); + mapDiv.style.width = "100%"; + mapDiv.style.height = "100%"; + contentDiv.appendChild(mapDiv); - $(self.htmlTag).dialog({ - title : self.getModel().getName(), - width : Math.floor(window.innerWidth * 2 / 3), - height : Math.floor(window.innerHeight * 2 / 3), - position : { - my : "center", - at : "center", - of : $(self.getTopMap().getElement()), - }, - }); + $(self.htmlTag).dialog({ + title: self.getModel().getName(), + width: Math.floor(window.innerWidth * 2 / 3), + height: Math.floor(window.innerHeight * 2 / 3), + position: { + my: "center", + at: "center", + of: $(self.getTopMap().getElement()), + }, + }); - $(self.htmlTag).dialog("open"); + $(self.htmlTag).dialog("open"); - self.setGoogleMap(new google.maps.Map(mapDiv, mapOptions)); - self._createMapChangedCallbacks(); + self.setGoogleMap(new google.maps.Map(mapDiv, mapOptions)); + self._createMapChangedCallbacks(); - $(self.htmlTag).bind("resize", function() { - google.maps.event.trigger(self.getGoogleMap(), 'resize'); - }); + $(self.htmlTag).bind("resize", function () { + google.maps.event.trigger(self.getGoogleMap(), 'resize'); + }); - google.maps.event.trigger(self.getGoogleMap(), 'resize'); + google.maps.event.trigger(self.getGoogleMap(), 'resize'); - if (self.isCustomTouchInterface()) { - self._touchInterface = new TouchMap(self); - } + if (self.isCustomTouchInterface()) { + self._touchInterface = new TouchMap(self); + } + + self.setupLayouts(); - self.setupLayouts(); + self.registerMapClickEvents(); - self.registerMapClickEvents(); + var centerPoint = self.getModel().getCenterLatLng(); + self.getGoogleMap().setCenter(centerPoint); - var centerPoint = self.getModel().getCenterLatLng(); - self.getGoogleMap().setCenter(centerPoint); + var sessionData = ServerConnector.getSessionData(this.getProject()); + // and now send the zoom level to the client side + google.maps.event.addListener(self.getGoogleMap(), 'zoom_changed', function () { + sessionData.setZoomLevel(self.getModel(), self.getGoogleMap().getZoom()); + }); - var sessionData = ServerConnector.getSessionData(this.getProject()); - // and now send the zoom level to the client side - google.maps.event.addListener(self.getGoogleMap(), 'zoom_changed', function() { - sessionData.setZoomLevel(self.getModel(), self.getGoogleMap().getZoom()); - }); + sessionData.setZoomLevel(self.getModel(), self.getGoogleMap().getZoom()); - sessionData.setZoomLevel(self.getModel(), self.getGoogleMap().getZoom()); + self.initialized = true; + } else { + $(self.htmlTag).dialog("open"); + } - self.initialized = true; - } else { - $(self.htmlTag).dialog("open"); - } +}; +Submap.prototype.openDataOverlay = function (identifier) { + if (this.initialized) { + this.getGoogleMap().setMapTypeId(identifier.toString()); + } }; -Submap.prototype.openDataOverlay = function(identifier) { - if (this.initialized) { - this.getGoogleMap().setMapTypeId(identifier.toString()); - } +Submap.prototype.getTopMap = function () { + return this.getCustomMap(); }; -Submap.prototype.getTopMap = function() { - return this.getCustomMap(); +Submap.prototype.getCustomMap = function () { + return this._customMap; }; -Submap.prototype.getCustomMap = function() { - return this._customMap; +Submap.prototype.setCustomMap = function (customMap) { + this._customMap = customMap; }; -Submap.prototype.setCustomMap = function(customMap) { - this._customMap = customMap; +Submap.prototype.getProject = function () { + return this.getCustomMap().getProject(); }; -Submap.prototype.getProject = function() { - return this.getCustomMap().getProject(); +Submap.prototype.destroy = function () { + var self = this; + if (self.initialized) { + $(self.htmlTag).dialog("destroy"); + } }; module.exports = Submap; diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js index d6aa160a57870ea6a73ad7f9b3f3ecc156e7affc..85dea4e3fdc7f81d48e0345674187834447a60a0 100644 --- a/frontend-js/src/main/js/minerva.js +++ b/frontend-js/src/main/js/minerva.js @@ -29,628 +29,631 @@ var logger = require('./logger'); var customMap, leftPanel, topMenu, legend, mapContextMenu, selectionContextMenu; function processUrlGetParams(params) { - var project = params.getProject(); - var sessionData = ServerConnector.getSessionData(project); - - var modelId = project.getModel().getId(); - if (GuiConnector.getParams["submap"] !== undefined) { - modelId = parseInt(GuiConnector.getParams["submap"]); - } - - var model = project.getModel().getSubmodelById(modelId); - - if (GuiConnector.getParams["x"] !== undefined && GuiConnector.getParams["y"] !== undefined) { - var point = new google.maps.Point(GuiConnector.getParams["x"], GuiConnector.getParams["y"]); - sessionData.setCenter(model, point); - } - if (GuiConnector.getParams["zoom"] !== undefined) { - sessionData.setZoomLevel(model, GuiConnector.getParams["zoom"]); - } - - if (GuiConnector.getParams["comments"] === "on") { - sessionData.setShowComments(true); - } - if (GuiConnector.getParams["search"] !== undefined) { - var query = SearchDbOverlay.prototype.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_QUERY, - GuiConnector.getParams["search"]); - sessionData.setSearchQuery(query); - } + var project = params.getProject(); + var sessionData = ServerConnector.getSessionData(project); + + var modelId = project.getModel().getId(); + if (GuiConnector.getParams["submap"] !== undefined) { + modelId = parseInt(GuiConnector.getParams["submap"]); + } + + var model = project.getModel().getSubmodelById(modelId); + + if (GuiConnector.getParams["x"] !== undefined && GuiConnector.getParams["y"] !== undefined) { + var point = new google.maps.Point(GuiConnector.getParams["x"], GuiConnector.getParams["y"]); + sessionData.setCenter(model, point); + } + if (GuiConnector.getParams["zoom"] !== undefined) { + sessionData.setZoomLevel(model, GuiConnector.getParams["zoom"]); + } + + if (GuiConnector.getParams["comments"] === "on") { + sessionData.setShowComments(true); + } + if (GuiConnector.getParams["search"] !== undefined) { + var query = SearchDbOverlay.prototype.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_QUERY, + GuiConnector.getParams["search"]); + sessionData.setSearchQuery(query); + } } function insertGoogleAnalyticsCode() { - return ServerConnector.getConfigurationParam(ConfigurationType.GOOGLE_ANALYTICS_IDENTIFIER).then( - function(identifier) { - if (identifier === "" || identifier === undefined || identifier === null) { - return; - } else { - global._gaq = global._gaq || []; - global._gaq.push([ '_setAccount', identifier ]); - global._gaq.push([ '_trackPageview' ]); - - (function() { - var ga = document.createElement('script'); - ga.type = 'text/javascript'; - ga.async = true; - ga.src = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') - + '.google-analytics.com/ga.js'; - var s = document.getElementsByTagName('script')[0]; - s.parentNode.insertBefore(ga, s); - })(); - return; - } - }); + return ServerConnector.getConfigurationParam(ConfigurationType.GOOGLE_ANALYTICS_IDENTIFIER).then( + function (identifier) { + if (identifier === "" || identifier === undefined || identifier === null) { + return; + } else { + global._gaq = global._gaq || []; + global._gaq.push(['_setAccount', identifier]); + global._gaq.push(['_trackPageview']); + + (function () { + var ga = document.createElement('script'); + ga.type = 'text/javascript'; + ga.async = true; + ga.src = ('https:' === document.location.protocol ? 'https://ssl' : 'http://www') + + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; + s.parentNode.insertBefore(ga, s); + })(); + return; + } + }); } + function createDivStructure(element) { - var leftPanelDiv = functions.createElement({ - type : "div", - name : "leftPanelDiv", - className : "minerva-left-panel", - }); - element.appendChild(leftPanelDiv); - var rightPanelDiv = functions.createElement({ - type : "div", - style : "display: table-cell;height:100%;width:100%;", - }); - element.appendChild(rightPanelDiv); - - var rightPanelContainerDiv = functions.createElement({ - type : "div", - style : "height:100%;width:100%;position:relative", - }); - rightPanelDiv.appendChild(rightPanelContainerDiv); - - var menuDiv = functions.createElement({ - type : "div", - name : "menuDiv", - className : "menuBelt", - }); - rightPanelContainerDiv.appendChild(menuDiv); - - var mapDiv = functions.createElement({ - type : "div", - name : "mapDiv", - className : "mapClass", - }); - rightPanelContainerDiv.appendChild(mapDiv); - - var legendDiv = functions.createElement({ - type : "div", - name : "legendDiv", - className : "minerva-legend", - style : "display:none", - }); - rightPanelContainerDiv.appendChild(legendDiv); - - var contextMenu = functions.createElement({ - type : "ul", - name : "contextMenu", - }); - element.appendChild(contextMenu); - var selectionContextMenu = functions.createElement({ - type : "ul", - name : "selectionContextMenu", - }); - element.appendChild(selectionContextMenu); + var leftPanelDiv = functions.createElement({ + type: "div", + name: "leftPanelDiv", + className: "minerva-left-panel", + }); + element.appendChild(leftPanelDiv); + var rightPanelDiv = functions.createElement({ + type: "div", + style: "display: table-cell;height:100%;width:100%;", + }); + element.appendChild(rightPanelDiv); + + var rightPanelContainerDiv = functions.createElement({ + type: "div", + style: "height:100%;width:100%;position:relative", + }); + rightPanelDiv.appendChild(rightPanelContainerDiv); + + var menuDiv = functions.createElement({ + type: "div", + name: "menuDiv", + className: "menuBelt", + }); + rightPanelContainerDiv.appendChild(menuDiv); + + var mapDiv = functions.createElement({ + type: "div", + name: "mapDiv", + className: "mapClass", + }); + rightPanelContainerDiv.appendChild(mapDiv); + + var legendDiv = functions.createElement({ + type: "div", + name: "legendDiv", + className: "minerva-legend", + style: "display:none", + }); + rightPanelContainerDiv.appendChild(legendDiv); + + var contextMenu = functions.createElement({ + type: "ul", + name: "contextMenu", + }); + element.appendChild(contextMenu); + var selectionContextMenu = functions.createElement({ + type: "ul", + name: "selectionContextMenu", + }); + element.appendChild(selectionContextMenu); } function getFullElements(customMap, identifiedElements) { - var result = []; - return Promise.each( - identifiedElements, - function(item) { - if (item.length === undefined) { - return customMap.getSubmapById(item.getModelId()).getModel().getByIdentifiedElement(item, true).then( - function(fullElement) { - result.push(fullElement); - }); - } else { - return getFullElements(customMap, item).then(function(resultRow) { - result.push(resultRow); - }); - } - }).then(function() { - return result; - }); + var result = []; + return Promise.each( + identifiedElements, + function (item) { + if (item.length === undefined) { + return customMap.getSubmapById(item.getModelId()).getModel().getByIdentifiedElement(item, true).then( + function (fullElement) { + result.push(fullElement); + }); + } else { + return getFullElements(customMap, item).then(function (resultRow) { + result.push(resultRow); + }); + } + }).then(function () { + return result; + }); } + function getOverlayByName(customMap, dbOverlayName) { - var dbOverlay = customMap.getOverlayByName(dbOverlayName); - if (dbOverlay === null) { - var validOverlays = ""; - var overlays = customMap.getDbOverlays(); - for ( var overlay in overlays) { - if (overlays.hasOwnProperty(overlay)) { - validOverlays += overlay.getName() + ", "; - } + var dbOverlay = customMap.getOverlayByName(dbOverlayName); + if (dbOverlay === null) { + var validOverlays = ""; + var overlays = customMap.getDbOverlays(); + for (var overlay in overlays) { + if (overlays.hasOwnProperty(overlay)) { + validOverlays += overlay.getName() + ", "; + } + } + throw new Error("Invalid DbOverlay: " + dbOverlayName + ". Valid DbOverlays: " + validOverlays); + } else { + return dbOverlay; } - throw new Error("Invalid DbOverlay: " + dbOverlayName + ". Valid DbOverlays: " + validOverlays); - } else { - return dbOverlay; - } } function createMarkerElements(options) { - var params = options.params; - var filteredType = options.filteredType; - var isDefault = options.isDefault; - - var markerElements = []; - if (params.length === undefined) { - params = [ params ]; - } - for (var i = 0; i < params.length; i++) { - var elementParam = params[i]; - if (elementParam.type === undefined && isDefault) { - markerElements.push({ - element : elementParam.element, - }); - } else if (elementParam.type === filteredType) { - markerElements.push({ - element : elementParam.element, - options : elementParam.options, - }); - } else if (elementParam.type !== "ICON" && elementParam.type !== "SURFACE") { - throw new Error("Unknown type:" + elementParam.type); + var params = options.params; + var filteredType = options.filteredType; + var isDefault = options.isDefault; + + var markerElements = []; + if (params.length === undefined) { + params = [params]; } - } - return markerElements; + for (var i = 0; i < params.length; i++) { + var elementParam = params[i]; + if (elementParam.type === undefined && isDefault) { + markerElements.push({ + element: elementParam.element, + }); + } else if (elementParam.type === filteredType) { + markerElements.push({ + element: elementParam.element, + options: elementParam.options, + }); + } else if (elementParam.type !== "ICON" && elementParam.type !== "SURFACE") { + throw new Error("Unknown type:" + elementParam.type); + } + } + return markerElements; } function getElements(elementIdentifiers, customMap) { - var identifiedElements = []; + var identifiedElements = []; - var elementsByModelId = []; - for (var i = 0; i < elementIdentifiers.length; i++) { - var identifiedElement = new IdentifiedElement(elementIdentifiers[i]); - if (elementsByModelId[identifiedElement.getModelId()] === undefined) { - elementsByModelId[identifiedElement.getModelId()] = []; - } - elementsByModelId[identifiedElement.getModelId()].push(identifiedElement); - identifiedElements.push(identifiedElement); - } - - var modelScopePromises = []; - for ( var key in elementsByModelId) { - if (elementsByModelId.hasOwnProperty(key)) { - var model = customMap.getModel().getSubmodelById(parseInt(key)); - modelScopePromises.push(model.getByIdentifiedElements(elementsByModelId[key], true)); + var elementsByModelId = []; + for (var i = 0; i < elementIdentifiers.length; i++) { + var identifiedElement = new IdentifiedElement(elementIdentifiers[i]); + if (elementsByModelId[identifiedElement.getModelId()] === undefined) { + elementsByModelId[identifiedElement.getModelId()] = []; + } + elementsByModelId[identifiedElement.getModelId()].push(identifiedElement); + identifiedElements.push(identifiedElement); } - } - // first promise fetch all data - return Promise.all(modelScopePromises).then(function() { - // this promise return result in the right order - var elementPromises = []; - for (var i = 0; i < identifiedElements.length; i++) { - var element = identifiedElements[i]; - var model = customMap.getModel().getSubmodelById(element.getModelId()); - var promise = model.getByIdentifiedElement(element, true); - elementPromises.push(promise); + + var modelScopePromises = []; + for (var key in elementsByModelId) { + if (elementsByModelId.hasOwnProperty(key)) { + var model = customMap.getModel().getSubmodelById(parseInt(key)); + modelScopePromises.push(model.getByIdentifiedElements(elementsByModelId[key], true)); + } } - return Promise.all(elementPromises); - }); + // first promise fetch all data + return Promise.all(modelScopePromises).then(function () { + // this promise return result in the right order + var elementPromises = []; + for (var i = 0; i < identifiedElements.length; i++) { + var element = identifiedElements[i]; + var model = customMap.getModel().getSubmodelById(element.getModelId()); + var promise = model.getByIdentifiedElement(element, true); + elementPromises.push(promise); + } + return Promise.all(elementPromises); + }); } function getReactionsForElements(elementIdentifiers, customMap) { - var elementsByModelId = []; - for (var i = 0; i < elementIdentifiers.length; i++) { - var identifiedElement = new IdentifiedElement(elementIdentifiers[i]); - if (elementsByModelId[identifiedElement.getModelId()] === undefined) { - elementsByModelId[identifiedElement.getModelId()] = []; - } - elementsByModelId[identifiedElement.getModelId()].push(identifiedElement); - } - - var modelScopePromises = []; - for ( var key in elementsByModelId) { - if (elementsByModelId.hasOwnProperty(key)) { - var model = customMap.getModel().getSubmodelById(parseInt(key)); - var promise = model.getReactionsForElements(elementsByModelId[key], true); - modelScopePromises.push(promise); + var elementsByModelId = []; + for (var i = 0; i < elementIdentifiers.length; i++) { + var identifiedElement = new IdentifiedElement(elementIdentifiers[i]); + if (elementsByModelId[identifiedElement.getModelId()] === undefined) { + elementsByModelId[identifiedElement.getModelId()] = []; + } + elementsByModelId[identifiedElement.getModelId()].push(identifiedElement); } - } - // first promise fetch all data - return Promise.all(modelScopePromises).then(function(reactionResult) { - var result = []; - for (var i = 0; i < reactionResult.length; i++) { - result = result.concat(reactionResult[i]); + var modelScopePromises = []; + for (var key in elementsByModelId) { + if (elementsByModelId.hasOwnProperty(key)) { + var model = customMap.getModel().getSubmodelById(parseInt(key)); + var promise = model.getReactionsForElements(elementsByModelId[key], true); + modelScopePromises.push(promise); + } } - return result; - }); -} -function createResult(customMap) { - return { - getVisibleDataOverlays : function() { - return customMap.getVisibleDataOverlays(); - }, - addListener : function(param) { - var dbOverlay = getOverlayByName(customMap, param.dbOverlayName); - dbOverlay.addListener(param.type, function(e) { - return getFullElements(customMap, e.arg.identifiedElements).then(function(result) { - return param.callback(result); - }); - }); - }, - getHighlightedBioEntities : function(dbOverlayName) { - if (dbOverlayName === undefined) { - dbOverlayName = "user"; - } - var dbOverlay = getOverlayByName(customMap, dbOverlayName); - var identifiedElements; - return dbOverlay.getIdentifiedElements().then(function(result) { - identifiedElements = result; - return getFullElements(customMap, identifiedElements); - }).then(function(fullElements) { + // first promise fetch all data + return Promise.all(modelScopePromises).then(function (reactionResult) { var result = []; - for (var i = 0; i < identifiedElements.length; i++) { - var type; - if (identifiedElements[i].getIcon() !== undefined) { - type = "ICON"; - } else { - type = "SURFACE"; - } - var row = { - element : fullElements[i], - type : type, - options : { - icon : identifiedElements[i].getIcon(), - color : identifiedElements[i].getColor(), - opacity : identifiedElements[i].getOpacity(), - } - }; - result.push(row); - } - return result; - }); - }, - getProject : function() { - return customMap.getProject(); - }, - getConfiguration : function() { - return ServerConnector.getConfiguration(); - }, - getBioEntityById : function(param) { - var isArray = true; - if (param.length === undefined) { - param = [ param ]; - isArray = false; - } - return getElements(param, customMap).then(function(result) { - if (!isArray) { - return result[0]; - } else { - return result; - } - }); - }, - getAllBioEntities : function() { - var models = [ customMap.getModel() ]; - var result = []; - for (var i = 0; i < customMap.getModel().getSubmodels().length; i++) { - models.push(customMap.getModel().getSubmodels()[i]); - } - var promises = []; - for (var i = 0; i < models.length; i++) { - promises.push(models[i].getAliases({ - type : customMap.getConfiguration().getElementTypes(), - complete : true, - })); - } - return Promise.all(promises).then(function(aliasesByModel) { - var promises = []; - for (var i = 0; i < models.length; i++) { - promises.push(models[i].getReactionsForElements(aliasesByModel[i], true)); - for (var j = 0; j < aliasesByModel[i].length; j++) { - result.push(aliasesByModel[i][j]); - } - } - return Promise.all(promises); - }).then(function(reactionsByModel) { - for (var i = 0; i < models.length; i++) { - for (var j = 0; j < reactionsByModel[i].length; j++) { - result.push(reactionsByModel[i][j]); - } + for (var i = 0; i < reactionResult.length; i++) { + result = result.concat(reactionResult[i]); } return result; - }); - }, - getReactionsWithElement : function(param) { - if (param.length === undefined) { - param = [ param ]; - } - return getReactionsForElements(param, customMap); - }, - destroy : function() { - return leftPanel.destroy().then(function() { - customMap.destroy(); - }); - }, - showBioEntity : function(params) { - var iconElements = createMarkerElements({ - params : params, - filteredType : "ICON", - isDefault : true - }); - var surfaceElements = createMarkerElements({ - params : params, - filteredType : "SURFACE", - isDefault : false - }); - return customMap.getOverlayByName("user").addMarker(iconElements).then(function() { - return customMap.getOverlayByName("user").addSurface(surfaceElements); - }); - }, - hideBioEntity : function(params) { - var iconElements = createMarkerElements({ - params : params, - filteredType : "ICON", - isDefault : true - }); - var surfaceElements = createMarkerElements({ - params : params, - filteredType : "SURFACE", - isDefault : false - }); - return customMap.getOverlayByName("user").removeMarker(iconElements).then(function() { - return customMap.getOverlayByName("user").removeSurface(surfaceElements); - }); - }, - setCenter : function(params) { - var submap = customMap.getSubmapById(params.modelId); - if (submap === null) { - throw new Error("Unknown modelId: " + params.modelId); - } - return submap.setCenter(new google.maps.Point(params.x, params.y)); - }, - fitBounds : function(params) { - var submap = customMap.getSubmapById(params.modelId); - if (submap === null) { - throw new Error("Unknown modelId: " + params.modelId); - } - var p1 = new google.maps.Point(params.x1, params.y1); - var p2 = new google.maps.Point(params.x2, params.y2); - var latLng1 = submap.fromPointToLatLng(p1); - var latLng2 = submap.fromPointToLatLng(p2); - var bounds = new google.maps.LatLngBounds(); - bounds.extend(latLng1); - bounds.extend(latLng2); - return submap.getGoogleMap().fitBounds(bounds); - }, - setZoom : function(params) { - var submap = customMap.getSubmapById(params.modelId); - if (submap === null) { - throw new Error("Unknown modelId: " + params.modelId); - } - return submap.setZoom(params.zoom); - }, - }; + }); +} + +function createResult(customMap) { + return { + getVisibleDataOverlays: function () { + return customMap.getVisibleDataOverlays(); + }, + addListener: function (param) { + var dbOverlay = getOverlayByName(customMap, param.dbOverlayName); + dbOverlay.addListener(param.type, function (e) { + return getFullElements(customMap, e.arg.identifiedElements).then(function (result) { + return param.callback(result); + }); + }); + }, + getHighlightedBioEntities: function (dbOverlayName) { + if (dbOverlayName === undefined) { + dbOverlayName = "user"; + } + var dbOverlay = getOverlayByName(customMap, dbOverlayName); + var identifiedElements; + return dbOverlay.getIdentifiedElements().then(function (result) { + identifiedElements = result; + return getFullElements(customMap, identifiedElements); + }).then(function (fullElements) { + var result = []; + for (var i = 0; i < identifiedElements.length; i++) { + var type; + if (identifiedElements[i].getIcon() !== undefined) { + type = "ICON"; + } else { + type = "SURFACE"; + } + var row = { + element: fullElements[i], + type: type, + options: { + icon: identifiedElements[i].getIcon(), + color: identifiedElements[i].getColor(), + opacity: identifiedElements[i].getOpacity(), + } + }; + result.push(row); + } + return result; + }); + }, + getProject: function () { + return customMap.getProject(); + }, + getConfiguration: function () { + return ServerConnector.getConfiguration(); + }, + getBioEntityById: function (param) { + var isArray = true; + if (param.length === undefined) { + param = [param]; + isArray = false; + } + return getElements(param, customMap).then(function (result) { + if (!isArray) { + return result[0]; + } else { + return result; + } + }); + }, + getAllBioEntities: function () { + var models = [customMap.getModel()]; + var result = []; + for (var i = 0; i < customMap.getModel().getSubmodels().length; i++) { + models.push(customMap.getModel().getSubmodels()[i]); + } + var promises = []; + for (var i = 0; i < models.length; i++) { + promises.push(models[i].getAliases({ + type: customMap.getConfiguration().getElementTypes(), + complete: true, + })); + } + return Promise.all(promises).then(function (aliasesByModel) { + var promises = []; + for (var i = 0; i < models.length; i++) { + promises.push(models[i].getReactionsForElements(aliasesByModel[i], true)); + for (var j = 0; j < aliasesByModel[i].length; j++) { + result.push(aliasesByModel[i][j]); + } + } + return Promise.all(promises); + }).then(function (reactionsByModel) { + for (var i = 0; i < models.length; i++) { + for (var j = 0; j < reactionsByModel[i].length; j++) { + result.push(reactionsByModel[i][j]); + } + } + return result; + }); + }, + getReactionsWithElement: function (param) { + if (param.length === undefined) { + param = [param]; + } + return getReactionsForElements(param, customMap); + }, + destroy: function () { + return leftPanel.destroy().then(function () { + customMap.destroy(); + return topMenu.destroy(); + }); + }, + showBioEntity: function (params) { + var iconElements = createMarkerElements({ + params: params, + filteredType: "ICON", + isDefault: true + }); + var surfaceElements = createMarkerElements({ + params: params, + filteredType: "SURFACE", + isDefault: false + }); + return customMap.getOverlayByName("user").addMarker(iconElements).then(function () { + return customMap.getOverlayByName("user").addSurface(surfaceElements); + }); + }, + hideBioEntity: function (params) { + var iconElements = createMarkerElements({ + params: params, + filteredType: "ICON", + isDefault: true + }); + var surfaceElements = createMarkerElements({ + params: params, + filteredType: "SURFACE", + isDefault: false + }); + return customMap.getOverlayByName("user").removeMarker(iconElements).then(function () { + return customMap.getOverlayByName("user").removeSurface(surfaceElements); + }); + }, + setCenter: function (params) { + var submap = customMap.getSubmapById(params.modelId); + if (submap === null) { + throw new Error("Unknown modelId: " + params.modelId); + } + return submap.setCenter(new google.maps.Point(params.x, params.y)); + }, + fitBounds: function (params) { + var submap = customMap.getSubmapById(params.modelId); + if (submap === null) { + throw new Error("Unknown modelId: " + params.modelId); + } + var p1 = new google.maps.Point(params.x1, params.y1); + var p2 = new google.maps.Point(params.x2, params.y2); + var latLng1 = submap.fromPointToLatLng(p1); + var latLng2 = submap.fromPointToLatLng(p2); + var bounds = new google.maps.LatLngBounds(); + bounds.extend(latLng1); + bounds.extend(latLng2); + return submap.getGoogleMap().fitBounds(bounds); + }, + setZoom: function (params) { + var submap = customMap.getSubmapById(params.modelId); + if (submap === null) { + throw new Error("Unknown modelId: " + params.modelId); + } + return submap.setZoom(params.zoom); + }, + }; } function initGlobals(params) { - if (global.GuiConnector === undefined) { - global.GuiConnector = OriginalGuiConnector; - global.ServerConnector = OriginalServerConnector; - if (params.isDebug()) { - logger.setLevel("debug"); + if (global.GuiConnector === undefined) { + global.GuiConnector = OriginalGuiConnector; + global.ServerConnector = OriginalServerConnector; + if (params.isDebug()) { + logger.setLevel("debug"); + } else { + logger.setLevel("info"); + } + GuiConnector.init(); + if (GuiConnector.getParams['debug'] !== undefined) { + logger.setLevel("debug"); + } } else { - logger.setLevel("info"); - } - GuiConnector.init(); - if (GuiConnector.getParams['debug'] !== undefined) { - logger.setLevel("debug"); + logger.warn("global GuiConnector found"); } - } else { - logger.warn("global GuiConnector found"); - } } function verifyBrowser() { - var browser = functions.browser; - if (browser.name === "IE") { - if (browser.version <= 8 || browser.compatibilityMode) { - var message = "This webpage works only with Internet Explorer version 9 or greater.\n" - + "If you have Internet Explorer version 9 or greater and still see this message, please, turn the 'Compatibility modeoff:\n" - + "Open Internet Explorer and press the Alt key on your keyboard.\n" - + "Select 'Tools' menu item. \n" - + "Select the 'Compatibility View' settings option. \n" - + "Make sure the 'Display all websites in Compatibility View' check box is unchecked and that the 'Compatibility View; list of websites is cleared.\n" - + "\n" + "Alternatively, please, use other browsers: Chrome, Firefox or Safari."; - GuiConnector.alert(message); + var browser = functions.browser; + if (browser.name === "IE") { + if (browser.version <= 8 || browser.compatibilityMode) { + var message = "This webpage works only with Internet Explorer version 9 or greater.\n" + + "If you have Internet Explorer version 9 or greater and still see this message, please, turn the 'Compatibility modeoff:\n" + + "Open Internet Explorer and press the Alt key on your keyboard.\n" + + "Select 'Tools' menu item. \n" + + "Select the 'Compatibility View' settings option. \n" + + "Make sure the 'Display all websites in Compatibility View' check box is unchecked and that the 'Compatibility View; list of websites is cleared.\n" + + "\n" + "Alternatively, please, use other browsers: Chrome, Firefox or Safari."; + GuiConnector.alert(message); + } } - } } function getProject(params) { - if (params.getProject() !== undefined) { - return Promise.resolve(params.getProject()); - } else { - return ServerConnector.getProject(params.getProjectId()); - } + if (params.getProject() !== undefined) { + return Promise.resolve(params.getProject()); + } else { + return ServerConnector.getProject(params.getProjectId()); + } } function modifyParamsForTouchInterface(params) { - if (params.markerOptimization === undefined && params.bigLogo === undefined - && params.customTouchInterface === undefined) { - var windowsTouchInterface = ((navigator.appVersion.indexOf("Win") > -1) && ('ontouchstart' in document.documentElement)); - params.markerOptimization = !windowsTouchInterface; - params.bigLogo = windowsTouchInterface; - params.customTouchInterface = windowsTouchInterface; - } - return params; + if (params.markerOptimization === undefined && params.bigLogo === undefined + && params.customTouchInterface === undefined) { + var windowsTouchInterface = ((navigator.appVersion.indexOf("Win") > -1) && ('ontouchstart' in document.documentElement)); + params.markerOptimization = !windowsTouchInterface; + params.bigLogo = windowsTouchInterface; + params.customTouchInterface = windowsTouchInterface; + } + return params; } function create(params) { - params = modifyParamsForTouchInterface(params); - if (!(params instanceof CustomMapOptions)) { - params = new CustomMapOptions(params); - } - initGlobals(params); - params.getElement().style.display = "table"; - params.getElement().innerHTML = "<div style='vertical-align:middle;display:table-cell;text-align: center'>" - + "<img src='resources/images/icons/ajax-loader.gif'/>" + "</div>"; - - // make sure that we are logged in - return ServerConnector.getToken().then(function() { - return ServerConnector.getConfiguration(); - }).then(function(configuration) { - params.setConfiguration(configuration); - return getProject(params); - }).then(function(project) { - if (project === null) { - var message = "Project with given id doesn't exist."; - message += "<p>Please go to <a href='" + ServerConnector.getServerBaseUrl() + "'>default map</a>"; - return Promise.reject(new Error(message)); + params = modifyParamsForTouchInterface(params); + if (!(params instanceof CustomMapOptions)) { + params = new CustomMapOptions(params); } - params.setProject(project); - var element = params.getElement(); + initGlobals(params); + params.getElement().style.display = "table"; + params.getElement().innerHTML = "<div style='vertical-align:middle;display:table-cell;text-align: center'>" + + "<img src='resources/images/icons/ajax-loader.gif'/>" + "</div>"; + + // make sure that we are logged in + return ServerConnector.getToken().then(function () { + return ServerConnector.getConfiguration(); + }).then(function (configuration) { + params.setConfiguration(configuration); + return getProject(params); + }).then(function (project) { + if (project === null) { + var message = "Project with given id doesn't exist."; + message += "<p>Please go to <a href='" + ServerConnector.getServerBaseUrl() + "'>default map</a>"; + return Promise.reject(new Error(message)); + } + params.setProject(project); + var element = params.getElement(); - verifyBrowser(); + verifyBrowser(); - processUrlGetParams(params); + processUrlGetParams(params); - params.getElement().innerHTML = ""; - createDivStructure(element); - params.setElement(functions.getElementByName(element, "mapDiv")); + params.getElement().innerHTML = ""; + createDivStructure(element); + params.setElement(functions.getElementByName(element, "mapDiv")); - customMap = new CustomMap(params); + customMap = new CustomMap(params); - new DbOverlayCollection({ - map : customMap - }); + new DbOverlayCollection({ + map: customMap + }); - leftPanel = new LeftPanel({ - element : functions.getElementByName(element, "leftPanelDiv"), - customMap : customMap - }); + leftPanel = new LeftPanel({ + element: functions.getElementByName(element, "leftPanelDiv"), + customMap: customMap + }); - topMenu = new TopMenu({ - element : functions.getElementByName(element, "menuDiv"), - customMap : customMap - }); + topMenu = new TopMenu({ + element: functions.getElementByName(element, "menuDiv"), + customMap: customMap + }); - legend = new Legend({ - element : functions.getElementByName(element, "legendDiv"), - customMap : customMap - }); + legend = new Legend({ + element: functions.getElementByName(element, "legendDiv"), + customMap: customMap + }); - mapContextMenu = new MapContextMenu({ - element : functions.getElementByName(element, "contextMenu"), - customMap : customMap - }); - customMap.setContextMenu(mapContextMenu); + mapContextMenu = new MapContextMenu({ + element: functions.getElementByName(element, "contextMenu"), + customMap: customMap + }); + customMap.setContextMenu(mapContextMenu); - selectionContextMenu = new SelectionContextMenu({ - element : functions.getElementByName(element, "selectionContextMenu"), - customMap : customMap - }); - customMap.setSelectionContextMenu(selectionContextMenu); - - topMenu.setLegend(legend); - topMenu.setLeftPanel(leftPanel); - - return customMap.init(); - }).then(function() { - return insertGoogleAnalyticsCode(customMap); - }).then(function() { - return leftPanel.init(); - }).then(function() { - return legend.init(); - }).then(function() { - return topMenu.init(); - }).then(function() { - return selectionContextMenu.init(); - }).then(function() { - return mapContextMenu.init(); - }).then(function() { - if (GuiConnector.getParams["layout"] !== undefined) { - var layouts = params.getProject().getModel().getLayouts(); - for (var j = 0; j < layouts.length; j++) { - var layout = layouts[j]; - if (layout.getName() === GuiConnector.getParams["layout"]) { - return customMap.openDataOverlay(layout); + selectionContextMenu = new SelectionContextMenu({ + element: functions.getElementByName(element, "selectionContextMenu"), + customMap: customMap + }); + customMap.setSelectionContextMenu(selectionContextMenu); + + topMenu.setLegend(legend); + topMenu.setLeftPanel(leftPanel); + + return customMap.init(); + }).then(function () { + return insertGoogleAnalyticsCode(customMap); + }).then(function () { + return leftPanel.init(); + }).then(function () { + return legend.init(); + }).then(function () { + return topMenu.init(); + }).then(function () { + return selectionContextMenu.init(); + }).then(function () { + return mapContextMenu.init(); + }).then(function () { + if (GuiConnector.getParams["layout"] !== undefined) { + var layouts = params.getProject().getModel().getLayouts(); + for (var j = 0; j < layouts.length; j++) { + var layout = layouts[j]; + if (layout.getName() === GuiConnector.getParams["layout"]) { + return customMap.openDataOverlay(layout); + } + } } - } - } - }).then(function() { + }).then(function () { - var submapId = GuiConnector.getParams["submap"]; - if (submapId !== undefined) { - return customMap.openSubmap(submapId); - } - }).then(function() { - var result = createResult(customMap); + var submapId = GuiConnector.getParams["submap"]; + if (submapId !== undefined) { + return customMap.openSubmap(submapId); + } + }).then(function () { + var result = createResult(customMap); - if (params.isDebug()) { - result.leftPanel = leftPanel; - result.customMap = customMap; - } - return result; - }); + if (params.isDebug()) { + result.leftPanel = leftPanel; + result.customMap = customMap; + } + return result; + }); } function createExport(params) { - params = modifyParamsForTouchInterface(params); - if (!(params instanceof CustomMapOptions)) { - params = new CustomMapOptions(params); - } - initGlobals(params); - params.getElement().style.display = "table"; - params.getElement().innerHTML = "<div style='vertical-align:middle;display:table-cell;text-align: center'>" - + "<img src='resources/images/icons/ajax-loader.gif'/>" + "</div>"; - - var result; - // make sure that we are logged in - return ServerConnector.getToken().then(function() { - return ServerConnector.getConfiguration(); - }).then(function(configuration) { - params.setConfiguration(configuration); - return getProject(params); - }).then(function(project) { - params.setProject(project); - result = new Export(params); - return result.init(); - }).then(function() { - return result; - }); + params = modifyParamsForTouchInterface(params); + if (!(params instanceof CustomMapOptions)) { + params = new CustomMapOptions(params); + } + initGlobals(params); + params.getElement().style.display = "table"; + params.getElement().innerHTML = "<div style='vertical-align:middle;display:table-cell;text-align: center'>" + + "<img src='resources/images/icons/ajax-loader.gif'/>" + "</div>"; + + var result; + // make sure that we are logged in + return ServerConnector.getToken().then(function () { + return ServerConnector.getConfiguration(); + }).then(function (configuration) { + params.setConfiguration(configuration); + return getProject(params); + }).then(function (project) { + params.setProject(project); + result = new Export(params); + return result.init(); + }).then(function () { + return result; + }); } function createAdmin(params) { - params = modifyParamsForTouchInterface(params); - if (!(params instanceof CustomMapOptions)) { - params = new CustomMapOptions(params); - } - initGlobals(params); - params.getElement().style.display = "table"; - params.getElement().innerHTML = "<div style='vertical-align:middle;display:table-cell;text-align: center'>" - + "<img src='resources/images/icons/ajax-loader.gif'/>" + "</div>"; - - var result; - // make sure that we are logged in - return ServerConnector.getToken().then(function() { - return ServerConnector.getConfiguration(); - }).then(function(configuration) { - params.setConfiguration(configuration); - return getProject(params); - }).then(function(project) { - params.setProject(project); - result = new Admin(params); - return result.init(); - }).then(function() { - return result; - }); + params = modifyParamsForTouchInterface(params); + if (!(params instanceof CustomMapOptions)) { + params = new CustomMapOptions(params); + } + initGlobals(params); + params.getElement().style.display = "table"; + params.getElement().innerHTML = "<div style='vertical-align:middle;display:table-cell;text-align: center'>" + + "<img src='resources/images/icons/ajax-loader.gif'/>" + "</div>"; + + var result; + // make sure that we are logged in + return ServerConnector.getToken().then(function () { + return ServerConnector.getConfiguration(); + }).then(function (configuration) { + params.setConfiguration(configuration); + return getProject(params); + }).then(function (project) { + params.setProject(project); + result = new Admin(params); + return result.init(); + }).then(function () { + return result; + }); } var minerva = { - create : create, - createExport : createExport, - createAdmin: createAdmin, - ServerConnector : OriginalServerConnector, - GuiConnector : OriginalGuiConnector, - DualListbox : require('dual-listbox').DualListbox, + create: create, + createExport: createExport, + createAdmin: createAdmin, + ServerConnector: OriginalServerConnector, + GuiConnector: OriginalGuiConnector, + DualListbox: require('dual-listbox').DualListbox, }; module.exports = minerva; diff --git a/frontend-js/src/test/js/GuiConnector-mock.js b/frontend-js/src/test/js/GuiConnector-mock.js index 1297fdc3fa9d2fb7827e810c70776d154a6d3037..986dea4d0f3ac6fb6fca753b49b59ae9ae5ee07d 100644 --- a/frontend-js/src/test/js/GuiConnector-mock.js +++ b/frontend-js/src/test/js/GuiConnector-mock.js @@ -8,12 +8,23 @@ var OriginalGuiConnector = require('../../main/js/GuiConnector'); var GuiConnectorMock = OriginalGuiConnector; -GuiConnectorMock.alert = function(error) { - if (error instanceof Error) { - throw error; - } else { - throw new Error(error); - } +GuiConnectorMock.alert = function (error) { + if (error instanceof Error) { + throw error; + } else { + throw new Error(error); + } +}; + +GuiConnectorMock.showProcessing = function (message) { + if (message === undefined) { + message = ""; + } + logger.debug("[PROCESSING STARTED] " + message); +}; + +GuiConnectorMock.hideProcessing = function () { + logger.debug("[PROCESSING STOPPED]"); }; module.exports = GuiConnectorMock; diff --git a/frontend-js/src/test/js/gui/AddOverlayDialog-test.js b/frontend-js/src/test/js/gui/AddOverlayDialog-test.js index 4dae00c29dd138ecfa65297cb6ccb66cbf27d562..b9700d844df392ad345f93cc76c5bc4b49060e01 100644 --- a/frontend-js/src/test/js/gui/AddOverlayDialog-test.js +++ b/frontend-js/src/test/js/gui/AddOverlayDialog-test.js @@ -30,8 +30,9 @@ describe('AddOverlayDialog', function() { }); it('addOverlay', function() { + var dialog; return ServerConnector.getProject().then(function(project) { - var dialog = new AddOverlayDialog({ + dialog = new AddOverlayDialog({ element : testDiv, project : project, customMap : null diff --git a/frontend-js/src/test/js/gui/Panel-test.js b/frontend-js/src/test/js/gui/Panel-test.js index d17b2096c2980c8ed7ba495f3b52439192a509d6..bd7a34c78a18c6f6c1bf46b6a44272a9faf0fca6 100644 --- a/frontend-js/src/test/js/gui/Panel-test.js +++ b/frontend-js/src/test/js/gui/Panel-test.js @@ -10,26 +10,27 @@ var chai = require('chai'); var assert = chai.assert; var logger = require('../logger'); -describe('Panel', function() { +describe('Panel', function () { - it('openDialog', function() { - var map = helper.createCustomMap(); + it('openDialog', function () { + var map = helper.createCustomMap(); - var panel = new Panel({ - element : testDiv, - customMap : map - }); + var panel = new Panel({ + element: testDiv, + customMap: map + }); - var content = document.createElement("div"); - content.innerHTML = "some content"; + var content = document.createElement("div"); + content.innerHTML = "some content"; - var id = 1; - panel.openDialog(content, { - id : id - }); + var id = 1; + panel.openDialog(content, { + id: id + }); - assert.ok(panel.getDialogDiv(id).innerHTML.indexOf("some content") >= 0); + assert.ok(panel.getDialogDiv(id).innerHTML.indexOf("some content") >= 0); + panel.destroy(); - }); + }); }); diff --git a/frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js b/frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js index 520cb09ec84372921a3d35fa01ff868719c47ad3..f1d6da1d77636ce251885378e5164736d39d02b5 100644 --- a/frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js +++ b/frontend-js/src/test/js/gui/admin/EditProjectDialog-test.js @@ -54,7 +54,7 @@ describe('EditProjectDialog', function() { return dialog.saveOverlay(14081); }); }); - + it('saveUser', function() { var dialog; var project; @@ -70,7 +70,7 @@ describe('EditProjectDialog', function() { return dialog.saveUser("anonymous"); }); }); - + it('onSaveClicked', function() { var dialog; @@ -88,16 +88,19 @@ describe('EditProjectDialog', function() { assert.ok(project === result); }); }); - + it('openAddOverlayDialog', function() { - return ServerConnector.getProject().then(function(result) { + var dialog; + return ServerConnector.getProject().then(function(result) { var project = result; - var dialog = new EditProjectDialog({ + dialog= new EditProjectDialog({ element : testDiv, project : project, customMap : null, }); return dialog.openAddOverlayDialog(); + }).then(function() { + dialog.destroy(); }); }); 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 3d55123783e2dea53023b90d153392fcc1e23722..8de9f0087e1c00fa62d4e893399064d85b08731e 100644 --- a/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js +++ b/frontend-js/src/test/js/gui/admin/MapsAdminPanel-test.js @@ -8,64 +8,68 @@ var logger = require('../../logger'); var assert = require('assert'); -describe('MapsAdminPanel', function() { +describe('MapsAdminPanel', function () { - it('refresh', 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.onRefreshClicked(); + it('refresh', 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.onRefreshClicked(); + }); }); - }); - 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, + 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(); + }).then(function () { + return mapTab.destroy(); + }); }); - 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, + 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(); + }).then(function () { + return mapTab.destroy(); + }); }); - return mapTab.init(); - }).then(function() { - return mapTab.onAddClicked(); - }).then(function() { - mapTab._addDialog.close(); - return mapTab.onAddClicked(); - }); }); - }); }); diff --git a/frontend-js/src/test/js/gui/leftPanel/LeftPanel-test.js b/frontend-js/src/test/js/gui/leftPanel/LeftPanel-test.js index 16e19770d0ecf7526602a4ba23cbdd5ca1b4afe5..95051feab6a7431e00e031bd1031b6bf47dc0ef4 100644 --- a/frontend-js/src/test/js/gui/leftPanel/LeftPanel-test.js +++ b/frontend-js/src/test/js/gui/leftPanel/LeftPanel-test.js @@ -11,79 +11,82 @@ var chai = require('chai'); var assert = chai.assert; var logger = require('../../logger'); -describe('LeftPanel', function() { - - it('constructor', function() { - var map = helper.createCustomMap(); - helper.createSearchDbOverlay(map); - helper.createDrugDbOverlay(map); - helper.createChemicalDbOverlay(map); - helper.createMiRnaDbOverlay(map); - - new LeftPanel({ - element : testDiv, - customMap : map - }); - - assert.equal(logger.getWarnings().length, 0); - - }); - - describe('prepareElementDetailsContent', function() { - it('for element', function() { - var map; - var panel; - return ServerConnector.getProject().then(function(project) { - map = helper.createCustomMap(project); +describe('LeftPanel', function () { + it('constructor', function () { + var map = helper.createCustomMap(); helper.createSearchDbOverlay(map); helper.createDrugDbOverlay(map); helper.createChemicalDbOverlay(map); helper.createMiRnaDbOverlay(map); - panel = new LeftPanel({ - element : testDiv, - customMap : map + var panel = new LeftPanel({ + element: testDiv, + customMap: map }); - var element = new IdentifiedElement({ - id : 329163, - type : "ALIAS", - modelId : map.getId() - }); - return map.getModel().getByIdentifiedElement(element, true); - }).then(function(alias) { - var div = panel.prepareElementDetailsContent(alias); - assert.ok(div); - }); - }); - it('for point', function() { - var map; - var panel; - return ServerConnector.getProject().then(function(project) { - map = helper.createCustomMap(project); + assert.equal(logger.getWarnings().length, 0); - helper.createSearchDbOverlay(map); - helper.createDrugDbOverlay(map); - helper.createChemicalDbOverlay(map); - helper.createMiRnaDbOverlay(map); + return panel.destroy(); + }); - panel = new LeftPanel({ - element : testDiv, - customMap : map + describe('prepareElementDetailsContent', function () { + it('for element', function () { + var map; + var panel; + return ServerConnector.getProject().then(function (project) { + map = helper.createCustomMap(project); + + helper.createSearchDbOverlay(map); + helper.createDrugDbOverlay(map); + helper.createChemicalDbOverlay(map); + helper.createMiRnaDbOverlay(map); + + panel = new LeftPanel({ + element: testDiv, + customMap: map + }); + + var element = new IdentifiedElement({ + id: 329163, + type: "ALIAS", + modelId: map.getId() + }); + return map.getModel().getByIdentifiedElement(element, true); + }).then(function (alias) { + var div = panel.prepareElementDetailsContent(alias); + assert.ok(div); + return panel.destroy(); + }); }); - - var element = new IdentifiedElement({ - id : "(1.00,2.00)", - type : "POINT", - modelId : map.getId() + it('for point', function () { + var map; + var panel; + return ServerConnector.getProject().then(function (project) { + map = helper.createCustomMap(project); + + helper.createSearchDbOverlay(map); + helper.createDrugDbOverlay(map); + helper.createChemicalDbOverlay(map); + helper.createMiRnaDbOverlay(map); + + panel = new LeftPanel({ + element: testDiv, + customMap: map + }); + + var element = new IdentifiedElement({ + id: "(1.00,2.00)", + type: "POINT", + modelId: map.getId() + }); + return map.getModel().getByIdentifiedElement(element, true); + }).then(function (point) { + var div = panel.prepareElementDetailsContent(point); + assert.ok(div); + return panel.destroy(); + }); }); - return map.getModel().getByIdentifiedElement(element, true); - }).then(function(point) { - var div = panel.prepareElementDetailsContent(point); - assert.ok(div); - }); }); - }); }); diff --git a/frontend-js/src/test/js/gui/leftPanel/OverlayPanel-test.js b/frontend-js/src/test/js/gui/leftPanel/OverlayPanel-test.js index 0620bc0ac089e53c17c038872b3756e4c5a391fc..fc269f84926f0aab6fe081e53974dd1bf9e5824f 100644 --- a/frontend-js/src/test/js/gui/leftPanel/OverlayPanel-test.js +++ b/frontend-js/src/test/js/gui/leftPanel/OverlayPanel-test.js @@ -8,98 +8,101 @@ var chai = require('chai'); var assert = chai.assert; var logger = require('../../logger'); -describe('OverlayPanel', function() { +describe('OverlayPanel', function () { - it('contructor', function() { - var map = helper.createCustomMap(); + it('constructor', function () { + var map = helper.createCustomMap(); - new OverlayPanel({ - element : testDiv, - customMap : map + new OverlayPanel({ + element: testDiv, + customMap: map + }); + assert.equal(logger.getWarnings().length, 0); }); - assert.equal(logger.getWarnings().length, 0); - }); - it('refresh', function() { - var map = helper.createCustomMap(); + it('refresh', function () { + var map = helper.createCustomMap(); - var panel = new OverlayPanel({ - element : testDiv, - customMap : map - }); + var panel = new OverlayPanel({ + element: testDiv, + customMap: map + }); - return panel.refresh().then(function() { - assert.ok(panel.getElement().innerHTML.indexOf("testLayout") >= 0); - assert.ok(panel.getElement().innerHTML.indexOf("YOU ARE NOT LOGGED") >= 0); + return panel.refresh().then(function () { + assert.ok(panel.getElement().innerHTML.indexOf("testLayout") >= 0); + assert.ok(panel.getElement().innerHTML.indexOf("YOU ARE NOT LOGGED") >= 0); + }); }); - }); - - it('createRow', function() { - var map = helper.createCustomMap(); - var overlay = helper.createLayout(); - overlay.setInputDataAvailable(true); - overlay.setCreator("me"); - map.getModel().addLayout(overlay); - - var panel = new OverlayPanel({ - element : testDiv, - customMap : map + it('createRow', function () { + var map = helper.createCustomMap(); + + var overlay = helper.createLayout(); + overlay.setInputDataAvailable(true); + overlay.setCreator("me"); + map.getModel().addLayout(overlay); + + var panel = new OverlayPanel({ + element: testDiv, + customMap: map + }); + + var row = panel.createOverlayRow(overlay); + assert.ok(row); + + var buttons = row.getElementsByTagName("button"); + var openButton = null; + for (var i = 0; i < buttons.length; i++) { + var name = buttons[i].getAttribute("name"); + if (name !== undefined && name.indexOf("editButton") >= 0) { + openButton = buttons[i]; + } + } + assert.ok(openButton); + openButton.onclick(); + return panel.destroy(); }); - - var row = panel.createOverlayRow(overlay); - assert.ok(row); - - var buttons = row.getElementsByTagName("button"); - var openButton = null; - for (var i = 0; i < buttons.length; i++) { - var name = buttons[i].getAttribute("name"); - if (name !== undefined && name.indexOf("editButton") >= 0) { - openButton = buttons[i]; - } - } - assert.ok(openButton); - openButton.onclick(); - }); - it('download', function() { - var map = helper.createCustomMap(); - - var overlay = helper.createLayout(); - overlay.setInputDataAvailable(true); - map.getModel().addLayout(overlay); - - var panel = new OverlayPanel({ - element : testDiv, - customMap : map + it('download', function () { + var map = helper.createCustomMap(); + + var overlay = helper.createLayout(); + overlay.setInputDataAvailable(true); + map.getModel().addLayout(overlay); + + var panel = new OverlayPanel({ + element: testDiv, + customMap: map + }); + + return panel.refresh().then(function () { + var buttons = panel.getElement().getElementsByTagName("button"); + var downloadButton; + for (var i = 0; i < buttons.length; i++) { + var name = buttons[i].getAttribute("name"); + if (name !== undefined && name !== null && name.indexOf("download-overlay") >= 0) { + downloadButton = buttons[i]; + } + } + assert.ok(downloadButton); + assert.notOk(panel.getLastDownloadUrl()); + return downloadButton.onclick(); + }).then(function () { + assert.ok(panel.getLastDownloadUrl()); + }); }); - return panel.refresh().then(function() { - var buttons = panel.getElement().getElementsByTagName("button"); - var downloadButton; - for (var i = 0; i < buttons.length; i++) { - var name = buttons[i].getAttribute("name"); - if (name !== undefined && name !== null && name.indexOf("download-overlay") >= 0) { - downloadButton = buttons[i]; - } - } - assert.ok(downloadButton); - assert.notOk(panel.getLastDownloadUrl()); - return downloadButton.onclick(); - }).then(function() { - assert.ok(panel.getLastDownloadUrl()); - }); - }); + it('openAddOverlayDialog', function () { + var map = helper.createCustomMap(); - it('openAddOverlayDialog', function() { - var map = helper.createCustomMap(); + var panel = new OverlayPanel({ + element: testDiv, + customMap: map + }); - var panel = new OverlayPanel({ - element : testDiv, - customMap : map + return panel.openAddOverlayDialog().then(function () { + return panel.destroy(); + }); }); - return panel.openAddOverlayDialog(); - }); - }); diff --git a/frontend-js/src/test/js/gui/leftPanel/ProjectInfoPanel-test.js b/frontend-js/src/test/js/gui/leftPanel/ProjectInfoPanel-test.js index c51f90c16288e053a048a92758f21df246f71c58..a8257cf7e4291d74d7d3eec82d91d0244d827069 100644 --- a/frontend-js/src/test/js/gui/leftPanel/ProjectInfoPanel-test.js +++ b/frontend-js/src/test/js/gui/leftPanel/ProjectInfoPanel-test.js @@ -8,70 +8,79 @@ var chai = require('chai'); var assert = chai.assert; var logger = require('../../logger'); -describe('ProjectInfoPanel', function() { +describe('ProjectInfoPanel', function () { - it('contructor', function() { - var div = testDiv; + it('constructor', function () { + var div = testDiv; - var map = helper.createCustomMap(); + var map = helper.createCustomMap(); - new ProjectInfoPanel({ - element : div, - customMap : map + var panel = new ProjectInfoPanel({ + element: div, + customMap: map + }); + assert.equal(logger.getWarnings().length, 0); + panel.destroy(); }); - assert.equal(logger.getWarnings().length, 0); - }); - it('refresh', function() { - var div = testDiv; - var panel = new ProjectInfoPanel({ - element : div, - customMap : helper.createCustomMap(), + it('refresh', function () { + var div = testDiv; + var panel = new ProjectInfoPanel({ + element: div, + customMap: helper.createCustomMap(), + }); + return panel.refresh().then(function () { + assert.ok(div.innerHTML.indexOf("UNKNOWN DISEASE MAP") >= 0); + return panel.destroy(); + }); }); - return panel.refresh().then(function() { - assert.ok(div.innerHTML.indexOf("UNKNOWN DISEASE MAP") >= 0); - }); - }); - it('download source', function() { - var div = testDiv; - var panel = new ProjectInfoPanel({ - element : div, - customMap : helper.createCustomMap(), + it('download source', function () { + var div = testDiv; + var panel = new ProjectInfoPanel({ + element: div, + customMap: helper.createCustomMap(), + }); + return panel.downloadSourceFile().then(function () { + return panel.destroy(); + }); }); - return panel.downloadSourceFile(); - }); - it('open manual', function() { - var div = testDiv; - new ProjectInfoPanel({ - element : div, - customMap : helper.createCustomMap(), + it('open manual', function () { + var div = testDiv; + var panel = new ProjectInfoPanel({ + element: div, + customMap: helper.createCustomMap(), + }); + return $("[name='manualLink']", $(div))[0].onclick().then(function () { + return panel.destroy(); + }); }); - return $("[name='manualLink']", $(div))[0].onclick(); - }); - it('show publication list', function() { - return ServerConnector.getProject().then(function(project) { - var div = testDiv; - var panel = new ProjectInfoPanel({ - element : div, - customMap : helper.createCustomMap(project), - }); - return panel.showPublicationListDialog(); + it('show publication list', function () { + var panel; + return ServerConnector.getProject().then(function (project) { + panel = new ProjectInfoPanel({ + element: testDiv, + customMap: helper.createCustomMap(project), + }); + return panel.showPublicationListDialog(); + }).then(function () { + return panel.destroy(); + }); }); - }); - it('show profile', function() { - var map = helper.createCustomMap(); + it('show profile', function () { + var map = helper.createCustomMap(); + + var panel = new ProjectInfoPanel({ + element: testDiv, + customMap: map + }); - var panel = new ProjectInfoPanel({ - element : testDiv, - customMap : map + var user = helper.createUser(); + panel.showUserProfilePage(user); + panel.destroy(); }); - - var user = helper.createUser(); - panel.showUserProfilePage(user); - }); }); diff --git a/frontend-js/src/test/js/map/CustomMap-test.js b/frontend-js/src/test/js/map/CustomMap-test.js index ccef0aab0a0865668b57ecfe6558b6255ab7d577..0a8be442dd15f4a5a21571bbe089d5b559612f5b 100644 --- a/frontend-js/src/test/js/map/CustomMap-test.js +++ b/frontend-js/src/test/js/map/CustomMap-test.js @@ -21,98 +21,98 @@ var logger = require('./../logger'); var chai = require('chai'); var assert = chai.assert; -describe('CustomMap', function() { - describe("constructor", function() { - it("default", function() { - var options = helper.createCustomMapOptions(); - var map = new CustomMap(options); - assert.ok(map); - }); +describe('CustomMap', function () { + describe("constructor", function () { + it("default", function () { + var options = helper.createCustomMapOptions(); + var map = new CustomMap(options); + assert.ok(map); + }); + + it("with submaps", function () { + var options = helper.createCustomMapOptions(); - it("with submaps", function() { - var options = helper.createCustomMapOptions(); + options.getProject().getModel().addSubmodel(helper.createModel()); + + var map = new CustomMap(options); + assert.ok(map); + }); - options.getProject().getModel().addSubmodel(helper.createModel()); + it("with session data pointing to not existing overlay", function () { + var options = helper.createCustomMapOptions(); - var map = new CustomMap(options); - assert.ok(map); + ServerConnector.getSessionData(options.getProject()).setSelectedBackgroundOverlay("-1"); + + var map = new CustomMap(options); + assert.ok(map); + }); }); - it("with session data pointing to not existing overlay", function() { - var options = helper.createCustomMapOptions(); + it("getSubmapById", function () { + var map = helper.createCustomMap(); + assert.ok(map.getSubmapById(map.getId())); + }); - ServerConnector.getSessionData(options.getProject()).setSelectedBackgroundOverlay("-1"); + it("getSubmapById (invalid)", function () { + var map = helper.createCustomMap(); + assert.equal(map.getSubmapById(-1), null); + }); - var map = new CustomMap(options); - assert.ok(map); + it("getSubmapById (string id)", function () { + var map = helper.createCustomMap(); + assert.ok(map.getSubmapById(map.getId() + "")); }); - }); - it("getSubmapById", function() { - var map = helper.createCustomMap(); - assert.ok(map.getSubmapById(map.getId())); - }); + describe("openDataOverlay", function () { + it("for not existing id", function () { + var map = helper.createCustomMap(); + try { + map.openDataOverlay(-1); + assert.ok(false); + } catch (exception) { + assert.ok(exception.message.indexOf("You have no privileges") >= 0); + } + }); - it("getSubmapById (invalid)", function() { - var map = helper.createCustomMap(); - assert.equal(map.getSubmapById(-1), null); - }); + it("for int id", function () { + var options = helper.createCustomMapOptions(); + var model = options.getProject().getModel(); + var layout = model.getLayouts()[0]; + var map = new CustomMap(options); + map.openDataOverlay(layout.getId()); + assert.equal(logger.getErrors().length, 0); + }); - it("getSubmapById (string id)", function() { - var map = helper.createCustomMap(); - assert.ok(map.getSubmapById(map.getId() + "")); - }); + it("for overlay object", function () { + var options = helper.createCustomMapOptions(); + var model = options.getProject().getModel(); + var layout = model.getLayouts()[0]; + var map = new CustomMap(options); + map.openDataOverlay(layout); + assert.equal(logger.getErrors().length, 0); + }); - describe("openDataOverlay", function() { - it("for not existing id", function() { - var map = helper.createCustomMap(); - try { - map.openDataOverlay(-1); - assert.ok(false); - } catch (exception) { - assert.ok(exception.message.indexOf("You have no privileges") >= 0); - } - }); - - it("for int id", function() { - var options = helper.createCustomMapOptions(); - var model = options.getProject().getModel(); - var layout = model.getLayouts()[0]; - var map = new CustomMap(options); - map.openDataOverlay(layout.getId()); - assert.equal(logger.getErrors().length, 0); - }); - - it("for overlay object", function() { - var options = helper.createCustomMapOptions(); - var model = options.getProject().getModel(); - var layout = model.getLayouts()[0]; - var map = new CustomMap(options); - map.openDataOverlay(layout); - assert.equal(logger.getErrors().length, 0); - }); - - it("for string id", function() { - var options = helper.createCustomMapOptions(); - var model = options.getProject().getModel(); - var layout = model.getLayouts()[0]; - var map = new CustomMap(options); - map.openDataOverlay(layout.getId() + ""); - assert.equal(logger.getErrors().length, 0); - }); - - it("with background overlay", function() { - var map = helper.createCustomMap(); - var layout = helper.createLayout(); - layout.setInitialized(true); - layout.setInputDataAvailable(false); - map.getModel().addLayout(layout); + it("for string id", function () { + var options = helper.createCustomMapOptions(); + var model = options.getProject().getModel(); + var layout = model.getLayouts()[0]; + var map = new CustomMap(options); + map.openDataOverlay(layout.getId() + ""); + assert.equal(logger.getErrors().length, 0); + }); - return map.openDataOverlay(layout.getId()).then(function() { - var vLayouts = ServerConnector.getSessionData(map.getProject()).getVisibleOverlays(); - assert.equal(0, vLayouts.length); - }); - }); + it("with background overlay", function () { + var map = helper.createCustomMap(); + var layout = helper.createLayout(); + layout.setInitialized(true); + layout.setInputDataAvailable(false); + map.getModel().addLayout(layout); + + return map.openDataOverlay(layout.getId()).then(function () { + var vLayouts = ServerConnector.getSessionData(map.getProject()).getVisibleOverlays(); + assert.equal(0, vLayouts.length); + }); + }); it("simple", function() { var map = helper.createCustomMap(); @@ -131,846 +131,852 @@ describe('CustomMap', function() { var layoutReaction = helper.createLayoutReaction(reaction); layout.addReaction(layoutReaction); - map.getModel().addLayout(layout); + map.getModel().addLayout(layout); + + return map.openDataOverlay(layout.getId()).then(function () { + return map._showSelectedLayout(layout.getId(), 0, 1); + }).then(function () { + var vLayouts = ServerConnector.getSessionData(map.getProject()).getVisibleOverlays(); + assert.equal(1, vLayouts.length); + assert.equal(layout.getId(), vLayouts[0]); - return map.openDataOverlay(layout.getId()).then(function() { - return map._showSelectedLayout(layout.getId(), 0, 1); - }).then(function() { - var vLayouts = ServerConnector.getSessionData(map.getProject()).getVisibleOverlays(); - assert.equal(1, vLayouts.length); - assert.equal(layout.getId(), vLayouts[0]); + assert.equal(2, map.selectedLayoutOverlays[layout.getId()].length); + assert.ok(map.selectedLayoutOverlays[layout.getId()][0] instanceof AliasSurface); + assert.ok(map.selectedLayoutOverlays[layout.getId()][1] instanceof ReactionSurface); - assert.equal(2, map.selectedLayoutOverlays[layout.getId()].length); - assert.ok(map.selectedLayoutOverlays[layout.getId()][0] instanceof AliasSurface); - assert.ok(map.selectedLayoutOverlays[layout.getId()][1] instanceof ReactionSurface); + // now hide the layout + map._hideSelectedLayout(layout.getId()); + assert.ok(map.selectedLayoutOverlays[layout.getId()]); + assert.equal(0, map.selectedLayoutOverlays[layout.getId()].length); + }); - // now hide the layout - map._hideSelectedLayout(layout.getId()); - assert.ok(map.selectedLayoutOverlays[layout.getId()]); - assert.equal(0, map.selectedLayoutOverlays[layout.getId()].length); - }); + }); + + it("with submaps", function () { + var projectId = "complex_model_with_submaps"; + helper.setUrl("http://test/?id=" + projectId); + GuiConnector.getParams["id"] = projectId; + var customMap; + var emptySubmodelId = 16730; + var filledSubmodelId = 16731; + var overlayId = 18083; + + return ServerConnector.getProject(projectId).then(function (project) { + var options = helper.createCustomMapOptions(project); + customMap = new CustomMap(options); + + return customMap.openSubmap(emptySubmodelId); + }).then(function () { + return customMap.openSubmap(filledSubmodelId); + }).then(function () { + + var emptySubmap = customMap.getSubmapById(emptySubmodelId); + var filledSubmap = customMap.getSubmapById(filledSubmodelId); + + return customMap.openDataOverlay(overlayId).then(function () { + + assert.equal(1, customMap.selectedLayoutOverlays[overlayId].length); + assert.equal(1, filledSubmap.selectedLayoutOverlays[overlayId].length); + assert.equal(0, emptySubmap.selectedLayoutOverlays[overlayId].length); + + // now hide the layout + customMap.hideSelectedLayout(overlayId); + assert.equal(0, customMap.selectedLayoutOverlays[overlayId].length); + assert.equal(0, filledSubmap.selectedLayoutOverlays[overlayId].length); + assert.equal(0, emptySubmap.selectedLayoutOverlays[overlayId].length); + }); + + }).then(function () { + return customMap.destroy(); + }); + }); }); - it("with submaps", function() { - var projectId = "complex_model_with_submaps"; - helper.setUrl("http://test/?id=" + projectId); - GuiConnector.getParams["id"] = projectId; - var customMap; - var emptySubmodelId = 16730; - var filledSubmodelId = 16731; - var overlayId = 18083; + it("removeSelectedLayout", function () { + var map = helper.createCustomMap(); + var layout = helper.createLayout(); + layout.setInitialized(true); + layout.setInputDataAvailable(true); + map.getModel().addLayout(layout); - return ServerConnector.getProject(projectId).then(function(project) { - var options = helper.createCustomMapOptions(project); - customMap = new CustomMap(options); + return map.openDataOverlay(layout.getId()).then(function () { + return map.removeSelectedLayout(layout.getId()); + }).then(function () { + var vLayouts = ServerConnector.getSessionData(map.getProject()).getVisibleOverlays(); + assert.equal(0, vLayouts.length); + }); + }); - return customMap.openSubmap(emptySubmodelId); - }).then(function() { - return customMap.openSubmap(filledSubmodelId); - }).then(function() { + describe("openInfoWindowForAlias", function () { + it("default", function () { + var map = helper.createCustomMap(); + var layout = helper.createLayout(); + var alias = helper.createAlias(); + alias.setModelId(map.getId()); + var layoutAlias = helper.createLayoutAlias(); + layoutAlias.setId(alias.getId()); - var emptySubmap = customMap.getSubmapById(emptySubmodelId); - var filledSubmap = customMap.getSubmapById(filledSubmodelId); + layout.addAlias(layoutAlias); - return customMap.openDataOverlay(overlayId).then(function() { + // create layout + map.getModel().addLayout(layout); + map.getModel().addAlias(alias); - assert.equal(1, customMap.selectedLayoutOverlays[overlayId].length); - assert.equal(1, filledSubmap.selectedLayoutOverlays[overlayId].length); - assert.equal(0, emptySubmap.selectedLayoutOverlays[overlayId].length); + return map.openInfoWindowForAlias(alias).then(function () { + assert.ok(map.getAliasInfoWindowById(alias.getId())); + assert.ok(map.getAliasInfoWindowById(alias.getId()).isOpened()); + }); + }); - // now hide the layout - customMap.hideSelectedLayout(overlayId); - assert.equal(0, customMap.selectedLayoutOverlays[overlayId].length); - assert.equal(0, filledSubmap.selectedLayoutOverlays[overlayId].length); - assert.equal(0, emptySubmap.selectedLayoutOverlays[overlayId].length); + it("for incomplete alias", function () { + var map, alias; + return ServerConnector.getProject().then(function (project) { + var options = helper.createCustomMapOptions(project); + map = new CustomMap(options); + + return map.getModel().getAliasById(329171, false); + }).then(function (result) { + alias = result; + assert.notOk(alias.isComplete()); + return map.openInfoWindowForAlias(alias); + }).then(function () { + assert.ok(map.getAliasInfoWindowById(alias.getId())); + assert.ok(map.getAliasInfoWindowById(alias.getId()).isOpened()); + }); }); + }); - }); + it("getSearchAutocomplete", function () { + var map = helper.createCustomMap(); + + var t = map.getSearchAutocomplete("s"); + assert.ok(t); + assert.equal(t.length, 0); }); - }); + it("getSearchAutocomplete 2", function () { + var map = helper.createCustomMap(); - it("removeSelectedLayout", function() { - var map = helper.createCustomMap(); - var layout = helper.createLayout(); - layout.setInitialized(true); - layout.setInputDataAvailable(true); - map.getModel().addLayout(layout); + return map.refreshSearchAutocomplete("s").then(function () { + var t = map.getSearchAutocomplete("s"); + assert.ok(t); + assert.ok(t.length > 0); + }); + }); + + describe("renderOverlayCollection", function () { + it("for alias", function () { + var map = helper.createCustomMap(); + var reaction = helper.createReaction(); + var alias = helper.createAlias(); + map.getModel().addAlias(alias); + map.getModel().addReaction(reaction); + + var oc = helper.createDbOverlay(map); + + oc.getIdentifiedElements = function () { + return Promise.resolve([new IdentifiedElement({ + objectId: alias.getId(), + icon: "empty.png", + modelId: map.getId(), + type: "Alias" + })]); + }; + return map.renderOverlayCollection({ + overlayCollection: oc + }).then(function () { + var aliasMarkerCount = 0; + var markers = oc.markers["ALIAS"]; + for (var id in markers) { + if (markers.hasOwnProperty(id)) { + aliasMarkerCount++; + } + } + assert.equal(1, aliasMarkerCount); + }); + }); + + it("alias re-rendering with different icon", function () { + var map = helper.createCustomMap(); + var reaction = helper.createReaction(map); + var alias = helper.createAlias(map); + map.getModel().addAlias(alias); + map.getModel().addReaction(reaction); + + var marker; + var oc = helper.createDbOverlay(map); + + oc.getIdentifiedElements = function () { + return Promise.resolve([new IdentifiedElement({ + objectId: alias.getId(), + icon: "empty.png", + modelId: map.getId(), + type: "Alias" + }), new IdentifiedElement(reaction)]); + }; + return map.renderOverlayCollection({ + overlayCollection: oc + }).then(function () { + marker = oc.markers["ALIAS"][alias.getId()]; + oc.getIdentifiedElements = function () { + return Promise.resolve([new IdentifiedElement({ + objectId: alias.getId(), + icon: "new_icon.png", + modelId: map.getId(), + type: "Alias" + })]); + }; + assert.ok(oc.mapOverlays["REACTION"][reaction.getId()]); + + return map.renderOverlayCollection({ + overlayCollection: oc + }); + }).then(function () { + assert.equal(marker.getIcon(), "new_icon.png"); + + assert.notOk(oc.mapOverlays["REACTION"][reaction.getId()]); + }); + }); + + it("for set of aliases", function () { + var map = helper.createCustomMap(); + + var oc = helper.createDbOverlay(map); + + var identifiedElements = []; + for (var i = 0; i < 3; i++) { + var alias = helper.createAlias(map); + map.getModel().addAlias(alias); + var ie = helper.createIdentifiedElement(alias); + ie.setIcon(""); + identifiedElements.push(ie); + } + + oc.getIdentifiedElements = function () { + return Promise.resolve(identifiedElements); + }; + + return map.renderOverlayCollection({ + overlayCollection: oc + }).then(function () { + var aliasMarkerCount = 0; + var markers = oc.markers["ALIAS"]; + for (var id in markers) { + if (markers.hasOwnProperty(id)) { + aliasMarkerCount++; + } + } + + assert.equal(aliasMarkerCount, 3); + }); + }); - return map.openDataOverlay(layout.getId()).then(function() { - return map.removeSelectedLayout(layout.getId()); - }).then(function() { - var vLayouts = ServerConnector.getSessionData(map.getProject()).getVisibleOverlays(); - assert.equal(0, vLayouts.length); + it("for point", function () { + var map = helper.createCustomMap(); + + var oc = helper.createDbOverlay(map); + + var javaObj = { + objectId: "Point2D.Double[117.685546875, 204.6923828125001]", + modelId: map.getId(), + type: "POINT", + icon: "marker/empty.png" + }; + + oc.getIdentifiedElements = function () { + return Promise.resolve([new IdentifiedElement(javaObj)]); + }; + + return map.renderOverlayCollection({ + overlayCollection: oc + }).then(function () { + var markerCount = 0; + var markers = oc.markers["POINT"]; + for (var id in markers) { + if (markers.hasOwnProperty(id)) { + markerCount++; + } + } + assert.equal(1, markerCount); + }); + }); + + it("for reaction", function () { + var map = helper.createCustomMap(); + var reaction = helper.createReaction(); + map.getModel().addReaction(reaction); + + var oc = helper.createDbOverlay(map); + + var javaObj = { + objectId: reaction.getId(), + modelId: map.getId(), + type: "Reaction", + }; + + oc.getIdentifiedElements = function () { + return Promise.resolve([new IdentifiedElement(javaObj)]); + }; + + return map.renderOverlayCollection({ + overlayCollection: oc + }).then(function () { + var markerCount = 0; + var markers = oc.mapOverlays["REACTION"]; + for (var id in markers) { + if (markers.hasOwnProperty(id)) { + markerCount++; + } + } + assert.equal(1, markerCount); + }); + }); }); - }); - describe("openInfoWindowForAlias", function() { - it("default", function() { - var map = helper.createCustomMap(); - var layout = helper.createLayout(); - var alias = helper.createAlias(); - alias.setModelId(map.getId()); - var layoutAlias = helper.createLayoutAlias(); - layoutAlias.setId(alias.getId()); + it("clearDbOverlays", function () { + var map = helper.createCustomMap(); - layout.addAlias(layoutAlias); + var oc = helper.createDbOverlay(map); - // create layout - map.getModel().addLayout(layout); - map.getModel().addAlias(alias); + var javaObj = { + objectId: "Point2D.Double[117.685546875, 204.6923828125001]", + modelId: map.getId(), + type: "POINT", + icon: "marker/empty.png" + }; + var searchResults = [new IdentifiedElement(javaObj)]; + + oc.getIdentifiedElements = function () { + return Promise.resolve(searchResults); + }; + oc.clear = function () { + searchResults = []; + return this.callListeners("onSearch", searchResults); + }; + + return map.renderOverlayCollection({ + overlayCollection: oc + }).then(function () { + + return map.clearDbOverlays(); + }).then(function () { + var markerCount = 0; + for (var id in oc.pointMarkers) { + if (oc.pointMarkers.hasOwnProperty(id)) { + markerCount++; + } + } + + assert.equal(0, markerCount); + }); - return map.openInfoWindowForAlias(alias).then(function() { - assert.ok(map.getAliasInfoWindowById(alias.getId())); - assert.ok(map.getAliasInfoWindowById(alias.getId()).isOpened()); - }); }); - it("for incomplete alias", function() { - var map, alias; - return ServerConnector.getProject().then(function(project) { - var options = helper.createCustomMapOptions(project); - map = new CustomMap(options); + it("getInfoWindowForIdentifiedElement ( reaction)", function () { + var map = helper.createCustomMap(); + var reaction = helper.createReaction(map); + map.getModel().addReaction(reaction); + + var ie = helper.createIdentifiedElement(reaction); + + var infoWindow = map.getInfoWindowForIdentifiedElement(ie); + + assert.equal(null, infoWindow); + return map._openInfoWindowForReaction(reaction).then(function () { + infoWindow = map.getInfoWindowForIdentifiedElement(ie); + + assert.ok(infoWindow); + }); - return map.getModel().getAliasById(329171, false); - }).then(function(result) { - alias = result; - assert.notOk(alias.isComplete()); - return map.openInfoWindowForAlias(alias); - }).then(function() { - assert.ok(map.getAliasInfoWindowById(alias.getId())); - assert.ok(map.getAliasInfoWindowById(alias.getId()).isOpened()); - }); }); - }); - it("getSearchAutocomplete", function() { - var map = helper.createCustomMap(); + it("right click on map", function () { + var map = helper.createCustomMap(); + map.setContextMenu(new MapContextMenu({ + customMap: map, + element: testDiv + })); - var t = map.getSearchAutocomplete("s"); - assert.ok(t); - assert.equal(t.length, 0); - }); + var mev = { + stop: null, + latLng: new google.maps.LatLng(40.0, -90.0) + }; - it("getSearchAutocomplete 2", function() { - var map = helper.createCustomMap(); + assert.notOk(map.getActiveSubmapId()); + google.maps.event.trigger(map.getGoogleMap(), 'rightclick', mev); + assert.equal(map.getId(), map.getActiveSubmapId()); - return map.refreshSearchAutocomplete("s").then(function() { - var t = map.getSearchAutocomplete("s"); - assert.ok(t); - assert.ok(t.length > 0); }); - }); - describe("renderOverlayCollection", function() { - it("for alias", function() { - var map = helper.createCustomMap(); - var reaction = helper.createReaction(); - var alias = helper.createAlias(); - map.getModel().addAlias(alias); - map.getModel().addReaction(reaction); + it("left click on map", function () { + var map; + var searchOverlay; + return ServerConnector.getProject().then(function (project) { + map = helper.createCustomMap(project); + searchOverlay = helper.createSearchDbOverlay(map); + + var mev = { + stop: null, + latLng: new google.maps.LatLng(82.32061703407554, -167.25586206896548), + }; + map.getGoogleMap().setZoom(4); + // latLng : new google.maps.LatLng(82.40238643645326, -148.44758620689652) + + assert.notOk(map.getActiveSubmapId()); + return google.maps.event.trigger(map.getGoogleMap(), 'click', mev); + + }).then(function () { + assert.equal(map.getId(), map.getActiveSubmapId()); + assert.ok(searchOverlay.markers["ALIAS"][329171]); + }); - var oc = helper.createDbOverlay(map); - - oc.getIdentifiedElements = function() { - return Promise.resolve([ new IdentifiedElement({ - objectId : alias.getId(), - icon : "empty.png", - modelId : map.getId(), - type : "Alias" - }) ]); - }; - return map.renderOverlayCollection({ - overlayCollection : oc - }).then(function() { - var aliasMarkerCount = 0; - var markers = oc.markers["ALIAS"]; - for ( var id in markers) { - if (markers.hasOwnProperty(id)) { - aliasMarkerCount++; - } - } - assert.equal(1, aliasMarkerCount); - }); }); - it("alias re-rendering with different icon", function() { - var map = helper.createCustomMap(); - var reaction = helper.createReaction(map); - var alias = helper.createAlias(map); - map.getModel().addAlias(alias); - map.getModel().addReaction(reaction); + it("left click on reaction", function () { + var map; + var searchOverlay; + return ServerConnector.getProject().then(function (project) { + map = helper.createCustomMap(project); + searchOverlay = helper.createSearchDbOverlay(map); - var marker; - var oc = helper.createDbOverlay(map); - - oc.getIdentifiedElements = function() { - return Promise.resolve([ new IdentifiedElement({ - objectId : alias.getId(), - icon : "empty.png", - modelId : map.getId(), - type : "Alias" - }), new IdentifiedElement(reaction) ]); - }; - return map.renderOverlayCollection({ - overlayCollection : oc - }).then(function() { - marker = oc.markers["ALIAS"][alias.getId()]; - oc.getIdentifiedElements = function() { - return Promise.resolve([ new IdentifiedElement({ - objectId : alias.getId(), - icon : "new_icon.png", - modelId : map.getId(), - type : "Alias" - }) ]); + var mev = { + stop: null, + latLng: new google.maps.LatLng(82.40238643645326, -148.44758620689652) + }; + map.getGoogleMap().setZoom(4); + + assert.notOk(map.getActiveSubmapId()); + return google.maps.event.trigger(map.getGoogleMap(), 'click', mev); + }).then(function () { + assert.equal(map.getId(), map.getActiveSubmapId()); + assert.ok(searchOverlay.mapOverlays["REACTION"][153521]); + assert.ok(searchOverlay.mapOverlays["REACTION"][153521].isShown()); + assert.ok(searchOverlay.markers["ALIAS"][329165]); + }); + }); + + it("create polygon through drawingManager", function () { + var map = helper.createCustomMap(); + + map.setSelectionContextMenu(new SelectionContextMenu({ + customMap: map, + element: testDiv + })); + + map.turnOnDrawing(); + + var triangleCoords = [new google.maps.LatLng(25.774, -80.190), new google.maps.LatLng(18.466, -66.118), + new google.maps.LatLng(32.321, -64.757), new google.maps.LatLng(25.774, -80.190),]; + + // Construct the polygon. + var bermudaTriangle = new google.maps.Polygon({ + paths: triangleCoords, + strokeColor: '#FF0000', + strokeOpacity: 0.8, + strokeWeight: 2, + fillColor: '#FF0000', + fillOpacity: 0.35 + }); + bermudaTriangle.setMap(map.getGoogleMap()); + + var eventParam = { + type: google.maps.drawing.OverlayType.POLYGON, + overlay: bermudaTriangle, }; - assert.ok(oc.mapOverlays["REACTION"][reaction.getId()]); - return map.renderOverlayCollection({ - overlayCollection : oc + // check creation complete behaviour + assert.ok(map.isDrawingOn()); + assert.equal(google.maps.drawing.OverlayType.POLYGON, map._drawingManager.getDrawingMode()); + google.maps.event.trigger(map._drawingManager, 'overlaycomplete', eventParam); + assert.ok(map.isDrawingOn()); + assert.equal(null, map._drawingManager.getDrawingMode()); + + // and now check how it behaves when we wiught click on the polygon + var clickEventParam = { + stop: null, + latLng: new google.maps.LatLng(40.0, -90.0) + }; + + assert.notOk(map.getSelectedPolygon()); + + assert.notOk(map.getActiveSubmapId()); + assert.notOk(map.getSelectedArea()); + google.maps.event.trigger(bermudaTriangle, 'rightclick', clickEventParam); + assert.ok(map.getSelectedArea()); + assert.equal(map.getId(), map.getActiveSubmapId()); + + assert.ok(map.getSelectedPolygon()); + + }); + + it("getAliasVisibleLayoutsData", function () { + var mockObject = helper.createCustomMap(); + + var alias = helper.createAlias(); + mockObject.getModel().addAlias(alias); + + var layout = helper.createLayout(); + layout.setInputDataAvailable(true); + layout.setInitialized(true); + mockObject.getModel().addLayout(layout); + + return mockObject.openDataOverlay(layout.getId()).then(function () { + return mockObject.getAliasVisibleLayoutsData(alias.getId()); + }).then(function (layoutAliases) { + assert.equal(layoutAliases.length, 1); }); - }).then(function() { - assert.equal(marker.getIcon(), "new_icon.png"); + }); + + it("changed coords in map", function () { + var map = helper.createCustomMap(); + var oldCenter = map.getGoogleMap().getCenter(); + var newCenter = new google.maps.LatLng(3, 87); + map.getGoogleMap().setCenter(newCenter); + google.maps.event.trigger(map.getGoogleMap(), "center_changed"); - assert.notOk(oc.mapOverlays["REACTION"][reaction.getId()]); - }); + var center = ServerConnector.getSessionData(map.getProject()).getCenter(map.getModel()); + assert.ok(center !== oldCenter); + assert.ok(center instanceof google.maps.Point); }); - it("for set of aliases", function() { - var map = helper.createCustomMap(); + it("refreshComments", function () { + var map = helper.createCustomMap(); + map.getModel().setId(15781); + var commentsOverlay = helper.createCommentDbOverlay(map); + + ServerConnector.getSessionData().setShowComments(true); + return map.refreshComments().then(function () { + assert.notOk(commentsOverlay.markers["POINT"]['(241.01,372.35)']); + assert.ok(commentsOverlay.markers["POINT"]['(643.96,144.09)']); + assert.notOk(commentsOverlay.markers["POINT"]['(216.65,370.00)']); + assert.notOk(commentsOverlay.markers["POINT"]['unkId']); + }); + }); + + it("hide comments", function () { + var map = helper.createCustomMap(); + map.getModel().setId(15781); + var commentsOverlay = helper.createCommentDbOverlay(map); + + ServerConnector.getSessionData().setShowComments(true); + return map.refreshComments().then(function () { + ServerConnector.getSessionData().setShowComments(false); + return map.refreshComments(); + }).then(function () { + assert.notOk(commentsOverlay.markers["POINT"]['(241.01, 372.35)']); + }); + }); + + it("openCommentDialog", function () { + var map = helper.createCustomMap(); + map.getModel().setId(15781); + map.setActiveSubmapId(15781); + map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12)); + return map.openCommentDialog().then(function () { + var types = map.getCommentDialog().getTypes(); + assert.equal(types.length, 6); + var selected = map.getCommentDialog().getSelectedType(); + assert.ok(selected === "<General>"); + + map.getCommentDialog().setSelectedType(1); + selected = map.getCommentDialog().getSelectedType(); + assert.notOk(selected === "<General>"); + + map.getCommentDialog().setSelectedType(2); + selected = map.getCommentDialog().getSelectedType(); + assert.notOk(selected === "<General>"); + }).then(function () { + map.getCommentDialog().destroy(); + }); + }); + + it("addComment", function () { + var map; + return ServerConnector.getProject().then(function (project) { + map = helper.createCustomMap(project); + helper.createCommentDbOverlay(map); + map.setActiveSubmapId(map.getId()); + map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12)); + return map.openCommentDialog(); + }).then(function () { + return map.getCommentDialog().addComment(); + }).then(function () { + map.getCommentDialog().destroy(); + }); + }); - var oc = helper.createDbOverlay(map); + it("addComment for protein", function () { + var map; + return ServerConnector.getProject().then(function (project) { + map = helper.createCustomMap(project); + helper.createCommentDbOverlay(map); + map.setActiveSubmapId(map.getId()); + map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12)); + return map.openCommentDialog(); + }).then(function () { + var dialog = map.getCommentDialog(); + dialog.setSelectedType(1); + return dialog.addComment(); + }).then(function () { + map.getCommentDialog().destroy(); + }); + }); + + it("retrieveOverlayDetailDataForElement for comment", function () { + var map = helper.createCustomMap(); + helper.createCommentDbOverlay(map); - var identifiedElements = []; - for (var i = 0; i < 3; i++) { var alias = helper.createAlias(map); + alias.setId(329158); map.getModel().addAlias(alias); - var ie = helper.createIdentifiedElement(alias); - ie.setIcon(""); - identifiedElements.push(ie); - } - - oc.getIdentifiedElements = function() { - return Promise.resolve(identifiedElements); - }; - - return map.renderOverlayCollection({ - overlayCollection : oc - }).then(function() { - var aliasMarkerCount = 0; - var markers = oc.markers["ALIAS"]; - for ( var id in markers) { - if (markers.hasOwnProperty(id)) { - aliasMarkerCount++; - } - } - assert.equal(aliasMarkerCount, 3); - }); + var ie = new IdentifiedElement(alias); + + return map.retrieveOverlayDetailDataForElement(ie, { + comment: true + }).then(function (details) { + assert.ok(details); + assert.equal(details.length, 1); + assert.equal(details[0].length, 1); + assert.ok(details[0][0] instanceof Comment); + }); }); - it("for point", function() { - var map = helper.createCustomMap(); + it("getOverlayDataForIdentifiedElement", function () { + var map = helper.createCustomMap(); + var commentOverlay = helper.createCommentDbOverlay(map); - var oc = helper.createDbOverlay(map); - - var javaObj = { - objectId : "Point2D.Double[117.685546875, 204.6923828125001]", - modelId : map.getId(), - type : "POINT", - icon : "marker/empty.png" - }; - - oc.getIdentifiedElements = function() { - return Promise.resolve([ new IdentifiedElement(javaObj) ]); - }; - - return map.renderOverlayCollection({ - overlayCollection : oc - }).then(function() { - var markerCount = 0; - var markers = oc.markers["POINT"]; - for ( var id in markers) { - if (markers.hasOwnProperty(id)) { - markerCount++; - } - } - assert.equal(1, markerCount); - }); + var alias = helper.createAlias(map); + alias.setId(329158); + map.getModel().addAlias(alias); + + var ie = new IdentifiedElement(alias); + + return map.getOverlayDataForIdentifiedElement(ie, { + comment: true + }).then(function (details) { + assert.equal(details.length, 1); + + var overlayData = details[0]; + assert.equal(overlayData.overlay, commentOverlay); + assert.ok(overlayData.data); + assert.equal(overlayData.data.length, 1); + assert.ok(overlayData.data[0] instanceof Comment); + }); }); - it("for reaction", function() { - var map = helper.createCustomMap(); - var reaction = helper.createReaction(); - map.getModel().addReaction(reaction); + it("openSubmap", function () { + var options = helper.createCustomMapOptions(); - var oc = helper.createDbOverlay(map); - - var javaObj = { - objectId : reaction.getId(), - modelId : map.getId(), - type : "Reaction", - }; - - oc.getIdentifiedElements = function() { - return Promise.resolve([ new IdentifiedElement(javaObj) ]); - }; - - return map.renderOverlayCollection({ - overlayCollection : oc - }).then(function() { - var markerCount = 0; - var markers = oc.mapOverlays["REACTION"]; - for ( var id in markers) { - if (markers.hasOwnProperty(id)) { - markerCount++; - } - } - assert.equal(1, markerCount); - }); - }); - }); - - it("clearDbOverlays", function() { - var map = helper.createCustomMap(); - - var oc = helper.createDbOverlay(map); - - var javaObj = { - objectId : "Point2D.Double[117.685546875, 204.6923828125001]", - modelId : map.getId(), - type : "POINT", - icon : "marker/empty.png" - }; - var searchResults = [ new IdentifiedElement(javaObj) ]; - - oc.getIdentifiedElements = function() { - return Promise.resolve(searchResults); - }; - oc.clear = function() { - searchResults = []; - return this.callListeners("onSearch", searchResults); - }; - - return map.renderOverlayCollection({ - overlayCollection : oc - }).then(function() { - - return map.clearDbOverlays(); - }).then(function() { - var markerCount = 0; - for ( var id in oc.pointMarkers) { - if (oc.pointMarkers.hasOwnProperty(id)) { - markerCount++; - } - } + var submodel = helper.createModel(); + options.getProject().getModel().addSubmodel(submodel); - assert.equal(0, markerCount); + var map = new CustomMap(options); + + map.openSubmap(submodel.getId()); + map.destroy(); }); - }); + describe("setCenter", function () { + it("default", function () { + var options = helper.createCustomMapOptions(); - it("getInfoWindowForIdentifiedElement ( reaction)", function() { - var map = helper.createCustomMap(); - var reaction = helper.createReaction(map); - map.getModel().addReaction(reaction); + var map = new CustomMap(options); - var ie = helper.createIdentifiedElement(reaction); + map.setCenter(new google.maps.LatLng(10, 20)); + assert.ok(ServerConnector.getSessionData().getCenter(map.getModel())); + }); - var infoWindow = map.getInfoWindowForIdentifiedElement(ie); + it("on submap", function () { + var options = helper.createCustomMapOptions(); - assert.equal(null, infoWindow); - return map._openInfoWindowForReaction(reaction).then(function() { - infoWindow = map.getInfoWindowForIdentifiedElement(ie); + var submodel = helper.createModel(); + options.getProject().getModel().addSubmodel(submodel); - assert.ok(infoWindow); + var map = new CustomMap(options); + map.openSubmap(submodel.getId()); + map.setCenter(new google.maps.LatLng(10, 20)); + assert.ok(ServerConnector.getSessionData().getCenter(submodel)); + map.destroy(); + }); }); - }); + it("setZoom", function () { + var options = helper.createCustomMapOptions(); - it("right click on map", function() { - var map = helper.createCustomMap(); - map.setContextMenu(new MapContextMenu({ - customMap : map, - element : testDiv - })); + var map = new CustomMap(options); - var mev = { - stop : null, - latLng : new google.maps.LatLng(40.0, -90.0) - }; + map.setZoom(3); + assert.equal(3, ServerConnector.getSessionData().getZoomLevel(map.getModel())); + }); - assert.notOk(map.getActiveSubmapId()); - google.maps.event.trigger(map.getGoogleMap(), 'rightclick', mev); - assert.equal(map.getId(), map.getActiveSubmapId()); + it("removeSelection when invalid model selected", function () { + var options = helper.createCustomMapOptions(); - }); + var map = new CustomMap(options); + map.setActiveSubmapId(-1); - it("left click on map", function() { - var map; - var searchOverlay; - return ServerConnector.getProject().then(function(project) { - map = helper.createCustomMap(project); - searchOverlay = helper.createSearchDbOverlay(map); + try { + map.removeSelection(); + assert.ok(false); + } catch (e) { + assert.ok(e.message.indexOf("Cannot find submap") >= 0); + } + }); - var mev = { - stop : null, - latLng : new google.maps.LatLng(82.32061703407554, -167.25586206896548), - }; - map.getGoogleMap().setZoom(4); - // latLng : new google.maps.LatLng(82.40238643645326, -148.44758620689652) + it("removeSelection", function () { + var options = helper.createCustomMapOptions(); + + var map = new CustomMap(options); + map.setActiveSubmapId(map.getId()); + map.setSelectedArea(new google.maps.Rectangle({})); + + map.removeSelection(); + assert.equal(map.getSelectedArea(), null); + }); + + describe("createMarkerForDbOverlay", function () { + it("update marker", function () { + var map; + var marker1, marker2; + var element = new IdentifiedElement({ + id: 329159, + modelId: 15781, + type: "ALIAS" + }); + var overlay; + return ServerConnector.getProject().then(function (project) { + var options = helper.createCustomMapOptions(project); + map = new CustomMap(options); + overlay = helper.createDbOverlay(map); + return map.createMarkerForDbOverlay(element, overlay); + }).then(function (result) { + marker1 = result; + element.setIcon("another.png"); + return map.createMarkerForDbOverlay(element, overlay); + }).then(function (result) { + marker2 = result; + assert.equal(marker1, marker2); + }); + }); - assert.notOk(map.getActiveSubmapId()); - return google.maps.event.trigger(map.getGoogleMap(), 'click', mev); + it("update surface", function () { + var map; + var marker1, marker2; + var element = new IdentifiedElement({ + id: 329159, + modelId: 15781, + type: "ALIAS" + }); + var overlay; + return ServerConnector.getProject().then(function (project) { + var options = helper.createCustomMapOptions(project); + map = new CustomMap(options); + overlay = helper.createDbOverlay(map); + return map.createSurfaceForDbOverlay(element, overlay); + }).then(function (result) { + marker1 = result; + element.setColor("another.png"); + return map.createSurfaceForDbOverlay(element, overlay); + }).then(function (result) { + marker2 = result; + assert.equal(marker1, marker2); + }); + }); + + it("reaction marker", function () { + var map; + var element = new IdentifiedElement({ + id: 153508, + modelId: 15781, + type: "REACTION" + }); + var overlay; + return ServerConnector.getProject().then(function (project) { + var options = helper.createCustomMapOptions(project); + map = new CustomMap(options); + overlay = helper.createDbOverlay(map); + return map.createMarkerForDbOverlay(element, overlay); + }).then(function (result) { + assert.ok(result.getReactionData()); + }); + }); - }).then(function() { - assert.equal(map.getId(), map.getActiveSubmapId()); - assert.ok(searchOverlay.markers["ALIAS"][329171]); }); - }); + describe("_openInfoWindowForIdentifiedElement", function () { + it("for AliasMarker", function () { + var map; + var alias, marker; + return ServerConnector.getProject().then(function (project) { + map = helper.createCustomMap(project); + return map.getModel().getAliasById(329171); + }).then(function (result) { + alias = result; - it("left click on reaction", function() { - var map; - var searchOverlay; - return ServerConnector.getProject().then(function(project) { - map = helper.createCustomMap(project); - searchOverlay = helper.createSearchDbOverlay(map); + var identifiedElement = new IdentifiedElement(alias); + identifiedElement.setIcon("empty.png"); - var mev = { - stop : null, - latLng : new google.maps.LatLng(82.40238643645326, -148.44758620689652) - }; - map.getGoogleMap().setZoom(4); + marker = new AliasMarker({ + element: identifiedElement, + map: map + }); - assert.notOk(map.getActiveSubmapId()); - return google.maps.event.trigger(map.getGoogleMap(), 'click', mev); - }).then(function() { - assert.equal(map.getId(), map.getActiveSubmapId()); - assert.ok(searchOverlay.mapOverlays["REACTION"][153521]); - assert.ok(searchOverlay.mapOverlays["REACTION"][153521].isShown()); - assert.ok(searchOverlay.markers["ALIAS"][329165]); - }); - }); + return marker.init(); + }).then(function () { + assert.equal(null, map.getAliasInfoWindowById(alias.getId())); + return map._openInfoWindowForIdentifiedElement(marker).then(function () { + assert.ok(map.getAliasInfoWindowById(alias.getId())); + }); + }); + + }); + it("for ReactionMarker", function () { + var map; + var reaction, marker; + return ServerConnector.getProject().then(function (project) { + map = helper.createCustomMap(project); + return map.getModel().getReactionById(153510); + }).then(function (result) { + reaction = result; + + marker = new ReactionMarker({ + element: new IdentifiedElement(reaction), + map: map + }); + return marker.init(); + }).then(function () { + assert.equal(null, map.getReactionInfoWindowById(reaction.getId())); + return map._openInfoWindowForIdentifiedElement(marker); + }).then(function () { + assert.ok(map.getReactionInfoWindowById(reaction.getId())); + }); - it("create polygon through drawingManager", function() { - var map = helper.createCustomMap(); + }); + it("for PointMarker", function () { + + var mockObject = helper.createCustomMap(); - map.setSelectionContextMenu(new SelectionContextMenu({ - customMap : map, - element : testDiv - })); + mockObject.getOverlayDataForPoint = function () { + return Promise.resolve([]); + }; - map.turnOnDrawing(); + var point = new google.maps.Point(2, 3.45); + var pointData = new PointData(point, mockObject.getId()); - var triangleCoords = [ new google.maps.LatLng(25.774, -80.190), new google.maps.LatLng(18.466, -66.118), - new google.maps.LatLng(32.321, -64.757), new google.maps.LatLng(25.774, -80.190), ]; + var pointMarker = new PointMarker({ + element: new IdentifiedElement(pointData), + map: mockObject + }); - // Construct the polygon. - var bermudaTriangle = new google.maps.Polygon({ - paths : triangleCoords, - strokeColor : '#FF0000', - strokeOpacity : 0.8, - strokeWeight : 2, - fillColor : '#FF0000', - fillOpacity : 0.35 - }); - bermudaTriangle.setMap(map.getGoogleMap()); - - var eventParam = { - type : google.maps.drawing.OverlayType.POLYGON, - overlay : bermudaTriangle, - }; - - // check creation complete behaviour - assert.ok(map.isDrawingOn()); - assert.equal(google.maps.drawing.OverlayType.POLYGON, map._drawingManager.getDrawingMode()); - google.maps.event.trigger(map._drawingManager, 'overlaycomplete', eventParam); - assert.ok(map.isDrawingOn()); - assert.equal(null, map._drawingManager.getDrawingMode()); - - // and now check how it behaves when we wiught click on the polygon - var clickEventParam = { - stop : null, - latLng : new google.maps.LatLng(40.0, -90.0) - }; - - assert.notOk(map.getSelectedPolygon()); - - assert.notOk(map.getActiveSubmapId()); - assert.notOk(map.getSelectedArea()); - google.maps.event.trigger(bermudaTriangle, 'rightclick', clickEventParam); - assert.ok(map.getSelectedArea()); - assert.equal(map.getId(), map.getActiveSubmapId()); - - assert.ok(map.getSelectedPolygon()); - - }); - - it("getAliasVisibleLayoutsData", function() { - var mockObject = helper.createCustomMap(); - - var alias = helper.createAlias(); - mockObject.getModel().addAlias(alias); - - var layout = helper.createLayout(); - layout.setInputDataAvailable(true); - layout.setInitialized(true); - mockObject.getModel().addLayout(layout); - - return mockObject.openDataOverlay(layout.getId()).then(function() { - return mockObject.getAliasVisibleLayoutsData(alias.getId()); - }).then(function(layoutAliases) { - assert.equal(layoutAliases.length, 1); - }); - }); - - it("changed coords in map", function() { - var map = helper.createCustomMap(); - var oldCenter = map.getGoogleMap().getCenter(); - var newCenter = new google.maps.LatLng(3, 87); - map.getGoogleMap().setCenter(newCenter); - google.maps.event.trigger(map.getGoogleMap(), "center_changed"); - - var center = ServerConnector.getSessionData(map.getProject()).getCenter(map.getModel()); - assert.ok(center !== oldCenter); - assert.ok(center instanceof google.maps.Point); - }); - - it("refreshComments", function() { - var map = helper.createCustomMap(); - map.getModel().setId(15781); - var commentsOverlay = helper.createCommentDbOverlay(map); - - ServerConnector.getSessionData().setShowComments(true); - return map.refreshComments().then(function() { - assert.notOk(commentsOverlay.markers["POINT"]['(241.01,372.35)']); - assert.ok(commentsOverlay.markers["POINT"]['(643.96,144.09)']); - assert.notOk(commentsOverlay.markers["POINT"]['(216.65,370.00)']); - assert.notOk(commentsOverlay.markers["POINT"]['unkId']); - }); - }); - - it("hide comments", function() { - var map = helper.createCustomMap(); - map.getModel().setId(15781); - var commentsOverlay = helper.createCommentDbOverlay(map); - - ServerConnector.getSessionData().setShowComments(true); - return map.refreshComments().then(function() { - ServerConnector.getSessionData().setShowComments(false); - return map.refreshComments(); - }).then(function() { - assert.notOk(commentsOverlay.markers["POINT"]['(241.01, 372.35)']); - }); - }); - - it("openCommentDialog", function() { - var map = helper.createCustomMap(); - map.getModel().setId(15781); - map.setActiveSubmapId(15781); - map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12)); - return map.openCommentDialog().then(function() { - var types = map.getCommentDialog().getTypes(); - assert.equal(types.length, 6); - var selected = map.getCommentDialog().getSelectedType(); - assert.ok(selected === "<General>"); - - map.getCommentDialog().setSelectedType(1); - selected = map.getCommentDialog().getSelectedType(); - assert.notOk(selected === "<General>"); - - map.getCommentDialog().setSelectedType(2); - selected = map.getCommentDialog().getSelectedType(); - assert.notOk(selected === "<General>"); - }).then(function() { - map.getCommentDialog().destroy(); - }); - }); - - it("addComment", function() { - var map; - return ServerConnector.getProject().then(function(project) { - map = helper.createCustomMap(project); - helper.createCommentDbOverlay(map); - map.setActiveSubmapId(map.getId()); - map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12)); - return map.openCommentDialog(); - }).then(function() { - return map.getCommentDialog().addComment(); - }).then(function() { - map.getCommentDialog().destroy(); - }); - }); - - it("addComment for protein", function() { - var map; - return ServerConnector.getProject().then(function(project) { - map = helper.createCustomMap(project); - helper.createCommentDbOverlay(map); - map.setActiveSubmapId(map.getId()); - map.setActiveSubmapClickCoordinates(new google.maps.Point(2, 12)); - return map.openCommentDialog(); - }).then(function() { - var dialog = map.getCommentDialog(); - dialog.setSelectedType(1); - return dialog.addComment(); - }).then(function() { - map.getCommentDialog().destroy(); - }); - }); - - it("retrieveOverlayDetailDataForElement for comment", function() { - var map = helper.createCustomMap(); - helper.createCommentDbOverlay(map); - - var alias = helper.createAlias(map); - alias.setId(329158); - map.getModel().addAlias(alias); - - var ie = new IdentifiedElement(alias); - - return map.retrieveOverlayDetailDataForElement(ie, { - comment : true - }).then(function(details) { - assert.ok(details); - assert.equal(details.length, 1); - assert.equal(details[0].length, 1); - assert.ok(details[0][0] instanceof Comment); - }); - }); - - it("getOverlayDataForIdentifiedElement", function() { - var map = helper.createCustomMap(); - var commentOverlay = helper.createCommentDbOverlay(map); - - var alias = helper.createAlias(map); - alias.setId(329158); - map.getModel().addAlias(alias); - - var ie = new IdentifiedElement(alias); - - return map.getOverlayDataForIdentifiedElement(ie, { - comment : true - }).then(function(details) { - assert.equal(details.length, 1); - - var overlayData = details[0]; - assert.equal(overlayData.overlay, commentOverlay); - assert.ok(overlayData.data); - assert.equal(overlayData.data.length, 1); - assert.ok(overlayData.data[0] instanceof Comment); - }); - }); - - it("openSubmap", function() { - var options = helper.createCustomMapOptions(); - - var submodel = helper.createModel(); - options.getProject().getModel().addSubmodel(submodel); - - var map = new CustomMap(options); - - map.openSubmap(submodel.getId()); - }); - - it("setCenter", function() { - var options = helper.createCustomMapOptions(); - - var map = new CustomMap(options); - - map.setCenter(new google.maps.LatLng(10, 20)); - assert.ok(ServerConnector.getSessionData().getCenter(map.getModel())); - }); - - it("setCenter on submap", function() { - var options = helper.createCustomMapOptions(); - - var submodel = helper.createModel(); - options.getProject().getModel().addSubmodel(submodel); - - var map = new CustomMap(options); - map.openSubmap(submodel.getId()); - map.setCenter(new google.maps.LatLng(10, 20)); - assert.ok(ServerConnector.getSessionData().getCenter(submodel)); - }); - - it("setZoom", function() { - var options = helper.createCustomMapOptions(); - - var map = new CustomMap(options); - - map.setZoom(3); - assert.equal(3, ServerConnector.getSessionData().getZoomLevel(map.getModel())); - }); - - it("removeSelection when invalid model selected", function() { - var options = helper.createCustomMapOptions(); - - var map = new CustomMap(options); - map.setActiveSubmapId(-1); - - try { - map.removeSelection(); - assert.ok(false); - } catch (e) { - assert.ok(e.message.indexOf("Cannot find submap") >= 0); - } - }); - - it("removeSelection", function() { - var options = helper.createCustomMapOptions(); - - var map = new CustomMap(options); - map.setActiveSubmapId(map.getId()); - map.setSelectedArea(new google.maps.Rectangle({})); - - map.removeSelection(); - assert.equal(map.getSelectedArea(), null); - }); - - describe("createMarkerForDbOverlay", function() { - it("update marker", function() { - var map; - var marker1, marker2; - var element = new IdentifiedElement({ - id : 329159, - modelId : 15781, - type : "ALIAS" - }); - var overlay; - return ServerConnector.getProject().then(function(project) { - var options = helper.createCustomMapOptions(project); - map = new CustomMap(options); - overlay = helper.createDbOverlay(map); - return map.createMarkerForDbOverlay(element, overlay); - }).then(function(result) { - marker1 = result; - element.setIcon("another.png"); - return map.createMarkerForDbOverlay(element, overlay); - }).then(function(result) { - marker2 = result; - assert.equal(marker1, marker2); - }); - }); - - it("update surface", function() { - var map; - var marker1, marker2; - var element = new IdentifiedElement({ - id : 329159, - modelId : 15781, - type : "ALIAS" - }); - var overlay; - return ServerConnector.getProject().then(function(project) { - var options = helper.createCustomMapOptions(project); - map = new CustomMap(options); - overlay = helper.createDbOverlay(map); - return map.createSurfaceForDbOverlay(element, overlay); - }).then(function(result) { - marker1 = result; - element.setColor("another.png"); - return map.createSurfaceForDbOverlay(element, overlay); - }).then(function(result) { - marker2 = result; - assert.equal(marker1, marker2); - }); - }); - - it("reaction marker", function() { - var map; - var element = new IdentifiedElement({ - id : 153508, - modelId : 15781, - type : "REACTION" - }); - var overlay; - return ServerConnector.getProject().then(function(project) { - var options = helper.createCustomMapOptions(project); - map = new CustomMap(options); - overlay = helper.createDbOverlay(map); - return map.createMarkerForDbOverlay(element, overlay); - }).then(function(result) { - assert.ok(result.getReactionData()); - }); - }); - - }); - - describe("_openInfoWindowForIdentifiedElement", function() { - it("for AliasMarker", function() { - var map; - var alias, marker; - return ServerConnector.getProject().then(function(project) { - map = helper.createCustomMap(project); - return map.getModel().getAliasById(329171); - }).then(function(result) { - alias = result; - - var identifiedElement = new IdentifiedElement(alias); - identifiedElement.setIcon("empty.png"); - - marker = new AliasMarker({ - element : identifiedElement, - map : map - }); - - return marker.init(); - }).then(function() { - assert.equal(null, map.getAliasInfoWindowById(alias.getId())); - return map._openInfoWindowForIdentifiedElement(marker).then(function() { - assert.ok(map.getAliasInfoWindowById(alias.getId())); - }); - }); - - }); - it("for ReactionMarker", function() { - var map; - var reaction, marker; - return ServerConnector.getProject().then(function(project) { - map = helper.createCustomMap(project); - return map.getModel().getReactionById(153510); - }).then(function(result) { - reaction = result; - - marker = new ReactionMarker({ - element : new IdentifiedElement(reaction), - map : map - }); - return marker.init(); - }).then(function() { - assert.equal(null, map.getReactionInfoWindowById(reaction.getId())); - return map._openInfoWindowForIdentifiedElement(marker); - }).then(function() { - assert.ok(map.getReactionInfoWindowById(reaction.getId())); - }); - - }); - it("for PointMarker", function() { - - var mockObject = helper.createCustomMap(); - - mockObject.getOverlayDataForPoint = function() { - return Promise.resolve([]); - }; - - var point = new google.maps.Point(2, 3.45); - var pointData = new PointData(point, mockObject.getId()); - - var pointMarker = new PointMarker({ - element : new IdentifiedElement(pointData), - map : mockObject - }); - - return pointMarker.init().then(function() { - assert.equal(null, mockObject.getPointInfoWindowById(pointData.getId())); - return mockObject._openInfoWindowForIdentifiedElement(pointMarker.getIdentifiedElement()); - }).then(function() { - assert.ok(mockObject.getPointInfoWindowById(pointData.getId())); - }); - }); - }); + return pointMarker.init().then(function () { + assert.equal(null, mockObject.getPointInfoWindowById(pointData.getId())); + return mockObject._openInfoWindowForIdentifiedElement(pointMarker.getIdentifiedElement()); + }).then(function () { + assert.ok(mockObject.getPointInfoWindowById(pointData.getId())); + }); + }); + }); }); diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js index 9def5a5e31f28136e0834f2036880d442eee1053..6f041dace449adce3cfef11aeefb079b6f18b6f9 100644 --- a/frontend-js/src/test/js/minerva-test.js +++ b/frontend-js/src/test/js/minerva-test.js @@ -12,382 +12,403 @@ var chai = require('chai'); var assert = chai.assert; var logger = require('./logger'); -describe('minerva global', function() { - beforeEach(function() { - global.scriptDiv = document.createElement("script"); - global.GuiConnector = undefined; - global.ServerConnector = undefined; - document.body.appendChild(global.scriptDiv); - }); - - afterEach(function() { - document.body.removeChild(global.scriptDiv); - global.GuiConnector = GuiConnectorMock; - global.ServerConnector = ServerConnectorMock; - }); - - describe('create', function() { - it('default', function() { - var options = null; - return ServerConnectorMock.getProject().then(function(project) { - options = helper.createCustomMapOptions(project); - - return minerva.create(options); - }).then(function(result) { - assert.ok(result); - assert.equal(logger.getWarnings().length, 0); - }); +describe('minerva global', function () { + beforeEach(function () { + global.scriptDiv = document.createElement("script"); + global.GuiConnector = undefined; + global.ServerConnector = undefined; + document.body.appendChild(global.scriptDiv); }); - it('invalid projectId', function() { - var options = { - projectId : "unknownId", - element : testDiv, - }; - return minerva.create(options).then(function() { - assert.ok(false); - }, function(error) { - assert.ok(error.message.indexOf("Project with given id doesn't exist") >= 0); - }); - }); - }); - it('create with overview', function() { - helper.setUrl("http://test/?id=complex_model_with_images"); - return ServerConnectorMock.getProject().then(function(project) { - var options = helper.createOptions(project); - - return minerva.create(options); - }).then(function(result) { - assert.ok(result); - assert.equal(logger.getWarnings().length, 0); - var showOverviewButton = document.getElementsByName("showOverviewButton")[0]; - showOverviewButton.onclick(); + afterEach(function () { + document.body.removeChild(global.scriptDiv); + global.GuiConnector = GuiConnectorMock; + global.ServerConnector = ServerConnectorMock; }); - }); - it("showComments", function() { - var options = null; - return ServerConnectorMock.getProject().then(function(project) { - options = helper.createCustomMapOptions(project); - return minerva.create(options); - }).then(function() { - var commentCheckbox = document.getElementsByName("commentCheckbox")[0]; - commentCheckbox.checked = true; - return commentCheckbox.onclick(); - }).then(function() { - assert.ok(ServerConnectorMock.getSessionData(options.getProject()).getShowComments()); + describe('create', function () { + it('default', function () { + var options = null; + return ServerConnectorMock.getProject().then(function (project) { + options = helper.createCustomMapOptions(project); + + return minerva.create(options); + }).then(function (result) { + assert.ok(result); + assert.equal(logger.getWarnings().length, 0); + return result.destroy(); + }); + }); + it('invalid projectId', function () { + var options = { + projectId: "unknownId", + element: testDiv, + }; + return minerva.create(options).then(function () { + assert.ok(false); + }, function (error) { + assert.ok(error.message.indexOf("Project with given id doesn't exist") >= 0); + }); + }); + it('with overview', function () { + helper.setUrl("http://test/?id=complex_model_with_images"); + var customMap; + return ServerConnectorMock.getProject().then(function (project) { + var options = helper.createOptions(project); + + return minerva.create(options); + }).then(function (result) { + customMap = result; + assert.ok(result); + assert.equal(logger.getWarnings().length, 0); + var showOverviewButton = document.getElementsByName("showOverviewButton")[0]; + return showOverviewButton.onclick(); + }).then(function () { + return customMap.destroy(); + }); + }); }); - }); - it("contructor with GET zoom param", function() { - helper.setUrl("http://test/?zoom=5"); - var options; - return ServerConnectorMock.getProject().then(function(project) { - options = helper.createCustomMapOptions(project); - return minerva.create(options); - }).then(function() { - var sessionData = ServerConnectorMock.getSessionData(options.getProject()); - assert.equal(sessionData.getZoomLevel(options.getProject().getModel()), 5); - }); - }); - it("contructor with GET coord param", function() { - helper.setUrl("http://test/?x=5&y=6"); - var options; - return ServerConnectorMock.getProject().then(function(project) { - options = helper.createCustomMapOptions(project); - return minerva.create(options); - }).then(function() { - var center = ServerConnectorMock.getSessionData(options.getProject()).getCenter(options.getProject().getModel()); - assert.ok(center instanceof google.maps.Point); - assert.equal(center.x, 5); - assert.equal(center.y, 6); + it("showComments", function () { + var options = null; + var customMap; + return ServerConnectorMock.getProject().then(function (project) { + options = helper.createCustomMapOptions(project); + return minerva.create(options); + }).then(function (result) { + customMap = result; + var commentCheckbox = document.getElementsByName("commentCheckbox")[0]; + commentCheckbox.checked = true; + return commentCheckbox.onclick(); + }).then(function () { + assert.ok(ServerConnectorMock.getSessionData(options.getProject()).getShowComments()); + return customMap.destroy(); + }); }); - }); - - it('create with layout', function() { - var layout; - var project; - return ServerConnectorMock.getProject().then(function(result) { - project = result; - var options = helper.createCustomMapOptions(project); - layout = project.getModel().getLayouts()[1]; + it("constructor with GET zoom param", function () { + helper.setUrl("http://test/?zoom=5"); + var options; + return ServerConnectorMock.getProject().then(function (project) { + options = helper.createCustomMapOptions(project); + return minerva.create(options); + }).then(function (result) { + var sessionData = ServerConnectorMock.getSessionData(options.getProject()); + assert.equal(sessionData.getZoomLevel(options.getProject().getModel()), 5); + return result.destroy(); + }); + }); - helper.setUrl("http://test/?layout=" + layout.getName()); + it("constructor with GET coord param", function () { + helper.setUrl("http://test/?x=5&y=6"); + var options; + return ServerConnectorMock.getProject().then(function (project) { + options = helper.createCustomMapOptions(project); + return minerva.create(options); + }).then(function (result) { + var center = ServerConnectorMock.getSessionData(options.getProject()).getCenter(options.getProject().getModel()); + assert.ok(center instanceof google.maps.Point); + assert.equal(center.x, 5); + assert.equal(center.y, 6); + return result.destroy(); + }); + }); - return minerva.create(options); - }).then(function(result) { - assert.ok(result); - // input file is not available so it's the background - return result.getVisibleDataOverlays(); - }).then(function(visibleDataOverlays) { - // input file is available so it's not the background file but overlay - assert.equal(visibleDataOverlays.length, 0); - assert.equal(ServerConnectorMock.getSessionData(project).getSelectedBackgroundOverlay(), layout.getId()); - assert.equal(logger.getWarnings().length, 0); + it('create with layout', function () { + var layout; + var project; + var customMap; + return ServerConnectorMock.getProject().then(function (result) { + project = result; + var options = helper.createCustomMapOptions(project); + + layout = project.getModel().getLayouts()[1]; + + helper.setUrl("http://test/?layout=" + layout.getName()); + + return minerva.create(options); + }).then(function (result) { + customMap = result; + assert.ok(result); + // input file is not available so it's the background + return result.getVisibleDataOverlays(); + }).then(function (visibleDataOverlays) { + // input file is available so it's not the background file but overlay + assert.equal(visibleDataOverlays.length, 0); + assert.equal(ServerConnectorMock.getSessionData(project).getSelectedBackgroundOverlay(), layout.getId()); + assert.equal(logger.getWarnings().length, 0); + return customMap.destroy(); + }); }); - }); - it('create with layout from session data', function() { - var layout; - return ServerConnectorMock.getProject().then(function(project) { - var options = helper.createCustomMapOptions(project); + it('create with layout from session data', function () { + var layout; + return ServerConnectorMock.getProject().then(function (project) { + var options = helper.createCustomMapOptions(project); - layout = project.getModel().getLayouts()[1]; + layout = project.getModel().getLayouts()[1]; - ServerConnectorMock.getSessionData(project).setSelectedBackgroundOverlay(layout.getId()); + ServerConnectorMock.getSessionData(project).setSelectedBackgroundOverlay(layout.getId()); - return minerva.create(options); - }).then(function() { - assert.equal(ServerConnectorMock.getSessionData().getSelectedBackgroundOverlay(), layout.getId()); + return minerva.create(options); + }).then(function (result) { + assert.equal(ServerConnectorMock.getSessionData().getSelectedBackgroundOverlay(), layout.getId()); + return result.destroy(); + }); }); - }); - it('create with layout 2', function() { - helper.setUrl("http://test/?layout=xxx"); - - return ServerConnectorMock.getProject().then(function(project) { - var options = helper.createCustomMapOptions(project); - return minerva.create(options); - }).then(function(result) { - assert.ok(result); - return result.getVisibleDataOverlays(); - }).then(function(visibleDataOverlays) { - // input file is available so it's not the background file but overlay - assert.equal(visibleDataOverlays.length, 1); - assert.equal(logger.getWarnings().length, 0); + it('create with layout 2', function () { + helper.setUrl("http://test/?layout=xxx"); + var globalObject; + return ServerConnectorMock.getProject().then(function (project) { + var options = helper.createCustomMapOptions(project); + return minerva.create(options); + }).then(function (result) { + globalObject = result; + assert.ok(result); + return result.getVisibleDataOverlays(); + }).then(function (visibleDataOverlays) { + // input file is available so it's not the background file but overlay + assert.equal(visibleDataOverlays.length, 1); + assert.equal(logger.getWarnings().length, 0); + return globalObject.destroy(); + }); }); - }); - it('create with search overlay and GET search param', function() { - helper.setUrl("http://test/?search=s1"); - - return ServerConnectorMock.getProject().then(function(project) { - var options = helper.createCustomMapOptions(project); - return minerva.create(options); - }).then(function(result) { - return result.getHighlightedBioEntities("search"); - }).then(function(elements) { - assert.ok(elements.length > 0); + it('create with search overlay and GET search param', function () { + helper.setUrl("http://test/?search=s1"); + + var globalObject; + return ServerConnectorMock.getProject().then(function (project) { + var options = helper.createCustomMapOptions(project); + return minerva.create(options); + }).then(function (result) { + globalObject = result; + return result.getHighlightedBioEntities("search"); + }).then(function (elements) { + assert.ok(elements.length > 0); + return globalObject.destroy(); + }); }); - }); - it('create with show sumbodel GET param', function() { - helper.setUrl("http://test/?submap=15781"); + it('create with show sumbodel GET param', function () { + helper.setUrl("http://test/?submap=15781"); - var project = helper.createProject(); - project.getModel().setId(15781); + var project = helper.createProject(); + project.getModel().setId(15781); - return ServerConnectorMock.getProject().then(function(project) { - var options = helper.createCustomMapOptions(project); + return ServerConnectorMock.getProject().then(function (project) { + var options = helper.createCustomMapOptions(project); - return minerva.create(options); + return minerva.create(options); + }).then(function(result){ + return result.destroy(); + }); }); - }); - it("contructor with touch enabled", function() { - return ServerConnectorMock.getProject().then(function(project) { - var options = helper.createCustomMapOptions(project); - options.setCustomTouchInterface(true); - return minerva.create(options).then(function(result) { - assert.ok(result); - }); + it("constructor with touch enabled", function () { + return ServerConnectorMock.getProject().then(function (project) { + var options = helper.createCustomMapOptions(project); + options.setCustomTouchInterface(true); + return minerva.create(options).then(function (result) { + assert.ok(result); + return result.destroy(); + }); + }); }); - }); - - it('add search listener', function() { - var callbackOk = false; - var globalResult; - return ServerConnectorMock.getProject().then(function(project) { - var options = helper.createCustomMapOptions(project); - options.setDebug(true); - return minerva.create(options); - }).then(function(result) { - globalResult = result; - result.addListener({ - dbOverlayName : "search", - type : "onSearch", - callback : function(elements) { - assert.ok(elements.length > 0); - assert.ok(elements[0].length !== undefined, "Array of arrays expected as onSearch result"); - callbackOk = true; - } - }); - return result.customMap.getOverlayByName("search").searchByQuery("s1"); - }).then(function() { - assert.ok(callbackOk); - callbackOk = false; - return globalResult.customMap.getOverlayByName("search").searchByQuery("s1"); - }).then(function() { - assert.ok(callbackOk); - callbackOk = false; - var params = { - coordinates : new google.maps.Point(184.79, 365.76), - zoom : 2, - modelId : globalResult.getProject().getModel().getId(), - }; - return globalResult.customMap.getOverlayByName("search").searchByCoordinates(params); - }).then(function() { - assert.ok(callbackOk); + it('add search listener', function () { + var callbackOk = false; + var globalResult; + return ServerConnectorMock.getProject().then(function (project) { + var options = helper.createCustomMapOptions(project); + options.setDebug(true); + return minerva.create(options); + }).then(function (result) { + globalResult = result; + + result.addListener({ + dbOverlayName: "search", + type: "onSearch", + callback: function (elements) { + assert.ok(elements.length > 0); + assert.ok(elements[0].length !== undefined, "Array of arrays expected as onSearch result"); + callbackOk = true; + } + }); + return result.customMap.getOverlayByName("search").searchByQuery("s1"); + }).then(function () { + assert.ok(callbackOk); + callbackOk = false; + return globalResult.customMap.getOverlayByName("search").searchByQuery("s1"); + }).then(function () { + assert.ok(callbackOk); + callbackOk = false; + var params = { + coordinates: new google.maps.Point(184.79, 365.76), + zoom: 2, + modelId: globalResult.getProject().getModel().getId(), + }; + return globalResult.customMap.getOverlayByName("search").searchByCoordinates(params); + }).then(function () { + assert.ok(callbackOk); + return globalResult.destroy(); + }); }); - }); - it('getProject', function() { - return ServerConnectorMock.getProject().then(function(project) { - var options = helper.createCustomMapOptions(project); - return minerva.create(options); - }).then(function(result) { - assert.equal(result.getProject().getProjectId(), "sample"); + it('getProject', function () { + return ServerConnectorMock.getProject().then(function (project) { + var options = helper.createCustomMapOptions(project); + return minerva.create(options); + }).then(function (result) { + assert.equal(result.getProject().getProjectId(), "sample"); + return result.destroy(); + }); }); - }); - it("simple contructor", function() { - var options = { - projectId : "sample", - element : testDiv - }; - var globalResult; - return minerva.create(options).then(function(result) { - globalResult = result; - assert.ok(result); - }).then(function() { - globalResult.destroy(); + it("simple constructor", function () { + var options = { + projectId: "sample", + element: testDiv + }; + return minerva.create(options).then(function (result) { + assert.ok(result); + result.destroy(); + }); }); - }); - it("getBioEntityById", function() { - var options = { - projectId : "sample", - element : testDiv - }; - var globalResult; - return minerva.create(options).then(function(result) { - globalResult = result; - return result.getBioEntityById({ - id : 329177, - modelId : 15781, - type : "ALIAS" - }); - }).then(function(result) { - assert.ok(result); - }).then(function() { - globalResult.destroy(); + it("getBioEntityById", function () { + var options = { + projectId: "sample", + element: testDiv + }; + var globalResult; + return minerva.create(options).then(function (result) { + globalResult = result; + return result.getBioEntityById({ + id: 329177, + modelId: 15781, + type: "ALIAS" + }); + }).then(function (result) { + assert.ok(result); + }).then(function () { + globalResult.destroy(); + }); }); - }); - it("getBioEntityById for reaction", function() { - var options = { - projectId : "sample", - element : testDiv - }; - var globalResult; - return minerva.create(options).then(function(result) { - globalResult = result; - return result.getBioEntityById({ - id : 153508, - modelId : 15781, - type : "REACTION" - }); - }).then(function(result) { - assert.ok(result); - assert.ok(result.getReactants()[0] instanceof Alias); - }).then(function() { - globalResult.destroy(); + it("getBioEntityById for reaction", function () { + var options = { + projectId: "sample", + element: testDiv + }; + var globalResult; + return minerva.create(options).then(function (result) { + globalResult = result; + return result.getBioEntityById({ + id: 153508, + modelId: 15781, + type: "REACTION" + }); + }).then(function (result) { + assert.ok(result); + assert.ok(result.getReactants()[0] instanceof Alias); + }).then(function () { + globalResult.destroy(); + }); }); - }); - it("showElement", function() { - var options = { - projectId : "sample", - element : testDiv - }; - var globalResult; - var elementToShow = { - element : { - id : 329171, - modelId : 15781, - type : "ALIAS" - }, - type : "ICON", - }; - - var elementToShow2 = { - element : { - id : 329171, - modelId : 15781, - type : "ALIAS" - }, - type : "SURFACE", - options : { - color : "#FF0000", - } - }; - return minerva.create(options).then(function(result) { - globalResult = result; - return globalResult.showBioEntity(elementToShow); - }).then(function() { - return globalResult.getHighlightedBioEntities(); - }).then(function(elements) { - assert.equal(elements.length, 1); - return globalResult.showBioEntity(elementToShow2); - }).then(function() { - return globalResult.getHighlightedBioEntities(); - }).then(function(elements) { - assert.equal(elements.length, 2); - return globalResult.hideBioEntity(elementToShow); - }).then(function() { - return globalResult.getHighlightedBioEntities(); - }).then(function(elements) { - assert.equal(elements.length, 1); - return globalResult.hideBioEntity(elementToShow2); - }).then(function() { - return globalResult.getHighlightedBioEntities(); - }).then(function(elements) { - assert.equal(elements.length, 0); - globalResult.destroy(); + it("showElement", function () { + var options = { + projectId: "sample", + element: testDiv + }; + var globalResult; + var elementToShow = { + element: { + id: 329171, + modelId: 15781, + type: "ALIAS" + }, + type: "ICON", + }; + + var elementToShow2 = { + element: { + id: 329171, + modelId: 15781, + type: "ALIAS" + }, + type: "SURFACE", + options: { + color: "#FF0000", + } + }; + return minerva.create(options).then(function (result) { + globalResult = result; + return globalResult.showBioEntity(elementToShow); + }).then(function () { + return globalResult.getHighlightedBioEntities(); + }).then(function (elements) { + assert.equal(elements.length, 1); + return globalResult.showBioEntity(elementToShow2); + }).then(function () { + return globalResult.getHighlightedBioEntities(); + }).then(function (elements) { + assert.equal(elements.length, 2); + return globalResult.hideBioEntity(elementToShow); + }).then(function () { + return globalResult.getHighlightedBioEntities(); + }).then(function (elements) { + assert.equal(elements.length, 1); + return globalResult.hideBioEntity(elementToShow2); + }).then(function () { + return globalResult.getHighlightedBioEntities(); + }).then(function (elements) { + assert.equal(elements.length, 0); + globalResult.destroy(); + }); }); - }); - it("showElement twice", function() { - var options = { - projectId : "sample", - element : testDiv - }; - var globalResult; - var elementToShow = { - element : { - id : 329171, - modelId : 15781, - type : "ALIAS" - }, - type : "ICON", - }; - var elementToShow2 = { - element : { - id : 329171, - modelId : 15781, - type : "ALIAS" - }, - type : "SURFACE", - options : { - color : "#FF0000", - } - }; - - return minerva.create(options).then(function(result) { - globalResult = result; - globalResult.showBioEntity(elementToShow); - return globalResult.showBioEntity(elementToShow2); - }).then(function() { - globalResult.destroy(); - assert.ok(false, "Should be rejected due to fact that there is show in progress"); - }, function(error) { - assert.ok(error.message.indexOf("wait until previous Promise for showBioEntity/hideBioEntity is resolved") >= 0); - globalResult.destroy(); + it("showElement twice", function () { + var options = { + projectId: "sample", + element: testDiv + }; + var globalResult; + var elementToShow = { + element: { + id: 329171, + modelId: 15781, + type: "ALIAS" + }, + type: "ICON", + }; + var elementToShow2 = { + element: { + id: 329171, + modelId: 15781, + type: "ALIAS" + }, + type: "SURFACE", + options: { + color: "#FF0000", + } + }; + + return minerva.create(options).then(function (result) { + globalResult = result; + globalResult.showBioEntity(elementToShow); + return globalResult.showBioEntity(elementToShow2); + }).then(function () { + globalResult.destroy(); + assert.ok(false, "Should be rejected due to fact that there is show in progress"); + }, function (error) { + assert.ok(error.message.indexOf("wait until previous Promise for showBioEntity/hideBioEntity is resolved") >= 0); + globalResult.destroy(); + }); }); - }); it("setCenter", function() { var options = { @@ -413,82 +434,82 @@ describe('minerva global', function() { }); }); - it("setZoom", function() { - var options = { - projectId : "sample", - element : testDiv - }; - var globalResult; - return minerva.create(options).then(function(result) { - globalResult = result; - return result.setZoom({ - modelId : 15781, - zoom : 10, - }); - }).then(function() { - var sessionData = ServerConnectorMock.getSessionData(globalResult.getProject()); - var zoom = sessionData.getZoomLevel(globalResult.getProject().getModel()); - assert.equal(zoom, 10); - }).then(function() { - globalResult.destroy(); + it("setZoom", function () { + var options = { + projectId: "sample", + element: testDiv + }; + var globalResult; + return minerva.create(options).then(function (result) { + globalResult = result; + return result.setZoom({ + modelId: 15781, + zoom: 10, + }); + }).then(function () { + var sessionData = ServerConnectorMock.getSessionData(globalResult.getProject()); + var zoom = sessionData.getZoomLevel(globalResult.getProject().getModel()); + assert.equal(zoom, 10); + }).then(function () { + globalResult.destroy(); + }); }); - }); - it("getConfiguration", function() { - var options = { - projectId : "sample", - element : testDiv - }; - var globalResult; - return minerva.create(options).then(function(result) { - globalResult = result; - return result.getConfiguration(); - }).then(function(conf) { - assert.ok(conf.getElementTypes().length > 0); - }).then(function() { - globalResult.destroy(); + it("getConfiguration", function () { + var options = { + projectId: "sample", + element: testDiv + }; + var globalResult; + return minerva.create(options).then(function (result) { + globalResult = result; + return result.getConfiguration(); + }).then(function (conf) { + assert.ok(conf.getElementTypes().length > 0); + }).then(function () { + globalResult.destroy(); + }); }); - }); - it("getReactionByParticipantId", function() { - var ie = { - modelId : 15781, - type : "ALIAS", - id : 329167 - }; + it("getReactionByParticipantId", function () { + var ie = { + modelId: 15781, + type: "ALIAS", + id: 329167 + }; + + var options = { + projectId: "sample", + element: testDiv + }; + var globalResult; + return minerva.create(options).then(function (result) { + globalResult = result; + return result.getReactionsWithElement(ie); + }).then(function (reactions) { + assert.equal(reactions.length, 5); + }).then(function () { + globalResult.destroy(); + }); - var options = { - projectId : "sample", - element : testDiv - }; - var globalResult; - return minerva.create(options).then(function(result) { - globalResult = result; - return result.getReactionsWithElement(ie); - }).then(function(reactions) { - assert.equal(reactions.length, 5); - }).then(function() { - globalResult.destroy(); }); - }); - - it('create Export', function() { - var options = null; - return ServerConnectorMock.getProject().then(function(project) { - options = helper.createCustomMapOptions(project); + it('create Export', function () { + var options = null; + return ServerConnectorMock.getProject().then(function (project) { + options = helper.createCustomMapOptions(project); - return minerva.createExport(options); - }).then(function(result) { - assert.ok(result); - assert.equal(logger.getWarnings().length, 0); + return minerva.createExport(options); + }).then(function (result) { + assert.ok(result); + assert.equal(logger.getWarnings().length, 0); + }); }); - }); - it('create Admin', function() { - var options = null; - return ServerConnectorMock.getProject().then(function(project) { - options = helper.createCustomMapOptions(project); + it('create Admin', function () { + var options = null; + return ServerConnectorMock.getProject().then(function (project) { + options = helper.createCustomMapOptions(project); return minerva.createAdmin(options); }).then(function(result) { diff --git a/frontend-js/src/test/js/mocha-config.js b/frontend-js/src/test/js/mocha-config.js index 2386f2d30d9a31862b0f3c8e1843f9e5a9bd10a3..ea9699eb20e7507f3deeb8d8d34d355c68c5fdcf 100644 --- a/frontend-js/src/test/js/mocha-config.js +++ b/frontend-js/src/test/js/mocha-config.js @@ -3,13 +3,16 @@ var Promise = require("bluebird"); var Cookies = require('js-cookie'); +var chai = require('chai'); +var assert = chai.assert; + var Helper = require('./helper'); // GLOBAL configuration global.navigator = { - userAgent : 'node.js', - appName : 'MinervaUnitTest', - appVersion : '0.0.1', + userAgent: 'node.js', + appName: 'MinervaUnitTest', + appVersion: '0.0.1', }; @@ -29,39 +32,39 @@ global.MouseEvent = window.MouseEvent; global.FileReader = window.FileReader; var originalCreateElement = document.createElement; -document.createElement = function(arg) { - var result = originalCreateElement.call(this, arg); - // woraround for: https://github.com/tmpvar/jsdom/issues/961 - if ("li" === arg) { - result.dataset = []; - } - return result; +document.createElement = function (arg) { + var result = originalCreateElement.call(this, arg); + // woraround for: https://github.com/tmpvar/jsdom/issues/961 + if ("li" === arg) { + result.dataset = []; + } + return result; }; -window.open = function() { - var result = {}; - result.focus = function() { +window.open = function () { + var result = {}; + result.focus = function () { - }; - return result; + }; + return result; }; -window.URL.createObjectURL = function(){ - +window.URL.createObjectURL = function () { + }; // pileup is using heavily some browser defined javascript var pileup = require('pileup'); -pileup.create = function() { - return { - destroy : function() { - } - }; +pileup.create = function () { + return { + destroy: function () { + } + }; }; -pileup.formats.twoBit = function() { - return {}; +pileup.formats.twoBit = function () { + return {}; }; -pileup.formats.bigBed = function() { - return {}; +pileup.formats.bigBed = function () { + return {}; }; // --- @@ -81,50 +84,57 @@ global.ServerConnector = require('./ServerConnector-mock'); var logger = require('./logger'); function removeCookies() { - var cookies = Cookies.get(); - for ( var cookie in cookies) { - Cookies.remove(cookie); - } + var cookies = Cookies.get(); + for (var cookie in cookies) { + Cookies.remove(cookie); + } } function mockBootstrap() { - $.fn.typeahead = function() { - logger.debug("Mock typeahead function call"); - }; + $.fn.typeahead = function () { + logger.debug("Mock typeahead function call"); + }; } -before(function() { - Promise.longStackTraces(); +before(function () { + Promise.longStackTraces(); - mockBootstrap(); + mockBootstrap(); }); -beforeEach(function() { - window.onresize = undefined; +beforeEach(function () { + window.onresize = undefined; - logger.flushBuffer(); + logger.flushBuffer(); - removeCookies(); + removeCookies(); - ServerConnector.init(); + ServerConnector.init(); - ServerConnector.getSessionData(null).setToken("MOCK_TOKEN_ID"); - ServerConnector.getSessionData(null).setLogin("anonymous"); + ServerConnector.getSessionData(null).setToken("MOCK_TOKEN_ID"); + ServerConnector.getSessionData(null).setLogin("anonymous"); - global.testDiv = document.createElement("div"); - global.testDiv.id = "test"; - document.body.appendChild(testDiv); + global.testDiv = document.createElement("div"); + global.testDiv.id = "test"; + document.body.appendChild(testDiv); - return ServerConnector.getConfiguration().then(function(configuration) { - global.helper = new Helper(configuration); - helper.setUrl("http://test/"); - GuiConnector.init(); - }); + return ServerConnector.getConfiguration().then(function (configuration) { + global.helper = new Helper(configuration); + helper.setUrl("http://test/"); + GuiConnector.init(); + }); }); -afterEach(function() { - document.body.removeChild(global.testDiv); - delete global.testDiv; +afterEach(function () { + document.body.removeChild(global.testDiv); + delete global.testDiv; + if (document.body.hasChildNodes()) { + var content = document.body.innerHTML; + document.body.innerHTML = ""; + if (this.currentTest.state !== 'failed') { + this.test.error(new Error("Test didn't left clean document. Found: " + content)); + } + } });