mirror of
https://github.com/glitch-soc/mastodon.git
synced 2025-12-14 16:28:59 +00:00
Merge commit '70988519df66f0b8edeb6ca95140f1d3e436fea8' into glitch-soc/merge-upstream
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { browserHistory } from 'mastodon/components/router';
|
||||
import { debounceWithDispatchAndArguments } from 'mastodon/utils/debounce';
|
||||
|
||||
import api, { getLinks } from '../api';
|
||||
|
||||
@@ -449,6 +450,20 @@ export function expandFollowingFail(id, error) {
|
||||
};
|
||||
}
|
||||
|
||||
const debouncedFetchRelationships = debounceWithDispatchAndArguments((dispatch, ...newAccountIds) => {
|
||||
if (newAccountIds.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
dispatch(fetchRelationshipsRequest(newAccountIds));
|
||||
|
||||
api().get(`/api/v1/accounts/relationships?with_suspended=true&${newAccountIds.map(id => `id[]=${id}`).join('&')}`).then(response => {
|
||||
dispatch(fetchRelationshipsSuccess({ relationships: response.data }));
|
||||
}).catch(error => {
|
||||
dispatch(fetchRelationshipsFail(error));
|
||||
});
|
||||
}, { delay: 500 });
|
||||
|
||||
export function fetchRelationships(accountIds) {
|
||||
return (dispatch, getState) => {
|
||||
const state = getState();
|
||||
@@ -460,13 +475,7 @@ export function fetchRelationships(accountIds) {
|
||||
return;
|
||||
}
|
||||
|
||||
dispatch(fetchRelationshipsRequest(newAccountIds));
|
||||
|
||||
api().get(`/api/v1/accounts/relationships?with_suspended=true&${newAccountIds.map(id => `id[]=${id}`).join('&')}`).then(response => {
|
||||
dispatch(fetchRelationshipsSuccess({ relationships: response.data }));
|
||||
}).catch(error => {
|
||||
dispatch(fetchRelationshipsFail(error));
|
||||
});
|
||||
debouncedFetchRelationships(dispatch, ...newAccountIds);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,6 @@ export const updateNotificationsPolicy = createDataLoadingThunk(
|
||||
(policy: Partial<NotificationPolicy>) => apiUpdateNotificationsPolicy(policy),
|
||||
);
|
||||
|
||||
export const decreasePendingNotificationsCount = createAction<number>(
|
||||
'notificationPolicy/decreasePendingNotificationCount',
|
||||
export const decreasePendingRequestsCount = createAction<number>(
|
||||
'notificationPolicy/decreasePendingRequestsCount',
|
||||
);
|
||||
|
||||
@@ -13,11 +13,11 @@ import type {
|
||||
ApiNotificationJSON,
|
||||
} from 'mastodon/api_types/notifications';
|
||||
import type { ApiStatusJSON } from 'mastodon/api_types/statuses';
|
||||
import type { AppDispatch, RootState } from 'mastodon/store';
|
||||
import type { AppDispatch } from 'mastodon/store';
|
||||
import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
|
||||
|
||||
import { importFetchedAccounts, importFetchedStatuses } from './importer';
|
||||
import { decreasePendingNotificationsCount } from './notification_policies';
|
||||
import { decreasePendingRequestsCount } from './notification_policies';
|
||||
|
||||
// TODO: refactor with notification_groups
|
||||
function dispatchAssociatedRecords(
|
||||
@@ -169,19 +169,11 @@ export const expandNotificationsForRequest = createDataLoadingThunk(
|
||||
},
|
||||
);
|
||||
|
||||
const selectNotificationCountForRequest = (state: RootState, id: string) => {
|
||||
const requests = state.notificationRequests.items;
|
||||
const thisRequest = requests.find((request) => request.id === id);
|
||||
return thisRequest ? thisRequest.notifications_count : 0;
|
||||
};
|
||||
|
||||
export const acceptNotificationRequest = createDataLoadingThunk(
|
||||
'notificationRequest/accept',
|
||||
({ id }: { id: string }) => apiAcceptNotificationRequest(id),
|
||||
(_data, { dispatch, getState, discardLoadData, actionArg: { id } }) => {
|
||||
const count = selectNotificationCountForRequest(getState(), id);
|
||||
|
||||
dispatch(decreasePendingNotificationsCount(count));
|
||||
(_data, { dispatch, discardLoadData }) => {
|
||||
dispatch(decreasePendingRequestsCount(1));
|
||||
|
||||
// The payload is not used in any functions
|
||||
return discardLoadData;
|
||||
@@ -191,10 +183,8 @@ export const acceptNotificationRequest = createDataLoadingThunk(
|
||||
export const dismissNotificationRequest = createDataLoadingThunk(
|
||||
'notificationRequest/dismiss',
|
||||
({ id }: { id: string }) => apiDismissNotificationRequest(id),
|
||||
(_data, { dispatch, getState, discardLoadData, actionArg: { id } }) => {
|
||||
const count = selectNotificationCountForRequest(getState(), id);
|
||||
|
||||
dispatch(decreasePendingNotificationsCount(count));
|
||||
(_data, { dispatch, discardLoadData }) => {
|
||||
dispatch(decreasePendingRequestsCount(1));
|
||||
|
||||
// The payload is not used in any functions
|
||||
return discardLoadData;
|
||||
@@ -204,13 +194,8 @@ export const dismissNotificationRequest = createDataLoadingThunk(
|
||||
export const acceptNotificationRequests = createDataLoadingThunk(
|
||||
'notificationRequests/acceptBulk',
|
||||
({ ids }: { ids: string[] }) => apiAcceptNotificationRequests(ids),
|
||||
(_data, { dispatch, getState, discardLoadData, actionArg: { ids } }) => {
|
||||
const count = ids.reduce(
|
||||
(count, id) => count + selectNotificationCountForRequest(getState(), id),
|
||||
0,
|
||||
);
|
||||
|
||||
dispatch(decreasePendingNotificationsCount(count));
|
||||
(_data, { dispatch, discardLoadData, actionArg: { ids } }) => {
|
||||
dispatch(decreasePendingRequestsCount(ids.length));
|
||||
|
||||
// The payload is not used in any functions
|
||||
return discardLoadData;
|
||||
@@ -220,13 +205,8 @@ export const acceptNotificationRequests = createDataLoadingThunk(
|
||||
export const dismissNotificationRequests = createDataLoadingThunk(
|
||||
'notificationRequests/dismissBulk',
|
||||
({ ids }: { ids: string[] }) => apiDismissNotificationRequests(ids),
|
||||
(_data, { dispatch, getState, discardLoadData, actionArg: { ids } }) => {
|
||||
const count = ids.reduce(
|
||||
(count, id) => count + selectNotificationCountForRequest(getState(), id),
|
||||
0,
|
||||
);
|
||||
|
||||
dispatch(decreasePendingNotificationsCount(count));
|
||||
(_data, { dispatch, discardLoadData, actionArg: { ids } }) => {
|
||||
dispatch(decreasePendingRequestsCount(ids.length));
|
||||
|
||||
// The payload is not used in any functions
|
||||
return discardLoadData;
|
||||
|
||||
@@ -10,7 +10,7 @@ import api, { getLinks } from '../api';
|
||||
import { unescapeHTML } from '../utils/html';
|
||||
import { requestNotificationPermission } from '../utils/notifications';
|
||||
|
||||
import { fetchFollowRequests, fetchRelationships } from './accounts';
|
||||
import { fetchFollowRequests } from './accounts';
|
||||
import {
|
||||
importFetchedAccount,
|
||||
importFetchedAccounts,
|
||||
@@ -56,14 +56,6 @@ defineMessages({
|
||||
group: { id: 'notifications.group', defaultMessage: '{count} notifications' },
|
||||
});
|
||||
|
||||
const fetchRelatedRelationships = (dispatch, notifications) => {
|
||||
const accountIds = notifications.filter(item => ['follow', 'follow_request', 'admin.sign_up'].indexOf(item.type) !== -1).map(item => item.account.id);
|
||||
|
||||
if (accountIds.length > 0) {
|
||||
dispatch(fetchRelationships(accountIds));
|
||||
}
|
||||
};
|
||||
|
||||
export const loadPending = () => ({
|
||||
type: NOTIFICATIONS_LOAD_PENDING,
|
||||
});
|
||||
@@ -106,8 +98,6 @@ export function updateNotifications(notification, intlMessages, intlLocale) {
|
||||
|
||||
|
||||
dispatch(notificationsUpdate({ notification, preferPendingItems, playSound: playSound && !filtered}));
|
||||
|
||||
fetchRelatedRelationships(dispatch, [notification]);
|
||||
} else if (playSound && !filtered) {
|
||||
dispatch({
|
||||
type: NOTIFICATIONS_UPDATE_NOOP,
|
||||
@@ -199,7 +189,6 @@ export function expandNotifications({ maxId = undefined, forceLoad = false }) {
|
||||
dispatch(importFetchedAccounts(response.data.filter(item => item.report).map(item => item.report.target_account)));
|
||||
|
||||
dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems));
|
||||
fetchRelatedRelationships(dispatch, response.data);
|
||||
dispatch(submitMarkers());
|
||||
} catch(error) {
|
||||
dispatch(expandNotificationsFail(error, isLoadingMore));
|
||||
|
||||
@@ -91,5 +91,5 @@ export const apiAcceptNotificationRequests = async (id: string[]) => {
|
||||
};
|
||||
|
||||
export const apiDismissNotificationRequests = async (id: string[]) => {
|
||||
return apiRequestPost('v1/notifications/dismiss/dismiss', { id });
|
||||
return apiRequestPost('v1/notifications/requests/dismiss', { id });
|
||||
};
|
||||
|
||||
@@ -31,7 +31,7 @@ export const FilteredNotificationsIconButton: React.FC<{
|
||||
history.push('/notifications/requests');
|
||||
}, [history]);
|
||||
|
||||
if (policy === null || policy.summary.pending_notifications_count === 0) {
|
||||
if (policy === null || policy.summary.pending_requests_count <= 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ export const FilteredNotificationsBanner: React.FC = () => {
|
||||
};
|
||||
}, [dispatch]);
|
||||
|
||||
if (policy === null || policy.summary.pending_notifications_count === 0) {
|
||||
if (policy === null || policy.summary.pending_requests_count <= 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -97,6 +97,8 @@
|
||||
"block_modal.title": "Αποκλεισμός χρήστη;",
|
||||
"block_modal.you_wont_see_mentions": "Δε θα βλέπεις τις αναρτήσεις που τον αναφέρουν.",
|
||||
"boost_modal.combo": "Μπορείς να πατήσεις {combo} για να το προσπεράσεις την επόμενη φορά",
|
||||
"boost_modal.reblog": "Ενίσχυση ανάρτησης;",
|
||||
"boost_modal.undo_reblog": "Αναίρεση ενίσχυσης;",
|
||||
"bundle_column_error.copy_stacktrace": "Αντιγραφή αναφοράς σφάλματος",
|
||||
"bundle_column_error.error.body": "Δεν ήταν δυνατή η απόδοση της σελίδας που ζήτησες. Μπορεί να οφείλεται σε σφάλμα στον κώδικά μας ή σε πρόβλημα συμβατότητας του προγράμματος περιήγησης.",
|
||||
"bundle_column_error.error.title": "Ωχ όχι!",
|
||||
@@ -192,6 +194,8 @@
|
||||
"confirmations.unfollow.confirm": "Άρση ακολούθησης",
|
||||
"confirmations.unfollow.message": "Σίγουρα θες να πάψεις να ακολουθείς τον/την {name};",
|
||||
"confirmations.unfollow.title": "Άρση ακολούθησης;",
|
||||
"content_warning.hide": "Απόκρυψη ανάρτησης",
|
||||
"content_warning.show": "Εμφάνιση ούτως ή άλλως",
|
||||
"conversation.delete": "Διαγραφή συζήτησης",
|
||||
"conversation.mark_as_read": "Σήμανση ως αναγνωσμένο",
|
||||
"conversation.open": "Προβολή συνομιλίας",
|
||||
@@ -299,6 +303,7 @@
|
||||
"filter_modal.select_filter.subtitle": "Χρησιμοποιήστε μια υπάρχουσα κατηγορία ή δημιουργήστε μια νέα",
|
||||
"filter_modal.select_filter.title": "Φιλτράρισμα αυτής της ανάρτησης",
|
||||
"filter_modal.title.status": "Φιλτράρισμα μιας ανάρτησης",
|
||||
"filter_warning.matches_filter": "Ταιριάζει με το φίλτρο “{title}”",
|
||||
"filtered_notifications_banner.pending_requests": "Από {count, plural, =0 {κανένα} one {ένα άτομο} other {# άτομα}} που μπορεί να ξέρεις",
|
||||
"filtered_notifications_banner.title": "Φιλτραρισμένες ειδοποιήσεις",
|
||||
"firehose.all": "Όλα",
|
||||
@@ -429,6 +434,8 @@
|
||||
"lightbox.close": "Κλείσιμο",
|
||||
"lightbox.next": "Επόμενο",
|
||||
"lightbox.previous": "Προηγούμενο",
|
||||
"lightbox.zoom_in": "Εστίαση στο πραγματικό μέγεθος",
|
||||
"lightbox.zoom_out": "Εστίαση για προσαρμογή",
|
||||
"limited_account_hint.action": "Εμφάνιση προφίλ ούτως ή άλλως",
|
||||
"limited_account_hint.title": "Αυτό το προφίλ έχει αποκρυφτεί από τους διαχειριστές του διακομιστή {domain}.",
|
||||
"link_preview.author": "Από {name}",
|
||||
@@ -450,6 +457,7 @@
|
||||
"lists.subheading": "Οι λίστες σου",
|
||||
"load_pending": "{count, plural, one {# νέο στοιχείο} other {# νέα στοιχεία}}",
|
||||
"loading_indicator.label": "Φόρτωση…",
|
||||
"media_gallery.hide": "Απόκρυψη",
|
||||
"moved_to_account_banner.text": "Ο λογαριασμός σου {disabledAccount} είναι προσωρινά απενεργοποιημένος επειδή μεταφέρθηκες στον {movedToAccount}.",
|
||||
"mute_modal.hide_from_notifications": "Απόκρυψη από ειδοποιήσεις",
|
||||
"mute_modal.hide_options": "Απόκρυψη επιλογών",
|
||||
@@ -461,6 +469,7 @@
|
||||
"mute_modal.you_wont_see_mentions": "Δε θα βλέπεις τις αναρτήσεις που τον αναφέρουν.",
|
||||
"mute_modal.you_wont_see_posts": "Μπορεί ακόμα να δει τις αναρτήσεις σου, αλλά δε θα βλέπεις τις δικές του.",
|
||||
"navigation_bar.about": "Σχετικά με",
|
||||
"navigation_bar.administration": "Διαχείριση",
|
||||
"navigation_bar.advanced_interface": "Άνοιγμα σε προηγμένη διεπαφή ιστού",
|
||||
"navigation_bar.blocks": "Αποκλεισμένοι χρήστες",
|
||||
"navigation_bar.bookmarks": "Σελιδοδείκτες",
|
||||
@@ -477,6 +486,7 @@
|
||||
"navigation_bar.follows_and_followers": "Ακολουθείς και σε ακολουθούν",
|
||||
"navigation_bar.lists": "Λίστες",
|
||||
"navigation_bar.logout": "Αποσύνδεση",
|
||||
"navigation_bar.moderation": "Συντονισμός",
|
||||
"navigation_bar.mutes": "Αποσιωπημένοι χρήστες",
|
||||
"navigation_bar.opened_in_classic_interface": "Δημοσιεύσεις, λογαριασμοί και άλλες συγκεκριμένες σελίδες ανοίγονται από προεπιλογή στην κλασική διεπαφή ιστού.",
|
||||
"navigation_bar.personal": "Προσωπικά",
|
||||
@@ -768,6 +778,7 @@
|
||||
"status.bookmark": "Σελιδοδείκτης",
|
||||
"status.cancel_reblog_private": "Ακύρωση ενίσχυσης",
|
||||
"status.cannot_reblog": "Αυτή η ανάρτηση δεν μπορεί να ενισχυθεί",
|
||||
"status.continued_thread": "Συνεχιζόμενο νήματος",
|
||||
"status.copy": "Αντιγραφή συνδέσμου ανάρτησης",
|
||||
"status.delete": "Διαγραφή",
|
||||
"status.detailed_status": "Προβολή λεπτομερούς συζήτησης",
|
||||
@@ -776,6 +787,7 @@
|
||||
"status.edit": "Επεξεργασία",
|
||||
"status.edited": "Τελευταία επεξεργασία {date}",
|
||||
"status.edited_x_times": "Επεξεργάστηκε {count, plural, one {{count} φορά} other {{count} φορές}}",
|
||||
"status.embed": "Απόκτηση κώδικα ενσωμάτωσης",
|
||||
"status.favourite": "Αγαπημένα",
|
||||
"status.favourites": "{count, plural, one {# αγαπημένο} other {# αγαπημένα}}",
|
||||
"status.filter": "Φιλτράρισμα αυτής της ανάρτησης",
|
||||
@@ -800,6 +812,7 @@
|
||||
"status.reblogs.empty": "Κανείς δεν ενίσχυσε αυτή την ανάρτηση ακόμα. Μόλις το κάνει κάποιος, θα εμφανιστεί εδώ.",
|
||||
"status.redraft": "Σβήσε & ξαναγράψε",
|
||||
"status.remove_bookmark": "Αφαίρεση σελιδοδείκτη",
|
||||
"status.replied_in_thread": "Απαντήθηκε σε νήμα",
|
||||
"status.replied_to": "Απάντησε στον {name}",
|
||||
"status.reply": "Απάντησε",
|
||||
"status.replyAll": "Απάντησε στο νήμα συζήτησης",
|
||||
|
||||
@@ -231,6 +231,8 @@
|
||||
"domain_pill.their_username": "Ilia unika identigilo sur ilia servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.",
|
||||
"domain_pill.username": "Uzantnomo",
|
||||
"domain_pill.whats_in_a_handle": "Kio estas en identigo?",
|
||||
"domain_pill.who_they_are": "Ĉar identigoj diras, kiu iu estas kaj kie ili estas, vi povas interagi kun homoj tra la socia reto de <button>ActivityPub-funkciigitaj platformoj</button>.",
|
||||
"domain_pill.who_you_are": "Ĉar via identigo diras kiu vi estas kaj kie vi estas, homoj povas interagi kun vi tra la socia reto de <button>ActivityPub-funkciigitaj platformoj</button>.",
|
||||
"domain_pill.your_handle": "Via identigo:",
|
||||
"domain_pill.your_server": "Via cifereca hejmo, kie loĝas ĉiuj viaj afiŝoj. Ĉu vi ne ŝatas ĉi tiun? Transloku servilojn iam ajn kaj alportu ankaŭ viajn sekvantojn.",
|
||||
"domain_pill.your_username": "Via unika identigilo sur ĉi tiu servilo. Eblas trovi uzantojn kun la sama uzantnomo sur malsamaj serviloj.",
|
||||
@@ -301,6 +303,7 @@
|
||||
"filter_modal.select_filter.subtitle": "Uzu ekzistantan kategorion aŭ kreu novan",
|
||||
"filter_modal.select_filter.title": "Filtri ĉi tiun afiŝon",
|
||||
"filter_modal.title.status": "Filtri mesaĝon",
|
||||
"filter_warning.matches_filter": "Filtrilo de kongruoj “{title}”",
|
||||
"filtered_notifications_banner.pending_requests": "El {count, plural, =0 {neniu} one {unu persono} other {# homoj}} vi eble konas",
|
||||
"filtered_notifications_banner.title": "Filtritaj sciigoj",
|
||||
"firehose.all": "Ĉiuj",
|
||||
@@ -309,11 +312,16 @@
|
||||
"follow_request.authorize": "Rajtigi",
|
||||
"follow_request.reject": "Rifuzi",
|
||||
"follow_requests.unlocked_explanation": "Kvankam via konto ne estas ŝlosita, la dungitaro de {domain} opinias, ke vi eble volas revizii petojn pri sekvado de ĉi tiuj kontoj permane.",
|
||||
"follow_suggestions.curated_suggestion": "Elekto de stabo",
|
||||
"follow_suggestions.dismiss": "Ne montri denove",
|
||||
"follow_suggestions.featured_longer": "Mane elektita de la teamo de {domain}",
|
||||
"follow_suggestions.friends_of_friends_longer": "Populara inter homoj, kiujn vi sekvas",
|
||||
"follow_suggestions.hints.featured": "Ĉi tiu profilo estis mane elektita de la teamo de {domain}.",
|
||||
"follow_suggestions.hints.friends_of_friends": "Ĉi tiu profilo estas populara inter la homoj, kiujn vi sekvas.",
|
||||
"follow_suggestions.hints.most_followed": "Ĉi tiu profilo estas unu el la plej sekvataj en {domain}.",
|
||||
"follow_suggestions.hints.most_interactions": "Ĉi tiu profilo lastatempe ricevis multe da atento sur {domain}.",
|
||||
"follow_suggestions.hints.similar_to_recently_followed": "Ĉi tiu profilo similas al la profiloj kiujn vi plej lastatempe sekvis.",
|
||||
"follow_suggestions.personalized_suggestion": "Agordita propono",
|
||||
"follow_suggestions.popular_suggestion": "Popularaj proponoj",
|
||||
"follow_suggestions.popular_suggestion_longer": "Populara en {domain}",
|
||||
"follow_suggestions.similar_to_recently_followed_longer": "Simile al profiloj, kiujn vi lastatempe sekvis",
|
||||
@@ -346,9 +354,12 @@
|
||||
"hashtag.unfollow": "Ne plu sekvi la kradvorton",
|
||||
"hashtags.and_other": "…kaj {count, plural,other {# pli}}",
|
||||
"hints.profiles.followers_may_be_missing": "Sekvantoj por ĉi tiu profilo eble mankas.",
|
||||
"hints.profiles.follows_may_be_missing": "Sekvatoj de ĉi tiu profilo eble mankas.",
|
||||
"hints.profiles.posts_may_be_missing": "Iuj afiŝoj de ĉi tiu profilo eble mankas.",
|
||||
"hints.profiles.see_more_followers": "Vidi pli da sekvantoj sur {domain}",
|
||||
"hints.profiles.see_more_follows": "Vidi pli da sekvatoj sur {domain}",
|
||||
"hints.profiles.see_more_posts": "Vidi pli da afiŝoj sur {domain}",
|
||||
"hints.threads.replies_may_be_missing": "Respondoj de aliaj serviloj eble mankas.",
|
||||
"hints.threads.see_more": "Vidi pli da respondoj sur {domain}",
|
||||
"home.column_settings.show_reblogs": "Montri diskonigojn",
|
||||
"home.column_settings.show_replies": "Montri respondojn",
|
||||
@@ -358,6 +369,10 @@
|
||||
"home.pending_critical_update.title": "Kritika sekurĝisdatigo estas disponebla!",
|
||||
"home.show_announcements": "Montri anoncojn",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon ne povas informi uzantojn, ke vi ignoris iliajn sciigojn. Ignori sciigojn ne malhelpos la mesaĝojn mem esti senditaj.",
|
||||
"ignore_notifications_modal.filter_instead": "Filtri anstataŭe",
|
||||
"ignore_notifications_modal.filter_to_act_users": "Vi ankoraŭ povos akcepti, malakcepti aŭ raporti uzantojn",
|
||||
"ignore_notifications_modal.filter_to_avoid_confusion": "Filtrado helpas eviti eblan konfuzon",
|
||||
"ignore_notifications_modal.filter_to_review_separately": "Vi povas revizii filtritajn sciigojn aparte",
|
||||
"ignore_notifications_modal.ignore": "Ignori sciigojn",
|
||||
"ignore_notifications_modal.limited_accounts_title": "Ĉu ignori sciigojn de moderigitaj kontoj?",
|
||||
"ignore_notifications_modal.new_accounts_title": "Ĉu ignori sciigojn de novaj kontoj?",
|
||||
@@ -471,6 +486,7 @@
|
||||
"navigation_bar.follows_and_followers": "Sekvatoj kaj sekvantoj",
|
||||
"navigation_bar.lists": "Listoj",
|
||||
"navigation_bar.logout": "Adiaŭi",
|
||||
"navigation_bar.moderation": "Modereco",
|
||||
"navigation_bar.mutes": "Silentigitaj uzantoj",
|
||||
"navigation_bar.opened_in_classic_interface": "Afiŝoj, kontoj, kaj aliaj specifaj paĝoj kiuj estas malfermititaj defaulta en la klasika reta interfaco.",
|
||||
"navigation_bar.personal": "Persone",
|
||||
@@ -486,7 +502,9 @@
|
||||
"notification.admin.report_statuses": "{name} raportis {target} por {category}",
|
||||
"notification.admin.report_statuses_other": "{name} raportis {target}",
|
||||
"notification.admin.sign_up": "{name} kreis konton",
|
||||
"notification.admin.sign_up.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} kreis konton",
|
||||
"notification.favourite": "{name} stelumis vian afiŝon",
|
||||
"notification.favourite.name_and_others_with_link": "{name} kaj <a>{count, plural, one {# alia} other {# aliaj}}</a> ŝatis vian afiŝon",
|
||||
"notification.follow": "{name} eksekvis vin",
|
||||
"notification.follow.name_and_others": "{name} kaj {count, plural, one {# alia} other {# aliaj}} sekvis vin",
|
||||
"notification.follow_request": "{name} petis sekvi vin",
|
||||
@@ -506,22 +524,32 @@
|
||||
"notification.moderation_warning.action_silence": "Via konto estis limigita.",
|
||||
"notification.moderation_warning.action_suspend": "Via konto estas malakceptita.",
|
||||
"notification.own_poll": "Via enketo finiĝis",
|
||||
"notification.poll": "Balotenketo, en kiu vi voĉdonis, finiĝis",
|
||||
"notification.reblog": "{name} diskonigis vian afiŝon",
|
||||
"notification.reblog.name_and_others_with_link": "{name} kaj <a>{count, plural, one {# alia} other {# aliaj}}</a> diskonigis vian afiŝon",
|
||||
"notification.relationships_severance_event": "Perditaj konektoj kun {name}",
|
||||
"notification.relationships_severance_event.account_suspension": "Administranto de {from} malakceptis {target}, kio signifas, ke vi ne plu povas ricevi ĝisdatigojn de ili aŭ interagi kun ili.",
|
||||
"notification.relationships_severance_event.domain_block": "Administranto de {from} blokis {target}, inkluzive de {followersCount} de viaj sekvantoj kaj {followingCount, plural, one {# konto} other {# kontoj}} kiujn vi sekvas.",
|
||||
"notification.relationships_severance_event.learn_more": "Lerni pli",
|
||||
"notification.relationships_severance_event.user_domain_block": "Vi blokis {target}, forigante {followersCount} de viaj sekvantoj kaj {followingCount, plural, one {# konto} other {# kontoj}} kiujn vi sekvas.",
|
||||
"notification.status": "{name} ĵus afiŝis",
|
||||
"notification.update": "{name} redaktis afiŝon",
|
||||
"notification_requests.accept": "Akcepti",
|
||||
"notification_requests.accept_multiple": "{count, plural, one {Akcepti # peton…} other {Akcepti # petojn…}}",
|
||||
"notification_requests.confirm_accept_multiple.button": "{count, plural, one {Akcepti peton} other {Akcepti petojn}}",
|
||||
"notification_requests.confirm_accept_multiple.message": "Vi estas akceptonta {count, plural, one {unu sciigan peton} other {# sciigajn petojn}}. Ĉu vi certas, ke vi volas daŭrigi?",
|
||||
"notification_requests.confirm_accept_multiple.title": "Ĉu akcepti sciigajn petojn?",
|
||||
"notification_requests.confirm_dismiss_multiple.button": "{count, plural, one {Malakcepti peton} other {Malakcepti petojn}}",
|
||||
"notification_requests.confirm_dismiss_multiple.message": "Vi estas malakceptonta {count, plural, one {unu sciigan peton} other {# sciigajn petojn}}. Vi ne povos facile aliri {count, plural, one {ĝin} other {ilin}} denove. Ĉu vi certas, ke vi volas daŭrigi?",
|
||||
"notification_requests.confirm_dismiss_multiple.title": "Ĉu malakcepti sciigajn petojn?",
|
||||
"notification_requests.dismiss": "Forĵeti",
|
||||
"notification_requests.dismiss_multiple": "{count, plural, one {Malakcepti # peton…} other {# Malakcepti # petojn…}}",
|
||||
"notification_requests.edit_selection": "Redakti",
|
||||
"notification_requests.exit_selection": "Farita",
|
||||
"notification_requests.explainer_for_limited_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto estis limigita de moderanto.",
|
||||
"notification_requests.explainer_for_limited_remote_account": "Sciigoj de ĉi tiu konto estis filtritaj ĉar la konto aŭ ĝia servilo estis limigitaj de moderanto.",
|
||||
"notification_requests.maximize": "Maksimumigi",
|
||||
"notification_requests.minimize_banner": "Minimumigi filtritajn sciigojn-rubandon",
|
||||
"notification_requests.notifications_from": "Sciigoj de {name}",
|
||||
"notification_requests.title": "Filtritaj sciigoj",
|
||||
"notification_requests.view": "Vidi sciigojn",
|
||||
@@ -533,6 +561,7 @@
|
||||
"notifications.column_settings.alert": "Sciigoj de la retumilo",
|
||||
"notifications.column_settings.favourite": "Stelumoj:",
|
||||
"notifications.column_settings.filter_bar.advanced": "Montri ĉiujn kategoriojn",
|
||||
"notifications.column_settings.filter_bar.category": "Rapida filtrila breto",
|
||||
"notifications.column_settings.follow": "Novaj sekvantoj:",
|
||||
"notifications.column_settings.follow_request": "Novaj petoj de sekvado:",
|
||||
"notifications.column_settings.mention": "Mencioj:",
|
||||
@@ -548,7 +577,7 @@
|
||||
"notifications.filter.all": "Ĉiuj",
|
||||
"notifications.filter.boosts": "Diskonigoj",
|
||||
"notifications.filter.favourites": "Stelumoj",
|
||||
"notifications.filter.follows": "Sekvoj",
|
||||
"notifications.filter.follows": "Sekvatoj",
|
||||
"notifications.filter.mentions": "Mencioj",
|
||||
"notifications.filter.polls": "Balotenketaj rezultoj",
|
||||
"notifications.filter.statuses": "Ĝisdatigoj de homoj, kiujn vi sekvas",
|
||||
@@ -563,12 +592,16 @@
|
||||
"notifications.policy.drop": "Ignori",
|
||||
"notifications.policy.drop_hint": "Sendi al la malpleno, por neniam esti vidita denove",
|
||||
"notifications.policy.filter": "Filtri",
|
||||
"notifications.policy.filter_hint": "Sendi al filtritaj sciigoj-enirkesto",
|
||||
"notifications.policy.filter_limited_accounts_hint": "Limigita de servilaj moderigantoj",
|
||||
"notifications.policy.filter_limited_accounts_title": "Moderigitaj kontoj",
|
||||
"notifications.policy.filter_new_accounts.hint": "Kreite en la {days, plural, one {lasta tago} other {# lastaj tagoj}}",
|
||||
"notifications.policy.filter_new_accounts_title": "Novaj kontoj",
|
||||
"notifications.policy.filter_not_followers_hint": "Inkluzive de homoj, kiuj sekvis vin malpli ol {days, plural, one {unu tago} other {# tagoj}}",
|
||||
"notifications.policy.filter_not_followers_title": "Homoj, kiuj ne sekvas vin",
|
||||
"notifications.policy.filter_not_following_hint": "Ĝis vi permane aprobas ilin",
|
||||
"notifications.policy.filter_not_following_title": "Homoj, kiujn vi ne sekvas",
|
||||
"notifications.policy.filter_private_mentions_hint": "Filtrite krom se ĝi respondas al via propra mencio aŭ se vi sekvas la sendinton",
|
||||
"notifications.policy.filter_private_mentions_title": "Nepetitaj privataj mencioj",
|
||||
"notifications.policy.title": "Administri sciigojn de…",
|
||||
"notifications_permission_banner.enable": "Ŝalti retumilajn sciigojn",
|
||||
@@ -580,8 +613,8 @@
|
||||
"onboarding.actions.go_to_home": "Go to your home feed",
|
||||
"onboarding.compose.template": "Saluton #Mastodon!",
|
||||
"onboarding.follows.empty": "Bedaŭrinde, neniu rezulto estas montrebla nuntempe. Vi povas provi serĉi aŭ foliumi la esploran paĝon por trovi kontojn por sekvi, aŭ retrovi baldaŭ.",
|
||||
"onboarding.follows.lead": "You curate your own home feed. The more people you follow, the more active and interesting it will be. These profiles may be a good starting point—you can always unfollow them later!",
|
||||
"onboarding.follows.title": "Popular on Mastodon",
|
||||
"onboarding.follows.lead": "Via hejma fluo estas la ĉefa maniero sperti Mastodon. Ju pli da homoj vi sekvas, des pli aktiva kaj interesa ĝi estos. Por komenci, jen kelkaj sugestoj:",
|
||||
"onboarding.follows.title": "Agordi vian hejman fluon",
|
||||
"onboarding.profile.discoverable": "Trovebligi mian profilon",
|
||||
"onboarding.profile.discoverable_hint": "Kiam vi aliĝi al trovebleco ĉe Mastodon, viaj afiŝoj eble aperos en serĉaj rezultoj kaj populariĝoj, kaj via profilo eble estas sugestota al personoj kun similaj intereseoj al vi.",
|
||||
"onboarding.profile.display_name": "Publika nomo",
|
||||
@@ -602,7 +635,7 @@
|
||||
"onboarding.start.title": "Vi atingas ĝin!",
|
||||
"onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
|
||||
"onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
|
||||
"onboarding.steps.publish_status.body": "Say hello to the world.",
|
||||
"onboarding.steps.publish_status.body": "Salutu la mondon per teksto, fotoj, filmetoj aŭ balotenketoj {emoji}",
|
||||
"onboarding.steps.publish_status.title": "Fari vian unuan afiŝon",
|
||||
"onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
|
||||
"onboarding.steps.setup_profile.title": "Customize your profile",
|
||||
@@ -632,6 +665,7 @@
|
||||
"privacy.private.short": "Sekvantoj",
|
||||
"privacy.public.long": "Ĉiujn ajn ĉe kaj ekster Mastodon",
|
||||
"privacy.public.short": "Publika",
|
||||
"privacy.unlisted.additional": "Ĉi tio kondutas ekzakte kiel publika, krom ke la afiŝo ne aperos en vivaj fluoj aŭ kradvortoj, esploro aŭ Mastodon-serĉo, eĉ se vi estas enskribita en la tuta konto.",
|
||||
"privacy.unlisted.long": "Malpli algoritmaj fanfaroj",
|
||||
"privacy.unlisted.short": "Diskrete publika",
|
||||
"privacy_policy.last_updated": "Laste ĝisdatigita en {date}",
|
||||
@@ -651,7 +685,9 @@
|
||||
"relative_time.minutes": "{number}m",
|
||||
"relative_time.seconds": "{number}s",
|
||||
"relative_time.today": "hodiaŭ",
|
||||
"reply_indicator.attachments": "{count, plural, one {# aldonaĵo} other {# aldonaĵoj}}",
|
||||
"reply_indicator.cancel": "Nuligi",
|
||||
"reply_indicator.poll": "Balotenketo",
|
||||
"report.block": "Bloki",
|
||||
"report.block_explanation": "Vi ne vidos iliajn afiŝojn. Ili ne povos vidi viajn afiŝojn, nek sekvi vin. Ili ne scios, ke vi blokas ilin.",
|
||||
"report.categories.legal": "Laŭleĝa",
|
||||
@@ -732,6 +768,7 @@
|
||||
"server_banner.server_stats": "Statistikoj de la servilo:",
|
||||
"sign_in_banner.create_account": "Krei konton",
|
||||
"sign_in_banner.follow_anyone": "Sekvi iun ajn tra la fediverso kaj vidi ĉion en kronologia ordo. Neniuj algoritmoj, reklamoj aŭ klakbetoj videblas.",
|
||||
"sign_in_banner.mastodon_is": "Mastodonto estas la plej bona maniero por resti flank-al-flanke kun kio okazas.",
|
||||
"sign_in_banner.sign_in": "Saluti",
|
||||
"sign_in_banner.sso_redirect": "Ensalutu aŭ Registriĝi",
|
||||
"status.admin_account": "Malfermi fasadon de moderigado por @{name}",
|
||||
@@ -741,6 +778,7 @@
|
||||
"status.bookmark": "Aldoni al la legosignoj",
|
||||
"status.cancel_reblog_private": "Ne plu diskonigi",
|
||||
"status.cannot_reblog": "Ĉi tiun afiŝon ne eblas diskonigi",
|
||||
"status.continued_thread": "Daŭrigis fadenon",
|
||||
"status.copy": "Kopii la ligilon al la mesaĝo",
|
||||
"status.delete": "Forigi",
|
||||
"status.detailed_status": "Detala konversacia vido",
|
||||
@@ -749,6 +787,7 @@
|
||||
"status.edit": "Redakti",
|
||||
"status.edited": "Laste redaktita {date}",
|
||||
"status.edited_x_times": "Redactita {count, plural, one {{count} fojon} other {{count} fojojn}}",
|
||||
"status.embed": "Akiri enkorpigan kodon",
|
||||
"status.favourite": "Ŝatata",
|
||||
"status.favourites": "{count, plural, one {plej ŝatata} other {plej ŝatataj}}",
|
||||
"status.filter": "Filtri ĉi tiun afiŝon",
|
||||
@@ -773,6 +812,7 @@
|
||||
"status.reblogs.empty": "Ankoraŭ neniu diskonigis tiun afiŝon. Kiam iu faras tion, ri aperos ĉi tie.",
|
||||
"status.redraft": "Forigi kaj reskribi",
|
||||
"status.remove_bookmark": "Forigi legosignon",
|
||||
"status.replied_in_thread": "Respondis en fadeno",
|
||||
"status.replied_to": "Respondis al {name}",
|
||||
"status.reply": "Respondi",
|
||||
"status.replyAll": "Respondi al la fadeno",
|
||||
|
||||
@@ -435,7 +435,7 @@
|
||||
"lightbox.next": "Siguiente",
|
||||
"lightbox.previous": "Anterior",
|
||||
"lightbox.zoom_in": "Ampliar al tamaño real",
|
||||
"lightbox.zoom_out": "Ampliar para ajustar",
|
||||
"lightbox.zoom_out": "Ampliar hasta ajustar",
|
||||
"limited_account_hint.action": "Mostrar perfil de todos modos",
|
||||
"limited_account_hint.title": "Este perfil fue ocultado por los moderadores de {domain}.",
|
||||
"link_preview.author": "Por {name}",
|
||||
|
||||
@@ -267,7 +267,7 @@
|
||||
"empty_column.favourites": "Todavía nadie marcó esta publicación como favorita. Cuando alguien lo haga, se mostrarán aquí.",
|
||||
"empty_column.follow_requests": "No tienes ninguna petición de seguidor. Cuando recibas una, se mostrará aquí.",
|
||||
"empty_column.followed_tags": "No has seguido ninguna etiqueta todavía. Cuando lo hagas, se mostrarán aquí.",
|
||||
"empty_column.hashtag": "No hay nada en este hashtag aún.",
|
||||
"empty_column.hashtag": "No hay nada en esta etiqueta todavía.",
|
||||
"empty_column.home": "¡Tu línea temporal está vacía! Sigue a más personas para rellenarla.",
|
||||
"empty_column.list": "Aún no hay nada en esta lista. Cuando los miembros de esta lista publiquen nuevos estados, estos aparecerán aquí.",
|
||||
"empty_column.lists": "No tienes ninguna lista. Cuando crees una, se mostrará aquí.",
|
||||
@@ -342,7 +342,7 @@
|
||||
"hashtag.column_header.tag_mode.any": "o {additional}",
|
||||
"hashtag.column_header.tag_mode.none": "sin {additional}",
|
||||
"hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias",
|
||||
"hashtag.column_settings.select.placeholder": "Introduzca hashtags…",
|
||||
"hashtag.column_settings.select.placeholder": "Introduce etiquetas…",
|
||||
"hashtag.column_settings.tag_mode.all": "Todos estos",
|
||||
"hashtag.column_settings.tag_mode.any": "Cualquiera de estos",
|
||||
"hashtag.column_settings.tag_mode.none": "Ninguno de estos",
|
||||
@@ -637,7 +637,7 @@
|
||||
"onboarding.steps.follow_people.title": "Personaliza tu línea de inicio",
|
||||
"onboarding.steps.publish_status.body": "Di hola al mundo con texto, fotos, vídeos o encuestas {emoji}",
|
||||
"onboarding.steps.publish_status.title": "Escribe tu primera publicación",
|
||||
"onboarding.steps.setup_profile.body": "Aumenta tus interacciones tcompletando tu perfil.",
|
||||
"onboarding.steps.setup_profile.body": "Aumenta tus interacciones con un perfil completo.",
|
||||
"onboarding.steps.setup_profile.title": "Personaliza tu perfil",
|
||||
"onboarding.steps.share_profile.body": "¡Dile a tus amigos cómo encontrarte en Mastodon!",
|
||||
"onboarding.steps.share_profile.title": "Comparte tu perfil de Mastodon",
|
||||
|
||||
@@ -434,6 +434,8 @@
|
||||
"lightbox.close": "Dùin",
|
||||
"lightbox.next": "Air adhart",
|
||||
"lightbox.previous": "Air ais",
|
||||
"lightbox.zoom_in": "Sùm dhan fhìor-mheud",
|
||||
"lightbox.zoom_out": "Sùm fèin-obrachail",
|
||||
"limited_account_hint.action": "Seall a’ phròifil co-dhiù",
|
||||
"limited_account_hint.title": "Chaidh a’ phròifil seo fhalach le maoir {domain}.",
|
||||
"link_preview.author": "Le {name}",
|
||||
|
||||
@@ -368,13 +368,13 @@
|
||||
"home.pending_critical_update.link": "Mira as actualizacións",
|
||||
"home.pending_critical_update.title": "Hai una actualización crítica de seguridade!",
|
||||
"home.show_announcements": "Amosar anuncios",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon non pode informar ás usuarias se ignoraches as súas notificacións. Ao ignorar as notificacións non evitarás que as mensaxes sexan enviadas igualmente.",
|
||||
"ignore_notifications_modal.disclaimer": "Mastodon non pode informar ás usuarias de que ignoraches as súas notificacións. Ao ignorar as notificacións non evitarás que as mensaxes sexan enviadas igualmente.",
|
||||
"ignore_notifications_modal.filter_instead": "Filtrar igualmente",
|
||||
"ignore_notifications_modal.filter_to_act_users": "Poderás seguir aceptando, rexeitando e denunciando usuarias",
|
||||
"ignore_notifications_modal.filter_to_avoid_confusion": "Ao filtrar axudas a evitar posibles confusións",
|
||||
"ignore_notifications_modal.filter_to_review_separately": "Podes revisar as notificacións filtradas por separado",
|
||||
"ignore_notifications_modal.filter_to_review_separately": "Podes revisar por separado as notificacións filtradas",
|
||||
"ignore_notifications_modal.ignore": "Ignorar notificacións",
|
||||
"ignore_notifications_modal.limited_accounts_title": "Ignorar notificacións desde contas moderadas?",
|
||||
"ignore_notifications_modal.limited_accounts_title": "Ignorar notificacións desde contas limitadas?",
|
||||
"ignore_notifications_modal.new_accounts_title": "Ignorar notificacións desde novas contas?",
|
||||
"ignore_notifications_modal.not_followers_title": "Ignorar notificacións de persoas que non te seguen?",
|
||||
"ignore_notifications_modal.not_following_title": "Ignorar notificacións de persoas que non segues?",
|
||||
@@ -463,7 +463,7 @@
|
||||
"mute_modal.hide_options": "Opcións ao ocultar",
|
||||
"mute_modal.indefinite": "Ata que as reactive",
|
||||
"mute_modal.show_options": "Mostrar opcións",
|
||||
"mute_modal.they_can_mention_and_follow": "Pódete mencionar e seguirte, pero non o verás.",
|
||||
"mute_modal.they_can_mention_and_follow": "Pódete mencionar e seguirte, pero non a verás.",
|
||||
"mute_modal.they_wont_know": "Non saberá que a acalaches.",
|
||||
"mute_modal.title": "Acalar usuaria?",
|
||||
"mute_modal.you_wont_see_mentions": "Non verás as publicacións que a mencionen.",
|
||||
|
||||
@@ -2,7 +2,7 @@ import { createReducer, isAnyOf } from '@reduxjs/toolkit';
|
||||
|
||||
import {
|
||||
fetchNotificationPolicy,
|
||||
decreasePendingNotificationsCount,
|
||||
decreasePendingRequestsCount,
|
||||
updateNotificationsPolicy,
|
||||
} from 'mastodon/actions/notification_policies';
|
||||
import type { NotificationPolicy } from 'mastodon/models/notification_policy';
|
||||
@@ -10,10 +10,9 @@ import type { NotificationPolicy } from 'mastodon/models/notification_policy';
|
||||
export const notificationPolicyReducer =
|
||||
createReducer<NotificationPolicy | null>(null, (builder) => {
|
||||
builder
|
||||
.addCase(decreasePendingNotificationsCount, (state, action) => {
|
||||
.addCase(decreasePendingRequestsCount, (state, action) => {
|
||||
if (state) {
|
||||
state.summary.pending_notifications_count -= action.payload;
|
||||
state.summary.pending_requests_count -= 1;
|
||||
state.summary.pending_requests_count -= action.payload;
|
||||
}
|
||||
})
|
||||
.addMatcher(
|
||||
|
||||
23
app/javascript/mastodon/utils/debounce.ts
Normal file
23
app/javascript/mastodon/utils/debounce.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { debounce } from 'lodash';
|
||||
|
||||
import type { AppDispatch } from 'mastodon/store';
|
||||
|
||||
export const debounceWithDispatchAndArguments = <T>(
|
||||
fn: (dispatch: AppDispatch, ...args: T[]) => void,
|
||||
{ delay = 100 },
|
||||
) => {
|
||||
let argumentBuffer: T[] = [];
|
||||
let dispatchBuffer: AppDispatch;
|
||||
|
||||
const wrapped = debounce(() => {
|
||||
const tmpBuffer = argumentBuffer;
|
||||
argumentBuffer = [];
|
||||
fn(dispatchBuffer, ...tmpBuffer);
|
||||
}, delay);
|
||||
|
||||
return (dispatch: AppDispatch, ...args: T[]) => {
|
||||
dispatchBuffer = dispatch;
|
||||
argumentBuffer.push(...args);
|
||||
wrapped();
|
||||
};
|
||||
};
|
||||
@@ -6889,7 +6889,7 @@ a.status-card {
|
||||
|
||||
.media-gallery__actions {
|
||||
position: absolute;
|
||||
bottom: 6px;
|
||||
top: 6px;
|
||||
inset-inline-end: 6px;
|
||||
display: flex;
|
||||
gap: 2px;
|
||||
@@ -6912,7 +6912,7 @@ a.status-card {
|
||||
.media-gallery__item__badges {
|
||||
position: absolute;
|
||||
bottom: 8px;
|
||||
inset-inline-start: 8px;
|
||||
inset-inline-end: 8px;
|
||||
display: flex;
|
||||
gap: 2px;
|
||||
}
|
||||
|
||||
@@ -86,9 +86,7 @@
|
||||
color: $primary-text-color;
|
||||
transition: all 100ms ease-in;
|
||||
font-size: 14px;
|
||||
padding: 0 16px;
|
||||
line-height: 36px;
|
||||
height: 36px;
|
||||
padding: 8px 16px;
|
||||
text-decoration: none;
|
||||
margin-bottom: 4px;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user