From d09788aa05f3905e07b592b5aa0f8f7c6ff92de2 Mon Sep 17 00:00:00 2001 From: Gintautas Miliauskas Date: Mon, 24 Jan 2005 15:21:12 +0000 Subject: [PATCH] Merged bugfix for IntWidget (it would not render 0) from trunk (28918:28920). --- browser/tests/test_intwidget.py | 2 +- browser/tests/test_textwidget.py | 2 +- browser/textwidgets.py | 54 ++++++++++++++++++-------------- browser/widget.py | 4 +-- 4 files changed, 35 insertions(+), 27 deletions(-) diff --git a/browser/tests/test_intwidget.py b/browser/tests/test_intwidget.py index 8ec5baa..1d18f2a 100644 --- a/browser/tests/test_intwidget.py +++ b/browser/tests/test_intwidget.py @@ -28,7 +28,7 @@ class IntWidgetTest(SimpleInputWidgetTest): """Documents and tests the int widget. - + >>> verifyClass(IInputWidget, IntWidget) True """ diff --git a/browser/tests/test_textwidget.py b/browser/tests/test_textwidget.py index 1f3fb29..8a2743e 100644 --- a/browser/tests/test_textwidget.py +++ b/browser/tests/test_textwidget.py @@ -120,7 +120,7 @@ def test_w_nonrequired_and_missing_value_and_no_inout(): """ There was a bug that caused the value attribute to be set to 'value' under these circumstances. - + >>> from zope.publisher.browser import TestRequest >>> from zope.schema import TextLine >>> field = TextLine(__name__='foo', title=u'on', diff --git a/browser/textwidgets.py b/browser/textwidgets.py index 156c480..36ba87c 100644 --- a/browser/textwidgets.py +++ b/browser/textwidgets.py @@ -120,28 +120,22 @@ def __init__(self, *args): super(TextWidget, self).__init__(*args) def __call__(self): - displayMaxWidth = self.displayMaxWidth or 0 - if displayMaxWidth > 0: - return renderElement(self.tag, - type=self.type, - name=self.name, - id=self.name, - value=self._getFormValue() or '', - cssClass=self.cssClass, - style=self.style, - size=self.displayWidth, - maxlength=displayMaxWidth, - extra=self.extra) - else: - return renderElement(self.tag, - type=self.type, - name=self.name, - id=self.name, - value=self._getFormValue() or '', - cssClass=self.cssClass, - style=self.style, - size=self.displayWidth, - extra=self.extra) + value = self._getFormValue() + if value is None or value == self.context.missing_value: + value = '' + + kwargs = {'type': self.type, + 'name': self.name, + 'id': self.name, + 'value': value, + 'cssClass': self.cssClass, + 'style': self.style, + 'size': self.displayWidth, + 'extra': self.extra} + if self.displayMaxWidth: + kwargs['maxlength'] = self.displayMaxWidth # XXX This is untested. + + return renderElement(self.tag, **kwargs) def _toFieldValue(self, input): if self.convert_missing_value and input == self._missing: @@ -150,7 +144,7 @@ def _toFieldValue(self, input): # We convert everything to unicode. This might seem a bit crude, # but anything contained in a TextWidget should be representable # as a string. Note that you always have the choice of overriding - # the method. + # the method. try: value = unicode(input) except ValueError, v: @@ -389,6 +383,20 @@ def _toFieldValue(self, input): return self.context.missing_value class IntWidget(TextWidget): + """Integer number widget. + + Let's make sure that zeroes are rendered properly: + + >>> from zope.schema import Int + >>> field = Int(__name__='foo', title=u'on') + >>> widget = IntWidget(field, None) + >>> widget.setRenderedValue(0) + + >>> 'value="0"' in widget() + True + + """ + displayWidth = 10 def _toFieldValue(self, input): diff --git a/browser/widget.py b/browser/widget.py index 83c0a16..7283f75 100644 --- a/browser/widget.py +++ b/browser/widget.py @@ -296,7 +296,7 @@ def getInputValue(self): except ConversionError, error: # ConversionError is already a WidgetInputError self._error = error - raise self._error + raise self._error # allow missing values only for non-required fields if value == field.missing_value and not field.required: @@ -448,7 +448,7 @@ def renderTag(tag, **kw): items = kw.items() items.sort() for key, value in items: - if value == None: + if value is None: value = key attr_list.append(u'%s=%s' % (key, quoteattr(unicode(value))))