You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ja...@apache.org on 2007/03/23 09:32:52 UTC
svn commit: r521624 -
/incubator/wicket/branches/wicket-1.2.x/wicket-extensions/src/main/java/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
Author: janne
Date: Fri Mar 23 01:32:51 2007
New Revision: 521624
URL: http://svn.apache.org/viewvc?view=rev&rev=521624
Log:
fixes for WICKET-3 and WICKET-378: autocomplete does not explicitly call input's onchange event
Modified:
incubator/wicket/branches/wicket-1.2.x/wicket-extensions/src/main/java/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
Modified: incubator/wicket/branches/wicket-1.2.x/wicket-extensions/src/main/java/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.2.x/wicket-extensions/src/main/java/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js?view=diff&rev=521624&r1=521623&r2=521624
==============================================================================
--- incubator/wicket/branches/wicket-1.2.x/wicket-extensions/src/main/java/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js (original)
+++ incubator/wicket/branches/wicket-1.2.x/wicket-extensions/src/main/java/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js Fri Mar 23 01:32:51 2007
@@ -6,7 +6,7 @@
if (typeof(Wicket) == "undefined")
Wicket = { };
-
+
Wicket.AutoComplete=function(elementId,callbackUrl){
var KEY_BACKSPACE=8;
var KEY_TAB=9;
@@ -18,21 +18,35 @@
var KEY_DOWN=40;
var KEY_SHIFT=16;
var KEY_CTRL=17;
- var KEY_ALT=18;
-
+ var KEY_ALT=18;
+
var selected=-1;
var elementCount=0;
var visible=0;
var mouseactive=0;
-
+
+
+ var objonkeydown;
+ var objonblur;
+ var objonkeyup;
+ var objonkeypress;
+ var objonchange;
+
function initialize(){
var obj=wicketGet(elementId);
+ objonkeydown = obj.onkeydown;
+ objonblur = obj.onblur;
+ objonkeyup = obj.onkeyup;
+ objonkeypress = obj.onkeypress;
+ objonchange = obj.onchange;
+
obj.onblur=function(event){
if(mouseactive==1)return false;
hideAutoComplete();
+ if(typeof objonblur == "function")objonblur();
}
-
+
obj.onkeydown=function(event){
switch(wicketKeyCode(getEvent(event))){
case KEY_UP:
@@ -63,7 +77,13 @@
case KEY_ENTER:
if(selected>-1){
obj.value=getSelectedValue();
- hideAutoComplete();
+ hideAutoComplete();
+ }
+
+ if(typeof objonkeydown == "function")objonkeydown();
+ if(typeof objonchange == "function")objonchange();
+
+ if(selected>-1){
return killEvent(event);
}
return true;
@@ -71,7 +91,7 @@
default:
}
}
-
+
obj.onkeyup=function(event){
switch(wicketKeyCode(getEvent(event))){
case KEY_ENTER:
@@ -89,20 +109,22 @@
default:
updateChoices();
}
+ if(typeof objonkeyup == "function")objonkeyup();
return null;
}
-
+
obj.onkeypress=function(event){
if(wicketKeyCode(getEvent(event))==KEY_ENTER){
return killEvent(event);
}
+ if(typeof objonkeypress == "function")objonkeypress();
}
}
-
+
function getMenuId() {
return elementId+"-autocomplete";
}
-
+
function getAutocompleteMenu() {
var choiceDiv = document.getElementById(getMenuId());
if (choiceDiv == null) {
@@ -114,18 +136,18 @@
choiceDiv.style.position = "absolute";
choiceDiv.style.zIndex = "10000";
}
-
+
choiceDiv.show = function() { wicketShow(this.id) }
choiceDiv.hide = function() { wicketHide(this.id) }
-
+
return choiceDiv;
}
-
+
function getEvent(event){
if(!event)return window.event;
return event;
}
-
+
function killEvent(event){
if(!event)event=window.event;
if(!event)return false;
@@ -143,13 +165,13 @@
}
return false;
}
-
+
function updateChoices(){
selected=-1;
var value = wicketGet(elementId).value;
var request = new Wicket.Ajax.Request(callbackUrl+"&q="+processValue(value), doUpdateChoices, false, true, false, "wicket-autocomplete|d");
- request.get();
+ request.get();
}
function processValue(param) {
@@ -159,7 +181,7 @@
}
return encodeURIComponent(param);
}
-
+
function showAutoComplete(){
var position=getPosition(wicketGet(elementId));
var menu = getAutocompleteMenu();
@@ -171,14 +193,14 @@
visible=1;
hideShowCovered();
}
-
+
function hideAutoComplete(){
visible=0;
selected=-1;
getAutocompleteMenu().hide();
hideShowCovered();
}
-
+
function getPosition(obj) {
var leftPosition=0;
var topPosition=0;
@@ -189,18 +211,19 @@
} while (obj);
return [leftPosition,topPosition];
}
-
+
function doUpdateChoices(resp){
var element = getAutocompleteMenu();
element.innerHTML=resp;
if(element.firstChild && element.firstChild.childNodes) {
elementCount=element.firstChild.childNodes.length;
-
+
for(var i=0;i<elementCount;i++){
var node=element.firstChild.childNodes[i];
-
+
node.onclick = function(event){
wicketGet(elementId).value=getSelectedValue();
+ if(typeof objonchange == "function")objonchange();
hideAutoComplete();
}
@@ -210,15 +233,15 @@
render();
showAutoComplete();
}
-
+
node.onmouseout = function(event){
mouseactive=0;
}
- }
+ }
} else {
elementCount=0;
}
-
+
if(elementCount>0){
showAutoComplete();
} else {
@@ -226,7 +249,7 @@
}
render();
}
-
+
function getSelectedValue(){
var element = getAutocompleteMenu();
var attr=element.firstChild.childNodes[selected].attributes['textvalue'];
@@ -246,11 +269,11 @@
}
return -1;
}
-
+
function stripHTML(str) {
return str.replace(/<[^>]+>/g,"");
}
-
+
function render(){
var element= getAutocompleteMenu();
for(var i=0;i<elementCount;i++){
@@ -262,16 +285,16 @@
classNames[j] = '';
}
}
-
+
if(selected==i){
classNames.push('selected');
}
-
+
node.className = classNames.join(" ");
}
}
-
-
+
+
function isVisible(obj) {
var value = obj.style.visibility;
if (!value) {
@@ -285,13 +308,13 @@
}
return value;
}
-
+
function hideShowCovered(){
if (!/msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent)) {
return;
}
- var el = getAutocompleteMenu();
+ var el = getAutocompleteMenu();
var p = getPosition(el);
var acLeftX=p[0];
@@ -299,18 +322,18 @@
var acTopY=p[1];
var acBottomY=el.offsetHeight+acTopY;
- var hideTags = new Array("select","iframe","applet");
-
+ var hideTags = new Array("select","iframe","applet");
+
for (var j=0;j<hideTags.length;j++) {
var tagsFound = document.getElementsByTagName(hideTags[j]);
for (var i=0; i<tagsFound.length; i++){
- var tag=tagsFound[i];
+ var tag=tagsFound[i];
p=getPosition(tag);
var leftX = p[0];
var rightX = leftX+tag.offsetWidth;
var topY = p[1];
var bottomY = topY+tag.offsetHeight;
-
+
if (this.hidden || (leftX>acRightX) || (rightX<acLeftX) || (topY>acBottomY) || (bottomY<acTopY)) {
if(!tag.wicket_element_visibility) {
tag.wicket_element_visibility=isVisible(tag);
@@ -327,4 +350,4 @@
}
initialize();
-}
\ No newline at end of file
+}
\ No newline at end of file