|
11 | 11 | from .registry import RendererRegistry |
12 | 12 |
|
13 | 13 |
|
| 14 | +@dataclasses.dataclass(frozen=True) |
| 15 | +class FormOptions: |
| 16 | + # Form method to use |
| 17 | + method: typing.Optional[str] = "POST" |
| 18 | + # Form action (target URL) |
| 19 | + action: typing.Optional[str] = None |
| 20 | + # Form encoding type |
| 21 | + enctype: typing.Optional[str] = None |
| 22 | + # class for form |
| 23 | + form_class: typing.Optional[str] = None |
| 24 | + # extra attributes for form |
| 25 | + form_attrs: typing.Dict[str, str] = dataclasses.field(default_factory=dict) |
| 26 | + # Enable form or not |
| 27 | + form_enabled: bool = True |
| 28 | + |
| 29 | + |
14 | 30 | @dataclasses.dataclass(frozen=True) |
15 | 31 | class FieldOptions: |
16 | 32 | # class for row div |
@@ -90,23 +106,29 @@ class RendererContext: |
90 | 106 | def __init__( |
91 | 107 | self, |
92 | 108 | registry: RendererRegistry = DEFAULT_REGISTRY, |
93 | | - default_field_option: FieldOptions = FieldOptions(), |
| 109 | + default_form_options: FormOptions = FormOptions(), |
| 110 | + default_field_options: FieldOptions = FieldOptions(), |
94 | 111 | ): |
95 | | - self.default_field_option = default_field_option |
| 112 | + self.form_options = default_form_options |
| 113 | + self.default_field_options = default_field_options |
96 | 114 | self.registry = registry |
97 | 115 | self.field_options: typing.Dict[str, FieldOptions] = {} |
98 | 116 |
|
| 117 | + def form(self, **kwargs) -> RendererContext: |
| 118 | + old_options = dataclasses.asdict(self.form_options) |
| 119 | + self.form_options = FormOptions(old_options | kwargs) |
| 120 | + |
99 | 121 | def field(self, *names: str, **kwargs: str) -> RendererContext: |
100 | 122 | for name in names: |
101 | 123 | old_options = dataclasses.asdict( |
102 | | - self.field_options.get(name, self.default_field_option) |
| 124 | + self.field_options.get(name, self.default_field_options) |
103 | 125 | ) |
104 | 126 | self.field_options[name] = FieldOptions(**(old_options | kwargs)) |
105 | 127 | return self |
106 | 128 |
|
107 | 129 | def default_field(self, **kwargs: str) -> RendererContext: |
108 | | - self.default_field_option = FieldOptions( |
109 | | - **(dataclasses.asdict(self.default_field_option) | kwargs) |
| 130 | + self.default_field_options = FieldOptions( |
| 131 | + **(dataclasses.asdict(self.default_field_options) | kwargs) |
110 | 132 | ) |
111 | 133 | return self |
112 | 134 |
|
|
0 commit comments