Make in-text mentions open account detailed view when possible
This commit is contained in:
		
							parent
							
								
									bc98865c1a
								
							
						
					
					
						commit
						74dfefabd3
					
				| @ -6,10 +6,14 @@ import IconButton         from './icon_button'; | |||||||
| import DisplayName        from './display_name'; | import DisplayName        from './display_name'; | ||||||
| import MediaGallery       from './media_gallery'; | import MediaGallery       from './media_gallery'; | ||||||
| import VideoPlayer        from './video_player'; | import VideoPlayer        from './video_player'; | ||||||
| import { hashHistory }    from 'react-router'; | import StatusContent      from './status_content'; | ||||||
| 
 | 
 | ||||||
| const Status = React.createClass({ | const Status = React.createClass({ | ||||||
| 
 | 
 | ||||||
|  |   contextTypes: { | ||||||
|  |     router: React.PropTypes.object | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|   propTypes: { |   propTypes: { | ||||||
|     status: ImmutablePropTypes.map.isRequired, |     status: ImmutablePropTypes.map.isRequired, | ||||||
|     wrapped: React.PropTypes.bool, |     wrapped: React.PropTypes.bool, | ||||||
| @ -34,20 +38,19 @@ const Status = React.createClass({ | |||||||
| 
 | 
 | ||||||
|   handleClick () { |   handleClick () { | ||||||
|     const { status } = this.props; |     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) { |   handleAccountClick (id, e) { | ||||||
|     if (e.button === 0) { |     if (e.button === 0) { | ||||||
|       e.preventDefault(); |       e.preventDefault(); | ||||||
|       hashHistory.push(`/accounts/${id}`); |       this.context.router.push(`/accounts/${id}`); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     e.stopPropagation(); |     e.stopPropagation(); | ||||||
|   }, |   }, | ||||||
| 
 | 
 | ||||||
|   render () { |   render () { | ||||||
|     var content = { __html: this.props.status.get('content') }; |  | ||||||
|     var media   = ''; |     var media   = ''; | ||||||
| 
 | 
 | ||||||
|     var { status, ...other } = this.props; |     var { status, ...other } = this.props; | ||||||
| @ -89,7 +92,7 @@ const Status = React.createClass({ | |||||||
|           </a> |           </a> | ||||||
|         </div> |         </div> | ||||||
| 
 | 
 | ||||||
|         <div className='status__content' dangerouslySetInnerHTML={content} /> |         <StatusContent status={status} /> | ||||||
| 
 | 
 | ||||||
|         {media} |         {media} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -0,0 +1,41 @@ | |||||||
|  | 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; | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user