diff --git a/actionview/lib/action_view/helpers/date_helper.rb b/actionview/lib/action_view/helpers/date_helper.rb index 8e5bc6874a..3d04f47286 100644 --- a/actionview/lib/action_view/helpers/date_helper.rb +++ b/actionview/lib/action_view/helpers/date_helper.rb @@ -1053,7 +1053,7 @@ module ActionView select_options[:class] = css_class_attribute(type, select_options[:class], @options[:with_css_classes]) if @options[:with_css_classes] select_html = +"\n" - select_html << content_tag("option", "", value: "") + "\n" if @options[:include_blank] + select_html << content_tag("option", "", value: "", label: " ") + "\n" if @options[:include_blank] select_html << prompt_option_tag(type, @options[:prompt]) + "\n" if @options[:prompt] select_html << select_options_as_html diff --git a/actionview/lib/action_view/helpers/form_options_helper.rb b/actionview/lib/action_view/helpers/form_options_helper.rb index 535be188c2..21cd46c3bc 100644 --- a/actionview/lib/action_view/helpers/form_options_helper.rb +++ b/actionview/lib/action_view/helpers/form_options_helper.rb @@ -21,7 +21,7 @@ module ActionView # could become: # # @@ -74,7 +74,6 @@ module ActionView # could become: # # - # + # # # # diff --git a/actionview/lib/action_view/helpers/tags/base.rb b/actionview/lib/action_view/helpers/tags/base.rb index d075677614..f7498e5396 100644 --- a/actionview/lib/action_view/helpers/tags/base.rb +++ b/actionview/lib/action_view/helpers/tags/base.rb @@ -166,8 +166,11 @@ module ActionView def add_options(option_tags, options, value = nil) if options[:include_blank] - option_tags = tag_builder.content_tag_string("option", options[:include_blank].kind_of?(String) ? options[:include_blank] : nil, value: "") + "\n" + option_tags + content = (options[:include_blank] if options[:include_blank].is_a?(String)) + label = (" " unless content) + option_tags = tag_builder.content_tag_string("option", content, value: "", label: label) + "\n" + option_tags end + if value.blank? && options[:prompt] tag_options = { value: "" }.tap do |prompt_opts| prompt_opts[:disabled] = true if options[:disabled] == "" @@ -175,6 +178,7 @@ module ActionView end option_tags = tag_builder.content_tag_string("option", prompt_text(options[:prompt]), tag_options) + "\n" + option_tags end + option_tags end diff --git a/actionview/test/template/date_helper_test.rb b/actionview/test/template/date_helper_test.rb index a643a8b41e..ad9027b2c2 100644 --- a/actionview/test/template/date_helper_test.rb +++ b/actionview/test/template/date_helper_test.rb @@ -227,7 +227,7 @@ class DateHelperTest < ActionView::TestCase def test_select_day_with_blank expected = +%(\n" assert_dom_equal expected, select_day(Time.mktime(2003, 8, 16), include_blank: true) @@ -236,7 +236,7 @@ class DateHelperTest < ActionView::TestCase def test_select_day_nil_with_blank expected = +%(\n" assert_dom_equal expected, select_day(nil, include_blank: true) @@ -330,7 +330,7 @@ class DateHelperTest < ActionView::TestCase def test_select_month_with_blank expected = +%(\n" assert_dom_equal expected, select_month(Time.mktime(2003, 8, 16), include_blank: true) @@ -339,7 +339,7 @@ class DateHelperTest < ActionView::TestCase def test_select_month_nil_with_blank expected = +%(\n" assert_dom_equal expected, select_month(nil, include_blank: true) @@ -626,7 +626,7 @@ class DateHelperTest < ActionView::TestCase def test_select_hour_with_blank expected = +%(\n" assert_dom_equal expected, select_hour(Time.mktime(2003, 8, 16, 8, 4, 18), include_blank: true) @@ -634,7 +634,7 @@ class DateHelperTest < ActionView::TestCase def test_select_hour_nil_with_blank expected = +%(\n" assert_dom_equal expected, select_hour(nil, include_blank: true) @@ -706,7 +706,7 @@ class DateHelperTest < ActionView::TestCase def test_select_minute_with_blank expected = +%(\n" assert_dom_equal expected, select_minute(Time.mktime(2003, 8, 16, 8, 4, 18), include_blank: true) @@ -714,7 +714,7 @@ class DateHelperTest < ActionView::TestCase def test_select_minute_with_blank_and_step expected = +%(\n" assert_dom_equal expected, select_minute(Time.mktime(2003, 8, 16, 8, 4, 18), include_blank: true, minute_step: 15) @@ -722,7 +722,7 @@ class DateHelperTest < ActionView::TestCase def test_select_minute_nil_with_blank expected = +%(\n" assert_dom_equal expected, select_minute(nil, include_blank: true) @@ -730,7 +730,7 @@ class DateHelperTest < ActionView::TestCase def test_select_minute_nil_with_blank_and_step expected = +%(\n" assert_dom_equal expected, select_minute(nil, include_blank: true, minute_step: 15) @@ -810,7 +810,7 @@ class DateHelperTest < ActionView::TestCase def test_select_second_with_blank expected = +%(\n" assert_dom_equal expected, select_second(Time.mktime(2003, 8, 16, 8, 4, 18), include_blank: true) @@ -818,7 +818,7 @@ class DateHelperTest < ActionView::TestCase def test_select_second_nil_with_blank expected = +%(\n" assert_dom_equal expected, select_second(nil, include_blank: true) @@ -1883,11 +1883,11 @@ class DateHelperTest < ActionView::TestCase expected = '' + "\n" expected << %{\n" expected << %{\n" @@ -2093,17 +2093,17 @@ class DateHelperTest < ActionView::TestCase start_year = Time.now.year - 5 end_year = Time.now.year + 5 expected = +%{\n" expected << %{\n" expected << %{\n" @@ -2118,12 +2118,12 @@ class DateHelperTest < ActionView::TestCase expected = '' + "\n" expected << %{\n" expected << %{\n" @@ -2137,7 +2137,7 @@ class DateHelperTest < ActionView::TestCase end_year = Time.now.year + 5 expected = +%{\n" expected << '' + "\n" @@ -2152,12 +2152,12 @@ class DateHelperTest < ActionView::TestCase expected = '' + "\n" expected << %{\n" expected << %{\n" @@ -3404,15 +3404,15 @@ class DateHelperTest < ActionView::TestCase @post.updated_at = nil expected = +%{\n" expected << %{\n" expected << %{\n" diff --git a/actionview/test/template/form_options_helper_test.rb b/actionview/test/template/form_options_helper_test.rb index 403190030d..83c03124a4 100644 --- a/actionview/test/template/form_options_helper_test.rb +++ b/actionview/test/template/form_options_helper_test.rb @@ -726,7 +726,7 @@ class FormOptionsHelperTest < ActionView::TestCase @post = Post.new @post.category = "" assert_dom_equal( - "", + "", select("post", "category", %w( abe hest), include_blank: true) ) end @@ -795,7 +795,7 @@ class FormOptionsHelperTest < ActionView::TestCase @post = Post.new @post.category = "" assert_dom_equal( - "", + "", select("post", "category", %w( abe hest), prompt: true, include_blank: true) ) end @@ -804,7 +804,7 @@ class FormOptionsHelperTest < ActionView::TestCase @post = Post.new @post.category = "" assert_dom_equal( - "", + "", select("post", "category", [], prompt: true, include_blank: true) ) end @@ -813,7 +813,7 @@ class FormOptionsHelperTest < ActionView::TestCase @post = Post.new @post.category = "" assert_dom_equal( - "", + "", select("post", "category", [], { prompt: true, include_blank: true }, { class: "disabled", disabled: true }) ) end @@ -847,7 +847,7 @@ class FormOptionsHelperTest < ActionView::TestCase def test_required_select assert_dom_equal( - %(), + %(), select("post", "category", %w(abe mus hest), {}, { required: true }) ) end @@ -868,7 +868,7 @@ class FormOptionsHelperTest < ActionView::TestCase def test_required_select_display_size_equals_to_one assert_dom_equal( - %(), + %(), select("post", "category", %w(abe mus hest), {}, { required: true, size: 1 }) ) end @@ -891,7 +891,7 @@ class FormOptionsHelperTest < ActionView::TestCase @post = Post.new @post.category = "" assert_dom_equal( - "", + "", select("post", "category", [1], prompt: true, include_blank: true) ) end @@ -900,7 +900,7 @@ class FormOptionsHelperTest < ActionView::TestCase @post = Post.new @post.category = "" assert_dom_equal( - "", + "", select("post", "category", [["Number", "number"], ["Text", "text"], ["Yes/No", "boolean"]], prompt: true, include_blank: true) ) end @@ -1051,7 +1051,7 @@ class FormOptionsHelperTest < ActionView::TestCase @post.author_name = "Babe" assert_dom_equal( - "", + "", collection_select("post", "author_name", dummy_posts, "author_name", "author_name", { include_blank: true }, { "style" => "width: 200px" }) ) end @@ -1070,7 +1070,7 @@ class FormOptionsHelperTest < ActionView::TestCase @post = Post.new @post.author_name = "Babe" - expected = "" + expected = "" # Should suffix default name with []. assert_dom_equal expected, collection_select("post", "author_name", dummy_posts, "author_name", "author_name", { include_blank: true }, { multiple: true }) @@ -1084,7 +1084,7 @@ class FormOptionsHelperTest < ActionView::TestCase @post.author_name = "Babe" assert_dom_equal( - %{}, + %{}, collection_select("post", "author_name", dummy_posts, "author_name", "author_name", include_blank: true, selected: "") ) end @@ -1192,7 +1192,7 @@ class FormOptionsHelperTest < ActionView::TestCase @firm = Firm.new("D") html = time_zone_select("firm", "time_zone", nil, include_blank: true) assert_dom_equal "" \ - "\n" \ + "\n" \ "\n" \ "\n" \ "\n" \ diff --git a/guides/source/action_view_helpers.md b/guides/source/action_view_helpers.md index 9367b95004..57b0b249e6 100644 --- a/guides/source/action_view_helpers.md +++ b/guides/source/action_view_helpers.md @@ -792,7 +792,7 @@ If `@article.person_id` is 1, this would become: ```html