mirror of
https://github.com/funamitech/mastodon
synced 2024-12-16 07:38:27 +09:00
50cd73e5d7
This adds "Show thread" button to the status view which is used in profiles. The logic to display the button is mimicking logic in web app available at app/javascript/mastodon/components/status.js#L439. * The little change in components CSS required to remove enforced underline for all links on public pages on our button.
69 lines
4.9 KiB
Plaintext
69 lines
4.9 KiB
Plaintext
.status
|
|
.status__info
|
|
= link_to ActivityPub::TagManager.instance.url_for(status), class: 'status__relative-time u-url u-uid', target: stream_link_target, rel: 'noopener noreferrer' do
|
|
%time.time-ago{ datetime: status.created_at.iso8601, title: l(status.created_at) }= l(status.created_at)
|
|
%data.dt-published{ value: status.created_at.to_time.iso8601 }
|
|
|
|
.p-author.h-card
|
|
= link_to ActivityPub::TagManager.instance.url_for(status.account), class: 'status__display-name u-url', target: stream_link_target, rel: 'noopener noreferrer' do
|
|
.status__avatar
|
|
%div
|
|
- if current_account&.user&.setting_auto_play_gif || autoplay
|
|
= image_tag status.account.avatar_original_url, width: 48, height: 48, alt: '', class: 'u-photo account__avatar'
|
|
- else
|
|
= image_tag status.account.avatar_static_url, width: 48, height: 48, alt: '', class: 'u-photo account__avatar'
|
|
%span.display-name
|
|
%bdi
|
|
%strong.display-name__html.p-name.emojify= display_name(status.account, custom_emojify: true, autoplay: autoplay)
|
|
|
|
%span.display-name__account
|
|
= acct(status.account)
|
|
= fa_icon('lock') if status.account.locked?
|
|
.status__content.emojify<
|
|
- if status.spoiler_text?
|
|
%p{ :style => ('margin-bottom: 0' unless current_account&.user&.setting_expand_spoilers) }<
|
|
%span.p-summary> #{Formatter.instance.format_spoiler(status, autoplay: autoplay)}
|
|
%button.status__content__spoiler-link= t('statuses.show_more')
|
|
.e-content{ 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.preloadable_poll
|
|
= react_component :poll, disabled: true, poll: ActiveModelSerializers::SerializableResource.new(status.preloadable_poll, serializer: REST::PollSerializer, scope: current_user, scope_name: :current_user).as_json do
|
|
= render partial: 'statuses/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: autoplay }
|
|
|
|
- if !status.media_attachments.empty?
|
|
- if status.media_attachments.first.video?
|
|
- video = status.media_attachments.first
|
|
= react_component :video, src: video.file.url(:original), preview: video.file.url(:small), blurhash: video.blurhash, sensitive: status.sensitive?, width: 610, height: 343, inline: true, alt: video.description do
|
|
= render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
|
|
- elsif status.media_attachments.first.audio?
|
|
- audio = status.media_attachments.first
|
|
= react_component :audio, src: audio.file.url(:original), height: 110, alt: audio.description, duration: audio.file.meta.dig(:original, :duration) do
|
|
= render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
|
|
- else
|
|
= react_component :media_gallery, height: 343, sensitive: status.sensitive?, autoplay: autoplay, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json } do
|
|
= render partial: 'statuses/attachment_list', locals: { attachments: status.media_attachments }
|
|
- elsif status.preview_card
|
|
= react_component :card, 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json
|
|
|
|
- if !status.in_reply_to_id.nil? && status.in_reply_to_account_id == status.account.id
|
|
= link_to ActivityPub::TagManager.instance.url_for(status), class: 'status__content__read-more-button', target: stream_link_target, rel: 'noopener noreferrer' do
|
|
= t 'statuses.show_thread'
|
|
|
|
.status__action-bar
|
|
.status__action-bar__counter
|
|
= link_to remote_interaction_path(status, type: :reply), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do
|
|
- if status.in_reply_to_id.nil?
|
|
= fa_icon 'reply fw'
|
|
- else
|
|
= fa_icon 'reply-all fw'
|
|
.status__action-bar__counter__label= obscured_counter status.replies_count
|
|
= link_to remote_interaction_path(status, type: :reblog), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do
|
|
- if status.distributable?
|
|
= fa_icon 'retweet fw'
|
|
- elsif status.private_visibility? || status.limited_visibility?
|
|
= fa_icon 'lock fw'
|
|
- else
|
|
= fa_icon 'envelope fw'
|
|
= link_to remote_interaction_path(status, type: :favourite), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do
|
|
= fa_icon 'star fw'
|