You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jc...@apache.org on 2008/06/02 10:23:40 UTC

svn commit: r662360 - in /wicket/branches/wicket-1.3.x/jdk-1.4: wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js wicket/ wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js

Author: jcompagner
Date: Mon Jun  2 01:23:39 2008
New Revision: 662360

URL: http://svn.apache.org/viewvc?rev=662360&view=rev
Log:
throttling auto complete.
Improved current throttling that it has a extra boolean so that you can really throttle (as long as new events are created they are ignored within the time out)

Modified:
    wicket/branches/wicket-1.3.x/jdk-1.4/wicket/   (props changed)
    wicket/branches/wicket-1.3.x/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
    wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js

Propchange: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun  2 01:23:39 2008
@@ -1 +1 @@
-/wicket/trunk/wicket:647219,654055,655101,655115,655118,655295,655297,655329,656285,656380,657980,658017
+/wicket/trunk/wicket:647219,654055,655101,655115,655118,655295,655297,655329,656285,656380,657980,658017,658135

Modified: wicket/branches/wicket-1.3.x/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js?rev=662360&r1=662359&r2=662360&view=diff
==============================================================================
--- wicket/branches/wicket-1.3.x/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js (original)
+++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js Mon Jun  2 01:23:39 2008
@@ -57,6 +57,11 @@
 	// it is computed when the menu is first rendered, and then reused.
 	var initialDelta = -1;
 
+	// holds a throttler, for not sending many requests if the user types
+	// too quickly.
+	var localThrottler = new Wicket.Throttler(true);
+	var throttleDelay = 300;
+
     function initialize(){
 		// Remove the autocompletion menu if still present from
 		// a previous call. This is required to properly register
@@ -236,6 +241,11 @@
         else{
         	selected=-1;
         }
+        localThrottler.throttle(getMenuId(), throttleDelay, actualUpdateChoices);
+    }
+
+    function actualUpdateChoices()
+    {
         var value = wicketGet(elementId).value;
        	var request = new Wicket.Ajax.Request(callbackUrl+"&q="+processValue(value), doUpdateChoices, false, true, false, "wicket-autocomplete|d");
        	request.get();
@@ -380,12 +390,14 @@
 		var re = /\bselected\b/gi;
         for(var i=0;i<elementCount;i++)
 		{
-			var classNames = node.className.replace(re, "");
+            var origClassNames = node.className;
+			var classNames = origClassNames.replace(re, "");
 			if(selected==i){
 				classNames += " selected";
 				adjustScrollOffset(menu.parentNode, node);
 			}
-			node.className = classNames;
+			if (classNames != origClassNames)
+                node.className = classNames;
 	
 			if ((cfg.maxHeight > -1) && (height < cfg.maxHeight))
 				height+=node.offsetHeight;
@@ -482,4 +494,4 @@
     }
 
     initialize();
-}
\ No newline at end of file
+}

Modified: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js?rev=662360&r1=662359&r2=662360&view=diff
==============================================================================
--- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js (original)
+++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/wicket-ajax.js Mon Jun  2 01:23:39 2008
@@ -1554,6 +1554,7 @@
 	initialize: function(func) {
 		this.func = func;
 		this.timestamp = new Date().getTime();
+		this.timeoutVar = undefined;
 	},
 	
 	getTimestamp: function() {
@@ -1566,13 +1567,30 @@
 	
 	setFunc: function(func) {
 		this.func = func;
+	},
+
+	getTimeoutVar: function() {
+        return this.timeoutVar;
+	},
+
+	setTimeoutVar: function(timeoutVar) {
+        this.timeoutVar = timeoutVar;
 	}
 };
 
 Wicket.Throttler = Wicket.Class.create();
 Wicket.Throttler.prototype = {
-	initialize: function() {
+
+    /* "postponeTimerOnUpdate" is an optional parameter. If it is set to true, then the timer is
+       reset each time the throttle function gets called. Use this behaviour if you want something
+       to happen at X milliseconds after the *last* call to throttle.
+       If the parameter is not set, or set to false, then the timer is not reset. */
+	initialize: function(postponeTimerOnUpdate) {
 		this.entries = new Array();
+		if (postponeTimerOnUpdate != undefined)
+            this.postponeTimerOnUpdate = postponeTimerOnUpdate;
+        else
+            this.postponeTimerOnUpdate = false;
 	},
 	
 	throttle: function(id, millis, func) {
@@ -1580,10 +1598,15 @@
 		var me = this;
 		if (entry == undefined) {
 			entry = new Wicket.ThrottlerEntry(func);
+			entry.setTimeoutVar(window.setTimeout(function() { me.execute(id); }, millis));
 			this.entries[id] = entry;
-			window.setTimeout(function() { me.execute(id); }, millis);
 		} else {
 			entry.setFunc(func);
+            if (this.postponeTimerOnUpdate == true)
+            {
+                window.clearTimeout(entry.getTimeoutVar());
+                entry.setTimeoutVar(window.setTimeout(function() { me.execute(id); }, millis));
+            }
 		}	
 	},
 	
@@ -1591,10 +1614,9 @@
 		var entry = this.entries[id];
 		if (entry != undefined) {
 			var func = entry.getFunc();
+            this.entries[id] = undefined;	
 			var tmp = func();
 		}
-		
-		this.entries[id] = undefined;	
 	}
 };
 
@@ -2067,4 +2089,4 @@
 	if (e!=null) {
 	    e.style.display = "none";
 	}
-}
\ No newline at end of file
+}