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 <[email protected]>
Authored: Sun Dec 13 15:21:52 2015 +0100
Committer: Martin Tzvetanov Grigorov <[email protected]>
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.
      */

Reply via email to