|
1 |
| -{% use 'tailwind_2_layout.html.twig' %} |
| 1 | +{% use 'form_div_layout.html.twig' %} |
2 | 2 |
|
3 | 3 | {%- block form_row -%}
|
4 | 4 | {%- set row_attr = row_attr|merge({ class: row_attr.class|default(row_class|default('flex flex-col mb-6')) }) -%}
|
5 | 5 | {{- parent() -}}
|
6 | 6 | {%- endblock form_row -%}
|
7 | 7 |
|
8 |
| -{%- block form_errors -%} |
9 |
| - {%- set attr = attr|merge({class: (attr.class|default('text-error'))|trim}) -%} |
| 8 | +{%- block widget_attributes -%} |
| 9 | + {%- set attr = attr|merge({ class: attr.class|default(widget_class|default('mt-1 w-full')) ~ (errors|length ? ' ' ~ widget_errors_class|default('input-error')) }) -%} |
10 | 10 | {{- parent() -}}
|
| 11 | +{%- endblock widget_attributes -%} |
| 12 | + |
| 13 | +{%- block form_errors -%} |
| 14 | + {%- if errors|length > 0 -%} |
| 15 | + <ul> |
| 16 | + {%- for error in errors -%} |
| 17 | + <li class="{{ error_item_class|default('text-error') }}">{{ error.message }}</li> |
| 18 | + {%- endfor -%} |
| 19 | + </ul> |
| 20 | + {%- endif -%} |
11 | 21 | {%- endblock form_errors -%}
|
12 | 22 |
|
13 | 23 | {%- block form_help -%}
|
14 |
| - {%- set attr = attr|merge({class: (attr.class|default('text-sm text-neutral'))|trim}) -%} |
| 24 | + {%- set help_attr = help_attr|merge({class: (help_attr.class|default('mt-1 label'))|trim}) -%} |
15 | 25 | {{- parent() -}}
|
16 | 26 | {%- endblock form_help -%}
|
17 | 27 |
|
|
46 | 56 | {%- set row_attr = row_attr|merge({ class: row_attr.class|default(row_class|default('mb-6')) }) -%}
|
47 | 57 | {%- set widget_attr = {} -%}
|
48 | 58 | {%- if help is not empty -%}
|
49 |
| - {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"}} -%} |
| 59 | + {%- set widget_attr = {attr: {'aria-describedby': id ~"_help"} } -%} |
50 | 60 | {%- endif -%}
|
51 | 61 | <div{% with {attr: row_attr} %}{{ block('attributes') }}{% endwith %}>
|
52 | 62 | {{- form_errors(form) -}}
|
|
59 | 69 | {%- endblock checkbox_row -%}
|
60 | 70 |
|
61 | 71 | {%- block checkbox_widget -%}
|
62 |
| - {%- set widget_class = widget_class|default('checkbox') -%} |
| 72 | + {%- set widget_class = (widget_class|default('checkbox') ~ (errors|length ? ' checkbox-error')) -%} |
63 | 73 | {{- parent() -}}
|
64 | 74 | {%- endblock checkbox_widget -%}
|
65 | 75 |
|
66 | 76 | {% block radio_widget -%}
|
67 |
| -{%- set widget_class = widget_class|default('radio') -%} |
| 77 | +{%- set widget_class = (widget_class|default('radio') ~ (errors|length ? ' radio-error')) -%} |
68 | 78 | {{- parent() -}}
|
69 | 79 | {%- endblock radio_widget %}
|
70 | 80 |
|
|
84 | 94 | {{- block('form_widget_simple') -}}
|
85 | 95 | {%- endblock range_widget %}
|
86 | 96 |
|
| 97 | +{%- block file_widget -%} |
| 98 | + {% set type = type|default('file') %} |
| 99 | + {%- set widget_class = (widget_class|default('file-input mt-2') ~ (errors|length ? ' file-input-error')) -%} |
| 100 | + {{- block('form_widget_simple') -}} |
| 101 | +{%- endblock file_widget %} |
| 102 | + |
87 | 103 | {% block form_widget_simple -%}
|
88 |
| - {%- if type is not defined or type not in ['hidden', 'range'] %} |
| 104 | + {%- if type is not defined or type not in ['hidden', 'range', 'file'] %} |
89 | 105 | {%- set widget_class = ' input mt-2' %}
|
90 | 106 | {%- set attr = attr|merge({class: (attr.class|default('') ~ widget_class)|trim}) -%}
|
91 | 107 | {% endif -%}
|
|
0 commit comments