@@ -48,6 +48,26 @@ def to_s
4848 html . html_safe # rubocop:disable Rails/OutputSafety
4949 end
5050
51+ class << self
52+ include ERB ::Util
53+
54+ def shortened_link ( url , rel_me : false )
55+ url = Addressable ::URI . parse ( url ) . to_s
56+ rel = rel_me ? ( DEFAULT_REL + %w( me ) ) : DEFAULT_REL
57+
58+ prefix = url . match ( URL_PREFIX_REGEX ) . to_s
59+ display_url = url [ prefix . length , 30 ]
60+ suffix = url [ prefix . length + 30 ..-1 ]
61+ cutoff = url [ prefix . length ..-1 ] . length > 30
62+
63+ <<~HTML . squish
64+ < a href ="#{ h ( url ) } " target="_blank" rel="#{ rel . join ( ' ' ) } " translate="no"> < span class ="invisible "> #{ h ( prefix ) } </ span> < span class ="#{ cutoff ? 'ellipsis' : '' } "> #{ h ( display_url ) } </ span> < span class ="invisible "> #{ h ( suffix ) } </ span> </ a>
65+ HTML
66+ rescue Addressable ::URI ::InvalidURIError , IDN ::Idna ::IdnaError
67+ h ( url )
68+ end
69+ end
70+
5171 private
5272
5373 def rewrite
@@ -70,19 +90,7 @@ def rewrite
7090 end
7191
7292 def link_to_url ( entity )
73- url = Addressable ::URI . parse ( entity [ :url ] ) . to_s
74- rel = with_rel_me? ? ( DEFAULT_REL + %w( me ) ) : DEFAULT_REL
75-
76- prefix = url . match ( URL_PREFIX_REGEX ) . to_s
77- display_url = url [ prefix . length , 30 ]
78- suffix = url [ prefix . length + 30 ..-1 ]
79- cutoff = url [ prefix . length ..-1 ] . length > 30
80-
81- <<~HTML . squish
82- < a href ="#{ h ( url ) } " target="_blank" rel="#{ rel . join ( ' ' ) } " translate="no"> < span class ="invisible "> #{ h ( prefix ) } </ span> < span class ="#{ cutoff ? 'ellipsis' : '' } "> #{ h ( display_url ) } </ span> < span class ="invisible "> #{ h ( suffix ) } </ span> </ a>
83- HTML
84- rescue Addressable ::URI ::InvalidURIError , IDN ::Idna ::IdnaError
85- h ( entity [ :url ] )
93+ TextFormatter . shortened_link ( entity [ :url ] , rel_me : with_rel_me? )
8694 end
8795
8896 def link_to_hashtag ( entity )
0 commit comments