[Checkins] SVN: zope.app.form/trunk/src/zope/app/form/browser/ Add labels to MultiCheckBoxWidget. Not having labels for checkboxes is just

Marius Gedminas marius at pov.lt
Mon Jul 2 05:52:32 EDT 2007


Log message for revision 77294:
  Add labels to MultiCheckBoxWidget.  Not having labels for checkboxes is just
  plain rude.
  
  

Changed:
  U   zope.app.form/trunk/src/zope/app/form/browser/itemswidgets.py
  U   zope.app.form/trunk/src/zope/app/form/browser/source.txt
  U   zope.app.form/trunk/src/zope/app/form/browser/tests/test_itemswidget.py

-=-
Modified: zope.app.form/trunk/src/zope/app/form/browser/itemswidgets.py
===================================================================
--- zope.app.form/trunk/src/zope/app/form/browser/itemswidgets.py	2007-07-02 09:44:26 UTC (rev 77293)
+++ zope.app.form/trunk/src/zope/app/form/browser/itemswidgets.py	2007-07-02 09:52:32 UTC (rev 77294)
@@ -592,16 +592,18 @@
             return "<br />".join(rendered_items)
 
     def renderItem(self, index, text, value, name, cssClass):
-        id = '%s.%s' % (name, index)
-        elem = renderElement('input',
-                             type="checkbox",
-                             cssClass=cssClass,
-                             name=name,
-                             id=id,
-                             value=value)
-        return self._joinButtonToMessageTemplate % (elem, text)
+        """Render an item of the list."""
+        return self._renderItem(index, text, value, name, cssClass)
 
     def renderSelectedItem(self, index, text, value, name, cssClass):
+        """Render a selected item of the list."""
+        return self._renderItem(index, text, value, name, cssClass,
+                                checked=True)
+
+    def _renderItem(self, index, text, value, name, cssClass, checked=False):
+        kw = {}
+        if checked:
+            kw['checked'] = 'checked'
         id = '%s.%s' % (name, index)
         elem = renderElement('input',
                              type="checkbox",
@@ -609,5 +611,9 @@
                              name=name,
                              id=id,
                              value=value,
-                             checked="checked")
-        return self._joinButtonToMessageTemplate %(elem, text)
+                             **kw)
+        contents = self._joinButtonToMessageTemplate % (elem, text)
+        return renderElement(u'label',
+                             contents=contents,
+                             **{'for': id})
+

Modified: zope.app.form/trunk/src/zope/app/form/browser/source.txt
===================================================================
--- zope.app.form/trunk/src/zope/app/form/browser/source.txt	2007-07-02 09:44:26 UTC (rev 77293)
+++ zope.app.form/trunk/src/zope/app/form/browser/source.txt	2007-07-02 09:52:32 UTC (rev 77294)
@@ -299,17 +299,20 @@
   >>> print widget() # doctest: +NORMALIZE_WHITESPACE
   <div>
   <div class="value">
-  <input class="checkboxType" id="field.dogs.0" name="field.dogs"
-    type="checkbox" value="c3BvdA==" />&nbsp;spot<br
-    /><input class="checkboxType" id="field.dogs.1"
-        name="field.dogs" type="checkbox" value="Ym93c2Vy" />&nbsp;bowser<br
-    /><input class="checkboxType" id="field.dogs.2"
-        name="field.dogs" type="checkbox" value="cHJpbmNl" />&nbsp;prince<br
-    /><input class="checkboxType" id="field.dogs.3"
+  <label for="field.dogs.0"><input class="checkboxType" id="field.dogs.0"
+    name="field.dogs" type="checkbox" value="c3BvdA==" />&nbsp;spot</label><br
+    /><label for="field.dogs.1"><input class="checkboxType" id="field.dogs.1"
+        name="field.dogs" type="checkbox" value="Ym93c2Vy"
+        />&nbsp;bowser</label><br
+    /><label for="field.dogs.2"><input class="checkboxType" id="field.dogs.2"
+        name="field.dogs" type="checkbox" value="cHJpbmNl"
+        />&nbsp;prince</label><br
+    /><label for="field.dogs.3"><input class="checkboxType" id="field.dogs.3"
         name="field.dogs" type="checkbox"
