about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2016-12-02 15:05:50 +0100
committerEugen Rochko <eugen@zeonfederated.com>2016-12-02 15:05:50 +0100
commit8cfcc528765af2ae79ddf02350ee2c8ab7e91fd9 (patch)
tree4743132777458d165ff1ee99e4172d885a14d280 /app
parent470f629b06477eb3fb049de16de73c6e829f20b5 (diff)
Make all account links into permalinks (open public except on left click)
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/components/components/account.jsx6
-rw-r--r--app/assets/javascripts/components/components/permalink.jsx27
-rw-r--r--app/assets/javascripts/components/features/compose/components/navigation_bar.jsx9
-rw-r--r--app/assets/javascripts/components/features/notifications/components/notification.jsx4
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':