diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig index 211eee5dd784..2df6a8f1724f 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig @@ -1,24 +1,19 @@ {# Widgets #} -{% block form_widget %} -{% spaceless %} +{% block form_widget -%} {% if compound %} - {{ block('form_widget_compound') }} + {{- block('form_widget_compound') -}} {% else %} - {{ block('form_widget_simple') }} + {{- block('form_widget_simple') -}} {% endif %} -{% endspaceless %} -{% endblock form_widget %} +{%- endblock form_widget %} -{% block form_widget_simple %} -{% spaceless %} - {% set type = type|default('text') %} +{% block form_widget_simple -%} + {% set type = type|default('text') -%} -{% endspaceless %} -{% endblock form_widget_simple %} +{%- endblock form_widget_simple %} -{% block form_widget_compound %} -{% spaceless %} +{% block form_widget_compound -%}
{% if form.parent is empty %} {{ form_errors(form) }} @@ -26,48 +21,38 @@ {{ block('form_rows') }} {{ form_rest(form) }}
-{% endspaceless %} -{% endblock form_widget_compound %} +{%- endblock form_widget_compound %} -{% block collection_widget %} -{% spaceless %} - {% if prototype is defined %} +{% block collection_widget -%} + {% if prototype is defined -%} {% set attr = attr|merge({'data-prototype': form_row(prototype) }) %} - {% endif %} - {{ block('form_widget') }} -{% endspaceless %} -{% endblock collection_widget %} + {%- endif %} + {{- block('form_widget') -}} +{%- endblock collection_widget %} -{% block textarea_widget %} -{% spaceless %} +{% block textarea_widget -%} -{% endspaceless %} -{% endblock textarea_widget %} +{%- endblock textarea_widget %} -{% block choice_widget %} -{% spaceless %} +{% block choice_widget -%} {% if expanded %} - {{ block('choice_widget_expanded') }} + {{- block('choice_widget_expanded') -}} {% else %} - {{ block('choice_widget_collapsed') }} + {{- block('choice_widget_collapsed') -}} {% endif %} -{% endspaceless %} -{% endblock choice_widget %} +{%- endblock choice_widget %} -{% block choice_widget_expanded %} -{% spaceless %} +{% block choice_widget_expanded -%}
- {% for child in form %} - {{ form_widget(child) }} - {{ form_label(child) }} - {% endfor %} + {%- for child in form %} + {{- form_widget(child) -}} + {{- form_label(child) -}} + {% endfor -%}
-{% endspaceless %} {% endblock choice_widget_expanded %} -{% block choice_widget_collapsed %} -{% spaceless %} - {% if required and empty_value is none and not empty_value_in_choices and not multiple %} +{% block choice_widget_collapsed -%} + {% if required and empty_value is none and not empty_value_in_choices and not multiple -%} {% set required = false %} {% endif %} -{% endspaceless %} -{% endblock choice_widget_collapsed %} +{%- endblock choice_widget_collapsed %} -{% block choice_widget_options %} -{% spaceless %} +{% block choice_widget_options -%} {% for group_label, choice in options %} {% if choice is iterable %} @@ -99,25 +82,19 @@ {% endif %} {% endfor %} -{% endspaceless %} -{% endblock choice_widget_options %} +{%- endblock choice_widget_options %} -{% block checkbox_widget %} -{% spaceless %} +{% block checkbox_widget -%} -{% endspaceless %} -{% endblock checkbox_widget %} +{%- endblock checkbox_widget %} -{% block radio_widget %} -{% spaceless %} +{% block radio_widget -%} -{% endspaceless %} -{% endblock radio_widget %} +{%- endblock radio_widget %} -{% block datetime_widget %} -{% spaceless %} +{% block datetime_widget -%} {% if widget == 'single_text' %} - {{ block('form_widget_simple') }} + {{- block('form_widget_simple') -}} {% else %}
{{ form_errors(form.date) }} @@ -126,14 +103,12 @@ {{ form_widget(form.time) }}
{% endif %} -{% endspaceless %} -{% endblock datetime_widget %} +{%- endblock datetime_widget %} -{% block date_widget %} -{% spaceless %} +{% block date_widget -%} {% if widget == 'single_text' %} - {{ block('form_widget_simple') }} - {% else %} + {{- block('form_widget_simple') -}} + {% else -%}
{{ date_pattern|replace({ '{{ year }}': form_widget(form.year), @@ -141,238 +116,188 @@ '{{ day }}': form_widget(form.day), })|raw }}
- {% endif %} -{% endspaceless %} -{% endblock date_widget %} + {%- endif %} +{%- endblock date_widget %} -{% block time_widget %} -{% spaceless %} +{% block time_widget -%} {% if widget == 'single_text' %} - {{ block('form_widget_simple') }} - {% else %} + {{- block('form_widget_simple') -}} + {% else -%} {% set vars = widget == 'text' ? { 'attr': { 'size': 1 }} : {} %}
{{ form_widget(form.hour, vars) }}{% if with_minutes %}:{{ form_widget(form.minute, vars) }}{% endif %}{% if with_seconds %}:{{ form_widget(form.second, vars) }}{% endif %}
- {% endif %} -{% endspaceless %} -{% endblock time_widget %} + {%- endif %} +{%- endblock time_widget %} -{% block number_widget %} -{% spaceless %} +{% block number_widget -%} {# type="number" doesn't work with floats #} {% set type = type|default('text') %} - {{ block('form_widget_simple') }} -{% endspaceless %} -{% endblock number_widget %} + {{- block('form_widget_simple') -}} +{%- endblock number_widget %} -{% block integer_widget %} -{% spaceless %} +{% block integer_widget -%} {% set type = type|default('number') %} - {{ block('form_widget_simple') }} -{% endspaceless %} -{% endblock integer_widget %} + {{- block('form_widget_simple') -}} +{%- endblock integer_widget %} -{% block money_widget %} -{% spaceless %} +{% block money_widget -%} {{ money_pattern|replace({ '{{ widget }}': block('form_widget_simple') })|raw }} -{% endspaceless %} -{% endblock money_widget %} +{%- endblock money_widget %} -{% block url_widget %} -{% spaceless %} +{% block url_widget -%} {% set type = type|default('url') %} - {{ block('form_widget_simple') }} -{% endspaceless %} -{% endblock url_widget %} + {{- block('form_widget_simple') -}} +{%- endblock url_widget %} -{% block search_widget %} -{% spaceless %} +{% block search_widget -%} {% set type = type|default('search') %} - {{ block('form_widget_simple') }} -{% endspaceless %} -{% endblock search_widget %} + {{- block('form_widget_simple') -}} +{%- endblock search_widget %} -{% block percent_widget %} -{% spaceless %} +{% block percent_widget -%} {% set type = type|default('text') %} - {{ block('form_widget_simple') }} % -{% endspaceless %} -{% endblock percent_widget %} + {{- block('form_widget_simple') -}} % +{%- endblock percent_widget %} -{% block password_widget %} -{% spaceless %} +{% block password_widget -%} {% set type = type|default('password') %} {{ block('form_widget_simple') }} -{% endspaceless %} -{% endblock password_widget %} +{%- endblock password_widget %} -{% block hidden_widget %} -{% spaceless %} +{% block hidden_widget -%} {% set type = type|default('hidden') %} - {{ block('form_widget_simple') }} -{% endspaceless %} -{% endblock hidden_widget %} + {{- block('form_widget_simple') -}} +{%- endblock hidden_widget -%} -{% block email_widget %} -{% spaceless %} +{% block email_widget -%} {% set type = type|default('email') %} - {{ block('form_widget_simple') }} -{% endspaceless %} -{% endblock email_widget %} + {{- block('form_widget_simple') -}} +{%- endblock email_widget %} -{% block button_widget %} -{% spaceless %} - {% if label is empty %} +{% block button_widget -%} + {% if label is empty -%} {% set label = name|humanize %} - {% endif %} + {%- endif -%} -{% endspaceless %} -{% endblock button_widget %} +{%- endblock button_widget %} -{% block submit_widget %} -{% spaceless %} +{% block submit_widget -%} {% set type = type|default('submit') %} - {{ block('button_widget') }} -{% endspaceless %} -{% endblock submit_widget %} + {{- block('button_widget') -}} +{%- endblock submit_widget %} -{% block reset_widget %} -{% spaceless %} +{% block reset_widget -%} {% set type = type|default('reset') %} - {{ block('button_widget') }} -{% endspaceless %} -{% endblock reset_widget %} + {{- block('button_widget') -}} +{%- endblock reset_widget %} {# Labels #} -{% block form_label %} -{% spaceless %} - {% if label is not sameas(false) %} - {% if not compound %} +{% block form_label -%} + {% if label is not sameas(false) -%} + {% if not compound -%} {% set label_attr = label_attr|merge({'for': id}) %} - {% endif %} - {% if required %} + {%- endif %} + {% if required -%} {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' required')|trim}) %} - {% endif %} - {% if label is empty %} + {%- endif %} + {% if label is empty -%} {% set label = name|humanize %} - {% endif %} + {%- endif -%} {{ label|trans({}, translation_domain) }} - {% endif %} -{% endspaceless %} -{% endblock form_label %} + {%- endif %} +{%- endblock form_label %} {% block button_label %}{% endblock %} {# Rows #} -{% block repeated_row %} -{% spaceless %} +{% block repeated_row -%} {# 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_rows') -}} +{%- endblock repeated_row %} -{% block form_row %} -{% spaceless %} +{% block form_row -%}
{{ form_label(form) }} {{ form_errors(form) }} {{ form_widget(form) }}
-{% endspaceless %} -{% endblock form_row %} +{%- endblock form_row %} -{% block button_row %} -{% spaceless %} +{% block button_row -%}
{{ form_widget(form) }}
-{% endspaceless %} -{% endblock button_row %} +{%- endblock button_row %} -{% block hidden_row %} +{% block hidden_row -%} {{ form_widget(form) }} -{% endblock hidden_row %} +{%- endblock hidden_row %} {# Misc #} -{% block form %} -{% spaceless %} +{% block form -%} {{ form_start(form) }} {{ form_widget(form) }} {{ form_end(form) }} -{% endspaceless %} -{% endblock form %} +{%- endblock form %} -{% block form_start %} -{% spaceless %} +{% block form_start -%} {% set method = method|upper %} - {% if method in ["GET", "POST"] %} + {%- if method in ["GET", "POST"] -%} {% set form_method = method %} - {% else %} + {%- else -%} {% set form_method = "POST" %} - {% endif %} + {%- endif -%}
- {% if form_method != method %} + {%- if form_method != method -%} - {% endif %} -{% endspaceless %} -{% endblock form_start %} + {%- endif -%} +{%- endblock form_start %} -{% block form_end %} -{% spaceless %} +{% block form_end -%} {% if not render_rest is defined or render_rest %} - {{ form_rest(form) }} - {% endif %} + {{- form_rest(form) -}} + {% endif -%}
-{% endspaceless %} -{% endblock form_end %} +{%- endblock form_end %} -{% block form_enctype %} -{% spaceless %} +{% block form_enctype -%} {% if multipart %}enctype="multipart/form-data"{% endif %} -{% endspaceless %} -{% endblock form_enctype %} +{%- endblock form_enctype %} -{% block form_errors %} -{% spaceless %} - {% if errors|length > 0 %} +{% block form_errors -%} + {% if errors|length > 0 -%} - {% endif %} -{% endspaceless %} -{% endblock form_errors %} + {%- endif %} +{%- endblock form_errors %} -{% block form_rest %} -{% spaceless %} - {% for child in form %} +{% block form_rest -%} + {% for child in form -%} {% if not child.rendered %} - {{ form_row(child) }} + {{- form_row(child) -}} {% endif %} - {% endfor %} -{% endspaceless %} + {%- endfor %} {% endblock form_rest %} {# Support #} -{% block form_rows %} -{% spaceless %} +{% block form_rows -%} {% for child in form %} - {{ form_row(child) }} + {{- form_row(child) -}} {% endfor %} -{% endspaceless %} -{% endblock form_rows %} +{%- endblock form_rows %} -{% block widget_attributes %} -{% spaceless %} +{% block widget_attributes -%} id="{{ id }}" name="{{ full_name }}" {%- if read_only %} readonly="readonly"{% endif -%} {%- if disabled %} disabled="disabled"{% endif -%} @@ -387,11 +312,9 @@ {{- attrname }}="{{ attrvalue }}" {%- endif -%} {%- endfor -%} -{% endspaceless %} -{% endblock widget_attributes %} +{%- endblock widget_attributes %} -{% block widget_container_attributes %} -{% spaceless %} +{% block widget_container_attributes -%} {%- if id is not empty %}id="{{ id }}"{% endif -%} {%- for attrname, attrvalue in attr -%} {{- " " -}} @@ -403,11 +326,9 @@ {{- attrname }}="{{ attrvalue }}" {%- endif -%} {%- endfor -%} -{% endspaceless %} -{% endblock widget_container_attributes %} +{%- endblock widget_container_attributes %} -{% block button_attributes %} -{% spaceless %} +{% block button_attributes -%} id="{{ id }}" name="{{ full_name }}"{% if disabled %} disabled="disabled"{% endif -%} {%- for attrname, attrvalue in attr -%} {{- " " -}} @@ -419,5 +340,4 @@ {{- attrname }}="{{ attrvalue }}" {%- endif -%} {%- endfor -%} -{% endspaceless %} -{% endblock button_attributes %} +{%- endblock button_attributes %} diff --git a/src/Symfony/Bridge/Twig/Resources/views/Form/form_table_layout.html.twig b/src/Symfony/Bridge/Twig/Resources/views/Form/form_table_layout.html.twig index aed4f8d77042..5c85128f5a12 100644 --- a/src/Symfony/Bridge/Twig/Resources/views/Form/form_table_layout.html.twig +++ b/src/Symfony/Bridge/Twig/Resources/views/Form/form_table_layout.html.twig @@ -1,52 +1,44 @@ {% use "form_div_layout.html.twig" %} -{% block form_row %} -{% spaceless %} +{% block form_row -%} - {{ form_label(form) }} + {{- form_label(form) -}} - {{ form_errors(form) }} - {{ form_widget(form) }} + {{- form_errors(form) -}} + {{- form_widget(form) -}} -{% endspaceless %} -{% endblock form_row %} +{%- endblock form_row %} -{% block button_row %} -{% spaceless %} +{% block button_row -%} - {{ form_widget(form) }} + {{- form_widget(form) -}} -{% endspaceless %} {% endblock button_row %} -{% block hidden_row %} -{% spaceless %} +{% block hidden_row -%} - {{ form_widget(form) }} + {{- form_widget(form) -}} -{% endspaceless %} {% endblock hidden_row %} -{% block form_widget_compound %} -{% spaceless %} +{% block form_widget_compound -%} - {% if form.parent is empty and errors|length > 0 %} + {%- if form.parent is empty and errors|length > 0 -%} - {% endif %} - {{ block('form_rows') }} - {{ form_rest(form) }} + {%- endif %} + {{- block('form_rows') -}} + {{- form_rest(form) -}}
- {{ form_errors(form) }} + {{- form_errors(form) -}}
-{% endspaceless %} -{% endblock form_widget_compound %} +{%- endblock form_widget_compound %} diff --git a/src/Symfony/Component/Form/Tests/AbstractDivLayoutTest.php b/src/Symfony/Component/Form/Tests/AbstractDivLayoutTest.php index 2d32aa38a398..fd58443709ab 100644 --- a/src/Symfony/Component/Form/Tests/AbstractDivLayoutTest.php +++ b/src/Symfony/Component/Form/Tests/AbstractDivLayoutTest.php @@ -756,16 +756,4 @@ public function testWidgetContainerAttributeNameRepeatedIfTrue() // foo="foo" $this->assertContains('
', $html); } - - public function testWidgetContainerAttributeHiddenIfFalse() - { - $form = $this->factory->createNamed('form', 'form', null, array( - 'attr' => array('foo' => false), - )); - - $html = $this->renderWidget($form->createView()); - - // no foo - $this->assertContains('
', $html); - } } diff --git a/src/Symfony/Component/Form/Tests/AbstractLayoutTest.php b/src/Symfony/Component/Form/Tests/AbstractLayoutTest.php index 532dc41be75f..2f743f8a3f47 100644 --- a/src/Symfony/Component/Form/Tests/AbstractLayoutTest.php +++ b/src/Symfony/Component/Form/Tests/AbstractLayoutTest.php @@ -1929,8 +1929,7 @@ public function testWidgetAttributeHiddenIfFalse() $html = $this->renderWidget($form->createView()); - // no foo - $this->assertSame('', $html); + $this->assertNotContains('foo="', $html); } public function testButtonAttributes() @@ -1966,7 +1965,38 @@ public function testButtonAttributeHiddenIfFalse() $html = $this->renderWidget($form->createView()); + $this->assertNotContains('foo="', $html); + } + + public function testTextareaWithWhitespaceOnlyContentRetainsValue() + { + $form = $this->factory->createNamed('textarea', 'textarea', ' '); + + $html = $this->renderWidget($form->createView()); + + $this->assertContains('> ', $html); + } + + public function testTextareaWithWhitespaceOnlyContentRetainsValueWhenRenderingForm() + { + $form = $this->factory->createBuilder('form', array('textarea' => ' ')) + ->add('textarea', 'textarea') + ->getForm(); + + $html = $this->renderForm($form->createView()); + + $this->assertContains('> ', $html); + } + + public function testWidgetContainerAttributeHiddenIfFalse() + { + $form = $this->factory->createNamed('form', 'form', null, array( + 'attr' => array('foo' => false), + )); + + $html = $this->renderWidget($form->createView()); + // no foo - $this->assertSame('', $html); + $this->assertNotContains('foo="', $html); } } diff --git a/src/Symfony/Component/Form/Tests/AbstractTableLayoutTest.php b/src/Symfony/Component/Form/Tests/AbstractTableLayoutTest.php index 5c8a9be2d595..d7213c33fe3f 100644 --- a/src/Symfony/Component/Form/Tests/AbstractTableLayoutTest.php +++ b/src/Symfony/Component/Form/Tests/AbstractTableLayoutTest.php @@ -533,16 +533,4 @@ public function testWidgetContainerAttributeNameRepeatedIfTrue() // foo="foo" $this->assertContains('', $html); } - - public function testWidgetContainerAttributeHiddenIfFalse() - { - $form = $this->factory->createNamed('form', 'form', null, array( - 'attr' => array('foo' => false), - )); - - $html = $this->renderWidget($form->createView()); - - // no foo - $this->assertContains('
', $html); - } }