diff --git a/templates/web/login/common/form_div_layout.html.twig b/templates/web/login/common/form_div_layout.html.twig
index bebcf980ba..5e420e7778 100644
--- a/templates/web/login/common/form_div_layout.html.twig
+++ b/templates/web/login/common/form_div_layout.html.twig
@@ -1,11 +1,326 @@
-{% extends "form_div_layout.html.twig" %}
-
{% import "login/common/macros.html.twig" as auth_macro %}
-{% block form_errors %}
- {% spaceless %}
- {% if errors|length > 0 %}
- {{ auth_macro.fieldError(errors) }}
+{# Widgets #}
+
+{% block form_widget %}
+{% spaceless %}
+ {% if compound %}
+ {{ block('form_widget_compound') }}
+ {% else %}
+ {{ block('form_widget_simple') }}
+ {% endif %}
+{% endspaceless %}
+{% endblock form_widget %}
+
+{% block form_widget_simple %}
+{% spaceless %}
+ {% set type = type|default('text') %}
+
+{% endspaceless %}
+{% endblock form_widget_simple %}
+
+{% block form_widget_compound %}
+{% spaceless %}
+
+ {% if form.parent is empty %}
+ {{ form_errors(form) }}
{% endif %}
- {% endspaceless %}
+ {{ block('form_rows') }}
+ {{ form_rest(form) }}
+
+{% endspaceless %}
+{% endblock form_widget_compound %}
+
+{% block collection_widget %}
+{% spaceless %}
+ {% if prototype is defined %}
+ {% set attr = attr|merge({'data-prototype': form_row(prototype) }) %}
+ {% endif %}
+ {{ block('form_widget') }}
+{% endspaceless %}
+{% endblock collection_widget %}
+
+{% block textarea_widget %}
+{% spaceless %}
+
+{% endspaceless %}
+{% endblock textarea_widget %}
+
+{% block choice_widget %}
+{% spaceless %}
+ {% if expanded %}
+ {{ block('choice_widget_expanded') }}
+ {% else %}
+ {{ block('choice_widget_collapsed') }}
+ {% endif %}
+{% endspaceless %}
+{% endblock choice_widget %}
+
+{% block choice_widget_expanded %}
+{% spaceless %}
+
+ {% for child in form %}
+ {{ form_widget(child) }}
+ {{ form_label(child) }}
+ {% endfor %}
+
+{% endspaceless %}
+{% endblock choice_widget_expanded %}
+
+{% block choice_widget_collapsed %}
+{% spaceless %}
+
+{% endspaceless %}
+{% endblock choice_widget_collapsed %}
+
+{% block choice_widget_options %}
+{% spaceless %}
+ {% for group_label, choice in options %}
+ {% if choice is iterable %}
+
+ {% else %}
+
+ {% endif %}
+ {% endfor %}
+{% endspaceless %}
+{% endblock choice_widget_options %}
+
+{% block checkbox_widget %}
+{% spaceless %}
+
+{% endspaceless %}
+{% endblock checkbox_widget %}
+
+{% block radio_widget %}
+{% spaceless %}
+
+{% endspaceless %}
+{% endblock radio_widget %}
+
+{% block datetime_widget %}
+{% spaceless %}
+ {% if widget == 'single_text' %}
+ {{ block('form_widget_simple') }}
+ {% else %}
+
+ {{ form_errors(form.date) }}
+ {{ form_errors(form.time) }}
+ {{ form_widget(form.date) }}
+ {{ form_widget(form.time) }}
+
+ {% endif %}
+{% endspaceless %}
+{% endblock datetime_widget %}
+
+{% block date_widget %}
+{% spaceless %}
+ {% if widget == 'single_text' %}
+ {{ block('form_widget_simple') }}
+ {% else %}
+
+ {{ date_pattern|replace({
+ '{{ year }}': form_widget(form.year),
+ '{{ month }}': form_widget(form.month),
+ '{{ day }}': form_widget(form.day),
+ })|raw }}
+
+ {% endif %}
+{% endspaceless %}
+{% endblock date_widget %}
+
+{% block time_widget %}
+{% spaceless %}
+ {% if widget == 'single_text' %}
+ {{ block('form_widget_simple') }}
+ {% else %}
+ {% set vars = widget == 'text' ? { 'attr': { 'size': 1 }} : {} %}
+
+ {{ form_widget(form.hour, vars) }}:{{ form_widget(form.minute, vars) }}{% if with_seconds %}:{{ form_widget(form.second, vars) }}{% endif %}
+
+ {% endif %}
+{% endspaceless %}
+{% endblock time_widget %}
+
+{% block number_widget %}
+{% spaceless %}
+ {# type="number" doesn't work with floats #}
+ {% set type = type|default('text') %}
+ {{ block('form_widget_simple') }}
+{% endspaceless %}
+{% endblock number_widget %}
+
+{% block integer_widget %}
+{% spaceless %}
+ {% set type = type|default('number') %}
+ {{ block('form_widget_simple') }}
+{% endspaceless %}
+{% endblock integer_widget %}
+
+{% block money_widget %}
+{% spaceless %}
+ {{ money_pattern|replace({ '{{ widget }}': block('form_widget_simple') })|raw }}
+{% endspaceless %}
+{% endblock money_widget %}
+
+{% block url_widget %}
+{% spaceless %}
+ {% set type = type|default('url') %}
+ {{ block('form_widget_simple') }}
+{% endspaceless %}
+{% endblock url_widget %}
+
+{% block search_widget %}
+{% spaceless %}
+ {% set type = type|default('search') %}
+ {{ block('form_widget_simple') }}
+{% endspaceless %}
+{% endblock search_widget %}
+
+{% block percent_widget %}
+{% spaceless %}
+ {% set type = type|default('text') %}
+ {{ block('form_widget_simple') }} %
+{% endspaceless %}
+{% endblock percent_widget %}
+
+{% block password_widget %}
+{% spaceless %}
+ {% set type = type|default('password') %}
+ {{ block('form_widget_simple') }}
+{% endspaceless %}
+{% endblock password_widget %}
+
+{% block hidden_widget %}
+{% spaceless %}
+ {% set type = type|default('hidden') %}
+ {{ block('form_widget_simple') }}
+{% endspaceless %}
+{% endblock hidden_widget %}
+
+{% block email_widget %}
+{% spaceless %}
+ {% set type = type|default('email') %}
+ {{ block('form_widget_simple') }}
+{% endspaceless %}
+{% endblock email_widget %}
+
+{# Labels #}
+
+{% block form_label %}
+{% spaceless %}
+ {% if not compound %}
+ {% set label_attr = label_attr|merge({'for': id}) %}
+ {% endif %}
+ {% if required %}
+ {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' required')|trim}) %}
+ {% endif %}
+ {% if label is empty %}
+ {% set label = name|humanize %}
+ {% endif %}
+
+{% endspaceless %}
+{% endblock form_label %}
+
+{# Rows #}
+
+{% block repeated_row %}
+{% spaceless %}
+ {#
+ No need to render the errors here, as all errors are mapped
+ to the first child (see RepeatedTypeValidatorExtension).
+ #}
+ {{ block('form_rows') }}
+{% endspaceless %}
+{% endblock repeated_row %}
+
+{% block form_row %}
+{% spaceless %}
+
+ {{ form_label(form) }}
+ {{ form_errors(form) }}
+ {{ form_widget(form) }}
+
+{% endspaceless %}
+{% endblock form_row %}
+
+{% block hidden_row %}
+ {{ form_widget(form) }}
+{% endblock hidden_row %}
+
+{# Misc #}
+
+{% block form_enctype %}
+{% spaceless %}
+ {% if multipart %}enctype="multipart/form-data"{% endif %}
+{% endspaceless %}
+{% endblock form_enctype %}
+
+{% block form_errors %}
+{% spaceless %}
+ {% if errors|length > 0 %}
+ {{ auth_macro.fieldError(errors) }}
+ {% endif %}
+{% endspaceless %}
{% endblock form_errors %}
+
+{% block form_rest %}
+{% spaceless %}
+ {% for child in form %}
+ {% if not child.rendered %}
+ {{ form_row(child) }}
+ {% endif %}
+ {% endfor %}
+{% endspaceless %}
+{% endblock form_rest %}
+
+{# Support #}
+
+{% block form_rows %}
+{% spaceless %}
+ {% for child in form %}
+ {{ form_row(child) }}
+ {% endfor %}
+{% endspaceless %}
+{% endblock form_rows %}
+
+{% block widget_attributes %}
+{% spaceless %}
+ id="{{ id }}" name="{{ name }}" {% if read_only %} readonly="readonly"{% endif %}{% if disabled %} disabled="disabled"{% endif %}{% if required %} required="required"{% endif %}{% if max_length %} maxlength="{{ max_length }}"{% endif %}{% if pattern %} pattern="{{ pattern }}"{% endif %}
+ {% for attrname, attrvalue in attr %}{% if attrname in ['placeholder', 'title'] %}{{ attrname }}="{{ attrvalue }}" {% else %}{{ attrname }}="{{ attrvalue }}" {% endif %}{% endfor %}
+{% endspaceless %}
+{% endblock widget_attributes %}
+
+{% block widget_container_attributes %}
+{% spaceless %}
+ {% if id is not empty %}id="{{ id }}" {% endif %}
+ {% for attrname, attrvalue in attr %}{{ attrname }}="{{ attrvalue }}" {% endfor %}
+{% endspaceless %}
+{% endblock widget_container_attributes %}
+
+{# Deprecated in Symfony 2.1, to be removed in 2.3 #}
+
+{% block generic_label %}{{ block('form_label') }}{% endblock %}
+{% block widget_choice_options %}{{ block('choice_widget_options') }}{% endblock %}
+{% block field_widget %}{{ block('form_widget_simple') }}{% endblock %}
+{% block field_label %}{{ block('form_label') }}{% endblock %}
+{% block field_row %}{{ block('form_row') }}{% endblock %}
+{% block field_enctype %}{{ block('form_enctype') }}{% endblock %}
+{% block field_errors %}{{ block('form_errors') }}{% endblock %}
+{% block field_rest %}{{ block('form_rest') }}{% endblock %}
+{% block field_rows %}{{ block('form_rows') }}{% endblock %}
\ No newline at end of file