quixote/form widget.py,1.26,1.27

Neil Schemenauer <nascheme-fVcApmY9cLvQ3/1i3zOLAti2O/[email protected]>
Newsgroups gmane.comp.web.quixote.cvs
Message-ID <[email protected]>
Update of /home/cvs/quixote/form
In directory hewson:/tmp/cvs-serv20540

Modified Files:
	widget.py 
Log Message:
Modify form and widget classes to return htmltext instances.  This is a
backards incompatible change.


Index: widget.py
===================================================================
RCS file: /home/cvs/quixote/form/widget.py,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- widget.py	20 Sep 2002 22:45:39 -0000	1.26
+++ widget.py	14 Oct 2002 23:19:18 -0000	1.27
@@ -10,7 +10,7 @@
 
 from types import *
 from quixote import get_request
-from quixote.html import html_quote, render_tag, ValuelessAttr
+from quixote.html import htmltext, htmlescape, htmltag, ValuelessAttr
 
 
 class FormValueError (Exception):
@@ -133,12 +133,12 @@
 
 
     def render (self, request):
-        return render_tag("input", xml_end=1,
-                          type=self.html_type,
-                          name=self.name,
-                          size=self.size,
-                          maxlength=self.maxlength,
-                          value=self.value)
+        return htmltag("input", xml_end=1,
+                       type=self.html_type,
+                       name=self.name,
+                       size=self.size,
+                       maxlength=self.maxlength,
+                       value=self.value)
 
 
 class PasswordWidget (StringWidget):
@@ -173,11 +173,11 @@
         self.rows = rows
 
     def render (self, request):
-        return (render_tag("textarea", name=self.name,
-                           cols=self.cols,
-                           rows=self.rows) +
-                html_quote(self.value, "") +
-                "</textarea>")
+        return (htmltag("textarea", name=self.name,
+                        cols=self.cols,
+                        rows=self.rows) +
+                htmlescape(self.value or "") +
+                htmltext("</textarea>"))
 
 
     def parse (self, request):
@@ -200,11 +200,11 @@
     widget_type = "checkbox"
 
     def render (self, request):
-        return render_tag("input", xml_end=1,
-                          type="checkbox",
-                          name=self.name,
-                          value="yes",
-                          checked=self.value and ValuelessAttr or None)
+        return htmltag("input", xml_end=1,
+                       type="checkbox",
+                       name=self.name,
+                       value="yes",
+                       checked=self.value and ValuelessAttr or None)
 
 
     def parse (self, request):
@@ -260,7 +260,7 @@
             for v in self.allowed_values:
                 if v is None:
                     v = ""
-                else:   
+                else:
                     v = str(v)
                 self.descriptions.append(v)
         else:
@@ -272,8 +272,8 @@
                 "not %s and %s" % (len(self.allowed_values),
                                    len(descriptions)))
             self.descriptions = descriptions
-        if self.quote:
-            self.descriptions = map(html_quote, self.descriptions)
+        if not self.quote:
+            self.descriptions = map(htmltext, self.descriptions)
         if sort:
             def compare(a, b):
                 if a[0] is None:
@@ -303,21 +303,21 @@
             onchange = "submit()"
         else:
             onchange = None
-        tags = [render_tag("select", name=self.name,
-                           multiple=multiple, onchange=onchange,
-                           size=self.size)]
+        tags = [htmltag("select", name=self.name,
+                        multiple=multiple, onchange=onchange,
+                        size=self.size)]
         
         for i in range(len(self.allowed_values)):
             if self.is_selected(self.allowed_values[i]):
                 selected = ValuelessAttr
             else:
                 selected = None
-            r = render_tag("option",
-                           value=str(i),
-                           selected=selected)
-            tags.append(str(r) + self.descriptions[i] + '</option>')
-        tags.append("</select>")
-        return "\n".join(tags)
+            r = htmltag("option",
+                        value=str(i),
+                        selected=selected)
+            tags.append(r + self.descriptions[i] + htmltext('</option>'))
+        tags.append(htmltext("</select>"))
+        return htmltext("\n").join(tags)
 
 
 class SingleSelectWidget (SelectWidget):
@@ -389,13 +389,13 @@
                 checked = ValuelessAttr
             else:
                 checked = None
-            r = render_tag("input",
-                           type="radio",
-                           name=self.name,
-                           value=str(i),
-                           checked=checked)
-            tags.append(str(r) + self.descriptions[i] +  '</input>')
-        return self.delim.join(tags)
+            r = htmltag("input",
+                        type="radio",
+                        name=self.name,
+                        value=str(i),
+                        checked=checked)
+            tags.append(r + self.descriptions[i] +  htmltext('</input>'))
+        return htmlescape(self.delim).join(tags)
 
 
 class MultipleSelectWidget (SelectWidget):
@@ -460,9 +460,9 @@
         Widget.__init__(self, name, value)
 
     def render (self, request):
-        value = (self.value and html_quote(self.value) or None)
-        return render_tag("input", xml_end=1, type="submit",
-                          name=self.name, value=value)
+        value = (self.value and htmlescape(self.value) or None)
+        return htmltag("input", xml_end=1, type="submit",
+                       name=self.name, value=value)
             
     def parse (self, request):
         return request.form.get(self.name)
@@ -482,11 +482,11 @@
         if self.value is None:
             value = None
         else:
-            value = html_quote(self.value)
-        return render_tag("input", xml_end=1,
-                          type="hidden",
-                          name=self.name,
-                          value=value)
+            value = htmlescape(self.value)
+        return htmltag("input", xml_end=1,
+                       type="hidden",
+                       name=self.name,
+                       value=value)
 
     def set_current_value (self, value):
         self.value = value
@@ -601,9 +601,9 @@
 
     def render (self, request):
         return (SingleSelectWidget.render(self, request) +
-                '<noscript>'
-                '<input type="submit" name="" value="apply" />'
-                '</noscript>')
+                htmltext('<noscript>'
+                         '<input type="submit" name="" value="apply" />'
+                         '</noscript>'))
 
     def parse (self, request):
         return self.value
@@ -628,7 +628,7 @@
                   **args):
         assert value is None or type(value) is ListType, (
             "form value '%s' not a ListType: got %s" % (name, `value`))
-        assert type(element_name) is StringType, (
+        assert type(element_name) in (StringType, htmltext), (
             "form value '%s' element_name not a string: "
             "got %s" % (name, `element_name`))
         
@@ -673,10 +673,10 @@
     def render (self, request):
         tags = []
         for element_widget in self.element_widgets:
-            tags.append(str(element_widget.render(request)))
+            tags.append(element_widget.render(request))
         tags.append(self.add_button.render(request))
         tags.append(self.added_elements_widget.render(request))
-        return '<br />\n'.join(tags)
+        return htmltext('<br />\n').join(tags)
         
 
     def parse (self, request):
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.