import DisplayName from './display_name';
import MediaGallery from './media_gallery';
import VideoPlayer from './video_player';
-import { hashHistory } from 'react-router';
+import StatusContent from './status_content';
const Status = React.createClass({
+ contextTypes: {
+ router: React.PropTypes.object
+ },
+
propTypes: {
status: ImmutablePropTypes.map.isRequired,
wrapped: React.PropTypes.bool,
handleClick () {
const { status } = this.props;
- hashHistory.push(`/statuses/${status.getIn(['reblog', 'id'], status.get('id'))}`);
+ this.context.router.push(`/statuses/${status.getIn(['reblog', 'id'], status.get('id'))}`);
},
handleAccountClick (id, e) {
if (e.button === 0) {
e.preventDefault();
- hashHistory.push(`/accounts/${id}`);
+ this.context.router.push(`/accounts/${id}`);
}
e.stopPropagation();
},
render () {
- var content = { __html: this.props.status.get('content') };
var media = '';
var { status, ...other } = this.props;
</a>
</div>
- <div className='status__content' dangerouslySetInnerHTML={content} />
+ <StatusContent status={status} />
{media}
--- /dev/null
+import ImmutablePropTypes from 'react-immutable-proptypes';
+import PureRenderMixin from 'react-addons-pure-render-mixin';
+
+const StatusContent = React.createClass({
+
+ contextTypes: {
+ router: React.PropTypes.object
+ },
+
+ propTypes: {
+ status: ImmutablePropTypes.map.isRequired
+ },
+
+ mixins: [PureRenderMixin],
+
+ componentDidMount () {
+ const node = ReactDOM.findDOMNode(this);
+
+ this.props.status.get('mentions').forEach(mention => {
+ const links = node.querySelector(`a[href="${mention.get('url')}"]`);
+ links.addEventListener('click', this.onLinkClick.bind(this, mention));
+ });
+ },
+
+ onLinkClick (mention, e) {
+ if (e.button === 0) {
+ e.preventDefault();
+ this.context.router.push(`/accounts/${mention.get('id')}`);
+ }
+
+ e.stopPropagation();
+ },
+
+ render () {
+ const content = { __html: this.props.status.get('content') };
+ return <div className='status__content' dangerouslySetInnerHTML={content} />;
+ },
+
+});
+
+export default StatusContent;