@@ -924,8 +924,11 @@ def history(self, direction='descending', dre=re.compile('^\d+$')):
924924 current [k ] = old
925925
926926 elif isinstance (prop , hyperdb .Date ) and args [k ]:
927- d = date .Date (args [k ],
928- translator = self ._client ).local (timezone )
927+ if args [k ] is None :
928+ d = ''
929+ else :
930+ d = date .Date (args [k ],
931+ translator = self ._client ).local (timezone )
929932 cell .append ('%s: %s' % (self ._ (k ), str (d )))
930933 if current .has_key (k ):
931934 cell [- 1 ] += ' -> %s' % current [k ]
@@ -1320,8 +1323,13 @@ def field(self):
13201323 if not self .is_edit_ok ():
13211324 return self .plain ()
13221325
1323- checked = self ._value and "checked" or ""
1324- if self ._value :
1326+ value = self ._value
1327+ if isinstance (value , str ) or isinstance (value , unicode ):
1328+ value = value .strip ().lower () in ('checked' , 'yes' , 'true' ,
1329+ 'on' , '1' )
1330+
1331+ checked = value and "checked" or ""
1332+ if value :
13251333 s = self .input (type = "radio" , name = self ._formname , value = "yes" ,
13261334 checked = "checked" )
13271335 s += 'Yes'
@@ -1343,7 +1351,8 @@ def __init__(self, client, classname, nodeid, prop, name, value,
13431351 anonymous = 0 , offset = None ):
13441352 HTMLProperty .__init__ (self , client , classname , nodeid , prop , name ,
13451353 value , anonymous = anonymous )
1346- if self ._value :
1354+ if self ._value and not (isinstance (self ._value , str ) or
1355+ isinstance (self ._value , unicode )):
13471356 self ._value .setTranslator (self ._client .translator )
13481357 self ._offset = offset
13491358
@@ -1399,7 +1408,9 @@ def field(self, size=30, default=None, format=_marker):
13991408 else :
14001409 return self .pretty (format )
14011410
1402- if self ._value is None :
1411+ value = self ._value
1412+
1413+ if value is None :
14031414 if default is None :
14041415 raw_value = None
14051416 else :
@@ -1413,12 +1424,16 @@ def field(self, size=30, default=None, format=_marker):
14131424 raise ValueError , _ ('default value for '
14141425 'DateHTMLProperty must be either DateHTMLProperty '
14151426 'or string date representation.' )
1427+ elif isinstance (value , str ) or isinstance (value , unicode ):
1428+ # most likely erroneous input to be passed back to user
1429+ value = cgi .escape (str (value ), 1 )
1430+ return self .input (name = self ._formname , value = value , size = size )
14161431 else :
1417- raw_value = self . _value
1432+ raw_value = value
14181433
14191434 if raw_value is None :
14201435 value = ''
1421- elif type (raw_value ) is type ( '' ):
1436+ elif isinstance (raw_value , str ) or isinstance ( raw_value , unicode ):
14221437 if format is self ._marker :
14231438 value = raw_value
14241439 else :
@@ -1621,8 +1636,8 @@ def menu(self, size=None, height=None, showid=0, additional=[],
16211636 options = linkcl .filter (None , conditions , sort_on , (None , None ))
16221637
16231638 # make sure we list the current value if it's retired
1624- if self . _value and self . _value not in options :
1625- options .insert (0 , self . _value )
1639+ if value and value not in options :
1640+ options .insert (0 , value )
16261641
16271642 for optionid in options :
16281643 # get the option value, and if it's None use an empty string
@@ -1636,6 +1651,8 @@ def menu(self, size=None, height=None, showid=0, additional=[],
16361651 # figure the label
16371652 if showid :
16381653 lab = '%s%s: %s' % (self ._prop .classname , optionid , option )
1654+ elif not option :
1655+ lab = '%s%s' % (self ._prop .classname , optionid )
16391656 else :
16401657 lab = option
16411658
0 commit comments