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