49 """render the widget for the given `field` of `form`. |
49 """render the widget for the given `field` of `form`. |
50 To override in concrete class |
50 To override in concrete class |
51 """ |
51 """ |
52 raise NotImplementedError |
52 raise NotImplementedError |
53 |
53 |
|
54 def typed_value(self, form, field): |
|
55 """return field's *typed* value specified in: |
|
56 3. extra form values given to render() |
|
57 4. field's typed value |
|
58 """ |
|
59 qname = field.input_name(form) |
|
60 for key in (field, qname): |
|
61 try: |
|
62 return form.formvalues[key] |
|
63 except KeyError: |
|
64 continue |
|
65 if field.name != qname and field.name in form.formvalues: |
|
66 return form.formvalues[field.name] |
|
67 return field.typed_value(form) |
|
68 |
|
69 def format_value(self, form, field, value): |
|
70 return field.format_value(form._cw, value) |
|
71 |
54 def values_and_attributes(self, form, field): |
72 def values_and_attributes(self, form, field): |
55 values = field.display_value(form) |
73 """found field's *string* value in: |
|
74 1. previously submitted form values if any (eg on validation error) |
|
75 2. req.form |
|
76 3. extra form values given to render() |
|
77 4. field's typed value |
|
78 |
|
79 values found in 1. and 2. are expected te be already some 'display' |
|
80 value while those found in 3. and 4. are expected to be correctly typed. |
|
81 |
|
82 3 and 4 are handle by the .typed_value(form, field) method |
|
83 """ |
|
84 qname = field.input_name(form) |
|
85 if qname in form.form_previous_values: |
|
86 values = form.form_previous_values[qname] |
|
87 elif qname in form._cw.form: |
|
88 values = form._cw.form[qname] |
|
89 elif field.name != qname and field.name in form._cw.form: |
|
90 # compat: accept attr=value in req.form to specify value of attr-subject |
|
91 values = form._cw.form[field.name] |
|
92 else: |
|
93 values = self.typed_value(form, field) |
|
94 if values != INTERNAL_FIELD_VALUE: |
|
95 values = self.format_value(form, field, values) |
56 if not isinstance(values, (tuple, list)): |
96 if not isinstance(values, (tuple, list)): |
57 values = (values,) |
97 values = (values,) |
58 attrs = dict(self.attrs) |
98 attrs = dict(self.attrs) |
59 if self.setdomid: |
99 if self.setdomid: |
60 attrs['id'] = field.dom_id(form) |
100 attrs['id'] = field.dom_id(form) |
549 '<img src="%(imgsrc)s" alt="%(label)s"/>%(label)s</a>' % { |
589 '<img src="%(imgsrc)s" alt="%(label)s"/>%(label)s</a>' % { |
550 'label': label, 'imgsrc': imgsrc, |
590 'label': label, 'imgsrc': imgsrc, |
551 'domid': self.domid, 'href': self.href} |
591 'domid': self.domid, 'href': self.href} |
552 |
592 |
553 |
593 |
|
594 # more widgets ################################################################# |
554 |
595 |
555 # XXX EntityLinkComboBoxWidget, [Raw]DynamicComboBoxWidget |
596 # XXX EntityLinkComboBoxWidget, [Raw]DynamicComboBoxWidget |