forked from mirrors/catstodon
Update emoji reaction patches
This commit is contained in:
parent
48cfb27b7c
commit
8eff35ad53
9 changed files with 41 additions and 27 deletions
|
@ -119,7 +119,7 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||
|
||||
handleEmojiPick = data => {
|
||||
this.props.onReactionAdd(this.props.status.get('id'), data.native.replace(/:/g, ''), data.imageUrl);
|
||||
}
|
||||
};
|
||||
|
||||
handleReblogClick = e => {
|
||||
const { signedIn } = this.context.identity;
|
||||
|
@ -202,7 +202,7 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||
this.props.onAddFilter(this.props.status);
|
||||
};
|
||||
|
||||
handleNoOp = () => {} // hack for reaction add button
|
||||
handleNoOp = () => {}; // hack for reaction add button
|
||||
|
||||
render () {
|
||||
const { status, intl, withDismiss, withCounters, showReplyCount, scrollKey } = this.props;
|
||||
|
@ -332,7 +332,7 @@ class StatusActionBar extends ImmutablePureComponent {
|
|||
<IconButton className={classNames('status__action-bar-button', { reblogPrivate })} disabled={!publicStatus && !reblogPrivate} active={status.get('reblogged')} title={reblogTitle} icon={reblogIcon} onClick={this.handleReblogClick} counter={withCounters ? status.get('reblogs_count') : undefined} />
|
||||
<IconButton className='status__action-bar-button star-icon' animate active={status.get('favourited')} title={intl.formatMessage(messages.favourite)} icon='star' onClick={this.handleFavouriteClick} counter={withCounters ? status.get('favourites_count') : undefined} />
|
||||
{
|
||||
signedIn
|
||||
permissions
|
||||
? <EmojiPickerDropdown className='status__action-bar-button' onPickEmoji={this.handleEmojiPick} button={reactButton} disabled={!canReact} />
|
||||
: reactButton
|
||||
}
|
||||
|
|
|
@ -390,7 +390,7 @@ class EmojiPickerDropdown extends React.PureComponent {
|
|||
/>}
|
||||
</div>
|
||||
|
||||
<Overlay show={active} placement={'bottom'} target={this.findTarget} popperConfig={{ strategy: 'fixed' }}>
|
||||
<Overlay show={active} placement={'bottom'} flip target={this.findTarget} popperConfig={{ strategy: 'fixed' }}>
|
||||
{({ props, placement })=> (
|
||||
<div {...props} style={{ ...props.style, width: 299 }}>
|
||||
<div className={`dropdown-animation ${placement}`}>
|
||||
|
|
|
@ -304,11 +304,11 @@ class Status extends ImmutablePureComponent {
|
|||
if (signedIn) {
|
||||
dispatch(addReaction(statusId, name, url));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
handleReactionRemove = (statusId, name) => {
|
||||
this.props.dispatch(removeReaction(statusId, name));
|
||||
}
|
||||
};
|
||||
|
||||
handlePin = (status) => {
|
||||
if (status.get('pinned')) {
|
||||
|
|
|
@ -61,6 +61,7 @@
|
|||
"keyboard_shortcuts.bookmark": "to bookmark",
|
||||
"keyboard_shortcuts.secondary_toot": "to send toot using secondary privacy setting",
|
||||
"keyboard_shortcuts.toggle_collapse": "to collapse/uncollapse toots",
|
||||
"tooltips.reactions": "Reactions",
|
||||
"layout.auto": "Auto",
|
||||
"layout.desktop": "Desktop",
|
||||
"layout.hint.auto": "Automatically chose layout based on “Enable advanced web interface” setting and screen size.",
|
||||
|
@ -74,6 +75,8 @@
|
|||
"navigation_bar.keyboard_shortcuts": "Keyboard shortcuts",
|
||||
"navigation_bar.misc": "Misc",
|
||||
"notification.markForDeletion": "Mark for deletion",
|
||||
"notification.reaction": "{name} reacted to your post",
|
||||
"notifications.column_settings.reaction": "Reactions:",
|
||||
"notification_purge.btn_all": "Select\nall",
|
||||
"notification_purge.btn_apply": "Clear\nselected",
|
||||
"notification_purge.btn_invert": "Invert\nselection",
|
||||
|
@ -135,6 +138,7 @@
|
|||
"settings.deprecated_setting": "This setting is now controlled from Mastodon's {settings_page_link}",
|
||||
"settings.enable_collapsed": "Enable collapsed toots",
|
||||
"settings.enable_collapsed_hint": "Collapsed posts have parts of their contents hidden to take up less screen space. This is distinct from the Content Warning feature",
|
||||
"settings.enter_amount_prompt": "Enter an amount",
|
||||
"settings.enable_content_warnings_auto_unfold": "Automatically unfold content-warnings",
|
||||
"settings.general": "General",
|
||||
"settings.hicolor_privacy_icons": "High color privacy icons",
|
||||
|
@ -148,6 +152,7 @@
|
|||
"settings.layout_opts": "Layout options",
|
||||
"settings.media": "Media",
|
||||
"settings.media_fullwidth": "Full-width media previews",
|
||||
"settings.num_visible_reactions": "Number of visible reactions",
|
||||
"settings.media_letterbox": "Letterbox media",
|
||||
"settings.media_letterbox_hint": "Scale down and letterbox media to fill the image containers instead of stretching and cropping them",
|
||||
"settings.media_reveal_behind_cw": "Reveal sensitive media behind a CW by default",
|
||||
|
@ -190,6 +195,7 @@
|
|||
"settings.wide_view": "Wide view (Desktop mode only)",
|
||||
"settings.wide_view_hint": "Stretches columns to better fill the available space.",
|
||||
"status.collapse": "Collapse",
|
||||
"status.react": "React",
|
||||
"status.has_audio": "Features attached audio files",
|
||||
"status.has_pictures": "Features attached pictures",
|
||||
"status.has_preview_card": "Features an attached preview card",
|
||||
|
|
|
@ -20,13 +20,13 @@ class Notification < ApplicationRecord
|
|||
include Paginable
|
||||
|
||||
LEGACY_TYPE_CLASS_MAP = {
|
||||
'Mention' => :mention,
|
||||
'Status' => :reblog,
|
||||
'Follow' => :follow,
|
||||
'FollowRequest' => :follow_request,
|
||||
'Favourite' => :favourite,
|
||||
'Mention' => :mention,
|
||||
'Status' => :reblog,
|
||||
'Follow' => :follow,
|
||||
'FollowRequest' => :follow_request,
|
||||
'Favourite' => :favourite,
|
||||
'StatusReaction' => :reaction,
|
||||
'Poll' => :poll,
|
||||
'Poll' => :poll,
|
||||
}.freeze
|
||||
|
||||
TYPES = %i(
|
||||
|
|
|
@ -3,19 +3,21 @@
|
|||
class UnreactService < BaseService
|
||||
include Payloadable
|
||||
|
||||
def call(account, status, name)
|
||||
reaction = StatusReaction.find_by(account: account, status: status, name: name)
|
||||
return if reaction.nil?
|
||||
def call(account, status, emoji)
|
||||
name, domain = emoji.split('@')
|
||||
custom_emoji = CustomEmoji.find_by(shortcode: name, domain: domain)
|
||||
reaction = StatusReaction.find_by(account: account, status: status, name: name, custom_emoji: custom_emoji)
|
||||
return if reaction.nil?
|
||||
|
||||
reaction.destroy!
|
||||
reaction.destroy!
|
||||
|
||||
json = Oj.dump(serialize_payload(reaction, ActivityPub::UndoEmojiReactionSerializer))
|
||||
if status.account.local?
|
||||
ActivityPub::RawDistributionWorker.perform_async(json, status.account.id)
|
||||
else
|
||||
ActivityPub::DeliveryWorker.perform_async(json, reaction.account_id, status.account.inbox_url)
|
||||
json = Oj.dump(serialize_payload(reaction, ActivityPub::UndoEmojiReactionSerializer))
|
||||
if status.account.local?
|
||||
ActivityPub::RawDistributionWorker.perform_async(json, status.account.id)
|
||||
else
|
||||
ActivityPub::DeliveryWorker.perform_async(json, reaction.account_id, status.account.inbox_url)
|
||||
end
|
||||
|
||||
reaction
|
||||
end
|
||||
|
||||
reaction
|
||||
end
|
||||
end
|
||||
|
|
|
@ -45,3 +45,8 @@ en:
|
|||
body: "%{name} reacted to your post:"
|
||||
subject: "%{name} reacted to your post"
|
||||
title: New reaction
|
||||
notification_mailer:
|
||||
reaction:
|
||||
body: "%{name} reacted to your post:"
|
||||
subject: "%{name} reacted to your post"
|
||||
title: New reaction
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
class CreateStatusReactions < ActiveRecord::Migration[6.1]
|
||||
def change
|
||||
create_table :status_reactions do |t|
|
||||
t.references :account, null: false, foreign_key: true
|
||||
t.references :status, null: false, foreign_key: true
|
||||
t.references :account, null: false, foreign_key: { on_delete: :cascade }
|
||||
t.references :status, null: false, foreign_key: { on_delete: :cascade }
|
||||
t.string :name, null: false, default: ''
|
||||
t.references :custom_emoji, null: true, foreign_key: true
|
||||
t.references :custom_emoji, null: true, foreign_key: { on_delete: :cascade }
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
|
|
|
@ -2,6 +2,7 @@ class FixForeignKeysStatusReactions < ActiveRecord::Migration[6.1]
|
|||
disable_ddl_transaction!
|
||||
|
||||
def change
|
||||
# Fixes an oversight in a previous version of the CreateStatusReactions migration
|
||||
remove_foreign_key :status_reactions, :accounts
|
||||
add_foreign_key :status_reactions, :accounts, on_delete: :cascade, validate: false
|
||||
validate_foreign_key :status_reactions, :accounts
|
||||
|
|
Loading…
Reference in a new issue