Hi Sven,

yes the return type was wrong - I simply changed the interface structure a bit and it was just working - the return type of the method has to be the same like the filter interface which shrinks down the method options.

Anyway as you and Martin mentioned it would be better to use a behavior so I reverted the commit.

kind regards

Tobias

Am 21.12.16 um 15:56 schrieb Sven Meier:
Hi Tobias,

try it out - you can set a contact detail without a contact. If you set a contact there has to be a contact detail next to it.

I have tried it - all the following example do not fit the return type:

    @Override
    protected AutoCompleteBuilder getAutoCompleteBuilder()
    {
return AutoCompleteBuilder.init().forContact(AutoCompleteContact.HOME);
    }

    @Override
    protected AutoCompleteBuilder getAutoCompleteBuilder()
    {
return AutoCompleteBuilder.init().forContact(AutoCompleteContact.HOME).forField(AutoCompleteContactDetails.TEL);
    }

    @Override
    protected AutoCompleteBuilder getAutoCompleteBuilder()
    {
return AutoCompleteBuilder.init().forField(AutoCompleteContactDetails.TEL);
    }

Regards
Sven



On 21.12.2016 10:06, Tobias Soloschenko wrote:
Hi Sven,

- try it out - you can set a contact detail without a contact. If you set a contact there has to be a contact detail next to it.

- Yes the compile error is not ok - I have to restructure it a bit.

- The advantage of the implementation should be:
* You don't have to search for the field names - just use the enums
* Fields are applied in the right order (if not the autofill is not working) - see the standard
* You can refactor it with java utils

kind regards

Tobias

Am 21.12.2016 um 09:42 schrieb Sven Meier <[email protected]>:

Hi,

your builder is wrong :P

- It allows setting a contact detail field without contact:

AutoCompleteBuilder.init().forField(AutoCompleteContactDetails.TEL);

- AutoCompleteContactBuilder#forField() has the wrong return type:

// does not compile since AutoCompleteContactBuilder is no AutoCompleteBuilder return AutoCompleteBuilder.init().forContact(AutoCompleteContact.HOME).forField(AutoCompleteContactDetails.TEL);

Tbh I find it over the top to add an API to build a string defined in a "living standard".

When I read whatwg correctly, the "autocomplete" attribute can be used on hidden input, textarea and select too. Instead of adding factory methods all over the place, I'd rather have a behavior for this. We could move it to extensions, freeing org.apache.wicket.markup.html.form from 6 new source files.

Regards
Sven


On 20.12.2016 20:19, [email protected] wrote:
Repository: wicket
Updated Branches:
   refs/heads/master aedb98764 -> bcd55813b


WICKET-6299

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/bcd55813
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/bcd55813
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/bcd55813

Branch: refs/heads/master
Commit: bcd55813b3afbccb5675096930aee6281c5cba3a
Parents: aedb987
Author: Tobias Soloschenko <[email protected]>
Authored: Tue Dec 20 20:15:42 2016 +0100
Committer: Tobias Soloschenko <[email protected]>
Committed: Tue Dec 20 20:15:42 2016 +0100

----------------------------------------------------------------------
  .../html/form/AutoCompleteAddressType.java      |  56 ++++
  .../markup/html/form/AutoCompleteBuilder.java   | 170 ++++++++++++
  .../markup/html/form/AutoCompleteContact.java   |  77 ++++++
  .../html/form/AutoCompleteContactBuilder.java   |  38 +++
  .../html/form/AutoCompleteContactDetails.java   | 102 +++++++
.../markup/html/form/AutoCompleteFields.java | 272 +++++++++++++++++++
  .../apache/wicket/markup/html/form/Form.java    |  14 +
  .../wicket/markup/html/form/TextField.java      |  14 +
  .../wicket/markup/html/form/FormTest.java       |  39 +++
  .../wicket/markup/html/form/TextFieldTest.java  |  23 +-
  10 files changed, 803 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/bcd55813/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteAddressType.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteAddressType.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteAddressType.java
new file mode 100644
index 0000000..6123053
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteAddressType.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.html.form;
+
+/**
+ * Auto completion address type according to the whatwg specification.
+ *
+ * @author Tobias Soloschenko
+ *
+ * @see <a href=
+ * "https://html.spec.whatwg.org/multipage/forms.html";>https://html.spec.whatwg.org/multipage/forms.html</a>
+ *
+ */
+public enum AutoCompleteAddressType {
+
+    /**
+ * Meaning the field is part of the shipping address or contact information
+     */
+    SHIPPING("shipping"),
+
+    /**
+ * meaning the field is part of the billing address or contact information
+     */
+    BILLING("billing");
+
+    private String value;
+
+    private AutoCompleteAddressType(String value)
+    {
+        this.value = value;
+    }
+
+    /**
+     * Gets the address type value
+     *
+     * @return the value of the address type
+     */
+    public String getValue()
+    {
+        return value;
+    }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/bcd55813/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteBuilder.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteBuilder.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteBuilder.java
new file mode 100644
index 0000000..a3b64cd
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteBuilder.java
@@ -0,0 +1,170 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.html.form;
+
+/**
+ * The auto complete builder is used to build the corresponding attribute for form and input tags. + * To use the auto completion just open the autofill options within your browser. In chrome for
+ * example it is accessed with the following URL:
+ * <a href="chrome://settings/autofillEditAddress">chrome://settings/autofillEditAddress</a>
+ *
+ * @author Tobias Soloschenko
+ *
+ * @since 8.0.0
+ *
+ */
+public class AutoCompleteBuilder implements AutoCompleteContactBuilder
+{
+    /**
+     * The section prefix specificed by the whatwg standard
+     */
+    public static final String SECTION_PREFIX = "section-";
+
+    private String sectionName;
+
+    private AutoCompleteAddressType addressType;
+
+    private AutoCompleteFields field;
+
+    private AutoCompleteContact contact;
+
+    private AutoCompleteContactDetails contactDetail;
+
+    private boolean empty;
+
+    /**
+     * Initializes a new auto complete builder
+     *
+     * @return the auto complete builder
+     */
+    public static AutoCompleteBuilder init()
+    {
+        return new AutoCompleteBuilder();
+    }
+
+    /**
+     * Empties out the autocomplete outcome
+     *
+     * @return the auto complete builder
+     */
+    public AutoCompleteBuilder empty()
+    {
+        this.empty = true;
+        return this;
+    }
+
+    /**
+     * Applies a section to the auto completion field
+     *
+     * @param sectionName
+     *            the name of the section
+     * @return the auto complete builder itself
+     */
+    public AutoCompleteBuilder withSection(String sectionName)
+    {
+        this.sectionName = sectionName;
+        return this;
+    }
+
+    /**
+     * Assigns the auto completion to a specific address type
+     *
+     * @param addressType
+     *            the auto completion address type
+     * @return the auto complete builder itself
+     */
+ public AutoCompleteBuilder forAddressType(AutoCompleteAddressType addressType)
+    {
+        this.addressType = addressType;
+        return this;
+    }
+
+    /**
+     * Applies the field to the autocomplete attribute
+     *
+     * @param field
+     *            the field
+     * @return the auto complete builder
+     */
+    public AutoCompleteBuilder forField(AutoCompleteFields field)
+    {
+        this.field = field;
+        return this;
+    }
+
+    /**
+     * Applies the contact information to the autocomplete attribute
+     *
+     * @param contact
+     *            the contact information are going to be applied to
+     * @return the auto complete builder
+     */
+ public AutoCompleteContactBuilder forContact(AutoCompleteContact contact)
+    {
+        this.contact = contact;
+        return this;
+    }
+
+    /**
+     * @see {@link AutoCompleteContactBuilder}
+     */
+    @Override
+ public AutoCompleteContactBuilder forField(AutoCompleteContactDetails contactDetail)
+    {
+        this.contactDetail = contactDetail;
+        return (AutoCompleteContactBuilder)this;
+    }
+
+    /**
+     * Builds the attribute string
+     *
+     * @return the attribute content in the right order
+     */
+    @Override
+    public String toString()
+    {
+        StringBuilder stringBuilder = new StringBuilder();
+        if (!empty)
+        {
+            if (sectionName != null)
+            {
+                stringBuilder.append(SECTION_PREFIX);
+                stringBuilder.append(sectionName);
+                stringBuilder.append(" ");
+            }
+            if (addressType != null)
+            {
+ stringBuilder.append(addressType.getValue());
+                stringBuilder.append(" ");
+            }
+            if (field != null)
+            {
+                stringBuilder.append(field.getValue());
+            }
+            else
+            {
+                if (contact != null)
+                {
+ stringBuilder.append(contact.getValue());
+                    stringBuilder.append(" ");
+                }
+ stringBuilder.append(contactDetail.getValue());
+            }
+        }
+        return stringBuilder.toString();
+    }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/bcd55813/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteContact.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteContact.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteContact.java
new file mode 100644
index 0000000..cbf86a5
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteContact.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.html.form;
+
+/**
+ * Auto completion contact according to the whatwg specification.
+ *
+ * @author Tobias Soloschenko
+ *
+ * @see <a href=
+ * "https://html.spec.whatwg.org/multipage/forms.html";>https://html.spec.whatwg.org/multipage/forms.html</a>
+ *
+ */
+public enum AutoCompleteContact {
+
+    /**
+     * meaning the field is for contacting someone at their residence
+     */
+    HOME("home"),
+
+    /**
+     * meaning the field is for contacting someone at their workplace
+     */
+    WORK("work"),
+
+    /**
+ * meaning the field is for contacting someone regardless of location
+     */
+    MOBILE("mobile"),
+
+    /**
+     * meaning the field describes a fax machine's contact details
+     */
+    FAX("fax"),
+
+    /**
+ * meaning the field describes a pager's or beeper's contact details
+     */
+    PAGER("pager");
+
+    private String value;
+
+    /**
+     * Creates an auto completion contact with the given value
+     *
+     * @param value
+     *            the value of the contact
+     */
+    private AutoCompleteContact(String value)
+    {
+        this.value = value;
+    }
+
+    /**
+     * Gets the value of the auto completion contact
+     *
+     * @return the value of the auto completion contact
+     */
+    public String getValue()
+    {
+        return value;
+    }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/bcd55813/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteContactBuilder.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteContactBuilder.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteContactBuilder.java
new file mode 100644
index 0000000..07324ff
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteContactBuilder.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.html.form;
+
+/**
+ * The auto complete contact builder shrinks down the possibilities to the contact details
+ *
+ * @author Tobias Soloschenko
+ *
+ * @since 8.0.0
+ *
+ */
+public interface AutoCompleteContactBuilder
+{
+    /**
+ * Applies the contact details information to the auto complete field
+     *
+     * @param contactDetail
+     *            the contact detail
+     * @return the auto complete builder contact
+     */
+ AutoCompleteContactBuilder forField(AutoCompleteContactDetails contactDetail);
+
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/bcd55813/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteContactDetails.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteContactDetails.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteContactDetails.java
new file mode 100644
index 0000000..e4d5e44
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteContactDetails.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.html.form;
+
+/**
+ * Auto completion contact detail according to the whatwg specification.
+ *
+ * @author Tobias Soloschenko
+ *
+ * @see <a href=
+ * "https://html.spec.whatwg.org/multipage/forms.html";>https://html.spec.whatwg.org/multipage/forms.html</a>
+ *
+ */
+public enum AutoCompleteContactDetails {
+
+    /**
+     * +1 617 253 5702
+     */
+    TEL("tel"),
+
+    /**
+     * +1
+     */
+    TEL_COUNTRY_CODE("tel-country-code"),
+
+    /**
+     * 617 253 5702
+     */
+    TEL_NATIONAL("tel-national"),
+
+    /**
+     * 617
+     */
+    TEL_AREA_CODE("tel-area-code"),
+
+    /**
+     * 2535702
+     */
+    TEL_LOCAL("tel-local"),
+
+    /**
+     * 253
+     */
+    TEL_LOCAL_PREFIX("tel-local-prefix"),
+
+    /**
+     * 5702
+     */
+    TEL_LOCAL_SUFFIX("tel-local-suffix"),
+
+    /**
+     * 1000
+     */
+    TEL_EXTENSION("tel-extension"),
+
+    /**
+     * [email protected]
+     */
+    EMAIL("email"),
+
+    /**
+     * irc://example.org/timbl,isuser
+     */
+    IMPP("impp");
+
+    private String value;
+
+    /**
+     * Creates an auto completion contact detail with the given value
+     *
+     * @param value
+     *            the value of the contact detail
+     */
+    private AutoCompleteContactDetails(String value)
+    {
+        this.value = value;
+    }
+
+    /**
+     * Gets the value of the auto completion contact detail
+     *
+     * @return the value of the auto completion contact detail
+     */
+    public String getValue()
+    {
+        return value;
+    }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/bcd55813/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteFields.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteFields.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteFields.java
new file mode 100644
index 0000000..8f794c4
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoCompleteFields.java
@@ -0,0 +1,272 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.markup.html.form;
+
+/**
+ * Auto completion personal data according to the whatwg specification.
+ *
+ * @author Tobias Soloschenko
+ *
+ * @see <a href=
+ * "https://html.spec.whatwg.org/multipage/forms.html";>https://html.spec.whatwg.org/multipage/forms.html</a>
+ *
+ */
+public enum AutoCompleteFields {
+
+    /**
+     * Simply turns on the auto completion
+     */
+    ON("on"),
+
+    /**
+     * Simply turns off the auto completion
+     */
+    OFF("off"),
+
+    /**
+     * Sir Timothy John Berners-Lee, OM, KBE, FRS, FREng, FRSA
+     */
+    NAME("name"),
+
+    /**
+     * Sir
+     */
+    HONORIFIC_PREFIX("honorific-prefix"),
+
+    /**
+     * Timothy
+     */
+    GIVEN_NAME("given-name"),
+
+    /**
+     * John
+     */
+    ADDITIONAL_NAME("additional-name"),
+
+    /**
+     * Berners-Lee
+     */
+    FAMILY_NAME("family-name"),
+
+    /**
+     * OM, KBE, FRS, FREng, FRSA
+     */
+    HONORIFIC_SUFFIX("honorific-suffix"),
+
+    /**
+     * Tim
+     */
+    NICKNAME("nickname"),
+
+    /**
+     * timbl
+     */
+    USERNAME("username"),
+
+    /**
+     * GUMFXbadyrS3
+     */
+    NEW_PASSWORD("new-password"),
+
+    /**
+     * qwerty
+     */
+    CURRENT_PASSWORD("current-password"),
+
+    /**
+     * Professor
+     */
+    ORGANIZATION_TITLE("organization-title"),
+
+    /**
+     * World Wide Web Consortium
+     */
+    ORGANIZATION("organization"),
+
+    /**
+     * Multiple lines 32 Vassar Street MIT Room 32-G524
+     */
+    STREET_ADDRESS("street-address"),
+
+    /**
+     * 32 Vassar Street
+     */
+    ADDRESS_LINE1("address-line1"),
+
+    /**
+     * MIT Room 32-G524
+     */
+    ADDRESS_LINE2("address-line2"),
+
+    /**
+     * See {@link AutoComplete.ADRESS_LINE2}
+     */
+    ADDRESS_LINE3("address-line3"),
+
+    /**
+ * The most fine-grained administrative level, in addresses with four administrative levels
+     */
+    ADDRESS_LEVEL4("address-level4"),
+
+    /**
+ * The third administrative level, in addresses with three or more administrative levels
+     */
+    ADDRESS_LEVEL3("address-level3"),
+
+    /**
+     * Cambridge
+     */
+    ADDRESS_LEVEL2("address-level2"),
+
+    /**
+     * MA
+     */
+    ADDRESS_LEVEL1("address-level1"),
+
+    /**
+     * US
+     */
+    COUNTRY("country"),
+
+    /**
+     * US
+     */
+    COUNTRY_NAME("country-name"),
+
+    /**
+     * 02139
+     */
+    POSTAL_CODE("postal-code"),
+
+    /**
+     * Tim Berners-Lee
+     */
+    CC_NAME("cc-name"),
+
+    /**
+     * Tim
+     */
+    CC_GIVEN_NAME("cc-given-name"),
+
+    /**
+     * -
+     */
+    CC_ADDITIONAL_NAME("cc-additional-name"),
+
+    /**
+     * Berners-Lee
+     */
+    CC_FAMILY_NAME("cc-family-name"),
+
+    /**
+     * 4114360123456785
+     */
+    CC_NUMBER("cc-number"),
+
+    /**
+     * 2014-12
+     */
+    CC_EXP("cc-exp"),
+
+    /**
+     * 12
+     */
+    CC_EXP_MONTH("cc-exp-month"),
+
+    /**
+     * 2014
+     */
+    CC_EXP_YEAR("cc-exp-year"),
+
+    /**
+     * 419
+     */
+    CC_CSC("cc-csc"),
+
+    /**
+     * Visa
+     */
+    CC_TYPE("cc-type"),
+
+    /**
+     * GBP
+     */
+    TRANSACTION_CURRENCY("transaction-currency"),
+
+    /**
+     * 401.00
+     */
+    TRANSACTION_AMOUNT("transaction-amount"),
+
+    /**
+     * en
+     */
+    LANGUAGE("language"),
+
+    /**
+     * 1955-06-08
+     */
+    BDAY("bday"),
+
+    /**
+     * 8
+     */
+    BDAY_DAY("bday-day"),
+
+    /**
+     * 6
+     */
+    BDAY_MONTH("bday-month"),
+
+    /**
+     * 1955
+     */
+    BDAY_YEAR("bday-year"),
+
+    /**
+     * Male
+     */
+    SEX("sex"),
+
+    /**
+     * https://www.w3.org/People/Berners-Lee/
+     */
+    URL("url"),
+
+    /**
+ * https://www.w3.org/Press/Stock/Berners-Lee/2001-europaeum-eighth.jpg
+     */
+    PHOTO("photo");
+
+    private String value;
+
+    private AutoCompleteFields(String value)
+    {
+        this.value = value;
+    }
+
+    /**
+     * Gets the value of the auto completion
+     *
+     * @return the value of the auto completion
+     */
+    public String getValue()
+    {
+        return value;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/bcd55813/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java
index e8b61e7..1d3284a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/Form.java
@@ -1352,6 +1352,14 @@ public class Form<T> extends WebMarkupContainer
      }
        /**
+ * Gets the value of the autocomplete attribute. The default behavior is that it is turned off + * @return AutoCompleteBuilder the builder to generate the autocomplete attribute information
+     */
+    protected AutoCompleteBuilder getAutoCompleteBuilder(){
+        return AutoCompleteBuilder.init().empty();
+    }
+
+    /**
       *
       * @see org.apache.wicket.Component#getStatelessHint()
       */
@@ -1633,6 +1641,12 @@ public class Form<T> extends WebMarkupContainer
                      setMultiPart(true);
                  }
              }
+
+            // Auto completion support
+ String autocompleteValue = getAutoCompleteBuilder().toString();
+            if(!autocompleteValue.isEmpty()){
+                tag.put("autocomplete", autocompleteValue);
+            }
          }
          else
          {

http://git-wip-us.apache.org/repos/asf/wicket/blob/bcd55813/wicket-core/src/main/java/org/apache/wicket/markup/html/form/TextField.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/TextField.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/TextField.java
index 81dc828..719560c 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/TextField.java +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/TextField.java @@ -107,6 +107,12 @@ public class TextField<T> extends AbstractTextComponent<T>
            tag.put("value", getValue());
  +        // Auto completion support
+ String autocompleteValue = getAutoCompleteBuilder().toString();
+        if(!autocompleteValue.isEmpty()){
+            tag.put("autocomplete", autocompleteValue);
+        }
+
          // Default handling for component tag
          super.onComponentTag(tag);
      }
@@ -121,4 +127,12 @@ public class TextField<T> extends AbstractTextComponent<T>
      {
          return null;
      }
+
+    /**
+ * Gets the value of the autocomplete attribute. The default behavior is that it is turned off + * @return AutoCompleteBuilder the builder to generate the autocomplete attribute information
+     */
+    protected AutoCompleteBuilder getAutoCompleteBuilder(){
+        return AutoCompleteBuilder.init().empty();
+    }
  }

http://git-wip-us.apache.org/repos/asf/wicket/blob/bcd55813/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormTest.java
index 05344a5..2ee420a 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/FormTest.java
@@ -53,6 +53,39 @@ public class FormTest extends WicketTestCase
          };
      }
  +    /**
+     * Test auto complete functionality
+     */
+    @Test
+    public void testAutoComplete(){
+ class TestPage extends WebPage implements IMarkupResourceStreamProvider
+        {
+            boolean shouldFail, submit, error;
+
+            public TestPage()
+            {
+                add(new Form<Void>("form")
+                {
+                    @Override
+ protected AutoCompleteBuilder getAutoCompleteBuilder()
+                    {
+ return AutoCompleteBuilder.init().forAddressType(AutoCompleteAddressType.BILLING).forField(AutoCompleteFields.GIVEN_NAME);
+                    }
+                });
+            }
+
+            @Override
+ public IResourceStream getMarkupResourceStream(final MarkupContainer container,
+                Class<?> containerClass)
+            {
+ return new StringResourceStream("<form wicket:id='form'></form>");
+            }
+        }
+
+        TestPage testPage = new TestPage();
+        tester.startPage(testPage);
+ assertTrue(tester.getLastResponseAsString().contains("autocomplete=\"billing given-name\""));
+    }
        /**
       * @throws Exception
@@ -115,6 +148,12 @@ public class FormTest extends WicketTestCase
                      {
                          error = true;
                      }
+
+                    @Override
+ protected AutoCompleteBuilder getAutoCompleteBuilder()
+                    {
+ return AutoCompleteBuilder.init().forAddressType(AutoCompleteAddressType.BILLING).forField(AutoCompleteFields.GIVEN_NAME);
+                    }
                  });
              }
http://git-wip-us.apache.org/repos/asf/wicket/blob/bcd55813/wicket-core/src/test/java/org/apache/wicket/markup/html/form/TextFieldTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/TextFieldTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/TextFieldTest.java
index 5af5917..2c215e5 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/TextFieldTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/TextFieldTest.java
@@ -36,7 +36,20 @@ import org.junit.Test;
   */
  public class TextFieldTest extends WicketTestCase
  {
-    /** */
+
+    /**
+     * Test auto complete feature
+     */
+    @Test
+    public void testAutoComplete(){
+        TestPage testPage = new TestPage();
+        tester.startPage(testPage);
+ assertTrue(tester.getLastResponseAsString().contains("autocomplete=\"section-blue billing name\""));
+    }
+
+    /**
+     * Test that inputs are converted to null
+     * */
      @Test
      public void emptyInputConvertedToNull()
      {
@@ -111,7 +124,13 @@ public class TextFieldTest extends WicketTestCase
          public TestPage()
          {
              add(form = new Form<>("form"));
-            form.add(textField = new TextField<>("text", textModel));
+ form.add(textField = new TextField<String>("text", textModel){
+                @Override
+ protected AutoCompleteBuilder getAutoCompleteBuilder()
+                {
+ return AutoCompleteBuilder.init().withSection("blue").forAddressType(AutoCompleteAddressType.BILLING).forField(AutoCompleteFields.NAME);
+                }
+            });
          }
            @Override




Reply via email to