Fix autoplay issue with spoiler tag (#8540)
Add tests to avoid similar issues in the future
This commit is contained in:
		
				
					committed by
					
						 Eugen Rochko
						Eugen Rochko
					
				
			
			
				
	
			
			
			
						parent
						
							50d8cf8aed
						
					
				
				
					commit
					fe56d26f7b
				
			| @@ -61,7 +61,7 @@ class Formatter | ||||
|     Sanitize.fragment(html, config) | ||||
|   end | ||||
|  | ||||
|   def format_spoiler(status) | ||||
|   def format_spoiler(status, **options) | ||||
|     html = encode(status.spoiler_text) | ||||
|     html = encode_custom_emojis(html, status.emojis, options[:autoplay]) | ||||
|     html.html_safe # rubocop:disable Rails/OutputSafety | ||||
|   | ||||
| @@ -17,7 +17,7 @@ | ||||
|   .status__content.emojify< | ||||
|     - if status.spoiler_text? | ||||
|       %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') | ||||
|     .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< | ||||
|     - if status.spoiler_text? | ||||
|       %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') | ||||
|     .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 | ||||
|  | ||||
|  | ||||
|   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 | ||||
|     subject { Formatter.instance.format(status) } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user