Author: jcompagner
Date: Fri Jun 19 09:27:06 2009
New Revision: 786424

URL: http://svn.apache.org/viewvc?rev=786424&view=rev
Log:
more fixes for auto compleet (IE and so on)

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=786424&r1=786423&r2=786424&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
 Fri Jun 19 09:27:06 2009
@@ -53,9 +53,7 @@
        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;
+      var ignoreOneFocusGain = false; // on FF, clicking an option in the 
popup would make field loose focus; focus() call only has effect in FF after 
popup is hidden, so the re-focusing must not show popup again in this case
 
        // holds a throttler, for not sending many requests if the user types
        // too quickly.
@@ -90,6 +88,7 @@
                 
        obj.onblur=function(event){                     
                if(mouseactive==1){
+                  ignoreOneFocusGain = true;
                        Wicket.$(elementId).focus();
                        return killEvent(event);
                }
@@ -98,20 +97,21 @@
         }
        
        obj.onfocus=function(event){
-            if (cfg.showListOnFocusGain) {
+            if (!ignoreOneFocusGain && cfg.showListOnFocusGain) {
                 if (cfg.showCompleteListOnFocusGain) {
                     updateChoices(true);
                 } else {
                     updateChoices();
                 }
             }
+            ignoreOneFocusGain = false;
                if(typeof objonfocus=="function")objonfocus.apply(this,[event]);
         }
 
         obj.onkeydown=function(event){
             switch(wicketKeyCode(Wicket.fixEvent(event))){
                 case KEY_UP:
-                       if(selected>-1)selected--;
+                       if(selected>-1) selected--;
                    if(selected==-1){
                            hideAutoComplete();
                        } else {
@@ -120,9 +120,7 @@
                    if(Wicket.Browser.isSafari())return killEvent(event);
                        break;
                 case KEY_DOWN:
-                               if(selected<elementCount-1){
-                           selected++;
-                       }
+                               if(selected<elementCount-1) selected++;
                    if(visible==0){
                            updateChoices();
                    } else {
@@ -327,16 +325,17 @@
     }
 
         function getPosition(obj) {
-        var leftPosition=0;
-        var topPosition=0;
-        do {
+        var leftPosition = obj.offsetLeft || 0;
+        var topPosition = obj.offsetTop || 0;
+        obj = obj.offsetParent;
+        while (obj && obj != document.documentElement && obj != document.body) 
{
             topPosition += obj.offsetTop || 0;
                topPosition -= obj.scrollTop || 0;
             leftPosition += obj.offsetLeft || 0;
                leftPosition -= obj.scrollLeft || 0;
             obj = obj.offsetParent;
-        } while (obj);
- 
+        }
+
         return [leftPosition,topPosition];
     }
     
@@ -362,9 +361,15 @@
                   if(typeof objonchange=="function") 
objonchange.apply(wicketGet(elementId),[event]);
                 }
                 hideAutoComplete();
+                if (Wicket.Focus.getFocusedElement() != input)
+                {
+                    ignoreOneFocusGain = true;
+                    input.focus();
+                }
             };
                        
             var mouseOverFunc = function(event) {
+                mouseactive=1; // Opera needs this as mousemove for menu is 
not always triggered
                 selected = getElementIndex(this);
                 render();
                 showAutoComplete();
@@ -452,18 +457,17 @@
                        if (classNames != origClassNames)
                 node.className = classNames;
        
-                       if ((cfg.maxHeight > -1) && (height < cfg.maxHeight))
+                       if (cfg.maxHeight > -1)
                                height+=node.offsetHeight;
        
                        node = node.nextSibling;
                }
         if (cfg.maxHeight > -1) {
-                       // 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";
+               if (height<cfg.maxHeight) {
+                menu.parentNode.style.height="auto";
+            } else {
+                   menu.parentNode.style.height=cfg.maxHeight+"px";
+            }
         }
     }
     


Reply via email to