SVN: r23126 - trunk/quixote/form2

Neil Schemenauer <nascheme-fVcApmY9cLvQ3/1i3zOLAti2O/[email protected]> Tue, 11 Nov 2003 11:29:04 -0500
Newsgroups gmane.comp.web.quixote.cvs
Message-ID <[email protected]>
Author: nascheme
Date: 2003-11-11 11:29:04 -0500 (Tue, 11 Nov 2003)
New Revision: 23126

Modified:
   trunk/quixote/form2/form.py
   trunk/quixote/form2/widget.py
Log:
>From gward:

  widget.py:
    Factor ButtonWidget out of SubmitWidget; add ResetWidget.

  form.py:
    Factor _add_button_widget() out of Form.add_submit(); add add_button()
    and add_reset().                                                      
		    
    Rename Form.submit_buttons instance attribute to 'button_widgets'.
    Add get_buttons() method.                                         
			     
    Rename Form._render_submit_buttons() to _render_button_widgets().



Modified: trunk/quixote/form2/form.py
===================================================================
--- trunk/quixote/form2/form.py	2003-11-11 16:26:24 UTC (rev 23125)
+++ trunk/quixote/form2/form.py	2003-11-11 16:29:04 UTC (rev 23126)
@@ -9,7 +9,7 @@
 from quixote import get_request, get_session, get_publisher
 from quixote.html import url_quote, htmltag, htmltext, nl2br, TemplateIO
 from quixote.form2.widget import Widget, HiddenWidget, StringWidget, \
-    SubmitWidget, subname
+    ButtonWidget, ResetWidget, SubmitWidget, subname
 
 
 try:
@@ -233,7 +233,7 @@
     Instance attributes:
       components : [FormComponent]
       hidden_widgets = [HiddenWidget]
-      submit_buttons = [SubmitWidget]
+      button_widgets = [ButtonWidget]
       _names : { name:string : Widget|FormComponent }
         names used in the form
     """
@@ -253,7 +253,7 @@
         self.action_url = action_url or self._get_default_action_url()
         self.components = []
         self.hidden_widgets = []
-        self.submit_buttons = []
+        self.button_widgets = []
         self._names = {}
 
         if enctype is not None and enctype not in (
@@ -322,6 +322,9 @@
                 return True
         return False
 
+    def get_buttons(self):
+        return self.button_widgets
+
     def get_submit(self):
         """() -> string | bool
 
@@ -331,7 +334,7 @@
 
         """
         request = get_request()
-        for button in self.submit_buttons:
+        for button in self.button_widgets:
             if request.form.has_key(button.name):
                 return button.name
         else:
@@ -378,11 +381,20 @@
                            title, hint, required, **kwargs)
 
 
-    def add_submit(self, name, value):
-        widget = SubmitWidget(name, value)
+    def _add_button_widget(self, klass, name, value, **kwargs):
+        widget = klass(name, value, **kwargs)
         self._add_name(name, widget)
-        self.submit_buttons.append(widget)
+        self.button_widgets.append(widget)
 
+    def add_button(self, name, value, **kwargs):
+        self._add_button_widget(ButtonWidget, name, value, **kwargs)
+
+    def add_reset(self, name, value, **kwargs):
+        self._add_button_widget(ResetWidget, name, value, **kwargs)
+
+    def add_submit(self, name, value, **kwargs):
+        self._add_button_widget(SubmitWidget, name, value, **kwargs)
+
     def add_hidden(self, name, value, klass=HiddenWidget):
         widget = klass(name, value)
         self._add_name(name, widget)
@@ -424,10 +436,10 @@
             r += widget.render()
         return r.getvalue()
 
-    def _render_submit_buttons(self, ncols=3):
+    def _render_button_widgets(self, ncols=3):
         r = TemplateIO(html=True)
         r += htmltext('<tr><td colspan="%d">\n') % ncols
-        for button in self.submit_buttons:
+        for button in self.button_widgets:
             r += button.render()
         r += htmltext('</td></tr>')
         return r.getvalue()
@@ -454,7 +466,7 @@
         r += htmltext('<table>')
         r += self._render_error_notice()
         r += self._render_components()
-        r += self._render_submit_buttons()
+        r += self._render_button_widgets()
         r += htmltext('</table>')
         return r.getvalue()
 

Modified: trunk/quixote/form2/widget.py
===================================================================
--- trunk/quixote/form2/widget.py	2003-11-11 16:26:24 UTC (rev 23125)
+++ trunk/quixote/form2/widget.py	2003-11-11 16:29:04 UTC (rev 23126)
@@ -489,12 +489,15 @@
             self.value = None
 
 
-class SubmitWidget(Widget):
+class ButtonWidget(Widget):
     """
     Instance attributes:
+      label : string
       value : boolean
     """
 
+    HTML_TYPE = "button"
+
     def __init__(self, name, value=None):
         self.name = name
         self.error = None
@@ -514,14 +517,21 @@
 
     def render(self):
         value = (self.label and htmlescape(self.label) or None)
-        return htmltag("input", xml_end=True, type="submit",
+        return htmltag("input", xml_end=True, type=self.HTML_TYPE,
                        name=self.name, value=value)
 
     def _parse(self, request):
         self.value = request.form.has_key(self.name)
 
 
+class ResetWidget(ButtonWidget):
+    HTML_TYPE = "reset"
 
+
+class SubmitWidget(ButtonWidget):
+    HTML_TYPE = "submit"
+
+
 class HiddenWidget(Widget):
     """
     Instance attributes: