Merge pull request #900 from ThibG/glitch-soc/merge-upstream
Merge upstream changes
This commit is contained in:
		
						commit
						e488faaa4a
					
				|  | @ -139,6 +139,9 @@ export default class Video extends React.PureComponent { | ||||||
| 
 | 
 | ||||||
|   setVideoRef = c => { |   setVideoRef = c => { | ||||||
|     this.video = c; |     this.video = c; | ||||||
|  |     if (this.video) { | ||||||
|  |       this.setState({ volume: this.video.volume, muted: this.video.muted }); | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   setSeekRef = c => { |   setSeekRef = c => { | ||||||
|  | @ -319,6 +322,10 @@ export default class Video extends React.PureComponent { | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   handleVolumeChange = () => { | ||||||
|  |     this.setState({ volume: this.video.volume, muted: this.video.muted }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   handleOpenVideo = () => { |   handleOpenVideo = () => { | ||||||
|     const { src, preview, width, height, alt } = this.props; |     const { src, preview, width, height, alt } = this.props; | ||||||
|     const media = fromJS({ |     const media = fromJS({ | ||||||
|  | @ -407,6 +414,7 @@ export default class Video extends React.PureComponent { | ||||||
|           onTimeUpdate={this.handleTimeUpdate} |           onTimeUpdate={this.handleTimeUpdate} | ||||||
|           onLoadedData={this.handleLoadedData} |           onLoadedData={this.handleLoadedData} | ||||||
|           onProgress={this.handleProgress} |           onProgress={this.handleProgress} | ||||||
|  |           onVolumeChange={this.handleVolumeChange} | ||||||
|         /> |         /> | ||||||
| 
 | 
 | ||||||
|         <button type='button' className={classNames('video-player__spoiler', { active: !revealed })} onClick={this.toggleReveal}> |         <button type='button' className={classNames('video-player__spoiler', { active: !revealed })} onClick={this.toggleReveal}> | ||||||
|  | @ -429,7 +437,7 @@ export default class Video extends React.PureComponent { | ||||||
|           <div className='video-player__buttons-bar'> |           <div className='video-player__buttons-bar'> | ||||||
|             <div className='video-player__buttons left'> |             <div className='video-player__buttons left'> | ||||||
|               <button type='button' aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay}><i className={classNames('fa fa-fw', { 'fa-play': paused, 'fa-pause': !paused })} /></button> |               <button type='button' aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay}><i className={classNames('fa fa-fw', { 'fa-play': paused, 'fa-pause': !paused })} /></button> | ||||||
|               <button type='button' aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onMouseEnter={this.volumeSlider} onMouseLeave={this.volumeSlider} onClick={this.toggleMute}><i className={classNames('fa fa-fw', { 'fa-volume-off': muted, 'fa-volume-up': !muted })} /></button> |               <button type='button' aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onClick={this.toggleMute}><i className={classNames('fa fa-fw', { 'fa-volume-off': muted, 'fa-volume-up': !muted })} /></button> | ||||||
|               <div className='video-player__volume' onMouseDown={this.handleVolumeMouseDown} ref={this.setVolumeRef}> |               <div className='video-player__volume' onMouseDown={this.handleVolumeMouseDown} ref={this.setVolumeRef}> | ||||||
|                 <div className='video-player__volume__current' style={{ width: `${volumeWidth}px` }} /> |                 <div className='video-player__volume__current' style={{ width: `${volumeWidth}px` }} /> | ||||||
|                 <span |                 <span | ||||||
|  |  | ||||||
|  | @ -29,6 +29,10 @@ class Notification extends ImmutablePureComponent { | ||||||
|     onMoveUp: PropTypes.func.isRequired, |     onMoveUp: PropTypes.func.isRequired, | ||||||
|     onMoveDown: PropTypes.func.isRequired, |     onMoveDown: PropTypes.func.isRequired, | ||||||
|     onMention: PropTypes.func.isRequired, |     onMention: PropTypes.func.isRequired, | ||||||
|  |     onFavourite: PropTypes.func.isRequired, | ||||||
|  |     onReblog: PropTypes.func.isRequired, | ||||||
|  |     onToggleHidden: PropTypes.func.isRequired, | ||||||
|  |     status: PropTypes.option, | ||||||
|     intl: PropTypes.object.isRequired, |     intl: PropTypes.object.isRequired, | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  | @ -64,14 +68,32 @@ class Notification extends ImmutablePureComponent { | ||||||
|     onMention(notification.get('account'), this.context.router.history); |     onMention(notification.get('account'), this.context.router.history); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   handleHotkeyFavourite = () => { | ||||||
|  |     const { status } = this.props; | ||||||
|  |     if (status) this.props.onFavourite(status); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   handleHotkeyBoost = e => { | ||||||
|  |     const { status } = this.props; | ||||||
|  |     if (status) this.props.onReblog(status, e); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   handleHotkeyToggleHidden = () => { | ||||||
|  |     const { status } = this.props; | ||||||
|  |     if (status) this.props.onToggleHidden(status); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   getHandlers () { |   getHandlers () { | ||||||
|     return { |     return { | ||||||
|       moveUp: this.handleMoveUp, |       reply: this.handleMention, | ||||||
|       moveDown: this.handleMoveDown, |       favourite: this.handleHotkeyFavourite, | ||||||
|  |       boost: this.handleHotkeyBoost, | ||||||
|  |       mention: this.handleMention, | ||||||
|       open: this.handleOpen, |       open: this.handleOpen, | ||||||
|       openProfile: this.handleOpenProfile, |       openProfile: this.handleOpenProfile, | ||||||
|       mention: this.handleMention, |       moveUp: this.handleMoveUp, | ||||||
|       reply: this.handleMention, |       moveDown: this.handleMoveDown, | ||||||
|  |       toggleHidden: this.handleHotkeyToggleHidden, | ||||||
|     }; |     }; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,14 +1,31 @@ | ||||||
| import { connect } from 'react-redux'; | import { connect } from 'react-redux'; | ||||||
| import { makeGetNotification } from '../../../selectors'; | import { makeGetNotification, makeGetStatus } from '../../../selectors'; | ||||||
| import Notification from '../components/notification'; | import Notification from '../components/notification'; | ||||||
|  | import { openModal } from '../../../actions/modal'; | ||||||
| import { mentionCompose } from '../../../actions/compose'; | import { mentionCompose } from '../../../actions/compose'; | ||||||
|  | import { | ||||||
|  |   reblog, | ||||||
|  |   favourite, | ||||||
|  |   unreblog, | ||||||
|  |   unfavourite, | ||||||
|  | } from '../../../actions/interactions'; | ||||||
|  | import { | ||||||
|  |   hideStatus, | ||||||
|  |   revealStatus, | ||||||
|  | } from '../../../actions/statuses'; | ||||||
|  | import { boostModal } from '../../../initial_state'; | ||||||
| 
 | 
 | ||||||
| const makeMapStateToProps = () => { | const makeMapStateToProps = () => { | ||||||
|   const getNotification = makeGetNotification(); |   const getNotification = makeGetNotification(); | ||||||
|  |   const getStatus = makeGetStatus(); | ||||||
| 
 | 
 | ||||||
|   const mapStateToProps = (state, props) => ({ |   const mapStateToProps = (state, props) => { | ||||||
|     notification: getNotification(state, props.notification, props.accountId), |     const notification = getNotification(state, props.notification, props.accountId); | ||||||
|   }); |     return { | ||||||
|  |       notification: notification, | ||||||
|  |       status: notification.get('status') ? getStatus(state, { id: notification.get('status') }) : null, | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
| 
 | 
 | ||||||
|   return mapStateToProps; |   return mapStateToProps; | ||||||
| }; | }; | ||||||
|  | @ -17,6 +34,38 @@ const mapDispatchToProps = dispatch => ({ | ||||||
|   onMention: (account, router) => { |   onMention: (account, router) => { | ||||||
|     dispatch(mentionCompose(account, router)); |     dispatch(mentionCompose(account, router)); | ||||||
|   }, |   }, | ||||||
|  | 
 | ||||||
|  |   onModalReblog (status) { | ||||||
|  |     dispatch(reblog(status)); | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   onReblog (status, e) { | ||||||
|  |     if (status.get('reblogged')) { | ||||||
|  |       dispatch(unreblog(status)); | ||||||
|  |     } else { | ||||||
|  |       if (e.shiftKey || !boostModal) { | ||||||
|  |         this.onModalReblog(status); | ||||||
|  |       } else { | ||||||
|  |         dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog })); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   onFavourite (status) { | ||||||
|  |     if (status.get('favourited')) { | ||||||
|  |       dispatch(unfavourite(status)); | ||||||
|  |     } else { | ||||||
|  |       dispatch(favourite(status)); | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  | 
 | ||||||
|  |   onToggleHidden (status) { | ||||||
|  |     if (status.get('hidden')) { | ||||||
|  |       dispatch(revealStatus(status.get('id'))); | ||||||
|  |     } else { | ||||||
|  |       dispatch(hideStatus(status.get('id'))); | ||||||
|  |     } | ||||||
|  |   }, | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| export default connect(makeMapStateToProps, mapDispatchToProps)(Notification); | export default connect(makeMapStateToProps, mapDispatchToProps)(Notification); | ||||||
|  |  | ||||||
|  | @ -136,6 +136,9 @@ class Video extends React.PureComponent { | ||||||
| 
 | 
 | ||||||
|   setVideoRef = c => { |   setVideoRef = c => { | ||||||
|     this.video = c; |     this.video = c; | ||||||
|  |     if (this.video) { | ||||||
|  |       this.setState({ volume: this.video.volume, muted: this.video.muted }); | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   setSeekRef = c => { |   setSeekRef = c => { | ||||||
|  | @ -302,6 +305,10 @@ class Video extends React.PureComponent { | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   handleVolumeChange = () => { | ||||||
|  |     this.setState({ volume: this.video.volume, muted: this.video.muted }); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   handleOpenVideo = () => { |   handleOpenVideo = () => { | ||||||
|     const { src, preview, width, height, alt } = this.props; |     const { src, preview, width, height, alt } = this.props; | ||||||
|     const media = fromJS({ |     const media = fromJS({ | ||||||
|  | @ -387,6 +394,7 @@ class Video extends React.PureComponent { | ||||||
|           onTimeUpdate={this.handleTimeUpdate} |           onTimeUpdate={this.handleTimeUpdate} | ||||||
|           onLoadedData={this.handleLoadedData} |           onLoadedData={this.handleLoadedData} | ||||||
|           onProgress={this.handleProgress} |           onProgress={this.handleProgress} | ||||||
|  |           onVolumeChange={this.handleVolumeChange} | ||||||
|         /> |         /> | ||||||
| 
 | 
 | ||||||
|         <button type='button' className={classNames('video-player__spoiler', { active: !revealed })} onClick={this.toggleReveal}> |         <button type='button' className={classNames('video-player__spoiler', { active: !revealed })} onClick={this.toggleReveal}> | ||||||
|  | @ -409,7 +417,7 @@ class Video extends React.PureComponent { | ||||||
|           <div className='video-player__buttons-bar'> |           <div className='video-player__buttons-bar'> | ||||||
|             <div className='video-player__buttons left'> |             <div className='video-player__buttons left'> | ||||||
|               <button type='button' aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay}><i className={classNames('fa fa-fw', { 'fa-play': paused, 'fa-pause': !paused })} /></button> |               <button type='button' aria-label={intl.formatMessage(paused ? messages.play : messages.pause)} onClick={this.togglePlay}><i className={classNames('fa fa-fw', { 'fa-play': paused, 'fa-pause': !paused })} /></button> | ||||||
|               <button type='button' aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onMouseEnter={this.volumeSlider} onMouseLeave={this.volumeSlider} onClick={this.toggleMute}><i className={classNames('fa fa-fw', { 'fa-volume-off': muted, 'fa-volume-up': !muted })} /></button> |               <button type='button' aria-label={intl.formatMessage(muted ? messages.unmute : messages.mute)} onClick={this.toggleMute}><i className={classNames('fa fa-fw', { 'fa-volume-off': muted, 'fa-volume-up': !muted })} /></button> | ||||||
|               <div className='video-player__volume' onMouseDown={this.handleVolumeMouseDown} ref={this.setVolumeRef}> |               <div className='video-player__volume' onMouseDown={this.handleVolumeMouseDown} ref={this.setVolumeRef}> | ||||||
|                 <div className='video-player__volume__current' style={{ width: `${volumeWidth}px` }} /> |                 <div className='video-player__volume__current' style={{ width: `${volumeWidth}px` }} /> | ||||||
|                 <span |                 <span | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue