From bdfc69357fbe61c5be1372166337ebccb3ce34aa Mon Sep 17 00:00:00 2001 From: Tobias Kuhn Date: Wed, 22 Apr 2026 17:36:33 +0200 Subject: [PATCH] fix: use absolute nav links in TitleBar The top-left menu items used './publish', './userlist', './spaces', './queries' as hrefs, which the browser resolved relative to the current URL. From a connector page like /connector/select, clicking "Publish" therefore hit /connector/publish (GenPublishPage) without the required template param and errored out (#450). - Replace the WebMarkupContainer nav slots with BookmarkablePageLink so Wicket generates absolute, page-class-aware URLs. - Change the static Home link href from "." to "/" so it also goes to the app root regardless of current URL. Fixes #450. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../nanodash/component/TitleBar.html | 2 +- .../nanodash/component/TitleBar.java | 24 ++++++++++++------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/knowledgepixels/nanodash/component/TitleBar.html b/src/main/java/com/knowledgepixels/nanodash/component/TitleBar.html index 3441bdf92..aaefccb45 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/TitleBar.html +++ b/src/main/java/com/knowledgepixels/nanodash/component/TitleBar.html @@ -16,7 +16,7 @@
-Home +Home Users Spaces Query diff --git a/src/main/java/com/knowledgepixels/nanodash/component/TitleBar.java b/src/main/java/com/knowledgepixels/nanodash/component/TitleBar.java index 6cdb26974..daf6171fc 100644 --- a/src/main/java/com/knowledgepixels/nanodash/component/TitleBar.java +++ b/src/main/java/com/knowledgepixels/nanodash/component/TitleBar.java @@ -5,6 +5,8 @@ import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.data.DataView; @@ -14,6 +16,10 @@ import com.knowledgepixels.nanodash.NanodashPreferences; import com.knowledgepixels.nanodash.Utils; import com.knowledgepixels.nanodash.page.NanodashPage; +import com.knowledgepixels.nanodash.page.PublishPage; +import com.knowledgepixels.nanodash.page.QueryListPage; +import com.knowledgepixels.nanodash.page.SpaceListPage; +import com.knowledgepixels.nanodash.page.UserListPage; /** * TitleBar is the top bar of the Nanodash application, which contains @@ -38,10 +44,10 @@ public TitleBar(String id, NanodashPage page, String highlight, NanodashPageRef. this.highlight = highlight; add(new ProfileItem("profile", page)); - createContainer("users"); - createContainer("connectors"); - createContainer("publish").setVisible(!NanodashPreferences.get().isReadOnlyMode()); - createContainer("query"); + createNavLink("users", UserListPage.class); + createNavLink("connectors", SpaceListPage.class); + createNavLink("publish", PublishPage.class).setVisible(!NanodashPreferences.get().isReadOnlyMode()); + createNavLink("query", QueryListPage.class); WebMarkupContainer breadcrumbPath = new WebMarkupContainer("breadcrumbpath"); breadcrumbPath.setVisible(pathRefs.length > 0); @@ -125,13 +131,13 @@ private static String stripParentPrefix(String parent, String child) { return remainder; } - private WebMarkupContainer createContainer(String id) { - WebMarkupContainer c = new WebMarkupContainer(id); + private BookmarkablePageLink createNavLink(String id, Class pageClass) { + BookmarkablePageLink link = new BookmarkablePageLink<>(id, pageClass); if (id.equals(highlight)) { - c.add(new AttributeAppender("class", "selected")); + link.add(new AttributeAppender("class", "selected")); } - add(c); - return c; + add(link); + return link; } }