M app/javascript/flavours/glitch/containers/status_container.js => app/javascript/flavours/glitch/containers/status_container.js +20 -16
@@ 38,7 38,6 @@ import {
undoStatusTranslation,
} from "flavours/glitch/actions/statuses";
import Status from "flavours/glitch/components/status";
-import { boostModal, favouriteModal, deleteModal } from "flavours/glitch/initial_state";
import { makeGetStatus, makeGetPictureInPicture } from "flavours/glitch/selectors";
import { showAlertForError } from "../actions/alerts";
@@ 127,7 126,7 @@ const mapDispatchToProps = (dispatch, { intl, contextType }) => ({
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(initBoostModal({ status, onReblog: this.onModalReblog, missingMediaDescription: true }));
- } else if (e.shiftKey || !boostModal) {
+ } else if (e.shiftKey || !state.getIn(['local_settings', 'confirm_boost']) || status.get('reblogged')) {
this.onModalReblog(status);
} else {
dispatch(initBoostModal({ status, onReblog: this.onModalReblog }));
@@ 148,10 147,12 @@ const mapDispatchToProps = (dispatch, { intl, contextType }) => ({
},
onFavourite (status, e) {
+ dispatch((_, getState) => {
+ let state = getState();
if (status.get("favourited")) {
dispatch(unfavourite(status));
} else {
- if (e.shiftKey || !favouriteModal) {
+ if (e.shiftKey || !state.getIn(['local_settings', 'confirm_favourite'])) {
this.onModalFavourite(status);
} else {
dispatch(openModal({
@@ 162,7 163,7 @@ const mapDispatchToProps = (dispatch, { intl, contextType }) => ({
},
}));
}
- }
+ }});
},
onPin (status) {
@@ 184,18 185,21 @@ const mapDispatchToProps = (dispatch, { intl, contextType }) => ({
},
onDelete (status, history, withRedraft = false) {
- if (!deleteModal) {
- dispatch(deleteStatus(status.get("id"), history, withRedraft));
- } else {
- dispatch(openModal({
- modalType: "CONFIRM",
- modalProps: {
- message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),
- confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),
- onConfirm: () => dispatch(deleteStatus(status.get("id"), history, withRedraft)),
- },
- }));
- }
+ dispatch((_, getState) => {
+ let state = getState();
+ if (!state.getIn(['local_settings', 'confirm_delete'])) {
+ dispatch(deleteStatus(status.get("id"), history, withRedraft));
+ } else {
+ dispatch(openModal({
+ modalType: "CONFIRM",
+ modalProps: {
+ message: intl.formatMessage(withRedraft ? messages.redraftMessage : messages.deleteMessage),
+ confirm: intl.formatMessage(withRedraft ? messages.redraftConfirm : messages.deleteConfirm),
+ onConfirm: () => dispatch(deleteStatus(status.get("id"), history, withRedraft)),
+ },
+ }));
+ }
+ });
},
onEdit (status, history) {
M app/javascript/flavours/glitch/features/local_settings/page/index.jsx => app/javascript/flavours/glitch/features/local_settings/page/index.jsx +36 -0
@@ 109,6 109,42 @@ class LocalSettingsPage extends PureComponent {
<FormattedMessage id='settings.rewrite_mentions' defaultMessage='Rewrite mentions in displayed statuses' />
</LocalSettingsPageItem>
<section>
+ <h2><FormattedMessage id='settings.confirmation_dialogs' defaultMessage='Confirmation Dialogs'/></h2>
+ <LocalSettingsPageItem
+ settings={settings}
+ item={['confirm_unfollow']}
+ id='mastodon-settings--confirm_unfollow'
+ onChange={onChange}
+ >
+ <FormattedMessage id='settings.confirm_unfollow' defaultMessage='Show a confirmation dialog before unfollowing an account' />
+ </LocalSettingsPageItem>
+ <LocalSettingsPageItem
+ settings={settings}
+ item={['confirm_delete']}
+ id='mastodon-settings--confirm_delete'
+ onChange={onChange}
+ >
+ <FormattedMessage id='settings.confirm_delete' defaultMessage='Show a confirmation dialog before deleting a post' />
+ </LocalSettingsPageItem>
+ <LocalSettingsPageItem
+ settings={settings}
+ item={['confirm_boost']}
+ id='mastodon-settings--confirm_boost'
+ onChange={onChange}
+ >
+ <FormattedMessage id='settings.confirm_boost' defaultMessage='Show a confirmation dialog before boosting a post' />
+ </LocalSettingsPageItem>
+ <LocalSettingsPageItem
+ settings={settings}
+ item={['confirm_favourite']}
+ id='mastodon-settings--confirm_favourite'
+ onChange={onChange}
+ >
+ <FormattedMessage id='settings.confirm_favourite' defaultMessage='Show a confirmation dialog before favouriting a post' />
+ </LocalSettingsPageItem>
+
+ </section>
+ <section>
<h2><FormattedMessage id='settings.notifications_opts' defaultMessage='Notifications options' /></h2>
<LocalSettingsPageItem
settings={settings}
M app/javascript/flavours/glitch/features/status/index.jsx => app/javascript/flavours/glitch/features/status/index.jsx +5 -6
@@ 52,7 52,6 @@ import ScrollContainer from "flavours/glitch/containers/scroll_container";
import StatusContainer from "flavours/glitch/containers/status_container";
import BundleColumnError from "flavours/glitch/features/ui/components/bundle_column_error";
import Column from "flavours/glitch/features/ui/components/column";
-import { boostModal, favouriteModal, deleteModal } from "flavours/glitch/initial_state";
import { makeGetStatus, makeGetPictureInPicture } from "flavours/glitch/selectors";
import { autoUnfoldCW } from "flavours/glitch/utils/content_warning";
@@ 275,14 274,14 @@ class Status extends ImmutablePureComponent {
};
handleFavouriteClick = (status, e) => {
- const { dispatch } = this.props;
+ const { settings, dispatch } = this.props;
const { signedIn } = this.context.identity;
if (signedIn) {
if (status.get("favourited")) {
dispatch(unfavourite(status));
} else {
- if ((e && e.shiftKey) || !favouriteModal) {
+ if ((e && e.shiftKey) || !settings.get('confirm_favourite')) {
this.handleModalFavourite(status);
} else {
dispatch(openModal({
@@ 361,7 360,7 @@ class Status extends ImmutablePureComponent {
if (signedIn) {
if (settings.get("confirm_boost_missing_media_description") && status.get("media_attachments").some(item => !item.get("description")) && !status.get("reblogged")) {
dispatch(initBoostModal({ status, onReblog: this.handleModalReblog, missingMediaDescription: true }));
- } else if ((e && e.shiftKey) || !boostModal) {
+ } else if ((e && e.shiftKey) || !settings.get('confirm_boost') || status.get('reblogged')) {
this.handleModalReblog(status);
} else {
dispatch(initBoostModal({ status, onReblog: this.handleModalReblog }));
@@ 387,9 386,9 @@ class Status extends ImmutablePureComponent {
};
handleDeleteClick = (status, history, withRedraft = false) => {
- const { dispatch, intl } = this.props;
+ const { settings, dispatch, intl } = this.props;
- if (!deleteModal) {
+ if (!settings.get('confirm_delete')) {
dispatch(deleteStatus(status.get("id"), history, withRedraft));
} else {
dispatch(openModal({
M app/javascript/flavours/glitch/locales/en.json => app/javascript/flavours/glitch/locales/en.json +4 -0
@@ 163,6 163,10 @@
"settings.rewrite_mentions_acct": "Rewrite with username and domain (when the account is remote)",
"settings.rewrite_mentions_no": "Do not rewrite mentions",
"settings.rewrite_mentions_username": "Rewrite with username",
+ "settings.confirm_unfollow": "Show a confirmation dialog before unfollowing an account",
+ "settings.confirm_boost": "Show a confirmation dialog before boosting",
+ "settings.confirm_delete": "Show a confirmation dialog before deleting a post",
+ "settings.confirm_favourite": "Show a confirmation dialog before favouriting a post",
"settings.shared_settings_link": "user preferences",
"settings.show_action_bar": "Show action buttons in collapsed toots",
"settings.show_content_type_choice": "Show content-type choice when authoring toots",
M app/javascript/flavours/glitch/reducers/local_settings.js => app/javascript/flavours/glitch/reducers/local_settings.js +4 -0
@@ 22,6 22,10 @@ const initialState = ImmutableMap({
show_content_type_choice: true,
tag_misleading_links: true,
rewrite_mentions: "no",
+ confirm_unfollow: true,
+ confirm_delete: true,
+ confirm_boost: false,
+ confirm_favourite: false,
content_warnings : ImmutableMap({
auto_unfold : false,
filter : null,