You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pa...@apache.org on 2013/10/28 09:16:28 UTC

[12/47] git commit: WICKET-5331 make HTML5 attributes optional

WICKET-5331 make HTML5 attributes optional

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

Branch: refs/heads/wicket-4997
Commit: deb502c7cb059c479319ddb8148cac7321921b19
Parents: e9df859
Author: svenmeier <sv...@meiers.net>
Authored: Mon Sep 2 15:56:29 2013 +0200
Committer: svenmeier <sv...@meiers.net>
Committed: Mon Sep 2 15:56:29 2013 +0200

----------------------------------------------------------------------
 .../wicket/markup/html/HTML5Attributes.java     | 133 +++++++++++++++++++
 .../markup/html/form/AbstractTextComponent.java |  13 +-
 .../wicket/markup/html/form/FormComponent.java  |   3 +-
 .../wicket/markup/html/form/TextAreaTest.java   |   9 +-
 .../wicket/markup/html/form/TextFieldTest.java  |   2 +
 .../validation/HomePage1_ExpectedResult.html    |   2 +-
 6 files changed, 146 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/deb502c7/wicket-core/src/main/java/org/apache/wicket/markup/html/HTML5Attributes.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/HTML5Attributes.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/HTML5Attributes.java
new file mode 100644
index 0000000..718f4ab
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/HTML5Attributes.java
@@ -0,0 +1,133 @@
+/*
+ * 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;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.application.IComponentInstantiationListener;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.html.form.AbstractTextComponent;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.FormComponent;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.validation.IValidator;
+import org.apache.wicket.validation.ValidatorAdapter;
+import org.apache.wicket.validation.validator.PatternValidator;
+
+/**
+ * Behavior which renders HTML5 attributes.
+ * 
+ * @see #onInput(AbstractTextComponent, ComponentTag)
+ * @see #onButton(Button, ComponentTag)
+ */
+public class HTML5Attributes extends Behavior
+{
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public void onComponentTag(Component component, ComponentTag tag)
+	{
+		if (component instanceof AbstractTextComponent)
+		{
+			onInput((AbstractTextComponent<?>)component, tag);
+		}
+		else if (component instanceof Button)
+		{
+			onButton((Button)component, tag);
+		}
+	}
+
+	/**
+	 * Writes HTML5 attributes for {@link AbstractTextComponent} inputs:
+	 * 
+	 * <ul>
+	 * <li>{@code required} if component {@link AbstractTextComponent#isRequired()}</li>
+	 * <li>{@code placeholder} for {@link AbstractTextComponent#getLabel()}</li>
+	 * <li>{@code pattern} for {@link AbstractTextComponent}s with a {@link PatternValidator}</li>
+	 * <ul>
+	 * 
+	 * @param input
+	 *            input component
+	 * @param tag
+	 *            component tag
+	 */
+	protected void onInput(AbstractTextComponent<?> input, ComponentTag tag)
+	{
+		if (input.isRequired())
+		{
+			tag.put("required", "required");
+		}
+
+		IModel<String> label = input.getLabel();
+		if (label != null && label.getObject() != null)
+		{
+			tag.put("placeholder", label.getObject());
+		}
+
+		for (IValidator<?> validator : input.getValidators())
+		{
+			if (validator instanceof ValidatorAdapter)
+			{
+				validator = ((ValidatorAdapter<?>)validator).getValidator();
+			}
+
+			if (validator instanceof PatternValidator)
+			{
+				tag.put("pattern", ((PatternValidator)validator).getPattern().toString());
+			}
+		}
+	}
+
+	/**
+	 * Writes HTML5 attributes for {@link Button}s:
+	 * 
+	 * <ul>
+	 * <li>{@code formnovalidate} if {@link Button#getDefaultFormProcessing()} returns {@code false}
+	 * </li>
+	 * <ul>
+	 * 
+	 * @param button
+	 *            button component
+	 * @param tag
+	 *            component tag
+	 */
+	protected void onButton(Button button, ComponentTag tag)
+	{
+		if (!button.getDefaultFormProcessing())
+		{
+			tag.put("formnovalidate", "formnovalidate");
+		}
+	}
+
+	/**
+	 * A listener to instantiations of {@link FormComponent}s to add HTML5 attributes.
+	 */
+	public static class InstantiationListener implements IComponentInstantiationListener
+	{
+		/**
+		 * Adds {@link HTML5Attributes} to all {@link FormComponent}s.
+		 */
+		@Override
+		public void onInstantiation(Component component)
+		{
+			if (component instanceof FormComponent)
+			{
+				component.add(new HTML5Attributes());
+			}
+		}
+	}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/deb502c7/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractTextComponent.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractTextComponent.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractTextComponent.java
index 175fbd5..c7f5972 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractTextComponent.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AbstractTextComponent.java
@@ -19,7 +19,6 @@ package org.apache.wicket.markup.html.form;
 import java.text.SimpleDateFormat;
 
 import org.apache.wicket.Component;
-import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.IObjectClassAwareModel;
 import org.apache.wicket.util.string.Strings;
@@ -190,13 +189,5 @@ public abstract class AbstractTextComponent<T> extends FormComponent<T>
 	{
 		setFlag(FLAG_CONVERT_EMPTY_INPUT_STRING_TO_NULL, flag);
 		return this;
-	}
-
-	@Override
-	protected void onRequired(ComponentTag tag)
-	{
-		super.onRequired(tag);
-
-		tag.put("required", "required");
-	}
-}
+	};
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/wicket/blob/deb502c7/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
index 00e883f..e31944a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/FormComponent.java
@@ -1423,10 +1423,11 @@ public abstract class FormComponent<T> extends LabeledWebMarkupContainer
 
 	/**
 	 * Called by {@link #onComponentTag(ComponentTag)} when the component is required.
-	 *
+	 * 
 	 * @param tag
 	 *            the tag that is being rendered
 	 */
