11# frozen_string_literal: true
22
3+ require "twitter"
4+ require "json"
5+ require "uri"
6+ require "html/pipeline"
7+ require "html/pipeline/hashtag/hashtag_filter"
8+
39class Note < Content
4- require "twitter"
5- require "json"
6- require "uri"
710 include PublifyGuid
811 include ConfigManager
912
@@ -30,6 +33,40 @@ class Note < Content
3033 TWITTER_HTTPS_URL_LENGTH = 21
3134 TWITTER_LINK_LENGTH = 22
3235
36+ class TwitterHashtagFilter < HTML ::Pipeline ::HashtagFilter
37+ def initialize ( text )
38+ super ( text ,
39+ tag_url : "https://twitter.com/search?q=%%23%<tag>s&src=tren&mode=realtime" ,
40+ tag_link_attr : "" )
41+ end
42+ end
43+
44+ class TwitterMentionFilter < HTML ::Pipeline ::MentionFilter
45+ def initialize ( text )
46+ super ( text , base_url : "https://twitter.com" )
47+ end
48+
49+ # Override base mentions finder, treating @mention just like any other @foo.
50+ def self . mentioned_logins_in ( text , username_pattern = UsernamePattern )
51+ text . gsub MentionPatterns [ username_pattern ] do |match |
52+ login = Regexp . last_match ( 1 )
53+ yield match , login , false
54+ end
55+ end
56+
57+ # Override base link creator, removing the class
58+ def link_to_mentioned_user ( login )
59+ result [ :mentioned_usernames ] |= [ login ]
60+
61+ url = base_url . dup
62+ url << "/" unless %r{[/~]\z } . match? ( url )
63+
64+ "<a href='#{ url << login } '>" \
65+ "@#{ login } " \
66+ "</a>"
67+ end
68+ end
69+
3370 def set_permalink
3471 self . permalink = "#{ id } -#{ body . to_permalink [ 0 ..79 ] } " if permalink . blank?
3572 save
@@ -43,8 +80,22 @@ def tags
4380 [ ]
4481 end
4582
83+ def generate_html ( field , text = nil )
84+ if field == :in_reply_to
85+ html = TextFilter . make_filter ( "none" ) . filter_text ( text )
86+ html_postprocess ( field , html ) . to_s
87+ else
88+ super
89+ end
90+ end
91+
4692 def html_postprocess ( field , html )
47- super ( field , PublifyCore ::TextFilter ::Twitterfilter . filtertext ( html ) )
93+ helper = PublifyCore ::ContentTextHelpers . new
94+ html = helper . auto_link ( html )
95+
96+ html = TwitterHashtagFilter . new ( html ) . call
97+ html = TwitterMentionFilter . new ( html ) . call . to_s
98+ super
4899 end
49100
50101 def truncate ( message , length )
0 commit comments