diff --git a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/ConverterTest.java b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/ConverterTest.java index 13aac7e4274322704c0f9a06b4f4c245a59a844d..af923b647b8791a013b4a3e7c532d40c9e38c870 100644 --- a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/ConverterTest.java +++ b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/ConverterTest.java @@ -1,9 +1,17 @@ package lcsb.mapviewer.converter.graphics; import java.awt.Color; +import java.awt.Desktop; +import java.awt.Graphics2D; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +import javax.imageio.ImageIO; import org.junit.After; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import lcsb.mapviewer.commands.ColorExtractor; @@ -37,4 +45,42 @@ public class ConverterTest { } } + @Test + @Ignore("it's just code for generating scale") + public void testX() throws IOException { + BufferedImage tmpBI = new BufferedImage(900, 100, BufferedImage.TYPE_INT_ARGB); + Graphics2D tmpGraphics = tmpBI.createGraphics(); + int startX = 10; + int startY = 15; + int stepSize = 40; + int height = 25; + tmpGraphics.setColor(Color.BLACK); + for (int i = 0; i < 21; i++) { + tmpGraphics.drawLine(startX + i * stepSize, height+startY, startX + i * stepSize, height*2); + String str = ""+((double)(i-10))/((double)(10)); + tmpGraphics.drawString(str, startX + i * stepSize, height*2+startY); + } + for (int i = 0; i < 10 * stepSize; i++) { + double ratio = ((double) i) / ((double) (10 * stepSize)); + tmpGraphics.setBackground(getColor(ratio, Color.BLUE, Color.WHITE)); + tmpGraphics.setColor(getColor(ratio, Color.BLUE, Color.WHITE)); + tmpGraphics.drawRect(startX + i, startY , 1, height); + } + for (int i = 0; i < 10 * stepSize; i++) { + double ratio = ((double) i) / ((double) (10 * stepSize)); + tmpGraphics.setBackground(getColor(ratio, Color.WHITE, Color.RED)); + tmpGraphics.setColor(getColor(ratio, Color.WHITE, Color.RED)); + tmpGraphics.drawRect(10 * stepSize + startX + i, startY , 1, height); + } + ImageIO.write(tmpBI, "PNG", new File("tmp.png")); + Desktop.getDesktop().open(new File("tmp.png")); + } + + private Color getColor(double d, Color startColor, Color endColor) { + + return new Color((int) (startColor.getRed() + d * (endColor.getRed() - startColor.getRed())), // + (int) (startColor.getGreen() + d * (endColor.getGreen() - startColor.getGreen())), // + (int) (startColor.getBlue() + d * (endColor.getBlue() - startColor.getBlue()))); + } + } diff --git a/frontend-js/.idea/dictionaries/piotr_gawron.xml b/frontend-js/.idea/dictionaries/piotr_gawron.xml index 628347a73535f38a4fee58a4cd3a3add9a0caef5..c7f1009a8b722df266d5b5cc34e9a795c65480f1 100644 --- a/frontend-js/.idea/dictionaries/piotr_gawron.xml +++ b/frontend-js/.idea/dictionaries/piotr_gawron.xml @@ -26,6 +26,7 @@ <w>jstree</w> <w>kegg</w> <w>lcsb</w> + <w>mailto</w> <w>mapviewer</w> <w>mirbase</w> <w>mirtarbase</w> diff --git a/frontend-js/src/main/js/GuiConnector.js b/frontend-js/src/main/js/GuiConnector.js index 8fdf977c82e8948b80656700626d808ee5e562cc..43406b51aa027a542c0a5c7bb22ae22653be023b 100644 --- a/frontend-js/src/main/js/GuiConnector.js +++ b/frontend-js/src/main/js/GuiConnector.js @@ -6,6 +6,8 @@ var Functions = require('./Functions'); var SecurityError = require('./SecurityError'); var ValidationError = require('./ValidationError'); var GuiMessageError = require('./gui/GuiMessageError'); +var NetworkError = require('./NetworkError'); + /** * This static global object contains set of functions that returns/set data in @@ -182,7 +184,9 @@ GuiConnector.prototype.alert = function (error) { } var message = error; if (message instanceof SecurityError) { - message = error.message + "<p>Please <a href=\"login.xhtml\">login</a> to access this resource.</p>"; + message = error.message + "<p>Please <a href=\"login.xhtml\">login</a> to access this resource</p>"; + } else if (message instanceof NetworkError && (error.message === "XHR error" || error.message === "Failed to fetch")) { + message = "File to big.<br>Please reduce file size or contact administrators."; } else if (message instanceof ValidationError) { message = error.message; } else if (message instanceof GuiMessageError) { diff --git a/frontend-js/src/main/js/gui/AddOverlayDialog.js b/frontend-js/src/main/js/gui/AddOverlayDialog.js index ef8a4e1f45e735e23b59ad9965ae0a1ea70f2940..937538e0ea799d3f991e4443b13b437429c77351 100644 --- a/frontend-js/src/main/js/gui/AddOverlayDialog.js +++ b/frontend-js/src/main/js/gui/AddOverlayDialog.js @@ -176,6 +176,8 @@ AddOverlayDialog.prototype.open = function() { var fileContent = self.getFileContent(); if (fileContent === null) { GuiConnector.alert("Neither file was selected nor data was entered"); + } else if (fileContent.length > 1024 * 256) { + GuiConnector.alert("File to big.<br>Please reduce file size or contact administrators."); } else { return self.addOverlay().then(function(result) { $(dialog).dialog("close"); diff --git a/frontend-js/src/main/js/gui/leftPanel/ChemicalPanel.js b/frontend-js/src/main/js/gui/leftPanel/ChemicalPanel.js index b9302e8c6fe65e48cc7425277a1a736ace44db04..034f18ef03b5a51a6fd1484e6b536faa26d1b64f 100644 --- a/frontend-js/src/main/js/gui/leftPanel/ChemicalPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/ChemicalPanel.js @@ -10,11 +10,12 @@ var PanelControlElementType = require('../PanelControlElementType'); function ChemicalPanel(params) { params.panelName = "chemical"; - params.helpTip = '<p>source: Comparative Toxicogenomics Database <a target="_ctd" href="http://ctdbase.org/">ctdbase.org</a></p>' - + '<p>use only the full name of chemicals according to <a target="_ctd_chemicals" href="http://ctdbase.org/voc.go?type=chem"> ctdbase/chem</a> for search</p>' - + '<p>only curated associations between genes and chemicals with direct evidence to ' - + 'Parkinson Disease (<a href="http://bioportal.bioontology.org/ontologies/1351?p=terms&conceptid=D010300" target="_blank">D010300</a>) are displayed</p>' - + '<p>separate multiple search by semicolon'; + params.helpTip = '<p>source: Comparative Toxicogenomics Database <a target="_ctd" href="http://ctdbase.org/">ctdbase.org</a></p>' + + '<p>only associations between genes and chemicals with direct evidence to ' + + 'Parkinson Disease (<a href="http://bioportal.bioontology.org/ontologies/1351?p=terms&conceptid=D010300" target="_blank">D010300</a>) are displayed</p>' + + '<p>use only the full name of chemicals according to <a target="_ctd_chemicals" href="http://ctdbase.org/voc.go?type=chem"> ctdbase/chem</a> for search</p>' + + 'if the chemical name includes comma(s), place a semicolon behind the name to avoid a segmentation of the name</p>' + + '<p>separate multiple search by semicolon'; params.placeholder = "full chemical name (CTD)"; AbstractDbPanel.call(this, params); @@ -38,8 +39,7 @@ ChemicalPanel.prototype.createPreamble = function (chemical) { result.appendChild(guiUtils.createParamLine("Description: ", chemical.getDescription())); result.appendChild(guiUtils.createArrayParamLine("Synonyms: ", chemical.getSynonyms())); result.appendChild(guiUtils.createParamLine("Direct Evidence: ", chemical.getDirectEvidence())); - result.appendChild(guiUtils - .createAnnotations("Direct Evidence Publications: ", chemical.getDirectEvidenceReferences())); + result.appendChild(guiUtils.createAnnotations("Direct Evidence Publications: ", chemical.getDirectEvidenceReferences())); result.appendChild(guiUtils.createAnnotations("Sources: ", chemical.getReferences())); result.appendChild(guiUtils.createNewLine()); } diff --git a/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js b/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js index 52dbe8ad181f0fe72c19dbba848b0aaab071a1ea..02a6ba3c99d4c402811aa41d33cea96fb902c9f9 100644 --- a/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js +++ b/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js @@ -316,7 +316,8 @@ ProjectInfoPanel.prototype._createUserDataTab = function () { className: "searchPanel", style: "display:none", content: '<h3><img src="./resources/images/profile.png" border="0" align="left"/>' - + '<br/>User data</h3><br/>YOU ARE NOT LOGGED IN.<br/>' + '<center><button>LOGIN</button></center>', + + '<br/>User data</h3><br/>YOU ARE NOT LOGGED IN.<br/>' + '<center><button>LOGIN</button></center>' + + '<br/><a hreg="#" name="requestAccount">Request an account</a>', }); $(loginTabDiv).find("button")[0].onclick = function () { return self.getParent().getLoginDialog().open(); @@ -353,7 +354,12 @@ ProjectInfoPanel.prototype.showUserProfilePage = function (user) { }; ProjectInfoPanel.prototype.init = function () { - return this.refresh(); + var self = this; + return ServerConnector.getConfigurationParam(ConfigurationType.REQUEST_ACCOUNT_EMAIL).then(function (value) { + var link = $("[name=requestAccount]", self.getElement()); + link.attr("href", "mailto:" + value + "?subject=MINERVA account request"); + return self.refresh(); + }); }; ProjectInfoPanel.prototype.destroy = function () {