diff --git a/docs/fields.rst b/docs/fields.rst
index 40773cd0..c695caae 100644
--- a/docs/fields.rst
+++ b/docs/fields.rst
@@ -380,6 +380,8 @@ Convenience Fields
{{ form.textarea(rows=7, cols=90) }}
+.. autoclass:: ColorField(default field arguments)
+
Field Enclosures
----------------
diff --git a/src/wtforms/fields/simple.py b/src/wtforms/fields/simple.py
index 8feff4f5..910ff96e 100644
--- a/src/wtforms/fields/simple.py
+++ b/src/wtforms/fields/simple.py
@@ -14,6 +14,7 @@
"TelField",
"URLField",
"EmailField",
+ "ColorField",
)
@@ -162,3 +163,11 @@ class EmailField(StringField):
"""
widget = widgets.EmailInput()
+
+
+class ColorField(StringField):
+ """
+ Represents an ````.
+ """
+
+ widget = widgets.ColorInput()
diff --git a/tests/fields/test_color.py b/tests/fields/test_color.py
new file mode 100644
index 00000000..c563e881
--- /dev/null
+++ b/tests/fields/test_color.py
@@ -0,0 +1,16 @@
+from wtforms import widgets
+from wtforms.fields import ColorField
+from wtforms.form import Form
+
+
+class F(Form):
+ a = ColorField(
+ widget=widgets.ColorInput(), default="#ff0000"
+ )
+ b = ColorField(default="#00ff00")
+
+
+def test_color_field():
+ form = F()
+ assert form.a() == """"""
+ assert form.b() == """"""
diff --git a/tests/test_widgets.py b/tests/test_widgets.py
index a9b7cd30..93ee5351 100644
--- a/tests/test_widgets.py
+++ b/tests/test_widgets.py
@@ -2,6 +2,7 @@
from markupsafe import Markup
from wtforms.widgets.core import CheckboxInput
+from wtforms.widgets.core import ColorInput
from wtforms.widgets.core import FileInput
from wtforms.widgets.core import HiddenInput
from wtforms.widgets.core import html_params
@@ -147,6 +148,14 @@ def test_file(self, basic_widget_dummy_field):
== ''
)
+ def test_color_input(self, basic_widget_dummy_field):
+ assert 'type="color"' in ColorInput()(basic_widget_dummy_field)
+ assert 'value="foo"' in ColorInput()(basic_widget_dummy_field)
+ basic_widget_dummy_field.data = "#ff0000"
+ assert 'value="#ff0000"' in ColorInput()(
+ basic_widget_dummy_field
+ )
+
class TestSelect:
def test_select(self, select_dummy_field):