SVN: r21316 - trunk/quixote/form
Neil Schemenauer <nascheme-fVcApmY9cLvQ3/1i3zOLAti2O/[email protected]> Wed, 09 Apr 2003 15:09:32 -0400
| Newsgroups | gmane.comp.web.quixote.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: nascheme
Date: 2003-04-09 15:09:30 -0400 (Wed, 09 Apr 2003)
New Revision: 21316
Modified:
trunk/quixote/form/form.py
Log:
Use TemplateIO rather than _join(). It has some nice optimizations. Also,
fix an over-quoting bug in _render_error (remove str() call).
Modified: trunk/quixote/form/form.py
==============================================================================
--- trunk/quixote/form/form.py (original)
+++ trunk/quixote/form/form.py 2003-04-09 15:09:32.000000000 -0400
@@ -8,7 +8,7 @@
from types import StringType
from quixote import get_session, get_publisher
-from quixote.html import url_quote, htmltag, htmltext, nl2br, htmlescape
+from quixote.html import url_quote, htmltag, htmltext, nl2br, TemplateIO
from quixote.form.widget import FormValueError, HiddenWidget
@@ -26,14 +26,6 @@
</script>
''')
-def _join (seq):
- s = ""
- for item in seq:
- if item is None:
- continue
- s = s + htmlescape(item)
- return s
-
class Form:
"""
A form is the major element of an interactive web page. A form
@@ -153,40 +145,35 @@
#
# Render a form as HTML.
assert type(action_url) in (StringType, htmltext)
- parts = [
- self._render_start(request, action_url,
- enctype=self.enctype, method=self.method),
- self._render_body(request),
- self._render_finish(request),
- ]
-
- return _join(parts)
+ r = TemplateIO(html=1)
+ r += self._render_start(request, action_url,
+ enctype=self.enctype, method=self.method)
+ r += self._render_body(request)
+ r += self._render_finish(request)
+ return r.getvalue()
def _render_start (self, request, action,
- enctype=None, method='post', name=None):
- parts = [
- htmltag('form', enctype=enctype, method=method,
- action=action, name=name),
- self._render_hidden_widgets(request),
- ]
- return _join(parts)
+ enctype=None, method='post', name=None):
+ r = TemplateIO(html=1)
+ r += htmltag('form', enctype=enctype, method=method,
+ action=action, name=name)
+ r += self._render_hidden_widgets(request)
+ return r.getvalue()
def _render_finish (self, request):
- parts = [
- htmltext('</form>'),
- self._render_javascript(request),
- ]
- return _join(parts)
+ r = TemplateIO(html=1)
+ r += htmltext('</form>')
+ r += self._render_javascript(request)
+ return r.getvalue()
def _render_sep (self, text, line=1):
- return (
- htmltext('<tr><td colspan="3">%s<strong><big>%s</big></strong></td></tr>') %
- (line and htmltext('<hr>') or '', text))
+ return htmltext('<tr><td colspan="3">%s<strong><big>%s'
+ '</big></strong></td></tr>') % \
+ (line and htmltext('<hr>') or '', text)
def _render_error (self, error):
if error:
- return (htmltext('<font color="red">%s</font><br />')
- % str(nl2br(error)))
+ return htmltext('<font color="red">%s</font><br />') % nl2br(error)
else:
return ''
@@ -202,80 +189,69 @@
title = self.title[widget.name] or ''
if self.required.get(widget.name):
title = title + htmltext(' *')
- parts = [
- htmltext('<tr>'),
- htmltext('<th colspan="3" align="left">'),
- title,
- htmltext('</th>'),
- htmltext('</tr>'),
- htmltext('<tr>'),
- htmltext('<td> </td>'),
- htmltext('<td>'),
- widget.render(request),
- htmltext('</td>'),
- htmltext('<td>'),
- self._render_error(self.error.get(widget.name)),
- self._render_hint(self.hint.get(widget.name)),
- htmltext('</td>'),
- htmltext('</tr>'),
- ]
- print parts
- return _join(parts)
+ r = TemplateIO(html=1)
+ r += htmltext('<tr><th colspan="3" align="left">')
+ r += title
+ r += htmltext('</th></tr>'
+ '<tr><td> </td><td>')
+ r += widget.render(request)
+ r += htmltext('</td><td>')
+ r += self._render_error(self.error.get(widget.name))
+ r += self._render_hint(self.hint.get(widget.name))
+ r += htmltext('</td></tr>')
+ return r.getvalue()
def _render_hidden_widgets (self, request):
- parts = []
+ r = TemplateIO(html=1)
for widget in self.widget_order:
if widget.widget_type == 'hidden':
- parts += [
- widget.render(request),
- self._render_error(self.error.get(widget.name)),
- ]
- return _join(parts)
+ r += widget.render(request)
+ r += self._render_error(self.error.get(widget.name))
+ return r.getvalue()
def _render_submit_buttons (self, request, ncols=3):
- parts = [htmltext('<tr><td colspan="%d">\n') % ncols]
+ r = TemplateIO(html=1)
+ r += htmltext('<tr><td colspan="%d">\n') % ncols
for button in self.submit_buttons:
- parts.append(button.render(request))
- parts.append(htmltext('</td></tr>'))
- return _join(parts)
+ r += button.render(request)
+ r += htmltext('</td></tr>')
+ return r.getvalue()
def _render_visible_widgets (self, request):
- parts = []
+ r = TemplateIO(html=1)
for widget in self.widget_order:
- parts.append(self._render_widget_row(request, widget))
- return _join(parts)
+ r += self._render_widget_row(request, widget)
+ return r.getvalue()
def _render_error_notice (self, request):
- parts = []
if self.error:
- parts += [
- htmltext('<tr><td colspan="3">'),
- htmltext('<font color="red"><strong>Warning:</strong></font> '),
- htmltext('there were errors processing your form. See below for details.'),
- htmltext('</td></tr>'),
- ]
- return _join(parts)
+ r = htmltext('<tr><td colspan="3">'
+ '<font color="red"><strong>Warning:</strong></font> '
+ 'there were errors processing your form. '
+ 'See below for details.'
+ '</td></tr>')
+ else:
+ r = ''
+ return r
def _render_required_notice (self, request):
- parts = []
if filter(None, self.required.values()):
- parts += [
- htmltext('<tr><td colspan="3">'),
- htmltext('<b>*</b> = <em>required field</em>'),
- htmltext('</td></tr>'),
- ]
- return _join(parts)
+ r = htmltext('<tr><td colspan="3">'
+ '<b>*</b> = <em>required field</em>'
+ '</td></tr>')
+ else:
+ r = ''
+ return r
def _render_body (self, request):
- parts = [
- htmltext('<table>'),
- self._render_error_notice(request),
- self._render_required_notice(request),
- self._render_visible_widgets(request),
- self._render_submit_buttons(request),
- htmltext('</table>'),
- ]
- return _join(parts)
+ r = TemplateIO(html=1)
+ r += htmltext('<table>')
+ r += self._render_error_notice(request)
+ r += self._render_required_notice(request)
+ r += self._render_visible_widgets(request)
+ r += self._render_submit_buttons(request)
+ r += htmltext('</table>')
+ return r.getvalue()
def _render_javascript (self, request):
"""Render javacript code for the form, if any.