Class
zope.app.form.browser.textwidgets.TextAreaWidget

TextArea widget.

Multi-line text (unicode) input.

>>> from zope.publisher.browser import TestRequest
>>> from zope.schema import Text
>>> field = Text(__name__='foo', title=u'on')
>>> request = TestRequest(form={'field.foo': u'Hello\r\nworld!'})
>>> widget = TextAreaWidget(field, request)
>>> widget.hasInput()
True
>>> widget.getInputValue()
u'Hello\nworld!'
>>> def normalize(s):
...   return '\n  '.join(filter(None, s.split(' ')))
>>> print normalize( widget() )
<textarea
  cols="60"
  id="field.foo"
  name="field.foo"
  rows="15"
  >Hello
world!</textarea>
>>> print normalize( widget.hidden() )
<input
  class="hiddenType"
  id="field.foo"
  name="field.foo"
  type="hidden"
  value="Hello&#13;&#10;world!"
  />

Calling setRenderedValue will change what gets output:

>>> widget.setRenderedValue("Hey\ndude!")
>>> print normalize( widget() )
<textarea
  cols="60"
  id="field.foo"
  name="field.foo"
  rows="15"
  >Hey
dude!</textarea>

Check that HTML is correctly encoded and decoded:

>>> request = TestRequest(
...     form={'field.foo': u'<h1>&copy;</h1>'})
>>> widget = TextAreaWidget(field, request)
>>> widget.getInputValue()
u'<h1>&copy;</h1>'
>>> print normalize( widget() )
<textarea
  cols="60"
  id="field.foo"
  name="field.foo"
  rows="15"
  >&lt;h1&gt;&amp;copy;&lt;/h1&gt;</textarea>

There was a but which caused the content of <textarea> tags not to be rendered correctly when there was a conversion error. Make sure the quoting works correctly:

>>> from zope.schema import Text
>>> field = Text(__name__='description', title=u'Description')
>>> from zope.app.form.interfaces import ConversionError
>>> class TestTextAreaWidget(TextAreaWidget):
...     def _toFieldValue(self, input):
...         if 'foo' in input:
...             raise ConversionError("I don't like foo.")
...         return input
...
>>> request = TestRequest(form={'field.description': u'<p>bar</p>'})
>>> widget = TestTextAreaWidget(field, request)
>>> widget.getInputValue()
u'<p>bar</p>'
>>> print normalize( widget() )
<textarea
  cols="60"
  id="field.description"
  name="field.description"
  rows="15"
  >&lt;p&gt;bar&lt;/p&gt;</textarea>
>>> request = TestRequest(form={'field.description': u'<p>foo</p>'})
>>> widget = TestTextAreaWidget(field, request)
>>> try:
...     widget.getInputValue()
... except ConversionError, error:
...     print error.doc()
I don't like foo.
>>> print normalize( widget() )
<textarea
  cols="60"
  id="field.description"
  name="field.description"
  rows="15"
  >&lt;p&gt;foo&lt;/p&gt;</textarea>

Base classes

Implemented Interfaces

Attributes/Properties

Methods

Known Subclasses