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";
+ }
}
}