Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Add block support to button_tag helper

As per the HTML 4.01 spec:

  Buttons created with the BUTTON element function just like buttons
  created with the INPUT element, but they offer richer rendering
  possibilities: the BUTTON element may have content. For example, a
  BUTTON element that contains an image functions like and may resemble
  an INPUT element whose type is set to "image", but the BUTTON element
  type allows content.

Since rich content is the main purpose of the <button> element, it makes
sense for the button_tag helper to accept a block.

http://www.w3.org/TR/html401/interact/forms.html#edef-BUTTON
http://dev.w3.org/html5/spec/the-button-element.html#the-button-element

Signed-off-by: Santiago Pastorino and Emilio Tagua <santiago+emilioe@wyeworks.com>
  • Loading branch information...
commit 829de9d98e59f9b083ed96a9031cd9841c83ae47 1 parent 03749d6
Tom Stuart tomstuart authored Santiago Pastorino and Emilio Tagua committed
13 actionpack/lib/action_view/helpers/form_tag_helper.rb
View
@@ -414,7 +414,8 @@ def submit_tag(value = "Save changes", options = {})
# <tt>reset</tt>button or a generic button which can be used in
# JavaScript, for example. You can use the button tag as a regular
# submit tag but it isn't supported in legacy browsers. However,
- # button tag allows richer labels such as images and emphasis.
+ # the button tag allows richer labels such as images and emphasis,
+ # so this helper will also accept a block.
#
# ==== Options
# * <tt>:confirm => 'question?'</tt> - If present, the
@@ -433,7 +434,9 @@ def submit_tag(value = "Save changes", options = {})
# button_tag
# # => <button name="button" type="submit">Button</button>
#
- # button_tag "<strong>Ask me!</strong>", :type => 'button'
+ # button_tag(:type => 'button') do
+ # content_tag(:strong, 'Ask me!')
+ # end
# # => <button name="button" type="button">
# <strong>Ask me!</strong>
# </button>
@@ -442,7 +445,9 @@ def submit_tag(value = "Save changes", options = {})
# # => <button data-disable-with="Please wait..." name="button"
# type="submit">Checkout</button>
#
- def button_tag(label = "Button", options = {})
+ def button_tag(content_or_options = nil, options = nil, &block)
+ options = content_or_options if block_given? && content_or_options.is_a?(Hash)
+ options ||= {}
options.stringify_keys!
if disable_with = options.delete("disable_with")
@@ -455,7 +460,7 @@ def button_tag(label = "Button", options = {})
options.reverse_merge! 'name' => 'button', 'type' => 'submit'
- content_tag :button, label, { "type" => options.delete("type") }.update(options)
+ content_tag :button, content_or_options || 'Button', options, &block
end
# Displays an image which when clicked will submit the form.
9 actionpack/test/template/form_tag_helper_test.rb
View
@@ -427,6 +427,15 @@ def test_button_tag_escape_content
)
end
+ def test_button_tag_with_block
+ assert_dom_equal('<button name="button" type="submit">Content</button>', button_tag { 'Content' })
+ end
+
+ def test_button_tag_with_block_and_options
+ output = button_tag(:name => 'temptation', :type => 'button') { content_tag(:strong, 'Do not press me') }
+ assert_dom_equal('<button name="temptation" type="button"><strong>Do not press me</strong></button>', output)
+ end
+
def test_image_submit_tag_with_confirmation
assert_dom_equal(
%(<input type="image" src="/images/save.gif" data-confirm="Are you sure?" />),
Please sign in to comment.
Something went wrong with that request. Please try again.