]>
cat aescling's git repositories - mastodon.git/blob - app/javascript/mastodon/features/account/components/action_bar.js
1 import React
from 'react';
2 import ImmutablePropTypes
from 'react-immutable-proptypes';
3 import PropTypes
from 'prop-types';
4 import DropdownMenu
from '../../../components/dropdown_menu';
5 import Link
from 'react-router/lib/Link';
6 import { defineMessages
, injectIntl
, FormattedMessage
, FormattedNumber
} from 'react-intl';
8 const messages
= defineMessages({
9 mention: { id: 'account.mention', defaultMessage: 'Mention @{name}' },
10 edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' },
11 unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },
12 unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },
13 unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },
14 block: { id: 'account.block', defaultMessage: 'Block @{name}' },
15 mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' },
16 follow: { id: 'account.follow', defaultMessage: 'Follow' },
17 report: { id: 'account.report', defaultMessage: 'Report @{name}' },
18 media: { id: 'account.media', defaultMessage: 'Media' },
19 disclaimer: { id: 'account.disclaimer', defaultMessage: 'This user is from another instance. This number may be larger.' },
20 blockDomain: { id: 'account.block_domain', defaultMessage: 'Hide everything from {domain}' },
21 unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' },
24 class ActionBar
extends React
.PureComponent
{
27 account: ImmutablePropTypes
.map
.isRequired
,
28 me: PropTypes
.number
.isRequired
,
29 onFollow: PropTypes
.func
,
30 onBlock: PropTypes
.func
.isRequired
,
31 onMention: PropTypes
.func
.isRequired
,
32 onReport: PropTypes
.func
.isRequired
,
33 onMute: PropTypes
.func
.isRequired
,
34 onBlockDomain: PropTypes
.func
.isRequired
,
35 onUnblockDomain: PropTypes
.func
.isRequired
,
36 intl: PropTypes
.object
.isRequired
,
40 const { account
, me
, intl
} = this.props
;
45 menu
.push({ text: intl
.formatMessage(messages
.mention
, { name: account
.get('username') }), action: this.props
.onMention
});
47 menu
.push({ text: intl
.formatMessage(messages
.media
), to: `/accounts/${account.get('id')}/media` });
50 if (account
.get('id') === me
) {
51 menu
.push({ text: intl
.formatMessage(messages
.edit_profile
), href: '/settings/profile' });
53 if (account
.getIn(['relationship', 'muting'])) {
54 menu
.push({ text: intl
.formatMessage(messages
.unmute
, { name: account
.get('username') }), action: this.props
.onMute
});
56 menu
.push({ text: intl
.formatMessage(messages
.mute
, { name: account
.get('username') }), action: this.props
.onMute
});
59 if (account
.getIn(['relationship', 'blocking'])) {
60 menu
.push({ text: intl
.formatMessage(messages
.unblock
, { name: account
.get('username') }), action: this.props
.onBlock
});
62 menu
.push({ text: intl
.formatMessage(messages
.block
, { name: account
.get('username') }), action: this.props
.onBlock
});
65 menu
.push({ text: intl
.formatMessage(messages
.report
, { name: account
.get('username') }), action: this.props
.onReport
});
68 if (account
.get('acct') !== account
.get('username')) {
69 const domain
= account
.get('acct').split('@')[1];
70 extraInfo
= <abbr title
={intl
.formatMessage(messages
.disclaimer
)}>*</abbr
>;
74 if (account
.getIn(['relationship', 'domain_blocking'])) {
75 menu
.push({ text: intl
.formatMessage(messages
.unblockDomain
, { domain
}), action: this.props
.onUnblockDomain
});
77 menu
.push({ text: intl
.formatMessage(messages
.blockDomain
, { domain
}), action: this.props
.onBlockDomain
});
82 <div className
='account__action-bar'>
83 <div className
='account__action-bar-dropdown'>
84 <DropdownMenu items
={menu
} icon
='bars' size
={24} direction
="right" />
87 <div className
='account__action-bar-links'>
88 <Link className
='account__action-bar__tab' to
={`/accounts/${account.get('id')}`}>
89 <span
><FormattedMessage id
='account.posts' defaultMessage
='Posts' /></span>
90 <strong
><FormattedNumber value
={account
.get('statuses_count')} /> {extraInfo
}</strong
>
93 <Link className
='account__action-bar__tab' to
={`/accounts/${account.get('id')}/following`}>
94 <span
><FormattedMessage id
='account.follows' defaultMessage
='Follows' /></span>
95 <strong
><FormattedNumber value
={account
.get('following_count')} /> {extraInfo
}</strong
>
98 <Link className
='account__action-bar__tab' to
={`/accounts/${account.get('id')}/followers`}>
99 <span
><FormattedMessage id
='account.followers' defaultMessage
='Followers' /></span>
100 <strong
><FormattedNumber value
={account
.get('followers_count')} /> {extraInfo
}</strong
>
109 export default injectIntl(ActionBar
);
This page took 0.152487 seconds and 4 git commands to generate.