mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Add separator argument to grouped_options_for_select
Change prompt to options hash in grouped_options_for_select
This commit is contained in:
parent
9b4f5041d2
commit
a1ae17e327
2 changed files with 44 additions and 4 deletions
|
@ -492,13 +492,28 @@ module ActionView
|
|||
#
|
||||
# <b>Note:</b> Only the <tt><optgroup></tt> and <tt><option></tt> tags are returned, so you still have to
|
||||
# wrap the output in an appropriate <tt><select></tt> tag.
|
||||
def grouped_options_for_select(grouped_options, selected_key = nil, prompt = nil)
|
||||
def grouped_options_for_select(*args)
|
||||
grouped_options = args.shift
|
||||
options = args.extract_options!
|
||||
selected_key = args.shift
|
||||
if prompt = args.shift
|
||||
ActiveSupport::Deprecation.warn 'Passing the prompt to grouped_options_for_select as an argument is deprecated. Please pass it in an options hash.'
|
||||
else
|
||||
prompt = options[:prompt]
|
||||
divider = options[:divider]
|
||||
end
|
||||
|
||||
body = "".html_safe
|
||||
body.safe_concat content_tag(:option, prompt, :value => "") if prompt
|
||||
|
||||
grouped_options = grouped_options.sort if grouped_options.is_a?(Hash)
|
||||
|
||||
grouped_options.each do |label, container|
|
||||
grouped_options.each do |container|
|
||||
if divider
|
||||
label, container = divider, container
|
||||
else
|
||||
label, container = container
|
||||
end
|
||||
body.safe_concat content_tag(:optgroup, options_for_select(container, selected_key), :label => label)
|
||||
end
|
||||
|
||||
|
|
|
@ -296,10 +296,27 @@ class FormOptionsHelperTest < ActionView::TestCase
|
|||
)
|
||||
end
|
||||
|
||||
def test_grouped_options_for_select_with_optional_divider
|
||||
assert_dom_equal(
|
||||
"<optgroup label=\"----------\"><option value=\"US\">US</option>\n<option value=\"Canada\">Canada</option></optgroup><optgroup label=\"----------\"><option value=\"GB\">GB</option>\n<option value=\"Germany\">Germany</option></optgroup>",
|
||||
|
||||
grouped_options_for_select([['US',"Canada"] , ["GB", "Germany"]], divider:"----------")
|
||||
)
|
||||
end
|
||||
|
||||
def test_grouped_options_for_select_with_selected_and_prompt_deprecated
|
||||
ActiveSupport::Deprecation.silence do
|
||||
assert_dom_equal(
|
||||
"<option value=\"\">Choose a product...</option><optgroup label=\"Hats\"><option value=\"Baseball Cap\">Baseball Cap</option>\n<option selected=\"selected\" value=\"Cowboy Hat\">Cowboy Hat</option></optgroup>",
|
||||
grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], "Cowboy Hat", "Choose a product...")
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def test_grouped_options_for_select_with_selected_and_prompt
|
||||
assert_dom_equal(
|
||||
"<option value=\"\">Choose a product...</option><optgroup label=\"Hats\"><option value=\"Baseball Cap\">Baseball Cap</option>\n<option selected=\"selected\" value=\"Cowboy Hat\">Cowboy Hat</option></optgroup>",
|
||||
grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], "Cowboy Hat", "Choose a product...")
|
||||
grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], "Cowboy Hat", prompt: "Choose a product...")
|
||||
)
|
||||
end
|
||||
|
||||
|
@ -307,10 +324,18 @@ class FormOptionsHelperTest < ActionView::TestCase
|
|||
assert grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]]).html_safe?
|
||||
end
|
||||
|
||||
def test_grouped_options_for_select_with_prompt_returns_html_escaped_string_deprecated
|
||||
ActiveSupport::Deprecation.silence do
|
||||
assert_dom_equal(
|
||||
"<option value=\"\"><Choose One></option><optgroup label=\"Hats\"><option value=\"Baseball Cap\">Baseball Cap</option>\n<option value=\"Cowboy Hat\">Cowboy Hat</option></optgroup>",
|
||||
grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], nil, '<Choose One>'))
|
||||
end
|
||||
end
|
||||
|
||||
def test_grouped_options_for_select_with_prompt_returns_html_escaped_string
|
||||
assert_dom_equal(
|
||||
"<option value=\"\"><Choose One></option><optgroup label=\"Hats\"><option value=\"Baseball Cap\">Baseball Cap</option>\n<option value=\"Cowboy Hat\">Cowboy Hat</option></optgroup>",
|
||||
grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], nil, '<Choose One>'))
|
||||
grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], nil, prompt: '<Choose One>'))
|
||||
end
|
||||
|
||||
def test_optgroups_with_with_options_with_hash
|
||||
|
|
Loading…
Reference in a new issue