Browse Source

Add non-JS fallback for polls on public pages (#10155)

pull/4/head
ThibG 5 years ago
committed by Eugen Rochko
parent
commit
3de71887d8
4 changed files with 34 additions and 2 deletions
  1. +2
    -1
      app/views/stream_entries/_detailed_status.html.haml
  2. +25
    -0
      app/views/stream_entries/_poll.html.haml
  3. +2
    -1
      app/views/stream_entries/_simple_status.html.haml
  4. +5
    -0
      config/locales/en.yml

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

@ -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
- 0
app/views/stream_entries/_poll.html.haml View 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

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

@ -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

+ 5
- 0
config/locales/en.yml View File

@ -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…
Cancel
Save