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