You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2016/10/28 07:33:16 UTC

[13/21] isis git commit: ISIS-1224 Upgrade select2 from v3.5.2 to v4

ISIS-1224 Upgrade select2 from v3.5.2 to v4

In ActionParametersFormPanel do not repaint the complete ReferencePanel/ValueChoicesSelect2Panel but just its Select2 child component.
It the complete parent is repainted then Select2 JS widget somehow looses information about the parent DOM element and renders the drop-down as orphan, i.e. CSS: position:absolute; left:0; top:0;

If only the Select2Choice element is repainted then it just sends its new values as JSON back and doesn't recreate the complete widget but just its options.

The flow is:
1) the user types something in another field
2) the user clicks on Select2
2.1) the 'change' JS event for the first field fires Ajax call
2.1.1) with the old behavior the Ajax response repaints the whole ReferencePanel
2.1.2) with the new behavior the Ajax response repaints only the Select2 options
2.2) the click on Select2 opens its drop-down
2.3) the Ajax response for 2.1) comes and closes Select2 to update it
3) with the new behavior the user has to click second time to show the drop-down again, but at least its CSS position is correct


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/7b5bfad7
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/7b5bfad7
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/7b5bfad7

Branch: refs/heads/master
Commit: 7b5bfad70743279c59cfe3e520ba7feb63098529
Parents: 17d7159
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Sun Dec 13 15:21:52 2015 +0100
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Sun Dec 13 15:21:52 2015 +0100

----------------------------------------------------------------------
 .../ui/components/actions/ActionParametersFormPanel.java |  4 ++--
 .../ui/components/scalars/ScalarPanelAbstract.java       |  9 +++++++++
 .../ui/components/scalars/reference/ReferencePanel.java  | 11 ++++++++++-
 .../ui/components/widgets/select2/Select2ChoiceUtil.java |  1 +
 .../widgets/valuechoices/ValueChoicesSelect2Panel.java   | 11 +++++++++++
 5 files changed, 33 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/7b5bfad7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
index d1d7020..a8cde09 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersFormPanel.java
@@ -242,8 +242,8 @@ public class ActionParametersFormPanel extends PanelAbstract<ActionModel> {
                         // this could throw a ConcurrencyException as we may have to reload the 
                         // object adapter of the action in order to compute the choices
                         // (and that object adapter might have changed)
-                        if(paramPanel.updateChoices(pendingArguments)) {
-                            target.add(paramPanel);
+                        if (paramPanel.updateChoices(pendingArguments)) {
+                            paramPanel.repaint(target);
                         }
                     }
                 }

http://git-wip-us.apache.org/repos/asf/isis/blob/7b5bfad7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index a9df6fa..13d117c 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -386,6 +386,15 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         return false;
     }
 
+    /**
+     * Repaints this panel of just some of its children
+     *
+     * @param target The Ajax request handler
+     */
+    public void repaint(AjaxRequestTarget target) {
+        target.add(this);
+    }
+
 
     // ///////////////////////////////////////////////////////////////////
 

http://git-wip-us.apache.org/repos/asf/isis/blob/7b5bfad7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 937f990..667b4fe 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -24,6 +24,7 @@ import java.util.List;
 import javax.inject.Inject;
 
 import com.google.common.collect.Lists;
+import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.wicketstuff.select2.ChoiceProvider;
 import org.wicketstuff.select2.Select2Choice;
 import org.wicketstuff.select2.Settings;
@@ -534,5 +535,13 @@ public class ReferencePanel extends ScalarPanelAbstract {
         return IsisContext.getConfiguration();
     }
 
-
+    /**
+     * Repaints just the Select2 component
+     *
+     * @param target The Ajax request handler
+     */
+    @Override
+    public void repaint(AjaxRequestTarget target) {
+        target.add(select2Field);
+    }
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/7b5bfad7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceUtil.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceUtil.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceUtil.java
index 0c059d3..c8ef4d7 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceUtil.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/Select2ChoiceUtil.java
@@ -35,6 +35,7 @@ public final class Select2ChoiceUtil  {
     public static Select2Choice<ObjectAdapterMemento> newSelect2Choice(String id, final IModel<ObjectAdapterMemento> modelObject, ScalarModel scalarModel) {
         Select2Choice<ObjectAdapterMemento> select2Choice = new Select2Choice<>(id, modelObject, EmptyChoiceProvider.INSTANCE);
         select2Choice.setRequired(scalarModel.isRequired());
+        select2Choice.setOutputMarkupPlaceholderTag(true);
         return select2Choice;
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/7b5bfad7/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
index cbfa213..c8f51a1 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/valuechoices/ValueChoicesSelect2Panel.java
@@ -26,6 +26,7 @@ import com.google.common.base.Function;
 import com.google.common.base.Predicate;
 import com.google.common.collect.Collections2;
 import com.google.common.collect.Lists;
+import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.wicketstuff.select2.ChoiceProvider;
 import org.wicketstuff.select2.Select2Choice;
 
@@ -247,6 +248,16 @@ public class ValueChoicesSelect2Panel extends ScalarPanelAbstract implements Sca
     }
 
     /**
+     * Repaints just the Select2 component
+     *
+     * @param target The Ajax request handler
+     */
+    @Override
+    public void repaint(AjaxRequestTarget target) {
+        target.add(select2Field);
+    }
+
+    /**
      * sets up the choices, also ensuring that any currently held value
      * is compatible.
      */