[Checkins] SVN: z3c.form/trunk/ - Added labelRequired and requiredInfo form attributes. This is
Roger Ineichen
roger at projekt01.ch
Sat Feb 21 22:01:47 EST 2009
Log message for revision 96972:
- Added labelRequired and requiredInfo form attributes. This is
useful for conditional rendering a required info legend in form templates.
The requiredInfo label depends by default on a given lableRequired message id
and will only return the label if at least one widget field is required.
- added tests
Changed:
U z3c.form/trunk/CHANGES.txt
U z3c.form/trunk/src/z3c/form/field.py
U z3c.form/trunk/src/z3c/form/field.txt
U z3c.form/trunk/src/z3c/form/form.py
U z3c.form/trunk/src/z3c/form/form.txt
U z3c.form/trunk/src/z3c/form/interfaces.py
-=-
Modified: z3c.form/trunk/CHANGES.txt
===================================================================
--- z3c.form/trunk/CHANGES.txt 2009-02-22 02:30:39 UTC (rev 96971)
+++ z3c.form/trunk/CHANGES.txt 2009-02-22 03:01:46 UTC (rev 96972)
@@ -5,6 +5,11 @@
Version 2.0.0 (unreleased)
--------------------------
+- Feature: Added labelRequired and requiredInfo form attributes. This is
+ useful for conditional rendering a required info legend in form templates.
+ The requiredInfo label depends by default a given lableRequired message id
+ and will only return the label if at least one widget field is required.
+
- Feature: Add support for refreshing actions after their execution. This
is useful when button action conditions are changing as a result of
action execution. All you need is to set the ``refreshActions`` flag
Modified: z3c.form/trunk/src/z3c/form/field.py
===================================================================
--- z3c.form/trunk/src/z3c/form/field.py 2009-02-22 02:30:39 UTC (rev 96971)
+++ z3c.form/trunk/src/z3c/form/field.py 2009-02-22 03:01:46 UTC (rev 96972)
@@ -179,6 +179,7 @@
prefix = 'widgets.'
mode = interfaces.INPUT_MODE
errors = ()
+ hasRequiredFields = False
ignoreContext = False
ignoreRequest = False
ignoreReadonly = False
@@ -275,6 +276,8 @@
widget.update()
zope.event.notify(AfterWidgetUpdateEvent(widget))
# Step 9: Add the widget to the manager
+ if widget.required:
+ self.hasRequiredFields = True
uniqueOrderedKeys.append(shortName)
if newWidget:
self._data_values.append(widget)
Modified: z3c.form/trunk/src/z3c/form/field.txt
===================================================================
--- z3c.form/trunk/src/z3c/form/field.txt 2009-02-22 02:30:39 UTC (rev 96971)
+++ z3c.form/trunk/src/z3c/form/field.txt 2009-02-22 03:01:46 UTC (rev 96972)
@@ -622,6 +622,17 @@
'input'
+Required fields
+---------------
+
+There is a flag for required fields. This flag get set if at least one field
+is required. This let us render a required info legend in forms if required
+fields get used.
+
+ >>> manager.hasRequiredFields
+ True
+
+
Data extraction and validation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Modified: z3c.form/trunk/src/z3c/form/form.py
===================================================================
--- z3c.form/trunk/src/z3c/form/form.py 2009-02-22 02:30:39 UTC (rev 96971)
+++ z3c.form/trunk/src/z3c/form/form.py 2009-02-22 03:01:46 UTC (rev 96972)
@@ -106,6 +106,7 @@
fields = field.Fields()
label = None
+ labelRequired = _('<span class="required">*</span>– required')
prefix = 'form.'
status = ''
template = None
@@ -130,6 +131,12 @@
self.widgets.ignoreReadonly = self.ignoreReadonly
self.widgets.update()
+ @property
+ def requiredInfo(self):
+ if self.labelRequired is not None and self.widgets is not None \
+ and self.widgets.hasRequiredFields:
+ return zope.i18n.translate(self.labelRequired, context=self.request)
+
def extractData(self, setErrors=True):
'''See interfaces.IForm'''
self.widgets.setErrors = setErrors
Modified: z3c.form/trunk/src/z3c/form/form.txt
===================================================================
--- z3c.form/trunk/src/z3c/form/form.txt 2009-02-22 02:30:39 UTC (rev 96971)
+++ z3c.form/trunk/src/z3c/form/form.txt 2009-02-22 03:01:46 UTC (rev 96972)
@@ -604,7 +604,20 @@
...
</html>
+The form also provides a label for rendering a required info. This required
+info depends by default on the given requiredInfo label and if at least one
+field is required:
+ >>> addForm.requiredInfo
+ u'<span class="required">*</span>– required'
+
+If we set the labelRequired to None, we do not get a requiredInfo label:
+
+ >>> addForm.labelRequired = None
+ >>> addForm.requiredInfo is None
+ True
+
+
Changing Widget Attribute Values
--------------------------------
Modified: z3c.form/trunk/src/z3c/form/interfaces.py
===================================================================
--- z3c.form/trunk/src/z3c/form/interfaces.py 2009-02-22 02:30:39 UTC (rev 96971)
+++ z3c.form/trunk/src/z3c/form/interfaces.py 2009-02-22 03:01:46 UTC (rev 96972)
@@ -603,6 +603,13 @@
default=False,
required=True)
+ hasRequiredFields = zope.schema.Bool(
+ title=_('Has required fields'),
+ description=_('A flag set when at least one field is marked as '
+ 'required'),
+ default=False,
+ required=False)
+
#ugly thing to remove setErrors parameter from extract
setErrors = zope.schema.Bool(
title=_('Set errors'),
@@ -871,6 +878,12 @@
'used in the UI.'),
required=False)
+ labelRequired = zope.schema.TextLine(
+ title=_('Label required'),
+ description=_('A human readable text describing the form that can be '
+ 'used in the UI for rendering a required info legend.'),
+ required=False)
+
prefix = zope.schema.BytesLine(
title=_('Prefix'),
description=_('The prefix of the form used to uniquely identify it.'),
More information about the Checkins
mailing list