Browse Source

Handle hashtags in spoiler_texts (partial fix for #699) (#2683)

* services: scan spoiler_text for hashtags (#699)

* views: link hashtags from spoiler_texts

This covers linking hashtags from within the spoiler
text on the server-generated pages.

* services: fix string concat going into hashtag RE

Cleaner Ruby syntax, may handle immutable strings better
master
R Tucker 7 years ago
committed by Eugen Rochko
parent
commit
e2491680e6
4 changed files with 15 additions and 3 deletions
  1. +11
    -0
      app/lib/formatter.rb
  2. +2
    -1
      app/services/process_hashtags_service.rb
  3. +1
    -1
      app/views/stream_entries/_detailed_status.html.haml
  4. +1
    -1
      app/views/stream_entries/_simple_status.html.haml

+ 11
- 0
app/lib/formatter.rb View File

@ -25,6 +25,17 @@ class Formatter
sanitize(html, Sanitize::Config::MASTODON_STRICT).html_safe # rubocop:disable Rails/OutputSafety
end
def format_spoiler(status)
return reformat(status.spoiler_text) unless status.local?
html = status.spoiler_text
html = encode(html)
html = html.delete("\n")
html = link_hashtags(html)
html.html_safe # rubocop:disable Rails/OutputSafety
end
def plaintext(status)
return status.text if status.local?
strip_tags(status.text)

+ 2
- 1
app/services/process_hashtags_service.rb View File

@ -2,7 +2,8 @@
class ProcessHashtagsService < BaseService
def call(status, tags = [])
tags = status.text.scan(Tag::HASHTAG_RE).map(&:first) if status.local?
text = [status.text, status.spoiler_text].reject(&:empty?).join(' ')
tags = text.scan(Tag::HASHTAG_RE).map(&:first) if status.local?
tags.map { |str| str.mb_chars.downcase }.uniq(&:to_s).each do |tag|
status.tags << Tag.where(name: tag).first_or_initialize(name: tag)

+ 1
- 1
app/views/stream_entries/_detailed_status.html.haml View File

@ -10,7 +10,7 @@
.status__content.p-name.emojify<
- if status.spoiler_text?
%p{ style: 'margin-bottom: 0' }<
%span.p-summary> #{status.spoiler_text}&nbsp;
%span.p-summary> #{Formatter.instance.format_spoiler(status)}&nbsp;
%a.status__content__spoiler-link{ href: '#' }= t('statuses.show_more')
.e-content{ lang: status.language, style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl?(status.content) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status)

+ 1
- 1
app/views/stream_entries/_simple_status.html.haml View File

@ -16,7 +16,7 @@
.status__content.p-name.emojify<
- if status.spoiler_text?
%p{ style: 'margin-bottom: 0' }<
%span.p-summary> #{status.spoiler_text}&nbsp;
%span.p-summary> #{Formatter.instance.format_spoiler(status)}&nbsp;
%a.status__content__spoiler-link{ href: '#' }= t('statuses.show_more')
.e-content{ lang: status.language, style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl?(status.content) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status)

Loading…
Cancel
Save