From c8d266dccdf31df190c7564858f24965b6a560b3 Mon Sep 17 00:00:00 2001
From: Diego Cardoso
Date: Tue, 16 Jan 2024 10:39:27 -0300
Subject: [PATCH 1/3] feat: add target API to SideNavItem
---
.../flow/component/sidenav/SideNavItem.java | 60 +++++++++++++++++++
1 file changed, 60 insertions(+)
diff --git a/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java b/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java
index bd4494022f1..e687fdb264b 100644
--- a/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java
+++ b/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java
@@ -357,6 +357,66 @@ public void setPathAliases(Set pathAliases) {
}
}
+ /**
+ * Gets the target of this item.
+ *
+ * @return the target of this item
+ */
+ public String getTarget() {
+ return getElement().getProperty("target");
+ }
+
+ /**
+ * Where to display the linked URL, as the name for a browsing context.
+ *
+ * The following keywords have special meanings for where to load the URL:
+ *
+ * _self
: the current browsing context. (Default)
+ * _blank
: usually a new tab, but users can configure
+ * browsers to open a new window instead.
+ * _parent
: the parent browsing context of the current one.
+ * If no parent, behaves as _self
.
+ * _top
: the topmost browsing context (the "highest"
+ * context that’s an ancestor of the current one). If no ancestors, behaves
+ * as _self
.
+ *
+ *
+ *
+ * @param target
+ * the target of this item
+ */
+ public void setTarget(String target) {
+ if (target == null) {
+ getElement().removeProperty("target");
+ } else {
+ getElement().setProperty("target", target);
+ }
+ }
+
+ /**
+ * Sets whether the target URL should be opened in a new browser tab.
+ *
+ * This is a convenience method for setting the target to
+ * _blank
. See {@link #setTarget(String)} for more information.
+ *
+ *
+ * @param openInNewBrowserTab true if the target URL should be opened in a
+ * new browser tab, false otherwise
+ */
+ public void setOpenInNewBrowserTab(boolean openInNewBrowserTab) {
+ setTarget(openInNewBrowserTab ? "_blank" : null);
+ }
+
+ /**
+ * Gets whether the target URL should be opened in a new browser tab.
+ *
+ * @return true if the target URL should be opened in a new browser tab,
+ * false otherwise
+ */
+ public boolean isOpenInNewBrowserTab() {
+ return "_blank".equals(getTarget());
+ }
+
private Set getPathAliasesFromView(Class extends Component> view,
RouteParameters routeParameters) {
RouteAlias[] routeAliases = view.getAnnotationsByType(RouteAlias.class);
From 5d6f2d38b9b45be07b4326b5fabbc0f626efff0e Mon Sep 17 00:00:00 2001
From: Diego Cardoso
Date: Tue, 16 Jan 2024 10:45:02 -0300
Subject: [PATCH 2/3] test: add tests for new target API in SideNavItem
---
.../sidenav/tests/SideNavItemTest.java | 33 +++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/test/java/com/vaadin/flow/component/sidenav/tests/SideNavItemTest.java b/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/test/java/com/vaadin/flow/component/sidenav/tests/SideNavItemTest.java
index 9d6c20fbd1b..68cc3b9b9f7 100644
--- a/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/test/java/com/vaadin/flow/component/sidenav/tests/SideNavItemTest.java
+++ b/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/test/java/com/vaadin/flow/component/sidenav/tests/SideNavItemTest.java
@@ -604,6 +604,39 @@ public void setPathAsComponent_aliasWithMissingParameterNotAdded() {
}, TestRouteWithAliases.class);
}
+ @Test
+ public void setTarget_hasTarget() {
+ sideNavItem.setTarget("_blank");
+ Assert.assertEquals("_blank",
+ sideNavItem.getElement().getProperty("target"));
+ Assert.assertEquals("_blank", sideNavItem.getTarget());
+ }
+
+ @Test
+ public void targetDefined_setToNull_noTarget() {
+ sideNavItem.setTarget("_blank");
+ sideNavItem.setTarget(null);
+ Assert.assertFalse(sideNavItem.getElement().hasProperty("target"));
+ Assert.assertNull(sideNavItem.getTarget());
+ }
+
+ @Test
+ public void setOpenInNewBrowserTab_targetBlankDefinedOnProperty() {
+ // call setOpenInNewTab and check that getTarget returns "_blank"
+ sideNavItem.setOpenInNewBrowserTab(true);
+ Assert.assertEquals("_blank",
+ sideNavItem.getElement().getProperty("target"));
+ Assert.assertTrue(sideNavItem.isOpenInNewBrowserTab());
+ }
+
+ @Test
+ public void openInNewBrowserTabDefined_setOpenInNewBrowserTabToFalse() {
+ sideNavItem.setOpenInNewBrowserTab(true);
+ sideNavItem.setOpenInNewBrowserTab(false);
+ Assert.assertFalse(sideNavItem.getElement().hasProperty("target"));
+ Assert.assertFalse(sideNavItem.isOpenInNewBrowserTab());
+ }
+
private boolean sideNavItemHasLabelElement() {
return sideNavItem.getElement().getChildren()
.anyMatch(this::isLabelElement);
From 58607b34826f3089fdcac71e6d4993cc26e55239 Mon Sep 17 00:00:00 2001
From: Diego Cardoso
Date: Tue, 16 Jan 2024 10:57:25 -0300
Subject: [PATCH 3/3] chore: run formatter
---
.../java/com/vaadin/flow/component/sidenav/SideNavItem.java | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java b/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java
index e687fdb264b..6bb907a7ac7 100644
--- a/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java
+++ b/vaadin-side-nav-flow-parent/vaadin-side-nav-flow/src/main/java/com/vaadin/flow/component/sidenav/SideNavItem.java
@@ -400,8 +400,9 @@ public void setTarget(String target) {
* _blank
. See {@link #setTarget(String)} for more information.
*
*
- * @param openInNewBrowserTab true if the target URL should be opened in a
- * new browser tab, false otherwise
+ * @param openInNewBrowserTab
+ * true if the target URL should be opened in a new browser tab,
+ * false otherwise
*/
public void setOpenInNewBrowserTab(boolean openInNewBrowserTab) {
setTarget(openInNewBrowserTab ? "_blank" : null);