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/05/18 15:29:26 UTC

[isis] branch master updated: ISIS-3053: don't apply tooltips directly to ActionLinks

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


The following commit(s) were added to refs/heads/master by this push:
     new 9e59d9ce77 ISIS-3053: don't apply tooltips directly to ActionLinks
9e59d9ce77 is described below

commit 9e59d9ce775b1187a4ee07a7100cdf414e1a1c4e
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed May 18 17:29:20 2022 +0200

    ISIS-3053: don't apply tooltips directly to ActionLinks
    
    - instead apply them to their parent <li>
---
 .../actionmenu/entityactions/AdditionalLinksPanel.java     |  4 ++--
 .../java/org/apache/isis/viewer/wicket/ui/util/Wkt.java    | 14 ++++++++++++--
 .../apache/isis/viewer/wicket/ui/util/WktDecorators.java   |  3 +--
 .../org/apache/isis/viewer/wicket/ui/util/WktLinks.java    |  8 ++++++--
 .../org/apache/isis/viewer/wicket/ui/util/WktTooltips.java | 12 ++++++++++++
 .../wicketapp/IsisWicketAjaxRequestListenerUtil.java       | 13 ++++---------
 6 files changed, 37 insertions(+), 17 deletions(-)

diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
index 1d3d59b880..3d0c1599b5 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/AdditionalLinksPanel.java
@@ -26,8 +26,8 @@ import org.apache.isis.commons.collections.Can;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.links.ListOfLinksModel;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
-import org.apache.isis.viewer.wicket.ui.util.WktComponents;
 import org.apache.isis.viewer.wicket.ui.util.Wkt;
+import org.apache.isis.viewer.wicket.ui.util.WktComponents;
 import org.apache.isis.viewer.wicket.ui.util.WktLinks;
 
 import lombok.val;
@@ -82,7 +82,7 @@ extends PanelAbstract<List<LinkAndLabel>, ListOfLinksModel> {
 
         Wkt.listViewAdd(container, ID_ADDITIONAL_LINK_ITEM, getModel(), item->{
             val linkAndLabel = item.getModelObject();
-            item.addOrReplace(WktLinks.asAdditionalLink(ID_ADDITIONAL_LINK_TITLE, linkAndLabel));
+            item.addOrReplace(WktLinks.asAdditionalLink(item, ID_ADDITIONAL_LINK_TITLE, linkAndLabel));
         });
     }
 
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 51db7e14b4..d0ae70c970 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
@@ -93,6 +93,8 @@ import lombok.experimental.UtilityClass;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.behavior.CssClassNameAppender;
 import de.agilecoders.wicket.core.util.Attributes;
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationBehavior;
+import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationConfig;
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkboxx.CheckBoxX;
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkboxx.CheckBoxXConfig;
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkboxx.CheckBoxXConfig.Sizes;
@@ -218,6 +220,10 @@ public class Wkt {
         return new ReplaceDisabledTagWithReadonlyTagBehavior();
     }
 
