diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 944006c2b..76a2f101c 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -127,6 +127,20 @@ module ApplicationHelper end end + UNICODE_EMOJIS = Oj.load(File.read(Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_map.json'))).freeze + + def grouped_reaction_custom_emoji_tag(reaction, animate = true) + unicode_emoji_filename = UNICODE_EMOJIS[reaction['name']] + + if unicode_emoji_filename + image_tag("/emoji/#{unicode_emoji_filename}.svg", class: 'emojione', alt: "#{reaction['name']}", draggable: false) + elsif animate + image_tag(reaction['url'], class: 'emojione', alt: ":#{reaction['name']}:") + else + image_tag(reaction['static_url'], class: 'emojione custom-emoji', alt: ":#{reaction['name']}", 'data-original' => full_asset_url(reaction['url']), 'data-static' => full_asset_url(reaction['static_url'])) + end + end + def opengraph(property, content) tag(:meta, content: content, property: property) end diff --git a/app/models/status.rb b/app/models/status.rb index 0d2270ed4..79e47022b 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -205,6 +205,10 @@ class Status < ApplicationRecord !quote_id.nil? && quote end + def emoji_reaction? + status_stat&.emoji_reactions_cache.present? + end + def quote_visibility quote&.visibility end diff --git a/app/serializers/activitypub/emoji_serializer.rb b/app/serializers/activitypub/emoji_serializer.rb index 78df3c337..efa4748ea 100644 --- a/app/serializers/activitypub/emoji_serializer.rb +++ b/app/serializers/activitypub/emoji_serializer.rb @@ -23,6 +23,8 @@ class ActivityPub::EmojiSerializer < ActivityPub::Serializer else RemoteImageSerializer end + else + super end end diff --git a/app/views/statuses/_detailed_status.html.haml b/app/views/statuses/_detailed_status.html.haml index 1eb23e492..cda85c8a1 100644 --- a/app/views/statuses/_detailed_status.html.haml +++ b/app/views/statuses/_detailed_status.html.haml @@ -38,6 +38,10 @@ - elsif status.preview_card = render_card_component(status) + - if status.emoji_reaction? + .reactions-bar.emoji-reactions-bar + = render partial: 'statuses/reaction_item', collection: status.grouped_emoji_reactions(current_account), as: :reaction_item + .detailed-status__meta %data.dt-published{ value: status.created_at.to_time.iso8601 } diff --git a/app/views/statuses/_reaction_item.html.haml b/app/views/statuses/_reaction_item.html.haml new file mode 100644 index 000000000..009aa1d05 --- /dev/null +++ b/app/views/statuses/_reaction_item.html.haml @@ -0,0 +1,8 @@ +.reactions-bar__item-wrapper + %button.reactions-bar__item{ title: reaction_item['name'], style: 'transform: scale(1); position: static;', disable: true } + %span.reactions-bar__item__emoji + = grouped_reaction_custom_emoji_tag(reaction_item, animate = current_account&.user&.setting_auto_play_gif) + %span.reactions-bar__item__count + %span.animated-number + %span{ style: 'position: static; transform: translateY(0%);' } + = reaction_item['count'] diff --git a/app/views/statuses/_simple_status.html.haml b/app/views/statuses/_simple_status.html.haml index 9ebab7744..b62a18a2a 100644 --- a/app/views/statuses/_simple_status.html.haml +++ b/app/views/statuses/_simple_status.html.haml @@ -58,6 +58,10 @@ = 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' + - if status.emoji_reaction? + .reactions-bar.emoji-reactions-bar + = render partial: 'statuses/reaction_item', collection: status.grouped_emoji_reactions(current_account), as: :reaction_item + .status__action-bar = link_to remote_interaction_path(status, type: :reply), class: 'status__action-bar-button icon-button icon-button--with-counter modal-button' do - if status.in_reply_to_id.nil?