WICKET-4998 + WICKET-4990 removed all inline event handling, use
stopImmediatePropagation() to prevent other behaviors from firing

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

Branch: refs/heads/reference-guide
Commit: acd93ba76e90f16f0c07ff46de5381a82de709d2
Parents: 68a6c04
Author: svenmeier <[email protected]>
Authored: Fri Jan 25 20:09:28 2013 +0100
Committer: svenmeier <[email protected]>
Committed: Fri Jan 25 20:09:28 2013 +0100

----------------------------------------------------------------------
 .../html/autocomplete/AutoCompleteTextField.java   |   22 ++++++-
 .../html/autocomplete/wicket-autocomplete.js       |   45 ++++-----------
 2 files changed, 30 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/acd93ba7/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java
index d554bdc..f821a61 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteTextField.java
@@ -18,7 +18,9 @@ package 
org.apache.wicket.extensions.ajax.markup.html.autocomplete;
 
 import java.util.Iterator;
 
+import org.apache.wicket.Component;
 import org.apache.wicket.ConverterLocator;
+import org.apache.wicket.behavior.Behavior;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.model.IModel;
@@ -235,9 +237,15 @@ public abstract class AutoCompleteTextField<T> extends 
TextField<T>
                };
        }
 
-       /** {@inheritDoc} */
        @Override
-       protected void onBeforeRender()
+       protected void onInitialize()
+       {
+               super.onInitialize();
+
+               initializeAutoCompleteBehavior();
+       }
+
+       private void initializeAutoCompleteBehavior()
        {
                // add auto complete behavior to this component if its not 
already there
                if (behavior == null)
@@ -245,7 +253,15 @@ public abstract class AutoCompleteTextField<T> extends 
TextField<T>
                        // we do this here instead of constructor so we can 
have an overridable factory method
                        add(behavior = newAutoCompleteBehavior(renderer, 
settings));
                }
-               super.onBeforeRender();
+       }
+
+       @Override
+       public Component add(Behavior... behaviors)
+       {
+               // the AutoCompleteBehavior must be bound first, see 
wicket-autocomplete.js
+               initializeAutoCompleteBehavior();
+
+               return super.add(behaviors);
        }
 
        @Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/acd93ba7/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
index 32bedf5..7e32cfc 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
@@ -53,13 +53,6 @@
                var mouseactive=0;      // is mouse selection active
                var     hidingAutocomplete=0;           // are we hiding the 
autocomplete list
 
-               // pointers of the browser events
-               var objonkeydown;
-               var objonkeyup;
-               var objonkeypress;
-               var objonchange;
-               var objonchangeoriginal;
-               var objonfocus;
                var initialElement;
 
                // holds the eventual margins, padding, etc. of the menu 
container.
@@ -98,13 +91,6 @@
                        var obj = Wicket.$(elementId);
                        initialElement = obj;
 
-                       objonkeydown=obj.onkeydown;
-                       objonkeyup=obj.onkeyup;
-                       objonkeypress=obj.onkeypress;
-                       objonfocus=obj.onfocus;
-
-                       objonchange=obj.onchange;
-
                        Wicket.Event.add(obj, 'blur', function (jqEvent) {
                                if (mouseactive === 1) {
                                        ignoreOneFocusGain = true;
@@ -130,10 +116,6 @@
                                        }
                                }
                                ignoreOneFocusGain = false;
-
-                               if(typeof objonfocus==="function") {
-                                       return objonfocus.apply(this,[jqEvent]);
-                               }
                        });
 
                        Wicket.Event.add(obj, 'keydown', function (jqEvent) {
@@ -180,32 +162,33 @@
                                                        hidingAutocomplete = 1;
                                                        if(value) {
                                                                obj.value = 
value;
-                                                               if 
(typeof(objonchange) === "function") {
-                                                                       
objonchange.apply(this,[jqEvent]);
-                                                               } else {
-                                                                       
jQuery(obj).triggerHandler('change');
-                                                               }
+                                                               
jQuery(obj).triggerHandler('change');
                                                        }
                                                } else if 
(Wicket.AutoCompleteSettings.enterHidesWithNoSelection) {
                                                        hideAutoComplete();
                                                        hidingAutocomplete = 1;
                                                }
                                                mouseactive = 0;
-                                               if (typeof objonkeydown === 
"function") {
-                                                       return 
objonkeydown.apply(this,[jqEvent]);
-                                               }
+
                                                return true;
 
                                        default:
                                }
                        });
 
+                       Wicket.Event.add(obj, 'change', function (jqEvent) {
+                               if (mouseactive) {
+                                       // don't let any other change handler 
get this
+                                       jqEvent.stopImmediatePropagation();
+                               }
+                       });
+
                        Wicket.Event.add(obj, 'inputchange', function (jqEvent) 
{
                                var kc = Wicket.Event.keyCode(jqEvent);
                                switch(kc) {
                                        case KEY_TAB:
                                        case KEY_ENTER:
-                                               return 
jqEvent.stopPropagation();
+                                               return 
jqEvent.stopImmediatePropagation();
                                        case KEY_UP:
                                        case KEY_DOWN:
                                        case KEY_ESC:
@@ -218,22 +201,16 @@
                                        default:
                                                updateChoices();
                                }
-                               if(typeof objonkeyup === "function") {
-                                       return objonkeyup.apply(this,[jqEvent]);
-                               }
                        });
 
                        Wicket.Event.add(obj, 'keypress', function (jqEvent) {
                                if(Wicket.Event.keyCode(jqEvent) === KEY_ENTER){
                                        if(selected>-1 || hidingAutocomplete 
=== 1){
                                                hidingAutocomplete=0;
-                                               jqEvent.stopPropagation();
+                                               
jqEvent.stopImmediatePropagation();
                                                return false;
                                        }
                                }
-                               if(typeof objonkeypress==="function") {
-                                       return 
objonkeypress.apply(this,[jqEvent]);
-                               }
                        });
 
                        if (Wicket.Focus.getFocusedElement() === obj && 
isShowing === true)

Reply via email to