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…
	
	Add table
		
		Reference in a new issue