+	@Deprecated
 	protected void onRequired(final ComponentTag tag)
 	{
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/deb502c7/wicket-core/src/test/java/org/apache/wicket/markup/html/form/TextAreaTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/TextAreaTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/TextAreaTest.java
index 0f479e9..36fd413 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/TextAreaTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/TextAreaTest.java
@@ -19,6 +19,7 @@ package org.apache.wicket.markup.html.form;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.WicketTestCase;
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.HTML5Attributes;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
@@ -42,6 +43,7 @@ public class TextAreaTest extends WicketTestCase
 		testPage.textArea.setOutputMarkupId(true);
 		testPage.textArea.setType(String.class);
 		testPage.textArea.setRequired(true);
+		testPage.textArea.add(new HTML5Attributes());
 		tester.startPage(testPage);
 
 		TagTester tagTester = tester.getTagById(testPage.textArea.getMarkupId());
@@ -55,7 +57,7 @@ public class TextAreaTest extends WicketTestCase
 		private static final long serialVersionUID = 1L;
 		Form<Void> form;
 		TextArea<String> textArea;
-		IModel<String> textModel = Model.of((String) null);
+		IModel<String> textModel = Model.of((String)null);
 
 		/** */
 		public TestPage()
@@ -66,9 +68,10 @@ public class TextAreaTest extends WicketTestCase
 
 		@Override
 		public IResourceStream getMarkupResourceStream(MarkupContainer container,
-		                                               Class<?> containerClass)
+			Class<?> containerClass)
 		{
-			return new StringResourceStream("<html><body>"
+			return new StringResourceStream(
+				"<html><body>"
 					+ "<form wicket:id=\"form\"><textarea wicket:id=\"textarea\"></textarea></form></body></html>");
 		}
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/deb502c7/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 d5ac8cc..940778d 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
@@ -19,6 +19,7 @@ package org.apache.wicket.markup.html.form;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.WicketTestCase;
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.HTML5Attributes;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
@@ -90,6 +91,7 @@ public class TextFieldTest extends WicketTestCase
 		testPage.textField.setOutputMarkupId(true);
 		testPage.textField.setType(String.class);
 		testPage.textField.setRequired(true);
+		testPage.textField.add(new HTML5Attributes());
 		tester.startPage(testPage);
 
 		TagTester tagTester = tester.getTagById(testPage.textField.getMarkupId());

http://git-wip-us.apache.org/repos/asf/wicket/blob/deb502c7/wicket-core/src/test/java/org/apache/wicket/markup/html/form/validation/HomePage1_ExpectedResult.html
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/validation/HomePage1_ExpectedResult.html b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/validation/HomePage1_ExpectedResult.html
index da0cdf6..8851ded 100644
--- a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/validation/HomePage1_ExpectedResult.html
+++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/validation/HomePage1_ExpectedResult.html
@@ -11,7 +11,7 @@
 	<form wicket:id="form" id="form8" method="post" action="../page?1-1.IFormSubmitListener-bug-form"><div style="width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden"><input type="hidden" name="form8_hf_0" id="form8_hf_0" /></div>
 	  <div wicket:id="border"><wicket:border>
 		<wicket:body>
-	    <input wicket:id="name" value="" name="border:border_body:name" required="required"/>
+	    <input wicket:id="name" value="" name="border:border_body:name"/>
 	    <div wicket:id="feedback"><wicket:panel>
   
 </wicket:panel></div>