You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2013/02/25 12:54:30 UTC
git commit: WICKET-5055
Updated Branches:
refs/heads/master 5a3e0b7d4 -> 80735f84c
WICKET-5055
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/80735f84
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/80735f84
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/80735f84
Branch: refs/heads/master
Commit: 80735f84c2e22b084ceda95a55d43ae33390983d
Parents: 5a3e0b7
Author: svenmeier <sv...@apache.org>
Authored: Mon Feb 25 12:51:24 2013 +0100
Committer: svenmeier <sv...@apache.org>
Committed: Mon Feb 25 12:51:24 2013 +0100
----------------------------------------------------------------------
.../examples/ajax/builtin/AutoCompletePage.html | 5 +-
.../examples/ajax/builtin/AutoCompletePage.java | 48 ++++++++---
.../html/autocomplete/wicket-autocomplete.js | 64 ++++++++-------
3 files changed, 74 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/80735f84/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AutoCompletePage.html
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AutoCompletePage.html b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AutoCompletePage.html
index 59cebd7..9998bcf 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AutoCompletePage.html
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AutoCompletePage.html
@@ -26,8 +26,11 @@
The textfield below will autocomplete country names. It utilizes AutoCompleteTextField in wicket-extensions.<br/><br/>
<form wicket:id="form">
- Selected value is: <span wicket:id="selectedValue"></span><br/>
Country: <input type="text" wicket:id="ac" size="50"/>
+ <br/>
+ History of selected values:
+ <br/>
+ <div wicket:id="history"></div>
</form>
</wicket:extend>
http://git-wip-us.apache.org/repos/asf/wicket/blob/80735f84/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AutoCompletePage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AutoCompletePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AutoCompletePage.java
index a2749c4..f5ab863 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AutoCompletePage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/ajax/builtin/AutoCompletePage.java
@@ -22,13 +22,13 @@ import java.util.Iterator;
import java.util.List;
import java.util.Locale;
-import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField;
-import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.basic.MultiLineLabel;
import org.apache.wicket.markup.html.form.Form;
-import org.apache.wicket.model.Model;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.util.string.Strings;
@@ -39,6 +39,9 @@ import org.apache.wicket.util.string.Strings;
*/
public class AutoCompletePage extends BasePage
{
+
+ private StringBuilder values = new StringBuilder();
+
/**
* Constructor
*/
@@ -47,8 +50,32 @@ public class AutoCompletePage extends BasePage
Form<Void> form = new Form<Void>("form");
add(form);
- final AutoCompleteTextField<String> field = new AutoCompleteTextField<String>("ac",
- new Model<String>(""))
+ final IModel<String> model = new IModel<String>()
+ {
+ private String value = null;
+
+ @Override
+ public String getObject()
+ {
+ return value;
+ }
+
+ @Override
+ public void setObject(String object)
+ {
+ value = object;
+
+ values.append("\n");
+ values.append(value);
+ }
+
+ @Override
+ public void detach()
+ {
+ }
+ };
+
+ final AutoCompleteTextField<String> field = new AutoCompleteTextField<String>("ac", model)
{
@Override
protected Iterator<String> getChoices(String input)
@@ -82,16 +109,9 @@ public class AutoCompletePage extends BasePage
};
form.add(field);
- final Label label = new Label("selectedValue", field.getDefaultModel());
+ final MultiLineLabel label = new MultiLineLabel("history", new PropertyModel<String>(this,
+ "values"));
label.setOutputMarkupId(true);
- label.add(new AjaxEventBehavior("click")
- {
- @Override
- protected void onEvent(AjaxRequestTarget target)
- {
- target.add(field);
- }
- });
form.add(label);
field.add(new AjaxFormSubmitBehavior(form, "change")
http://git-wip-us.apache.org/repos/asf/wicket/blob/80735f84/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
index ee654e7..0c29ccb 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/wicket-autocomplete.js
@@ -50,8 +50,11 @@
var selected=-1; // index of the currently selected item
var elementCount=0; // number of items on the auto complete list
var visible=0; // is the list visible
- var mouseactive=0; // is mouse selection active
- var hidingAutocomplete=0; // are we hiding the autocomplete list
+
+ var ignoreFocus = false; // ignore focus and gain because menu is showing
+ var ignoreKeyEnter = false; // ignore key ENTER because is already hid the autocomplete list
+ var ignoreOneFocusGain = false; // on FF, clicking an option in the pop-up 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
+ var ignoreChange = false; // ignore change event because TAB or ENTER event already triggered a change
var initialElement;
@@ -69,8 +72,6 @@
// used for IE fix with hideShowCovered() - to be able to call it when bounds change while popup is visible.
var lastStablePopupBounds = [0, 0, 0, 0];
- var ignoreOneFocusGain = false; // on FF, clicking an option in the pop-up 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.
var localThrottler = new Wicket.Throttler(true);
@@ -80,7 +81,7 @@
var isShowing = false;
// Remove the autocompletion menu if still present from
// a previous call. This is required to properly register
- // the mouse event handler again (using the new stateful 'mouseactive'
+ // the mouse event handler again (using the new stateful 'ignoreFocus'
// variable which just gets created)
var choiceDiv = document.getElementById(getMenuId());
if (choiceDiv !== null) {
@@ -92,7 +93,7 @@
initialElement = obj;
Wicket.Event.add(obj, 'blur', function (jqEvent) {
- if (mouseactive === 1) {
+ if (ignoreFocus) {
ignoreOneFocusGain = true;
Wicket.$(elementId).focus();
return jqEvent.stopPropagation();
@@ -102,7 +103,7 @@
});
Wicket.Event.add(obj, 'focus', function (jqEvent) {
- if (mouseactive === 1) {
+ if (ignoreFocus) {
ignoreOneFocusGain = false;
return jqEvent.stopPropagation();
}
@@ -143,7 +144,7 @@
render(true, false);
showAutoComplete();
}
- if(Wicket.Browser.isSafari()) {
+ if (Wicket.Browser.isSafari()) {
return jqEvent.stopPropagation();
}
break;
@@ -155,20 +156,27 @@
break;
case KEY_TAB:
case KEY_ENTER:
- if(selected > -1) {
+ ignoreChange = false;
+ ignoreKeyEnter = false;
+
+ if (selected > -1) {
var value = getSelectedValue();
value = handleSelection(value);
+
hideAutoComplete();
- hidingAutocomplete = 1;
- if(value) {
+
+ if (value) {
obj.value = value;
jQuery(obj).triggerHandler('change');
+ ignoreChange = true;
}
+
+ ignoreKeyEnter = true;
} else if (Wicket.AutoCompleteSettings.enterHidesWithNoSelection) {
hideAutoComplete();
- hidingAutocomplete = 1;
+
+ ignoreKeyEnter = true;
}
- mouseactive = 0;
return true;
@@ -177,7 +185,7 @@
});
Wicket.Event.add(obj, 'change', function (jqEvent) {
- if (mouseactive) {
+ if (ignoreFocus || ignoreChange) {
// don't let any other change handler get this
jqEvent.stopImmediatePropagation();
}
@@ -204,12 +212,9 @@
});
Wicket.Event.add(obj, 'keypress', function (jqEvent) {
- if(Wicket.Event.keyCode(jqEvent) === KEY_ENTER){
- if(selected>-1 || hidingAutocomplete === 1){
- hidingAutocomplete=0;
- jqEvent.stopImmediatePropagation();
- return false;
- }
+ if(Wicket.Event.keyCode(jqEvent) === KEY_ENTER && ignoreKeyEnter){
+ jqEvent.stopImmediatePropagation();
+ return false;
}
});
@@ -230,7 +235,7 @@
{
// Remove the autocompletion menu if still present from
// a previous call. This is required to properly register
- // the mouse event handler again (using the new stateful 'mouseactive'
+ // the mouse event handler again (using the new stateful 'ignoreFocus'
// variable which just gets created)
var choiceDiv=document.getElementById(getMenuId());
if (choiceDiv !== null) {
@@ -316,8 +321,8 @@
// WICKET-1350/WICKET-1351
- container.onmouseout=function() {mouseactive=0;};
- container.onmousemove=function() {mouseactive=1;};
+ container.onmouseout = function() {ignoreFocus = false;};
+ container.onmousemove = function() {ignoreFocus = true;};
}
@@ -426,9 +431,9 @@
}
function hideAutoComplete(){
- visible=0;
+ visible = 0;
setSelected(-1);
- mouseactive=0;
+ ignoreFocus = false;
var container = getAutocompleteContainer();
if (container)
{
@@ -603,15 +608,18 @@
}
element.innerHTML=resp;
var selectableElements = getSelectableElements();
- if(selectableElements) {
+ if (selectableElements) {
elementCount=selectableElements.length;
var clickFunc = function(event) {
- mouseactive = 0;
+ ignoreFocus = false;
+ ignoreChange = false;
+
var value = getSelectedValue();
- var input = Wicket.$(elementId);
value = handleSelection(value);
hideAutoComplete();
+
+ var input = Wicket.$(elementId);
if (value) {
input.value = value;
jQuery(input).triggerHandler('change');