|
45 | 45 |
|
46 | 46 | {% set form_group_classes = form_group_classes or config.BOOTSTRAP_FORM_GROUP_CLASSES %} |
47 | 47 |
|
| 48 | + {# support for label_class, radio_class and description_class which are popped, to prevent they are added to input, but restored at the end of this macro for the next rendering #} |
| 49 | + {%- set label_class = '' -%} |
| 50 | + {%- if field.render_kw.label_class -%} |
| 51 | + {% set label_class = field.render_kw.pop('label_class', '') -%} |
| 52 | + {% set label_classes = ' ' + label_class -%} |
| 53 | + {%- endif -%} |
| 54 | + {%- set radio_class = '' -%} |
| 55 | + {%- if field.render_kw.radio_class -%} |
| 56 | + {% set radio_class = field.render_kw.pop('radio_class', '') -%} |
| 57 | + {% set radio_classes = ' ' + radio_class -%} |
| 58 | + {%- endif -%} |
| 59 | + {%- set description_class = '' -%} |
| 60 | + {%- if field.render_kw.description_class -%} |
| 61 | + {% set description_class = field.render_kw.pop('description_class', '') -%} |
| 62 | + {% set description_classes = ' ' + description_class -%} |
| 63 | + {%- endif -%} |
| 64 | + |
48 | 65 | {# combine render_kw class or class/class_ argument with Bootstrap classes #} |
49 | 66 | {% set render_kw_class = ' ' + field.render_kw.class if field.render_kw.class else '' %} |
50 | 67 | {% set class = kwargs.pop('class', '') or kwargs.pop('class_', '') %} |
|
68 | 85 | {%- else -%} |
69 | 86 | {{ field(class="form-check-input%s" % extra_classes, **field_kwargs)|safe }} |
70 | 87 | {%- endif %} |
71 | | - {{ field.label(class="form-check-label", for=field.id)|safe }} |
| 88 | + {{ field.label(class="form-check-label%s" % label_classes, for=field.id)|safe }} |
72 | 89 | {%- if field.errors %} |
73 | 90 | {%- for error in field.errors %} |
74 | 91 | <div class="invalid-feedback d-block">{{ error }}</div> |
75 | 92 | {%- endfor %} |
76 | 93 | {%- elif field.description -%} |
77 | 94 | {% call _hz_form_wrap(horizontal_columns, form_type, required=required) %} |
78 | | - <small class="form-text text-body-secondary">{{ field.description|safe }}</small> |
| 95 | + <small class="form-text text-body-secondary{{ description_classes|safe }}">{{ field.description|safe }}</small> |
79 | 96 | {% endcall %} |
80 | 97 | {%- endif %} |
81 | 98 | </div> |
|
85 | 102 | this is just a hack for now, until I can think of something better #} |
86 | 103 | <div class="{{ form_group_classes }} {% if form_type == 'horizontal' %}row{% endif %}{% if required %} required{% endif %}"> |
87 | 104 | {%- if form_type == "inline" %} |
88 | | - {{ field.label(class="visually-hidden")|safe }} |
| 105 | + {{ field.label(class="visually-hidden%s" % label_classes)|safe }} |
89 | 106 | {% elif form_type == "horizontal" %} |
90 | 107 | {{ field.label(class="col-form-label" + ( |
91 | | - " col-%s-%s" % horizontal_columns[0:2]))|safe }} |
| 108 | + " col-%s-%s" % horizontal_columns[0:2]) + ( |
| 109 | + "%s" % label_classes))|safe }} |
92 | 110 | {%- else -%} |
93 | | - {{ field.label(class="form-label")|safe }} |
| 111 | + {{ field.label(class="form-label%s" % label_classes)|safe }} |
94 | 112 | {% endif %} |
95 | 113 | {% if form_type == 'horizontal' %} |
96 | 114 | <div class="col-{{ horizontal_columns[0] }}-{{ horizontal_columns[2] }}"> |
|
99 | 117 | {% for item in field -%} |
100 | 118 | <div class="form-check{% if form_type == "inline" %} form-check-inline{% endif %}"> |
101 | 119 | {{ item(class="form-check-input")|safe }} |
102 | | - {{ item.label(class="form-check-label", for=item.id)|safe }} |
| 120 | + {{ item.label(class="form-check-label%s" % radio_classes, for=item.id)|safe }} |
103 | 121 | </div> |
104 | 122 | {% endfor %} |
105 | 123 | {#% endcall %#} |
|
111 | 129 | <div class="invalid-feedback d-block">{{ error }}</div> |
112 | 130 | {%- endfor %} |
113 | 131 | {%- elif field.description -%} |
114 | | - <small class="form-text text-body-secondary">{{ field.description|safe }}</small> |
| 132 | + <small class="form-text text-body-secondary{{ description_classes|safe }}">{{ field.description|safe }}</small> |
115 | 133 | {%- endif %} |
116 | 134 | </div> |
117 | 135 | {%- elif field.type == 'SubmitField' -%} |
|
145 | 163 | <div class="{{ form_group_classes }}{%- if form_type == "horizontal" %} row{% endif -%} |
146 | 164 | {%- if field.flags.required %} required{% endif -%}"> |
147 | 165 | {%- if form_type == "inline" %} |
148 | | - {{ field.label(class="visually-hidden")|safe }} |
| 166 | + {{ field.label(class="visually-hidden%s" % label_classes)|safe }} |
149 | 167 | {%- if field.type in ['DecimalRangeField', 'IntegerRangeField'] %} |
150 | 168 | {% if field.errors %} |
151 | 169 | {{ field(class="form-range is-invalid%s" % extra_classes, **kwargs)|safe }} |
|
166 | 184 | {% endif %} |
167 | 185 | {%- endif %} |
168 | 186 | {% elif form_type == "horizontal" %} |
169 | | - {{ field.label(class="col-form-label" + (" col-%s-%s" % horizontal_columns[0:2]))|safe }} |
| 187 | + {{ field.label(class="col-form-label" + ( |
| 188 | + " col-%s-%s" % horizontal_columns[0:2]) + ( |
| 189 | + "%s" % label_classes))|safe }} |
170 | 190 | <div class="col-{{ horizontal_columns[0] }}-{{ horizontal_columns[2] }}"> |
171 | 191 | {%- if field.type in ['DecimalRangeField', 'IntegerRangeField'] %} |
172 | 192 | {% if field.errors %} |
|
196 | 216 | {%- endfor %} |
197 | 217 | {%- elif field.description -%} |
198 | 218 | {% call _hz_form_wrap(horizontal_columns, form_type, required=required) %} |
199 | | - <small class="form-text text-body-secondary">{{ field.description|safe }}</small> |
| 219 | + <small class="form-text text-body-secondary{{ description_classes|safe }}">{{ field.description|safe }}</small> |
200 | 220 | {% endcall %} |
201 | 221 | {%- endif %} |
202 | 222 | {%- else -%} |
203 | | - {{ field.label(class="form-label")|safe }} |
| 223 | + {{ field.label(class="form-label%s" % label_classes)|safe }} |
204 | 224 | {%- if field.type in ['DecimalRangeField', 'IntegerRangeField'] %} |
205 | 225 | {% if field.errors %} |
206 | 226 | {{ field(class="form-range is-invalid%s" % extra_classes, **kwargs)|safe }} |
|
225 | 245 | <div class="invalid-feedback d-block">{{ error }}</div> |
226 | 246 | {%- endfor %} |
227 | 247 | {%- elif field.description -%} |
228 | | - <small class="form-text text-body-secondary">{{ field.description|safe }}</small> |
| 248 | + <small class="form-text text-body-secondary{{ description_classes|safe }}">{{ field.description|safe }}</small> |
229 | 249 | {%- endif %} |
230 | 250 | {%- endif %} |
231 | 251 | </div> |
232 | 252 | {% endif %} |
| 253 | + |
| 254 | + {%- if label_class -%} |
| 255 | + {%- set _ = field.render_kw.update({'label_class': label_class}) -%} |
| 256 | + {%- endif -%} |
| 257 | + {%- if radio_class -%} |
| 258 | + {%- set _ = field.render_kw.update({'radio_class': radio_class}) -%} |
| 259 | + {%- endif -%} |
| 260 | + {%- if description_class -%} |
| 261 | + {%- set _ = field.render_kw.update({'description_class': description_class}) -%} |
| 262 | + {%- endif -%} |
233 | 263 | {% endmacro %} |
234 | 264 |
|
235 | 265 | {# valid form types are "basic", "inline" and "horizontal" #} |
|
0 commit comments