提交 ab7a80ea 编写于 作者: S Sergey Nartimov

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>"
上级 1376f4ca
## 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'
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 tag('input', html_options).safe_concat request_token_tag
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册