mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Added that requests with JavaScript as the priority mime type in the accept header and no format extension in the parameters will be treated as though their format was :js when it comes to determining which template to render. This makes it possible for JS requests to automatically render action.js.rjs files without an explicit respond_to block [DHH]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8956 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
18aa19c68a
commit
7dcd0d7d96
4 changed files with 30 additions and 2 deletions
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* Added that requests with JavaScript as the priority mime type in the accept header and no format extension in the parameters will be treated as though their format was :js when it comes to determining which template to render. This makes it possible for JS requests to automatically render action.js.rjs files without an explicit respond_to block [DHH]
|
||||
|
||||
* Tests for distance_of_time_in_words with TimeWithZone instances. Closes #10914 [ernesto.jimenez]
|
||||
|
||||
* Remove support for multivalued (e.g., '&'-delimited) cookies. [Jamis Buck]
|
||||
|
|
|
@ -344,10 +344,29 @@ If you are rendering a subtemplate, you must now use controller-like partial syn
|
|||
end
|
||||
|
||||
# symbolized version of the :format parameter of the request, or :html by default.
|
||||
#
|
||||
# EXCEPTION: If the :format parameter is not set, the Accept header will be examined for
|
||||
# whether it contains the JavaScript mime type as its first priority. If that's the case,
|
||||
# it will be used. This ensures that Ajax applications can use the same URL to support both
|
||||
# JavaScript and non-JavaScript users.
|
||||
def template_format
|
||||
return @template_format if @template_format
|
||||
format = controller && controller.respond_to?(:request) && controller.request.parameters[:format]
|
||||
@template_format = format.blank? ? :html : format.to_sym
|
||||
|
||||
if controller && controller.respond_to?(:request)
|
||||
parameter_format = controller.request.parameters[:format]
|
||||
accept_format = controller.request.accepts.first
|
||||
|
||||
case
|
||||
when parameter_format.blank? && accept_format != :js
|
||||
@template_format = :html
|
||||
when parameter_format.blank? && accept_format == :js
|
||||
@template_format = :js
|
||||
else
|
||||
@template_format = parameter_format.to_sym
|
||||
end
|
||||
else
|
||||
@template_format = :html
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -550,6 +550,12 @@ EOS
|
|||
assert_equal "<p>This is grand!</p>\n", @response.body
|
||||
end
|
||||
|
||||
def test_render_with_default_from_accept_header
|
||||
@request.env["HTTP_ACCEPT"] = "text/javascript"
|
||||
get :greeting
|
||||
assert_equal "$(\"body\").visualEffect(\"highlight\");", @response.body
|
||||
end
|
||||
|
||||
def test_render_rjs_with_default
|
||||
get :delete_with_js
|
||||
assert_equal %!Element.remove("person");\nnew Effect.Highlight(\"project-4\",{});!, @response.body
|
||||
|
|
1
actionpack/test/fixtures/test/greeting.js.rjs
vendored
Normal file
1
actionpack/test/fixtures/test/greeting.js.rjs
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
page[:body].visual_effect :highlight
|
Loading…
Reference in a new issue