diff options
-rw-r--r-- | actionpack/CHANGELOG | 2 | ||||
-rw-r--r-- | actionpack/lib/action_view/helpers/text_helper.rb | 13 | ||||
-rw-r--r-- | actionpack/test/template/text_helper_test.rb | 3 |
3 files changed, 13 insertions, 5 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index b161b1d552..e49ae64a99 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Added a third parameter to TextHelper#auto_link called href_options for specifying additional tag options on the links generated #1401 [tyler.kovacs@gmail.com]. Example: auto_link(text, :all, { :target => "_blank" }) to have all the generated links open in a new window. + * Fixed TextHelper#highlight to return the text, not nil, if the phrase is blank #1409 [patrick@lenz.sh] * Fixed TagHelper such that :name and 'name' keys in the options doesn't result in two attributes #1455 [take_tk] diff --git a/actionpack/lib/action_view/helpers/text_helper.rb b/actionpack/lib/action_view/helpers/text_helper.rb index 0abd8e79fa..a65a979343 100644 --- a/actionpack/lib/action_view/helpers/text_helper.rb +++ b/actionpack/lib/action_view/helpers/text_helper.rb @@ -1,3 +1,5 @@ +require File.dirname(__FILE__) + '/tag_helper' + module ActionView module Helpers #:nodoc: # Provides a set of methods for working with text strings that can help unburden the level of inline Ruby code in the @@ -116,11 +118,11 @@ module ActionView # auto_link("Go to http://www.rubyonrails.com and say hello to david@loudthinking.com") => # Go to <a href="http://www.rubyonrails.com">http://www.rubyonrails.com</a> and # say hello to <a href="mailto:david@loudthinking.com">david@loudthinking.com</a> - def auto_link(text, link = :all) + def auto_link(text, link = :all, href_options = {}) case link - when :all then auto_link_urls(auto_link_email_addresses(text)) + when :all then auto_link_urls(auto_link_email_addresses(text), href_options) when :email_addresses then auto_link_email_addresses(text) - when :urls then auto_link_urls(text) + when :urls then auto_link_urls(text, href_options) end end @@ -191,13 +193,14 @@ module ActionView end # Turns all urls into clickable links. - def auto_link_urls(text) + def auto_link_urls(text, href_options = {}) text.gsub(/(<\w+.*?>|[^=!:'"\/]|^)((?:http[s]?:\/\/)|(?:www\.))([^\s<]+\/?)([[:punct:]]|\s|<|$)/) do all, a, b, c, d = $&, $1, $2, $3, $4 if a =~ /<a\s/i # don't replace URL's that are already linked all else - %(#{a}<a href="#{b=="www."?"http://www.":b}#{c}">#{b}#{c}</a>#{d}) + extra_options = tag_options(href_options.stringify_keys) || "" + %(#{a}<a href="#{b=="www."?"http://www.":b}#{c}"#{extra_options}>#{b}#{c}</a>#{d}) end end end diff --git a/actionpack/test/template/text_helper_test.rb b/actionpack/test/template/text_helper_test.rb index 81aca6f638..722f08a7cf 100644 --- a/actionpack/test/template/text_helper_test.rb +++ b/actionpack/test/template/text_helper_test.rb @@ -4,6 +4,7 @@ require File.dirname(__FILE__) + '/../../../activesupport/lib/active_support/cor class TextHelperTest < Test::Unit::TestCase include ActionView::Helpers::TextHelper + include ActionView::Helpers::TagHelper def test_simple_format assert_equal "<p>crazy\n<br /> cross\n<br /> platform linebreaks</p>", simple_format("crazy\r\n cross\r platform linebreaks") @@ -77,6 +78,7 @@ class TextHelperTest < Test::Unit::TestCase email_result = %{<a href="mailto:#{email_raw}">#{email_raw}</a>} link_raw = 'http://www.rubyonrails.com' link_result = %{<a href="#{link_raw}">#{link_raw}</a>} + link_result_with_options = %{<a href="#{link_raw}" target="_blank">#{link_raw}</a>} link2_raw = 'www.rubyonrails.com' link2_result = %{<a href="http://#{link2_raw}">#{link2_raw}</a>} @@ -90,6 +92,7 @@ class TextHelperTest < Test::Unit::TestCase assert_equal %(Go to #{link2_raw}), auto_link("Go to #{link2_raw}", :email_addresses) assert_equal %(<p>Link #{link2_result}</p>), auto_link("<p>Link #{link2_raw}</p>") assert_equal %(<p>#{link2_result} Link</p>), auto_link("<p>#{link2_raw} Link</p>") + assert_equal %(<p>Link #{link_result_with_options}</p>), auto_link("<p>Link #{link_raw}</p>", :all, {:target => "_blank"}) end def test_sanitize_form |