You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/04/25 14:29:51 UTC

[isis] 02/02: ISIS-3022: adds support for CTRL down behavior, that is, opens URL in new tab if CTRL pressed

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit aacfbd18a3da30e05edd382dc3276a45d6bd4d84
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Apr 25 16:29:41 2022 +0200

    ISIS-3022: adds support for CTRL down behavior, that is, opens URL in
    new tab if CTRL pressed
---
 .../entity/icontitle/EntityIconAndTitlePanel.java  | 39 +++++++--------------
 .../org/apache/isis/viewer/wicket/ui/util/Wkt.java | 40 ++++++++++++++++++++++
 2 files changed, 53 insertions(+), 26 deletions(-)

diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
index 3a649a0a5a..4b2718e57a 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
@@ -21,11 +21,8 @@ package org.apache.isis.viewer.wicket.ui.components.entity.icontitle;
 import java.util.Optional;
 
 import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.Page;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.link.AbstractLink;
-import org.apache.wicket.markup.html.link.BookmarkablePageLink;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.commons.internal.assertions._Assert;
 import org.apache.isis.commons.internal.base._Strings;
@@ -137,31 +134,21 @@ extends PanelAbstract<ManagedObject, ObjectAdapterModel> {
         return link;
     }
 
-    private AbstractLink createDynamicallyVisibleLink(final ManagedObject targetAdapter) {
+    private AbstractLink createDynamicallyVisibleLink(final ManagedObject _targetAdapter) {
+        val pageParameters = PageParameterUtils
+                .createPageParametersForBookmarkablePageLink(getModel(), _targetAdapter);
+        val pageClass = getPageClassRegistry().getPageClass(PageType.ENTITY);
 
-        final ObjectAdapterModel entityModel = getModel();
-        final PageParameters pageParameters = PageParameterUtils
-                .createPageParametersForBookmarkablePageLink(getModel(), targetAdapter);
-        final Class<? extends Page> pageClass = getPageClassRegistry().getPageClass(PageType.ENTITY);
+        return Wkt.bookmarkablePageLinkWithVisibility(ID_ENTITY_LINK, pageClass, pageParameters, ()->{
+            // not visible if null
+            // (except its null because its a detached entity,
+            // which we can re-fetch due to memoized bookmark)
+            val targetAdapter = EntityIconAndTitlePanel.this.getModel().getObject();
+            return targetAdapter != null
+                    && (targetAdapter.getPojo()!=null
+                            || targetAdapter.isBookmarkMemoized());
+        });
 
-        final BookmarkablePageLink<Void> link = new BookmarkablePageLink<Void>(
-                ID_ENTITY_LINK, pageClass, pageParameters) {
-
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public boolean isVisible() {
-                // not visible if null
-                // (except its null because its a detached entity,
-                // which we can re-fetch due to memoized bookmark)
-                val targetAdapter = entityModel.getObject();
-                return targetAdapter != null
-                        && (targetAdapter.getPojo()!=null
-                                || targetAdapter.isBookmarkMemoized());
-            }
-        };
-
-        return link;
     }
 
     private String titleAbbreviated(final String titleString) {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
index b343dd6fd8..c3a901f040 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/Wkt.java
@@ -25,6 +25,7 @@ import java.util.function.Supplier;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.Page;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -51,6 +52,7 @@ import org.apache.wicket.markup.html.form.upload.FileUpload;
 import org.apache.wicket.markup.html.form.upload.FileUploadField;
 import org.apache.wicket.markup.html.image.Image;
 import org.apache.wicket.markup.html.link.AbstractLink;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.markup.html.panel.Fragment;
@@ -59,6 +61,7 @@ import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.OddEvenItem;
 import org.apache.wicket.markup.repeater.RepeatingView;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.util.convert.IConverter;
@@ -225,6 +228,41 @@ public class Wkt {
         }
     }
 
+    // -- BOKMARKABLE PAGE LINK
+
+    public BookmarkablePageLink<Void> bookmarkablePageLinkWithVisibility(
+            final String id,
+            final Class<? extends Page> pageClass,
+            final PageParameters pageParameters,
+            final SerializableBooleanSupplier dynamicVisibility) {
+
+        return new BookmarkablePageLink<Void>(
+                id, pageClass, pageParameters) {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public boolean isVisible() {
+                return dynamicVisibility.getAsBoolean();
+            }
+
+            //XXX ISIS[3022] adds support for CTRL down behavior, that is, opens URL in new tab if CTRL pressed
+            @Override protected CharSequence getOnClickScript(final CharSequence url) {
+                return "var win = this.ownerDocument.defaultView || this.ownerDocument.parentWindow; "
+                        + "if (win == window) {"
+                        + "  if(event.ctrlKey) {"
+                        + "    window.open('" + url + "', '_blank').focus();"
+                        + "  } else {"
+                        + "    window.location.href='" + url + "';"
+                        + "  }"
+                        + "}"
+                        + "return false";
+            }
+
+        };
+
+    }
+
     // -- BUTTON
 
     public AjaxButton button(
@@ -987,4 +1025,6 @@ public class Wkt {
         }
     }
 
+
+
 }