Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

collection tags accept html attributes as the last element of collection #10964

Merged
merged 1 commit into from
Jun 16, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions actionpack/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
* Element of the `collection_check_boxes` and `collection_radio_buttons` can
optionally contain html attributes as the last element of the array.

*Vasiliy Ermolovich*

* Update the HTML `BOOLEAN_ATTRIBUTES` in `ActionView::Helpers::TagHelper`
to conform to the latest HTML 5.1 spec. Add attributes `allowfullscreen`,
`default`, `inert`, `sortable`, `truespeed`, `typemustmatch`. Fix attribute
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,9 @@ def render_collection #:nodoc:
value = value_for_collection(item, @value_method)
text = value_for_collection(item, @text_method)
default_html_options = default_html_options_for_collection(item, value)
additional_html_options = option_html_attributes(item)

yield item, value, text, default_html_options
yield item, value, text, default_html_options.merge(additional_html_options)
end.join.html_safe
end
end
Expand Down
16 changes: 16 additions & 0 deletions actionpack/test/template/form_collections_helper_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,14 @@ def with_collection_check_boxes(*args, &block)
assert_select 'input[type=radio][value=false].special-radio#user_active_false'
end

test 'collection radio accepts html options as the last element of array' do
collection = [[1, true, {class: 'foo'}], [0, false, {class: 'bar'}]]
with_collection_radio_buttons :user, :active, collection, :second, :first

assert_select 'input[type=radio][value=true].foo#user_active_true'
assert_select 'input[type=radio][value=false].bar#user_active_false'
end

test 'collection radio does not wrap input inside the label' do
with_collection_radio_buttons :user, :active, [true, false], :to_s, :to_s

Expand Down Expand Up @@ -192,6 +200,14 @@ def with_collection_check_boxes(*args, &block)
assert_select 'label[for=user_name_199]', '$1.99'
end

test 'collection check boxes accepts html options as the last element of array' do
collection = [[1, 'Category 1', {class: 'foo'}], [2, 'Category 2', {class: 'bar'}]]
with_collection_check_boxes :user, :active, collection, :first, :second

assert_select 'input[type=checkbox][value=1].foo'
assert_select 'input[type=checkbox][value=2].bar'
end

test 'collection check boxes accepts selected values as :checked option' do
collection = (1..3).map{|i| [i, "Category #{i}"] }
with_collection_check_boxes :user, :category_ids, collection, :first, :last, :checked => [1, 3]
Expand Down