diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2008-11-01 12:03:49 +0100 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2008-11-01 12:03:49 +0100 |
commit | cbeac93310a7e95453bea3f2d4551288fd455d07 (patch) | |
tree | fed49136581bf2f15b0616139b1e8ff0baed7434 | |
parent | 408c7227575e0c395a45605783cade1ba3b51e02 (diff) | |
download | rails-cbeac93310a7e95453bea3f2d4551288fd455d07.tar.gz rails-cbeac93310a7e95453bea3f2d4551288fd455d07.tar.bz2 rails-cbeac93310a7e95453bea3f2d4551288fd455d07.zip |
Added render :js for people who want to render inline JavaScript replies without using RJS [DHH]
-rw-r--r-- | actionpack/lib/action_controller/base.rb | 24 | ||||
-rw-r--r-- | actionpack/test/controller/render_test.rb | 10 | ||||
-rw-r--r-- | activesupport/CHANGELOG | 2 |
3 files changed, 35 insertions, 1 deletions
diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb index e73fc32c59..09bad569e5 100644 --- a/actionpack/lib/action_controller/base.rb +++ b/actionpack/lib/action_controller/base.rb @@ -801,6 +801,19 @@ module ActionController #:nodoc: # # Renders "Hello from code!" # render :text => proc { |response, output| output.write("Hello from code!") } # + # === Rendering XML + # + # Rendering XML sets the content type to application/xml. + # + # # Renders '<name>David</name>' + # render :xml => {:name => "David"}.to_xml + # + # It's not necessary to call <tt>to_xml</tt> on the object you want to render, since <tt>render</tt> will + # automatically do that for you: + # + # # Also renders '<name>David</name>' + # render :xml => {:name => "David"} + # # === Rendering JSON # # Rendering JSON sets the content type to application/json and optionally wraps the JSON in a callback. It is expected @@ -846,7 +859,12 @@ module ActionController #:nodoc: # page.visual_effect :highlight, 'user_list' # end # - # === Rendering with status and location headers + # === Rendering vanilla JavaScript + # + # In addition to using RJS with render :update, you can also just render vanilla JavaScript with :js. + # + # # Renders "alert('hello')" and sets the mime type to text/javascript + # render :js => "alert('hello')" # # All renders take the <tt>:status</tt> and <tt>:location</tt> options and turn them into headers. They can even be used together: # @@ -898,6 +916,10 @@ module ActionController #:nodoc: response.content_type ||= Mime::XML render_for_text(xml.respond_to?(:to_xml) ? xml.to_xml : xml, options[:status]) + elsif js = options[:js] + response.content_type ||= Mime::JS + render_for_text(js, options[:status]) + elsif json = options[:json] json = json.to_json unless json.is_a?(String) json = "#{options[:callback]}(#{json})" unless options[:callback].blank? diff --git a/actionpack/test/controller/render_test.rb b/actionpack/test/controller/render_test.rb index da9702a634..df9376727f 100644 --- a/actionpack/test/controller/render_test.rb +++ b/actionpack/test/controller/render_test.rb @@ -184,6 +184,10 @@ class TestController < ActionController::Base render("test/hello") end + def render_vanilla_js_hello + render :js => "alert('hello')" + end + def render_xml_hello @name = "David" render :template => "test/hello" @@ -844,6 +848,12 @@ class RenderTest < Test::Unit::TestCase assert_equal "test", @response.body # name is explicitly set to 'test' inside the controller. end + def test_render_vanilla_js + get :render_vanilla_js_hello + assert_equal "alert('hello')", @response.body + assert_equal "text/javascript", @response.content_type + end + def test_render_xml get :render_xml_hello assert_equal "<html>\n <p>Hello David</p>\n<p>This is grand!</p>\n</html>\n", @response.body diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG index 6362d869b7..e77affc315 100644 --- a/activesupport/CHANGELOG +++ b/activesupport/CHANGELOG @@ -1,5 +1,7 @@ *2.2.1 [RC2 or 2.2 final]* +* Added render :js for people who want to render inline JavaScript replies without using RJS [DHH] + * Fixed the option merging in Array#to_xml #1126 [Rudolf Gavlas] * Make I18n::Backend::Simple reload its translations in development mode [DHH/Sven Fuchs] |