From 62fe5bbfb1493bd069a1ebcb5ee45531e49a6582 Mon Sep 17 00:00:00 2001 From: Marcel Molina Date: Fri, 18 Nov 2005 08:32:17 +0000 Subject: Make rjs templates always implicitly skip out on layouts. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3084 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/CHANGELOG | 2 ++ actionpack/lib/action_controller/base.rb | 11 ++++++++--- actionpack/lib/action_controller/layout.rb | 12 +++++++----- actionpack/test/controller/new_render_test.rb | 3 ++- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index c1f30b2b74..e87733b611 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Make rjs templates always implicitly skip out on layouts. [Marcel Molina Jr.] + * Correct length for the truncate text helper. #2913 [Stefan Kaes] * Update to Prototype 1.4.0_rc3. Closes #1893, #2505, #2550, #2748, #2783. [Sam Stephenson] diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb index be04012b9f..225a61f43e 100755 --- a/actionpack/lib/action_controller/base.rb +++ b/actionpack/lib/action_controller/base.rb @@ -637,10 +637,11 @@ module ActionController #:nodoc: end def render_action(action_name, status = nil, with_layout = true) - if with_layout - render_with_layout(default_template_name(action_name), status) + template = default_template_name(action_name) + if with_layout && !template_exempt_from_layout?(template) + render_with_layout(template, status) else - render_with_no_layout(default_template_name(action_name), status) + render_without_layout(template, status) end end @@ -919,6 +920,10 @@ module ActionController #:nodoc: @template.file_public?(template_name) end + def template_exempt_from_layout?(template_name = default_template_name) + @template.javascript_template_exists?(template_name) + end + def assert_existance_of_template_file(template_name) unless template_exists?(template_name) || ignore_missing_templates full_template_path = @template.send(:full_template_path, template_name, 'rhtml') diff --git a/actionpack/lib/action_controller/layout.rb b/actionpack/lib/action_controller/layout.rb index 815a55739f..caf29ea113 100644 --- a/actionpack/lib/action_controller/layout.rb +++ b/actionpack/lib/action_controller/layout.rb @@ -229,11 +229,13 @@ module ActionController #:nodoc: private def apply_layout?(template_with_options, options) - if template_with_options - (options.has_key?(:layout) && options[:layout]!=false) || options.values_at(:text, :file, :inline, :partial, :nothing).compact.empty? - else - true - end + template_with_options ? candidate_for_layout?(options) : !template_exempt_from_layout? + end + + def candidate_for_layout?(options) + (options.has_key?(:layout) && options[:layout] != false) || + options.values_at(:text, :file, :inline, :partial, :nothing).compact.empty? && + !template_exempt_from_layout?(default_template_name(options[:action])) end def pick_layout(template_with_options, options, deprecated_layout) diff --git a/actionpack/test/controller/new_render_test.rb b/actionpack/test/controller/new_render_test.rb index 7cd17f1d55..00458b698a 100644 --- a/actionpack/test/controller/new_render_test.rb +++ b/actionpack/test/controller/new_render_test.rb @@ -192,7 +192,8 @@ class NewRenderTestController < ActionController::Base "partial_only", "partial_only_with_layout", "accessing_params_in_template", "accessing_params_in_template_with_layout", - "render_with_explicit_template" + "render_with_explicit_template", + "test_rendering_rjs_action_explicitly" "layouts/standard" when "builder_layout_test" "layouts/builder" -- cgit v1.2.3