diff --git a/app/javascript/mastodon/components/status.js b/app/javascript/mastodon/components/status.js index fe2ee6a0f..b12b02dbd 100644 --- a/app/javascript/mastodon/components/status.js +++ b/app/javascript/mastodon/components/status.js @@ -245,10 +245,19 @@ class Status extends ImmutablePureComponent { this.props.onOpenVideo(status.get('id'), status.getIn(['media_attachments', 0]), options); } + handleOpenVideoQuote = (options) => { + const status = this._properQuoteStatus(); + this.props.onOpenVideo(status.get('id'), status.getIn(['media_attachments', 0]), options); + } + handleOpenMedia = (media, index) => { this.props.onOpenMedia(this._properStatus().get('id'), media, index); } + handleOpenMediaQuote = (media, index) => { + this.props.onOpenMedia(this._properQuoteStatus().get('id'), media, index); + } + handleHotkeyOpenMedia = e => { const { onOpenMedia, onOpenVideo } = this.props; const status = this._properStatus(); @@ -323,14 +332,18 @@ class Status extends ImmutablePureComponent { } } - handleRef = c => { - this.node = c; + _properQuoteStatus () { + const status = this._properStatus(); + + if (status.get('quote', null) !== null && typeof status.get('quote') === 'object') { + return status.get('quote'); + } else { + return status; + } } - _properQuoteStatus () { - const { status } = this.props; - - return status.get('quote'); + handleRef = c => { + this.node = c; } render () { @@ -514,7 +527,7 @@ class Status extends ImmutablePureComponent { const visibilityIcon = visibilityIconInfo[status.get('visibility')]; let quote = null; - if (status.get('quote', null) !== null) { + if (status.get('quote', null) !== null && typeof status.get('quote') === 'object') { let quote_status = status.get('quote'); let quote_media = null; @@ -565,7 +578,7 @@ class Status extends ImmutablePureComponent { height={110} inline sensitive={quote_status.get('sensitive')} - onOpenVideo={this.handleOpenVideo} + onOpenVideo={this.handleOpenVideoQuote} cacheWidth={this.props.cacheMediaWidth} deployPictureInPicture={pictureInPicture.get('available') ? this.handleDeployPictureInPicture : undefined} visible={this.state.showQuoteMedia} @@ -583,7 +596,7 @@ class Status extends ImmutablePureComponent { media={quote_status.get('media_attachments')} sensitive={quote_status.get('sensitive')} height={110} - onOpenMedia={this.handleOpenMedia} + onOpenMedia={this.handleOpenMediaQuote} cacheWidth={this.props.cacheMediaWidth} defaultWidth={this.props.cachedMediaWidth} visible={this.state.showQuoteMedia} diff --git a/app/javascript/mastodon/features/status/components/detailed_status.js b/app/javascript/mastodon/features/status/components/detailed_status.js index 8b9f3d711..3856bb47c 100644 --- a/app/javascript/mastodon/features/status/components/detailed_status.js +++ b/app/javascript/mastodon/features/status/components/detailed_status.js @@ -61,6 +61,8 @@ class DetailedStatus extends ImmutablePureComponent { quote_muted: PropTypes.bool, onOpenMedia: PropTypes.func.isRequired, onOpenVideo: PropTypes.func.isRequired, + onOpenMediaQuote: PropTypes.func.isRequired, + onOpenVideoQuote: PropTypes.func.isRequired, onToggleHidden: PropTypes.func.isRequired, measureHeight: PropTypes.bool, onHeightChange: PropTypes.func, @@ -95,6 +97,10 @@ class DetailedStatus extends ImmutablePureComponent { this.props.onOpenVideo(this.props.status.getIn(['media_attachments', 0]), options); } + handleOpenVideoQuote = (options) => { + this.props.onOpenVideoQuote(this.props.status.getIn(['quote', 'media_attachments', 0]), options); + } + handleExpandedToggle = () => { this.props.onToggleHidden(this.props.status); } @@ -199,7 +205,7 @@ class DetailedStatus extends ImmutablePureComponent { width={300} height={150} inline - onOpenVideo={this.handleOpenVideo} + onOpenVideo={this.handleOpenVideoQuote} sensitive={quote_status.get('sensitive')} visible={this.props.showQuoteMedia} onToggleVisibility={this.props.onToggleQuoteMediaVisibility} @@ -213,7 +219,7 @@ class DetailedStatus extends ImmutablePureComponent { sensitive={quote_status.get('sensitive')} media={quote_status.get('media_attachments')} height={300} - onOpenMedia={this.props.onOpenMedia} + onOpenMedia={this.props.onOpenMediaQuote} visible={this.props.showQuoteMedia} onToggleVisibility={this.props.onToggleQuoteMediaVisibility} quote diff --git a/app/javascript/mastodon/features/status/index.js b/app/javascript/mastodon/features/status/index.js index ce0a26cb3..79bbdefa8 100644 --- a/app/javascript/mastodon/features/status/index.js +++ b/app/javascript/mastodon/features/status/index.js @@ -313,6 +313,14 @@ class Status extends ImmutablePureComponent { this.props.dispatch(openModal('VIDEO', { statusId: this.props.status.get('id'), media, options })); } + handleOpenMediaQuote = (media, index) => { + this.props.dispatch(openModal('MEDIA', { statusId: this.props.status.getIn(['quote', 'id']), media, index })); + } + + handleOpenVideoQuote = (media, options) => { + this.props.dispatch(openModal('VIDEO', { statusId: this.props.status.getIn(['quote', 'id']), media, options })); + } + handleHotkeyOpenMedia = e => { const { status } = this.props; @@ -584,6 +592,8 @@ class Status extends ImmutablePureComponent { status={status} onOpenVideo={this.handleOpenVideo} onOpenMedia={this.handleOpenMedia} + onOpenVideoQuote={this.handleOpenVideoQuote} + onOpenMediaQuote={this.handleOpenMediaQuote} onToggleHidden={this.handleToggleHidden} domain={domain} showMedia={this.state.showMedia}