This is an automated email from the ASF dual-hosted git repository.
adelbene pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/master by this push:
new e04d58be64 WICKET-7133 Ability move focus back to the autocomplete
field when selecting an item using the Tab key
e04d58be64 is described below
commit e04d58be646f4e697813d14583a7c9a0988ead83
Author: Erik Strid <[email protected]>
AuthorDate: Wed Nov 20 06:49:02 2024 +0100
WICKET-7133 Ability move focus back to the autocomplete field when
selecting an item using the Tab key
---
.../autocomplete/AbstractAutoCompleteBehavior.java | 2 +
.../html/autocomplete/AutoCompleteSettings.java | 54 ++++++++++++++++++++++
.../html/autocomplete/wicket-autocomplete.js | 9 +++-
3 files changed, 64 insertions(+), 1 deletion(-)
diff --git
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
index 6e9db0f21b..166b9fea1e 100644
---
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
+++
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
@@ -187,6 +187,8 @@ public abstract class AbstractAutoCompleteBehavior extends
AbstractDefaultAjaxBe
{
sb.append(",className:
'").append(settings.getCssClassName()).append('\'');
}
+ sb.append(",keyTabBehavior: '").append(
+ settings.getKeyTabBehavior().getValue()).append('\'');
sb.append('}');
return sb.toString();
}
diff --git
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
index c9c43ceac8..010846686a 100644
---
a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
+++
b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AutoCompleteSettings.java
@@ -74,6 +74,8 @@ public final class AutoCompleteSettings implements
IClusterable
private int minInputLength = 1;
+ private KeyTabBehavior keyTabBehavior =
KeyTabBehavior.SELECT_FOCUS_NEXT_ELEMENT;
+
/**
* Indicates whether the first item in the list is automatically
selected when the autocomplete
* list is shown.
@@ -379,4 +381,56 @@ public final class AutoCompleteSettings implements
IClusterable
this.minInputLength = minInputLength;
return this;
}
+
+ /**
+ * Indicates how the Tab key should be handled when having an item in
the autocomplete list
+ * selected, {@link KeyTabBehavior#SELECT_FOCUS_NEXT_ELEMENT} is the
default behavior.
+ *
+ * @return the behavior that should be used when the Tab key is pressed
+ */
+ public KeyTabBehavior getKeyTabBehavior()
+ {
+ return keyTabBehavior;
+ }
+
+ /**
+ * Set how the Tab key should be handled when having an item in the
autocomplete list selected.
+ *
+ * @param keyTabBehavior the behavior that should be used when the Tab
key is pressed,
+ * {@link KeyTabBehavior#SELECT_FOCUS_NEXT_ELEMENT} is the default
behavior
+ * @return this {@link AutoCompleteSettings}
+ */
+ public AutoCompleteSettings setKeyTabBehavior(KeyTabBehavior
keyTabBehavior)
+ {
+ this.keyTabBehavior = keyTabBehavior;
+ return this;
+ }
+
+ /**
+ * A behavior that can be used to control how the Tab key should be
handled when having an item
+ * in the autocomplete list is marked.
+ */
+ public enum KeyTabBehavior
+ {
+ /**
+ * Select the currently marked item and move the focus to the
next focusable element.
+ */
+ SELECT_FOCUS_NEXT_ELEMENT("selectFocusNextElement"),
+ /**
+ * Select the currently marked item and move the focus to the
auto complete input field.
+ */
+ SELECT_FOCUS_INPUT("selectFocusAutocompleteInput");
+
+ private final String value;
+
+ KeyTabBehavior(String value)
+ {
+ this.value = value;
+ }
+
+ public String getValue()
+ {
+ return value;
+ }
+ }
}
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 be20fc1652..eb3afea13d 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
@@ -126,7 +126,8 @@
});
Wicket.Event.add(obj, 'keydown', function (jqEvent) {
- switch(Wicket.Event.keyCode(jqEvent)){
+ var keyCode = Wicket.Event.keyCode(jqEvent);
+ switch (keyCode) {
case KEY_UP:
if (elementCount > 0) {
if (selected>-1) {
@@ -183,6 +184,12 @@
hideAutoComplete();
+ if (cfg.keyTabBehavior
=== 'selectFocusAutocompleteInput' && keyCode === KEY_TAB) {
+ // prevent
moving focus to the next component if an item in the dropdown is selected
+ // using the
Tab key
+
jqEvent.preventDefault();
+ }
+
ignoreKeyEnter = true;
} else if
(Wicket.AutoCompleteSettings.enterHidesWithNoSelection) {
hideAutoComplete();