Add back `:confirm` and change deprecation horizon to 4.1

上级 f5d0e3d7
## Rails 4.0.0 (unreleased) ## ## Rails 4.0.0 (unreleased) ##
* Remove `:confirm` in favor of `:data => { :confirm => "Text" }` option for `button_to`, `button_tag`, `image_submit_tag`, `link_to` and `submit_tag` helpers. * Deprecate `:confirm` in favor of `:data => { :confirm => "Text" }` option for `button_to`, `button_tag`, `image_submit_tag`, `link_to` and `submit_tag` helpers.
*Carlos Galdino* *Carlos Galdino + Rafael Mendonça França*
* Show routes in exception page while debugging a `RoutingError` in development. *Richard Schneeman and Mattt Thompson* * Show routes in exception page while debugging a `RoutingError` in development. *Richard Schneeman and Mattt Thompson*
......
...@@ -386,6 +386,12 @@ def radio_button_tag(name, value, checked = false, options = {}) ...@@ -386,6 +386,12 @@ def radio_button_tag(name, value, checked = false, options = {})
# * <tt>:disabled</tt> - If true, the user will not be able to use this input. # * <tt>:disabled</tt> - If true, the user will not be able to use this input.
# * Any other key creates standard HTML options for the tag. # * Any other key creates standard HTML options for the tag.
# #
# ==== Data attributes
#
# * <tt>:confirm => 'question?'</tt> - If present the unobtrusive JavaScript
# drivers will provide a prompt with the question specified. If the user accepts,
# the form is processed normally, otherwise no action is taken.
#
# ==== Examples # ==== Examples
# submit_tag # submit_tag
# # => <input name="commit" type="submit" value="Save changes" /> # # => <input name="commit" type="submit" value="Save changes" />
...@@ -411,6 +417,12 @@ def radio_button_tag(name, value, checked = false, options = {}) ...@@ -411,6 +417,12 @@ def radio_button_tag(name, value, checked = false, options = {})
def submit_tag(value = "Save changes", options = {}) def submit_tag(value = "Save changes", options = {})
options = options.stringify_keys options = options.stringify_keys
if confirm = options.delete("confirm")
ActiveSupport::Deprecation.warn ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead'"
options["data-confirm"] = confirm
end
tag :input, { "type" => "submit", "name" => "commit", "value" => value }.update(options) tag :input, { "type" => "submit", "name" => "commit", "value" => value }.update(options)
end end
...@@ -427,6 +439,13 @@ def submit_tag(value = "Save changes", options = {}) ...@@ -427,6 +439,13 @@ def submit_tag(value = "Save changes", options = {})
# use this input. # use this input.
# * Any other key creates standard HTML options for the tag. # * Any other key creates standard HTML options for the tag.
# #
# ==== Data attributes
#
# * <tt>:confirm => 'question?'</tt> - If present, the
# unobtrusive JavaScript drivers will provide a prompt with
# the question specified. If the user accepts, the form is
# processed normally, otherwise no action is taken.
#
# ==== Examples # ==== Examples
# button_tag # button_tag
# # => <button name="button" type="submit">Button</button> # # => <button name="button" type="submit">Button</button>
...@@ -443,6 +462,12 @@ def button_tag(content_or_options = nil, options = nil, &block) ...@@ -443,6 +462,12 @@ def button_tag(content_or_options = nil, options = nil, &block)
options ||= {} options ||= {}
options = options.stringify_keys options = options.stringify_keys
if confirm = options.delete("confirm")
ActiveSupport::Deprecation.warn ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead'"
options["data-confirm"] = confirm
end
options.reverse_merge! 'name' => 'button', 'type' => 'submit' options.reverse_merge! 'name' => 'button', 'type' => 'submit'
content_tag :button, content_or_options || 'Button', options, &block content_tag :button, content_or_options || 'Button', options, &block
...@@ -457,6 +482,12 @@ def button_tag(content_or_options = nil, options = nil, &block) ...@@ -457,6 +482,12 @@ def button_tag(content_or_options = nil, options = nil, &block)
# * <tt>:disabled</tt> - If set to true, the user will not be able to use this input. # * <tt>:disabled</tt> - If set to true, the user will not be able to use this input.
# * Any other key creates standard HTML options for the tag. # * Any other key creates standard HTML options for the tag.
# #
# ==== Data attributes
#
# * <tt>:confirm => 'question?'</tt> - This will add a JavaScript confirm
# prompt with the question specified. If the user accepts, the form is
# processed normally, otherwise no action is taken.
#
# ==== Examples # ==== Examples
# image_submit_tag("login.png") # image_submit_tag("login.png")
# # => <input src="/images/login.png" type="image" /> # # => <input src="/images/login.png" type="image" />
...@@ -475,6 +506,12 @@ def button_tag(content_or_options = nil, options = nil, &block) ...@@ -475,6 +506,12 @@ def button_tag(content_or_options = nil, options = nil, &block)
def image_submit_tag(source, options = {}) def image_submit_tag(source, options = {})
options = options.stringify_keys options = options.stringify_keys
if confirm = options.delete("confirm")
ActiveSupport::Deprecation.warn ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead'"
options["data-confirm"] = confirm
end
tag :input, { "type" => "image", "src" => path_to_image(source) }.update(options) tag :input, { "type" => "image", "src" => path_to_image(source) }.update(options)
end end
......
...@@ -160,6 +160,12 @@ def url_for(options = nil) ...@@ -160,6 +160,12 @@ def url_for(options = nil)
# completion of the Ajax request and performing JavaScript operations once # completion of the Ajax request and performing JavaScript operations once
# they're complete # they're complete
# #
# ==== Data attributes
#
# * <tt>:confirm => 'question?'</tt> - This will allow the unobtrusive JavaScript
# driver to prompt with the question specified. If the user accepts, the link is
# processed normally, otherwise no action is taken.
#
# ==== Examples # ==== Examples
# Because it relies on +url_for+, +link_to+ supports both older-style controller/action/id arguments # Because it relies on +url_for+, +link_to+ supports both older-style controller/action/id arguments
# and newer RESTful routes. Current Rails style favors RESTful routes whenever possible, so base # and newer RESTful routes. Current Rails style favors RESTful routes whenever possible, so base
...@@ -274,6 +280,12 @@ def link_to(name = nil, options = nil, html_options = nil, &block) ...@@ -274,6 +280,12 @@ def link_to(name = nil, options = nil, html_options = nil, &block)
# * <tt>:form_class</tt> - This controls the class of the form within which the submit button will # * <tt>:form_class</tt> - This controls the class of the form within which the submit button will
# be placed # be placed
# #
# ==== Data attributes
#
# * <tt>:confirm</tt> - This will use the unobtrusive JavaScript driver to
# prompt with the question specified. If the user accepts, the link is
# processed normally, otherwise no action is taken.
#
# ==== Examples # ==== Examples
# <%= button_to "New", :action => "new" %> # <%= button_to "New", :action => "new" %>
# # => "<form method="post" action="/controller/new" class="button_to"> # # => "<form method="post" action="/controller/new" class="button_to">
...@@ -623,8 +635,15 @@ def convert_options_to_data_attributes(options, html_options) ...@@ -623,8 +635,15 @@ def convert_options_to_data_attributes(options, html_options)
html_options = html_options.stringify_keys html_options = html_options.stringify_keys
html_options['data-remote'] = 'true' if link_to_remote_options?(options) || link_to_remote_options?(html_options) html_options['data-remote'] = 'true' if link_to_remote_options?(options) || link_to_remote_options?(html_options)
confirm = html_options.delete('confirm')
method = html_options.delete('method') method = html_options.delete('method')
if confirm
ActiveSupport::Deprecation.warn ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead"
html_options["data-confirm"] = confirm
end
add_method_to_attributes!(html_options, method) if method add_method_to_attributes!(html_options, method) if method
html_options html_options
......
...@@ -386,6 +386,15 @@ def test_submit_tag_with_confirmation ...@@ -386,6 +386,15 @@ def test_submit_tag_with_confirmation
) )
end end
def test_submit_tag_with_deprecated_confirmation
assert_deprecated ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead" do
assert_dom_equal(
%(<input name='commit' type='submit' value='Save' data-confirm="Are you sure?" />),
submit_tag("Save", :confirm => "Are you sure?")
)
end
end
def test_button_tag def test_button_tag
assert_dom_equal( assert_dom_equal(
%(<button name="button" type="submit">Button</button>), %(<button name="button" type="submit">Button</button>),
...@@ -444,6 +453,15 @@ def test_button_tag_with_confirmation ...@@ -444,6 +453,15 @@ def test_button_tag_with_confirmation
) )
end end
def test_button_tag_with_deprecated_confirmation
assert_deprecated ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead" do
assert_dom_equal(
%(<button name="button" type="submit" data-confirm="Are you sure?">Save</button>),
button_tag("Save", :type => "submit", :confirm => "Are you sure?")
)
end
end
def test_image_submit_tag_with_confirmation def test_image_submit_tag_with_confirmation
assert_dom_equal( assert_dom_equal(
%(<input type="image" src="/images/save.gif" data-confirm="Are you sure?" />), %(<input type="image" src="/images/save.gif" data-confirm="Are you sure?" />),
...@@ -451,6 +469,16 @@ def test_image_submit_tag_with_confirmation ...@@ -451,6 +469,16 @@ def test_image_submit_tag_with_confirmation
) )
end end
def test_image_submit_tag_with_deprecated_confirmation
assert_deprecated ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead" do
assert_dom_equal(
%(<input type="image" src="/images/save.gif" data-confirm="Are you sure?" />),
image_submit_tag("save.gif", :confirm => "Are you sure?")
)
end
end
def test_color_field_tag def test_color_field_tag
expected = %{<input id="car" name="car" type="color" />} expected = %{<input id="car" name="car" type="color" />}
assert_dom_equal(expected, color_field_tag("car")) assert_dom_equal(expected, color_field_tag("car"))
......
...@@ -94,6 +94,15 @@ def test_button_to_with_javascript_confirm ...@@ -94,6 +94,15 @@ def test_button_to_with_javascript_confirm
) )
end end
def test_button_to_with_deprecated_confirm
assert_deprecated ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead" do
assert_dom_equal(
"<form method=\"post\" action=\"http://www.example.com\" class=\"button_to\"><div><input data-confirm=\"Are you sure?\" type=\"submit\" value=\"Hello\" /></div></form>",
button_to("Hello", "http://www.example.com", :confirm => "Are you sure?")
)
end
end
def test_button_to_with_javascript_disable_with def test_button_to_with_javascript_disable_with
assert_dom_equal( assert_dom_equal(
"<form method=\"post\" action=\"http://www.example.com\" class=\"button_to\"><div><input data-disable-with=\"Greeting...\" type=\"submit\" value=\"Hello\" /></div></form>", "<form method=\"post\" action=\"http://www.example.com\" class=\"button_to\"><div><input data-disable-with=\"Greeting...\" type=\"submit\" value=\"Hello\" /></div></form>",
...@@ -112,6 +121,15 @@ def test_button_to_with_remote_and_javascript_confirm ...@@ -112,6 +121,15 @@ def test_button_to_with_remote_and_javascript_confirm
) )
end end
def test_button_to_with_remote_and_javascript_with_deprecated_confirm
assert_deprecated ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead" do
assert_dom_equal(
"<form method=\"post\" action=\"http://www.example.com\" class=\"button_to\" data-remote=\"true\"><div><input data-confirm=\"Are you sure?\" type=\"submit\" value=\"Hello\" /></div></form>",
button_to("Hello", "http://www.example.com", :remote => true, :confirm => "Are you sure?")
)
end
end
def test_button_to_with_remote_false def test_button_to_with_remote_false
assert_dom_equal( assert_dom_equal(
"<form method=\"post\" action=\"http://www.example.com\" class=\"button_to\"><div><input type=\"submit\" value=\"Hello\" /></div></form>", "<form method=\"post\" action=\"http://www.example.com\" class=\"button_to\"><div><input type=\"submit\" value=\"Hello\" /></div></form>",
...@@ -220,6 +238,27 @@ def test_link_tag_with_javascript_confirm ...@@ -220,6 +238,27 @@ def test_link_tag_with_javascript_confirm
) )
end end
def test_link_tag_with_deprecated_confirm
assert_deprecated ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead" do
assert_dom_equal(
"<a href=\"http://www.example.com\" data-confirm=\"Are you sure?\">Hello</a>",
link_to("Hello", "http://www.example.com", :confirm => "Are you sure?")
)
end
assert_deprecated ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead" do
assert_dom_equal(
"<a href=\"http://www.example.com\" data-confirm=\"You can't possibly be sure, can you?\">Hello</a>",
link_to("Hello", "http://www.example.com", :confirm => "You can't possibly be sure, can you?")
)
end
assert_deprecated ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead" do
assert_dom_equal(
"<a href=\"http://www.example.com\" data-confirm=\"You can't possibly be sure,\n can you?\">Hello</a>",
link_to("Hello", "http://www.example.com", :confirm => "You can't possibly be sure,\n can you?")
)
end
end
def test_link_to_with_remote def test_link_to_with_remote
assert_dom_equal( assert_dom_equal(
"<a href=\"http://www.example.com\" data-remote=\"true\">Hello</a>", "<a href=\"http://www.example.com\" data-remote=\"true\">Hello</a>",
...@@ -269,6 +308,15 @@ def test_link_tag_using_post_javascript_and_confirm ...@@ -269,6 +308,15 @@ def test_link_tag_using_post_javascript_and_confirm
) )
end end
def test_link_tag_using_post_javascript_and_with_deprecated_confirm
assert_deprecated ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead" do
assert_dom_equal(
"<a href=\"http://www.example.com\" data-method=\"post\" rel=\"nofollow\" data-confirm=\"Are you serious?\">Hello</a>",
link_to("Hello", "http://www.example.com", :method => :post, :confirm => "Are you serious?")
)
end
end
def test_link_tag_using_delete_javascript_and_href_and_confirm def test_link_tag_using_delete_javascript_and_href_and_confirm
assert_dom_equal( assert_dom_equal(
"<a href='\#' rel=\"nofollow\" data-confirm=\"Are you serious?\" data-method=\"delete\">Destroy</a>", "<a href='\#' rel=\"nofollow\" data-confirm=\"Are you serious?\" data-method=\"delete\">Destroy</a>",
...@@ -277,6 +325,16 @@ def test_link_tag_using_delete_javascript_and_href_and_confirm ...@@ -277,6 +325,16 @@ def test_link_tag_using_delete_javascript_and_href_and_confirm
) )
end end
def test_link_tag_using_delete_javascript_and_href_and_with_deprecated_confirm
assert_deprecated ":confirm option is deprecated and will be removed from Rails 4.1. Use ':data => { :confirm => \'Text\' }' instead" do
assert_dom_equal(
"<a href='\#' rel=\"nofollow\" data-confirm=\"Are you serious?\" data-method=\"delete\">Destroy</a>",
link_to("Destroy", "http://www.example.com", :method => :delete, :href => '#', :confirm => "Are you serious?"),
"When specifying url, form should be generated with it, but not this.href"
)
end
end
def test_link_tag_with_block def test_link_tag_with_block
assert_dom_equal '<a href="/"><span>Example site</span></a>', assert_dom_equal '<a href="/"><span>Example site</span></a>',
link_to('/') { content_tag(:span, 'Example site') } link_to('/') { content_tag(:span, 'Example site') }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册