about summary refs log tree commit diff
path: root/app/helpers
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2022-05-09 07:43:08 +0200
committerGitHub <noreply@github.com>2022-05-09 07:43:08 +0200
commit2b8dc58b7ff7fb708687c08a75c99b3fb30efc49 (patch)
tree6145e0c99b5550ad80d902b67a76278e0753ac69 /app/helpers
parentf17e73da09e6c63665aee4e9731df7808094960e (diff)
Change RSS feeds (#18356)
* Change RSS feeds

- Use date and time for titles instead of ellipsized text
- Use full content in body, even when there is a content warning
- Use media extensions

* Change feed icons and add width and height attributes to custom emojis

* Fix custom emoji animate on hover breaking

* Fix tests
Diffstat (limited to 'app/helpers')
-rw-r--r--app/helpers/application_helper.rb4
-rw-r--r--app/helpers/formatting_helper.rb26
2 files changed, 28 insertions, 2 deletions
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 19dc0acd6..bba7070d0 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -243,7 +243,7 @@ module ApplicationHelper
     end.values
   end
 
-  def prerender_custom_emojis(html, custom_emojis)
-    EmojiFormatter.new(html, custom_emojis, animate: prefers_autoplay?).to_s
+  def prerender_custom_emojis(html, custom_emojis, other_options = {})
+    EmojiFormatter.new(html, custom_emojis, other_options.merge(animate: prefers_autoplay?)).to_s
   end
 end
diff --git a/app/helpers/formatting_helper.rb b/app/helpers/formatting_helper.rb
index a58dd608f..f5b8dbed8 100644
--- a/app/helpers/formatting_helper.rb
+++ b/app/helpers/formatting_helper.rb
@@ -18,6 +18,32 @@ module FormattingHelper
     html_aware_format(status.text, status.local?, preloaded_accounts: [status.account] + (status.respond_to?(:active_mentions) ? status.active_mentions.map(&:account) : []))
   end
 
+  def rss_status_content_format(status)
+    html = status_content_format(status)
+
+    before_html = begin
+      if status.spoiler_text?
+        "<p><strong>#{I18n.t('rss.content_warning', locale: valid_locale_or_nil(status.language))}</strong> #{h(status.spoiler_text)}</p><hr />"
+      else
+        ''
+      end
+    end.html_safe # rubocop:disable Rails/OutputSafety
+
+    after_html = begin
+      if status.preloadable_poll
+        "<p>#{status.preloadable_poll.options.map { |o| "<input type=#{status.preloadable_poll.multiple? ? 'checkbox' : 'radio'} disabled /> #{h(o)}" }.join('<br />')}</p>"
+      else
+        ''
+      end
+    end.html_safe # rubocop:disable Rails/OutputSafety
+
+    prerender_custom_emojis(
+      safe_join([before_html, html, after_html]),
+      status.emojis,
+      style: 'width: 1.1em; height: 1.1em; object-fit: contain; vertical-align: middle; margin: -.2ex .15em .2ex'
+    ).to_str
+  end
+
   def account_bio_format(account)
     html_aware_format(account.note, account.local?)
   end