-        value="ZHVjaGVzcw==" />&nbsp;duchess<br
-    /><input class="checkboxType" id="field.dogs.4"
-        name="field.dogs" type="checkbox" value="bGFzc2ll" />&nbsp;lassie
+        value="ZHVjaGVzcw==" />&nbsp;duchess</label><br
+    /><label for="field.dogs.4"><input class="checkboxType" id="field.dogs.4"
+        name="field.dogs" type="checkbox" value="bGFzc2ll"
+        />&nbsp;lassie</label>
   </div>
   <input name="field.dogs-empty-marker" type="hidden" value="1" />
   </div>
@@ -340,17 +343,21 @@
   >>> print widget() # doctest: +NORMALIZE_WHITESPACE
   <div>
   <div class="value">
-  <input class="checkboxType" checked="checked" id="field.dogs.0"
-    name="field.dogs" type="checkbox" value="c3BvdA==" />&nbsp;spot<br
-    /><input class="checkboxType" id="field.dogs.1"
-        name="field.dogs" type="checkbox" value="Ym93c2Vy" />&nbsp;bowser<br
-    /><input class="checkboxType" id="field.dogs.2"
-        name="field.dogs" type="checkbox" value="cHJpbmNl" />&nbsp;prince<br
-    /><input class="checkboxType" id="field.dogs.3"
+  <label for="field.dogs.0"><input class="checkboxType" checked="checked"
+    id="field.dogs.0" name="field.dogs" type="checkbox" value="c3BvdA=="
+    />&nbsp;spot</label><br
+    /><label for="field.dogs.1"><input class="checkboxType" id="field.dogs.1"
+        name="field.dogs" type="checkbox" value="Ym93c2Vy"
+        />&nbsp;bowser</label><br
+    /><label for="field.dogs.2"><input class="checkboxType" id="field.dogs.2"
+        name="field.dogs" type="checkbox" value="cHJpbmNl"
+        />&nbsp;prince</label><br
+    /><label for="field.dogs.3"><input class="checkboxType" id="field.dogs.3"
         name="field.dogs" type="checkbox"
-        value="ZHVjaGVzcw==" />&nbsp;duchess<br
-    /><input class="checkboxType" checked="checked" id="field.dogs.4"
-        name="field.dogs" type="checkbox" value="bGFzc2ll" />&nbsp;lassie
+        value="ZHVjaGVzcw==" />&nbsp;duchess</label><br
+    /><label for="field.dogs.4"><input class="checkboxType" checked="checked"
+        id="field.dogs.4" name="field.dogs" type="checkbox" value="bGFzc2ll"
+        />&nbsp;lassie</label>
   </div>
   <input name="field.dogs-empty-marker" type="hidden" value="1" />
   </div>

Modified: zope.app.form/trunk/src/zope/app/form/browser/tests/test_itemswidget.py
===================================================================
--- zope.app.form/trunk/src/zope/app/form/browser/tests/test_itemswidget.py	2007-07-02 09:44:26 UTC (rev 77293)
+++ zope.app.form/trunk/src/zope/app/form/browser/tests/test_itemswidget.py	2007-07-02 09:52:32 UTC (rev 77294)
@@ -536,9 +536,10 @@
 
     def test_renderValue(self):
         widget = self._makeWidget()
-        self.verifyResult(widget.renderValue(None), ['<br /><input'])
+        self.verifyResult(widget.renderValue(None), ['<br /><label for='])
         widget.orientation='horizontal'
-        self.verifyResult(widget.renderValue(None), ['&nbsp;&nbsp;<input'])
+        self.verifyResult(widget.renderValue(None),
+                          ['&nbsp;&nbsp;<label for='])
 
     def test_renderItemsWithValues(self):
         widget = self._makeWidget()



More information about the Checkins mailing list