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[:]: |