Fix #13, Atom feeds now contain formatted post content

signup-info-prompt
Eugen Rochko 2016-03-19 00:16:04 +01:00
parent 580b91c387
commit 071f64d317
5 changed files with 34 additions and 13 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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