From e836deda0780d05b2220568c8ef36154ce2428c8 Mon Sep 17 00:00:00 2001 From: Ashley Caselli Date: Wed, 4 Mar 2026 11:58:40 +0100 Subject: [PATCH 01/10] feat(ExternalLinkWithActionsPanel): add panel for showing external links and allowing users to navigate/copy/explore them --- .../ExternalLinkWithActionsPanel.html | 18 +++++ .../ExternalLinkWithActionsPanel.java | 68 +++++++++++++++++++ src/main/webapp/images/copy-icon.svg | 7 ++ src/main/webapp/style.css | 25 +++++++ 4 files changed, 118 insertions(+) create mode 100644 src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.html create mode 100644 src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java create mode 100644 src/main/webapp/images/copy-icon.svg diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.html b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.html new file mode 100644 index 00000000..6c1da52d --- /dev/null +++ b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.html @@ -0,0 +1,18 @@ + + + + + + + + + Copy link + + + + Explore + + + + + \ No newline at end of file diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java new file mode 100644 index 00000000..1f7490f1 --- /dev/null +++ b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java @@ -0,0 +1,68 @@ +package com.knowledgepixels.nanodash.component; + +import com.knowledgepixels.nanodash.page.ExplorePage; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxLink; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.image.Image; +import org.apache.wicket.markup.html.link.ExternalLink; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.apache.wicket.request.resource.ContextRelativeResourceReference; + +/** + * External link with Actions Panel that allows to copy the link and explore it through the Nanodash ExplorePage. + */ +public class ExternalLinkWithActionsPanel extends Panel { + + private final IModel urlModel; + private final IModel labelModel; + + public ExternalLinkWithActionsPanel(String id, IModel urlModel, IModel labelModel) { + super(id); + this.urlModel = urlModel; + this.labelModel = labelModel; + } + + @Override + protected void onInitialize() { + super.onInitialize(); + + ExternalLink externalLink = new ExternalLink("externalLink", urlModel, labelModel); + add(externalLink); + + AjaxLink copyLinkButton = new AjaxLink<>("copyLinkButton") { + @Override + public void onClick(AjaxRequestTarget target) { + String url = urlModel.getObject(); + String escapedUrl = url.replace("'", "\\'"); + target.appendJavaScript( + "navigator.clipboard.writeText('" + escapedUrl + "')" + + ".then(function() { alert('Link copied to clipboard!'); })" + + ".catch(function(err) { console.error('Copy failed:', err); });" + ); + } + }; + copyLinkButton.add(new Image("copyIcon", new ContextRelativeResourceReference("images/copy-icon.svg", false))); + add(copyLinkButton); + + AjaxLink exploreButton = new AjaxLink<>("exploreButton") { + @Override + public void onClick(AjaxRequestTarget target) { + setResponsePage(ExplorePage.class, new PageParameters().set("id", urlModel.getObject())); + } + }; + exploreButton.add(new Label("exploreLabel", Model.of("Explore"))); + add(exploreButton); + } + + @Override + protected void onDetach() { + super.onDetach(); + urlModel.detach(); + labelModel.detach(); + } + +} diff --git a/src/main/webapp/images/copy-icon.svg b/src/main/webapp/images/copy-icon.svg new file mode 100644 index 00000000..cb543a71 --- /dev/null +++ b/src/main/webapp/images/copy-icon.svg @@ -0,0 +1,7 @@ + + + + diff --git a/src/main/webapp/style.css b/src/main/webapp/style.css index fa8ca3a3..8d2df40f 100644 --- a/src/main/webapp/style.css +++ b/src/main/webapp/style.css @@ -2208,4 +2208,29 @@ a.source:hover { .mode-advanced .mode-toggle-arrow { transform: scale(1, -1); +} + +.link-actions-panel { + display: inline-flex; + align-items: center; + gap: 8px; + font-family: sans-serif; +} + +.copy-link-btn { + display: inline-flex; + align-items: center; + justify-content: center; + background: none; + border: 1px solid #ccc; + border-radius: 4px; + padding: 4px; + cursor: pointer; + color: #555; + transition: background 0.15s, color 0.15s; +} + +.copy-link-btn:hover { + background: #f0f0f0; + color: #1a73e8; } \ No newline at end of file From 149478cc96f203eb9078061320e0bb9836b21aa8 Mon Sep 17 00:00:00 2001 From: Ashley Caselli Date: Wed, 4 Mar 2026 12:14:21 +0100 Subject: [PATCH 02/10] fix(ExternalLinkWithActionsPanel): pass label as parameter to the ExplorePage --- .../nanodash/component/ExternalLinkWithActionsPanel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java index 1f7490f1..2328ec0e 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java @@ -30,7 +30,7 @@ public ExternalLinkWithActionsPanel(String id, IModel urlModel, IModel copyLinkButton = new AjaxLink<>("copyLinkButton") { @@ -51,7 +51,7 @@ public void onClick(AjaxRequestTarget target) { AjaxLink exploreButton = new AjaxLink<>("exploreButton") { @Override public void onClick(AjaxRequestTarget target) { - setResponsePage(ExplorePage.class, new PageParameters().set("id", urlModel.getObject())); + setResponsePage(ExplorePage.class, new PageParameters().set("id", urlModel.getObject()).set("label", labelModel.getObject())); } }; exploreButton.add(new Label("exploreLabel", Model.of("Explore"))); From f48e3db6edc6220967e765d7e2b69d5abc009ddd Mon Sep 17 00:00:00 2001 From: Ashley Caselli Date: Wed, 4 Mar 2026 12:15:08 +0100 Subject: [PATCH 03/10] refactor: replace links with `ExternalLinkWithActionsPanel` component --- .../knowledgepixels/nanodash/page/MaintainedResourcePage.java | 2 +- .../com/knowledgepixels/nanodash/page/ResourcePartPage.java | 2 +- src/main/java/com/knowledgepixels/nanodash/page/SpacePage.java | 2 +- src/main/java/com/knowledgepixels/nanodash/page/UserPage.java | 3 +-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/knowledgepixels/nanodash/page/MaintainedResourcePage.java b/src/main/java/com/knowledgepixels/nanodash/page/MaintainedResourcePage.java index 83294a19..e72a3d98 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/MaintainedResourcePage.java +++ b/src/main/java/com/knowledgepixels/nanodash/page/MaintainedResourcePage.java @@ -59,7 +59,7 @@ public MaintainedResourcePage(final PageParameters parameters) { add(new Label("pagetitle", resource.getLabel() + " (resource) | nanodash")); add(new Label("resourcename", resource.getLabel())); - add(new BookmarkablePageLink("id", ExplorePage.class, parameters.set("label", resource.getLabel())).setBody(Model.of(resource.getId()))); + add(new ExternalLinkWithActionsPanel("id", Model.of(resource.getId()), Model.of(resource.getLabel()))); add(new SourceNanopub("np", Values.iri(resource.getNanopubId()))); String namespaceUri = resource.getNamespace() == null ? "" : resource.getNamespace(); diff --git a/src/main/java/com/knowledgepixels/nanodash/page/ResourcePartPage.java b/src/main/java/com/knowledgepixels/nanodash/page/ResourcePartPage.java index 8033f7fd..0c97ace6 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/ResourcePartPage.java +++ b/src/main/java/com/knowledgepixels/nanodash/page/ResourcePartPage.java @@ -143,7 +143,7 @@ public ResourcePartPage(final PageParameters parameters) { add(new Label("pagetitle", label + " (resource part) | nanodash")); add(new Label("name", label)); - add(new BookmarkablePageLink("id", ExplorePage.class, parameters.set("label", label)).setBody(Model.of(id))); + add(new ExternalLinkWithActionsPanel("id", Model.of(id), Model.of(label))); add(new SourceNanopub("np", nanopubId == null ? Values.iri(id) : Values.iri(nanopubId))); // TODO Improve this code, e.g. make Space a subclass of MaintainedResource or otherwise refactor: diff --git a/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.java b/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.java index fd3bc84b..1fef2751 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.java +++ b/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.java @@ -87,7 +87,7 @@ public SpacePage(final PageParameters parameters) { add(new Label("pagetitle", space.getLabel() + " (space) | nanodash")); add(new Label("spacename", space.getLabel())); add(new Label("spacetype", space.getTypeLabel())); - add(new BookmarkablePageLink("id", ExplorePage.class, parameters.set("label", space.getLabel())).setBody(Model.of(space.getId()))); + add(new ExternalLinkWithActionsPanel("id", Model.of(space.getId()), Model.of(space.getLabel()))); add(new SourceNanopub("np", np.getUri())); add(new ItemListPanel( diff --git a/src/main/java/com/knowledgepixels/nanodash/page/UserPage.java b/src/main/java/com/knowledgepixels/nanodash/page/UserPage.java index 4295b3f6..b82aaf71 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/UserPage.java +++ b/src/main/java/com/knowledgepixels/nanodash/page/UserPage.java @@ -81,8 +81,7 @@ public UserPage(final PageParameters parameters) { add(userIcon); add(new Label("username", displayName)); - add(new BookmarkablePageLink("fullid", ExplorePage.class, parameters.set("label", displayName)).setBody(Model.of(userIriString))); - + add(new ExternalLinkWithActionsPanel("fullid", Model.of(userIriString), Model.of(displayName))); add(new BookmarkablePageLink("showprofile", ProfilePage.class).setVisible(userIri.equals(NanodashSession.get().getUserIri()))); add(new BookmarkablePageLink("showchannel", ListPage.class, new PageParameters().add("userid", userIriString))); From 03b9e6c730bfb2389954a5e9d544320fb976ebe3 Mon Sep 17 00:00:00 2001 From: Ashley Caselli Date: Wed, 4 Mar 2026 15:25:18 +0100 Subject: [PATCH 04/10] fix(ExternalLinkWithActionsPanel): add SourceNanopub component as part of the component (hidden by default) --- .../component/ExternalLinkWithActionsPanel.html | 11 +++++++---- .../component/ExternalLinkWithActionsPanel.java | 13 +++++++++++++ .../nanodash/page/MaintainedResourcePage.html | 2 +- .../nanodash/page/MaintainedResourcePage.java | 3 +-- .../nanodash/page/ResourcePartPage.html | 2 +- .../nanodash/page/ResourcePartPage.java | 3 +-- .../knowledgepixels/nanodash/page/SpacePage.html | 2 +- .../knowledgepixels/nanodash/page/SpacePage.java | 4 ++-- .../com/knowledgepixels/nanodash/page/UserPage.html | 2 +- src/main/webapp/style.css | 11 ++++++++++- 10 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.html b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.html index 6c1da52d..086155f9 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.html +++ b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.html @@ -2,17 +2,20 @@ - - + \ No newline at end of file diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java index 2328ec0e..d2d6c60d 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java @@ -11,6 +11,7 @@ import org.apache.wicket.model.Model; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.request.resource.ContextRelativeResourceReference; +import org.eclipse.rdf4j.model.IRI; /** * External link with Actions Panel that allows to copy the link and explore it through the Nanodash ExplorePage. @@ -19,6 +20,7 @@ public class ExternalLinkWithActionsPanel extends Panel { private final IModel urlModel; private final IModel labelModel; + private IRI sourceNanopub; public ExternalLinkWithActionsPanel(String id, IModel urlModel, IModel labelModel) { super(id); @@ -26,6 +28,11 @@ public ExternalLinkWithActionsPanel(String id, IModel urlModel, IModel urlModel, IModel labelModel, IRI sourceNanopub) { + this(id, urlModel, labelModel); + this.sourceNanopub = sourceNanopub; + } + @Override protected void onInitialize() { super.onInitialize(); @@ -33,6 +40,12 @@ protected void onInitialize() { ExternalLink externalLink = new ExternalLink("externalLink", urlModel, urlModel); add(externalLink); + if (sourceNanopub != null) { + add(new SourceNanopub("np", sourceNanopub)); + } else { + add(new Label("np", "").setVisible(false)); + } + AjaxLink copyLinkButton = new AjaxLink<>("copyLinkButton") { @Override public void onClick(AjaxRequestTarget target) { diff --git a/src/main/java/com/knowledgepixels/nanodash/page/MaintainedResourcePage.html b/src/main/java/com/knowledgepixels/nanodash/page/MaintainedResourcePage.html index 50b532b3..d31de627 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/MaintainedResourcePage.html +++ b/src/main/java/com/knowledgepixels/nanodash/page/MaintainedResourcePage.html @@ -19,7 +19,7 @@

Resource ABC

-

https://... [np]

+

Namespace:

diff --git a/src/main/java/com/knowledgepixels/nanodash/page/MaintainedResourcePage.java b/src/main/java/com/knowledgepixels/nanodash/page/MaintainedResourcePage.java index e72a3d98..9c07c779 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/MaintainedResourcePage.java +++ b/src/main/java/com/knowledgepixels/nanodash/page/MaintainedResourcePage.java @@ -59,8 +59,7 @@ public MaintainedResourcePage(final PageParameters parameters) { add(new Label("pagetitle", resource.getLabel() + " (resource) | nanodash")); add(new Label("resourcename", resource.getLabel())); - add(new ExternalLinkWithActionsPanel("id", Model.of(resource.getId()), Model.of(resource.getLabel()))); - add(new SourceNanopub("np", Values.iri(resource.getNanopubId()))); + add(new ExternalLinkWithActionsPanel("id", Model.of(resource.getId()), Model.of(resource.getLabel()), Values.iri(resource.getNanopubId()))); String namespaceUri = resource.getNamespace() == null ? "" : resource.getNamespace(); add(new BookmarkablePageLink("namespace", ExplorePage.class, new PageParameters().set("id", namespaceUri)).setBody(Model.of(namespaceUri))); diff --git a/src/main/java/com/knowledgepixels/nanodash/page/ResourcePartPage.html b/src/main/java/com/knowledgepixels/nanodash/page/ResourcePartPage.html index 75f04bfd..64a098e3 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/ResourcePartPage.html +++ b/src/main/java/com/knowledgepixels/nanodash/page/ResourcePartPage.html @@ -18,7 +18,7 @@

ABC

-

https://... [np]

+

Description...

diff --git a/src/main/java/com/knowledgepixels/nanodash/page/ResourcePartPage.java b/src/main/java/com/knowledgepixels/nanodash/page/ResourcePartPage.java index 0c97ace6..9429cf1f 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/ResourcePartPage.java +++ b/src/main/java/com/knowledgepixels/nanodash/page/ResourcePartPage.java @@ -143,8 +143,7 @@ public ResourcePartPage(final PageParameters parameters) { add(new Label("pagetitle", label + " (resource part) | nanodash")); add(new Label("name", label)); - add(new ExternalLinkWithActionsPanel("id", Model.of(id), Model.of(label))); - add(new SourceNanopub("np", nanopubId == null ? Values.iri(id) : Values.iri(nanopubId))); + add(new ExternalLinkWithActionsPanel("id", Model.of(id), Model.of(label), nanopubId == null ? Values.iri(id) : Values.iri(nanopubId))); // TODO Improve this code, e.g. make Space a subclass of MaintainedResource or otherwise refactor: // we now use the ProfileResource abstraction, but the code still has to be imprved diff --git a/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.html b/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.html index 6cc5ea3c..f142cad0 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.html +++ b/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.html @@ -20,7 +20,7 @@

Space ABC

Space type

-

https://...[np]

+

...
diff --git a/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.java b/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.java index 1fef2751..d9fbbd43 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.java +++ b/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.java @@ -87,8 +87,8 @@ public SpacePage(final PageParameters parameters) { add(new Label("pagetitle", space.getLabel() + " (space) | nanodash")); add(new Label("spacename", space.getLabel())); add(new Label("spacetype", space.getTypeLabel())); - add(new ExternalLinkWithActionsPanel("id", Model.of(space.getId()), Model.of(space.getLabel()))); - add(new SourceNanopub("np", np.getUri())); + add(new ExternalLinkWithActionsPanel("id", Model.of(space.getId()), Model.of(space.getLabel()), np.getUri())); + //add(new SourceNanopub("np", np.getUri())); add(new ItemListPanel( "altids", diff --git a/src/main/java/com/knowledgepixels/nanodash/page/UserPage.html b/src/main/java/com/knowledgepixels/nanodash/page/UserPage.html index 5b216516..3508a162 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/UserPage.html +++ b/src/main/java/com/knowledgepixels/nanodash/page/UserPage.html @@ -17,7 +17,7 @@

User Name

-

https://orcid.org/xxxx-xxxx-xxxx-xxxx

+

See Your Profile Details Show Full Channel diff --git a/src/main/webapp/style.css b/src/main/webapp/style.css index 8d2df40f..49274602 100644 --- a/src/main/webapp/style.css +++ b/src/main/webapp/style.css @@ -2217,12 +2217,21 @@ a.source:hover { font-family: sans-serif; } +.link-actions-panel > a:first-child { + margin-right: 8px; +} + +.link-actions-panel > a:not(:first-child) { + align-self: stretch; + display: inline-flex; + align-items: center; +} + .copy-link-btn { display: inline-flex; align-items: center; justify-content: center; background: none; - border: 1px solid #ccc; border-radius: 4px; padding: 4px; cursor: pointer; From 05e4dcfed24b096c630b55e227835297f9ba364e Mon Sep 17 00:00:00 2001 From: Ashley Caselli Date: Wed, 4 Mar 2026 16:36:17 +0100 Subject: [PATCH 05/10] feat(BaseDisplayMenu): add base menu component to be used as core for other components --- .../nanodash/component/BaseDisplayMenu.html | 13 ++++++++ .../nanodash/component/BaseDisplayMenu.java | 32 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/main/java/com/knowledgepixels/nanodash/component/BaseDisplayMenu.html create mode 100644 src/main/java/com/knowledgepixels/nanodash/component/BaseDisplayMenu.java diff --git a/src/main/java/com/knowledgepixels/nanodash/component/BaseDisplayMenu.html b/src/main/java/com/knowledgepixels/nanodash/component/BaseDisplayMenu.html new file mode 100644 index 00000000..d97c8726 --- /dev/null +++ b/src/main/java/com/knowledgepixels/nanodash/component/BaseDisplayMenu.html @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/main/java/com/knowledgepixels/nanodash/component/BaseDisplayMenu.java b/src/main/java/com/knowledgepixels/nanodash/component/BaseDisplayMenu.java new file mode 100644 index 00000000..67667812 --- /dev/null +++ b/src/main/java/com/knowledgepixels/nanodash/component/BaseDisplayMenu.java @@ -0,0 +1,32 @@ +package com.knowledgepixels.nanodash.component; + +import org.apache.wicket.Component; +import org.apache.wicket.markup.html.panel.Panel; + +import java.util.ArrayList; +import java.util.List; + +public class BaseDisplayMenu extends Panel { + + public record Entry(String wicketId, Component component) { + } + + private final List entries = new ArrayList<>(); + + public BaseDisplayMenu(String id) { + super(id); + } + + protected void addEntry(String wicketId, Component component) { + entries.add(new Entry(wicketId, component)); + } + + @Override + protected void onInitialize() { + super.onInitialize(); + for (Entry entry : entries) { + add(entry.component()); + } + } + +} From a3c9436f495ed56ec6213ea0d5a5b30dac38a213 Mon Sep 17 00:00:00 2001 From: Ashley Caselli Date: Wed, 4 Mar 2026 16:37:24 +0100 Subject: [PATCH 06/10] refactor(ViewDisplayMenu): extend new component BaseDisplayMenu --- .../nanodash/component/ViewDisplayMenu.html | 18 +++++++----------- .../nanodash/component/ViewDisplayMenu.java | 9 ++++----- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.html b/src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.html index 334a84bc..e425ec75 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.html +++ b/src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.html @@ -2,20 +2,16 @@ - + - - - - -show query -adjust -see view display declaration - - - + + show query + adjust + see view display declaration + diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.java b/src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.java index 77a7f63e..d3373129 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.java @@ -13,7 +13,6 @@ import com.knowledgepixels.nanodash.template.TemplateData; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.link.ExternalLink; -import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.eclipse.rdf4j.model.IRI; import org.nanopub.extra.services.QueryRef; @@ -22,7 +21,7 @@ * A dropdown menu panel for view displays, replacing the "^" source link. * Provides options to show the query, adjust the view display, and see its declaration. */ -public class ViewDisplayMenu extends Panel { +public class ViewDisplayMenu extends BaseDisplayMenu { /** * Constructs a ViewDisplayMenu. @@ -39,7 +38,7 @@ public ViewDisplayMenu(String id, ViewDisplay viewDisplay, QueryRef queryRef, Ab for (var entry : queryRef.getParams().entries()) { showQueryParams.add("queryparam_" + entry.getKey(), entry.getValue()); } - add(new BookmarkablePageLink("showQuery", QueryPage.class, showQueryParams)); + addEntry("showQuery", new BookmarkablePageLink("showQuery", QueryPage.class, showQueryParams)); IRI nanopubId = viewDisplay.getNanopubId(); @@ -73,9 +72,9 @@ public ViewDisplayMenu(String id, ViewDisplay viewDisplay, QueryRef queryRef, Ab + "&template-version=latest"; ExternalLink adjustLink = new ExternalLink("adjust", adjustUrl, "adjust"); adjustLink.setVisible(showAdjust); - add(adjustLink); + addEntry("adjust", adjustLink); - add(new BookmarkablePageLink("viewDeclaration", ExplorePage.class, + addEntry("viewDeclaration", new BookmarkablePageLink("viewDeclaration", ExplorePage.class, new PageParameters().set("id", nanopubId))); } From 349de4ac8c36e48387d2c737fae6a381b6335070 Mon Sep 17 00:00:00 2001 From: Ashley Caselli Date: Wed, 4 Mar 2026 16:37:54 +0100 Subject: [PATCH 07/10] chore(ExploreDisplayMenu): add component for explore menu --- .../component/ExploreDisplayMenu.html | 17 +++++++++++++ .../component/ExploreDisplayMenu.java | 25 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.html create mode 100644 src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.java diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.html b/src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.html new file mode 100644 index 00000000..ed31e000 --- /dev/null +++ b/src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.html @@ -0,0 +1,17 @@ + + + + + + + + + + explore + see declaration + + + + + diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.java b/src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.java new file mode 100644 index 00000000..7b3de343 --- /dev/null +++ b/src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.java @@ -0,0 +1,25 @@ +package com.knowledgepixels.nanodash.component; + +import com.knowledgepixels.nanodash.page.ExplorePage; +import org.apache.wicket.markup.html.link.BookmarkablePageLink; +import org.apache.wicket.request.mapper.parameter.PageParameters; +import org.eclipse.rdf4j.model.IRI; + +public class ExploreDisplayMenu extends BaseDisplayMenu { + + /** + * Constructs a ExploreDisplayMenu. + * + * @param id the Wicket component ID + * @param exploreUri the URI of the resource to explore + * @param exploreLabel the label of the resource to be rendered in the explore page + * @param sourceUri the uri of the source nanopublication defining the resource + */ + public ExploreDisplayMenu(String id, String exploreUri, String exploreLabel, IRI sourceUri) { + super(id); + + addEntry("explore", new BookmarkablePageLink("explore", ExplorePage.class, new PageParameters().set("id", exploreUri).set("label", exploreLabel))); + addEntry("viewDeclaration", new BookmarkablePageLink("viewDeclaration", ExplorePage.class, new PageParameters().set("id", sourceUri))); + } + +} From 3cd71a603ba214bd1c29aafb0c54853af244747b Mon Sep 17 00:00:00 2001 From: Ashley Caselli Date: Wed, 4 Mar 2026 16:38:43 +0100 Subject: [PATCH 08/10] feat(ExternalLinkWithActionsPanel): use now the ExploreDisplayMenu to show the explore button and the source nanopub link --- .../ExternalLinkWithActionsPanel.html | 11 +++----- .../ExternalLinkWithActionsPanel.java | 28 +++++++++---------- .../nanodash/page/SpacePage.java | 1 - 3 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.html b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.html index 086155f9..5e112cbe 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.html +++ b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.html @@ -3,18 +3,15 @@

diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java index d2d6c60d..1d0619b2 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java @@ -8,7 +8,6 @@ import org.apache.wicket.markup.html.link.ExternalLink; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; -import org.apache.wicket.model.Model; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.request.resource.ContextRelativeResourceReference; import org.eclipse.rdf4j.model.IRI; @@ -40,12 +39,6 @@ protected void onInitialize() { ExternalLink externalLink = new ExternalLink("externalLink", urlModel, urlModel); add(externalLink); - if (sourceNanopub != null) { - add(new SourceNanopub("np", sourceNanopub)); - } else { - add(new Label("np", "").setVisible(false)); - } - AjaxLink copyLinkButton = new AjaxLink<>("copyLinkButton") { @Override public void onClick(AjaxRequestTarget target) { @@ -61,14 +54,19 @@ public void onClick(AjaxRequestTarget target) { copyLinkButton.add(new Image("copyIcon", new ContextRelativeResourceReference("images/copy-icon.svg", false))); add(copyLinkButton); - AjaxLink exploreButton = new AjaxLink<>("exploreButton") { - @Override - public void onClick(AjaxRequestTarget target) { - setResponsePage(ExplorePage.class, new PageParameters().set("id", urlModel.getObject()).set("label", labelModel.getObject())); - } - }; - exploreButton.add(new Label("exploreLabel", Model.of("Explore"))); - add(exploreButton); + if (sourceNanopub != null) { + add(new Label("exploreButton", "").setVisible(false)); + add(new ExploreDisplayMenu("np", urlModel.getObject(), labelModel.getObject(), sourceNanopub)); + } else { + add(new Label("np", "").setVisible(false)); + AjaxLink exploreButton = new AjaxLink<>("exploreButton") { + @Override + public void onClick(AjaxRequestTarget target) { + setResponsePage(ExplorePage.class, new PageParameters().set("id", urlModel.getObject()).set("label", labelModel.getObject())); + } + }; + add(exploreButton); + } } @Override diff --git a/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.java b/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.java index d9fbbd43..3229298e 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.java +++ b/src/main/java/com/knowledgepixels/nanodash/page/SpacePage.java @@ -88,7 +88,6 @@ public SpacePage(final PageParameters parameters) { add(new Label("spacename", space.getLabel())); add(new Label("spacetype", space.getTypeLabel())); add(new ExternalLinkWithActionsPanel("id", Model.of(space.getId()), Model.of(space.getLabel()), np.getUri())); - //add(new SourceNanopub("np", np.getUri())); add(new ItemListPanel( "altids", From e36586c9fec208b0cfc360502338dc72c1b27409 Mon Sep 17 00:00:00 2001 From: Ashley Caselli Date: Wed, 4 Mar 2026 16:43:57 +0100 Subject: [PATCH 09/10] refactor(menu): add a `...component.menu` package and move all the menu components in there --- src/main/java/com/knowledgepixels/nanodash/QueryResult.java | 2 +- .../nanodash/component/ExternalLinkWithActionsPanel.java | 1 + .../com/knowledgepixels/nanodash/component/NanopubItem.java | 1 + .../nanodash/component/QueryResultNanopubSet.java | 1 + .../nanodash/component/{ => menu}/ActionMenu.html | 2 +- .../nanodash/component/{ => menu}/ActionMenu.java | 2 +- .../nanodash/component/{ => menu}/BaseDisplayMenu.html | 0 .../nanodash/component/{ => menu}/BaseDisplayMenu.java | 2 +- .../nanodash/component/{ => menu}/ExploreDisplayMenu.html | 2 +- .../nanodash/component/{ => menu}/ExploreDisplayMenu.java | 2 +- .../nanodash/component/{ => menu}/ViewDisplayMenu.html | 2 +- .../nanodash/component/{ => menu}/ViewDisplayMenu.java | 2 +- .../knowledgepixels/nanodash/component/menu/package-info.java | 4 ++++ 13 files changed, 15 insertions(+), 8 deletions(-) rename src/main/java/com/knowledgepixels/nanodash/component/{ => menu}/ActionMenu.html (70%) rename src/main/java/com/knowledgepixels/nanodash/component/{ => menu}/ActionMenu.java (98%) rename src/main/java/com/knowledgepixels/nanodash/component/{ => menu}/BaseDisplayMenu.html (100%) rename src/main/java/com/knowledgepixels/nanodash/component/{ => menu}/BaseDisplayMenu.java (92%) rename src/main/java/com/knowledgepixels/nanodash/component/{ => menu}/ExploreDisplayMenu.html (67%) rename src/main/java/com/knowledgepixels/nanodash/component/{ => menu}/ExploreDisplayMenu.java (95%) rename src/main/java/com/knowledgepixels/nanodash/component/{ => menu}/ViewDisplayMenu.html (71%) rename src/main/java/com/knowledgepixels/nanodash/component/{ => menu}/ViewDisplayMenu.java (98%) create mode 100644 src/main/java/com/knowledgepixels/nanodash/component/menu/package-info.java diff --git a/src/main/java/com/knowledgepixels/nanodash/QueryResult.java b/src/main/java/com/knowledgepixels/nanodash/QueryResult.java index ec0624fa..7cd8fdba 100644 --- a/src/main/java/com/knowledgepixels/nanodash/QueryResult.java +++ b/src/main/java/com/knowledgepixels/nanodash/QueryResult.java @@ -1,7 +1,7 @@ package com.knowledgepixels.nanodash; import com.knowledgepixels.nanodash.component.ButtonList; -import com.knowledgepixels.nanodash.component.ViewDisplayMenu; +import com.knowledgepixels.nanodash.component.menu.ViewDisplayMenu; import com.knowledgepixels.nanodash.domain.AbstractResourceWithProfile; import com.knowledgepixels.nanodash.page.NanodashPage; import org.apache.wicket.behavior.AttributeAppender; diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java index 1d0619b2..37545b9b 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java @@ -1,5 +1,6 @@ package com.knowledgepixels.nanodash.component; +import com.knowledgepixels.nanodash.component.menu.ExploreDisplayMenu; import com.knowledgepixels.nanodash.page.ExplorePage; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; diff --git a/src/main/java/com/knowledgepixels/nanodash/component/NanopubItem.java b/src/main/java/com/knowledgepixels/nanodash/component/NanopubItem.java index 81142828..d8aff387 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/NanopubItem.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/NanopubItem.java @@ -3,6 +3,7 @@ import com.knowledgepixels.nanodash.*; import com.knowledgepixels.nanodash.action.NanopubAction; import com.knowledgepixels.nanodash.action.RetractionAction; +import com.knowledgepixels.nanodash.component.menu.ActionMenu; import com.knowledgepixels.nanodash.domain.User; import com.knowledgepixels.nanodash.page.ListPage; import com.knowledgepixels.nanodash.page.UserPage; diff --git a/src/main/java/com/knowledgepixels/nanodash/component/QueryResultNanopubSet.java b/src/main/java/com/knowledgepixels/nanodash/component/QueryResultNanopubSet.java index 71d9b182..953495c0 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/QueryResultNanopubSet.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/QueryResultNanopubSet.java @@ -3,6 +3,7 @@ import com.knowledgepixels.nanodash.NanodashSession; import com.knowledgepixels.nanodash.QueryResult; import com.knowledgepixels.nanodash.ViewDisplay; +import com.knowledgepixels.nanodash.component.menu.ViewDisplayMenu; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.behavior.AttributeAppender; diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ActionMenu.html b/src/main/java/com/knowledgepixels/nanodash/component/menu/ActionMenu.html similarity index 70% rename from src/main/java/com/knowledgepixels/nanodash/component/ActionMenu.html rename to src/main/java/com/knowledgepixels/nanodash/component/menu/ActionMenu.html index 793dd9b5..27a85fc1 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ActionMenu.html +++ b/src/main/java/com/knowledgepixels/nanodash/component/menu/ActionMenu.html @@ -2,7 +2,7 @@ - + diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ActionMenu.java b/src/main/java/com/knowledgepixels/nanodash/component/menu/ActionMenu.java similarity index 98% rename from src/main/java/com/knowledgepixels/nanodash/component/ActionMenu.java rename to src/main/java/com/knowledgepixels/nanodash/component/menu/ActionMenu.java index 63130a45..3e15fc9d 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ActionMenu.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/menu/ActionMenu.java @@ -1,4 +1,4 @@ -package com.knowledgepixels.nanodash.component; +package com.knowledgepixels.nanodash.component.menu; import com.knowledgepixels.nanodash.*; import com.knowledgepixels.nanodash.action.NanopubAction; diff --git a/src/main/java/com/knowledgepixels/nanodash/component/BaseDisplayMenu.html b/src/main/java/com/knowledgepixels/nanodash/component/menu/BaseDisplayMenu.html similarity index 100% rename from src/main/java/com/knowledgepixels/nanodash/component/BaseDisplayMenu.html rename to src/main/java/com/knowledgepixels/nanodash/component/menu/BaseDisplayMenu.html diff --git a/src/main/java/com/knowledgepixels/nanodash/component/BaseDisplayMenu.java b/src/main/java/com/knowledgepixels/nanodash/component/menu/BaseDisplayMenu.java similarity index 92% rename from src/main/java/com/knowledgepixels/nanodash/component/BaseDisplayMenu.java rename to src/main/java/com/knowledgepixels/nanodash/component/menu/BaseDisplayMenu.java index 67667812..0a96f441 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/BaseDisplayMenu.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/menu/BaseDisplayMenu.java @@ -1,4 +1,4 @@ -package com.knowledgepixels.nanodash.component; +package com.knowledgepixels.nanodash.component.menu; import org.apache.wicket.Component; import org.apache.wicket.markup.html.panel.Panel; diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.html b/src/main/java/com/knowledgepixels/nanodash/component/menu/ExploreDisplayMenu.html similarity index 67% rename from src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.html rename to src/main/java/com/knowledgepixels/nanodash/component/menu/ExploreDisplayMenu.html index ed31e000..0c9a1d9e 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.html +++ b/src/main/java/com/knowledgepixels/nanodash/component/menu/ExploreDisplayMenu.html @@ -2,7 +2,7 @@ - diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.java b/src/main/java/com/knowledgepixels/nanodash/component/menu/ExploreDisplayMenu.java similarity index 95% rename from src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.java rename to src/main/java/com/knowledgepixels/nanodash/component/menu/ExploreDisplayMenu.java index 7b3de343..5d880d79 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ExploreDisplayMenu.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/menu/ExploreDisplayMenu.java @@ -1,4 +1,4 @@ -package com.knowledgepixels.nanodash.component; +package com.knowledgepixels.nanodash.component.menu; import com.knowledgepixels.nanodash.page.ExplorePage; import org.apache.wicket.markup.html.link.BookmarkablePageLink; diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.html b/src/main/java/com/knowledgepixels/nanodash/component/menu/ViewDisplayMenu.html similarity index 71% rename from src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.html rename to src/main/java/com/knowledgepixels/nanodash/component/menu/ViewDisplayMenu.html index e425ec75..e0f0be33 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.html +++ b/src/main/java/com/knowledgepixels/nanodash/component/menu/ViewDisplayMenu.html @@ -2,7 +2,7 @@ - diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.java b/src/main/java/com/knowledgepixels/nanodash/component/menu/ViewDisplayMenu.java similarity index 98% rename from src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.java rename to src/main/java/com/knowledgepixels/nanodash/component/menu/ViewDisplayMenu.java index d3373129..36299e92 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ViewDisplayMenu.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/menu/ViewDisplayMenu.java @@ -1,4 +1,4 @@ -package com.knowledgepixels.nanodash.component; +package com.knowledgepixels.nanodash.component.menu; import com.knowledgepixels.nanodash.NanodashSession; import com.knowledgepixels.nanodash.NanopubElement; diff --git a/src/main/java/com/knowledgepixels/nanodash/component/menu/package-info.java b/src/main/java/com/knowledgepixels/nanodash/component/menu/package-info.java new file mode 100644 index 00000000..f37f0335 --- /dev/null +++ b/src/main/java/com/knowledgepixels/nanodash/component/menu/package-info.java @@ -0,0 +1,4 @@ +/** + * This package contains the menu components. + */ +package com.knowledgepixels.nanodash.component.menu; \ No newline at end of file From 62604b6f918ab77e599a5ba6ecd51366fbea6a6f Mon Sep 17 00:00:00 2001 From: Ashley Caselli Date: Wed, 4 Mar 2026 17:42:49 +0100 Subject: [PATCH 10/10] feat(ExternalLinkWithActionsPanel): update component so to choose between shown elements (copy icon, explore button, menu) --- .../ExternalLinkWithActionsPanel.java | 30 ++++++++++++------- .../nanodash/page/ExplorePage.html | 2 +- .../nanodash/page/ExplorePage.java | 5 +++- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java index 37545b9b..9de225ef 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/ExternalLinkWithActionsPanel.java @@ -19,12 +19,16 @@ public class ExternalLinkWithActionsPanel extends Panel { private final IModel urlModel; - private final IModel labelModel; + private IModel labelModel; private IRI sourceNanopub; - public ExternalLinkWithActionsPanel(String id, IModel urlModel, IModel labelModel) { + public ExternalLinkWithActionsPanel(String id, IModel urlModel) { super(id); this.urlModel = urlModel; + } + + public ExternalLinkWithActionsPanel(String id, IModel urlModel, IModel labelModel) { + this(id, urlModel); this.labelModel = labelModel; } @@ -60,13 +64,17 @@ public void onClick(AjaxRequestTarget target) { add(new ExploreDisplayMenu("np", urlModel.getObject(), labelModel.getObject(), sourceNanopub)); } else { add(new Label("np", "").setVisible(false)); - AjaxLink exploreButton = new AjaxLink<>("exploreButton") { - @Override - public void onClick(AjaxRequestTarget target) { - setResponsePage(ExplorePage.class, new PageParameters().set("id", urlModel.getObject()).set("label", labelModel.getObject())); - } - }; - add(exploreButton); + if (labelModel != null) { + AjaxLink exploreButton = new AjaxLink<>("exploreButton") { + @Override + public void onClick(AjaxRequestTarget target) { + setResponsePage(ExplorePage.class, new PageParameters().set("id", urlModel.getObject()).set("label", labelModel.getObject())); + } + }; + add(exploreButton); + } else { + add(new Label("exploreButton", "").setVisible(false)); + } } } @@ -74,7 +82,9 @@ public void onClick(AjaxRequestTarget target) { protected void onDetach() { super.onDetach(); urlModel.detach(); - labelModel.detach(); + if (labelModel != null) { + labelModel.detach(); + } } } diff --git a/src/main/java/com/knowledgepixels/nanodash/page/ExplorePage.html b/src/main/java/com/knowledgepixels/nanodash/page/ExplorePage.html index 395f4250..97a4ad6d 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/ExplorePage.html +++ b/src/main/java/com/knowledgepixels/nanodash/page/ExplorePage.html @@ -26,7 +26,7 @@

-

Full identifier:

+

back to context diff --git a/src/main/java/com/knowledgepixels/nanodash/page/ExplorePage.java b/src/main/java/com/knowledgepixels/nanodash/page/ExplorePage.java index 242344a5..98b4d0d6 100644 --- a/src/main/java/com/knowledgepixels/nanodash/page/ExplorePage.java +++ b/src/main/java/com/knowledgepixels/nanodash/page/ExplorePage.java @@ -261,7 +261,10 @@ private void initPage() { } add(new Label("pagetitle", shortName + " (explore) | nanodash")); add(new Label("termname", shortName)); - add(new ExternalLink("urilink", ref, ref)); + + //add(new ExternalLink("urilink", ref, ref)); + add(new ExternalLinkWithActionsPanel("urilink", Model.of(ref))); + if (publishedNanopub != null) { add(new Label("statusline", "

Status

Successfully published.

").setEscapeModelStrings(false)); } else if (isNanopubId && SignatureUtils.seemsToHaveSignature(np)) {