[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>&ndash; 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>&ndash; 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