From 1bc6dee6b4de92ca081ccae3e0fb8bb9c3ce3c19 Mon Sep 17 00:00:00 2001 From: Yusra Haider Date: Fri, 17 Apr 2020 13:15:40 +0100 Subject: [PATCH 1/2] added code for displaying citations along with export options in the pathway browser --- .../web/pwp/client/AppController.java | 7 + .../pwp/client/common/PathwayPortalTool.java | 3 +- .../tools/citation/CitationLauncher.java | 33 ++++ .../citation/CitationLauncherDisplay.java | 185 ++++++++++++++++++ .../citation/CitationLauncherPresenter.java | 96 +++++++++ .../client/tools/citation/ExportFormat.java | 47 +++++ .../tools/launcher/ToolLauncherDisplay.java | 40 +++- .../tools/citation/CitationLauncher.css | 83 ++++++++ .../tools/citation/images/citationIcon.png | Bin 0 -> 3801 bytes .../tools/citation/images/close_clicked.png | Bin 0 -> 3789 bytes .../tools/citation/images/close_hovered.png | Bin 0 -> 3772 bytes .../tools/citation/images/close_normal.png | Bin 0 -> 3706 bytes .../client/tools/launcher/ToolLauncher.css | 45 +++++ .../client/tools/launcher/images/citation.png | Bin 0 -> 2371 bytes 14 files changed, 532 insertions(+), 7 deletions(-) create mode 100644 src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncher.java create mode 100644 src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncherDisplay.java create mode 100644 src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncherPresenter.java create mode 100644 src/main/java/org/reactome/web/pwp/client/tools/citation/ExportFormat.java create mode 100644 src/main/resources/org/reactome/web/pwp/client/tools/citation/CitationLauncher.css create mode 100644 src/main/resources/org/reactome/web/pwp/client/tools/citation/images/citationIcon.png create mode 100644 src/main/resources/org/reactome/web/pwp/client/tools/citation/images/close_clicked.png create mode 100644 src/main/resources/org/reactome/web/pwp/client/tools/citation/images/close_hovered.png create mode 100644 src/main/resources/org/reactome/web/pwp/client/tools/citation/images/close_normal.png create mode 100644 src/main/resources/org/reactome/web/pwp/client/tools/launcher/images/citation.png diff --git a/src/main/java/org/reactome/web/pwp/client/AppController.java b/src/main/java/org/reactome/web/pwp/client/AppController.java index 3b1c6941..ca3bc4b4 100644 --- a/src/main/java/org/reactome/web/pwp/client/AppController.java +++ b/src/main/java/org/reactome/web/pwp/client/AppController.java @@ -46,6 +46,9 @@ import org.reactome.web.pwp.client.tools.analysis.AnalysisLauncher; import org.reactome.web.pwp.client.tools.analysis.AnalysisLauncherDisplay; import org.reactome.web.pwp.client.tools.analysis.AnalysisLauncherPresenter; +import org.reactome.web.pwp.client.tools.citation.CitationLauncher; +import org.reactome.web.pwp.client.tools.citation.CitationLauncherDisplay; +import org.reactome.web.pwp.client.tools.citation.CitationLauncherPresenter; import org.reactome.web.pwp.client.tools.launcher.ToolLauncher; import org.reactome.web.pwp.client.tools.launcher.ToolLauncherDisplay; import org.reactome.web.pwp.client.tools.launcher.ToolLauncherPresenter; @@ -207,6 +210,10 @@ private void initialiseDetailsTabsList(){ private void initialiseTools(){ AnalysisLauncher.Display analysisDisplay = new AnalysisLauncherDisplay(); new AnalysisLauncherPresenter(this.eventBus, analysisDisplay); + + CitationLauncher.Display citationDisplay = new CitationLauncherDisplay(); + new CitationLauncherPresenter(this.eventBus, citationDisplay); + } private void printMessage(){ diff --git a/src/main/java/org/reactome/web/pwp/client/common/PathwayPortalTool.java b/src/main/java/org/reactome/web/pwp/client/common/PathwayPortalTool.java index 9751a524..c269b811 100644 --- a/src/main/java/org/reactome/web/pwp/client/common/PathwayPortalTool.java +++ b/src/main/java/org/reactome/web/pwp/client/common/PathwayPortalTool.java @@ -6,7 +6,8 @@ public enum PathwayPortalTool { NONE ("XX", "No Tool"), - ANALYSIS ("AT", "Analysis Tool"); + ANALYSIS ("AT", "Analysis Tool"), + CITATION ("CT", "Cite Us!"); private String code; private String title; diff --git a/src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncher.java b/src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncher.java new file mode 100644 index 00000000..f8b78c81 --- /dev/null +++ b/src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncher.java @@ -0,0 +1,33 @@ +package org.reactome.web.pwp.client.tools.citation; + +import org.reactome.web.pwp.client.common.module.BrowserModule; + +/** + * @author Yusra Haider + */ + +public interface CitationLauncher { + + interface Presenter extends BrowserModule.Presenter { + void displayClosed(); + } + + interface Display extends BrowserModule.Display { + void hide(); + + void center(); + + void show(); + + void setPresenter(CitationLauncher.Presenter presenter); + + void setCitation(String citation); + + void setExportBar(String id); + } +} + + + + + diff --git a/src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncherDisplay.java b/src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncherDisplay.java new file mode 100644 index 00000000..98926bb7 --- /dev/null +++ b/src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncherDisplay.java @@ -0,0 +1,185 @@ +package org.reactome.web.pwp.client.tools.citation; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.event.logical.shared.CloseEvent; +import com.google.gwt.event.logical.shared.CloseHandler; +import com.google.gwt.event.logical.shared.ResizeEvent; +import com.google.gwt.event.logical.shared.ResizeHandler; +import com.google.gwt.i18n.client.DateTimeFormat; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.CssResource; +import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.safehtml.shared.SafeHtmlUtils; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.ui.*; +import org.reactome.web.pwp.client.common.utils.Console; +import org.reactome.web.pwp.client.tools.launcher.LauncherButton; + +import java.util.Date; + +public class CitationLauncherDisplay extends PopupPanel implements CitationLauncher.Display, CloseHandler, + ResizeHandler { + + private CitationLauncher.Presenter presenter; + private Label citation; + private HorizontalPanel buttonBar; + + + public CitationLauncherDisplay() { + super(true, true); + setAnimationEnabled(true); + setGlassEnabled(true); + setAutoHideOnHistoryEventsEnabled(false); + addStyleName(RESOURCES.getCSS().popupPanel()); + Window.addResizeHandler(this); + + int width = (int) Math.round(Window.getClientWidth() * 0.9); + int height = (int) Math.round(Window.getClientHeight() * 0.9); + this.setWidth(width + "px"); + this.setHeight(height + "px"); + + FlowPanel mainPanel = new FlowPanel(); // Main panel + mainPanel.addStyleName(RESOURCES.getCSS().mainPanel()); + mainPanel.add(setTitlePanel()); // Title panel with heading & close button + + FlowPanel citationPanel = new FlowPanel(); // panel that will contain the citation text + citationPanel.addStyleName(RESOURCES.getCSS().citationPanel()); + citation = new Label(); + citation.addStyleName(RESOURCES.getCSS().citationText()); + citationPanel.add(citation); + mainPanel.add(citationPanel); + + buttonBar = new HorizontalPanel(); + FlowPanel buttonPanel = new FlowPanel(); + buttonPanel.addStyleName(RESOURCES.getCSS().buttonPanel()); + buttonPanel.add(buttonBar); + mainPanel.add(buttonPanel); + this.addCloseHandler(this); + this.add(mainPanel); + } + + @Override + public void show() { + Console.info("in method CitationLauncherDisplay show"); + super.show(); + } + + public void setCitation(String citation) { + this.citation.setText(citation); + } + + @Override + public void onClose(CloseEvent event) { + presenter.displayClosed(); + buttonBar = new HorizontalPanel(); + } + + @Override + public void onResize(ResizeEvent event) { + if (isVisible()) { + int width = (int) Math.round(RootLayoutPanel.get().getOffsetWidth() * 0.9); + int height = (int) Math.round(RootLayoutPanel.get().getOffsetHeight() * 0.9); + this.setWidth(width + "px"); + this.setHeight(height + "px"); + } + } + + @Override + public void setPresenter(CitationLauncher.Presenter presenter) { + this.presenter = presenter; + } + + // sets the panel title and close button + private Widget setTitlePanel() { + FlowPanel header = new FlowPanel(); + header.setStyleName(RESOURCES.getCSS().header()); + header.addStyleName(RESOURCES.getCSS().unselectable()); + Label title = new Label("Cite Us!"); + title.setStyleName(RESOURCES.getCSS().headerText()); + Button closeBtn = new LauncherButton("Close citation modal", RESOURCES.getCSS().close(), clickEvent -> CitationLauncherDisplay.this.hide()); + header.add(title); + header.add(closeBtn); + return header; + } + + public void setExportBar(String id) { + for (ExportFormat ef : ExportFormat.values()) { + buttonBar.add(getExportButton(ef.getIcon(), ef.getTitle(), ef.getUrl() + "&id=" + id + + "&dateAccessed=" + DateTimeFormat.getFormat("E MMM dd yyyy").format(new Date()), + "reactome_citation_" + id + ef.getExt())); + } + } + + public Anchor getExportButton(ImageResource icon, String title, String url, String filename) { + Anchor anchor = new Anchor(SafeHtmlUtils.fromTrustedString(new Image(icon).toString()), url, "_blank"); + anchor.getElement().setAttribute("rel", "noindex,nofollow"); + anchor.getElement().setAttribute("download", filename); + anchor.setTitle(title); + return anchor; + } + + public Anchor getDownloadButton() { + Anchor anchor = new Anchor(); + return null; + } + + + public static CitationLauncherDisplay.Resources RESOURCES; + + static { + RESOURCES = GWT.create(CitationLauncherDisplay.Resources.class); + RESOURCES.getCSS().ensureInjected(); + } + + /** + * A ClientBundle of resources used by this widget. + */ + public interface Resources extends ClientBundle { + /** + * The styles used in this widget. + */ + @Source(CitationLauncherDisplay.ResourceCSS.CSS) + CitationLauncherDisplay.ResourceCSS getCSS(); + + @Source("images/citationIcon.png") + ImageResource citationIcon(); + + @Source("images/close_clicked.png") + ImageResource closeClicked(); + + @Source("images/close_hovered.png") + ImageResource closeHovered(); + + @Source("images/close_normal.png") + ImageResource closeNormal(); + } + + /** + * Styles used by this widget. + */ + @CssResource.ImportedWithPrefix("pwp-CitationLauncher") + public interface ResourceCSS extends CssResource { + /** + * The path to the default CSS styles used by this resource. + */ + String CSS = "org/reactome/web/pwp/client/tools/citation/CitationLauncher.css"; + + String popupPanel(); + + String mainPanel(); + + String citationPanel(); + + String header(); + + String headerText(); + + String citationText(); + + String close(); + + String unselectable(); + + String buttonPanel(); + } +} diff --git a/src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncherPresenter.java b/src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncherPresenter.java new file mode 100644 index 00000000..0bad8f77 --- /dev/null +++ b/src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncherPresenter.java @@ -0,0 +1,96 @@ +package org.reactome.web.pwp.client.tools.citation; + +import com.google.gwt.event.shared.EventBus; +import org.reactome.web.pwp.client.common.PathwayPortalTool; +import org.reactome.web.pwp.client.common.events.BrowserReadyEvent; +import org.reactome.web.pwp.client.common.events.StateChangedEvent; +import org.reactome.web.pwp.client.common.events.ToolSelectedEvent; +import org.reactome.web.pwp.client.common.handlers.BrowserReadyHandler; +import org.reactome.web.pwp.client.common.module.AbstractPresenter; +import org.reactome.web.pwp.model.client.common.ContentClientHandler; +import org.reactome.web.pwp.model.client.content.ContentClient; +import org.reactome.web.pwp.model.client.content.ContentClientError; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + + +public class CitationLauncherPresenter extends AbstractPresenter implements CitationLauncher.Presenter, BrowserReadyHandler { + + private CitationLauncher.Display display; + private static final Map CITATIONS; + private static final String PATHWAY_ANALYSIS_CITATION_ID = "28249561"; + private static final String DIAGRAM_VIEWER_CITATION_ID = "29186351"; + + static { + Map citations = new HashMap<>(); + citations.put("28249561", "Fabregat A, Sidiropoulos K, Viteri G, Forner O, Marin-Garcia P, Arnau V, D'Eustachio P, Stein L, Hermjakob H. Reactome pathway analysis: a high-performance in-memory approach. BMC Bioinformatics. 2017 Mar 2;18(1):142. doi: 10.1186/s12859-017-1559-2. PubMed PMID: 28249561"); + citations.put("29186351", "Fabregat A, Sidiropoulos K, Viteri G, Marin-Garcia P, Ping P, Stein L, D'Eustachio P, Hermjakob H. Reactome diagram viewer: data structures and strategies to boost performance. Bioinformatics. 2018 Apr 1;34(7):1208-1214. doi: 10.1093/bioinformatics/btx752. PubMed PMID: 29186351"); + CITATIONS = Collections.unmodifiableMap(citations); + } + + + public CitationLauncherPresenter(EventBus eventBus, CitationLauncher.Display display) { + super(eventBus); + this.display = display; + this.display.setPresenter(this); + this.eventBus.addHandler(BrowserReadyEvent.TYPE, this); + } + + @Override + public void displayClosed() { + this.eventBus.fireEventFromSource(new ToolSelectedEvent(PathwayPortalTool.NONE), this); + } + + @Override + public void onBrowserReady(BrowserReadyEvent event) { + // do your stuff + } + + @Override + public void onStateChanged(StateChangedEvent event) { + PathwayPortalTool tool = event.getState().getTool(); + if (tool.equals(PathwayPortalTool.CITATION)) { + if (event.getState().getAnalysisStatus().getToken() != null) getCitation(PATHWAY_ANALYSIS_CITATION_ID); + else getCitation(DIAGRAM_VIEWER_CITATION_ID); + } else { + display.hide(); + } + } + + private void showDisplay() { + display.show(); + display.center(); + } + + private void getCitation(String id) { + ContentClient.getStaticCitation(id, new ContentClientHandler.Citation() { + @Override + public void onCitationTextLoaded(String citation) { + // happy flow + display.setCitation(citation); + // call method for including the export buttons on display + display.setExportBar(id); + showDisplay(); + } + + @Override + public void onContentClientException(Type type, String message) { + display.setCitation(CITATIONS.get(id)); + showDisplay(); + //TODO add code for showing banner + } + + @Override + public void onContentClientError(ContentClientError error) { + display.setCitation(CITATIONS.get(id)); + showDisplay(); + //TODO add code for showing banner + } + }); + } + +} + + diff --git a/src/main/java/org/reactome/web/pwp/client/tools/citation/ExportFormat.java b/src/main/java/org/reactome/web/pwp/client/tools/citation/ExportFormat.java new file mode 100644 index 00000000..f45b3c12 --- /dev/null +++ b/src/main/java/org/reactome/web/pwp/client/tools/citation/ExportFormat.java @@ -0,0 +1,47 @@ +package org.reactome.web.pwp.client.tools.citation; + +import com.google.gwt.resources.client.ImageResource; +import org.reactome.web.pwp.client.common.CommonImages; +import org.reactome.web.pwp.model.client.common.ContentClientAbstract; + +public enum ExportFormat { + //TODO fix the icons + + BIBTEX("BibTeX", ".bib", CommonImages.INSTANCE.download(), ContentClientAbstract.CONTENT_SERVICE + "citation/export?" + "isPathway=" + "false" + "&" + "ext=" + "bib", "View / Download As BibTeX"), + RIS("RIS", ".ris", CommonImages.INSTANCE.download(), ContentClientAbstract.CONTENT_SERVICE + "citation/export?" + "isPathway=" + "false" + "&" + "ext=" + "ris", "View / Download As RIS"), + TEXT("Text", ".txt", CommonImages.INSTANCE.download(), ContentClientAbstract.CONTENT_SERVICE + "citation/export?" + "isPathway=" + "false" + "&" + "ext=" + "txt", "View / Download As Text"); + + private String formatName; + private String ext; + private transient ImageResource icon; + private String url; + String title; + + ExportFormat(String formatName, String ext, ImageResource icon, String url, String title) { + this.formatName = formatName; + this.ext = ext; + this.icon = icon; + this.url = url; + this.title = title; + } + + public String getFormatName() { + return formatName; + } + + public String getExt() { + return ext; + } + + public ImageResource getIcon() { + return icon; + } + + public String getUrl() { + return url; + } + + public String getTitle() { + return title; + } +} diff --git a/src/main/java/org/reactome/web/pwp/client/tools/launcher/ToolLauncherDisplay.java b/src/main/java/org/reactome/web/pwp/client/tools/launcher/ToolLauncherDisplay.java index 24bbf875..f87b2917 100644 --- a/src/main/java/org/reactome/web/pwp/client/tools/launcher/ToolLauncherDisplay.java +++ b/src/main/java/org/reactome/web/pwp/client/tools/launcher/ToolLauncherDisplay.java @@ -22,6 +22,7 @@ public class ToolLauncherDisplay extends Composite implements ToolLauncher.Displ private ToolLauncher.Presenter presenter; private IconButton analysisBtn; + private IconButton citationBtn; private final static String TOOLTIP = "Analyse your data..."; private final static String TOOLTIP_WARNING = "The AnalysisService and the ContentService are running with different database versions."; @@ -29,18 +30,37 @@ public class ToolLauncherDisplay extends Composite implements ToolLauncher.Displ public ToolLauncherDisplay() { + FlowPanel container = new FlowPanel(); + this.analysisBtn = new IconButton("", RESOURCES.analysisIcon()); this.analysisBtn.setTitle("Analyse your data..."); this.analysisBtn.setStyleName(RESOURCES.getCSS().analysisBtn()); this.analysisBtn.addClickHandler(this); - FlowPanel flowPanel = new FlowPanel(); - flowPanel.setStyleName(RESOURCES.getCSS().launcherPanel()); - flowPanel.add(new SimplePanel(new InlineLabel("Analysis:"))); - flowPanel.add(this.analysisBtn); + FlowPanel analysisFlowPanel = new FlowPanel(); + analysisFlowPanel.setStyleName(RESOURCES.getCSS().launcherPanel()); + analysisFlowPanel.add(new SimplePanel(new InlineLabel("Analysis:"))); + analysisFlowPanel.add(this.analysisBtn); //The analysis tools are not available for the curation sites - flowPanel.setVisible(!AppConfig.getIsCurator()); - initWidget(flowPanel); + analysisFlowPanel.setVisible(!AppConfig.getIsCurator()); + + // initializing the citation button + this.citationBtn = new IconButton("", RESOURCES.citationIcon()); + this.citationBtn.setTitle("Citation"); + this.citationBtn.setStyleName(RESOURCES.getCSS().citationBtn()); + this.citationBtn.addClickHandler(this); + + FlowPanel citationFlowPanel = new FlowPanel(); + citationFlowPanel.setStyleName(RESOURCES.getCSS().launcherPanel()); + citationFlowPanel.add(new SimplePanel(new InlineLabel("Citation:"))); + citationFlowPanel.add(this.citationBtn); + // citation button not available for curator tools + citationFlowPanel.setVisible(!AppConfig.getIsCurator()); + + container.add(analysisFlowPanel); + container.add(citationFlowPanel); + initWidget(container); + } @Override @@ -49,6 +69,7 @@ public void setPresenter(ToolLauncher.Presenter presenter) { } @Override + // to-do: add stuff related to the citation button public void setStatus(ToolLauncher.ToolStatus status) { switch (status) { case ACTIVE: @@ -72,6 +93,9 @@ public void onClick(ClickEvent event) { if(btn.equals(this.analysisBtn)){ presenter.toolSelected(PathwayPortalTool.ANALYSIS); } + else if (btn.equals(this.citationBtn)) { + presenter.toolSelected(PathwayPortalTool.CITATION); + } } public static Resources RESOURCES; @@ -93,6 +117,8 @@ public interface Resources extends ClientBundle { @Source("images/analysis.png") ImageResource analysisIcon(); + @Source("images/citation.png") + ImageResource citationIcon(); } /** @@ -109,5 +135,7 @@ public interface ResourceCSS extends CssResource { String analysisBtn(); + String citationBtn(); + } } diff --git a/src/main/resources/org/reactome/web/pwp/client/tools/citation/CitationLauncher.css b/src/main/resources/org/reactome/web/pwp/client/tools/citation/CitationLauncher.css new file mode 100644 index 00000000..2aecc339 --- /dev/null +++ b/src/main/resources/org/reactome/web/pwp/client/tools/citation/CitationLauncher.css @@ -0,0 +1,83 @@ +.popupPanel { + border: 3px solid gray !important; + border-radius: 15px; + padding: 5px 10px 10px 10px; + background-color: rgb(30, 148, 208) !important; + z-index: 100; /* Avoids the zombie spotted when GXA tab is visible xD */ +} + +.header { + float: left; + padding: 2px 0 2px 0; + width: 100%; +} + + +.headerText { + float: left; + min-width: 370px; + color: white; + font-weight: bolder; + font-size: large; + overflow:hidden; + white-space:nowrap; + text-overflow:ellipsis; + cursor: default; +} + +@sprite .close { + gwt-image: 'closeNormal'; + outline: none; + background-repeat: no-repeat; + border: 0; + cursor: pointer; + float: right; + margin-bottom: 10px; +} + +@sprite .close:hover { + gwt-image: 'closeHovered'; +} + +@sprite .close:active:hover { + gwt-image: 'closeClicked' ; +} + + +.unselectable { + -webkit-touch-callout: none; /* Prevents selection */ + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + + +.mainPanel { + height: 300px !important; + width: 600px !important; + /*width: 100%;*/ + padding: 2px 0 0 2px; +} + + +.citationPanel { + /*min-width: 100px;*/ + min-height: 100px; + width: 100%; + /*padding: 2px 0 0 2px;*/ + margin-top: 40px; + background-color: white; +} + +.citationText { + color: #333; + font-size: 14px; + padding: 2px 2px 2px 2px; +} + +.buttonPanel { + background-color: white; +} + diff --git a/src/main/resources/org/reactome/web/pwp/client/tools/citation/images/citationIcon.png b/src/main/resources/org/reactome/web/pwp/client/tools/citation/images/citationIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcb0cee750937ff2e6578dfe5943284be2732b3 GIT binary patch literal 3801 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 P00000NkvXXu0mjf?&U@M literal 0 HcmV?d00001 diff --git a/src/main/resources/org/reactome/web/pwp/client/tools/citation/images/close_clicked.png b/src/main/resources/org/reactome/web/pwp/client/tools/citation/images/close_clicked.png new file mode 100644 index 0000000000000000000000000000000000000000..df94b689502a9cb683f7aac35f06e718c2a5e04c GIT binary patch literal 3789 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 D46ZZn literal 0 HcmV?d00001 diff --git a/src/main/resources/org/reactome/web/pwp/client/tools/citation/images/close_hovered.png b/src/main/resources/org/reactome/web/pwp/client/tools/citation/images/close_hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..85493a1b37c0906dd1ef72176199ff19654fb0ec GIT binary patch literal 3772 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 Y0G`@1w<@OpEC2ui07*qoM6N<$f<$%$ssI20 literal 0 HcmV?d00001 diff --git a/src/main/resources/org/reactome/web/pwp/client/tools/launcher/ToolLauncher.css b/src/main/resources/org/reactome/web/pwp/client/tools/launcher/ToolLauncher.css index 0a55806e..32f340c7 100644 --- a/src/main/resources/org/reactome/web/pwp/client/tools/launcher/ToolLauncher.css +++ b/src/main/resources/org/reactome/web/pwp/client/tools/launcher/ToolLauncher.css @@ -60,3 +60,48 @@ background-color: #9a9c9e; cursor: default !important; } + +/* CSS for the citation button */ +.citationBtn { + background-color: #58C3E5; + border: none; + border-radius: 5px; + color: white; + padding: 0; + outline: none; +} + +.citationBtn>div { + margin: 0; + position: relative; +} + +.citationBtn span { + display: none; +} + +.citationBtn img { + display: block; + height: 30px; + width: auto; + margin: 0; + padding: 0; + border: 0; + + -webkit-user-drag: none; /* Prevents dragging of images/divs etc */ +} + +.citationBtn:hover { + background-color: #1E95CF; + cursor: pointer !important; +} + +.citationBtn:active:hover { + background-color: #066B9E; + cursor: pointer !important; +} + +.citationBtn:disabled, .citationBtn:disabled:active{ + background-color: #9a9c9e; + cursor: default !important; +} diff --git a/src/main/resources/org/reactome/web/pwp/client/tools/launcher/images/citation.png b/src/main/resources/org/reactome/web/pwp/client/tools/launcher/images/citation.png new file mode 100644 index 0000000000000000000000000000000000000000..a2ea5d731ae201b66f3a5a1395ecb341091124f5 GIT binary patch literal 2371 zcmV-J3B2}+P){V4&2~MYTHzcp%#vU@fMSQxqjg1oG2!*k+vFqSC z3$9n$^YZfU6S7@hUAJ>%qc(S4U0qsfX=%%X1q(WR$>6Zi+}xa*kdTlQ7Z>-HRt~q@ z;I=`y+9CTFdbCtacJJQ3_M)PqZG#67o;QE~{08p7=J9x*MN#?Lr(q5iAo?_LZO3%=Upz>O9cf5?PrrvFf=qY z41%nXjO8*@0(KtYda5SdK|+!Auw8k$edz4$oK1^7WTcq97fV3-Ul|3{i;IgrM)}S* zQd3jM5yk4nli(4NO3}c>46|De>{~etA{G=hOYS zgi}dtYwK|%g}s54l$2F6Dk0jzWm#oqWwETeMtLnc7$|N@Pf!0PA}gbWj*gBCWI~lR zc0DX>E@T7dx9U+Hw^%Offb666ZX9H5PMkRL7Z-dND0L2*QU+k3v)+AuB5@hwuZQ*)`0Zp9V5^#flXrlp9)JUcS1ismU8|15sX9 zl#3;e4ND-~Wu{z2yCN#QonUk;o8Es3V&jYqp=TZ^x=p;e!otF($BrFK=Gru2@+UbQ zj&+izcXv_O9rKXRs~#t$`-DLWU?k-9P$bJZJiMyyBfRF=-po+zZyT< z#(XhJJ7R!`4aLEXjEp9Id6lr2XGu2w-z#A&28^dSHlgSu3q*a0@p;Op)Bxk&)X(H; zX=!yz@@@H{=ZYcojx19&#G8;_2L8|w=7jn|d$;oMDsFg5m zJ`9yt3vuKL_dwv;PVJy zDmXwz?_ta=Gx^C|OOMPCr;(V*zGtXUXPEzodL|&+0I5OE&CQ!2yBOI-$%o$ijP|)^ zVR~7D#8xwer3c#D+OEa$W8oUZ41B7wvGMYO0|&lMT~i28k$%MX+v%g|-bo|w3s@O%m?q3~`~wq(HBlpOt*@`&rLLRV+1V{L+`ojduJ{6i;dz@`m?li`>b;{t28c{7nxSqV{X=ERmv>_l&6Xw}5i0>sfNXvuYrXw1sGk)$)3nB0Ox^u>0YV z6RvW~`~hd;b&{6-@n|C?VVL`eyY}65yFl6UJ_7yo5jG&GKRtn)?J6Q%_ zAepNX%X7WIyu5sovbzf#hJ>kXG?gub?82A;XE+UnSmc z#U7RL2xh~jRNx>zmFMn4E6VhM>`yM2YiB`$rBR(4=mvHUv}%(|cqF}fqg5qAu(>b2 zRu%NvnU-?E_Do-S|D+-!!jL*nSWPlpHt)m^CB)0o3uF&R!N#bXZBT?|&}b6NpI8lcNR0Nh>KS={Qb>yyGc_wC{8glJ8^iKX&Zcu}eNSwQ}6z za5&s-Ijhk*+~BtUwWr~cEOvO&@r~xlSjtT>$k$58RqIb$1J2U&7LRS>1ma7mpqzsL zqXBG?4aO-bq=(Tt8=ZfKbhnd@ac#&qGpf4t9yxMkU0z;Zt!|Wg(eV+se5neWnwsuP zO-((h+d*M+=WaRU_Tv@IK*bk6Y~}#oEYK-Ew^l0?H&jbjpzN}q)|Zz?*Ft$Q_n1DP z-EK_n45_m5mrA0?u=n8Qv0MzFFSNol2-A9_XzdxceggQ&yXnA$e-HRS;rLU0);j62w+mn%zA%1kQ?TcRj3002ovPDHLkV1l4trY`^h literal 0 HcmV?d00001 From f81351fba93907f713921dfcf7ba41d13ae4a722 Mon Sep 17 00:00:00 2001 From: Yusra Haider Date: Wed, 22 Apr 2020 17:29:04 +0100 Subject: [PATCH 2/2] added icons and fixed the UI --- pom.xml | 2 +- .../citation/CitationLauncherDisplay.java | 44 ++++++++----- .../client/tools/citation/ExportFormat.java | 47 ------------- .../pwp/client/tools/citation/ExportType.java | 62 ++++++++++++++++++ .../tools/launcher/ToolLauncherDisplay.java | 16 +++-- .../tools/citation/CitationLauncher.css | 43 ++++++++++-- .../tools/citation/images/bib_download.png | Bin 0 -> 6687 bytes .../tools/citation/images/citationIcon.png | Bin 3801 -> 0 bytes .../tools/citation/images/ris_download.png | Bin 0 -> 6951 bytes .../tools/citation/images/txt_download.png | Bin 0 -> 6659 bytes .../client/tools/launcher/images/citation.png | Bin 2371 -> 3145 bytes 11 files changed, 139 insertions(+), 75 deletions(-) delete mode 100644 src/main/java/org/reactome/web/pwp/client/tools/citation/ExportFormat.java create mode 100644 src/main/java/org/reactome/web/pwp/client/tools/citation/ExportType.java create mode 100644 src/main/resources/org/reactome/web/pwp/client/tools/citation/images/bib_download.png delete mode 100644 src/main/resources/org/reactome/web/pwp/client/tools/citation/images/citationIcon.png create mode 100644 src/main/resources/org/reactome/web/pwp/client/tools/citation/images/ris_download.png create mode 100644 src/main/resources/org/reactome/web/pwp/client/tools/citation/images/txt_download.png diff --git a/pom.xml b/pom.xml index 92c62493..054c5270 100644 --- a/pom.xml +++ b/pom.xml @@ -48,7 +48,7 @@ 1.0.2 3.6.7 1.8.6 - 2.1.20 + 2.1.21-SNAPSHOT 2.3.1 1.2.0 1.3.1 diff --git a/src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncherDisplay.java b/src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncherDisplay.java index 98926bb7..a18f9c9a 100644 --- a/src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncherDisplay.java +++ b/src/main/java/org/reactome/web/pwp/client/tools/citation/CitationLauncherDisplay.java @@ -12,7 +12,6 @@ import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.*; -import org.reactome.web.pwp.client.common.utils.Console; import org.reactome.web.pwp.client.tools.launcher.LauncherButton; import java.util.Date; @@ -23,7 +22,7 @@ public class CitationLauncherDisplay extends PopupPanel implements CitationLaunc private CitationLauncher.Presenter presenter; private Label citation; private HorizontalPanel buttonBar; - + private Label buttonBarHeading; public CitationLauncherDisplay() { super(true, true); @@ -49,7 +48,11 @@ public CitationLauncherDisplay() { citationPanel.add(citation); mainPanel.add(citationPanel); - buttonBar = new HorizontalPanel(); + buttonBarHeading = new Label(); + buttonBarHeading.addStyleName(RESOURCES.getCSS().buttonHeading()); + mainPanel.add(buttonBarHeading); + + buttonBar = new HorizontalPanel(); // panel with all the export buttons FlowPanel buttonPanel = new FlowPanel(); buttonPanel.addStyleName(RESOURCES.getCSS().buttonPanel()); buttonPanel.add(buttonBar); @@ -60,7 +63,6 @@ public CitationLauncherDisplay() { @Override public void show() { - Console.info("in method CitationLauncherDisplay show"); super.show(); } @@ -103,26 +105,31 @@ private Widget setTitlePanel() { } public void setExportBar(String id) { - for (ExportFormat ef : ExportFormat.values()) { - buttonBar.add(getExportButton(ef.getIcon(), ef.getTitle(), ef.getUrl() + "&id=" + id + this.buttonBarHeading.setText("Download As: "); + for (ExportType ef : ExportType.values()) { + this.buttonBar.add(getExportButton(ef.getIcon(), ef.getTitle(), ef.getUrl() + "&id=" + id + "&dateAccessed=" + DateTimeFormat.getFormat("E MMM dd yyyy").format(new Date()), "reactome_citation_" + id + ef.getExt())); } } - public Anchor getExportButton(ImageResource icon, String title, String url, String filename) { - Anchor anchor = new Anchor(SafeHtmlUtils.fromTrustedString(new Image(icon).toString()), url, "_blank"); + public FlowPanel getExportButton(ImageResource icon, String title, String url, String filename) { + + FlowPanel button = new FlowPanel(); + button.addStyleName(RESOURCES.getCSS().exportItem()); + button.setTitle(title); + + FlowPanel image = new FlowPanel(); + image.add(new Image(icon)); + + Anchor anchor = new Anchor(SafeHtmlUtils.fromTrustedString(image.toString()), url, "_blank"); anchor.getElement().setAttribute("rel", "noindex,nofollow"); anchor.getElement().setAttribute("download", filename); - anchor.setTitle(title); - return anchor; - } - public Anchor getDownloadButton() { - Anchor anchor = new Anchor(); - return null; - } + button.add(anchor); + return button; + } public static CitationLauncherDisplay.Resources RESOURCES; @@ -141,9 +148,6 @@ public interface Resources extends ClientBundle { @Source(CitationLauncherDisplay.ResourceCSS.CSS) CitationLauncherDisplay.ResourceCSS getCSS(); - @Source("images/citationIcon.png") - ImageResource citationIcon(); - @Source("images/close_clicked.png") ImageResource closeClicked(); @@ -181,5 +185,9 @@ public interface ResourceCSS extends CssResource { String unselectable(); String buttonPanel(); + + String exportItem(); + + String buttonHeading(); } } diff --git a/src/main/java/org/reactome/web/pwp/client/tools/citation/ExportFormat.java b/src/main/java/org/reactome/web/pwp/client/tools/citation/ExportFormat.java deleted file mode 100644 index f45b3c12..00000000 --- a/src/main/java/org/reactome/web/pwp/client/tools/citation/ExportFormat.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.reactome.web.pwp.client.tools.citation; - -import com.google.gwt.resources.client.ImageResource; -import org.reactome.web.pwp.client.common.CommonImages; -import org.reactome.web.pwp.model.client.common.ContentClientAbstract; - -public enum ExportFormat { - //TODO fix the icons - - BIBTEX("BibTeX", ".bib", CommonImages.INSTANCE.download(), ContentClientAbstract.CONTENT_SERVICE + "citation/export?" + "isPathway=" + "false" + "&" + "ext=" + "bib", "View / Download As BibTeX"), - RIS("RIS", ".ris", CommonImages.INSTANCE.download(), ContentClientAbstract.CONTENT_SERVICE + "citation/export?" + "isPathway=" + "false" + "&" + "ext=" + "ris", "View / Download As RIS"), - TEXT("Text", ".txt", CommonImages.INSTANCE.download(), ContentClientAbstract.CONTENT_SERVICE + "citation/export?" + "isPathway=" + "false" + "&" + "ext=" + "txt", "View / Download As Text"); - - private String formatName; - private String ext; - private transient ImageResource icon; - private String url; - String title; - - ExportFormat(String formatName, String ext, ImageResource icon, String url, String title) { - this.formatName = formatName; - this.ext = ext; - this.icon = icon; - this.url = url; - this.title = title; - } - - public String getFormatName() { - return formatName; - } - - public String getExt() { - return ext; - } - - public ImageResource getIcon() { - return icon; - } - - public String getUrl() { - return url; - } - - public String getTitle() { - return title; - } -} diff --git a/src/main/java/org/reactome/web/pwp/client/tools/citation/ExportType.java b/src/main/java/org/reactome/web/pwp/client/tools/citation/ExportType.java new file mode 100644 index 00000000..12040240 --- /dev/null +++ b/src/main/java/org/reactome/web/pwp/client/tools/citation/ExportType.java @@ -0,0 +1,62 @@ +package org.reactome.web.pwp.client.tools.citation; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.ImageResource; +import org.reactome.web.pwp.model.client.common.ContentClientAbstract; + +public enum ExportType { + + BIBTEX("BibTeX", ".bib", ExportIcons.INSTANCE.bibIcon(), ContentClientAbstract.CONTENT_SERVICE + "citation/export?" + "isPathway=" + "false" + "&" + "ext=" + "bib", "View / Download As BibTeX"), + RIS("RIS", ".ris", ExportIcons.INSTANCE.risIcon(), ContentClientAbstract.CONTENT_SERVICE + "citation/export?" + "isPathway=" + "false" + "&" + "ext=" + "ris", "View / Download As RIS"), + TEXT("Text", ".txt", ExportIcons.INSTANCE.txtIcon(), ContentClientAbstract.CONTENT_SERVICE + "citation/export?" + "isPathway=" + "false" + "&" + "ext=" + "txt", "View / Download As Text"); + + private String formatName; + private String ext; + private transient ImageResource icon; + private String url; + String title; + + ExportType(String formatName, String ext, ImageResource icon, String url, String title) { + this.formatName = formatName; + this.ext = ext; + this.icon = icon; + this.url = url; + this.title = title; + } + + public String getFormatName() { + return formatName; + } + + public String getExt() { + return ext; + } + + public ImageResource getIcon() { + return icon; + } + + public String getUrl() { + return url; + } + + public String getTitle() { + return title; + } + + + public interface ExportIcons extends ClientBundle { + + ExportIcons INSTANCE = GWT.create(ExportType.ExportIcons.class); + + @Source("images/bib_download.png") + ImageResource bibIcon(); + + @Source("images/ris_download.png") + ImageResource risIcon(); + + @Source("images/txt_download.png") + ImageResource txtIcon(); + } +} diff --git a/src/main/java/org/reactome/web/pwp/client/tools/launcher/ToolLauncherDisplay.java b/src/main/java/org/reactome/web/pwp/client/tools/launcher/ToolLauncherDisplay.java index f87b2917..9025cce0 100644 --- a/src/main/java/org/reactome/web/pwp/client/tools/launcher/ToolLauncherDisplay.java +++ b/src/main/java/org/reactome/web/pwp/client/tools/launcher/ToolLauncherDisplay.java @@ -24,8 +24,9 @@ public class ToolLauncherDisplay extends Composite implements ToolLauncher.Displ private IconButton analysisBtn; private IconButton citationBtn; - private final static String TOOLTIP = "Analyse your data..."; - private final static String TOOLTIP_WARNING = "The AnalysisService and the ContentService are running with different database versions."; + private final static String ANALYSIS_TOOLTIP = "Analyse your data..."; + private final static String CITATION_TOOLTIP = "Get Citation..."; + private final static String ANALYSIS_TOOLTIP_WARNING = "The AnalysisService and the ContentService are running with different database versions."; private final static String TOOLTIP_ERROR = "Unable to connect to the server."; @@ -69,20 +70,25 @@ public void setPresenter(ToolLauncher.Presenter presenter) { } @Override - // to-do: add stuff related to the citation button public void setStatus(ToolLauncher.ToolStatus status) { switch (status) { case ACTIVE: analysisBtn.clearOverlayIcon(); - this.analysisBtn.setTitle(TOOLTIP); + this.analysisBtn.setTitle(ANALYSIS_TOOLTIP); + + citationBtn.clearOverlayIcon(); + this.citationBtn.setTitle(CITATION_TOOLTIP); break; case WARNING: analysisBtn.setOverlayIcon(CommonImages.INSTANCE.warning()); - this.analysisBtn.setTitle(TOOLTIP_WARNING); + this.analysisBtn.setTitle(ANALYSIS_TOOLTIP_WARNING); break; case ERROR: analysisBtn.setOverlayIcon(CommonImages.INSTANCE.error()); this.analysisBtn.setTitle(TOOLTIP_ERROR); + + citationBtn.setOverlayIcon(CommonImages.INSTANCE.error()); + this.citationBtn.setTitle(TOOLTIP_ERROR); break; } } diff --git a/src/main/resources/org/reactome/web/pwp/client/tools/citation/CitationLauncher.css b/src/main/resources/org/reactome/web/pwp/client/tools/citation/CitationLauncher.css index 2aecc339..baca7b89 100644 --- a/src/main/resources/org/reactome/web/pwp/client/tools/citation/CitationLauncher.css +++ b/src/main/resources/org/reactome/web/pwp/client/tools/citation/CitationLauncher.css @@ -57,16 +57,13 @@ .mainPanel { height: 300px !important; width: 600px !important; - /*width: 100%;*/ padding: 2px 0 0 2px; } .citationPanel { - /*min-width: 100px;*/ min-height: 100px; width: 100%; - /*padding: 2px 0 0 2px;*/ margin-top: 40px; background-color: white; } @@ -74,10 +71,48 @@ .citationText { color: #333; font-size: 14px; - padding: 2px 2px 2px 2px; + padding: 4px 8px 4px 8px; +} + +.buttonHeading { + font-size: 18px; + color: white; } .buttonPanel { background-color: white; } +.exportItem { + height: 50px; + width: 50px; + margin: 15px 15px 15px 15px; + background-color: #58c3e5; + text-decoration: none; + color: white; + padding: 6px; + display: inline-block; + line-height: 1em; + border-radius: 10px; + box-shadow: 0 1px 2px rgba(0,0,0,0.10); + overflow: hidden; + + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; + + white-space: nowrap; + direction: rtl; /* Change this to make the options appear from the right*/ +} + +.exportItem img { + display: inline-block; + width: 100%; + max-width: 50px; + height: auto; +} + +.exportItem:hover { + background-color: #5cccee; + box-shadow: 0 5px 15px rgba(0,0,0,0.35); +} diff --git a/src/main/resources/org/reactome/web/pwp/client/tools/citation/images/bib_download.png b/src/main/resources/org/reactome/web/pwp/client/tools/citation/images/bib_download.png new file mode 100644 index 0000000000000000000000000000000000000000..b97f67cc4bb166ad8b406c0c1f75009768d59b43 GIT binary patch literal 6687 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 P00000NkvXXu0mjf?&U@M diff --git a/src/main/resources/org/reactome/web/pwp/client/tools/citation/images/ris_download.png b/src/main/resources/org/reactome/web/pwp/client/tools/citation/images/ris_download.png new file mode 100644 index 0000000000000000000000000000000000000000..19494e4ea908bdd8eff803d1c9f2f3916ba9bb2f GIT binary patch literal 6951 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/org/reactome/web/pwp/client/tools/citation/images/txt_download.png b/src/main/resources/org/reactome/web/pwp/client/tools/citation/images/txt_download.png new file mode 100644 index 0000000000000000000000000000000000000000..43e114c7bdb5c23e48da6e576090335761afc053 GIT binary patch literal 6659 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/org/reactome/web/pwp/client/tools/launcher/images/citation.png b/src/main/resources/org/reactome/web/pwp/client/tools/launcher/images/citation.png index a2ea5d731ae201b66f3a5a1395ecb341091124f5..ceedc3e2148a7ffea507cce57ef14fd65da2ffbb 100644 GIT binary patch literal 3145 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 N002ovPDHLkV1gOksU!dZ