I18n.t('statuses.content_warning', warning: status.spoiler_text)
end
+ def poll_summary(status)
+ return unless status.poll
+ status.poll.options.map { |o| "[ ] #{o}" }.join("\n")
+ end
+
def status_description(status)
components = [[media_summary(status), status_text_summary(status)].reject(&:blank?).join(' · ')]
- components << status.text if status.spoiler_text.blank?
+
+ if status.spoiler_text.blank?
+ components << status.text
+ components << poll_summary(status)
+ end
+
components.reject(&:blank?).join("\n\n")
end
/>
{!showResults && <span className={classNames('poll__input', { checkbox: poll.get('multiple'), active })} />}
- {showResults && <span className='poll__number'>{Math.floor(percent)}%</span>}
+ {showResults && <span className='poll__number'>{Math.round(percent)}%</span>}
{option.get('title')}
</label>
<div className='poll__footer'>
{!showResults && <button className='button button-secondary' disabled={disabled} onClick={this.handleVote}><FormattedMessage id='poll.vote' defaultMessage='Vote' /></button>}
{showResults && !this.props.disabled && <span><button className='poll__link' onClick={this.handleRefresh}><FormattedMessage id='poll.refresh' defaultMessage='Refresh' /></button> · </span>}
- <FormattedMessage id='poll.total_votes' defaultMessage='{count, plural, one {# vote} other {# votes}}' values={{ count: poll.get('votes_count') }} /> · {timeRemaining}
+ <FormattedMessage id='poll.total_votes' defaultMessage='{count, plural, one {# vote} other {# votes}}' values={{ count: poll.get('votes_count') }} />
+ {poll.get('expires_at') && <span> · {timeRemaining}</span>}
</div>
</div>
);
border: 0;
color: $dark-text-color;
text-decoration: underline;
+ font-size: inherit;
&:hover,
&:focus,
delegate :local?, to: :account
+ def object_type
+ :vote
+ end
+
private
def increment_counter_cache
has_one :replies, serializer: ActivityPub::CollectionSerializer, if: :local?
- has_many :poll_loaded_options, key: :one_of, if: :poll_and_not_multiple?
- has_many :poll_loaded_options, key: :any_of, if: :poll_and_multiple?
+ has_many :poll_options, key: :one_of, if: :poll_and_not_multiple?
+ has_many :poll_options, key: :any_of, if: :poll_and_multiple?
attribute :end_time, if: :poll_and_expires?
attribute :closed, if: :poll_and_expired?
object.account.local?
end
- def poll_loaded_options
- object.poll.loaded_options
+ def poll_options
+ if !object.expired? && object.hide_totals?
+ object.poll.unloaded_options
+ else
+ object.poll.loaded_options
+ end
end
def poll_and_multiple?
-- options = (!poll.expired? && poll.hide_totals?) ? poll.unloaded_options : poll.loaded_options
-- voted = poll.votes.where(account: current_user.account).exists?
+- options = (!poll.expired? && poll.hide_totals?) ? poll.unloaded_options : poll.loaded_options
+- voted = user_signed_in? && poll.votes.where(account: current_account).exists?
- show_results = voted || poll.expired?
.poll
- if show_results
- percent = 100 * option.votes_count / poll.votes_count
%span.poll__chart{ style: "width: #{percent}%" }
+
%label.poll__text><
- %span.poll__number= percent
+ %span.poll__number= percent.round
= option.title
- else
%label.poll__text><
- %span.poll__input{ class: poll.multiple ? 'checkbox' : nil}><
+ %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
+
+ - unless poll.expires_at.nil?
+ ·
+ %span= l poll.expires_at