mirror of
https://github.com/github/rails.git
synced 2026-04-04 03:00:58 -04:00
Try replacing _erbout with @output_buffer
This commit is contained in:
@@ -178,10 +178,7 @@ module ActionView #:nodoc:
|
||||
# that alert()s the caught exception (and then re-raises it).
|
||||
@@debug_rjs = false
|
||||
cattr_accessor :debug_rjs
|
||||
|
||||
@@erb_variable = '_erbout'
|
||||
cattr_accessor :erb_variable
|
||||
|
||||
|
||||
attr_internal :request
|
||||
|
||||
delegate :request_forgery_protection_token, :template, :params, :session, :cookies, :response, :headers,
|
||||
|
||||
@@ -31,20 +31,13 @@ module ActionView
|
||||
# </body></html>
|
||||
#
|
||||
def capture(*args, &block)
|
||||
# execute the block
|
||||
begin
|
||||
buffer = eval(ActionView::Base.erb_variable, block.binding)
|
||||
rescue
|
||||
buffer = nil
|
||||
end
|
||||
|
||||
if buffer.nil?
|
||||
capture_block(*args, &block).to_s
|
||||
else
|
||||
capture_erb_with_buffer(buffer, *args, &block).to_s
|
||||
end
|
||||
@output_buffer, old_buffer = '', @output_buffer
|
||||
yield *args
|
||||
@output_buffer
|
||||
ensure
|
||||
@output_buffer = old_buffer
|
||||
end
|
||||
|
||||
|
||||
# Calling content_for stores a block of markup in an identifier for later use.
|
||||
# You can make subsequent calls to the stored content in other templates or the layout
|
||||
# by passing the identifier as an argument to <tt>yield</tt>.
|
||||
@@ -121,40 +114,19 @@ module ActionView
|
||||
# named <tt>@content_for_#{name_of_the_content_block}</tt>. The preferred usage is now
|
||||
# <tt><%= yield :footer %></tt>.
|
||||
def content_for(name, content = nil, &block)
|
||||
existing_content_for = instance_variable_get("@content_for_#{name}").to_s
|
||||
new_content_for = existing_content_for + (block_given? ? capture(&block) : content)
|
||||
instance_variable_set("@content_for_#{name}", new_content_for)
|
||||
ivar = "@content_for_#{name}"
|
||||
instance_variable_set("@content_for_#{name}", "#{instance_variable_get(ivar)}#{block_given? ? capture(&block) : content}")
|
||||
end
|
||||
|
||||
private
|
||||
def capture_block(*args, &block)
|
||||
block.call(*args)
|
||||
end
|
||||
|
||||
def capture_erb(*args, &block)
|
||||
buffer = eval(ActionView::Base.erb_variable, block.binding)
|
||||
capture_erb_with_buffer(buffer, *args, &block)
|
||||
end
|
||||
|
||||
def capture_erb_with_buffer(buffer, *args, &block)
|
||||
pos = buffer.length
|
||||
block.call(*args)
|
||||
|
||||
# extract the block
|
||||
data = buffer[pos..-1]
|
||||
|
||||
# replace it in the original with empty string
|
||||
buffer[pos..-1] = ''
|
||||
|
||||
data
|
||||
end
|
||||
|
||||
def erb_content_for(name, &block)
|
||||
eval "@content_for_#{name} = (@content_for_#{name} || '') + capture_erb(&block)"
|
||||
ivar = "@content_for_#{name}"
|
||||
instance_variable_set(ivar, "#{instance_variable_get(ivar)}#{capture(&block)}")
|
||||
end
|
||||
|
||||
def block_content_for(name, &block)
|
||||
eval "@content_for_#{name} = (@content_for_#{name} || '') + capture_block(&block)"
|
||||
|
||||
def block_content_for(name)
|
||||
ivar = "@content_for_#{name}"
|
||||
instance_variable_set(ivar, "#{instance_variable_get(ivar)}#{yield}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -208,7 +208,7 @@ module ActionView
|
||||
|
||||
private
|
||||
def block_is_within_action_view?(block)
|
||||
eval("defined? _erbout", block.binding)
|
||||
!@output_buffer.nil?
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -126,7 +126,7 @@ module ActionView
|
||||
end
|
||||
|
||||
def block_is_within_action_view?(block)
|
||||
eval("defined? _erbout", block.binding)
|
||||
!@output_buffer.nil?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -25,8 +25,12 @@ module ActionView
|
||||
# end
|
||||
# # will either display "Logged in!" or a login link
|
||||
# %>
|
||||
def concat(string, binding)
|
||||
eval(ActionView::Base.erb_variable, binding) << string
|
||||
def concat(string, binding = nil)
|
||||
if @output_buffer
|
||||
@output_buffer << string
|
||||
else
|
||||
string
|
||||
end
|
||||
end
|
||||
|
||||
if RUBY_VERSION < '1.9'
|
||||
|
||||
@@ -43,13 +43,11 @@ module ActionView
|
||||
include Compilable
|
||||
|
||||
def compile(template)
|
||||
::ERB.new(template.source, nil, @view.erb_trim_mode).src
|
||||
::ERB.new(template.source, nil, @view.erb_trim_mode, '@output_buffer').src
|
||||
end
|
||||
|
||||
def cache_fragment(block, name = {}, options = nil) #:nodoc:
|
||||
@view.fragment_for(block, name, options) do
|
||||
eval(ActionView::Base.erb_variable, block.binding)
|
||||
end
|
||||
@view.fragment_for(block, name, options) { @view.output_buffer }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user