Merge commit 'ac59772dc6cda646258e61debfd792f9057c1c39' into glitch-soc/merge-upstream
Conflicts: - `app/controllers/api/v1/statuses_controller.rb`: Conflict because upstream added a parameter where glitch-soc had an extra one. Added upstream's parameter while keeping glitch-soc's. - `app/serializers/activitypub/note_serializer.rb`: Conflict because upstream added an extension where glitch-soc had an extra one. Added upstream's extension while keeping glitch-soc's. - `app/services/update_status_service.rb`: Conflict because upstream added a parameter where glitch-soc had an extra one. Added upstream's parameter while keeping glitch-soc's.
This commit is contained in:
commit
235037a3b2
59 files changed
+444
-57
No files matched your search
@@ -1 +1,3 @@
|
||||
Images in this folder are based on [Tabler.io icons](https://tabler.io/icons).
|
||||
|
||||
Seems to be 1.5 width icons scaled to 64×64px and centered above a blue square with round corners (24px).
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.8 KiB |
@@ -1,4 +1,8 @@
|
||||
import { apiReblog, apiUnreblog } from 'mastodon/api/interactions';
|
||||
import {
|
||||
apiReblog,
|
||||
apiUnreblog,
|
||||
apiRevokeQuote,
|
||||
} from 'mastodon/api/interactions';
|
||||
import type { StatusVisibility } from 'mastodon/models/status';
|
||||
import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
|
||||
|
||||
@@ -33,3 +37,19 @@ export const unreblog = createDataLoadingThunk(
|
||||
return discardLoadData;
|
||||
},
|
||||
);
|
||||
|
||||
export const revokeQuote = createDataLoadingThunk(
|
||||
'status/revoke_quote',
|
||||
({
|
||||
statusId,
|
||||
quotedStatusId,
|
||||
}: {
|
||||
statusId: string;
|
||||
quotedStatusId: string;
|
||||
}) => apiRevokeQuote(quotedStatusId, statusId),
|
||||
(data, { dispatch, discardLoadData }) => {
|
||||
dispatch(importFetchedStatus(data));
|
||||
|
||||
return discardLoadData;
|
||||
},
|
||||
);
|
||||
@@ -31,7 +31,9 @@ import { NOTIFICATIONS_FILTER_SET } from './notifications';
|
||||
import { saveSettings } from './settings';
|
||||
|
||||
function excludeAllTypesExcept(filter: string) {
|
||||
return allNotificationTypes.filter((item) => item !== filter);
|
||||
return allNotificationTypes.filter(
|
||||
(item) => item !== filter && !(item === 'quote' && filter === 'mention'),
|
||||
);
|
||||
}
|
||||
|
||||
function getExcludedTypes(state: RootState) {
|
||||
@@ -156,12 +158,15 @@ export const processNewNotificationForGroups = createAppAsyncThunk(
|
||||
const showInColumn =
|
||||
activeFilter === 'all'
|
||||
? notificationShows[notification.type] !== false
|
||||
: activeFilter === notification.type;
|
||||
: activeFilter === notification.type ||
|
||||
(activeFilter === 'mention' && notification.type === 'quote');
|
||||
|
||||
if (!showInColumn) return;
|
||||
|
||||
if (
|
||||
(notification.type === 'mention' || notification.type === 'update') &&
|
||||
(notification.type === 'mention' ||
|
||||
notification.type === 'update' ||
|
||||
notification.type === 'quote') &&
|
||||
notification.status?.filtered
|
||||
) {
|
||||
const filters = notification.status.filtered.filter((result) =>
|
||||
|
||||
@@ -31,7 +31,7 @@ export function updateNotifications(notification, intlMessages, intlLocale) {
|
||||
|
||||
let filtered = false;
|
||||
|
||||
if (['mention', 'status'].includes(notification.type) && notification.status.filtered) {
|
||||
if (['mention', 'status', 'quote'].includes(notification.type) && notification.status.filtered) {
|
||||
const filters = notification.status.filtered.filter(result => result.filter.context.includes('notifications'));
|
||||
|
||||
if (filters.some(result => result.filter.filter_action === 'hide')) {
|
||||
|
||||
@@ -8,3 +8,8 @@ export const apiReblog = (statusId: string, visibility: StatusVisibility) =>
|
||||
|
||||
export const apiUnreblog = (statusId: string) =>
|
||||
apiRequestPost<Status>(`v1/statuses/${statusId}/unreblog`);
|
||||
|
||||
export const apiRevokeQuote = (quotedStatusId: string, statusId: string) =>
|
||||
apiRequestPost<Status>(
|
||||
`v1/statuses/${quotedStatusId}/quotes/${statusId}/revoke`,
|
||||
);
|
||||
@@ -67,21 +67,28 @@ const messages = defineMessages({
|
||||
unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },
|
||||
filter: { id: 'status.filter', defaultMessage: 'Filter this post' },
|
||||
openOriginalPage: { id: 'account.open_original_page', defaultMessage: 'Open original page' },
|
||||
revokeQuote: { id: 'status.revoke_quote', defaultMessage: 'Remove my post from @{name}’s post' },
|
||||
});
|
||||
|
||||
const mapStateToProps = (state, { status }) => ({
|
||||
relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),
|
||||
});
|
||||
const mapStateToProps = (state, { status }) => {
|
||||
const quotedStatusId = status.getIn(['quote', 'quoted_status']);
|
||||
return ({
|
||||
relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),
|
||||
quotedAccountId: quotedStatusId ? state.getIn(['statuses', quotedStatusId, 'account']) : null,
|
||||
});
|
||||
};
|
||||
|
||||
class StatusActionBar extends ImmutablePureComponent {
|
||||
static propTypes = {
|
||||
identity: identityContextPropShape,
|
||||
status: ImmutablePropTypes.map.isRequired,
|
||||
relationship: ImmutablePropTypes.record,
|
||||
quotedAccountId: ImmutablePropTypes.string,
|
||||
onReply: PropTypes.func,
|
||||
onFavourite: PropTypes.func,
|
||||
onReblog: PropTypes.func,
|
||||
onDelete: PropTypes.func,
|
||||
onRevokeQuote: PropTypes.func,
|
||||
onDirect: PropTypes.func,
|
||||
onMention: PropTypes.func,
|
||||
onMute: PropTypes.func,
|
||||
@@ -110,6 +117,7 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||
updateOnProps = [
|
||||
'status',
|
||||
'relationship',
|
||||
'quotedAccountId',
|
||||
'withDismiss',
|
||||
];
|
||||
|
||||
@@ -190,6 +198,10 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||
}
|
||||
};
|
||||
|
||||
handleRevokeQuoteClick = () => {
|
||||
this.props.onRevokeQuote(this.props.status);
|
||||
}
|
||||
|
||||
handleBlockClick = () => {
|
||||
const { status, relationship, onBlock, onUnblock } = this.props;
|
||||
const account = status.get('account');
|
||||
@@ -241,7 +253,7 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||
};
|
||||
|
||||
render () {
|
||||
const { status, relationship, intl, withDismiss, withCounters, scrollKey } = this.props;
|
||||
const { status, relationship, quotedAccountId, intl, withDismiss, withCounters, scrollKey } = this.props;
|
||||
const { signedIn, permissions } = this.props.identity;
|
||||
|
||||
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
|
||||
@@ -291,6 +303,10 @@ class StatusActionBar extends ImmutablePureComponent {
|
||||
menu.push({ text: intl.formatMessage(messages.direct, { name: account.get('username') }), action: this.handleDirectClick });
|
||||
menu.push(null);
|
||||
|
||||
if (quotedAccountId === me) {
|
||||
menu.push({ text: intl.formatMessage(messages.revokeQuote, { name: account.get('username') }), action: this.handleRevokeQuoteClick, dangerous: true });
|
||||
}
|
||||
|
||||
if (relationship && relationship.get('muting')) {
|
||||
menu.push({ text: intl.formatMessage(messages.unmute, { name: account.get('username') }), action: this.handleMuteClick });
|
||||
} else {
|
||||
|
||||
@@ -111,6 +111,10 @@ const mapDispatchToProps = (dispatch, { contextType }) => ({
|
||||
}
|
||||
},
|
||||
|
||||
onRevokeQuote (status) {
|
||||
dispatch(openModal({ modalType: 'CONFIRM_REVOKE_QUOTE', modalProps: { statusId: status.get('id'), quotedStatusId: status.getIn(['quote', 'quoted_status']) }}));
|
||||
},
|
||||
|
||||
onEdit (status) {
|
||||
dispatch((_, getState) => {
|
||||
let state = getState();
|
||||
|
||||
@@ -143,6 +143,17 @@ class ColumnSettings extends PureComponent {
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section role='group' aria-labelledby='notifications-quote'>
|
||||
<h3 id='notifications-quote'><FormattedMessage id='notifications.column_settings.quote' defaultMessage='Quotes:' /></h3>
|
||||
|
||||
<div className='column-settings__row'>
|
||||
<SettingToggle disabled={browserPermission === 'denied'} prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'quote']} onChange={onChange} label={alertStr} />
|
||||
{showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'quote']} onChange={this.onPushChange} label={pushStr} />}
|
||||
<SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'quote']} onChange={onChange} label={showStr} />
|
||||
<SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'quote']} onChange={onChange} label={soundStr} />
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section role='group' aria-labelledby='notifications-poll'>
|
||||
<h3 id='notifications-poll'><FormattedMessage id='notifications.column_settings.poll' defaultMessage='Poll results:' /></h3>
|
||||
|
||||
|
||||
@@ -61,22 +61,29 @@ const messages = defineMessages({
|
||||
unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' },
|
||||
unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' },
|
||||
openOriginalPage: { id: 'account.open_original_page', defaultMessage: 'Open original page' },
|
||||
revokeQuote: { id: 'status.revoke_quote', defaultMessage: 'Remove my post from @{name}’s post' },
|
||||
});
|
||||
|
||||
const mapStateToProps = (state, { status }) => ({
|
||||
relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),
|
||||
});
|
||||
const mapStateToProps = (state, { status }) => {
|
||||
const quotedStatusId = status.getIn(['quote', 'quoted_status']);
|
||||
return ({
|
||||
relationship: state.getIn(['relationships', status.getIn(['account', 'id'])]),
|
||||
quotedAccountId: quotedStatusId ? state.getIn(['statuses', quotedStatusId, 'account']) : null,
|
||||
});
|
||||
};
|
||||
|
||||
class ActionBar extends PureComponent {
|
||||
static propTypes = {
|
||||
identity: identityContextPropShape,
|
||||
status: ImmutablePropTypes.map.isRequired,
|
||||
relationship: ImmutablePropTypes.record,
|
||||
quotedAccountId: ImmutablePropTypes.string,
|
||||
onReply: PropTypes.func.isRequired,
|
||||
onReblog: PropTypes.func.isRequired,
|
||||
onFavourite: PropTypes.func.isRequired,
|
||||
onBookmark: PropTypes.func.isRequired,
|
||||
onDelete: PropTypes.func.isRequired,
|
||||
onRevokeQuote: PropTypes.func,
|
||||
onEdit: PropTypes.func.isRequired,
|
||||
onDirect: PropTypes.func.isRequired,
|
||||
onMention: PropTypes.func.isRequired,
|
||||
@@ -113,6 +120,10 @@ class ActionBar extends PureComponent {
|
||||
this.props.onDelete(this.props.status);
|
||||
};
|
||||
|
||||
handleRevokeQuoteClick = () => {
|
||||
this.props.onRevokeQuote(this.props.status);
|
||||
}
|
||||
|
||||
handleRedraftClick = () => {
|
||||
this.props.onDelete(this.props.status, true);
|
||||
};
|
||||
@@ -193,7 +204,7 @@ class ActionBar extends PureComponent {
|
||||
};
|
||||
|
||||
render () {
|
||||
const { status, relationship, intl } = this.props;
|
||||
const { status, relationship, quotedAccountId, intl } = this.props;
|
||||
const { signedIn, permissions } = this.props.identity;
|
||||
|
||||
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility'));
|
||||
@@ -237,6 +248,10 @@ class ActionBar extends PureComponent {
|
||||
menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick });
|
||||
menu.push(null);
|
||||
|
||||
if (quotedAccountId === me) {
|
||||
menu.push({ text: intl.formatMessage(messages.revokeQuote, { name: account.get('username') }), action: this.handleRevokeQuoteClick, dangerous: true });
|
||||
}
|
||||
|
||||
if (relationship && relationship.get('muting')) {
|
||||
menu.push({ text: intl.formatMessage(messages.unmute, { name: account.get('username') }), action: this.handleMuteClick });
|
||||
} else {
|
||||
|
||||
@@ -259,6 +259,12 @@ class Status extends ImmutablePureComponent {
|
||||
}
|
||||
};
|
||||
|
||||
handleRevokeQuoteClick = (status) => {
|
||||
const { dispatch } = this.props;
|
||||
|
||||
dispatch(openModal({ modalType: 'CONFIRM_REVOKE_QUOTE', modalProps: { statusId: status.get('id'), quotedStatusId: status.getIn(['quote', 'quoted_status']) }}));
|
||||
};
|
||||
|
||||
handleEditClick = (status) => {
|
||||
const { dispatch, askReplyConfirmation } = this.props;
|
||||
|
||||
@@ -635,6 +641,7 @@ class Status extends ImmutablePureComponent {
|
||||
onReblog={this.handleReblogClick}
|
||||
onBookmark={this.handleBookmarkClick}
|
||||
onDelete={this.handleDeleteClick}
|
||||
onRevokeQuote={this.handleRevokeQuoteClick}
|
||||
onEdit={this.handleEditClick}
|
||||
onDirect={this.handleDirectClick}
|
||||
onMention={this.handleMentionClick}
|
||||
|
||||
@@ -10,3 +10,4 @@ export { ConfirmClearNotificationsModal } from './clear_notifications';
|
||||
export { ConfirmLogOutModal } from './log_out';
|
||||
export { ConfirmFollowToListModal } from './follow_to_list';
|
||||
export { ConfirmMissingAltTextModal } from './missing_alt_text';
|
||||
export { ConfirmRevokeQuoteModal } from './revoke_quote';
|
||||
@@ -0,0 +1,48 @@
|
||||
import { useCallback } from 'react';
|
||||
|
||||
import { defineMessages, useIntl } from 'react-intl';
|
||||
|
||||
import { revokeQuote } from 'mastodon/actions/interactions_typed';
|
||||
import { useAppDispatch } from 'mastodon/store';
|
||||
|
||||
import type { BaseConfirmationModalProps } from './confirmation_modal';
|
||||
import { ConfirmationModal } from './confirmation_modal';
|
||||
|
||||
const messages = defineMessages({
|
||||
revokeQuoteTitle: {
|
||||
id: 'confirmations.revoke_quote.title',
|
||||
defaultMessage: 'Remove post?',
|
||||
},
|
||||
revokeQuoteMessage: {
|
||||
id: 'confirmations.revoke_quote.message',
|
||||
defaultMessage: 'This action cannot be undone.',
|
||||
},
|
||||
revokeQuoteConfirm: {
|
||||
id: 'confirmations.revoke_quote.confirm',
|
||||
defaultMessage: 'Remove post',
|
||||
},
|
||||
});
|
||||
|
||||
export const ConfirmRevokeQuoteModal: React.FC<
|
||||
{
|
||||
statusId: string;
|
||||
quotedStatusId: string;
|
||||
} & BaseConfirmationModalProps
|
||||
> = ({ statusId, quotedStatusId, onClose }) => {
|
||||
const intl = useIntl();
|
||||
const dispatch = useAppDispatch();
|
||||
|
||||
const onConfirm = useCallback(() => {
|
||||
void dispatch(revokeQuote({ quotedStatusId, statusId }));
|
||||
}, [dispatch, statusId, quotedStatusId]);
|
||||
|
||||
return (
|
||||
<ConfirmationModal
|
||||
title={intl.formatMessage(messages.revokeQuoteTitle)}
|
||||
message={intl.formatMessage(messages.revokeQuoteMessage)}
|
||||
confirm={intl.formatMessage(messages.revokeQuoteConfirm)}
|
||||
onConfirm={onConfirm}
|
||||
onClose={onClose}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -37,6 +37,7 @@ import {
|
||||
ConfirmLogOutModal,
|
||||
ConfirmFollowToListModal,
|
||||
ConfirmMissingAltTextModal,
|
||||
ConfirmRevokeQuoteModal,
|
||||
} from './confirmation_modals';
|
||||
import { ImageModal } from './image_modal';
|
||||
import MediaModal from './media_modal';
|
||||
@@ -59,6 +60,7 @@ export const MODAL_COMPONENTS = {
|
||||
'CONFIRM_LOG_OUT': () => Promise.resolve({ default: ConfirmLogOutModal }),
|
||||
'CONFIRM_FOLLOW_TO_LIST': () => Promise.resolve({ default: ConfirmFollowToListModal }),
|
||||
'CONFIRM_MISSING_ALT_TEXT': () => Promise.resolve({ default: ConfirmMissingAltTextModal }),
|
||||
'CONFIRM_REVOKE_QUOTE': () => Promise.resolve({ default: ConfirmRevokeQuoteModal }),
|
||||
'MUTE': MuteModal,
|
||||
'BLOCK': BlockModal,
|
||||
'DOMAIN_BLOCK': DomainBlockModal,
|
||||
|
||||
@@ -600,6 +600,7 @@
|
||||
"notification.label.mention": "Zmínka",
|
||||
"notification.label.private_mention": "Soukromá zmínka",
|
||||
"notification.label.private_reply": "Privátní odpověď",
|
||||
"notification.label.quote": "{name} citovali váš příspěvek",
|
||||
"notification.label.reply": "Odpověď",
|
||||
"notification.mention": "Zmínka",
|
||||
"notification.mentioned_you": "{name} vás zmínil",
|
||||
@@ -657,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "Zmínky:",
|
||||
"notifications.column_settings.poll": "Výsledky anket:",
|
||||
"notifications.column_settings.push": "Push oznámení",
|
||||
"notifications.column_settings.quote": "Citace:",
|
||||
"notifications.column_settings.reblog": "Boosty:",
|
||||
"notifications.column_settings.show": "Zobrazit ve sloupci",
|
||||
"notifications.column_settings.sound": "Přehrát zvuk",
|
||||
|
||||
@@ -658,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "Omtaler:",
|
||||
"notifications.column_settings.poll": "Afstemningsresultater:",
|
||||
"notifications.column_settings.push": "Push-notifikationer",
|
||||
"notifications.column_settings.quote": "Citater:",
|
||||
"notifications.column_settings.reblog": "Fremhævelser:",
|
||||
"notifications.column_settings.show": "Vis i kolonne",
|
||||
"notifications.column_settings.sound": "Afspil lyd",
|
||||
|
||||
@@ -600,6 +600,7 @@
|
||||
"notification.label.mention": "Erwähnung",
|
||||
"notification.label.private_mention": "Private Erwähnung",
|
||||
"notification.label.private_reply": "Private Antwort",
|
||||
"notification.label.quote": "{name} zitierte deinen Beitrag",
|
||||
"notification.label.reply": "Antwort",
|
||||
"notification.mention": "Erwähnung",
|
||||
"notification.mentioned_you": "{name} erwähnte dich",
|
||||
@@ -657,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "Erwähnungen:",
|
||||
"notifications.column_settings.poll": "Umfrageergebnisse:",
|
||||
"notifications.column_settings.push": "Push-Benachrichtigungen",
|
||||
"notifications.column_settings.quote": "Zitate:",
|
||||
"notifications.column_settings.reblog": "Geteilte Beiträge:",
|
||||
"notifications.column_settings.show": "In dieser Spalte anzeigen",
|
||||
"notifications.column_settings.sound": "Ton abspielen",
|
||||
|
||||
@@ -658,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "Επισημάνσεις:",
|
||||
"notifications.column_settings.poll": "Αποτελέσματα δημοσκόπησης:",
|
||||
"notifications.column_settings.push": "Ειδοποιήσεις Push",
|
||||
"notifications.column_settings.quote": "Παραθέσεις:",
|
||||
"notifications.column_settings.reblog": "Ενισχύσεις:",
|
||||
"notifications.column_settings.show": "Εμφάνισε σε στήλη",
|
||||
"notifications.column_settings.sound": "Αναπαραγωγή ήχου",
|
||||
|
||||
@@ -245,6 +245,9 @@
|
||||
"confirmations.remove_from_followers.confirm": "Remove follower",
|
||||
"confirmations.remove_from_followers.message": "{name} will stop following you. Are you sure you want to proceed?",
|
||||
"confirmations.remove_from_followers.title": "Remove follower?",
|
||||
"confirmations.revoke_quote.confirm": "Remove post",
|
||||
"confirmations.revoke_quote.message": "This action cannot be undone.",
|
||||
"confirmations.revoke_quote.title": "Remove post?",
|
||||
"confirmations.unfollow.confirm": "Unfollow",
|
||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||
"confirmations.unfollow.title": "Unfollow user?",
|
||||
@@ -658,6 +661,7 @@
|
||||
"notifications.column_settings.mention": "Mentions:",
|
||||
"notifications.column_settings.poll": "Poll results:",
|
||||
"notifications.column_settings.push": "Push notifications",
|
||||
"notifications.column_settings.quote": "Quotes:",
|
||||
"notifications.column_settings.reblog": "Boosts:",
|
||||
"notifications.column_settings.show": "Show in column",
|
||||
"notifications.column_settings.sound": "Play sound",
|
||||
@@ -895,6 +899,7 @@
|
||||
"status.reply": "Reply",
|
||||
"status.replyAll": "Reply to thread",
|
||||
"status.report": "Report @{name}",
|
||||
"status.revoke_quote": "Remove my post from @{name}’s post",
|
||||
"status.sensitive_warning": "Sensitive content",
|
||||
"status.share": "Share",
|
||||
"status.show_less_all": "Show less for all",
|
||||
|
||||
@@ -658,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "Menciones:",
|
||||
"notifications.column_settings.poll": "Resultados de la encuesta:",
|
||||
"notifications.column_settings.push": "Notificaciones push",
|
||||
"notifications.column_settings.quote": "Citas:",
|
||||
"notifications.column_settings.reblog": "Adhesiones:",
|
||||
"notifications.column_settings.show": "Mostrar en columna",
|
||||
"notifications.column_settings.sound": "Reproducir sonido",
|
||||
|
||||
@@ -658,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "Menciones:",
|
||||
"notifications.column_settings.poll": "Resultados de la votación:",
|
||||
"notifications.column_settings.push": "Notificaciones push",
|
||||
"notifications.column_settings.quote": "Citas:",
|
||||
"notifications.column_settings.reblog": "Impulsos:",
|
||||
"notifications.column_settings.show": "Mostrar en columna",
|
||||
"notifications.column_settings.sound": "Reproducir sonido",
|
||||
|
||||
@@ -658,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "Menciones:",
|
||||
"notifications.column_settings.poll": "Resultados de la votación:",
|
||||
"notifications.column_settings.push": "Notificaciones push",
|
||||
"notifications.column_settings.quote": "Citas:",
|
||||
"notifications.column_settings.reblog": "Impulsos:",
|
||||
"notifications.column_settings.show": "Mostrar en columna",
|
||||
"notifications.column_settings.sound": "Reproducir sonido",
|
||||
|
||||
@@ -600,6 +600,7 @@
|
||||
"notification.label.mention": "Maininta",
|
||||
"notification.label.private_mention": "Yksityismaininta",
|
||||
"notification.label.private_reply": "Yksityinen vastaus",
|
||||
"notification.label.quote": "{name} lainasi julkaisuasi",
|
||||
"notification.label.reply": "Vastaus",
|
||||
"notification.mention": "Maininta",
|
||||
"notification.mentioned_you": "{name} mainitsi sinut",
|
||||
@@ -657,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "Maininnat:",
|
||||
"notifications.column_settings.poll": "Äänestystulokset:",
|
||||
"notifications.column_settings.push": "Puskuilmoitukset",
|
||||
"notifications.column_settings.quote": "Lainaukset:",
|
||||
"notifications.column_settings.reblog": "Tehostukset:",
|
||||
"notifications.column_settings.show": "Näytä sarakkeessa",
|
||||
"notifications.column_settings.sound": "Äänimerkki",
|
||||
|
||||
@@ -600,6 +600,7 @@
|
||||
"notification.label.mention": "Mención",
|
||||
"notification.label.private_mention": "Mención privada",
|
||||
"notification.label.private_reply": "Resposta privada",
|
||||
"notification.label.quote": "{name} citou a túa publicación",
|
||||
"notification.label.reply": "Resposta",
|
||||
"notification.mention": "Mención",
|
||||
"notification.mentioned_you": "{name} mencionoute",
|
||||
|
||||
@@ -600,6 +600,7 @@
|
||||
"notification.label.mention": "אזכור",
|
||||
"notification.label.private_mention": "אזכור פרטי",
|
||||
"notification.label.private_reply": "תשובה בפרטי",
|
||||
"notification.label.quote": "{name} ציטט.ה את הודעתך",
|
||||
"notification.label.reply": "תשובה",
|
||||
"notification.mention": "אזכור",
|
||||
"notification.mentioned_you": "אוזכרת על ידי {name}",
|
||||
|
||||
@@ -600,6 +600,7 @@
|
||||
"notification.label.mention": "Minnst á",
|
||||
"notification.label.private_mention": "Einkaspjall",
|
||||
"notification.label.private_reply": "Einkasvar",
|
||||
"notification.label.quote": "{name} vitnaði í færsluna þína",
|
||||
"notification.label.reply": "Svara",
|
||||
"notification.mention": "Minnst á",
|
||||
"notification.mentioned_you": "{name} minntist á þig",
|
||||
@@ -657,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "Tilvísanir:",
|
||||
"notifications.column_settings.poll": "Niðurstöður könnunar:",
|
||||
"notifications.column_settings.push": "Ýti-tilkynningar",
|
||||
"notifications.column_settings.quote": "Tilvitnanir:",
|
||||
"notifications.column_settings.reblog": "Endurbirtingar:",
|
||||
"notifications.column_settings.show": "Sýna í dálki",
|
||||
"notifications.column_settings.sound": "Spila hljóð",
|
||||
|
||||
@@ -658,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "Menzioni:",
|
||||
"notifications.column_settings.poll": "Risultati del sondaggio:",
|
||||
"notifications.column_settings.push": "Notifiche push",
|
||||
"notifications.column_settings.quote": "Citazioni:",
|
||||
"notifications.column_settings.reblog": "Reblog:",
|
||||
"notifications.column_settings.show": "Mostra nella colonna",
|
||||
"notifications.column_settings.sound": "Riproduci suono",
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
"account.followers": "Imeḍfaren",
|
||||
"account.followers.empty": "Ar tura, ulac yiwen i yeṭṭafaṛen amseqdac-agi.",
|
||||
"account.followers_counter": "{count, plural, one {{counter} n umḍfar} other {{counter} n yimeḍfaren}}",
|
||||
"account.followers_you_know_counter": "Tessneḍ {counter}",
|
||||
"account.following": "Yeṭṭafaṛ",
|
||||
"account.following_counter": "{count, plural, one {{counter} yettwaḍfaren} other {{counter} yettwaḍfaren}}",
|
||||
"account.follows.empty": "Ar tura, amseqdac-agi ur yeṭṭafaṛ yiwen.",
|
||||
@@ -51,10 +52,12 @@
|
||||
"account.mute_notifications_short": "Susem ilɣa",
|
||||
"account.mute_short": "Sgugem",
|
||||
"account.muted": "Yettwasgugem",
|
||||
"account.mutual": "Temmeḍfaṛem",
|
||||
"account.no_bio": "Ulac aglam i d-yettunefken.",
|
||||
"account.open_original_page": "Ldi asebter anasli",
|
||||
"account.posts": "Tisuffaɣ",
|
||||
"account.posts_with_replies": "Tisuffaɣ d tririyin",
|
||||
"account.remove_from_followers": "Kkes {name} seg ineḍfaren",
|
||||
"account.report": "Cetki ɣef @{name}",
|
||||
"account.requested": "Di laɛḍil ad yettwaqbel. Ssit i wakken ad yefsex usuter n uḍfar",
|
||||
"account.requested_follow": "{name} yessuter ad k·m-yeḍfer",
|
||||
@@ -85,6 +88,7 @@
|
||||
"annual_report.summary.most_used_app.most_used_app": "asnas yettwasqedcen s waṭas",
|
||||
"annual_report.summary.most_used_hashtag.none": "Ula yiwen",
|
||||
"annual_report.summary.new_posts.new_posts": "tisuffaɣ timaynutin",
|
||||
"annual_report.summary.thanks": "Tanemmirt imi i tettekkiḍ deg Mastodon!",
|
||||
"audio.hide": "Ffer amesli",
|
||||
"block_modal.show_less": "Ssken-d drus",
|
||||
"block_modal.show_more": "Ssken-d ugar",
|
||||
@@ -352,6 +356,8 @@
|
||||
"keyboard_shortcuts.toot": "i wakken attebdud tajewwaqt tamaynut",
|
||||
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search",
|
||||
"keyboard_shortcuts.up": "i tulin ɣer d asawen n tebdart",
|
||||
"learn_more_link.got_it": "Gziɣ-t",
|
||||
"learn_more_link.learn_more": "Issin ugar",
|
||||
"lightbox.close": "Mdel",
|
||||
"lightbox.next": "Ɣer zdat",
|
||||
"lightbox.previous": "Ɣer deffir",
|
||||
@@ -417,6 +423,8 @@
|
||||
"notification.admin.sign_up": "Ijerred {name}",
|
||||
"notification.annual_report.view": "Wali #Wrapstodon",
|
||||
"notification.favourite": "{name} yesmenyaf addad-ik·im",
|
||||
"notification.favourite_pm": "{name} yesmenyef abdar-ik·im uslig",
|
||||
"notification.favourite_pm.name_and_others_with_link": "{name} akked <a>{count, plural, one {# nnayeḍ} other {# nniḍen}}</a> rnan abdar-ik·im uslig ar ismenyafen-nsen",
|
||||
"notification.follow": "iṭṭafar-ik·em-id {name}",
|
||||
"notification.follow.name_and_others": "{name} akked <a>{count, plural, one {# nniḍen} other {# nniḍen}}</a> iḍfeṛ-k·m-id",
|
||||
"notification.follow_request": "{name} yessuter-d ad k·m-yeḍfeṛ",
|
||||
|
||||
@@ -658,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "Vermeldingen:",
|
||||
"notifications.column_settings.poll": "Peilingresultaten:",
|
||||
"notifications.column_settings.push": "Pushmeldingen",
|
||||
"notifications.column_settings.quote": "Citaten:",
|
||||
"notifications.column_settings.reblog": "Boosts:",
|
||||
"notifications.column_settings.show": "In kolom tonen",
|
||||
"notifications.column_settings.sound": "Geluid afspelen",
|
||||
|
||||
@@ -498,6 +498,8 @@
|
||||
"keyboard_shortcuts.translate": "traduzir uma publicação",
|
||||
"keyboard_shortcuts.unfocus": "remover o foco da área de texto / pesquisa",
|
||||
"keyboard_shortcuts.up": "mover para cima na lista",
|
||||
"learn_more_link.got_it": "Entendido",
|
||||
"learn_more_link.learn_more": "Saber mais",
|
||||
"lightbox.close": "Fechar",
|
||||
"lightbox.next": "Próximo",
|
||||
"lightbox.previous": "Anterior",
|
||||
@@ -598,6 +600,7 @@
|
||||
"notification.label.mention": "Menção",
|
||||
"notification.label.private_mention": "Menção privada",
|
||||
"notification.label.private_reply": "Resposta privada",
|
||||
"notification.label.quote": "{name} citou a sua publicação",
|
||||
"notification.label.reply": "Resposta",
|
||||
"notification.mention": "Menção",
|
||||
"notification.mentioned_you": "{name} mencionou-te",
|
||||
@@ -655,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "Menções:",
|
||||
"notifications.column_settings.poll": "Resultados da sondagem:",
|
||||
"notifications.column_settings.push": "Notificações \"push\"",
|
||||
"notifications.column_settings.quote": "Citações:",
|
||||
"notifications.column_settings.reblog": "Impulsos:",
|
||||
"notifications.column_settings.show": "Mostrar na coluna",
|
||||
"notifications.column_settings.sound": "Reproduzir som",
|
||||
@@ -873,6 +877,11 @@
|
||||
"status.open": "Expandir esta publicação",
|
||||
"status.pin": "Afixar no perfil",
|
||||
"status.quote_error.filtered": "Oculto devido a um dos seus filtros",
|
||||
"status.quote_error.not_available": "Publicação indisponível",
|
||||
"status.quote_error.pending_approval": "Publicação pendente",
|
||||
"status.quote_error.pending_approval_popout.body": "As citações partilhadas no Fediverso podem demorar algum tempo a ser exibidas, uma vez que diferentes servidores têm protocolos diferentes.",
|
||||
"status.quote_error.pending_approval_popout.title": "Citação pendente? Mantenha a calma",
|
||||
"status.quote_post_author": "Citou uma publicação de @{name}",
|
||||
"status.read_more": "Ler mais",
|
||||
"status.reblog": "Impulsionar",
|
||||
"status.reblog_private": "Impulsionar com a visibilidade original",
|
||||
|
||||
@@ -321,6 +321,7 @@
|
||||
"explore.trending_links": "Новини",
|
||||
"explore.trending_statuses": "Дописи",
|
||||
"explore.trending_tags": "Хештеґи",
|
||||
"featured_carousel.next": "Далі",
|
||||
"filter_modal.added.context_mismatch_explanation": "Ця категорія фільтра не застосовується до контексту, в якому ви отримали доступ до цього допису. Якщо ви хочете, щоб дописи також фільтрувалися за цим контекстом, вам доведеться редагувати фільтр.",
|
||||
"filter_modal.added.context_mismatch_title": "Невідповідність контексту!",
|
||||
"filter_modal.added.expired_explanation": "Категорія цього фільтра застаріла, Вам потрібно змінити дату закінчення терміну дії, щоб застосувати її.",
|
||||
|
||||
@@ -658,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "Lượt nhắc đến:",
|
||||
"notifications.column_settings.poll": "Kết quả vốt:",
|
||||
"notifications.column_settings.push": "Thông báo đẩy",
|
||||
"notifications.column_settings.quote": "Trích dẫn:",
|
||||
"notifications.column_settings.reblog": "Lượt đăng lại:",
|
||||
"notifications.column_settings.show": "Báo trên thanh bên",
|
||||
"notifications.column_settings.sound": "Kèm âm báo",
|
||||
|
||||
@@ -658,6 +658,7 @@
|
||||
"notifications.column_settings.mention": "提及:",
|
||||
"notifications.column_settings.poll": "投票結果:",
|
||||
"notifications.column_settings.push": "推播通知",
|
||||
"notifications.column_settings.quote": "引用嘟文:",
|
||||
"notifications.column_settings.reblog": "轉嘟:",
|
||||
"notifications.column_settings.show": "於欄位中顯示",
|
||||
"notifications.column_settings.sound": "播放音效",
|
||||
|
||||
@@ -36,6 +36,7 @@ const initialState = ImmutableMap({
|
||||
follow_request: false,
|
||||
favourite: false,
|
||||
reblog: false,
|
||||
quote: false,
|
||||
mention: false,
|
||||
poll: false,
|
||||
status: false,
|
||||
@@ -59,6 +60,7 @@ const initialState = ImmutableMap({
|
||||
follow_request: false,
|
||||
favourite: true,
|
||||
reblog: true,
|
||||
quote: true,
|
||||
mention: true,
|
||||
poll: true,
|
||||
status: true,
|
||||
@@ -72,6 +74,7 @@ const initialState = ImmutableMap({
|
||||
follow_request: false,
|
||||
favourite: true,
|
||||
reblog: true,
|
||||
quote: true,
|
||||
mention: true,
|
||||
poll: true,
|
||||
status: true,
|
||||
|
||||
@@ -26,7 +26,10 @@ const filterNotificationsByAllowedTypes = (
|
||||
);
|
||||
}
|
||||
return notifications.filter(
|
||||
(item) => item.type === 'gap' || allowedType === item.type,
|
||||
(item) =>
|
||||
item.type === 'gap' ||
|
||||
allowedType === item.type ||
|
||||
(allowedType === 'mention' && item.type === 'quote'),
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user