{% use 'form_div_layout.html.twig' %} {# Widgets #} {%- block widget_attributes -%} {%- if not valid %} {% set attr = attr|merge({'class': (attr.class|default('') ~ ' is-invalid')|trim}) %} {% endif -%} {{ parent() }} {%- endblock widget_attributes -%} {% block form_widget_simple -%} {% if type is not defined or type not in ['hidden'] %} {%- set attr = attr|merge({'class': (attr.class|default('') ~ ' form-control')|trim}) -%} {% endif %} {{- parent() -}} {%- endblock form_widget_simple %} {% block textarea_widget -%} {% set attr = attr|merge({'class': (attr.class|default('') ~ ' form-control')|trim}) %} {{- parent() -}} {%- endblock textarea_widget %} {% block choice_widget_collapsed -%} {% set attr = attr|merge({'class': (attr.class|default('') ~ ' form-control')|trim}) %} {{- parent() -}} {%- endblock %} {% block choice_widget_expanded -%} {% set attr = attr|merge({'class': (attr.class|default('') ~ ' form-checkable-stacked')|trim}) %} {{- parent() -}} {%- endblock %} {% block checkbox_widget -%} {% set attr = attr|merge({'class': (attr.class|default('') ~ ' form-checkable-input')|trim}) %} {{- form_label(form, null, {'widget': parent()}) -}} {%- endblock checkbox_widget %} {% block radio_widget -%} {% set attr = attr|merge({'class': (attr.class|default('') ~ ' form-checkable-input')|trim}) %} {{- form_label(form, null, {'widget': parent()}) -}} {%- endblock radio_widget %} {% block button_widget -%} {%- set attr = attr|merge({'class': (attr.class|default('btn-secondary') ~ ' btn')|trim}) -%} {{- parent() -}} {%- endblock button_widget %} {% block submit_widget -%} {%- set attr = attr|merge({'class': (attr.class|default('btn-primary'))|trim}) -%} {{- parent() -}} {%- endblock submit_widget %} {# Labels #} {%- block form_label -%} {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' form-label')|trim}) %} {{- parent() -}} {%- endblock -%} {% block checkbox_label -%} {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' form-checkable-checkbox')|trim}) %} {{- block('checkable_label') -}} {%- endblock checkbox_label %} {% block radio_label -%} {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' form-checkable-radio')|trim}) %} {{- block('checkable_label') -}} {%- endblock radio_label %} {% block checkable_label %} {# Do not display the label if widget is not defined in order to prevent double label rendering #} {% if widget is defined %} {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' form-checkable')|trim}) %} {% if parent_label_class is defined %} {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' ' ~ parent_label_class)|trim}) %} {% endif %} {% if label is not same as(false) and label is empty %} {%- if label_format is not empty -%} {% set label = label_format|replace({'%name%': name, '%id%': id}) %} {%- else -%} {% set label = name|humanize %} {%- endif -%} {% endif %} {% endif %} {% endblock checkable_label %} {# Rows #} {% block form_row -%} {%- set widget_attr = widget_attr|default({}) -%} {%- if help is not empty -%} {%- set widget_attr = widget_attr|merge({'aria-describedby': id ~ '_help'}) -%} {%- endif -%} {%- set row_attr = row_attr|default({}) -%} {%- set row_attr = row_attr|merge({'class': (row_attr.class|default('') ~ ' form-group')|trim}) -%} {%- if required -%} {%- set row_attr = row_attr|merge({'class': (row_attr.class|default('') ~ ' is-required')|trim}) -%} {%- endif -%}