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) |