def initializeFieldForm(field_class): """Initialize the properties (fields and values) on a particular field class. Also add the tales and override methods. """ from Form import BasicForm from DummyField import fields form = BasicForm() override_form = BasicForm() tales_form = BasicForm() for field in getPropertyFields(field_class.widget): group = field.get_value("group") or "widget" form.add_field(field, group) tales_field = fields.TALESField(field.id, title=field.get_value('title'), description="", default="", display_width=40, required=0) tales_form.add_field(tales_field, group) method_field = fields.MethodField(field.id, title=field.get_value("title"), description="", default="", required=0) override_form.add_field(method_field, group) for field in getPropertyFields(field_class.validator): group = field.get_value("group") or "validator" form.add_field(field, group) tales_field = fields.TALESField(field.id, title=field.get_value('title'), description="", default="", display_with=40, required=0) tales_form.add_field(tales_field, group) method_field = fields.MethodField(field.id, title=field.get_value("title"), description="", default="", required=0) override_form.add_field(method_field, group) field_class.form = form field_class.override_form = override_form field_class.tales_form = tales_form
class TALESWidget(Widget.TextWidget): default = fields.MethodField('default', title='Default', default="", required=0) def render(self, field, key, value, REQUEST, render_prefix=None): if value == None: text = field.get_value('default') else: if value != "": text = value._text else: text = "" return Widget.TextWidget.render(self, field, key, text, REQUEST) def render_view(self, field, value, REQUEST=None, render_prefix=None): """ Render TALES as read only """ if value == None: text = field.get_value('default', REQUEST=REQUEST) else: if value != "": text = value._text else: text = "" return text
class MethodWidget(Widget.TextWidget): default = fields.MethodField('default', title='Default', default="", required=0) def render(self, field, key, value, REQUEST, render_prefix=None): if value == None: method_name = field.get_value('default') else: if value != "": method_name = value.method_name else: method_name = "" return Widget.TextWidget.render(self, field, key, method_name, REQUEST)
class Validator(ValidatorBase): """Validates input and possibly transforms it to output. """ property_names = ValidatorBase.property_names + ['external_validator'] external_validator = fields.MethodField('external_validator', title="External Validator", description=( "When a method name is supplied, this method will be " "called each time this field is being validated. All other " "validation code is called first, however. The value (result of " "previous validation) and the REQUEST object will be passed as " "arguments to this method. Your method should return true if the " "validation succeeded. Anything else will cause " "'external_validator_failed' to be raised."), default="", required=0) message_names = ValidatorBase.message_names + ['external_validator_failed'] external_validator_failed = "The input failed the external validator."