diff options
author | Will Farrington <wcfarrington@gmail.com> | 2011-12-10 23:53:39 -0500 |
---|---|---|
committer | Will Farrington <wcfarrington@gmail.com> | 2011-12-11 08:56:26 -0500 |
commit | 3f65e7f7be92adfb2d89ec23ef28a96d2bfae294 (patch) | |
tree | 3659b4db936a4b2a5f5c8c47ba0e45ccc3946439 | |
parent | d102791df7c38e7726eb32e70e2f25af97a3ca2a (diff) | |
download | rails-3f65e7f7be92adfb2d89ec23ef28a96d2bfae294.tar.gz rails-3f65e7f7be92adfb2d89ec23ef28a96d2bfae294.tar.bz2 rails-3f65e7f7be92adfb2d89ec23ef28a96d2bfae294.zip |
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 %>
-rw-r--r-- | actionpack/CHANGELOG.md | 10 | ||||
-rw-r--r-- | actionpack/lib/action_view/helpers/form_helper.rb | 33 | ||||
-rw-r--r-- | actionpack/lib/action_view/locale/en.yml | 6 | ||||
-rw-r--r-- | actionpack/test/template/form_helper_test.rb | 4 |
4 files changed, 52 insertions, 1 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index 761da8cb87..29b93da50b 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -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: diff --git a/actionpack/lib/action_view/helpers/form_helper.rb b/actionpack/lib/action_view/helpers/form_helper.rb index 1a64b12aa6..ccb2275329 100644 --- a/actionpack/lib/action_view/helpers/form_helper.rb +++ b/actionpack/lib/action_view/helpers/form_helper.rb @@ -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 diff --git a/actionpack/lib/action_view/locale/en.yml b/actionpack/lib/action_view/locale/en.yml index eb816b9446..f2a83b92a9 100644 --- a/actionpack/lib/action_view/locale/en.yml +++ b/actionpack/lib/action_view/locale/en.yml @@ -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}' + diff --git a/actionpack/test/template/form_helper_test.rb b/actionpack/test/template/form_helper_test.rb index 41e925b000..73b936b16e 100644 --- a/actionpack/test/template/form_helper_test.rb +++ b/actionpack/test/template/form_helper_test.rb @@ -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 |