accept a block in button_to helper
Make possible to use a block in button_to helper if button text is hard to fit into the name parameter, e.g.: <%= button_to [:make_happy, @user] do %> Make happy <strong><%= @user.name %></strong> <% end %> # => "<form method="post" action="/users/1/make_happy" class="button_to"> # <div> # <button type="submit"> # Make happy <strong>Name</strong> # </button> # </div> # </form>"
This commit is contained in:
parent
1376f4cab1
commit
ab7a80ea22
@ -1,5 +1,21 @@
|
||||
## Rails 4.0.0 (unreleased) ##
|
||||
|
||||
* Make possible to use a block in button_to helper if button text is hard
|
||||
to fit into the name parameter, e.g.:
|
||||
|
||||
<%= button_to [:make_happy, @user] do %>
|
||||
Make happy <strong><%= @user.name %></strong>
|
||||
<% end %>
|
||||
# => "<form method="post" action="/users/1/make_happy" class="button_to">
|
||||
# <div>
|
||||
# <button type="submit">
|
||||
# Make happy <strong>Name</strong>
|
||||
# </button>
|
||||
# </div>
|
||||
# </form>"
|
||||
|
||||
*Sergey Nartimov*
|
||||
|
||||
* change a way of ordering helpers from several directories. Previously,
|
||||
when loading helpers from multiple paths, all of the helpers files were
|
||||
gathered into one array an then they were sorted. Helpers from different
|
||||
|
@ -294,6 +294,16 @@ def link_to(*args, &block)
|
||||
# # <div><input value="New" type="submit" /></div>
|
||||
# # </form>"
|
||||
#
|
||||
# <%= button_to [:make_happy, @user] do %>
|
||||
# Make happy <strong><%= @user.name %></strong>
|
||||
# <% end %>
|
||||
# # => "<form method="post" action="/users/1/make_happy" class="button_to">
|
||||
# # <div>
|
||||
# # <button type="submit">
|
||||
# # Make happy <strong><%= @user.name %></strong>
|
||||
# # </button>
|
||||
# # </div>
|
||||
# # </form>"
|
||||
#
|
||||
# <%= button_to "New", :action => "new", :form_class => "new-thing" %>
|
||||
# # => "<form method="post" action="/controller/new" class="new-thing">
|
||||
@ -331,7 +341,16 @@ def link_to(*args, &block)
|
||||
# # </div>
|
||||
# # </form>"
|
||||
# #
|
||||
def button_to(name, options = {}, html_options = {})
|
||||
def button_to(*args, &block)
|
||||
if block_given?
|
||||
options = args[0] || {}
|
||||
html_options = args[1] || {}
|
||||
else
|
||||
name = args[0]
|
||||
options = args[1] || {}
|
||||
html_options = args[2] || {}
|
||||
end
|
||||
|
||||
html_options = html_options.stringify_keys
|
||||
convert_boolean_attributes!(html_options, %w(disabled))
|
||||
|
||||
@ -350,9 +369,15 @@ def button_to(name, options = {}, html_options = {})
|
||||
request_token_tag = form_method == 'post' ? token_tag : ''
|
||||
|
||||
html_options = convert_options_to_data_attributes(options, html_options)
|
||||
html_options.merge!("type" => "submit", "value" => name || url)
|
||||
html_options['type'] = 'submit'
|
||||
|
||||
inner_tags = method_tag.safe_concat tag('input', html_options).safe_concat request_token_tag
|
||||
button = if block_given?
|
||||
content_tag('button', html_options, &block)
|
||||
else
|
||||
tag('input', html_options.merge('value' => name || url))
|
||||
end
|
||||
|
||||
inner_tags = method_tag.safe_concat(button).safe_concat(request_token_tag)
|
||||
content_tag('form', content_tag('div', inner_tags), form_options)
|
||||
end
|
||||
|
||||
|
@ -144,6 +144,13 @@ def test_button_to_with_method_get
|
||||
)
|
||||
end
|
||||
|
||||
def test_button_to_with_block
|
||||
assert_dom_equal(
|
||||
"<form method=\"post\" action=\"http://www.example.com\" class=\"button_to\"><div><button type=\"submit\"><span>Hello</span></button></div></form>",
|
||||
button_to("http://www.example.com") { content_tag(:span, 'Hello') }
|
||||
)
|
||||
end
|
||||
|
||||
def test_link_tag_with_straight_url
|
||||
assert_dom_equal "<a href=\"http://www.example.com\">Hello</a>", link_to("Hello", "http://www.example.com")
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user