Fix autoplay issue with spoiler tag (#8540)
Add tests to avoid similar issues in the future
This commit is contained in:
parent
50d8cf8aed
commit
fe56d26f7b
4 changed files with 26 additions and 3 deletions
|
@ -61,7 +61,7 @@ class Formatter
|
||||||
Sanitize.fragment(html, config)
|
Sanitize.fragment(html, config)
|
||||||
end
|
end
|
||||||
|
|
||||||
def format_spoiler(status)
|
def format_spoiler(status, **options)
|
||||||
html = encode(status.spoiler_text)
|
html = encode(status.spoiler_text)
|
||||||
html = encode_custom_emojis(html, status.emojis, options[:autoplay])
|
html = encode_custom_emojis(html, status.emojis, options[:autoplay])
|
||||||
html.html_safe # rubocop:disable Rails/OutputSafety
|
html.html_safe # rubocop:disable Rails/OutputSafety
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
.status__content.emojify<
|
.status__content.emojify<
|
||||||
- if status.spoiler_text?
|
- if status.spoiler_text?
|
||||||
%p{ style: 'margin-bottom: 0' }<
|
%p{ style: 'margin-bottom: 0' }<
|
||||||
%span.p-summary> #{Formatter.instance.format_spoiler(status)}
|
%span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)}
|
||||||
%a.status__content__spoiler-link{ href: '#' }= t('statuses.show_more')
|
%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?(status) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay)
|
.e-content{ lang: status.language, style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay)
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
.status__content.emojify<
|
.status__content.emojify<
|
||||||
- if status.spoiler_text?
|
- if status.spoiler_text?
|
||||||
%p{ style: 'margin-bottom: 0' }<
|
%p{ style: 'margin-bottom: 0' }<
|
||||||
%span.p-summary> #{Formatter.instance.format_spoiler(status)}
|
%span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)}
|
||||||
%a.status__content__spoiler-link{ href: '#' }= t('statuses.show_more')
|
%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?(status) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay)
|
.e-content{ lang: status.language, style: "display: #{status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay)
|
||||||
|
|
||||||
|
|
|
@ -170,6 +170,29 @@ RSpec.describe Formatter do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
describe '#format_spoiler' do
|
||||||
|
subject { Formatter.instance.format_spoiler(status) }
|
||||||
|
|
||||||
|
context 'given a post containing plain text' do
|
||||||
|
let(:status) { Fabricate(:status, text: 'text', spoiler_text: 'Secret!', uri: nil) }
|
||||||
|
|
||||||
|
it 'Returns the spoiler text' do
|
||||||
|
is_expected.to eq 'Secret!'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'given a post with an emoji shortcode at the start' do
|
||||||
|
let!(:emoji) { Fabricate(:custom_emoji) }
|
||||||
|
let(:status) { Fabricate(:status, text: 'text', spoiler_text: ':coolcat: Secret!', uri: nil) }
|
||||||
|
let(:text) { ':coolcat: Beep boop' }
|
||||||
|
|
||||||
|
it 'converts the shortcode to an image tag' do
|
||||||
|
is_expected.to match(/<img draggable="false" class="emojione" alt=":coolcat:"/)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#format' do
|
describe '#format' do
|
||||||
subject { Formatter.instance.format(status) }
|
subject { Formatter.instance.format(status) }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue