mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Added :prompt option to FormOptions#select (and the users of it, like FormOptions#select_country etc) to create "Please select" style descriptors #1181 [Michael Schuerig]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1646 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
5524dedc06
commit
c52edf2319
3 changed files with 53 additions and 7 deletions
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* Added :prompt option to FormOptions#select (and the users of it, like FormOptions#select_country etc) to create "Please select" style descriptors #1181 [Michael Schuerig]
|
||||
|
||||
* Added JavascriptHelper#update_element_function, which returns a Javascript function (or expression) that'll update a DOM element according to the options passed #933 [mortonda@dgrmm.net]. Examples:
|
||||
|
||||
<%= update_element_function("products", :action => :insert, :position => :bottom, :content => "<p>New product!</p>") %>
|
||||
|
|
|
@ -22,6 +22,8 @@ module ActionView
|
|||
# <option>poem</option>
|
||||
# </select>
|
||||
#
|
||||
# * <tt>:prompt</tt> - set to true or a prompt string. When the select element doesn't have a value yet, this prepends an option with a generic prompt -- "Please select" -- or the given prompt string.
|
||||
#
|
||||
# Another common case is a select tag for an <tt>belongs_to</tt>-associated object. For example,
|
||||
#
|
||||
# select("post", "person_id", Person.find_all.collect {|p| [ p.name, p.id ] })
|
||||
|
@ -294,37 +296,43 @@ module ActionView
|
|||
def to_select_tag(choices, options, html_options)
|
||||
html_options = html_options.stringify_keys
|
||||
add_default_name_and_id(html_options)
|
||||
content_tag("select", add_blank_option(options_for_select(choices, value), options[:include_blank]), html_options)
|
||||
content_tag("select", add_options(options_for_select(choices, value), options, value), html_options)
|
||||
end
|
||||
|
||||
def to_collection_select_tag(collection, value_method, text_method, options, html_options)
|
||||
html_options = html_options.stringify_keys
|
||||
add_default_name_and_id(html_options)
|
||||
content_tag(
|
||||
"select", add_blank_option(options_from_collection_for_select(collection, value_method, text_method, value), options[:include_blank]), html_options
|
||||
"select", add_options(options_from_collection_for_select(collection, value_method, text_method, value), options, value), html_options
|
||||
)
|
||||
end
|
||||
|
||||
def to_country_select_tag(priority_countries, options, html_options)
|
||||
html_options = html_options.stringify_keys
|
||||
add_default_name_and_id(html_options)
|
||||
content_tag("select", add_blank_option(country_options_for_select(value, priority_countries), options[:include_blank]), html_options)
|
||||
content_tag("select", add_options(country_options_for_select(value, priority_countries), options, value), html_options)
|
||||
end
|
||||
|
||||
def to_time_zone_select_tag(priority_zones, options, html_options)
|
||||
html_options = html_options.stringify_keys
|
||||
add_default_name_and_id(html_options)
|
||||
content_tag("select",
|
||||
add_blank_option(
|
||||
add_options(
|
||||
time_zone_options_for_select(value, priority_zones, options[:model] || TimeZone),
|
||||
options[:include_blank]
|
||||
options, value
|
||||
), html_options
|
||||
)
|
||||
end
|
||||
|
||||
private
|
||||
def add_blank_option(option_tags, add_blank)
|
||||
add_blank ? "<option value=\"\"></option>\n" + option_tags : option_tags
|
||||
def add_options(option_tags, options, value = nil)
|
||||
option_tags = "<option value=\"\"></option>\n" + option_tags if options[:include_blank]
|
||||
|
||||
if value.blank? && options[:prompt]
|
||||
("<option value=\"\">#{options[:prompt].kind_of?(String) ? options[:prompt] : 'Please select'}</option>\n") + option_tags
|
||||
else
|
||||
option_tags
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -221,6 +221,42 @@ class FormOptionsHelperTest < Test::Unit::TestCase
|
|||
)
|
||||
end
|
||||
|
||||
def test_select_with_default_prompt
|
||||
@post = Post.new
|
||||
@post.category = ""
|
||||
assert_equal(
|
||||
"<select id=\"post_category\" name=\"post[category]\"><option value=\"\">Please select</option>\n<option value=\"abe\">abe</option>\n<option value=\"<mus>\"><mus></option>\n<option value=\"hest\">hest</option></select>",
|
||||
select("post", "category", %w( abe <mus> hest), :prompt => true)
|
||||
)
|
||||
end
|
||||
|
||||
def test_select_no_prompt_when_select_has_value
|
||||
@post = Post.new
|
||||
@post.category = "<mus>"
|
||||
assert_equal(
|
||||
"<select id=\"post_category\" name=\"post[category]\"><option value=\"abe\">abe</option>\n<option value=\"<mus>\" selected=\"selected\"><mus></option>\n<option value=\"hest\">hest</option></select>",
|
||||
select("post", "category", %w( abe <mus> hest), :prompt => true)
|
||||
)
|
||||
end
|
||||
|
||||
def test_select_with_given_prompt
|
||||
@post = Post.new
|
||||
@post.category = ""
|
||||
assert_equal(
|
||||
"<select id=\"post_category\" name=\"post[category]\"><option value=\"\">The prompt</option>\n<option value=\"abe\">abe</option>\n<option value=\"<mus>\"><mus></option>\n<option value=\"hest\">hest</option></select>",
|
||||
select("post", "category", %w( abe <mus> hest), :prompt => 'The prompt')
|
||||
)
|
||||
end
|
||||
|
||||
def test_select_with_prompt_and_blank
|
||||
@post = Post.new
|
||||
@post.category = ""
|
||||
assert_equal(
|
||||
"<select id=\"post_category\" name=\"post[category]\"><option value=\"\">Please select</option>\n<option value=\"\"></option>\n<option value=\"abe\">abe</option>\n<option value=\"<mus>\"><mus></option>\n<option value=\"hest\">hest</option></select>",
|
||||
select("post", "category", %w( abe <mus> hest), :prompt => true, :include_blank => true)
|
||||
)
|
||||
end
|
||||
|
||||
def test_collection_select
|
||||
@posts = [
|
||||
Post.new("<Abe> went home", "<Abe>", "To a little house", "shh!"),
|
||||
|
|
Loading…
Reference in a new issue