aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/CHANGELOG2
-rwxr-xr-xactionpack/lib/action_controller/base.rb11
-rw-r--r--actionpack/lib/action_controller/layout.rb12
-rw-r--r--actionpack/test/controller/new_render_test.rb3
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"