Hi Tobias,

Some feedback inline:

On Tue, Dec 20, 2016 at 8:19 PM, <[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/fo
> rm/AutoCompleteAddressType.java b/wicket-core/src/main/java/or
> g/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/fo
> rm/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/fo
> rm/AutoCompleteBuilder.java
> new file mode 100644
> index 0000000..a3b64cd
> --- /dev/null
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/fo
> rm/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://settin
> gs/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;
>

The way 'empty' works seems incomplete.
Each `with**` method should set it to 'false'.


> +               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;
>

Such assignments need check for non-emptiness.
If the value is "" then it will pass the check for '!= null' in toString()
and produce wrong output.


> +               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(" ");
>

Append char instead, i.e. ' '.


> +                       }
> +                       if (addressType != null)
> +                       {
> +                               stringBuilder.append(addressT
> ype.getValue());
> +                               stringBuilder.append(" ");
> +                       }
> +                       if (field != null)
> +                       {
> +                               stringBuilder.append(field.getValue());
> +                       }
> +                       else
> +                       {
> +                               if (contact != null)
> +                               {
> +                                       stringBuilder.append(contact.
> getValue());
> +                                       stringBuilder.append(" ");
> +                               }
> +                               stringBuilder.append(contactD
> etail.getValue());
>

Is it allowed to have contactDetail without a contact ?


> +                       }
> +               }
> +               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/fo
> rm/AutoCompleteContact.java
> new file mode 100644
> index 0000000..cbf86a5
> --- /dev/null
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/fo
> rm/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/fo
> rm/AutoCompleteContactBuilder.java b/wicket-core/src/main/java/or
> g/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/fo
> rm/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/fo
> rm/AutoCompleteContactDetails.java b/wicket-core/src/main/java/or
> g/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/fo
> rm/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


Prefix it with "E.g."


>
> +        */
> +       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/fo
> rm/AutoCompleteFields.java
> new file mode 100644
> index 0000000..8f794c4
> --- /dev/null
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/fo
> rm/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/fo
> rm/Form.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/fo
> rm/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();
>

Since there is no way to set empty=false at the moment this definitely
doesn't work.
Some tests for the builders would be nice!


> +       }
> +
> +       /**
>          *
>          * @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/fo
> rm/TextField.java
> index 81dc828..719560c 100644
> --- a/wicket-core/src/main/java/org/apache/wicket/markup/html/fo
> rm/TextField.java
> +++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/fo
> rm/TextField.java
> @@ -107,6 +107,12 @@ public class TextField<T> extends
> AbstractTextComponent<T>
>
>                 tag.put("value", getValue());
>
> +               // Auto completion support
> +               String autocompleteValue = getAutoCompleteBuilder().toStr
> ing();
> +               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/fo
> rm/FormTest.java
> index 05344a5..2ee420a 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/fo
> rm/FormTest.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/fo
> rm/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(AutoCompleteAddres
> sType.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(AutoCompleteAddres
> sType.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/fo
> rm/TextFieldTest.java
> index 5af5917..2c215e5 100644
> --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/fo
> rm/TextFieldTest.java
> +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/fo
> rm/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").forAddressTyp
> e(AutoCompleteAddressType.BILLING).forField(AutoCompleteFields.NAME);
> +                               }
> +                       });
>                 }
>
>                 @Override
>
>

Reply via email to