about summary refs log tree commit diff
path: root/app/lib
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2017-02-22 19:35:11 +0100
committerEugen Rochko <eugen@zeonfederated.com>2017-02-22 19:35:11 +0100
commit3202bdd74416035f81170e978129bbffb3151ed2 (patch)
tree7bccc38101a8b412927ed4c054912728e577f648 /app/lib
parentc96fd24f48c388116b6a1b42cc0be693aa428d0f (diff)
Fix #555 - Use a better URL parser
Diffstat (limited to 'app/lib')
-rw-r--r--app/lib/formatter.rb10
1 files changed, 6 insertions, 4 deletions
diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb
index 044407a6c..073ab0784 100644
--- a/app/lib/formatter.rb
+++ b/app/lib/formatter.rb
@@ -9,6 +9,8 @@ class Formatter
   include ActionView::Helpers::TextHelper
   include ActionView::Helpers::SanitizeHelper
 
+  AUTOLINK_RE = /https?:\/\/([\S]+\.[!#$&-;=?-[\]_a-z~]|%[\w\d]{2}]+[\w])/i
+
   def format(status)
     return reformat(status.content) unless status.local?
 
@@ -44,9 +46,9 @@ class Formatter
   end
 
   def link_urls(html)
-    html.gsub(URI.regexp(%w(http https))) do |match|
-      link_html(match)
-    end
+    Twitter::Autolink.auto_link_urls(html, url_target: '_blank',
+                                           link_attribute_block: lambda { |_, a| a[:rel] << ' noopener' },
+                                           link_text_block: lambda { |_, text| link_html(text) })
   end
 
   def link_mentions(html, mentions)
@@ -70,7 +72,7 @@ class Formatter
     suffix = url[prefix.length + 30..-1]
     cutoff = url[prefix.length..-1].length > 30
 
-    "<a rel=\"nofollow noopener\" target=\"_blank\" href=\"#{url}\"><span class=\"invisible\">#{prefix}</span><span class=\"#{cutoff ? 'ellipsis' : ''}\">#{text}</span><span class=\"invisible\">#{suffix}</span></a>"
+    "<span class=\"invisible\">#{prefix}</span><span class=\"#{cutoff ? 'ellipsis' : ''}\">#{text}</span><span class=\"invisible\">#{suffix}</span>"
   end
 
   def hashtag_html(match)