web/form.py
branchtls-sprint
changeset 864 e0947007542a
parent 863 4fde01fc39ca
child 865 90a1aea85637
equal deleted inserted replaced
863:4fde01fc39ca 864:e0947007542a
   277 class PasswordInput(Input):
   277 class PasswordInput(Input):
   278     type = 'password'
   278     type = 'password'
   279 
   279 
   280 class FileInput(Input):
   280 class FileInput(Input):
   281     type = 'file'
   281     type = 'file'
       
   282     
       
   283     def _render_attrs(self, form, field):
       
   284         name = form.context[field]['name'] # qualified name
       
   285         return name, None, {}
   282 
   286 
   283 class HiddenInput(Input):
   287 class HiddenInput(Input):
   284     type = 'hidden'
   288     type = 'hidden'
   285 
   289 
   286 class Button(Input):
   290 class Button(Input):
   291         name, value, attrs = self._render_attrs(form, field)
   295         name, value, attrs = self._render_attrs(form, field)
   292         if attrs is None:
   296         if attrs is None:
   293             return tags.textarea(value, name=name)
   297             return tags.textarea(value, name=name)
   294         return tags.textarea(value, name=name, **attrs)
   298         return tags.textarea(value, name=name, **attrs)
   295 
   299 
   296 class Select: 
   300 class Select(FieldWidget):
       
   301     def __init__(self, vocabulary=()):
       
   302         self.vocabulary = ()
       
   303         
   297     def render(self, form, field):
   304     def render(self, form, field):
   298         name, value, attrs = self._render_attrs(form, field)
   305         name, value, attrs = self._render_attrs(form, field)
   299         if self.vocabulary:
   306         if self.vocabulary:
   300             # static vocabulary defined in form definition
   307             # static vocabulary defined in form definition
   301             vocab = self.vocabulary
   308             vocab = self.vocabulary
   306             options.append(tags.option(label, value=value))
   313             options.append(tags.option(label, value=value))
   307         if attrs is None:
   314         if attrs is None:
   308             return tags.select(name=name, options=options)
   315             return tags.select(name=name, options=options)
   309         return tags.select(name=name, options=options, **attrs)
   316         return tags.select(name=name, options=options, **attrs)
   310 
   317 
   311 class CheckBox: pass
   318 
   312 
   319 class CheckBox(FieldWidget):
   313 class Radio: pass
       
   314 
   320 
   315 class DateTimePicker: pass
   321 class DateTimePicker: pass
   316 
   322 
   317 
   323 
   318 # fields ############
   324 # fields ############
   374     def __init__(self, min=None, max=None, **kwargs):
   380     def __init__(self, min=None, max=None, **kwargs):
   375         super(IntField, self).__init__(**kwargs)
   381         super(IntField, self).__init__(**kwargs)
   376         self.min = min
   382         self.min = min
   377         self.max = max
   383         self.max = max
   378 
   384 
   379 class FloatField(IntField):
   385 class FloatField(IntField):    
   380     
       
   381     def format_value(self, req, value):
   386     def format_value(self, req, value):
   382         if value is not None:
   387         formatstr = entity.req.property_value('ui.float-format')
   383             return ustrftime(value, req.property_value('ui.float-format'))
   388         if value is None:
   384         return u''
   389             return u''
   385 
   390         return formatstr % float(value)
   386 class DateField(IntField):
   391 
       
   392 class DateField(StringField):
       
   393     propname = 'ui.date-format'
   387     
   394     
   388     def format_value(self, req, value):
   395     def format_value(self, req, value):
   389         return value and ustrftime(value, req.property_value('ui.date-format')) or u''
   396         return value and ustrftime(value, req.property_value(self.propname)) or u''
       
   397 
       
   398 class DateTimeField(DateField):
       
   399     propname = 'ui.datetime-format'
       
   400 
       
   401     
       
   402 class FileField(StringField):
       
   403     needs_multipart = True
   390 
   404 
   391 class HiddenInitialValueField(Field):
   405 class HiddenInitialValueField(Field):
   392     def __init__(self, visible_field, name):
   406     def __init__(self, visible_field, name):
   393         super(HiddenInitialValueField, self).__init__(name=name,
   407         super(HiddenInitialValueField, self).__init__(name=name,
   394                                                       widget=HiddenInput)
   408                                                       widget=HiddenInput)
   504 class EntityFieldsForm(FieldsForm):
   518 class EntityFieldsForm(FieldsForm):
   505     def __init__(self, *args, **kwargs):
   519     def __init__(self, *args, **kwargs):
   506         kwargs.setdefault('id', 'entityForm')
   520         kwargs.setdefault('id', 'entityForm')
   507         super(EntityFieldsForm, self).__init__(*args, **kwargs)
   521         super(EntityFieldsForm, self).__init__(*args, **kwargs)
   508         self.fields.append(TextField(name='__type', widget=HiddenInput))
   522         self.fields.append(TextField(name='__type', widget=HiddenInput))
   509         self.fields.append(TextField(name='eid', widget=HiddenInput))
   523         self.fields.append(TextField(name='eid', widget=HiddenInput,
       
   524                                      eidparam=False))
   510         
   525         
   511     def form_render(self, entity, **values):
   526     def form_render(self, entity, **values):
   512         self.entity = entity
   527         self.entity = entity
   513         eschema = self.entity.e_schema
   528         eschema = self.entity.e_schema
   514         for field in self.fields[:]:
   529         for field in self.fields[:]: