Add button_tag support to ActionView::Helpers::FormBuilder.

This support is near-identical to the existing submit_tag support.

Example:

    <%= form_for @post do |f| %>
      <%= f.button %>
    <% end %>
This commit is contained in:
Will Farrington 2011-12-10 23:53:39 -05:00
parent d102791df7
commit 3f65e7f7be
4 changed files with 52 additions and 1 deletions

View File

@ -1,5 +1,15 @@
## Rails 3.2.0 (unreleased) ##
* Add `button_tag` support to ActionView::Helpers::FormBuilder.
This support mimics the default behavior of `submit_tag`.
Example:
<%= form_for @post do |f| %>
<%= f.button %>
<% end %>
* Make ActiveSupport::Benchmarkable a default module for ActionController::Base, so the #benchmark method is once again available in the controller context like it used to be *DHH*
* Deprecated implied layout lookup in controllers whose parent had a explicit layout set:

View File

@ -1364,6 +1364,39 @@ module ActionView
@template.submit_tag(value, options)
end
# Add the submit button for the given form. When no value is given, it checks
# if the object is a new resource or not to create the proper label:
#
# <%= form_for @post do |f| %>
# <%= f.button %>
# <% end %>
#
# In the example above, if @post is a new record, it will use "Create Post" as
# submit button label, otherwise, it uses "Update Post".
#
# Those labels can be customized using I18n, under the helpers.submit key and accept
# the %{model} as translation interpolation:
#
# en:
# helpers:
# button:
# create: "Create a %{model}"
# update: "Confirm changes to %{model}"
#
# It also searches for a key specific for the given object:
#
# en:
# helpers:
# button:
# post:
# create: "Add %{model}"
#
def button(value=nil, options={})
value, options = nil, value if value.is_a?(Hash)
value ||= submit_default_value
@template.button_tag(value, options)
end
def emitted_hidden_id?
@emitted_hidden_id ||= nil
end

View File

@ -152,3 +152,9 @@
update: 'Update %{model}'
submit: 'Save %{model}'
# Default translation keys for button FormHelper
button:
create: 'Create %{model}'
update: 'Update %{model}'
submit: 'Save %{model}'

View File

@ -689,6 +689,7 @@ class FormHelperTest < ActionView::TestCase
concat f.text_area(:body)
concat f.check_box(:secret)
concat f.submit('Create post')
concat f.button('Create post')
end
expected = whole_form("/posts/123", "create-post" , "edit_post", :method => "put") do
@ -697,7 +698,8 @@ class FormHelperTest < ActionView::TestCase
"<textarea name='post[body]' id='post_body' rows='20' cols='40'>Back to the hill and over it again!</textarea>" +
"<input name='post[secret]' type='hidden' value='0' />" +
"<input name='post[secret]' checked='checked' type='checkbox' id='post_secret' value='1' />" +
"<input name='commit' type='submit' value='Create post' />"
"<input name='commit' type='submit' value='Create post' />" +
"<button name='button' type='submit'>Create post</button>"
end
assert_dom_equal expected, output_buffer