aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/helpers/text_helper.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_view/helpers/text_helper.rb')
-rw-r--r--actionpack/lib/action_view/helpers/text_helper.rb20
1 files changed, 19 insertions, 1 deletions
diff --git a/actionpack/lib/action_view/helpers/text_helper.rb b/actionpack/lib/action_view/helpers/text_helper.rb
index 413f32532d..7b883a8b27 100644
--- a/actionpack/lib/action_view/helpers/text_helper.rb
+++ b/actionpack/lib/action_view/helpers/text_helper.rb
@@ -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