diff --git a/news/154.feature b/news/154.feature new file mode 100644 index 00000000..acd71d28 --- /dev/null +++ b/news/154.feature @@ -0,0 +1,2 @@ +Customizable DateWidget formatter length. +[petschki] diff --git a/plone/app/z3cform/tests/test_widgets.py b/plone/app/z3cform/tests/test_widgets.py index d2331384..726b7c0f 100644 --- a/plone/app/z3cform/tests/test_widgets.py +++ b/plone/app/z3cform/tests/test_widgets.py @@ -263,6 +263,27 @@ def test_fieldwidget(self): self.assertIs(widget.field, field) self.assertIs(widget.request, request) + def test_dateformatter(self): + self.widget.value = "2022-08-17" + self.assertIn(" value=\"2022-08-17\" ", self.widget.render()) + + self.widget.mode = "display" + self.assertEqual("8/17/22", self.widget.render()) + + self.widget._formater_length = "medium" + self.assertEqual("Aug 17, 2022", self.widget.render()) + + self.widget._formater_length = "long" + self.assertEqual("August 17, 2022", self.widget.render()) + + self.widget._formater_length = "full" + self.assertEqual("Wednesday, August 17, 2022", self.widget.render()) + + # unknown formater length + self.widget._formater_length = "foo" + with self.assertRaises(ValueError): + self.widget.render() + class DatetimeWidgetTests(unittest.TestCase): def setUp(self): @@ -417,6 +438,27 @@ def test_fieldwidget(self): self.assertIs(widget.field, field) self.assertIs(widget.request, request) + def test_datetimeformatter(self): + self.widget.value = "2022-08-17T12:00" + self.assertIn(" value=\"2022-08-17T12:00\" ", self.widget.render()) + + self.widget.mode = "display" + self.assertEqual("8/17/22 12:00 PM", self.widget.render()) + + self.widget._formater_length = "medium" + self.assertEqual("Aug 17, 2022 12:00:00 PM", self.widget.render()) + + self.widget._formater_length = "long" + self.assertEqual("August 17, 2022 12:00:00 PM +000", self.widget.render()) + + self.widget._formater_length = "full" + self.assertEqual("Wednesday, August 17, 2022 12:00:00 PM +000", self.widget.render()) + + # unknown formater length + self.widget._formater_length = "foo" + with self.assertRaises(ValueError): + self.widget.render() + class TimeWidgetTests(unittest.TestCase): def setUp(self): diff --git a/plone/app/z3cform/widget.py b/plone/app/z3cform/widget.py index a742b830..95e89cb2 100644 --- a/plone/app/z3cform/widget.py +++ b/plone/app/z3cform/widget.py @@ -142,6 +142,7 @@ class DateWidget(BaseWidget, z3cform_TextWidget): _base_type = "date" _converter = DateWidgetConverter _formater = "date" + _formater_length = "short" default_timezone = None default_time = "00:00:00" @@ -200,7 +201,7 @@ def render(self): formatter = self.request.locale.dates.getFormatter( self._formater, - "short", + self._formater_length, ) return formatter.format(field_value)