Replace sprockets/browserify with Webpack (#2617)
* Replace browserify with webpack * Add react-intl-translations-manager * Do not minify in development, add offline-plugin for ServiceWorker background cache updates * Adjust tests and dependencies * Fix production deployments * Fix tests * More optimizations * Improve travis cache for npm stuff * Re-run travis * Add back support for custom.scss as before * Remove offline-plugin and babili * Fix issue with Immutable.List().unshift(...values) not working as expected * Make travis load schema instead of running all migrations in sequence * Fix missing React import in WarningContainer. Optimize rendering performance by using ImmutablePureComponent instead of React.PureComponent. ImmutablePureComponent uses Immutable.is() to compare props. Replace dynamic callback bindings in <UI /> * Add react definitions to places that use JSX * Add Procfile.dev for running rails, webpack and streaming API at the same time
This commit is contained in:
		
					parent
					
						
							
								26bc591572
							
						
					
				
			
			
				commit
				
					
						f5bf5ebb82
					
				
			
		
					 343 changed files with 5299 additions and 2081 deletions
				
			
		
							
								
								
									
										96
									
								
								app/javascript/mastodon/features/status/components/card.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								app/javascript/mastodon/features/status/components/card.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,96 @@ | |||
| import React from 'react'; | ||||
| import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
| 
 | ||||
| const hostStyle = { | ||||
|   display: 'block', | ||||
|   marginTop: '5px', | ||||
|   fontSize: '13px' | ||||
| }; | ||||
| 
 | ||||
| const getHostname = url => { | ||||
|   const parser = document.createElement('a'); | ||||
|   parser.href = url; | ||||
|   return parser.hostname; | ||||
| }; | ||||
| 
 | ||||
| class Card extends React.PureComponent { | ||||
| 
 | ||||
|   renderLink () { | ||||
|     const { card } = this.props; | ||||
| 
 | ||||
|     let image    = ''; | ||||
|     let provider = card.get('provider_name'); | ||||
| 
 | ||||
|     if (card.get('image')) { | ||||
|       image = ( | ||||
|         <div className='status-card__image'> | ||||
|           <img src={card.get('image')} alt={card.get('title')} className='status-card__image-image' /> | ||||
|         </div> | ||||
|       ); | ||||
|     } | ||||
| 
 | ||||
|     if (provider.length < 1) { | ||||
|       provider = getHostname(card.get('url')) | ||||
|     } | ||||
| 
 | ||||
|     return ( | ||||
|       <a href={card.get('url')} className='status-card' target='_blank' rel='noopener'> | ||||
|         {image} | ||||
| 
 | ||||
|         <div className='status-card__content'> | ||||
|           <strong className='status-card__title' title={card.get('title')}>{card.get('title')}</strong> | ||||
|           <p className='status-card__description'>{(card.get('description') || '').substring(0, 50)}</p> | ||||
|           <span className='status-card__host' style={hostStyle}>{provider}</span> | ||||
|         </div> | ||||
|       </a> | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   renderPhoto () { | ||||
|     const { card } = this.props; | ||||
| 
 | ||||
|     return ( | ||||
|       <a href={card.get('url')} className='status-card-photo' target='_blank' rel='noopener'> | ||||
|         <img src={card.get('url')} alt={card.get('title')} width={card.get('width')} height={card.get('height')} /> | ||||
|       </a> | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   renderVideo () { | ||||
|     const { card } = this.props; | ||||
|     const content  = { __html: card.get('html') }; | ||||
| 
 | ||||
|     return ( | ||||
|       <div | ||||
|         className='status-card-video' | ||||
|         dangerouslySetInnerHTML={content} | ||||
|       /> | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
|   render () { | ||||
|     const { card } = this.props; | ||||
| 
 | ||||
|     if (card === null) { | ||||
|       return null; | ||||
|     } | ||||
| 
 | ||||
|     switch(card.get('type')) { | ||||
|     case 'link': | ||||
|       return this.renderLink(); | ||||
|     case 'photo': | ||||
|       return this.renderPhoto(); | ||||
|     case 'video': | ||||
|       return this.renderVideo(); | ||||
|     case 'rich': | ||||
|     default: | ||||
|       return null; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| Card.propTypes = { | ||||
|   card: ImmutablePropTypes.map | ||||
| }; | ||||
| 
 | ||||
| export default Card; | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue