From b1c4469f9cb3800adb99d062c6748154bc0e1b16 Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Mon, 4 Mar 2013 20:36:25 -0800 Subject: Use ActionView::OutputBuffer#safe_append= from templates --- actionpack/lib/action_view/template/handlers/erb.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'actionpack/lib/action_view/template') diff --git a/actionpack/lib/action_view/template/handlers/erb.rb b/actionpack/lib/action_view/template/handlers/erb.rb index 5aaafc15c1..52534655eb 100644 --- a/actionpack/lib/action_view/template/handlers/erb.rb +++ b/actionpack/lib/action_view/template/handlers/erb.rb @@ -11,7 +11,7 @@ module ActionView def add_text(src, text) return if text.empty? - src << "@output_buffer.safe_concat('" << escape_text(text) << "');" + src << "@output_buffer.safe_append='" << escape_text(text) << "';" end # Erubis toggles <%= and <%== behavior when escaping is enabled. @@ -31,7 +31,7 @@ module ActionView if code =~ BLOCK_EXPR src << '@output_buffer.append= ' << code else - src << '@output_buffer.append= (' << code << ');' + src << '@output_buffer.append=(' << code << ');' end end @@ -39,7 +39,7 @@ module ActionView if code =~ BLOCK_EXPR src << "@output_buffer.safe_append= " << code else - src << "@output_buffer.safe_concat((" << code << ").to_s);" + src << "@output_buffer.safe_append=(" << code << ");" end end -- cgit v1.2.3 From bd308a0d02c4a6459c05770a564405986a663f47 Mon Sep 17 00:00:00 2001 From: Aman Gupta Date: Mon, 4 Mar 2013 20:40:58 -0800 Subject: avoid extra method calls for appending newlines before: ');@output_buffer.append= ( content_icon row[:content] );@output_buffer.safe_concat(' ');@output_buffer.safe_concat(' ');@output_buffer.append= ( spinner_img );@output_buffer.safe_concat(' ');@output_buffer.safe_concat(' ');@output_buffer.append= ( content_link row[:content] );@output_buffer.safe_concat(' ');@output_buffer.safe_concat(' '); after: ';@output_buffer.append=( content_icon row[:content] );@output_buffer.safe_append=' ';@output_buffer.append=( spinner_img );@output_buffer.safe_append=' ';@output_buffer.append=( content_link row[:content] );@output_buffer.safe_append=' '; --- .../lib/action_view/template/handlers/erb.rb | 28 +++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'actionpack/lib/action_view/template') diff --git a/actionpack/lib/action_view/template/handlers/erb.rb b/actionpack/lib/action_view/template/handlers/erb.rb index 52534655eb..7d7a7af51d 100644 --- a/actionpack/lib/action_view/template/handlers/erb.rb +++ b/actionpack/lib/action_view/template/handlers/erb.rb @@ -6,12 +6,23 @@ module ActionView module Handlers class Erubis < ::Erubis::Eruby def add_preamble(src) + @newline_pending = 0 src << "@output_buffer = output_buffer || ActionView::OutputBuffer.new;" end def add_text(src, text) return if text.empty? - src << "@output_buffer.safe_append='" << escape_text(text) << "';" + + if text == "\n" + @newline_pending += 1 + else + src << "@output_buffer.safe_append='" + src << "\n" * @newline_pending if @newline_pending > 0 + src << escape_text(text) + src << "';" + + @newline_pending = 0 + end end # Erubis toggles <%= and <%== behavior when escaping is enabled. @@ -28,6 +39,7 @@ module ActionView BLOCK_EXPR = /\s+(do|\{)(\s*\|[^|]*\|)?\s*\Z/ def add_expr_literal(src, code) + flush_newline_if_pending(src) if code =~ BLOCK_EXPR src << '@output_buffer.append= ' << code else @@ -36,6 +48,7 @@ module ActionView end def add_expr_escaped(src, code) + flush_newline_if_pending(src) if code =~ BLOCK_EXPR src << "@output_buffer.safe_append= " << code else @@ -43,9 +56,22 @@ module ActionView end end + def add_stmt(src, code) + flush_newline_if_pending(src) + super + end + def add_postamble(src) + flush_newline_if_pending(src) src << '@output_buffer.to_s' end + + def flush_newline_if_pending(src) + if @newline_pending > 0 + src << "@output_buffer.safe_append='#{"\n" * @newline_pending}';" + @newline_pending = 0 + end + end end class ERB -- cgit v1.2.3