SVN: r24263 - in trunk: quixote/form2

Neil Schemenauer <nascheme-fVcApmY9cLvQ3/1i3zOLAti2O/[email protected]> Tue, 18 May 2004 15:50:19 -0400
Newsgroups gmane.comp.web.quixote.cvs
Message-ID <[email protected]>
Author: nascheme
Date: 2004-05-18 12:50:04 -0400 (Tue, 18 May 2004)
New Revision: 24263

Modified:
   trunk/quixote/form2/form.py
   trunk/quixote/form2/widget.py
Log:
Overhaul rendering of form2 widgets.  Forget about using <fieldset>,
<legend>, <label> and just use <div> tags.


Modified: trunk/quixote/form2/form.py
===================================================================
--- trunk/quixote/form2/form.py	2004-05-18 15:48:33 UTC (rev 24262)
+++ trunk/quixote/form2/form.py	2004-05-18 16:50:04 UTC (rev 24263)
@@ -278,9 +278,8 @@
         return r.getvalue()
 
     def _render_error_notice(self):
-        return htmltext('<div class="formerrornotice">'
-                        '<strong>Warning:</strong>'
-                        ' there were errors processing your form.  '
+        return htmltext('<div class="errornotice">'
+                        'There were errors processing your form.  '
                         'See below for details.'
                         '</div>')
 

Modified: trunk/quixote/form2/widget.py
===================================================================
--- trunk/quixote/form2/widget.py	2004-05-18 15:48:33 UTC (rev 24262)
+++ trunk/quixote/form2/widget.py	2004-05-18 16:50:04 UTC (rev 24263)
@@ -143,48 +143,38 @@
         else:
             self.value = None
 
-    def render_fieldset_start(self, error):
-        css_class = self.__class__.__name__
-        if 'css_class' in self.attrs:
-            css_class += " %s" % self.attrs['css_class']
-        if error:
-            css_class += ' error'
-        return htmltext('\n<div class="%s widget">\n<fieldset>') % css_class
-
-    def render_legend(self, title):
-        if self.required:
-            if title is None:
-                title = ''
-            title += '\n<span class="required">*</span>'
+    def render_title(self, title):
         if title:
-            return htmltext('\n<legend>%s</legend>' % title)
+            if self.required:
+                title += htmltext('<span class="required">*</span>')
+            return htmltext('<div class="title">%s</div>') % title
         else:
             return ''
 
     def render_hint(self, hint):
         if hint:
-            return htmltext('\n<label class="hint">%s</label>') % hint
+            return htmltext('<div class="hint">%s</div>') % hint
         else:
             return ''
 
     def render_error(self, error):
         if error:
-            return htmltext('\n<label class="error">%s</label>') % error
+            return htmltext('<div class="error">%s</div>') % error
         else:
             return ''
 
-    def render_fieldset_end(self):
-        return htmltext('</fieldset></div>')
-
     def render(self):
-        error = self.get_error()
         r = TemplateIO(html=True)
-        r += self.render_fieldset_start(error)
-        r += self.render_legend(self.get_title())
+        classnames = '%s widget' % self.__class__.__name__
+        r += htmltext('<div class="%s">') % classnames
+        r += self.render_title(self.get_title())
+        r += htmltext('<div class="content">')
         r += self.render_content()
         r += self.render_hint(self.get_hint())
-        r += self.render_error(error)
-        r += self.render_fieldset_end()
+        r += self.render_error(self.get_error())
+        r += htmltext('</div>')
+        r += htmltext('</div>')
+        r += htmltext('<br class="%s" />\n') % classnames
         return r.getvalue()
 
     def render_content(self):
@@ -611,7 +601,7 @@
         if error is not None:
             raise TypeError, 'error not allowed on hidden widgets'
 
-    def render_content(self): 
+    def render_content(self):
         if self.value is None:
             value = None
         else:
@@ -854,7 +844,19 @@
         r += add_element_widget.render()
         return r.getvalue()
 
+    def render(self):
+        r = TemplateIO(html=True)
+        r += self.render_title(self.get_title())
+        add_element_widget = self.get_widget('add_element')
+        for widget in self.get_widgets():
+            if widget is add_element_widget:
+                continue
+            r += widget.render()
+        r += add_element_widget.render()
+        r += self.render_hint(self.get_hint())
+        return r.getvalue()
 
+
 class WidgetDict(CompositeWidget):
     """A variable length dict of widgets.  There is only one
     title and hint but each element of the list can have its own
@@ -936,9 +938,10 @@
                  continue
             key_widget = self.get_widget(name + 'key')
             value_widget = self.get_widget(name + 'value')
-            r += htmltext('\n<div class="WidgetDictItem">%s%s</div>') % (
+            r += htmltext('<div class="WidgetDictItem">%s%s</div>') % (
                 key_widget.render(),
                 value_widget.render())
+            r += htmltext('<br class="widget" />\n')
         r += self.get_widget('add_element').render()
         r += self.get_widget('added_elements').render()
         return r.getvalue()