mirror of
https://github.com/github/rails.git
synced 2026-01-25 22:38:33 -05:00
Fix autolinking to not include trailing tags as part of the URL
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2237 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
@@ -279,9 +279,27 @@ module ActionView
|
||||
text.gsub(/([\\|?+*\/\)\(])/) { |m| "\\#{$1}" }
|
||||
end
|
||||
|
||||
AUTO_LINK_RE = /
|
||||
( # leading text
|
||||
<\w+.*?>| # leading HTML tag, or
|
||||
[^=!:'"\/]| # leading punctuation, or
|
||||
^ # beginning of line
|
||||
)
|
||||
(
|
||||
(?:http[s]?:\/\/)| # protocol spec, or
|
||||
(?:www\.) # www.*
|
||||
)
|
||||
(
|
||||
([\w]+[\/.-]?)* # url segment
|
||||
\w+[\/]? # url tail
|
||||
(?:\#\w*)? # trailing anchor
|
||||
)
|
||||
([[:punct:]]|\s|<|$) # trailing text
|
||||
/x
|
||||
|
||||
# Turns all urls into clickable links.
|
||||
def auto_link_urls(text, href_options = {})
|
||||
text.gsub(/(<\w+.*?>|[^=!:'"\/]|^)((?:http[s]?:\/\/)|(?:www\.))(([\w]+[[:punct:]]?)*\w+[\/]?)([[:punct:]]|\s|<|$)/) do
|
||||
text.gsub(AUTO_LINK_RE) do
|
||||
all, a, b, c, d = $&, $1, $2, $3, $5
|
||||
if a =~ /<a\s/i # don't replace URL's that are already linked
|
||||
all
|
||||
|
||||
@@ -119,6 +119,13 @@ class TextHelperTest < Test::Unit::TestCase
|
||||
assert_equal %(<p>Go to #{link3_result}. seriously, #{link3_result}? i think I'll say hello to #{email_result}. instead.</p>), auto_link(%(<p>Go to #{link3_raw}. seriously, #{link3_raw}? i think I'll say hello to #{email_raw}. instead.</p>))
|
||||
end
|
||||
|
||||
def test_auto_link_at_eol
|
||||
url1 = "http://api.rubyonrails.com/Foo.html"
|
||||
url2 = "http://www.ruby-doc.org/core/Bar.html"
|
||||
|
||||
assert_equal %(<p><a href="#{url1}">#{url1}</a><br /><a href="#{url2}">#{url2}</a><br /></p>), auto_link("<p>#{url1}<br />#{url2}<br /></p>")
|
||||
end
|
||||
|
||||
def test_sanitize_form
|
||||
raw = "<form action=\"/foo/bar\" method=\"post\"><input></form>"
|
||||
result = sanitize(raw)
|
||||
|
||||
Reference in New Issue
Block a user