Add non-JS fallback for polls on public pages (#10155)
This commit is contained in:
		
							parent
							
								
									4ced609497
								
							
						
					
					
						commit
						3de71887d8
					
				
					 4 changed files with 34 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -23,7 +23,8 @@
 | 
			
		|||
    .e-content{ lang: status.language, style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay)
 | 
			
		||||
 | 
			
		||||
  - if status.poll
 | 
			
		||||
    = react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json
 | 
			
		||||
    = react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do
 | 
			
		||||
      = render partial: 'stream_entries/poll', locals: { poll: status.poll }
 | 
			
		||||
  - elsif !status.media_attachments.empty?
 | 
			
		||||
    - if status.media_attachments.first.video?
 | 
			
		||||
      - video = status.media_attachments.first
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										25
									
								
								app/views/stream_entries/_poll.html.haml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								app/views/stream_entries/_poll.html.haml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
- options = (!poll.expired? && poll.hide_totals?) ? poll.unloaded_options : poll.loaded_options
 | 
			
		||||
- voted = poll.votes.where(account: current_user.account).exists?
 | 
			
		||||
- show_results = voted || poll.expired?
 | 
			
		||||
 | 
			
		||||
.poll
 | 
			
		||||
  %ul
 | 
			
		||||
    - options.each do |option|
 | 
			
		||||
      %li
 | 
			
		||||
        - if show_results
 | 
			
		||||
          - percent = 100 * option.votes_count / poll.votes_count
 | 
			
		||||
          %span.poll__chart{ style: "width: #{percent}%" }
 | 
			
		||||
          %label.poll__text><
 | 
			
		||||
            %span.poll__number= percent
 | 
			
		||||
            = option.title
 | 
			
		||||
        - else
 | 
			
		||||
          %label.poll__text><
 | 
			
		||||
            %span.poll__input{ class: poll.multiple ? 'checkbox' : nil}><
 | 
			
		||||
            = option.title
 | 
			
		||||
  .poll__footer
 | 
			
		||||
    - unless show_results
 | 
			
		||||
      %button.button.button-secondary{ disabled: true }
 | 
			
		||||
        = t('statuses.poll.vote')
 | 
			
		||||
    %span= t('statuses.poll.total_votes', count: poll.votes_count)
 | 
			
		||||
    ·
 | 
			
		||||
    %span= poll.expires_at
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +27,8 @@
 | 
			
		|||
    .e-content{ lang: status.language, style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay)
 | 
			
		||||
 | 
			
		||||
  - if status.poll
 | 
			
		||||
    = react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json
 | 
			
		||||
    = react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do
 | 
			
		||||
      = render partial: 'stream_entries/poll', locals: { poll: status.poll }
 | 
			
		||||
  - elsif !status.media_attachments.empty?
 | 
			
		||||
    - if status.media_attachments.first.video?
 | 
			
		||||
      - video = status.media_attachments.first
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -853,6 +853,11 @@ en:
 | 
			
		|||
      ownership: Someone else's toot cannot be pinned
 | 
			
		||||
      private: Non-public toot cannot be pinned
 | 
			
		||||
      reblog: A boost cannot be pinned
 | 
			
		||||
    poll:
 | 
			
		||||
      total_votes:
 | 
			
		||||
        one: "%{count} vote"
 | 
			
		||||
        other: "%{count} votes"
 | 
			
		||||
      vote: Vote
 | 
			
		||||
    show_more: Show more
 | 
			
		||||
    sign_in_to_participate: Sign in to participate in the conversation
 | 
			
		||||
    title: '%{name}: "%{quote}"'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue