From 0b0931e15066a04bb5aea8dac910497ddb5f9b33 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Sat, 15 Sep 2007 21:34:25 +0000 Subject: Added block-acceptance to JavaScriptHelper#javascript_tag (closes #7527) [BobSilva/tarmo/rmm5t] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7485 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- .../lib/action_view/helpers/javascript_helper.rb | 32 +++++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'actionpack/lib/action_view/helpers') diff --git a/actionpack/lib/action_view/helpers/javascript_helper.rb b/actionpack/lib/action_view/helpers/javascript_helper.rb index 51cbfb95d9..45a5791efe 100644 --- a/actionpack/lib/action_view/helpers/javascript_helper.rb +++ b/actionpack/lib/action_view/helpers/javascript_helper.rb @@ -156,7 +156,6 @@ module ActionView # javascript_tag "alert('All is good')" # # Returns: - # # # # +html_options+ may be a hash of attributes for the - def javascript_tag(content, html_options = {}) - content_tag("script", javascript_cdata_section(content), html_options.merge(:type => Mime::JS)) + # javascript_tag "alert('All is good')", :defer => 'defer' + # # => + # + # Instead of passing the content as an argument, you can also use a block + # in which case, you pass your +html_options+ as the first parameter. + # <% javascript_tag :defer => 'defer' do -%> + # alert('All is good') + # <% end -%> + def javascript_tag(content_or_options_with_block = nil, html_options = {}, &block) + if block_given? + html_options = content_or_options_with_block if content_or_options_with_block.is_a?(Hash) + content = capture(&block) + else + content = content_or_options_with_block + end + + javascript_tag = content_tag("script", javascript_cdata_section(content), html_options.merge(:type => Mime::JS)) + + if block_given? && block_is_within_action_view?(block) + concat(javascript_tag, block.binding) + else + javascript_tag + end end def javascript_cdata_section(content) #:nodoc: @@ -186,6 +205,11 @@ module ActionView end js_option end + + private + def block_is_within_action_view?(block) + eval("defined? _erbout", block.binding) + end end JavascriptHelper = JavaScriptHelper unless const_defined? :JavascriptHelper -- cgit v1.2.3