web/formfields.py
changeset 3503 06bced8edddf
parent 3451 6b46d73823f5
parent 3496 35a67ac6efe8
child 3524 a3431f4e2f40
equal deleted inserted replaced
3491:48b26bfd6f02 3503:06bced8edddf
   334 
   334 
   335 class FileField(StringField):
   335 class FileField(StringField):
   336     widget = FileInput
   336     widget = FileInput
   337     needs_multipart = True
   337     needs_multipart = True
   338 
   338 
   339     def __init__(self, format_field=None, encoding_field=None, **kwargs):
   339     def __init__(self, format_field=None, encoding_field=None, name_field=None,
       
   340                  **kwargs):
   340         super(FileField, self).__init__(**kwargs)
   341         super(FileField, self).__init__(**kwargs)
   341         self.format_field = format_field
   342         self.format_field = format_field
   342         self.encoding_field = encoding_field
   343         self.encoding_field = encoding_field
       
   344         self.name_field = name_field
   343 
   345 
   344     def actual_fields(self, form):
   346     def actual_fields(self, form):
   345         yield self
   347         yield self
   346         if self.format_field:
   348         if self.format_field:
   347             yield self.format_field
   349             yield self.format_field
   348         if self.encoding_field:
   350         if self.encoding_field:
   349             yield self.encoding_field
   351             yield self.encoding_field
       
   352         if self.name_field:
       
   353             yield self.name_field
   350 
   354 
   351     def render(self, form, renderer):
   355     def render(self, form, renderer):
   352         wdgs = [self.get_widget(form).render(form, self, renderer)]
   356         wdgs = [self.get_widget(form).render(form, self, renderer)]
   353         if self.format_field or self.encoding_field:
   357         if self.format_field or self.encoding_field:
   354             divid = '%s-advanced' % form.context[self]['name']
   358             divid = '%s-advanced' % form.context[self]['name']
   356                         (xml_escape(uilib.toggle_action(divid)),
   360                         (xml_escape(uilib.toggle_action(divid)),
   357                          form._cw._('show advanced fields'),
   361                          form._cw._('show advanced fields'),
   358                          xml_escape(form._cw.build_url('data/puce_down.png')),
   362                          xml_escape(form._cw.build_url('data/puce_down.png')),
   359                          form._cw._('show advanced fields')))
   363                          form._cw._('show advanced fields')))
   360             wdgs.append(u'<div id="%s" class="hidden">' % divid)
   364             wdgs.append(u'<div id="%s" class="hidden">' % divid)
       
   365             if self.name_field:
       
   366                 wdgs.append(self.render_subfield(form, self.name_field, renderer))
   361             if self.format_field:
   367             if self.format_field:
   362                 wdgs.append(self.render_subfield(form, self.format_field, renderer))
   368                 wdgs.append(self.render_subfield(form, self.format_field, renderer))
   363             if self.encoding_field:
   369             if self.encoding_field:
   364                 wdgs.append(self.render_subfield(form, self.encoding_field, renderer))
   370                 wdgs.append(self.render_subfield(form, self.encoding_field, renderer))
   365             wdgs.append(u'</div>')
   371             wdgs.append(u'</div>')
   624             for cstr in constraints:
   630             for cstr in constraints:
   625                 if isinstance(cstr, SizeConstraint) and cstr.max is not None:
   631                 if isinstance(cstr, SizeConstraint) and cstr.max is not None:
   626                     kwargs['max_length'] = cstr.max
   632                     kwargs['max_length'] = cstr.max
   627             return StringField(**kwargs)
   633             return StringField(**kwargs)
   628         if fieldclass is FileField:
   634         if fieldclass is FileField:
   629             for metadata in ('format', 'encoding'):
   635             for metadata in ('format', 'encoding', 'name'):
   630                 metaschema = eschema.has_metadata(rschema, metadata)
   636                 metaschema = eschema.has_metadata(rschema, metadata)
   631                 if metaschema is not None:
   637                 if metaschema is not None:
   632                     kwargs['%s_field' % metadata] = guess_field(eschema, metaschema,
   638                     kwargs['%s_field' % metadata] = guess_field(eschema, metaschema,
   633                                                                 skip_meta_attr=False)
   639                                                                 skip_meta_attr=False)
   634         return fieldclass(**kwargs)
   640         return fieldclass(**kwargs)