From 6c062054cdb236fead5d09679985ebb70d8b053a Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 23 Oct 2006 22:57:59 +0000 Subject: Added block-usage to TagHelper#content_tag [DHH] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5344 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_view/helpers/tag_helper.rb | 28 ++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) (limited to 'actionpack/lib') diff --git a/actionpack/lib/action_view/helpers/tag_helper.rb b/actionpack/lib/action_view/helpers/tag_helper.rb index f913c99abb..8b8c7b491c 100644 --- a/actionpack/lib/action_view/helpers/tag_helper.rb +++ b/actionpack/lib/action_view/helpers/tag_helper.rb @@ -15,11 +15,26 @@ module ActionView end # Examples: - # * content_tag("p", "Hello world!") =>

Hello world!

- # * content_tag("div", content_tag("p", "Hello world!"), "class" => "strong") => + # * content_tag(:p, "Hello world!") =>

Hello world!

+ # * content_tag(:div, content_tag(:p, "Hello world!"), :class => "strong") => #

Hello world!

- def content_tag(name, content, options = nil) - "<#{name}#{tag_options(options.stringify_keys) if options}>#{content}" + # + # ERb example: + # <% content_tag :div, :class => "strong" %> + # Hello world! + # <% end %> + # + # Will output: + #

Hello world!

+ def content_tag(name, content_or_options_with_block = nil, options = nil, &block) + if block_given? + options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash) + content = capture(&block) + concat(content_tag_string(name, content, options), block.binding) + else + content = content_or_options_with_block + content_tag_string(name, content, options) + end end # Returns a CDATA section for the given +content+. CDATA sections @@ -41,6 +56,11 @@ module ActionView end private + def content_tag_string(name, content, options) + tag_options = options ? tag_options(options.stringify_keys) : "" + "<#{name}#{tag_options}>#{content}" + end + def tag_options(options) cleaned_options = convert_booleans(options.stringify_keys.reject {|key, value| value.nil?}) ' ' + cleaned_options.map {|key, value| %(#{key}="#{escape_once(value)}")}.sort * ' ' unless cleaned_options.empty? -- cgit v1.2.3