Author: jcompagner
Date: Thu May 22 13:47:56 2008
New Revision: 659248

URL: http://svn.apache.org/viewvc?rev=659248&view=rev
Log:
- speeds up the rendering of the autocomplete menu list;
- speeds up the initial assignment of events (onclick and onmouseover) to items 
in the menu list;
- fixes a small glitch in setting the height of the menu container (eventual 
padding and margins were ignored and so the height resulted smaller than needed 
-> vertical scrollbar appeared)

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

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=659248&r1=659247&r2=659248&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
 Thu May 22 13:47:56 2008
@@ -52,6 +52,10 @@
        var objonkeypress;
        var objonchange;
        var objonchangeoriginal;
+       
+       // holds the eventual margins, padding, etc. of the menu container.
+       // it is computed when the menu is first rendered, and then reused.
+       var initialDelta = -1;
 
     function initialize(){     
         var obj=wicketGet(elementId);
@@ -279,23 +283,26 @@
         var element = getAutocompleteMenu();
         element.innerHTML=resp;
         if(element.firstChild && element.firstChild.childNodes) {
-            elementCount=element.firstChild.childNodes.length;
+               elementCount=element.firstChild.childNodes.length;
 
-            for(var i=0;i<elementCount;i++){
-                   var node=element.firstChild.childNodes[i];
-
-                               node.onclick = function(event){
-                                       mouseactive=0;
-                                       
wicketGet(elementId).value=getSelectedValue();
-                                       if(typeof 
objonchange=="function")objonchange();
-                                       hideAutoComplete();
-                               }
-
-                               node.onmouseover = function(event){             
                        
-                                       selected = getElementIndex(this);
-                                       render();
-                                       showAutoComplete();
-                               }
+               var clickFunc = function(event){
+                       mouseactive=0;
+                       wicketGet(elementId).value=getSelectedValue();
+                       if(typeof objonchange=="function")objonchange();
+                               hideAutoComplete();
+               };
+                       
+               var mouseOverFunc = function(event){
+                       selected = getElementIndex(this);
+                       render();
+                       showAutoComplete();
+               };
+
+               var node=element.firstChild.childNodes[0];
+               for(var i=0;i<elementCount;i++){
+                       node.onclick = clickFunc;
+                       node.onmouseover = mouseOverFunc;
+                       node = node.nextSibling;
                        }
         } else {
             elementCount=0;
@@ -360,26 +367,28 @@
     function render(){
         var menu=getAutocompleteMenu();
         var height=0;
-        for(var i=0;i<elementCount;i++){
-            var node=menu.firstChild.childNodes[i];
-
-            var classNames=node.className.split(" ");
-            for (var j=0; j<classNames.length; j++) {
-                if (classNames[j]=='selected') {
-                    classNames[j]='';
-                }
-            }
-
-            if(selected==i){
-                classNames.push('selected');
-                adjustScrollOffset(menu.parentNode, node);
-            }
-            
-            node.className=classNames.join(" ");
-            height+=node.offsetHeight;
-        }
+               var node=menu.firstChild.childNodes[0];
+               var re = /\bselected\b/gi;
+        for(var i=0;i<elementCount;i++)
+               {
+                       var classNames = node.className.replace(re, "");
+                       if(selected==i){
+                               classNames += " selected";
+                               adjustScrollOffset(menu.parentNode, node);
+                       }
+                       node.className = classNames;
+       
+                       if ((cfg.maxHeight > -1) && (height < cfg.maxHeight))
+                               height+=node.offsetHeight;
+       
+                       node = node.nextSibling;
+               }
         if (cfg.maxHeight > -1) {
-               height = height<cfg.maxHeight?height:cfg.maxHeight;
+                       // If we don't exceed the maximum size, we add the 
extra space 
+                       // that may be there due to padding, margins, etc.
+                       if (initialDelta == -1)
+                               initialDelta = menu.parentNode.offsetHeight - 
height;
+               height = height<cfg.maxHeight ? height+initialDelta : 
cfg.maxHeight;
                menu.parentNode.style.height=height+"px";
         }
     }


Reply via email to