forked from treehouse/mastodon
Fix #13, Atom feeds now contain formatted post content
parent
580b91c387
commit
071f64d317
|
@ -12,6 +12,17 @@ module ApplicationHelper
|
||||||
id.start_with?("tag:#{Rails.configuration.x.local_domain}")
|
id.start_with?("tag:#{Rails.configuration.x.local_domain}")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def linkify(status)
|
||||||
|
mention_hash = {}
|
||||||
|
status.mentions.each { |m| mention_hash[m.acct] = m }
|
||||||
|
coder = HTMLEntities.new
|
||||||
|
|
||||||
|
auto_link(coder.encode(status.text), link: :urls, html: { rel: 'nofollow noopener' }).gsub(Account::MENTION_RE) do |m|
|
||||||
|
account = mention_hash[Account::MENTION_RE.match(m)[1]]
|
||||||
|
return "#{m.split('@').first}<a href=\"#{url_for_target(account)}\" class=\"mention\">@<span>#{account.acct}</span></a>"
|
||||||
|
end.html_safe
|
||||||
|
end
|
||||||
|
|
||||||
def active_nav_class(path)
|
def active_nav_class(path)
|
||||||
current_page?(path) ? 'active' : ''
|
current_page?(path) ? 'active' : ''
|
||||||
end
|
end
|
||||||
|
|
|
@ -135,6 +135,22 @@ module AtomBuilderHelper
|
||||||
xml.logo url
|
xml.logo url
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def conditionally_formatted(activity)
|
||||||
|
if activity.is_a?(Status)
|
||||||
|
if activity.reblog? && activity.reblog.local?
|
||||||
|
linkify(activity.reblog)
|
||||||
|
elsif activity.local?
|
||||||
|
linkify(activity)
|
||||||
|
else
|
||||||
|
activity.content
|
||||||
|
end
|
||||||
|
elsif activity.nil?
|
||||||
|
''
|
||||||
|
else
|
||||||
|
activity.content
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def include_author(xml, account)
|
def include_author(xml, account)
|
||||||
object_type xml, :person
|
object_type xml, :person
|
||||||
uri xml, url_for_target(account)
|
uri xml, url_for_target(account)
|
||||||
|
@ -150,7 +166,7 @@ module AtomBuilderHelper
|
||||||
published_at xml, stream_entry.created_at
|
published_at xml, stream_entry.created_at
|
||||||
updated_at xml, stream_entry.updated_at
|
updated_at xml, stream_entry.updated_at
|
||||||
title xml, stream_entry.title
|
title xml, stream_entry.title
|
||||||
content xml, stream_entry.content
|
content xml, conditionally_formatted(stream_entry.activity)
|
||||||
verb xml, stream_entry.verb
|
verb xml, stream_entry.verb
|
||||||
link_self xml, account_stream_entry_url(stream_entry.account, stream_entry, format: 'atom')
|
link_self xml, account_stream_entry_url(stream_entry.account, stream_entry, format: 'atom')
|
||||||
object_type xml, stream_entry.object_type
|
object_type xml, stream_entry.object_type
|
||||||
|
@ -176,7 +192,7 @@ module AtomBuilderHelper
|
||||||
|
|
||||||
# Statuses have content
|
# Statuses have content
|
||||||
if [:note, :comment].include? stream_entry.target.object_type
|
if [:note, :comment].include? stream_entry.target.object_type
|
||||||
content xml, stream_entry.target.content
|
content xml, conditionally_formatted(stream_entry.target)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,17 +20,6 @@ module StreamEntriesHelper
|
||||||
date < 5.days.ago ? date.strftime("%d.%m.%Y") : "#{time_ago_in_words(date)} ago"
|
date < 5.days.ago ? date.strftime("%d.%m.%Y") : "#{time_ago_in_words(date)} ago"
|
||||||
end
|
end
|
||||||
|
|
||||||
def linkify(status)
|
|
||||||
mention_hash = {}
|
|
||||||
status.mentions.each { |m| mention_hash[m.acct] = m }
|
|
||||||
coder = HTMLEntities.new
|
|
||||||
|
|
||||||
auto_link(coder.encode(status.text), link: :urls, html: { rel: 'nofollow noopener' }).gsub(Account::MENTION_RE) do |m|
|
|
||||||
account = mention_hash[Account::MENTION_RE.match(m)[1]]
|
|
||||||
"#{m.split('@').first}<a href=\"#{url_for_target(account)}\" class=\"mention\">@<span>#{account.acct}</span></a>"
|
|
||||||
end.html_safe
|
|
||||||
end
|
|
||||||
|
|
||||||
def reblogged_by_me_class(status)
|
def reblogged_by_me_class(status)
|
||||||
user_signed_in? && current_user.account.reblogged?(status) ? 'reblogged' : ''
|
user_signed_in? && current_user.account.reblogged?(status) ? 'reblogged' : ''
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class BaseService
|
class BaseService
|
||||||
include RoutingHelper
|
include RoutingHelper
|
||||||
|
include ActionView::Helpers::TextHelper
|
||||||
include ApplicationHelper
|
include ApplicationHelper
|
||||||
include AtomBuilderHelper
|
include AtomBuilderHelper
|
||||||
end
|
end
|
||||||
|
|
|
@ -28,4 +28,8 @@ RSpec.describe ApplicationHelper, type: :helper do
|
||||||
expect(helper.local_id?('tag:foreign.tld;objectId=12:objectType=Status')).to be false
|
expect(helper.local_id?('tag:foreign.tld;objectId=12:objectType=Status')).to be false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#linkify' do
|
||||||
|
pending
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue