From 8c8652c37f6f6969ce48d579a8c9a8ff668f995a Mon Sep 17 00:00:00 2001 From: Prem Sichanugrist Date: Thu, 9 Jun 2011 14:00:10 -0400 Subject: Make sure `escape_javascript` return `SafeBuffer` if the incoming argument is already html_safe --- actionpack/CHANGELOG | 2 ++ actionpack/lib/action_view/helpers/javascript_helper.rb | 3 ++- actionpack/test/template/javascript_helper_test.rb | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 42baf6f45f..5314dcc193 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *Rails 3.2.0 (unreleased)* +* Make sure escape_js returns SafeBuffer string if it receives SafeBuffer string [Prem Sichanugrist] + * Fix escape_js to work correctly with the new SafeBuffer restriction [Paul Gallagher] * Brought back alternative convention for namespaced models in i18n [thoefer] diff --git a/actionpack/lib/action_view/helpers/javascript_helper.rb b/actionpack/lib/action_view/helpers/javascript_helper.rb index 8a6f2e84be..4484390fde 100644 --- a/actionpack/lib/action_view/helpers/javascript_helper.rb +++ b/actionpack/lib/action_view/helpers/javascript_helper.rb @@ -18,7 +18,8 @@ module ActionView # $('some_element').replaceWith('<%=j render 'some/element_template' %>'); def escape_javascript(javascript) if javascript - javascript.gsub(/(\\|<\/|\r\n|[\n\r"'])/) {|match| JS_ESCAPE_MAP[match] } + result = javascript.gsub(/(\\|<\/|\r\n|[\n\r"'])/) {|match| JS_ESCAPE_MAP[match] } + javascript.html_safe? ? result.html_safe : result else '' end diff --git a/actionpack/test/template/javascript_helper_test.rb b/actionpack/test/template/javascript_helper_test.rb index 15bd6b4c47..dd8b7b7cd5 100644 --- a/actionpack/test/template/javascript_helper_test.rb +++ b/actionpack/test/template/javascript_helper_test.rb @@ -35,6 +35,8 @@ class JavaScriptHelperTest < ActionView::TestCase expect = %(\\'quoted\\' \\"double-quoted\\" new-line:\\n <\\/closed>) assert_equal expect, escape_javascript(given) assert_equal expect, escape_javascript(ActiveSupport::SafeBuffer.new(given)) + assert_instance_of String, escape_javascript(given) + assert_instance_of ActiveSupport::SafeBuffer, escape_javascript(ActiveSupport::SafeBuffer.new(given)) end def test_button_to_function -- cgit v1.2.3