+    public Behavior behaviorConfirm(final ConfirmationConfig config) {
+        return new ConfirmationBehavior(config);
+    }
+
     public Behavior behaviorAddOnClick(
             final Component component,
             final SerializableConsumer<AjaxRequestTarget> onClick) {
@@ -230,6 +236,12 @@ public class Wkt {
         return add(component, behaviorFireOnEscapeKey(onRespond));
     }
 
+    public Behavior behaviorAddConfirm(
+            final Component component,
+            final ConfirmationConfig config) {
+        return add(component, behaviorConfirm(config));
+    }
+
     public void behaviorAddReplaceDisabledTagWithReadonlyTag(final @Nullable Component component) {
         if(component==null) {
             return;
@@ -1048,6 +1060,4 @@ public class Wkt {
         }
     }
 
-
-
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/WktDecorators.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/WktDecorators.java
index 106c5cb1fd..6e8eadf130 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/WktDecorators.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/WktDecorators.java
@@ -50,7 +50,6 @@ import lombok.experimental.UtilityClass;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.behavior.CssClassNameRemover;
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig.Placement;
-import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationBehavior;
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationConfig;
 
 /**
@@ -128,7 +127,7 @@ public class WktDecorators {
                     .withBtnCancelClass(ButtonSemantics.SECONDARY.fullButtonCss())
                     .withPlacement(Placement.valueOf(decorationModel.getPlacement().name().toLowerCase()));
 
-            uiComponent.add(new ConfirmationBehavior(confirmationConfig));
+            Wkt.behaviorAddConfirm(uiComponent, confirmationConfig);
 
             if(uiComponent instanceof Button) {
                 // ensure dialog ok buttons receive the danger style as well
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/WktLinks.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/WktLinks.java
index c87e8c4280..1a7f9fc63d 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/WktLinks.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/WktLinks.java
@@ -56,8 +56,12 @@ public final class WktLinks {
 
     /**
      * For rendering {@link LinkAndLabel} within additional-link panels or drop-downs.
+     * @param tooltipReceiver
      */
-    public AbstractLink asAdditionalLink(final String titleId, final LinkAndLabel linkAndLabel) {
+    public AbstractLink asAdditionalLink(
+            final ListItem<LinkAndLabel> tooltipReceiver,
+            final String titleId,
+            final LinkAndLabel linkAndLabel) {
 
         val link = linkAndLabel.getUiComponent();
         val action = linkAndLabel.getManagedAction().getAction();
@@ -66,7 +70,7 @@ public final class WktLinks {
                 ? _Strings.isNotEmpty(((ActionLink)link).getReasonDisabledIfAny())
                 : false;
 
-        WktTooltips.addTooltip(link, hasDisabledReason
+        WktTooltips.addTooltip(tooltipReceiver, hasDisabledReason
                 ? ((ActionLink) link).getReasonDisabledIfAny()
                 : linkAndLabel.getDescription().orElse(null));
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/WktTooltips.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/WktTooltips.java
index 8fe398dfd2..19c97bd77e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/WktTooltips.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/util/WktTooltips.java
@@ -27,6 +27,7 @@ import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.viewer.common.model.PlacementDirection;
 import org.apache.isis.viewer.common.model.decorators.TooltipDecorator.TooltipDecorationModel;
+import org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.ActionLink;
 import org.apache.isis.viewer.wicket.ui.util.ExtendedPopoverConfig.PopoverBoundary;
 
 import lombok.NonNull;
@@ -58,6 +59,17 @@ public class WktTooltips {
             return target; // no body so don't render tooltip
         }
 
+        if(target instanceof ActionLink) {
+            val actionLink = (ActionLink)target;
+            if(!actionLink.getActionModel().hasParameters()) {
+                //XXX[ISIS-3051] adding a tooltip to an ActionLink will break any ConfirmationBehavior,
+                //that's also applied to the ActionLink.
+                throw _Exceptions.illegalArgument(
+                        "Adding a tooltip to an ActionLink will break any ConfirmationBehavior, "
+                        + "that's also applied to same ActionLink!");
+            }
+        }
+
         val placementDirection = tooltipDecorationModel.getPlacementDirection();
 
         final IModel<String> bodyModel = Model.of(tooltipDecorationModel.getBody());
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketAjaxRequestListenerUtil.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketAjaxRequestListenerUtil.java
index 1998424556..d170764a32 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketAjaxRequestListenerUtil.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/IsisWicketAjaxRequestListenerUtil.java
@@ -28,8 +28,7 @@ import org.apache.wicket.request.Request;
 import org.apache.wicket.request.component.IRequestablePage;
 
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
-import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
-import org.apache.isis.viewer.wicket.ui.pages.standalonecollection.StandaloneCollectionPage;
+import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
 
 import lombok.val;
 import lombok.experimental.UtilityClass;
@@ -58,13 +57,9 @@ public final class IsisWicketAjaxRequestListenerUtil {
                             final IRequestablePage iRequestablePage =
                                     ((ListenerRequestHandler)handler).getPage();
 
-                            if(iRequestablePage instanceof StandaloneCollectionPage) {
-                                val collectionPage = (StandaloneCollectionPage) iRequestablePage;
-                                collectionPage.onNewRequestCycle();
-                            }
-                            else if(iRequestablePage instanceof EntityPage) {
-                                val entityPage = (EntityPage) iRequestablePage;
-                                entityPage.onNewRequestCycle();
+                            if(iRequestablePage instanceof PageAbstract) {
+                                val pageAbstract = (PageAbstract) iRequestablePage;
+                                pageAbstract.onNewRequestCycle();
                             }
 
                         }