[Checkins] SVN: zope.mimetype/trunk/src/zope/mimetype/ Catch up
with Zope 3 bugfixes: after the fix of issue 592
renderItemsWithValues
Marius Gedminas
cvs-admin at zope.org
Mon Jun 19 13:46:07 EDT 2006
Log message for revision 68758:
Catch up with Zope 3 bugfixes: after the fix of issue 592 renderItemsWithValues
is responsible for rendering the missing value choice.
Changed:
U zope.mimetype/trunk/src/zope/mimetype/tests.py
U zope.mimetype/trunk/src/zope/mimetype/widget.py
A zope.mimetype/trunk/src/zope/mimetype/widget.txt
-=-
Modified: zope.mimetype/trunk/src/zope/mimetype/tests.py
===================================================================
--- zope.mimetype/trunk/src/zope/mimetype/tests.py 2006-06-19 17:09:48 UTC (rev 68757)
+++ zope.mimetype/trunk/src/zope/mimetype/tests.py 2006-06-19 17:46:03 UTC (rev 68758)
@@ -62,6 +62,9 @@
tearDown=placelesssetup.tearDown),
doctest.DocFileSuite('typegetter.txt'),
doctest.DocFileSuite('utils.txt'),
+ doctest.DocFileSuite('widget.txt',
+ setUp=placelesssetup.setUp,
+ tearDown=placelesssetup.tearDown),
doctest.DocFileSuite(
'codec.txt',
optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
Modified: zope.mimetype/trunk/src/zope/mimetype/widget.py
===================================================================
--- zope.mimetype/trunk/src/zope/mimetype/widget.py 2006-06-19 17:09:48 UTC (rev 68757)
+++ zope.mimetype/trunk/src/zope/mimetype/widget.py 2006-06-19 17:46:03 UTC (rev 68758)
@@ -47,22 +47,39 @@
# vocabulary, so that need not be considered here
rendered_items = []
count = 0
+
+ # Handle case of missing value
+ missing = self._toFormValue(self.context.missing_value)
+
+ if self._displayItemForMissingValue and not self.context.required:
+ if missing in values:
+ render = self.renderSelectedItem
+ else:
+ render = self.renderItem
+
+ missing_item = render(count,
+ self.translate(self._messageNoValue),
+ missing,
+ self.name,
+ cssClass)
+ rendered_items.append(missing_item)
+ count += 1
+
+ # Render normal values
for value in self.order:
item_text, token = self.displays[value]
if value in values:
- rendered_item = self.renderSelectedItem(count,
- item_text,
- token,
- self.name,
- cssClass)
+ render = self.renderSelectedItem
else:
- rendered_item = self.renderItem(count,
- item_text,
- token,
- self.name,
- cssClass)
+ render = self.renderItem
+ rendered_item = render(count,
+ item_text,
+ token,
+ self.name,
+ cssClass)
+
rendered_items.append(rendered_item)
count += 1
Added: zope.mimetype/trunk/src/zope/mimetype/widget.txt
===================================================================
--- zope.mimetype/trunk/src/zope/mimetype/widget.txt 2006-06-19 17:09:48 UTC (rev 68757)
+++ zope.mimetype/trunk/src/zope/mimetype/widget.txt 2006-06-19 17:46:03 UTC (rev 68758)
@@ -0,0 +1,94 @@
+==============================
+TranslatableSourceSelectWidget
+==============================
+
+TranslatableSourceSelectWidget is a SourceSelectWidget that translates
+and sorts the choices.
+
+We will borrow the boring set up code from the SourceSelectWidget test
+(source.txt in zope.app.form.browser).
+
+ >>> import zope.interface
+ >>> import zope.component
+ >>> import zope.schema
+ >>> import zope.schema.interfaces
+
+ >>> class SourceList(list):
+ ... zope.interface.implements(zope.schema.interfaces.IIterableSource)
+
+ >>> import zope.publisher.interfaces.browser
+ >>> import zope.app.form.browser.interfaces
+ >>> from zope.schema.vocabulary import SimpleTerm
+ >>> class ListTerms:
+ ...
+ ... zope.interface.implements(
+ ... zope.app.form.browser.interfaces.ITerms)
+ ...
+ ... def __init__(self, source, request):
+ ... pass # We don't actually need the source or the request :)
+ ...
+ ... def getTerm(self, value):
+ ... title = unicode(value)
+ ... try:
+ ... token = title.encode('base64').strip()
+ ... except binascii.Error:
+ ... raise LookupError(token)
+ ... return SimpleTerm(value, token=token, title=title)
+ ...
+ ... def getValue(self, token):
+ ... return token.decode('base64')
+
+ >>> zope.component.provideAdapter(
+ ... ListTerms,
+ ... (SourceList, zope.publisher.interfaces.browser.IBrowserRequest))
+
+ >>> dog = zope.schema.Choice(
+ ... __name__ = 'dog',
+ ... title=u"Dogs",
+ ... source=SourceList(['spot', 'bowser', 'prince', 'duchess', 'lassie']),
+ ... )
+ >>> dog = dog.bind(object())
+
+Now that we have a field and a working source, we can construct and render
+a widget.
+
+ >>> from zope.mimetype.widget import TranslatableSourceSelectWidget
+ >>> from zope.publisher.browser import TestRequest
+ >>> request = TestRequest()
+ >>> widget = TranslatableSourceSelectWidget(
+ ... dog, dog.source, request)
+
+ >>> print widget()
+ <div>
+ <div class="value">
+ <select id="field.dog" name="field.dog" size="5" >
+ <option value="Ym93c2Vy">bowser</option>
+ <option value="ZHVjaGVzcw==">duchess</option>
+ <option value="bGFzc2ll">lassie</option>
+ <option value="cHJpbmNl">prince</option>
+ <option value="c3BvdA==">spot</option>
+ </select>
+ </div>
+ <input name="field.dog-empty-marker" type="hidden" value="1" />
+ </div>
+
+Note that the options are ordered alphabetically.
+
+If the field is not required, we will also see a special choice labeled
+"(no value)" at the top of the list
+
+ >>> dog.required = False
+ >>> print widget()
+ <div>
+ <div class="value">
+ <select id="field.dog" name="field.dog" size="5" >
+ <option selected="selected" value="">(no value)</option>
+ <option value="Ym93c2Vy">bowser</option>
+ <option value="ZHVjaGVzcw==">duchess</option>
+ <option value="bGFzc2ll">lassie</option>
+ <option value="cHJpbmNl">prince</option>
+ <option value="c3BvdA==">spot</option>
+ </select>
+ </div>
+ <input name="field.dog-empty-marker" type="hidden" value="1" />
+ </div>
Property changes on: zope.mimetype/trunk/src/zope/mimetype/widget.txt
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the Checkins
mailing list