},
onReblog (status, e) {
- if (e.shiftKey || !boostModal) {
- this.onModalReblog(status);
- } else {
- dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));
- }
+ dispatch((_, getState) => {
+ let state = getState();
+ if (state.getIn(['local_settings', 'confirm_boost_missing_media_description']) && status.get('media_attachments').some(item => !item.get('description')) && !status.get('reblogged')) {
+ dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog, missingMediaDescription: true }));
+ } else if (e.shiftKey || !boostModal) {
+ this.onModalReblog(status);
+ } else {
+ dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));
+ }
+ });
},
onBookmark (status) {
<FormattedMessage id='settings.hicolor_privacy_icons' defaultMessage='High color privacy icons' />
<span className='hint'><FormattedMessage id='settings.hicolor_privacy_icons.hint' defaultMessage="Display privacy icons in bright and easily distinguishable colors" /></span>
</LocalSettingsPageItem>
+ <LocalSettingsPageItem
+ settings={settings}
+ item={['confirm_boost_missing_media_description']}
+ id='mastodon-settings--confirm_boost_missing_media_description'
+ onChange={onChange}
+ >
+ <FormattedMessage id='settings.confirm_boost_missing_media_description' defaultMessage='Show confirmation dialog before boosting toots lacking media descriptions' />
+ </LocalSettingsPageItem>
<section>
<h2><FormattedMessage id='settings.notifications_opts' defaultMessage='Notifications options' /></h2>
<LocalSettingsPageItem
}
handleReblogClick = (status, e) => {
+ const { settings, dispatch } = this.props;
+
if (status.get('reblogged')) {
- this.props.dispatch(unreblog(status));
+ dispatch(unreblog(status));
} else {
- if ((e && e.shiftKey) || !boostModal) {
+ if (settings.get('confirm_boost_missing_media_description') && status.get('media_attachments').some(item => !item.get('description'))) {
+ dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog, missingMediaDescription: true }));
+ } else if ((e && e.shiftKey) || !boostModal) {
this.handleModalReblog(status);
} else {
- this.props.dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog }));
+ dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog }));
}
}
}
status: ImmutablePropTypes.map.isRequired,
onReblog: PropTypes.func.isRequired,
onClose: PropTypes.func.isRequired,
+ missingMediaDescription: PropTypes.bool,
intl: PropTypes.object.isRequired,
};
}
render () {
- const { status, intl } = this.props;
+ const { status, missingMediaDescription, intl } = this.props;
const buttonText = status.get('reblogged') ? messages.cancel_reblog : messages.reblog;
return (
</div>
<div className='boost-modal__action-bar'>
- <div><FormattedMessage id='boost_modal.combo' defaultMessage='You can press {combo} to skip this next time' values={{ combo: <span>Shift + <i className='fa fa-retweet' /></span> }} /></div>
+ <div>
+ { missingMediaDescription ?
+ <FormattedMessage id='boost_modal.missing_description' defaultMessage='This toot contains some media without description' />
+ :
+ <FormattedMessage id='boost_modal.combo' defaultMessage='You can press {combo} to skip this next time' values={{ combo: <span>Shift + <i className='fa fa-retweet' /></span> }} />
+ }
+ </div>
<Button text={intl.formatMessage(buttonText)} onClick={this.handleReblog} ref={this.setRef} />
</div>
</div>
show_reply_count : false,
always_show_spoilers_field: false,
confirm_missing_media_description: false,
+ confirm_boost_missing_media_description: false,
confirm_before_clearing_draft: true,
preselect_on_reply: true,
inline_preview_cards: true,