diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2016-12-02 15:05:50 +0100 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2016-12-02 15:05:50 +0100 |
commit | 8cfcc528765af2ae79ddf02350ee2c8ab7e91fd9 (patch) | |
tree | 4743132777458d165ff1ee99e4172d885a14d280 /app/assets/javascripts | |
parent | 470f629b06477eb3fb049de16de73c6e829f20b5 (diff) |
Make all account links into permalinks (open public except on left click)
Diffstat (limited to 'app/assets/javascripts')
4 files changed, 37 insertions, 9 deletions
diff --git a/app/assets/javascripts/components/components/account.jsx b/app/assets/javascripts/components/components/account.jsx index 558b38b42..d63ad646e 100644 --- a/app/assets/javascripts/components/components/account.jsx +++ b/app/assets/javascripts/components/components/account.jsx @@ -2,7 +2,7 @@ import PureRenderMixin from 'react-addons-pure-render-mixin'; import ImmutablePropTypes from 'react-immutable-proptypes'; import Avatar from './avatar'; import DisplayName from './display_name'; -import { Link } from 'react-router'; +import Permalink from './permalink'; import IconButton from './icon_button'; import { defineMessages, injectIntl } from 'react-intl'; @@ -78,10 +78,10 @@ const Account = React.createClass({ return ( <div style={outerStyle}> <div style={{ display: 'flex' }}> - <Link key={account.get('id')} style={itemStyle} className='account__display-name' to={`/accounts/${account.get('id')}`}> + <Permalink key={account.get('id')} style={itemStyle} className='account__display-name' href={account.get('url')} to={`/accounts/${account.get('id')}`}> <div style={{ float: 'left', marginLeft: '12px', marginRight: '10px' }}><Avatar src={account.get('avatar')} size={36} /></div> <DisplayName account={account} /> - </Link> + </Permalink> <div style={buttonsStyle}> {buttons} diff --git a/app/assets/javascripts/components/components/permalink.jsx b/app/assets/javascripts/components/components/permalink.jsx new file mode 100644 index 000000000..ae2fb0d29 --- /dev/null +++ b/app/assets/javascripts/components/components/permalink.jsx @@ -0,0 +1,27 @@ +const Permalink = React.createClass({ + + contextTypes: { + router: React.PropTypes.object + }, + + propTypes: { + href: React.PropTypes.string.isRequired, + to: React.PropTypes.string.isRequired + }, + + handleClick (e) { + if (e.button === 0) { + e.preventDefault(); + this.context.router.push(this.props.to); + } + }, + + render () { + const { href, children, ...other } = this.props; + + return <a href={href} onClick={this.handleClick} {...other}>{children}</a>; + } + +}); + +export default Permalink; diff --git a/app/assets/javascripts/components/features/compose/components/navigation_bar.jsx b/app/assets/javascripts/components/features/compose/components/navigation_bar.jsx index 4ba6d2290..df94c30d2 100644 --- a/app/assets/javascripts/components/features/compose/components/navigation_bar.jsx +++ b/app/assets/javascripts/components/features/compose/components/navigation_bar.jsx @@ -1,10 +1,11 @@ -import PureRenderMixin from 'react-addons-pure-render-mixin'; +import PureRenderMixin from 'react-addons-pure-render-mixin'; import ImmutablePropTypes from 'react-immutable-proptypes'; -import Avatar from '../../../components/avatar'; +import Avatar from '../../../components/avatar'; import IconButton from '../../../components/icon_button'; import DisplayName from '../../../components/display_name'; -import { Link } from 'react-router'; +import Permalink from '../../../components/permalink'; import { FormattedMessage } from 'react-intl'; +import { Link } from 'react-router'; const NavigationBar = React.createClass({ propTypes: { @@ -16,7 +17,7 @@ const NavigationBar = React.createClass({ render () { return ( <div style={{ padding: '10px', display: 'flex', cursor: 'default' }}> - <Link to={`/accounts/${this.props.account.get('id')}`} style={{ textDecoration: 'none' }}><Avatar src={this.props.account.get('avatar')} size={40} /></Link> + <Permalink href={this.props.account.get('url')} to={`/accounts/${this.props.account.get('id')}`} style={{ textDecoration: 'none' }}><Avatar src={this.props.account.get('avatar')} size={40} /></Permalink> <div style={{ flex: '1 1 auto', marginLeft: '8px', color: '#9baec8' }}> <strong style={{ fontWeight: '500', display: 'block', color: '#fff' }}>{this.props.account.get('acct')}</strong> diff --git a/app/assets/javascripts/components/features/notifications/components/notification.jsx b/app/assets/javascripts/components/features/notifications/components/notification.jsx index a8208f02c..9f4cf9e4d 100644 --- a/app/assets/javascripts/components/features/notifications/components/notification.jsx +++ b/app/assets/javascripts/components/features/notifications/components/notification.jsx @@ -3,7 +3,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import StatusContainer from '../../../containers/status_container'; import AccountContainer from '../../../containers/account_container'; import { FormattedMessage } from 'react-intl'; -import { Link } from 'react-router'; +import Permalink from '../../../components/permalink'; const messageStyle = { marginLeft: '68px', @@ -83,7 +83,7 @@ const Notification = React.createClass({ const { notification } = this.props; const account = notification.get('account'); const displayName = account.get('display_name').length > 0 ? account.get('display_name') : account.get('username'); - const link = <Link className='notification__display-name' style={linkStyle} to={`/accounts/${account.get('id')}`}>{displayName}</Link>; + const link = <Permalink className='notification__display-name' style={linkStyle} href={account.get('url')} to={`/accounts/${account.get('id')}`}>{displayName}</Permalink>; switch(notification.get('type')) { case 'follow': |