WICKET-4993 Add a minInputLength parameter to AutoCompleteTextField

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

Branch: refs/heads/5299-ajax-strategy
Commit: 30345bf3d004fe0d7213c59f61302b3d1c35d621
Parents: 4ab5064
Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Authored: Thu Aug 8 13:26:35 2013 +0200
Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Committed: Thu Aug 8 13:26:35 2013 +0200

----------------------------------------------------------------------
 .../AbstractAutoCompleteBehavior.java           |  1 +
 .../html/autocomplete/AutoCompleteSettings.java | 23 ++++++++++++++++++++
 .../html/autocomplete/wicket-autocomplete.js    | 20 ++++++++++++++---
 3 files changed, 41 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/30345bf3/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
index a9360a7..45ed86d 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
@@ -155,6 +155,7 @@ public abstract class AbstractAutoCompleteBehavior extends 
AbstractDefaultAjaxBe
                        settings.getIgnoreBordersWhenPositioning());
                sb.append(",showListOnFocusGain: 
").append(settings.getShowListOnFocusGain());
                sb.append(",throttleDelay: 
").append(settings.getThrottleDelay());
+               sb.append(",minInputLength: 
").append(settings.getMinInputLength());
                sb.append(",parameterName: 
'").append(settings.getParameterName()).append('\'');
                sb.append(",showCompleteListOnFocusGain: ").append(
                        settings.getShowCompleteListOnFocusGain());

http://git-wip-us.apache.org/repos/asf/wicket/blob/30345bf3/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
----------------------------------------------------------------------
diff --git 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
index 0bd6aa8..89b78ab 100644
--- 
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
+++ 
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
@@ -71,6 +71,8 @@ public final class AutoCompleteSettings implements 
IClusterable
 
        private String parameterName = "q";
 
+       private int minInputLength = 1;
+
        /**
         * Indicates whether the first item in the list is automatically 
selected when the autocomplete
         * list is shown.
@@ -357,4 +359,25 @@ public final class AutoCompleteSettings implements 
IClusterable
        {
                return parameterName;
        }
+
+       /**
+        * @return the minimum input length required to display the 
autocomplete list
+        */
+       public int getMinInputLength()
+       {
+               return minInputLength;
+       }
+
+       /**
+        * Set the minimum input length required to display the autocomplete 
list
+        *
+        * @param minInputLength
+        *            the minimum input length required to display the 
autocomplete list
+        * @return this {@link AutoCompleteSettings}
+        */
+       public AutoCompleteSettings setMinInputLength(int minInputLength)
+       {
+               this.minInputLength = minInputLength;
+               return this;
+       }
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/30345bf3/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 6de3de2..1a13d0c 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
@@ -72,6 +72,9 @@
                var localThrottler = new Wicket.Throttler(true);
                var throttleDelay = cfg.throttleDelay;
 
+               //this is the minimum input length required to display the 
autocomplete list
+               var minInputLength = cfg.minInputLength || 1;
+
                function initialize(){
                        var isShowing = false;
                        // Remove the autocompletion menu if still present from
@@ -353,7 +356,13 @@
                        var attrs = {
                                u: callbackUrl,
                                pre: [ function (attributes) {
-                                       return (document.activeElement === 
initialElement);
+                                       var activeIsInitial = 
(document.activeElement === initialElement);
+                                       var elementVal =  
Wicket.$(elementId).value;
+                                       var hasMinimumLength = 
elementVal.length >= minInputLength;
+
+                                       var result = hasMinimumLength && 
activeIsInitial;
+                                       if (!result) hideAutoComplete();
+                                       return result;
                                }],
                                ep: {},
                                wr: false,
@@ -366,12 +375,17 @@
 
                function actualUpdateChoices() {
                        showIndicator();
-                       
+
                        var paramName = cfg.parameterName;
                        var attrs = {
                                u: callbackUrl,
                                pre: [ function (attributes) {
-                                       return (document.activeElement === 
initialElement);
+                                       var activeIsInitial = 
(document.activeElement === initialElement);
+                                       var elementVal =  
Wicket.$(elementId).value;
+                                       var hasMinimumLength = 
elementVal.length >= minInputLength;
+                                       var result = hasMinimumLength && 
activeIsInitial;
+                                       if (!result) hideAutoComplete();
+                                       return result;
                                }],
                                ep: {},
                                wr: false,

Reply via email to