You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2024/12/02 20:12:44 UTC
(wicket) 03/04: Change the solution to use an enum to make the code clearer and make it easier to add more behaviours later
This is an automated email from the ASF dual-hosted git repository.
adelbene pushed a commit to branch wicket-9.x
in repository https://gitbox.apache.org/repos/asf/wicket.git
commit fc290a0aff934a49c279bbca0174b0e6c23b0369
Author: Erik Strid <er...@idainfront.se>
AuthorDate: Fri Nov 22 15:46:12 2024 +0100
Change the solution to use an enum to make the code clearer and make it easier to add more behaviours later
---
.../autocomplete/AbstractAutoCompleteBehavior.java | 3 +-
.../html/autocomplete/AutoCompleteSettings.java | 49 ++++++++++++++++------
.../html/autocomplete/wicket-autocomplete.js | 2 +-
3 files changed, 40 insertions(+), 14 deletions(-)
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 9b7c86b2bd..7b766b7a89 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,7 +187,8 @@ public abstract class AbstractAutoCompleteBehavior extends AbstractDefaultAjaxBe
{
sb.append(",className: '").append(settings.getCssClassName()).append('\'');
}
- sb.append(",focusInputOnTabSelection: ").append(settings.shouldFocusInputOnTabSelection());
+ sb.append(",tabBehavior: '").append(
+ settings.getTabBehavior().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 f07e932fad..d243350f76 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,7 +74,7 @@ public final class AutoCompleteSettings implements IClusterable
private int minInputLength = 1;
- private boolean focusInputOnTabSelection = false;
+ private TabBehavior tabBehavior = TabBehavior.SELECT_FOCUS_NEXT_ELEMENT;
/**
* Indicates whether the first item in the list is automatically selected when the autocomplete
@@ -384,27 +384,52 @@ public final class AutoCompleteSettings implements IClusterable
/**
* Indicates how the Tab key should be handled when having an item in the autocomplete list
- * selected.
+ * selected, {@link TabBehavior#SELECT_FOCUS_NEXT_ELEMENT} is the default behavior.
*
- * @return <code>true</code> if the focus should return to the input field, <code>false</code>
- * moves the focus to the next component.
+ * @return the behavior that should be used when the Tab key is pressed
*/
- public boolean shouldFocusInputOnTabSelection()
+ public TabBehavior getTabBehavior()
{
- return focusInputOnTabSelection;
+ return tabBehavior;
}
/**
- * Set how the tab key should be handled when having an item in the autocomplete list selected.
+ * Set how the Tab key should be handled when having an item in the autocomplete list selected.
*
- * @param focusInputOnTabSelection <code>true</code> if the focus should return to the input
- * field when the Tab key pressed, <code>false</code> is the default which moves the focus to
- * the next component.
+ * @param tabSelectBehavior the behavior that should be used when the Tab key is pressed,
+ * {@link TabBehavior#SELECT_FOCUS_NEXT_ELEMENT} is the default behavior
* @return this {@link AutoCompleteSettings}
*/
- public AutoCompleteSettings setFocusInputOnTabSelection(boolean focusInputOnTabSelection)
+ public AutoCompleteSettings setTabBehavior(TabBehavior tabSelectBehavior)
{
- this.focusInputOnTabSelection = focusInputOnTabSelection;
+ this.tabBehavior = tabSelectBehavior;
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 TabBehavior {
+ /**
+ * 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;
+
+ TabBehavior(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 2b1426bb78..7f338fb7cd 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
@@ -184,7 +184,7 @@
hideAutoComplete();
- if (cfg.focusInputOnTabSelection && keyCode === KEY_TAB) {
+ if (cfg.tabBehavior === '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();