Profile redirect notes (#5746)
* Serialize moved accounts into REST and ActivityPub APIs * Parse federated moved accounts from ActivityPub * Add note about moved accounts to public profiles * Add moved account message to web UI * Fix code style issuesmaster
parent
6be72a3ec6
commit
58cede4808
@ -0,0 +1,48 @@ |
||||
import React from 'react'; |
||||
import PropTypes from 'prop-types'; |
||||
import ImmutablePropTypes from 'react-immutable-proptypes'; |
||||
import { FormattedMessage } from 'react-intl'; |
||||
import ImmutablePureComponent from 'react-immutable-pure-component'; |
||||
import AvatarOverlay from '../../../components/avatar_overlay'; |
||||
import DisplayName from '../../../components/display_name'; |
||||
|
||||
export default class MovedNote extends ImmutablePureComponent { |
||||
|
||||
static contextTypes = { |
||||
router: PropTypes.object, |
||||
}; |
||||
|
||||
static propTypes = { |
||||
from: ImmutablePropTypes.map.isRequired, |
||||
to: ImmutablePropTypes.map.isRequired, |
||||
}; |
||||
|
||||
handleAccountClick = e => { |
||||
if (e.button === 0) { |
||||
e.preventDefault(); |
||||
this.context.router.history.push(`/accounts/${this.props.to.get('id')}`); |
||||
} |
||||
|
||||
e.stopPropagation(); |
||||
} |
||||
|
||||
render () { |
||||
const { from, to } = this.props; |
||||
const displayNameHtml = { __html: from.get('display_name_html') }; |
||||
|
||||
return ( |
||||
<div className='account__moved-note'> |
||||
<div className='account__moved-note__message'> |
||||
<div className='account__moved-note__icon-wrapper'><i className='fa fa-fw fa-suitcase account__moved-note__icon' /></div> |
||||
<FormattedMessage id='account.moved_to' defaultMessage='{name} has moved to:' values={{ name: <strong dangerouslySetInnerHTML={displayNameHtml} /> }} /> |
||||
</div> |
||||
|
||||
<a href={to.get('url')} onClick={this.handleAccountClick} className='detailed-status__display-name'> |
||||
<div className='detailed-status__display-avatar'><AvatarOverlay account={to} friend={from} /></div> |
||||
<DisplayName account={to} /> |
||||
</a> |
||||
</div> |
||||
); |
||||
} |
||||
|
||||
} |
@ -0,0 +1,17 @@ |
||||
- moved_to_account = account.moved_to_account |
||||
|
||||
.moved-strip |
||||
.moved-strip__message |
||||
= fa_icon 'suitcase' |
||||
= t('accounts.moved_html', name: content_tag(:strong, display_name(account), class: :emojify), new_profile_link: link_to(content_tag(:strong, safe_join(['@', content_tag(:span, moved_to_account.acct)])), TagManager.instance.url_for(moved_to_account), class: 'mention')) |
||||
|
||||
.moved-strip__card |
||||
= link_to TagManager.instance.url_for(moved_to_account), class: 'detailed-status__display-name p-author h-card', target: '_blank', rel: 'noopener' do |
||||
.detailed-status__display-avatar |
||||
.account__avatar-overlay |
||||
.account__avatar-overlay-base{ style: "background-image: url('#{moved_to_account.avatar.url(:original)}')" } |
||||
.account__avatar-overlay-overlay{ style: "background-image: url('#{account.avatar.url(:original)}')" } |
||||
|
||||
%span.display-name |
||||
%strong.emojify= display_name(moved_to_account) |
||||
%span @#{moved_to_account.acct} |
@ -0,0 +1,6 @@ |
||||
class AddMovedToAccountIdToAccounts < ActiveRecord::Migration[5.1] |
||||
def change |
||||
add_column :accounts, :moved_to_account_id, :bigint, null: true, default: nil |
||||
add_foreign_key :accounts, :accounts, column: :moved_to_account_id, on_delete: :nullify |
||||
end |
||||
end |
Loading…
Reference in new issue