Compare commits

...

13 Commits

Author SHA1 Message Date
renovate[bot]
dee020962e
Update dependency postcss-preset-env to v10.3.1 2025-08-31 10:12:13 +00:00
Matt Jankowski
40242fafee
Use partial for severed relationship download area (#35945)
Some checks failed
Check i18n / check-i18n (push) Has been cancelled
Chromatic / Run Chromatic (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
CodeQL / Analyze (ruby) (push) Has been cancelled
Check formatting / lint (push) Has been cancelled
Haml Linting / lint (push) Has been cancelled
JavaScript Linting / lint (push) Has been cancelled
Ruby Linting / lint (push) Has been cancelled
JavaScript Testing / test (push) Has been cancelled
Historical data migration test / test (14-alpine) (push) Has been cancelled
Historical data migration test / test (15-alpine) (push) Has been cancelled
Historical data migration test / test (16-alpine) (push) Has been cancelled
Historical data migration test / test (17-alpine) (push) Has been cancelled
Ruby Testing / build (production) (push) Has been cancelled
Ruby Testing / build (test) (push) Has been cancelled
Ruby Testing / test (.ruby-version) (push) Has been cancelled
Ruby Testing / test (3.2) (push) Has been cancelled
Ruby Testing / test (3.3) (push) Has been cancelled
Ruby Testing / ImageMagick tests (.ruby-version) (push) Has been cancelled
Ruby Testing / ImageMagick tests (3.2) (push) Has been cancelled
Ruby Testing / ImageMagick tests (3.3) (push) Has been cancelled
Ruby Testing / End to End testing (.ruby-version) (push) Has been cancelled
Ruby Testing / End to End testing (3.2) (push) Has been cancelled
Ruby Testing / End to End testing (3.3) (push) Has been cancelled
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Has been cancelled
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:8.10.2) (push) Has been cancelled
Ruby Testing / Elastic Search integration testing (.ruby-version, opensearchproject/opensearch:2) (push) Has been cancelled
Ruby Testing / Elastic Search integration testing (3.2, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Has been cancelled
Ruby Testing / Elastic Search integration testing (3.3, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Has been cancelled
Bundler Audit / security (push) Has been cancelled
2025-08-29 15:19:59 +00:00
Matt Jankowski
ee4b0a223c
Add coverage for Relay model (#35950) 2025-08-29 15:18:52 +00:00
ioflow
3c578dbdcd
Fix incorrect RSS feed MIME type in gzip_types directive (#35562) 2025-08-29 14:17:04 +00:00
Claire
4fa203e69e
Rename unknown quote policy value to unsupported_policy (#35955) 2025-08-29 13:50:37 +00:00
Claire
8b7685d956
Add default quote policy to API (#35948) 2025-08-29 11:37:20 +00:00
Claire
4ecbaea8bb
Conditionally bump API version depending on quote post feature flag (#35939) 2025-08-29 10:33:35 +00:00
Matt Jankowski
5f1e6a5886
Fix failure to verify changes in api/v1/accounts/credentials spec (#35951)
Some checks are pending
Check i18n / check-i18n (push) Waiting to run
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (ruby) (push) Waiting to run
Check formatting / lint (push) Waiting to run
Ruby Linting / lint (push) Waiting to run
Historical data migration test / test (14-alpine) (push) Waiting to run
Historical data migration test / test (15-alpine) (push) Waiting to run
Historical data migration test / test (16-alpine) (push) Waiting to run
Historical data migration test / test (17-alpine) (push) Waiting to run
Ruby Testing / build (production) (push) Waiting to run
Ruby Testing / build (test) (push) Waiting to run
Ruby Testing / test (.ruby-version) (push) Blocked by required conditions
Ruby Testing / test (3.2) (push) Blocked by required conditions
Ruby Testing / test (3.3) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (.ruby-version) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (3.2) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (3.3) (push) Blocked by required conditions
Ruby Testing / End to End testing (.ruby-version) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.2) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.3) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:8.10.2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, opensearchproject/opensearch:2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.2, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.3, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
2025-08-29 08:14:23 +00:00
github-actions[bot]
97d80265b4
New Crowdin Translations (automated) (#35953)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-08-29 07:32:22 +00:00
Kazuki Nagasawa
d93572ea90
Fix 404 error after deleting status from detail view (#35800) (#35881)
Some checks failed
Check i18n / check-i18n (push) Waiting to run
Chromatic / Run Chromatic (push) Waiting to run
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (ruby) (push) Waiting to run
Check formatting / lint (push) Waiting to run
JavaScript Linting / lint (push) Waiting to run
JavaScript Testing / test (push) Waiting to run
Ruby Testing / build (production) (push) Waiting to run
Ruby Testing / build (test) (push) Waiting to run
Ruby Testing / test (.ruby-version) (push) Blocked by required conditions
Ruby Testing / test (3.2) (push) Blocked by required conditions
Ruby Testing / test (3.3) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (.ruby-version) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (3.2) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (3.3) (push) Blocked by required conditions
Ruby Testing / End to End testing (.ruby-version) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.2) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.3) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:8.10.2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, opensearchproject/opensearch:2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.2, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.3, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Crowdin / Upload translations / upload-translations (push) Has been cancelled
2025-08-28 20:50:19 +00:00
renovate[bot]
d880f397df
Update dependency @vitejs/plugin-react to v5.0.2 (#35942)
Some checks failed
Check i18n / check-i18n (push) Waiting to run
Chromatic / Run Chromatic (push) Waiting to run
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (ruby) (push) Waiting to run
Crowdin / Upload translations / upload-translations (push) Waiting to run
Check formatting / lint (push) Waiting to run
JavaScript Linting / lint (push) Waiting to run
JavaScript Testing / test (push) Waiting to run
Ruby Testing / build (production) (push) Waiting to run
Ruby Testing / build (test) (push) Waiting to run
Ruby Testing / test (.ruby-version) (push) Blocked by required conditions
Ruby Testing / test (3.2) (push) Blocked by required conditions
Ruby Testing / test (3.3) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (.ruby-version) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (3.2) (push) Blocked by required conditions
Ruby Testing / ImageMagick tests (3.3) (push) Blocked by required conditions
Ruby Testing / End to End testing (.ruby-version) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.2) (push) Blocked by required conditions
Ruby Testing / End to End testing (3.3) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, docker.elastic.co/elasticsearch/elasticsearch:8.10.2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (.ruby-version, opensearchproject/opensearch:2) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.2, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
Ruby Testing / Elastic Search integration testing (3.3, docker.elastic.co/elasticsearch/elasticsearch:7.17.13) (push) Blocked by required conditions
CSS Linting / lint (push) Has been cancelled
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-28 14:04:38 +00:00
renovate[bot]
3ab2d14782
Update Yarn to v4.9.4 (#35837)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-28 12:39:01 +00:00
diondiondion
229cbc6a24
Add hotkey Q for quoting the currently focused post (#35941) 2025-08-28 12:33:23 +00:00
53 changed files with 664 additions and 214 deletions

View File

@ -48,6 +48,7 @@ class Api::V1::Accounts::CredentialsController < Api::BaseController
default_privacy: source_params.fetch(:privacy, @account.user.setting_default_privacy),
default_sensitive: source_params.fetch(:sensitive, @account.user.setting_default_sensitive),
default_language: source_params.fetch(:language, @account.user.setting_default_language),
default_quote_policy: source_params.fetch(:quote_policy, @account.user.setting_default_quote_policy),
},
}
end

View File

@ -1,7 +1,10 @@
import { defineMessages } from 'react-intl';
import { browserHistory } from 'mastodon/components/router';
import api from '../api';
import { showAlert } from './alerts';
import { ensureComposeIsVisible, setComposeToStatus } from './compose';
import { importFetchedStatus, importFetchedAccount } from './importer';
import { fetchContext } from './statuses_typed';
@ -40,6 +43,10 @@ export const STATUS_TRANSLATE_SUCCESS = 'STATUS_TRANSLATE_SUCCESS';
export const STATUS_TRANSLATE_FAIL = 'STATUS_TRANSLATE_FAIL';
export const STATUS_TRANSLATE_UNDO = 'STATUS_TRANSLATE_UNDO';
const messages = defineMessages({
deleteSuccess: { id: 'status.delete.success', defaultMessage: 'Post deleted' },
});
export function fetchStatusRequest(id, skipLoading) {
return {
type: STATUS_FETCH_REQUEST,
@ -154,7 +161,7 @@ export function deleteStatus(id, withRedraft = false) {
dispatch(deleteStatusRequest(id));
api().delete(`/api/v1/statuses/${id}`, { params: { delete_media: !withRedraft } }).then(response => {
return api().delete(`/api/v1/statuses/${id}`, { params: { delete_media: !withRedraft } }).then(response => {
dispatch(deleteStatusSuccess(id));
dispatch(deleteFromTimelines(id));
dispatch(importFetchedAccount(response.data.account));
@ -162,9 +169,14 @@ export function deleteStatus(id, withRedraft = false) {
if (withRedraft) {
dispatch(redraft(status, response.data.text));
ensureComposeIsVisible(getState);
} else {
dispatch(showAlert({ message: messages.deleteSuccess }));
}
return response;
}).catch(error => {
dispatch(deleteStatusFail(id, error));
throw error;
});
};
}

View File

@ -1,7 +1,11 @@
import type { ApiStatusJSON } from './statuses';
export type ApiQuoteState = 'accepted' | 'pending' | 'revoked' | 'unauthorized';
export type ApiQuotePolicy = 'public' | 'followers' | 'nobody' | 'unknown';
export type ApiQuotePolicy =
| 'public'
| 'followers'
| 'nobody'
| 'unsupported_policy';
export type ApiUserQuotePolicy = 'automatic' | 'manual' | 'denied' | 'unknown';
interface ApiQuoteEmptyJSON {

View File

@ -105,6 +105,7 @@ const hotkeyMatcherMap = {
reply: just('r'),
favourite: just('f'),
boost: just('b'),
quote: just('q'),
mention: just('m'),
open: any('enter', 'o'),
openProfile: just('p'),

View File

@ -96,6 +96,7 @@ class Status extends ImmutablePureComponent {
onReply: PropTypes.func,
onFavourite: PropTypes.func,
onReblog: PropTypes.func,
onQuote: PropTypes.func,
onDelete: PropTypes.func,
onDirect: PropTypes.func,
onMention: PropTypes.func,
@ -276,6 +277,10 @@ class Status extends ImmutablePureComponent {
this.props.onReblog(this._properStatus(), e);
};
handleHotkeyQuote = () => {
this.props.onQuote(this._properStatus());
};
handleHotkeyMention = e => {
e.preventDefault();
this.props.onMention(this._properStatus().get('account'));
@ -386,6 +391,7 @@ class Status extends ImmutablePureComponent {
reply: this.handleHotkeyReply,
favourite: this.handleHotkeyFavourite,
boost: this.handleHotkeyBoost,
quote: this.handleHotkeyQuote,
mention: this.handleHotkeyMention,
open: this.handleHotkeyOpen,
openProfile: this.handleHotkeyOpenProfile,

View File

@ -59,6 +59,10 @@ const messages = defineMessages({
defaultMessage: 'Private posts cannot be quoted',
},
reblog: { id: 'status.reblog', defaultMessage: 'Boost' },
reblog_or_quote: {
id: 'status.reblog_or_quote',
defaultMessage: 'Boost or quote',
},
reblog_cancel: {
id: 'status.cancel_reblog_private',
defaultMessage: 'Unboost',
@ -176,7 +180,7 @@ export const StatusReblogButton: FC<ReblogButtonProps> = ({
>
<IconButton
title={intl.formatMessage(
!disabled ? messages.reblog : messages.all_disabled,
!disabled ? messages.reblog_or_quote : messages.all_disabled,
)}
icon='retweet'
iconComponent={iconComponent}

View File

@ -12,6 +12,7 @@ import {
mentionCompose,
directCompose,
} from '../actions/compose';
import { quoteComposeById } from '../actions/compose_typed';
import {
initDomainBlockModal,
unblockDomain,
@ -46,6 +47,8 @@ import Status from '../components/status';
import { deleteModal } from '../initial_state';
import { makeGetStatus, makeGetPictureInPicture } from '../selectors';
import { isFeatureEnabled } from 'mastodon/utils/environment';
const makeMapStateToProps = () => {
const getStatus = makeGetStatus();
const getPictureInPicture = makeGetPictureInPicture();
@ -76,6 +79,12 @@ const mapDispatchToProps = (dispatch, { contextType }) => ({
onReblog (status, e) {
dispatch(toggleReblog(status.get('id'), e.shiftKey));
},
onQuote (status) {
if (isFeatureEnabled('outgoing_quotes')) {
dispatch(quoteComposeById(status.get('id')));
}
},
onFavourite (status) {
dispatch(toggleFavourite(status.get('id')));
@ -108,7 +117,13 @@ const mapDispatchToProps = (dispatch, { contextType }) => ({
if (!deleteModal) {
dispatch(deleteStatus(status.get('id'), withRedraft));
} else {
dispatch(openModal({ modalType: 'CONFIRM_DELETE_STATUS', modalProps: { statusId: status.get('id'), withRedraft } }));
dispatch(openModal({
modalType: 'CONFIRM_DELETE_STATUS',
modalProps: {
statusId: status.get('id'),
withRedraft
}
}));
}
},

View File

@ -9,6 +9,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
import InfoIcon from '@/material-icons/400-24px/info.svg?react';
import Column from 'mastodon/components/column';
import ColumnHeader from 'mastodon/components/column_header';
import { isFeatureEnabled } from 'mastodon/utils/environment';
const messages = defineMessages({
heading: { id: 'keyboard_shortcuts.heading', defaultMessage: 'Keyboard Shortcuts' },
@ -62,6 +63,12 @@ class KeyboardShortcuts extends ImmutablePureComponent {
<td><kbd>b</kbd></td>
<td><FormattedMessage id='keyboard_shortcuts.boost' defaultMessage='to boost' /></td>
</tr>
{isFeatureEnabled('outgoing_quotes') && (
<tr>
<td><kbd>q</kbd></td>
<td><FormattedMessage id='keyboard_shortcuts.quote' defaultMessage='Quote post' /></td>
</tr>
)}
<tr>
<td><kbd>enter</kbd>, <kbd>o</kbd></td>
<td><FormattedMessage id='keyboard_shortcuts.enter' defaultMessage='to open status' /></td>

View File

@ -69,6 +69,7 @@ import { attachFullscreenListener, detachFullscreenListener, isFullscreen } from
import ActionBar from './components/action_bar';
import { DetailedStatus } from './components/detailed_status';
import { RefreshController } from './components/refresh_controller';
import { quoteComposeById } from '@/mastodon/actions/compose_typed';
const messages = defineMessages({
revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },
@ -250,12 +251,31 @@ class Status extends ImmutablePureComponent {
};
handleDeleteClick = (status, withRedraft = false) => {
const { dispatch } = this.props;
const { dispatch, history } = this.props;
const handleDeleteSuccess = () => {
history.push('/');
};
if (!deleteModal) {
dispatch(deleteStatus(status.get('id'), withRedraft));
dispatch(deleteStatus(status.get('id'), withRedraft))
.then(() => {
if (!withRedraft) {
handleDeleteSuccess();
}
})
.catch(() => {
// Error handling - could show error message
});
} else {
dispatch(openModal({ modalType: 'CONFIRM_DELETE_STATUS', modalProps: { statusId: status.get('id'), withRedraft } }));
dispatch(openModal({
modalType: 'CONFIRM_DELETE_STATUS',
modalProps: {
statusId: status.get('id'),
withRedraft,
onDeleteSuccess: handleDeleteSuccess
}
}));
}
};
@ -409,6 +429,10 @@ class Status extends ImmutablePureComponent {
this.handleReblogClick(this.props.status);
};
handleHotkeyQuote = () => {
this.props.dispatch(quoteComposeById(this.props.status.get('id')));
};
handleHotkeyMention = e => {
e.preventDefault();
this.handleMentionClick(this.props.status.get('account'));
@ -546,6 +570,7 @@ class Status extends ImmutablePureComponent {
reply: this.handleHotkeyReply,
favourite: this.handleHotkeyFavourite,
boost: this.handleHotkeyBoost,
quote: this.handleHotkeyQuote,
mention: this.handleHotkeyMention,
openProfile: this.handleHotkeyOpenProfile,
toggleHidden: this.handleHotkeyToggleHidden,

View File

@ -40,14 +40,23 @@ export const ConfirmDeleteStatusModal: React.FC<
{
statusId: string;
withRedraft: boolean;
onDeleteSuccess?: () => void;
} & BaseConfirmationModalProps
> = ({ statusId, withRedraft, onClose }) => {
> = ({ statusId, withRedraft, onClose, onDeleteSuccess }) => {
const intl = useIntl();
const dispatch = useAppDispatch();
const onConfirm = useCallback(() => {
dispatch(deleteStatus(statusId, withRedraft));
}, [dispatch, statusId, withRedraft]);
void dispatch(deleteStatus(statusId, withRedraft))
.then(() => {
onDeleteSuccess?.();
onClose();
})
.catch(() => {
// Error handling - still close modal
onClose();
});
}, [dispatch, statusId, withRedraft, onDeleteSuccess, onClose]);
return (
<ConfirmationModal

View File

@ -898,10 +898,13 @@
"status.quote_error.pending_approval": "Допіс чакае пацвярджэння",
"status.quote_error.pending_approval_popout.body": "Допісы, якія былі цытаваныя паміж серверамі Fediverse, могуць доўга загружацца, паколькі розныя серверы маюць розныя пратаколы.",
"status.quote_error.pending_approval_popout.title": "Цытаваны допіс чакае пацвярджэння? Захоўвайце спакой",
"status.quote_followers_only": "Толькі падпісчыкі могуць цытаваць гэты допіс",
"status.quote_manual_review": "Аўтар зробіць агляд уручную",
"status.quote_policy_change": "Змяніць, хто можа цытаваць",
"status.quote_post_author": "Цытаваў допіс @{name}",
"status.quote_private": "Прыватныя допісы нельга цытаваць",
"status.quotes": "{count, plural,one {цытата} few {цытаты} other {цытат}}",
"status.quotes.empty": "Яшчэ ніхто не цытаваў гэты допіс. Калі гэта адбудзецца, то Вы пабачыце гэта тут.",
"status.read_more": "Чытаць болей",
"status.reblog": "Пашырыць",
"status.reblog_private": "Пашырыць з першапачатковай бачнасцю",
@ -916,6 +919,7 @@
"status.reply": "Адказаць",
"status.replyAll": "Адказаць у ланцугу",
"status.report": "Паскардзіцца на @{name}",
"status.request_quote": "Даслаць запыт на цытаванне",
"status.revoke_quote": "Выдаліць мой допіс з допісу @{name}",
"status.sensitive_warning": "Уражвальны змест",
"status.share": "Абагуліць",

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "Otevřít média",
"keyboard_shortcuts.pinned": "Otevřít seznam připnutých příspěvků",
"keyboard_shortcuts.profile": "Otevřít autorův profil",
"keyboard_shortcuts.quote": "Citovat příspěvek",
"keyboard_shortcuts.reply": "Odpovědět na příspěvek",
"keyboard_shortcuts.requests": "Otevřít seznam žádostí o sledování",
"keyboard_shortcuts.search": "Zaměřit se na vyhledávací lištu",
@ -904,8 +905,10 @@
"status.quote_post_author": "Citovali příspěvek od @{name}",
"status.quote_private": "Soukromé příspěvky nelze citovat",
"status.quotes": "{count, plural, one {citace} few {citace} other {citací}}",
"status.quotes.empty": "Tento příspěvek zatím nikdo necitoval. Pokud tak někdo učiní, uvidíte to zde.",
"status.read_more": "Číst více",
"status.reblog": "Boostnout",
"status.reblog_or_quote": "Boostnout nebo citovat",
"status.reblog_private": "Boostnout s původní viditelností",
"status.reblogged_by": "Uživatel {name} boostnul",
"status.reblogs": "{count, plural, one {boost} few {boosty} many {boostů} other {boostů}}",

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "Åbn medier",
"keyboard_shortcuts.pinned": "Åbn liste over fastgjorte indlæg",
"keyboard_shortcuts.profile": "Åbn forfatters profil",
"keyboard_shortcuts.quote": "Citer indlæg",
"keyboard_shortcuts.reply": "Besvar indlægget",
"keyboard_shortcuts.requests": "Åbn liste over følgeanmodninger",
"keyboard_shortcuts.search": "Fokusér søgebjælke",
@ -898,12 +899,16 @@
"status.quote_error.pending_approval": "Afventende indlæg",
"status.quote_error.pending_approval_popout.body": "Citater delt på tværs af Fediverset kan tage tid at vise, da forskellige servere har forskellige protokoller.",
"status.quote_error.pending_approval_popout.title": "Afventende citat? Tag det roligt",
"status.quote_followers_only": "Kun følgere kan citere dette indlæg",
"status.quote_manual_review": "Forfatter vil manuelt gennemgå",
"status.quote_policy_change": "Ændr hvem der kan citere",
"status.quote_post_author": "Citerede et indlæg fra @{name}",
"status.quote_private": "Private indlæg kan ikke citeres",
"status.quotes": "{count, plural, one {citat} other {citater}}",
"status.quotes.empty": "Ingen har citeret dette indlæg endnu. Når nogen gør det, vil det blive vist her.",
"status.read_more": "Læs mere",
"status.reblog": "Fremhæv",
"status.reblog_or_quote": "Fremhæv eller citer",
"status.reblog_private": "Fremhæv med oprindelig synlighed",
"status.reblogged_by": "{name} fremhævede",
"status.reblogs": "{count, plural, one {# fremhævelse} other {# fremhævelser}}",
@ -916,6 +921,7 @@
"status.reply": "Besvar",
"status.replyAll": "Svar alle",
"status.report": "Anmeld @{name}",
"status.request_quote": "Anmod om tilladelse til at citere",
"status.revoke_quote": "Fjern eget indlæg fra @{name}s indlæg",
"status.sensitive_warning": "Følsomt indhold",
"status.share": "Del",

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "Medieninhalt öffnen",
"keyboard_shortcuts.pinned": "Liste angehefteter Beiträge öffnen",
"keyboard_shortcuts.profile": "Profil aufrufen",
"keyboard_shortcuts.quote": "Beitrag zitieren",
"keyboard_shortcuts.reply": "Auf Beitrag antworten",
"keyboard_shortcuts.requests": "Liste der Follower-Anfragen aufrufen",
"keyboard_shortcuts.search": "Suchleiste fokussieren",
@ -899,7 +900,7 @@
"status.quote_error.pending_approval_popout.body": "Zitierte Beiträge, die im Fediverse geteilt werden, benötigen einige Zeit, bis sie überall angezeigt werden, da die verschiedenen Server unterschiedliche Protokolle nutzen.",
"status.quote_error.pending_approval_popout.title": "Zitierter Beitrag noch nicht freigegeben? Immer mit der Ruhe",
"status.quote_followers_only": "Nur Follower können diesen Beitrag zitieren",
"status.quote_manual_review": "Deine Anfrage wird manuell überprüft werden",
"status.quote_manual_review": "Zitierte*r überprüft manuell",
"status.quote_policy_change": "Ändern, wer zitieren darf",
"status.quote_post_author": "Zitierte einen Beitrag von @{name}",
"status.quote_private": "Private Beiträge können nicht zitiert werden",
@ -907,6 +908,7 @@
"status.quotes.empty": "Diesen Beitrag hat bisher noch niemand zitiert. Sobald es jemand tut, wird das Profil hier erscheinen.",
"status.read_more": "Gesamten Beitrag anschauen",
"status.reblog": "Teilen",
"status.reblog_or_quote": "Teilen oder zitieren",
"status.reblog_private": "Mit der ursprünglichen Zielgruppe teilen",
"status.reblogged_by": "{name} teilte",
"status.reblogs": "{count, plural, one {Mal geteilt} other {Mal geteilt}}",

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "Open media",
"keyboard_shortcuts.pinned": "Open pinned posts list",
"keyboard_shortcuts.profile": "Open author's profile",
"keyboard_shortcuts.quote": "Quote post",
"keyboard_shortcuts.reply": "Reply to post",
"keyboard_shortcuts.requests": "Open follow requests list",
"keyboard_shortcuts.search": "Focus search bar",
@ -869,6 +870,7 @@
"status.continued_thread": "Continued thread",
"status.copy": "Copy link to post",
"status.delete": "Delete",
"status.delete.success": "Post deleted",
"status.detailed_status": "Detailed conversation view",
"status.direct": "Privately mention @{name}",
"status.direct_indicator": "Private mention",
@ -907,6 +909,7 @@
"status.quotes.empty": "No one has quoted this post yet. When someone does, it will show up here.",
"status.read_more": "Read more",
"status.reblog": "Boost",
"status.reblog_or_quote": "Boost or quote",
"status.reblog_private": "Boost with original visibility",
"status.reblogged_by": "{name} boosted",
"status.reblogs": "{count, plural, one {boost} other {boosts}}",

View File

@ -606,6 +606,7 @@
"notification.moderation_warning.action_suspend": "Via konto estas malakceptita.",
"notification.own_poll": "Via balotenketo finiĝitis",
"notification.poll": "Balotenketo, en kiu vi voĉdonis, finiĝis",
"notification.quoted_update": "{name} redaktis afiŝon, kiun vi citis",
"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}",
@ -725,12 +726,14 @@
"privacy.private.short": "Sekvantoj",
"privacy.public.long": "Ĉiujn ajn ĉe kaj ekster Mastodon",
"privacy.public.short": "Publika",
"privacy.quote.anyone": "{visibility}, iu ajn povas citi",
"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}",
"privacy_policy.title": "Politiko de privateco",
"quote_error.quote": "Nur unu citaĵo samtempe estas permesita.",
"quote_error.unauthorized": "Vi ne rajtas citi tiun ĉi afiŝon.",
"recommended": "Rekomendita",
"refresh": "Refreŝigu",
"regeneration_indicator.please_stand_by": "Bonvolu atendi.",
@ -847,6 +850,7 @@
"status.continued_thread": "Daŭrigis fadenon",
"status.copy": "Kopii la ligilon al la afiŝo",
"status.delete": "Forigi",
"status.delete.success": "Afiŝo forigita",
"status.detailed_status": "Detala konversacia vido",
"status.direct": "Private mencii @{name}",
"status.direct_indicator": "Privata mencio",
@ -876,10 +880,12 @@
"status.quote_error.pending_approval": "Pritraktata afiŝo",
"status.quote_error.pending_approval_popout.body": "Citaĵoj diskonigitaj tra la Fediverso povas bezoni tempon por montriĝi, ĉar malsamaj serviloj havas malsamajn protokolojn.",
"status.quote_error.pending_approval_popout.title": "Ĉu pritraktata citaĵo? Restu trankvila",
"status.quote_followers_only": "Nur sekvantoj rajtas citi tiun ĉi afiŝon",
"status.quote_policy_change": "Ŝanĝi kiu povas citi",
"status.quote_post_author": "Citis afiŝon de @{name}",
"status.quote_private": "Privataj afiŝoj ne povas esti cititaj",
"status.quotes": "{count, plural,one {citaĵo} other {citaĵoj}}",
"status.quotes.empty": "Neniu citis ĉi tiun afiŝon ankoraŭ. Kiam iu faros tion, ĝi aperos ĉi tie.",
"status.read_more": "Legi pli",
"status.reblog": "Diskonigi",
"status.reblog_private": "Diskonigi kun la sama videbleco",

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "Abrir archivos de medios",
"keyboard_shortcuts.pinned": "Abrir lista de mensajes fijados",
"keyboard_shortcuts.profile": "Abrir perfil del autor",
"keyboard_shortcuts.quote": "Citar mensaje",
"keyboard_shortcuts.reply": "Responder al mensaje",
"keyboard_shortcuts.requests": "Abrir lista de solicitudes de seguimiento",
"keyboard_shortcuts.search": "Enfocar barra de búsqueda",
@ -869,6 +870,7 @@
"status.continued_thread": "Continuación de hilo",
"status.copy": "Copiar enlace al mensaje",
"status.delete": "Eliminar",
"status.delete.success": "Mensaje eliminado",
"status.detailed_status": "Vista de conversación detallada",
"status.direct": "Mención privada a @{name}",
"status.direct_indicator": "Mención privada",
@ -907,6 +909,7 @@
"status.quotes.empty": "Todavía nadie citó este mensaje. Cuando alguien lo haga, se mostrará acá.",
"status.read_more": "Leé más",
"status.reblog": "Adherir",
"status.reblog_or_quote": "Adherir o citar",
"status.reblog_private": "Adherir a la audiencia original",
"status.reblogged_by": "{name} adhirió",
"status.reblogs": "{count, plural, one {adhesión} other {adhesiones}}",

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "Abrir multimedia",
"keyboard_shortcuts.pinned": "Abrir la lista de publicaciones fijadas",
"keyboard_shortcuts.profile": "Abrir perfil del autor",
"keyboard_shortcuts.quote": "Citar publicación",
"keyboard_shortcuts.reply": "Responder a la publicación",
"keyboard_shortcuts.requests": "Abrir lista de solicitudes de seguimiento",
"keyboard_shortcuts.search": "Enfocar la barra de búsqueda",
@ -869,6 +870,7 @@
"status.continued_thread": "Hilo continuado",
"status.copy": "Copiar enlace al estado",
"status.delete": "Borrar",
"status.delete.success": "Publicación eliminada",
"status.detailed_status": "Vista de conversación detallada",
"status.direct": "Mención privada @{name}",
"status.direct_indicator": "Mención privada",
@ -898,12 +900,16 @@
"status.quote_error.pending_approval": "Publicación pendiente",
"status.quote_error.pending_approval_popout.body": "Las citas compartidas en el Fediverso pueden tardar en mostrarse, ya que cada servidor tiene un protocolo diferente.",
"status.quote_error.pending_approval_popout.title": "¿Cita pendiente? Mantén la calma",
"status.quote_followers_only": "Solo los seguidores pueden citar esta publicación",
"status.quote_manual_review": "El autor la revisará manualmente",
"status.quote_policy_change": "Cambia quién puede citarte",
"status.quote_post_author": "Ha citado una publicación de @{name}",
"status.quote_private": "Las publicaciones privadas no pueden citarse",
"status.quotes": "{count, plural,one {cita} other {citas}}",
"status.quotes.empty": "Nadie ha citado esta publicación todavía. Cuando alguien lo haga, aparecerá aquí.",
"status.read_more": "Leer más",
"status.reblog": "Impulsar",
"status.reblog_or_quote": "Impulsar o citar",
"status.reblog_private": "Implusar a la audiencia original",
"status.reblogged_by": "Impulsado por {name}",
"status.reblogs": "{count, plural, one {impulso} other {impulsos}}",
@ -916,6 +922,7 @@
"status.reply": "Responder",
"status.replyAll": "Responder al hilo",
"status.report": "Reportar @{name}",
"status.request_quote": "Solicitud de citación",
"status.revoke_quote": "Eliminar mi publicación de la cita de @{name}",
"status.sensitive_warning": "Contenido sensible",
"status.share": "Compartir",

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "Abrir multimedia",
"keyboard_shortcuts.pinned": "Abrir la lista de publicaciones destacadas",
"keyboard_shortcuts.profile": "Abrir perfil del autor",
"keyboard_shortcuts.quote": "Citar publicación",
"keyboard_shortcuts.reply": "Responder a una publicación",
"keyboard_shortcuts.requests": "Abrir lista de solicitudes de seguimiento",
"keyboard_shortcuts.search": "Focalizar barra de búsqueda",
@ -869,6 +870,7 @@
"status.continued_thread": "Continuó el hilo",
"status.copy": "Copiar enlace a la publicación",
"status.delete": "Borrar",
"status.delete.success": "Publicación eliminada",
"status.detailed_status": "Vista de conversación detallada",
"status.direct": "Mención privada @{name}",
"status.direct_indicator": "Mención privada",
@ -898,12 +900,16 @@
"status.quote_error.pending_approval": "Publicación pendiente",
"status.quote_error.pending_approval_popout.body": "Las citas compartidas a través del Fediverso pueden tardar en mostrarse, ya que los diferentes servidores tienen diferentes protocolos.",
"status.quote_error.pending_approval_popout.title": "¿Cita pendiente? Mantén la calma",
"status.quote_followers_only": "Solo los seguidores pueden citar esta publicación",
"status.quote_manual_review": "El autor revisará manualmente",
"status.quote_policy_change": "Cambia quién puede citarte",
"status.quote_post_author": "Ha citado una publicación de @{name}",
"status.quote_private": "Las publicaciones privadas no pueden ser citadas",
"status.quotes": "{count, plural,one {cita} other {citas}}",
"status.quotes.empty": "Nadie ha citado esta publicación todavía. Cuando alguien lo haga, aparecerá aquí.",
"status.read_more": "Leer más",
"status.reblog": "Impulsar",
"status.reblog_or_quote": "Impulsar o citar",
"status.reblog_private": "Impulsar a la audiencia original",
"status.reblogged_by": "Impulsado por {name}",
"status.reblogs": "{count, plural, one {impulso} other {impulsos}}",
@ -916,6 +922,7 @@
"status.reply": "Responder",
"status.replyAll": "Responder al hilo",
"status.report": "Reportar a @{name}",
"status.request_quote": "Solicitud de citación",
"status.revoke_quote": "Eliminar mi publicación de la cita de {name}",
"status.sensitive_warning": "Contenido sensible",
"status.share": "Compartir",

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "Avaa media",
"keyboard_shortcuts.pinned": "Avaa kiinnitettyjen julkaisujen luettelo",
"keyboard_shortcuts.profile": "Avaa tekijän profiili",
"keyboard_shortcuts.quote": "Lainaa julkaisua",
"keyboard_shortcuts.reply": "Vastaa julkaisuun",
"keyboard_shortcuts.requests": "Avaa seurantapyyntöjen luettelo",
"keyboard_shortcuts.search": "Kohdista hakukenttään",
@ -869,6 +870,7 @@
"status.continued_thread": "Jatkoi ketjua",
"status.copy": "Kopioi linkki julkaisuun",
"status.delete": "Poista",
"status.delete.success": "Julkaisu poistettu",
"status.detailed_status": "Yksityiskohtainen keskustelunäkymä",
"status.direct": "Mainitse @{name} yksityisesti",
"status.direct_indicator": "Yksityismaininta",
@ -898,12 +900,16 @@
"status.quote_error.pending_approval": "Julkaisu odottaa",
"status.quote_error.pending_approval_popout.body": "Saattaa viedä jonkin ainaa ennen kuin fediversumin kautta jaetut julkaisut tulevat näkyviin, sillä eri palvelimet käyttävät eri protokollia.",
"status.quote_error.pending_approval_popout.title": "Odottava lainaus? Pysy rauhallisena",
"status.quote_followers_only": "Vain seuraajat voivat lainata tätä julkaisua",
"status.quote_manual_review": "Tekijä arvioi pyynnön manuaalisesti",
"status.quote_policy_change": "Vaihda, kuka voi lainata",
"status.quote_post_author": "Lainaa käyttäjän @{name} julkaisua",
"status.quote_private": "Yksityisiä julkaisuja ei voi lainata",
"status.quotes": "{count, plural, one {lainaus} other {lainausta}}",
"status.quotes.empty": "Kukaan ei ole vielä lainannut tätä julkaisua. Kun joku tekee niin, se tulee tähän näkyviin.",
"status.read_more": "Näytä enemmän",
"status.reblog": "Tehosta",
"status.reblog_or_quote": "Tehosta tai lainaa",
"status.reblog_private": "Tehosta alkuperäiselle yleisölle",
"status.reblogged_by": "{name} tehosti",
"status.reblogs": "{count, plural, one {tehostus} other {tehostusta}}",
@ -916,6 +922,7 @@
"status.reply": "Vastaa",
"status.replyAll": "Vastaa ketjuun",
"status.report": "Raportoi @{name}",
"status.request_quote": "Pyydä lupaa lainata",
"status.revoke_quote": "Poista julkaisuni käyttäjän @{name} julkaisusta",
"status.sensitive_warning": "Arkaluonteista sisältöä",
"status.share": "Jaa",

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "Lat miðlar upp",
"keyboard_shortcuts.pinned": "Lat lista yvir festar postar upp",
"keyboard_shortcuts.profile": "Lat vangan hjá høvundinum upp",
"keyboard_shortcuts.quote": "Sitera post",
"keyboard_shortcuts.reply": "Svara posti",
"keyboard_shortcuts.requests": "Lat lista við fylgjaraumbønum upp",
"keyboard_shortcuts.search": "Fá leitibjálka í miðdepilin",
@ -898,12 +899,15 @@
"status.quote_error.pending_approval": "Postur bíðar",
"status.quote_error.pending_approval_popout.body": "Sitatir, sum eru deild tvørtur um fediversið, kunnu taka nakað av tíð at vísast, tí ymiskir ambætarar hava ymiskar protokollir.",
"status.quote_error.pending_approval_popout.title": "Bíðar eftir sitati? Tak tað róligt",
"status.quote_followers_only": "Bara fylgjarar kunnu sitera hendan postin",
"status.quote_manual_review": "Høvundurin fer at eftirkanna manuelt",
"status.quote_policy_change": "Broyt hvør kann sitera",
"status.quote_post_author": "Siteraði ein post hjá @{name}",
"status.quote_private": "Privatir postar kunnu ikki siterast",
"status.quotes": "{count, plural, one {sitat} other {sitat}}",
"status.read_more": "Les meira",
"status.reblog": "Stimbra",
"status.reblog_or_quote": "Stimbra ella sitera",
"status.reblog_private": "Stimbra við upprunasýni",
"status.reblogged_by": "{name} stimbrað",
"status.reblogs": "{count, plural, one {stimbran} other {stimbranir}}",
@ -916,6 +920,7 @@
"status.reply": "Svara",
"status.replyAll": "Svara tráðnum",
"status.report": "Melda @{name}",
"status.request_quote": "Fyrispurningur um at sitera",
"status.revoke_quote": "Strika postin hjá mær frá postinum hjá @{name}",
"status.sensitive_warning": "Viðkvæmt tilfar",
"status.share": "Deil",

View File

@ -483,6 +483,7 @@
"keyboard_shortcuts.home": "Oscail amlíne bhaile",
"keyboard_shortcuts.hotkey": "Eochair aicearra",
"keyboard_shortcuts.legend": "Taispeáin an finscéal seo",
"keyboard_shortcuts.load_more": "Dírigh ar an gcnaipe \"Lódáil níos mó\"",
"keyboard_shortcuts.local": "Oscail an amlíne áitiúil",
"keyboard_shortcuts.mention": "Luaigh údar",
"keyboard_shortcuts.muted": "Oscail liosta na n-úsáideoirí balbhaithe",
@ -619,6 +620,7 @@
"notification.moderation_warning.action_suspend": "Cuireadh do chuntas ar fionraí.",
"notification.own_poll": "Tá do suirbhé críochnaithe",
"notification.poll": "Tá deireadh le vótaíocht inar vótáil tú",
"notification.quoted_update": "Chuir {name} post in eagar a luaigh tú",
"notification.reblog": "Mhol {name} do phostáil",
"notification.reblog.name_and_others_with_link": "{name} agus <a>{count, plural, one {# duine eile} other {# daoine eile}}</a> a chuir borradh faoi do phost",
"notification.relationships_severance_event": "Cailleadh naisc le {name}",
@ -738,11 +740,18 @@
"privacy.private.short": "Leantóirí",
"privacy.public.long": "Duine ar bith ar agus amach Mastodon",
"privacy.public.short": "Poiblí",
"privacy.quote.anyone": "{visibility}, is féidir le duine ar bith lua",
"privacy.quote.disabled": "{visibility}, comharthaí athfhriotail díchumasaithe",
"privacy.quote.limited": "{visibility}, luachana teoranta",
"privacy.unlisted.additional": "Iompraíonn sé seo díreach mar a bheadh poiblí, ach amháin ní bheidh an postáil le feiceáil i bhfothaí beo nó i hashtags, in iniúchadh nó i gcuardach Mastodon, fiú má tá tú liostáilte ar fud an chuntais.",
"privacy.unlisted.long": "Níos lú fanfarraí algarthacha",
"privacy.unlisted.short": "Poiblí ciúin",
"privacy_policy.last_updated": "Nuashonraithe {date}",
"privacy_policy.title": "Polasaí príobháideachais",
"quote_error.poll": "Ní cheadaítear lua le pobalbhreitheanna.",
"quote_error.quote": "Ní cheadaítear ach luachan amháin ag an am.",
"quote_error.unauthorized": "Níl údarás agat an post seo a lua.",
"quote_error.upload": "Ní cheadaítear lua a dhéanamh le ceangaltáin sna meáin.",
"recommended": "Molta",
"refresh": "Athnuaigh",
"regeneration_indicator.please_stand_by": "Fan i do sheasamh, le do thoil.",
@ -889,9 +898,13 @@
"status.quote_error.pending_approval": "Post ar feitheamh",
"status.quote_error.pending_approval_popout.body": "Dfhéadfadh sé go dtógfadh sé tamall le Sleachta a roinntear ar fud Fediverse a thaispeáint, toisc go mbíonn prótacail éagsúla ag freastalaithe éagsúla.",
"status.quote_error.pending_approval_popout.title": "Ag fanacht le luachan? Fan socair",
"status.quote_followers_only": "Ní féidir ach le leantóirí an post seo a lua",
"status.quote_manual_review": "Déanfaidh an t-údar athbhreithniú de láimh",
"status.quote_policy_change": "Athraigh cé a fhéadann luachan a thabhairt",
"status.quote_post_author": "Luaigh mé post le @{name}",
"status.quote_private": "Ní féidir poist phríobháideacha a lua",
"status.quotes": "{count, plural, one {sliocht} few {sliocht} other {sliocht}}",
"status.quotes.empty": "Níl an post seo luaite ag aon duine go fóill. Nuair a dhéanann duine é, taispeánfar anseo é.",
"status.read_more": "Léan a thuilleadh",
"status.reblog": "Treisiú",
"status.reblog_private": "Mol le léargas bunúsach",
@ -906,6 +919,7 @@
"status.reply": "Freagair",
"status.replyAll": "Freagair le snáithe",
"status.report": "Tuairiscigh @{name}",
"status.request_quote": "Iarratas ar luachan",
"status.revoke_quote": "Bain mo phost ó phost @{name}",
"status.sensitive_warning": "Ábhar íogair",
"status.share": "Comhroinn",
@ -944,6 +958,7 @@
"upload_button.label": "Cuir íomhánna, físeán nó comhad fuaime leis",
"upload_error.limit": "Sáraíodh an teorainn uaslódála comhaid.",
"upload_error.poll": "Ní cheadaítear uaslódáil comhad le pobalbhreith.",
"upload_error.quote": "Ní cheadaítear uaslódáil comhaid le comharthaí athfhriotail.",
"upload_form.drag_and_drop.instructions": "Chun ceangaltán meán a phiocadh suas, brúigh spás nó cuir isteach. Agus tú ag tarraingt, bain úsáid as na heochracha saigheada chun an ceangaltán meán a bhogadh i dtreo ar bith. Brúigh spás nó cuir isteach arís chun an ceangaltán meán a scaoileadh ina phost nua, nó brúigh éalú chun cealú.",
"upload_form.drag_and_drop.on_drag_cancel": "Cuireadh an tarraingt ar ceal. Scaoileadh ceangaltán meán {item}.",
"upload_form.drag_and_drop.on_drag_end": "Scaoileadh ceangaltán meán {item}.",
@ -969,11 +984,15 @@
"video.volume_up": "Toirt suas",
"visibility_modal.button_title": "Socraigh infheictheacht",
"visibility_modal.header": "Infheictheacht agus idirghníomhaíocht",
"visibility_modal.helper.direct_quoting": "Ní féidir le daoine eile tráchtanna príobháideacha a scríobhadh ar Mastodon a lua.",
"visibility_modal.helper.privacy_editing": "Ní féidir infheictheacht postálacha foilsithe a athrú.",
"visibility_modal.helper.private_quoting": "Ní féidir le daoine eile poist atá scríofa ar Mastodon agus atá dírithe ar leanúna amháin a lua.",
"visibility_modal.helper.unlisted_quoting": "Nuair a luann daoine thú, beidh a bpost i bhfolach ó amlínte treochta freisin.",
"visibility_modal.instructions": "Rialú cé a fhéadfaidh idirghníomhú leis an bpost seo. Is féidir socruithe domhanda a fháil faoi <link>Sainroghanna > Eile</link>.",
"visibility_modal.privacy_label": "Príobháideacht",
"visibility_modal.quote_followers": "Leantóirí amháin",
"visibility_modal.quote_label": "Athraigh cé a fhéadann luachan a thabhairt",
"visibility_modal.quote_public": "Aon duine"
"visibility_modal.quote_nobody": "Mise amháin",
"visibility_modal.quote_public": "Aon duine",
"visibility_modal.save": "Sábháil"
}

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "Para abrir o contido multimedia",
"keyboard_shortcuts.pinned": "Para abrir a listaxe das publicacións fixadas",
"keyboard_shortcuts.profile": "Para abrir o perfil da autora",
"keyboard_shortcuts.quote": "Citar publicación",
"keyboard_shortcuts.reply": "Para responder",
"keyboard_shortcuts.requests": "Para abrir a listaxe das peticións de seguimento",
"keyboard_shortcuts.search": "Por cursor na caixa de busca",
@ -869,6 +870,7 @@
"status.continued_thread": "Continua co fío",
"status.copy": "Copiar ligazón á publicación",
"status.delete": "Eliminar",
"status.delete.success": "Publicación eliminada",
"status.detailed_status": "Vista detallada da conversa",
"status.direct": "Mencionar de xeito privado a @{name}",
"status.direct_indicator": "Mención privada",
@ -898,12 +900,16 @@
"status.quote_error.pending_approval": "Publicación pendente",
"status.quote_error.pending_approval_popout.body": "As citas compartidas no Fediverso poderían tardar en mostrarse, xa que os diferentes servidores teñen diferentes protocolos.",
"status.quote_error.pending_approval_popout.title": "Cita pendente? Non te apures",
"status.quote_followers_only": "Só as seguidoras poden citar esta publicación",
"status.quote_manual_review": "A autora revisará manualmente",
"status.quote_policy_change": "Cambia quen pode citarte",
"status.quote_post_author": "Citou unha publicación de @{name}",
"status.quote_private": "As publicacións privadas non se poden citar",
"status.quotes": "{count, plural, one {cita} other {citas}}",
"status.quotes.empty": "Aínda ninguén citou esta publicación. Cando alguén o faga aparecerá aquí.",
"status.read_more": "Ler máis",
"status.reblog": "Promover",
"status.reblog_or_quote": "Promover ou citar",
"status.reblog_private": "Compartir coa audiencia orixinal",
"status.reblogged_by": "{name} promoveu",
"status.reblogs": "{count, plural, one {promoción} other {promocións}}",
@ -916,6 +922,7 @@
"status.reply": "Responder",
"status.replyAll": "Responder ao tema",
"status.report": "Denunciar @{name}",
"status.request_quote": "Solicitar a citación",
"status.revoke_quote": "Retirar a miña publicación da cita de @{name}",
"status.sensitive_warning": "Contido sensíbel",
"status.share": "Compartir",

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "פתיחת מדיה",
"keyboard_shortcuts.pinned": "פתיחת הודעה נעוצות",
"keyboard_shortcuts.profile": "פתח את פרופיל המשתמש",
"keyboard_shortcuts.quote": "לצטט ההודעה",
"keyboard_shortcuts.reply": "תגובה להודעה",
"keyboard_shortcuts.requests": "פתיחת רשימת בקשות מעקב",
"keyboard_shortcuts.search": "להתמקד בחלון החיפוש",
@ -907,6 +908,7 @@
"status.quotes.empty": "עוד לא ציטטו את ההודעה הזו. כאשר זה יקרה, הציטוטים יופיעו כאן.",
"status.read_more": "לקרוא עוד",
"status.reblog": "הדהוד",
"status.reblog_or_quote": "להדהד או לצטט",
"status.reblog_private": "להדהד ברמת הנראות המקורית",
"status.reblogged_by": "{name} הידהד/ה:",
"status.reblogs": "{count, plural, one {הדהוד אחד} two {שני הדהודים} other {# הדהודים}}",

View File

@ -483,6 +483,7 @@
"keyboard_shortcuts.home": "Saját idővonal megnyitása",
"keyboard_shortcuts.hotkey": "Gyorsbillentyű",
"keyboard_shortcuts.legend": "Jelmagyarázat megjelenítése",
"keyboard_shortcuts.load_more": "Fókuszálás a „Több betöltése” gombra",
"keyboard_shortcuts.local": "Helyi idővonal megnyitása",
"keyboard_shortcuts.mention": "Szerző megemlítése",
"keyboard_shortcuts.muted": "Némított felhasználók listájának megnyitása",
@ -619,6 +620,7 @@
"notification.moderation_warning.action_suspend": "A fiókod felfüggesztésre került.",
"notification.own_poll": "A szavazásod véget ért",
"notification.poll": "Véget ért egy szavazás, melyben részt vettél",
"notification.quoted_update": "{name} szerkesztett egy bejegyzést, melyet idéztél",
"notification.reblog": "{name} megtolta a bejegyzésedet",
"notification.reblog.name_and_others_with_link": "{name} és <a>{count, plural, one {# másik} other {# másik}}</a> megtolta a bejegyzésedet",
"notification.relationships_severance_event": "Elvesztek a kapcsolatok vele: {name}",
@ -856,9 +858,11 @@
"status.admin_account": "Moderációs felület megnyitása @{name} fiókhoz",
"status.admin_domain": "Moderációs felület megnyitása {domain} esetében",
"status.admin_status": "Bejegyzés megnyitása a moderációs felületen",
"status.all_disabled": "A megtolások és idézések tiltva vannak",
"status.block": "@{name} letiltása",
"status.bookmark": "Könyvjelzőzés",
"status.cancel_reblog_private": "Megtolás visszavonása",
"status.cannot_quote": "A szerző letiltotta az idézést ennél a bejegyzésnél",
"status.cannot_reblog": "Ezt a bejegyzést nem lehet megtolni",
"status.context.load_new_replies": "Új válaszok érhetőek el",
"status.context.loading": "További válaszok keresése",
@ -887,13 +891,20 @@
"status.mute_conversation": "Beszélgetés némítása",
"status.open": "Bejegyzés kibontása",
"status.pin": "Kitűzés a profilodra",
"status.quote": "Idézés",
"status.quote.cancel": "Idézés elvetése",
"status.quote_error.filtered": "A szűrőid miatt rejtett",
"status.quote_error.not_available": "A bejegyzés nem érhető el",
"status.quote_error.pending_approval": "A bejegyzés függőben van",
"status.quote_error.pending_approval_popout.body": "A Födiverzumon keresztül megosztott idézetek megjelenítése eltarthat egy darabig, mivel a különböző kiszolgálók különböző protokollokat használnak.",
"status.quote_error.pending_approval_popout.title": "Függőben lévő idézet? Maradj nyugodt.",
"status.quote_followers_only": "Csak a követők idézhetik ezt a bejegyzést",
"status.quote_manual_review": "A szerző kézileg fogja jóváhagyni",
"status.quote_policy_change": "Módosítás, hogy kik idézhetnek",
"status.quote_post_author": "Idézte @{name} bejegyzését",
"status.quote_private": "A privát bejegyzések nem idézhetőek",
"status.quotes": "{count, plural, one {idézés} other {idézés}}",
"status.quotes.empty": "Senki sem idézte még ezt a bejegyzést. Ha valaki megteszi, itt fog megjelenni.",
"status.read_more": "Bővebben",
"status.reblog": "Megtolás",
"status.reblog_private": "Megtolás az eredeti közönségnek",
@ -908,6 +919,7 @@
"status.reply": "Válasz",
"status.replyAll": "Válasz a beszélgetésre",
"status.report": "@{name} bejelentése",
"status.request_quote": "Idézés kérése",
"status.revoke_quote": "Saját bejegyzés eltávolítása @{name} bejegyzéséből",
"status.sensitive_warning": "Kényes tartalom",
"status.share": "Megosztás",
@ -972,11 +984,15 @@
"video.volume_up": "Hangerő fel",
"visibility_modal.button_title": "Láthatóság beállítása",
"visibility_modal.header": "Láthatóság és interakció",
"visibility_modal.helper.direct_quoting": "A Mastodonon készült privát említéseket mások nem idézhetik.",
"visibility_modal.helper.privacy_editing": "A közzétett bejegyzések láthatósága nem módosítható.",
"visibility_modal.helper.private_quoting": "A Mastodonon írt, csak követőknek szóló bejegyzéseket mások nem idézhetik.",
"visibility_modal.helper.unlisted_quoting": "Amikor idéznek tőled, a bejegyzésük rejtve lesz a felkapott bejegyzések hírfolyamain is.",
"visibility_modal.instructions": "Döntsd el, hogy ki léphet interakcióba a bejegyzéssel. A globális beállítások a <link>Beállítások > Egyéb</link> alatt találhatóak.",
"visibility_modal.privacy_label": "Adatvédelem",
"visibility_modal.quote_followers": "Csak követőknek",
"visibility_modal.quote_label": "Módosítás, hogy kik idézhetnek",
"visibility_modal.quote_public": "Bárki"
"visibility_modal.quote_nobody": "Csak én",
"visibility_modal.quote_public": "Bárki",
"visibility_modal.save": "Mentés"
}

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "Opna margmiðlunargögn",
"keyboard_shortcuts.pinned": "Opna lista yfir festar færslur",
"keyboard_shortcuts.profile": "Opna notandasnið höfundar",
"keyboard_shortcuts.quote": "Vitna í færslu",
"keyboard_shortcuts.reply": "Svara færslu",
"keyboard_shortcuts.requests": "Opna lista yfir fylgjendabeiðnir",
"keyboard_shortcuts.search": "Setja virkni í leitarreit",
@ -869,6 +870,7 @@
"status.continued_thread": "Hélt samtali áfram",
"status.copy": "Afrita tengil í færslu",
"status.delete": "Eyða",
"status.delete.success": "Færslu eytt",
"status.detailed_status": "Nákvæm spjallþráðasýn",
"status.direct": "Einkaspjall við @{name}",
"status.direct_indicator": "Einkaspjall",
@ -907,6 +909,7 @@
"status.quotes.empty": "Enginn hefur ennþá vitnað í þessa færslu. Þegar einhver gerir það, mun það birtast hér.",
"status.read_more": "Lesa meira",
"status.reblog": "Endurbirting",
"status.reblog_or_quote": "Endurbirta eða vitna í færslu",
"status.reblog_private": "Endurbirta til upphaflegra lesenda",
"status.reblogged_by": "{name} endurbirti",
"status.reblogs": "{count, plural, one {endurbirting} other {endurbirtingar}}",

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "Media openen",
"keyboard_shortcuts.pinned": "Jouw vastgemaakte berichten tonen",
"keyboard_shortcuts.profile": "Gebruikersprofiel auteur openen",
"keyboard_shortcuts.quote": "Bericht citeren",
"keyboard_shortcuts.reply": "Reageren",
"keyboard_shortcuts.requests": "Jouw volgverzoeken tonen",
"keyboard_shortcuts.search": "Zoekveld focussen",
@ -898,12 +899,16 @@
"status.quote_error.pending_approval": "Bericht in afwachting",
"status.quote_error.pending_approval_popout.body": "Het kan even duren voordat citaten die in de Fediverse gedeeld worden, worden weergegeven. Omdat verschillende servers niet allemaal hetzelfde protocol gebruiken.",
"status.quote_error.pending_approval_popout.title": "Even geduld wanneer het citaat nog moet worden goedgekeurd.",
"status.quote_followers_only": "Alleen volgers mogen dit bericht citeren",
"status.quote_manual_review": "De auteur gaat het handmatig beoordelen",
"status.quote_policy_change": "Wijzig wie jou mag citeren",
"status.quote_post_author": "Citeerde een bericht van @{name}",
"status.quote_private": "Citeren van berichten aan alleen volgers is niet mogelijk",
"status.quotes": "{count, plural, one {citaat} other {citaten}}",
"status.quotes.empty": "Niemand heeft dit bericht nog geciteerd. Wanneer iemand dat doet, wordt dat hier getoond.",
"status.read_more": "Meer lezen",
"status.reblog": "Boosten",
"status.reblog_or_quote": "Boosten of citeren",
"status.reblog_private": "Boost naar oorspronkelijke ontvangers",
"status.reblogged_by": "{name} boostte",
"status.reblogs": "{count, plural, one {boost} other {boosts}}",
@ -916,6 +921,7 @@
"status.reply": "Reageren",
"status.replyAll": "Op iedereen reageren",
"status.report": "@{name} rapporteren",
"status.request_quote": "Verzoek om te citeren",
"status.revoke_quote": "Mijn bericht uit het bericht van @{name} verwijderen",
"status.sensitive_warning": "Gevoelige inhoud",
"status.share": "Delen",

View File

@ -898,10 +898,13 @@
"status.quote_error.pending_approval": "Gönderi beklemede",
"status.quote_error.pending_approval_popout.body": "Fediverse genelinde paylaşılan alıntıların görüntülenmesi zaman alabilir, çünkü farklı sunucuların farklı protokolleri vardır.",
"status.quote_error.pending_approval_popout.title": "Bekleyen bir teklif mi var? Sakin olun.",
"status.quote_followers_only": "Sadece takipçiler bu gönderiyi alıntılayabilir",
"status.quote_manual_review": "Yazar manuel olarak gözden geçirecek",
"status.quote_policy_change": "Kimin alıntı yapabileceğini değiştirin",
"status.quote_post_author": "@{name} adlı kullanıcının bir gönderisini alıntıladı",
"status.quote_private": "Özel gönderiler alıntılanamaz",
"status.quotes": "{count, plural, one {# alıntı} other {# alıntı}}",
"status.quotes.empty": "Henüz hiç kimse bu gönderiyi alıntılamadı. Herhangi bir kullanıcı alıntıladığında burada görüntülenecek.",
"status.read_more": "Devamını okuyun",
"status.reblog": "Yeniden paylaş",
"status.reblog_private": "Özgün görünürlük ile yeniden paylaş",
@ -916,6 +919,7 @@
"status.reply": "Yanıtla",
"status.replyAll": "Konuyu yanıtla",
"status.report": "@{name} adlı kişiyi bildir",
"status.request_quote": "Alıntılamayı iste",
"status.revoke_quote": "@{name}'nin gönderisinden benim gönderimi kaldır",
"status.sensitive_warning": "Hassas içerik",
"status.share": "Paylaş",

View File

@ -462,6 +462,7 @@
"keyboard_shortcuts.open_media": "Відкрити медіа",
"keyboard_shortcuts.pinned": "Відкрити список закріплених дописів",
"keyboard_shortcuts.profile": "Відкрити профіль автора",
"keyboard_shortcuts.quote": "Цитувати пост",
"keyboard_shortcuts.reply": "Відповісти",
"keyboard_shortcuts.requests": "Відкрити список охочих підписатися",
"keyboard_shortcuts.search": "Сфокусуватися на пошуку",

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "mở ảnh hoặc video",
"keyboard_shortcuts.pinned": "mở những tút đã ghim",
"keyboard_shortcuts.profile": "mở trang của người đăng tút",
"keyboard_shortcuts.quote": "Trích dẫn tút",
"keyboard_shortcuts.reply": "trả lời",
"keyboard_shortcuts.requests": "mở danh sách yêu cầu theo dõi",
"keyboard_shortcuts.search": "mở tìm kiếm",
@ -869,6 +870,7 @@
"status.continued_thread": "Tiếp tục chủ đề",
"status.copy": "Sao chép URL",
"status.delete": "Xóa",
"status.delete.success": "Tút đã bị xoá",
"status.detailed_status": "Xem chi tiết thêm",
"status.direct": "Nhắn riêng @{name}",
"status.direct_indicator": "Nhắn riêng",
@ -907,6 +909,7 @@
"status.quotes.empty": "Tút này chưa có ai trích dẫn. Nếu có, nó sẽ hiển thị ở đây.",
"status.read_more": "Đọc tiếp",
"status.reblog": "Đăng lại",
"status.reblog_or_quote": "Đăng lại hoặc trích dẫn",
"status.reblog_private": "Đăng lại (Riêng tư)",
"status.reblogged_by": "{name} đăng lại",
"status.reblogs": "{count, plural, other {đăng lại}}",

View File

@ -30,6 +30,7 @@
"account.edit_profile": "修改个人资料",
"account.enable_notifications": "当 @{name} 发布嘟文时通知我",
"account.endorse": "在个人资料中推荐此用户",
"account.familiar_followers_many": "被 {name1}、{name2}、及 {othersCount, plural, other {其他你认识的 # 人}} 关注",
"account.familiar_followers_one": "{name1} 关注了此账号",
"account.familiar_followers_two": "{name1} 和 {name2} 关注了此账号",
"account.featured": "精选",
@ -220,7 +221,11 @@
"confirmations.delete_list.title": "确定要删除列表?",
"confirmations.discard_draft.confirm": "放弃并继续",
"confirmations.discard_draft.edit.cancel": "恢复编辑",
"confirmations.discard_draft.edit.message": "继续将丢弃您对您正在编辑的嘟文所作的任何更改。",
"confirmations.discard_draft.edit.title": "是否丢弃您对嘟文的更改?",
"confirmations.discard_draft.post.cancel": "恢复草稿",
"confirmations.discard_draft.post.message": "继续将丢弃您正在编辑的嘟文。",
"confirmations.discard_draft.post.title": "丢弃您的嘟文草稿?",
"confirmations.discard_edit_media.confirm": "丢弃",
"confirmations.discard_edit_media.message": "你还有未保存的媒体描述或预览修改,仍要丢弃吗?",
"confirmations.follow_to_list.confirm": "关注并添加到列表",
@ -287,6 +292,7 @@
"domain_pill.your_handle": "你的用户名:",
"domain_pill.your_server": "你的数字家园,你的所有嘟文都在此存储。不喜欢这里吗?你可以随时迁移到其它服务器,并带上你的关注者。",
"domain_pill.your_username": "你在此服务器上的唯一标识。不同服务器上可能存在相同用户名的用户。",
"dropdown.empty": "选项",
"embed.instructions": "复制下列代码以在你的网站中嵌入此嘟文。",
"embed.preview": "这是它的预览效果:",
"emoji_button.activity": "活动",
@ -339,6 +345,7 @@
"explore.trending_links": "新闻",
"explore.trending_statuses": "嘟文",
"explore.trending_tags": "话题",
"featured_carousel.header": "{count, plural, other {# 条置顶嘟文}}",
"featured_carousel.next": "下一步",
"featured_carousel.post": "发嘟",
"featured_carousel.previous": "上一步",
@ -396,6 +403,7 @@
"getting_started.heading": "开始使用",
"hashtag.admin_moderation": "打开 #{name} 的管理界面",
"hashtag.browse": "浏览#{hashtag}中的贴子",
"hashtag.browse_from_account": "浏览#{hashtag}中来自@{name}的贴子",
"hashtag.column_header.tag_mode.all": "以及 {additional}",
"hashtag.column_header.tag_mode.any": "或是 {additional}",
"hashtag.column_header.tag_mode.none": "而不用 {additional}",
@ -475,6 +483,7 @@
"keyboard_shortcuts.home": "打开主页时间线",
"keyboard_shortcuts.hotkey": "快捷键",
"keyboard_shortcuts.legend": "显示此列表",
"keyboard_shortcuts.load_more": "将焦点移至“加载更多”按钮",
"keyboard_shortcuts.local": "打开本站时间线",
"keyboard_shortcuts.mention": "提及嘟文作者",
"keyboard_shortcuts.muted": "打开隐藏用户列表",
@ -483,6 +492,7 @@
"keyboard_shortcuts.open_media": "打开媒体",
"keyboard_shortcuts.pinned": "打开置顶嘟文列表",
"keyboard_shortcuts.profile": "打开作者的个人资料",
"keyboard_shortcuts.quote": "引用嘟文",
"keyboard_shortcuts.reply": "回复嘟文",
"keyboard_shortcuts.requests": "打开关注请求列表",
"keyboard_shortcuts.search": "选中搜索框",
@ -560,6 +570,8 @@
"navigation_bar.follows_and_followers": "关注与关注者",
"navigation_bar.import_export": "导入与导出",
"navigation_bar.lists": "列表",
"navigation_bar.live_feed_local": "实时动态(本站)",
"navigation_bar.live_feed_public": "实时动态(公开)",
"navigation_bar.logout": "退出登录",
"navigation_bar.moderation": "审核",
"navigation_bar.more": "更多",
@ -569,7 +581,9 @@
"navigation_bar.privacy_and_reach": "隐私与可达性",
"navigation_bar.search": "搜索",
"navigation_bar.search_trends": "搜索/热门趋势",
"navigation_panel.collapse_followed_tags": "收起已关注话题菜单",
"navigation_panel.collapse_lists": "收起菜单列表",
"navigation_panel.expand_followed_tags": "展开已关注话题菜单",
"navigation_panel.expand_lists": "展开菜单列表",
"not_signed_in_indicator.not_signed_in": "你需要登录才能访问此资源。",
"notification.admin.report": "{name} 举报了 {target}",
@ -592,6 +606,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} 提到了你",
@ -606,6 +621,7 @@
"notification.moderation_warning.action_suspend": "你的账号已被封禁。",
"notification.own_poll": "你的投票已经结束",
"notification.poll": "你参与的一项投票已结束",
"notification.quoted_update": "{name} 编辑了一条你之前引用过的嘟文",
"notification.reblog": "{name} 转发了你的嘟文",
"notification.reblog.name_and_others_with_link": "{name} 和 <a>{count, plural, other {另外 # 人}}</a> 转嘟了你的嘟文",
"notification.relationships_severance_event": "与 {name} 的联系已断开",
@ -649,6 +665,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": "播放音效",
@ -724,11 +741,18 @@
"privacy.private.short": "关注者",
"privacy.public.long": "所有 Mastodon 内外的人",
"privacy.public.short": "公开",
"privacy.quote.anyone": "{visibility},任何人都能引用",
"privacy.quote.disabled": "{visibility},禁用嘟文引用",
"privacy.quote.limited": "{visibility},嘟文引用受限",
"privacy.unlisted.additional": "此模式的行为与“公开”类似,只是嘟文不会出现在实时动态、话题、探索或 Mastodon 搜索页面中,即使您已全局开启了对应的发现设置。",
"privacy.unlisted.long": "减少算法影响",
"privacy.unlisted.short": "悄悄公开",
"privacy_policy.last_updated": "最近更新于 {date}",
"privacy_policy.title": "隐私政策",
"quote_error.poll": "不允许引用投票嘟文。",
"quote_error.quote": "一次只能引用一条嘟文。",
"quote_error.unauthorized": "你没有权限引用此嘟文。",
"quote_error.upload": "不允许引用有媒体附件的嘟文。",
"recommended": "推荐",
"refresh": "刷新",
"regeneration_indicator.please_stand_by": "请稍候。",
@ -835,15 +859,18 @@
"status.admin_account": "打开 @{name} 的管理界面",
"status.admin_domain": "打开 {domain} 的管理界面",
"status.admin_status": "在管理界面查看此嘟文",
"status.all_disabled": "已禁用转嘟与引用",
"status.block": "屏蔽 @{name}",
"status.bookmark": "添加到书签",
"status.cancel_reblog_private": "取消转嘟",
"status.cannot_quote": "作者已禁用此嘟文的引用功能",
"status.cannot_reblog": "不能转嘟这条嘟文",
"status.context.load_new_replies": "有新回复",
"status.context.loading": "正在检查更多回复",
"status.continued_thread": "上接嘟文串",
"status.copy": "复制嘟文链接",
"status.delete": "删除",
"status.delete.success": "嘟文已删除",
"status.detailed_status": "对话详情",
"status.direct": "私下提及 @{name}",
"status.direct_indicator": "私下提及",
@ -866,10 +893,23 @@
"status.mute_conversation": "关闭此对话的通知",
"status.open": "展开嘟文",
"status.pin": "在个人资料页面置顶",
"status.quote": "引用",
"status.quote.cancel": "取消引用",
"status.quote_error.filtered": "已根据你的筛选器过滤",
"status.quote_error.not_available": "嘟文不可用",
"status.quote_error.pending_approval": "嘟文待发布",
"status.quote_error.pending_approval_popout.body": "由于不同服务器间使用的协议不同,联邦宇宙间引用嘟文的显示可能会有延迟。",
"status.quote_error.pending_approval_popout.title": "引用嘟文还没发布?别着急,请耐心等待",
"status.quote_followers_only": "只有关注者才能引用这篇嘟文",
"status.quote_manual_review": "嘟文作者将人工审核",
"status.quote_policy_change": "更改谁可以引用",
"status.quote_post_author": "引用了 @{name} 的嘟文",
"status.quote_private": "不能引用私人嘟文",
"status.quotes": "{count, plural, other {引用嘟文}}",
"status.quotes.empty": "还没有人引用过此条嘟文。引用此嘟文的人会显示在这里。",
"status.read_more": "查看更多",
"status.reblog": "转嘟",
"status.reblog_or_quote": "转嘟或引用",
"status.reblog_private": "以相同可见性转嘟",
"status.reblogged_by": "{name} 转嘟了",
"status.reblogs": "{count, plural, other {次转嘟}}",
@ -882,6 +922,8 @@
"status.reply": "回复",
"status.replyAll": "回复此嘟文串",
"status.report": "举报 @{name}",
"status.request_quote": "请求引用",
"status.revoke_quote": "将我的嘟文从 @{name} 的嘟文中删除",
"status.sensitive_warning": "敏感内容",
"status.share": "分享",
"status.show_less_all": "全部折叠",
@ -919,6 +961,7 @@
"upload_button.label": "上传图片、视频或音频",
"upload_error.limit": "文件大小超过限制。",
"upload_error.poll": "投票中不允许上传文件。",
"upload_error.quote": "引用中不允许上传文件。",
"upload_form.drag_and_drop.instructions": "要选中某个媒体附件,请按空格键或回车键。在拖拽时,使用方向键将媒体附件移动到任何给定方向。再次按空格键或回车键可将媒体附件放置在新位置,或按 Esc 键取消。",
"upload_form.drag_and_drop.on_drag_cancel": "拖拽已终止。媒体附件 {item} 已被丢弃。",
"upload_form.drag_and_drop.on_drag_end": "媒体附件 {item} 已被丢弃。",
@ -943,8 +986,16 @@
"video.volume_down": "音量减小",
"video.volume_up": "提高音量",
"visibility_modal.button_title": "设置可见性",
"visibility_modal.header": "可见性和互动",
"visibility_modal.helper.direct_quoting": "Mastodon上发布的私下提及无法被他人引用。",
"visibility_modal.helper.privacy_editing": "已发布的嘟文无法改变可见性。",
"visibility_modal.helper.private_quoting": "Mastodon上发布的仅限关注者可见的嘟文无法被他人引用。",
"visibility_modal.helper.unlisted_quoting": "当其他人引用你时,他们的嘟文也会从热门时间线上隐藏。",
"visibility_modal.instructions": "控制谁可以和此嘟文互动。可以在<link>偏好设置 > 其他</link>下找到全局设置。",
"visibility_modal.privacy_label": "隐私",
"visibility_modal.quote_followers": "仅关注者",
"visibility_modal.quote_label": "更改谁可以引用",
"visibility_modal.quote_nobody": "仅限自己",
"visibility_modal.quote_public": "任何人",
"visibility_modal.save": "保存"
}

View File

@ -492,6 +492,7 @@
"keyboard_shortcuts.open_media": "開啟媒體",
"keyboard_shortcuts.pinned": "開啟釘選的嘟文列表",
"keyboard_shortcuts.profile": "開啟作者的個人檔案頁面",
"keyboard_shortcuts.quote": "引用嘟文",
"keyboard_shortcuts.reply": "回應嘟文",
"keyboard_shortcuts.requests": "開啟跟隨請求列表",
"keyboard_shortcuts.search": "將游標移至搜尋框",
@ -869,6 +870,7 @@
"status.continued_thread": "接續討論串",
"status.copy": "複製嘟文連結",
"status.delete": "刪除",
"status.delete.success": "已刪除嘟文",
"status.detailed_status": "詳細的對話內容",
"status.direct": "私訊 @{name}",
"status.direct_indicator": "私訊",
@ -904,9 +906,10 @@
"status.quote_post_author": "已引用 @{name} 之嘟文",
"status.quote_private": "無法引用私人嘟文",
"status.quotes": "{count, plural, other {# 則引用嘟文}}",
"status.quotes.empty": "目前尚無人引用此嘟文。當有人引用時,它將會顯示於此處。",
"status.quotes.empty": "目前尚無人引用此嘟文。當有人引用時,它將於此顯示。",
"status.read_more": "閱讀更多",
"status.reblog": "轉嘟",
"status.reblog_or_quote": "轉嘟或引用",
"status.reblog_private": "依照原嘟可見性轉嘟",
"status.reblogged_by": "{name} 已轉嘟",
"status.reblogs": "{count, plural, other {則轉嘟}}",

View File

@ -152,8 +152,8 @@ class ActivityPub::Parser::StatusParser
# Remove the special-meaning actor URI
allowed_actors.delete(@options[:actor_uri])
# Any unrecognized actor is marked as unknown
flags |= Status::QUOTE_APPROVAL_POLICY_FLAGS[:unknown] unless allowed_actors.empty?
# Any unrecognized actor is marked as unsupported
flags |= Status::QUOTE_APPROVAL_POLICY_FLAGS[:unsupported_policy] unless allowed_actors.empty?
flags
end

View File

@ -4,7 +4,7 @@ module Status::InteractionPolicyConcern
extend ActiveSupport::Concern
QUOTE_APPROVAL_POLICY_FLAGS = {
unknown: (1 << 0),
unsupported_policy: (1 << 0),
public: (1 << 1),
followers: (1 << 2),
followed: (1 << 3),
@ -52,7 +52,7 @@ module Status::InteractionPolicyConcern
return :manual if following_author
end
return :unknown if (automatic_policy | manual_policy).anybits?(QUOTE_APPROVAL_POLICY_FLAGS[:unknown])
return :unknown if (automatic_policy | manual_policy).anybits?(QUOTE_APPROVAL_POLICY_FLAGS[:unsupported_policy])
:denied
end

View File

@ -19,6 +19,7 @@ class REST::CredentialAccountSerializer < REST::AccountSerializer
discoverable: object.discoverable,
indexable: object.indexable,
attribution_domains: object.attribution_domains,
quote_policy: user.setting_default_quote_policy,
}
end

View File

@ -4,6 +4,7 @@ class REST::PreferencesSerializer < ActiveModel::Serializer
attribute :posting_default_privacy, key: 'posting:default:visibility'
attribute :posting_default_sensitive, key: 'posting:default:sensitive'
attribute :posting_default_language, key: 'posting:default:language'
attribute :posting_default_quote_policy, key: 'posting:default:quote_policy'
attribute :reading_default_sensitive_media, key: 'reading:expand:media'
attribute :reading_default_sensitive_text, key: 'reading:expand:spoilers'
@ -13,6 +14,10 @@ class REST::PreferencesSerializer < ActiveModel::Serializer
object.user.setting_default_privacy
end
def posting_default_quote_policy
object.user.setting_default_quote_policy
end
def posting_default_sensitive
object.user.setting_default_sensitive
end

View File

@ -0,0 +1,6 @@
-# locals(count:, link:)
- if count.zero?
= t('generic.none')
- else
= table_link_to 'download', t('severed_relationships.download', count:), link

View File

@ -0,0 +1,14 @@
-# locals(event:)
%tr
%td
%time.formatted{ datetime: event.created_at.iso8601, title: l(event.created_at) }
= l(event.created_at)
%td= t("severed_relationships.event_type.#{event.type}", target_name: event.target_name)
- if event.purged?
%td{ rowspan: 2 }= t('severed_relationships.purged')
- else
%td
= render 'download', count: event.following_count, link: following_severed_relationship_path(event, format: :csv)
%td
= render 'download', count: event.followers_count, link: followers_severed_relationship_path(event, format: :csv)

View File

@ -13,24 +13,4 @@
%th= t('severed_relationships.lost_follows')
%th= t('severed_relationships.lost_followers')
%tbody
- @events.each do |event|
%tr
%td
%time.formatted{ datetime: event.created_at.iso8601, title: l(event.created_at) }
= l(event.created_at)
%td= t("severed_relationships.event_type.#{event.type}", target_name: event.target_name)
- if event.purged?
%td{ rowspan: 2 }= t('severed_relationships.purged')
- else
%td
- count = event.following_count
- if count.zero?
= t('generic.none')
- else
= table_link_to 'download', t('severed_relationships.download', count: count), following_severed_relationship_path(event, format: :csv)
%td
- count = event.followers_count
- if count.zero?
= t('generic.none')
- else
= table_link_to 'download', t('severed_relationships.download', count: count), followers_severed_relationship_path(event, format: :csv)
= render partial: 'event', collection: @events

View File

@ -376,6 +376,7 @@ ga:
title: Emojis saincheaptha
uncategorized: Neamhchatagóirithe
unlist: Neamhliostaigh
unlisted: Pobal ciúin
update_failed_msg: Níorbh fhéidir an emoji sin a nuashonrú
updated_msg: D'éirigh le Emoji a nuashonrú!
upload: Uaslódáil
@ -2036,12 +2037,19 @@ ga:
limit: Tá uaslíon na bpostálacha pinn agat cheana féin
ownership: Ní féidir postáil duine éigin eile a phionnáil
reblog: Ní féidir treisiú a phinnáil
quote_policies:
followers: Leantóirí amháin
nobody: Mise amháin
public: Aon duine
title: '%{name}: "%{quote}"'
visibilities:
direct: Lua príobháideach
private: Leantóirí amháin
private_long: Taispeáin do leantóirí amháin
public: Poiblí
public_long: Aon duine ar Mastodon agus lasmuigh de
unlisted: Neamhliostaithe
unlisted_long: I bhfolach ó thorthaí cuardaigh Mastodon, treochtaí, agus amlínte poiblí
statuses_cleanup:
enabled: Scrios seanphostálacha go huathoibríoch
enabled_hint: Scriostar do phostálacha go huathoibríoch nuair a shroicheann siad tairseach aoise sonraithe, ach amháin má thagann siad le ceann de na heisceachtaí thíos

View File

@ -367,6 +367,7 @@ hu:
title: Egyéni emodzsik
uncategorized: Nem kategorizált
unlist: Elrejtés a listáról
unlisted: Csendes nyilvános
update_failed_msg: Nem sikerült frissíteni az emodzsit
updated_msg: Emodzsi sikeresen frissítve!
upload: Feltöltés
@ -1907,13 +1908,19 @@ hu:
limit: Elérted a kitűzhető bejegyzések maximális számát
ownership: Nem tűzheted ki valaki más bejegyzését
reblog: Megtolt bejegyzést nem tudsz kitűzni
quote_policies:
followers: Csak követőknek
nobody: Csak én
public: Bárki
title: "%{name}: „%{quote}”"
visibilities:
direct: Privát említés
private: Csak követőknek
private_long: Csak a követőidnek jelenik meg
public: Nyilvános
public_long: Bárki a Mastodonon és azon kívül
unlisted: Listázatlan
unlisted_long: Elrejtve a Mastodon keresési találataiban, a felkapottak között és a nyilvános idővonalakon
statuses_cleanup:
enabled: Régi bejegyzések automatikus törlése
enabled_hint: Automatikusan törli a bejegyzéseidet, ahogy azok elérik a megadott korhatárt, kivéve azokat, melyek illeszkednek valamely alábbi kivételre

View File

@ -239,6 +239,7 @@ ga:
setting_auto_play_gif: Gifs beoite go huathoibríoch a imirt
setting_boost_modal: Taispeáin dialóg deimhnithe roimh threisiú
setting_default_language: Teanga postála
setting_default_privacy: Infheictheacht postála
setting_default_quote_policy: Cé a fhéadfaidh lua
setting_default_sensitive: Marcáil na meáin mar íogair i gcónaí
setting_delete_modal: Taispeáin dialóg deimhnithe sula scriostar postáil

View File

@ -236,6 +236,7 @@ hu:
setting_auto_play_gif: GIF-ek automatikus lejátszása
setting_boost_modal: Megerősítés kérése megtolás előtt
setting_default_language: Bejegyzések nyelve
setting_default_privacy: Közzététel láthatósága
setting_default_quote_policy: Ki idézhet
setting_default_sensitive: Minden médiafájl megjelölése kényesként
setting_delete_modal: Megerősítés kérése bejegyzés törlése előtt

View File

@ -56,10 +56,12 @@ zh-CN:
scopes: 哪些 API 被允许使用。如果你勾选了更高一级的范围,就不用单独选中子项目了。
setting_aggregate_reblogs: 不显示最近已经被转嘟过的嘟文(只会影响新收到的转嘟)
setting_always_send_emails: 一般情况下,如果你活跃使用 Mastodon我们不会向你发送电子邮件通知
setting_default_quote_policy: 此设置将仅对下个Mastodon版本创建的帖子生效但您可以在准备中选择您的偏好。
setting_default_sensitive: 敏感内容默认隐藏,并在点击后显示
setting_display_media_default: 隐藏被标记为敏感内容的媒体
setting_display_media_hide_all: 始终隐藏媒体
setting_display_media_show_all: 始终显示媒体
setting_emoji_style: 如何显示Emoji表情符号。选择“自动”将尝试使用原生Emoji但在旧浏览器中会备选使用Twemoji。
setting_system_scrollbars_ui: 仅对基于 Safari 或 Chromium 内核的桌面端浏览器有效
setting_use_blurhash: 渐变是基于模糊后的隐藏内容生成的
setting_use_pending_items: 点击查看时间线更新,而非自动滚动更新动态。
@ -157,6 +159,10 @@ zh-CN:
name: 角色的公开名称,将在外显为徽章时使用
permissions_as_keys: 具有此角色的用户将有权访问...
position: 用于在特定情况下处理决策冲突。一些特定操作只能对优先级更低的角色执行
username_block:
allow_with_approval: 不直接禁止注册,而是使匹配的新注册需要你的批准
comparison: 屏蔽部分匹配时请注意潜在的Scunthrope问题正常单词内部包含被屏蔽的部分
username: 匹配将不限大小写及常见同形异义字符如“4”和“A”及“3”和“E”等
webhook:
events: 选择要发送的事件
template: 使用变量插值来构建自己的JSON负载。如果要使用默认的JSON请留空。
@ -229,6 +235,7 @@ zh-CN:
setting_auto_play_gif: 自动播放 GIF 动画
setting_boost_modal: 在转嘟前询问我
setting_default_language: 发布语言
setting_default_privacy: 嘟文可见性
setting_default_quote_policy: 谁可以引用
setting_default_sensitive: 始终标记媒体为敏感内容
setting_delete_modal: 在删除嘟文前询问我
@ -321,6 +328,7 @@ zh-CN:
follow_request: 有人向我发送了关注请求
mention: 有人提到了我
pending_account: 有账号需要审核
quote: 有人引用了我的嘟文
reblog: 有人转嘟了我的嘟文
report: 有人提交了新举报
software_updates:
@ -367,6 +375,10 @@ zh-CN:
name: 名称
permissions_as_keys: 权限
position: 优先级
username_block:
allow_with_approval: 注册时需要批准
comparison: 比较方法
username: 字词匹配
webhook:
events: 已启用事件
template: Payload 模板

View File

@ -187,6 +187,7 @@ zh-CN:
create_relay: 创建中继站
create_unavailable_domain: 创建不可用域名
create_user_role: 创建角色
create_username_block: 新建用户名规则
demote_user: 取消管理员
destroy_announcement: 删除公告
destroy_canonical_email_block: 解除邮箱封禁
@ -200,6 +201,7 @@ zh-CN:
destroy_status: 删除嘟文
destroy_unavailable_domain: 删除不可用域名
destroy_user_role: 删除角色
destroy_username_block: 删除用户名规则
disable_2fa_user: 停用双因素认证
disable_custom_emoji: 禁用自定义表情符号
disable_relay: 禁用中继站
@ -234,6 +236,7 @@ zh-CN:
update_report: 更新举报
update_status: 更新嘟文
update_user_role: 更新角色
update_username_block: 更新用户名规则
actions:
approve_appeal_html: "%{name} 批准了 %{target} 对审核结果的申诉"
approve_user_html: "%{name} 批准了用户 %{target} 的注册"
@ -252,6 +255,7 @@ zh-CN:
create_relay_html: "%{name} 添加了中继站 %{target}"
create_unavailable_domain_html: "%{name} 停止了向域名 %{target} 的投递"
create_user_role_html: "%{name} 创建了角色 %{target}"
create_username_block_html: "%{name} 新增了有关包含 %{target} 的用户名的规则"
demote_user_html: "%{name} 撤销了用户 %{target} 的管理权限"
destroy_announcement_html: "%{name} 删除了公告 %{target}"
destroy_canonical_email_block_html: "%{name} 解封了 hash 为 %{target} 的邮箱地址"
@ -265,6 +269,7 @@ zh-CN:
destroy_status_html: "%{name} 删除了 %{target} 的嘟文"
destroy_unavailable_domain_html: "%{name} 恢复了向域名 %{target} 的投递"
destroy_user_role_html: "%{name} 删除了角色 %{target}"
destroy_username_block_html: "%{name} 移除了有关包含 %{target} 的用户名的规则"
disable_2fa_user_html: "%{name} 停用了用户 %{target} 的双因素认证"
disable_custom_emoji_html: "%{name} 停用了自定义表情 %{target}"
disable_relay_html: "%{name} 停用了中继站 %{target}"
@ -299,6 +304,7 @@ zh-CN:
update_report_html: "%{name} 更新了举报 %{target}"
update_status_html: "%{name} 刷新了 %{target} 的嘟文"
update_user_role_html: "%{name} 更改了角色 %{target}"
update_username_block_html: "%{name} 更新了有关包含 %{target} 的用户名的规则"
deleted_account: 账号已注销
empty: 没有找到日志
filter_by_action: 根据操作筛选
@ -358,6 +364,7 @@ zh-CN:
title: 自定义表情
uncategorized: 未分类
unlist: 隐藏
unlisted: 悄悄公开
update_failed_msg: 表情更新失败
updated_msg: 表情更新成功!
upload: 上传新表情
@ -492,12 +499,14 @@ zh-CN:
registration_requested: 已申请注册
registrations:
confirm: 确认
description: 你收到了来自FASP的注册。若你没有发起这个请求请拒绝。若你发起了这个请求请仔细比对名称和密钥指纹后再确认注册。
reject: 拒绝
title: 确认FASP注册
save: 保存
select_capabilities: 选择能力
sign_in: 登录
status: 状态
title: 联邦宇宙辅助服务提供商Fediverse Auxiliary Service Providers
title: FASP
follow_recommendations:
description_html: "<strong>“关注推荐”可帮助新用户快速找到有趣的内容</strong>。 当用户与他人的互动不足以形成个性化的建议时,就会推荐关注这些账号。推荐会每日更新,基于选定语言的近期最高互动数和最多本站关注者数综合评估得出。"
@ -565,7 +574,11 @@ zh-CN:
limited: 受限的
title: 审核
moderation_notes:
create: 新建管理员备注
created_msg: 实例管理员备注创建成功!
description_html: 查看备注或向其他管理员留言
destroyed_msg: 实例管理员备注删除成功!
placeholder: 有关此实例的信息、已采取的行动,或任何能帮助您将来管理此实例的事项。
title: 审核注意事项
private_comment: 私密评论
public_comment: 公开评论
@ -782,6 +795,7 @@ zh-CN:
title: 实例规则
translation: 翻译
translations: 翻译
translations_explanation: 你可以选择性地为规则添加翻译。没有翻译版本则将显示默认值。 请确保任何提供的翻译都与默认值内容同步。
settings:
about:
manage_rules: 管理服务器规则
@ -897,6 +911,8 @@ zh-CN:
system_checks:
database_schema_check:
message_html: 有待处理的数据库迁移。请运行它们以确保应用程序正常运行。
elasticsearch_analysis_index_mismatch:
message_html: Elasticsearch索引分析器设置已过期。请运行<code>tootctl search deploy --only=%{value}</code>。
elasticsearch_health_red:
message_html: Elasticsearch 集群状态不健康(红色),搜索功能不可用
elasticsearch_health_yellow:
@ -1057,6 +1073,25 @@ zh-CN:
other: 过去一周内被 %{count} 个人使用过
title: 推荐与热门
trending: 当前热门
username_blocks:
add_new: 新建
block_registrations: 禁止注册
comparison:
contains: 包含
equals: 等于
contains_html: 包含%{string}
created_msg: 成功创建用户名规则
delete: 删除
edit:
title: 编辑用户名规则
matches_exactly_html: 等于%{string}
new:
create: 新建规则
title: 新建用户名规则
no_username_block_selected: 因为没有选择任何用户名规则,没有任何更改发生
not_permitted: 不允许
title: 用户名规则
updated_msg: 成功更新用户名规则
warning_presets:
add_new: 添加新条目
delete: 删除
@ -1613,6 +1648,10 @@ zh-CN:
title: 新的提及
poll:
subject: "%{name} 创建的一个投票已经结束"
quote:
body: 你的嘟文被 %{name} 引用了:
subject: "%{name} 引用了你的嘟文"
title: 新引用
reblog:
body: 你的嘟文被 %{name} 转嘟了:
subject: "%{name} 转嘟了你的嘟文"
@ -1819,18 +1858,26 @@ zh-CN:
edited_at_html: 编辑于 %{date}
errors:
in_reply_not_found: 你回复的嘟文似乎不存在
quoted_status_not_found: 您尝试引用的嘟文似乎不存在。
over_character_limit: 超过了 %{max} 字的限制
pin_errors:
direct: 仅对被提及的用户可见的帖子不能被置顶
limit: 你置顶的嘟文数量已达上限
ownership: 不能置顶别人的嘟文
reblog: 不能置顶转嘟
quote_policies:
followers: 仅关注者
nobody: 仅限自己
public: 任何人
title: "%{name}:“%{quote}”"
visibilities:
direct: 私信提及
private: 仅关注者
private_long: 只有关注你的用户能看到
public: 公开
public_long: 所有人(无论是否注册了 Mastodon
unlisted: 悄悄公开
unlisted_long: 不显示在Mastodon的搜索结果、热门趋势、公共时间线上
statuses_cleanup:
enabled: 自动删除旧嘟文
enabled_hint: 自动删除你发布的超过指定期限的嘟文,除非满足下列条件之一

2
dist/nginx.conf vendored
View File

@ -62,7 +62,7 @@ server {
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml image/x-icon;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/rss+xml text/javascript image/svg+xml image/x-icon;
gzip_static on;
location / {

View File

@ -45,7 +45,7 @@ module Mastodon
def api_versions
{
mastodon: 6,
mastodon: Mastodon::Feature.outgoing_quotes_enabled? ? 7 : 6,
}
end

View File

@ -1,7 +1,7 @@
{
"name": "@mastodon/mastodon",
"license": "AGPL-3.0-or-later",
"packageManager": "yarn@4.9.2",
"packageManager": "yarn@4.9.4",
"engines": {
"node": ">=20"
},

View File

@ -7,7 +7,7 @@ RSpec.describe Status::InteractionPolicyConcern do
describe '#quote_policy_as_keys' do
it 'returns the expected values' do
expect(status.quote_policy_as_keys(:automatic)).to eq ['unknown', 'followers']
expect(status.quote_policy_as_keys(:automatic)).to eq ['unsupported_policy', 'followers']
expect(status.quote_policy_as_keys(:manual)).to eq ['public']
end
end

View File

@ -8,4 +8,95 @@ RSpec.describe Relay do
it { is_expected.to normalize(:inbox_url).from(' http://host.example ').to('http://host.example') }
end
end
describe 'Validations' do
it { is_expected.to validate_presence_of(:inbox_url) }
it { is_expected.to validate_uniqueness_of(:inbox_url) }
end
describe 'Enumerations' do
it { is_expected.to define_enum_for(:state) }
end
describe 'Scopes' do
describe 'enabled' do
let!(:accepted_relay) { Fabricate :relay, state: :accepted }
let!(:pending_relay) { Fabricate :relay, state: :pending }
it 'returns records in accepted state' do
expect(described_class.enabled)
.to include(accepted_relay)
.and not_include(pending_relay)
end
end
end
describe 'Callbacks' do
describe 'Ensure disabled on destroy' do
before { stub_delivery_worker }
context 'when relay is enabled' do
let(:relay) { Fabricate :relay, state: :accepted }
it 'sends undo when destroying the record' do
relay.destroy!
expect(ActivityPub::DeliveryWorker)
.to have_received(:perform_async).with(match('Undo'), Account.representative.id, relay.inbox_url)
end
end
context 'when relay is not enabled' do
let(:relay) { Fabricate :relay, state: :pending }
it 'sends undo when destroying the record' do
relay.destroy!
expect(ActivityPub::DeliveryWorker)
.to_not have_received(:perform_async)
end
end
end
end
describe '#to_log_human_identifier' do
subject { relay.to_log_human_identifier }
let(:relay) { Fabricate.build :relay, inbox_url: }
let(:inbox_url) { 'https://host.example' }
it { is_expected.to eq(inbox_url) }
end
describe '#disable' do
let(:relay) { Fabricate :relay, state: :accepted, follow_activity_id: 'https://host.example/123' }
before { stub_delivery_worker }
it 'changes state to idle and removes the activity id' do
expect { relay.disable! }
.to change { relay.reload.state }.to('idle')
.and change { relay.reload.follow_activity_id }.to(be_nil)
expect(ActivityPub::DeliveryWorker)
.to have_received(:perform_async).with(match('Undo'), Account.representative.id, relay.inbox_url)
end
end
describe '#enable' do
let(:relay) { Fabricate :relay, state: :idle, follow_activity_id: '' }
before { stub_delivery_worker }
it 'changes state to pending and populates the activity id' do
expect { relay.enable! }
.to change { relay.reload.state }.to('pending')
.and change { relay.reload.follow_activity_id }.to(be_present)
expect(ActivityPub::DeliveryWorker)
.to have_received(:perform_async).with(match('Follow'), Account.representative.id, relay.inbox_url)
end
end
def stub_delivery_worker
allow(ActivityPub::DeliveryWorker).to receive(:perform_async)
end
end

View File

@ -101,20 +101,14 @@ RSpec.describe 'credentials API' do
.to have_http_status(200)
expect(response.content_type)
.to start_with('application/json')
expect(response.parsed_body).to include({
source: hash_including({
discoverable: true,
indexable: true,
}),
locked: false,
})
expect(ActivityPub::UpdateDistributionWorker)
.to have_enqueued_sidekiq_job(user.account_id)
end
def expect_account_updates
expect(response.parsed_body)
.to include({
source: hash_including({
discoverable: true,
indexable: true,
}),
locked: false,
})
expect(user.account.reload)
.to have_attributes(
display_name: eq("Alice Isn't Dead"),
@ -123,14 +117,13 @@ RSpec.describe 'credentials API' do
header: exist,
attribution_domains: ['example.com']
)
end
def expect_user_updates
expect(user.reload)
.to have_attributes(
setting_default_privacy: eq('unlisted'),
setting_default_sensitive: be(true)
)
expect(ActivityPub::UpdateDistributionWorker)
.to have_enqueued_sidekiq_job(user.account_id)
end
end
end

View File

@ -1,7 +1,7 @@
{
"name": "@mastodon/streaming",
"license": "AGPL-3.0-or-later",
"packageManager": "yarn@4.9.2",
"packageManager": "yarn@4.9.4",
"engines": {
"node": ">=20"
},

338
yarn.lock
View File

@ -1249,10 +1249,10 @@ __metadata:
languageName: node
linkType: hard
"@csstools/color-helpers@npm:^5.0.2":
version: 5.0.2
resolution: "@csstools/color-helpers@npm:5.0.2"
checksum: 10c0/bebaddb28b9eb58b0449edd5d0c0318fa88f3cb079602ee27e88c9118070d666dcc4e09a5aa936aba2fde6ba419922ade07b7b506af97dd7051abd08dfb2959b
"@csstools/color-helpers@npm:^5.1.0":
version: 5.1.0
resolution: "@csstools/color-helpers@npm:5.1.0"
checksum: 10c0/b7f99d2e455cf1c9b41a67a5327d5d02888cd5c8802a68b1887dffef537d9d4bc66b3c10c1e62b40bbed638b6c1d60b85a232f904ed7b39809c4029cb36567db
languageName: node
linkType: hard
@ -1266,16 +1266,16 @@ __metadata:
languageName: node
linkType: hard
"@csstools/css-color-parser@npm:^3.0.10, @csstools/css-color-parser@npm:^3.0.7":
version: 3.0.10
resolution: "@csstools/css-color-parser@npm:3.0.10"
"@csstools/css-color-parser@npm:^3.0.7, @csstools/css-color-parser@npm:^3.1.0":
version: 3.1.0
resolution: "@csstools/css-color-parser@npm:3.1.0"
dependencies:
"@csstools/color-helpers": "npm:^5.0.2"
"@csstools/color-helpers": "npm:^5.1.0"
"@csstools/css-calc": "npm:^2.1.4"
peerDependencies:
"@csstools/css-parser-algorithms": ^3.0.5
"@csstools/css-tokenizer": ^3.0.4
checksum: 10c0/8f8a2395b117c2f09366b5c9bf49bc740c92a65b6330fe3cc1e76abafd0d1000e42a657d7b0a3814846a66f1d69896142f7e36d7a4aca77de977e5cc5f944747
checksum: 10c0/0e0c670ad54ec8ec4d9b07568b80defd83b9482191f5e8ca84ab546b7be6db5d7cc2ba7ac9fae54488b129a4be235d6183d3aab4416fec5e89351f73af4222c5
languageName: node
linkType: hard
@ -1305,6 +1305,21 @@ __metadata:
languageName: node
linkType: hard
"@csstools/postcss-alpha-function@npm:^1.0.0":
version: 1.0.0
resolution: "@csstools/postcss-alpha-function@npm:1.0.0"
dependencies:
"@csstools/css-color-parser": "npm:^3.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/e5e0f090ea1976594151c860abb49adccbdbb82542ec57315b7fb54b0fa4c32065619581f126d29692bf448f358abd29b0fa702ae8973f16d381c981ed99fc76
languageName: node
linkType: hard
"@csstools/postcss-cascade-layers@npm:^5.0.2":
version: 5.0.2
resolution: "@csstools/postcss-cascade-layers@npm:5.0.2"
@ -1317,62 +1332,77 @@ __metadata:
languageName: node
linkType: hard
"@csstools/postcss-color-function@npm:^4.0.10":
version: 4.0.10
resolution: "@csstools/postcss-color-function@npm:4.0.10"
dependencies:
"@csstools/css-color-parser": "npm:^3.0.10"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/a6e65d37a114f95634a07660daa1aa52f4abfb6ddd740cc9267967a5948f5c72469a6ba2432ab1f31616d6f1a4ab963b69f778497496986535831b0b2b399f75
languageName: node
linkType: hard
"@csstools/postcss-color-mix-function@npm:^3.0.10":
version: 3.0.10
resolution: "@csstools/postcss-color-mix-function@npm:3.0.10"
dependencies:
"@csstools/css-color-parser": "npm:^3.0.10"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/9505a09a805f52555bd06c8f54d537a99578efe5c7e643c9fdaca8cbb7d74d4d3e07b829c6aed315c75ec5ce113261fb402e01b67e4a423ed39ea8991a6dded0
languageName: node
linkType: hard
"@csstools/postcss-color-mix-variadic-function-arguments@npm:^1.0.0":
"@csstools/postcss-color-function-display-p3-linear@npm:^1.0.0":
version: 1.0.0
resolution: "@csstools/postcss-color-mix-variadic-function-arguments@npm:1.0.0"
resolution: "@csstools/postcss-color-function-display-p3-linear@npm:1.0.0"
dependencies:
"@csstools/css-color-parser": "npm:^3.0.10"
"@csstools/css-color-parser": "npm:^3.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/dd45bd19931cc4780247173b793e5f1e6409b76f92b04fe26e07b0fa048aedc7bcbd92356a558581f695654c2f2d189e1b40b14a9c3f246e86e83b0edf646066
checksum: 10c0/c5bf6a43d6a5d33c39e673db7b2573b5b0ab577eb30d3a01bb73ed08756814aa0869b781a52fbd168271fc8619ff114ca3df4438e4c41211f51b3743b0a86680
languageName: node
linkType: hard
"@csstools/postcss-content-alt-text@npm:^2.0.6":
version: 2.0.6
resolution: "@csstools/postcss-content-alt-text@npm:2.0.6"
"@csstools/postcss-color-function@npm:^4.0.11":
version: 4.0.11
resolution: "@csstools/postcss-color-function@npm:4.0.11"
dependencies:
"@csstools/css-color-parser": "npm:^3.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/e7d21002a84d0fba4fe815fb7d3d19b81fb1719a7b6fdd240eb6639d58937b64d6f5c9aa11ffe8a64891a2ed181818cd56d346f58949c2eaa9df7c82ee95ef8e
checksum: 10c0/6c7dfe71df21db7e7f11decbdf80ed4d1af6bbd4196fe851371685e97728cfae34f8fd3465ed9407b6f22547633d9d102984c3bcbbb45eb4679474b83d4f6d96
languageName: node
linkType: hard
"@csstools/postcss-color-mix-function@npm:^3.0.11":
version: 3.0.11
resolution: "@csstools/postcss-color-mix-function@npm:3.0.11"
dependencies:
"@csstools/css-color-parser": "npm:^3.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/8dac54af709e82541ee6356f4b570563543961b65ac4c3bc9849c94a75c0c088bdea43f228003ade92ecc5c688355937c80fbf4f4227ce6cff19aaa482cd8ef3
languageName: node
linkType: hard
"@csstools/postcss-color-mix-variadic-function-arguments@npm:^1.0.1":
version: 1.0.1
resolution: "@csstools/postcss-color-mix-variadic-function-arguments@npm:1.0.1"
dependencies:
"@csstools/css-color-parser": "npm:^3.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/e281e0cf6aa71a05d77af83591f870b8a9d89d0b5c90d8654d9176e7629a83713c82430e92614ac8dda0b99ba9a8d471afcbc52dcef01f7920e7bf7090c585ca
languageName: node
linkType: hard
"@csstools/postcss-content-alt-text@npm:^2.0.7":
version: 2.0.7
resolution: "@csstools/postcss-content-alt-text@npm:2.0.7"
dependencies:
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/0eb8927ca0ee1078d81e2c210f527949d6558c90d71f1b41f6882ba3baf3517e1cf0f3e86e47c56803b12764f994d03cb5eb0aa46ec972da88a5405d06e7db47
languageName: node
linkType: hard
@ -1401,59 +1431,59 @@ __metadata:
languageName: node
linkType: hard
"@csstools/postcss-gamut-mapping@npm:^2.0.10":
version: 2.0.10
resolution: "@csstools/postcss-gamut-mapping@npm:2.0.10"
"@csstools/postcss-gamut-mapping@npm:^2.0.11":
version: 2.0.11
resolution: "@csstools/postcss-gamut-mapping@npm:2.0.11"
dependencies:
"@csstools/css-color-parser": "npm:^3.0.10"
"@csstools/css-color-parser": "npm:^3.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
peerDependencies:
postcss: ^8.4
checksum: 10c0/87cd8289478bf88195469fcf4f80c8fed9e0e5ef76a335a10c4c21582542acb16cced1e00e7da90deaf2e62e383a5c6fe402f429f227c87a2c20e2545a69c537
checksum: 10c0/490b8ccf10e30879a4415afbdd3646e1cdac3671586b7916855cf47a536f3be75eed014396056bde6528e0cb76d904e79bad78afc0b499e837264cf22519d145
languageName: node
linkType: hard
"@csstools/postcss-gradients-interpolation-method@npm:^5.0.10":
version: 5.0.10
resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.10"
"@csstools/postcss-gradients-interpolation-method@npm:^5.0.11":
version: 5.0.11
resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.11"
dependencies:
"@csstools/css-color-parser": "npm:^3.0.10"
"@csstools/css-color-parser": "npm:^3.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/206d079d7679a9609a4fb227ddaf3443d04cff88b55bcfec1cf63c9de372b8720edde8614fc51d2237e4edbff8ce34697f912bc25c2ae41390353fce88455515
checksum: 10c0/0af60c2dbd8edc84e24c76d8edda3f3a663bd5eea99fd83e7827ac02ad168e75440a9ce9cab61997501f8195a3eb35928817f9878a28d66cb8cd0f552fca3fb6
languageName: node
linkType: hard
"@csstools/postcss-hwb-function@npm:^4.0.10":
version: 4.0.10
resolution: "@csstools/postcss-hwb-function@npm:4.0.10"
"@csstools/postcss-hwb-function@npm:^4.0.11":
version: 4.0.11
resolution: "@csstools/postcss-hwb-function@npm:4.0.11"
dependencies:
"@csstools/css-color-parser": "npm:^3.0.10"
"@csstools/css-color-parser": "npm:^3.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/defb9b319b14228307196b9a88e3cbf0acd1d3768b936716dca846875068ad4453e7a2a3d75d1fab5534c8655e9c555e1fa70d30e2c85d68ed2117a7cfe7837c
checksum: 10c0/b8fbb3f1440d20d5c686b62e46b600c751072ce6c3d6102118bb71038df4e979f2c9ac746dd49dafaa7845cb78f2b5dcc744ecb4f7028784bed337b240067014
languageName: node
linkType: hard
"@csstools/postcss-ic-unit@npm:^4.0.2":
version: 4.0.2
resolution: "@csstools/postcss-ic-unit@npm:4.0.2"
"@csstools/postcss-ic-unit@npm:^4.0.3":
version: 4.0.3
resolution: "@csstools/postcss-ic-unit@npm:4.0.3"
dependencies:
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/26adb8351143e591080f542d87b223ee5ebc5f33f6d03b217505b249ceb19c46a06732a88000e3a1857ae712a6ea0ffa089a24ad8b8042421490539de5c3d0e8
checksum: 10c0/3425b499d4ba5b36edea3c4c6093744c9829e2d8191af6b2adbd7a2940f2cd8737f4367a91c144aaca0ec9b402cc8a9093b92ffcae77efa7b02f8df518e948ce
languageName: node
linkType: hard
@ -1478,17 +1508,17 @@ __metadata:
languageName: node
linkType: hard
"@csstools/postcss-light-dark-function@npm:^2.0.9":
version: 2.0.9
resolution: "@csstools/postcss-light-dark-function@npm:2.0.9"
"@csstools/postcss-light-dark-function@npm:^2.0.10":
version: 2.0.10
resolution: "@csstools/postcss-light-dark-function@npm:2.0.10"
dependencies:
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/ee2937f0e5dcaafd10349f0914596e8e1ef6f9d46939c6a6b0e2e63cab0552594e5140bf56e485048c3bca6634dd9673a176c57b9e77001332787f4263835c0f
checksum: 10c0/6c763a22022170a3464c0fbb00803fc0d954ef8ac28700b7bb8312847712f62a2573bab5e138ad0c87f87e1c9bdd3ff62edb9fc38f8a058c1abb7bc65cb3b6e4
languageName: node
linkType: hard
@ -1592,29 +1622,29 @@ __metadata:
languageName: node
linkType: hard
"@csstools/postcss-oklab-function@npm:^4.0.10":
version: 4.0.10
resolution: "@csstools/postcss-oklab-function@npm:4.0.10"
"@csstools/postcss-oklab-function@npm:^4.0.11":
version: 4.0.11
resolution: "@csstools/postcss-oklab-function@npm:4.0.11"
dependencies:
"@csstools/css-color-parser": "npm:^3.0.10"
"@csstools/css-color-parser": "npm:^3.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/421d1f2574941c3caecd608588533581fc0766998cc85474008a49b5f1011249cb2be7ef9f21a346fd3895598da18e58860fde06d34b1b833918fa880c41c18f
checksum: 10c0/9887e9fd58710c6074d7bc289526ccafe914bacaa59a348a72bf0cc1baf43a088a5a767a15f06edbe9930ad3a3cb662d34be7a4bdeb025e6b88136f90f092722
languageName: node
linkType: hard
"@csstools/postcss-progressive-custom-properties@npm:^4.1.0":
version: 4.1.0
resolution: "@csstools/postcss-progressive-custom-properties@npm:4.1.0"
"@csstools/postcss-progressive-custom-properties@npm:^4.2.0":
version: 4.2.0
resolution: "@csstools/postcss-progressive-custom-properties@npm:4.2.0"
dependencies:
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/175081a5c53e37a282f596e01359d4411800e4017c2d389caaa2b7c9b7507a50c5f1ac3d937f27f000be3ac2ac788cad9c1490ec6bc1d4de51331f3cc8ccda8e
checksum: 10c0/163d5d1fa68b2a4973d13036462f381f8e5c32587f19c1d892ba4aa1f92783e3fcd654b9e197e74cd42053ce0234c157458b1c560a02b2cd6de4f2abc286960d
languageName: node
linkType: hard
@ -1631,18 +1661,18 @@ __metadata:
languageName: node
linkType: hard
"@csstools/postcss-relative-color-syntax@npm:^3.0.10":
version: 3.0.10
resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.10"
"@csstools/postcss-relative-color-syntax@npm:^3.0.11":
version: 3.0.11
resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.11"
dependencies:
"@csstools/css-color-parser": "npm:^3.0.10"
"@csstools/css-color-parser": "npm:^3.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/de9c41a936a77dab68cdb2dd23a26ba1b92d90bf2a7cf463fada2f2daf6ad0d7394fa2b1ed444f509006992961d993383a34a9afd3a48a9dc67a3793afcd9bb8
checksum: 10c0/2dd5a49324097408f0fc40c33d04feb25d2a7b6ad3e7c3c730738ce0f3aee0a7fec15bd895b70ba718ad67b67074f2634446d232572aa5c59b505b59e4b9700c
languageName: node
linkType: hard
@ -1683,15 +1713,15 @@ __metadata:
languageName: node
linkType: hard
"@csstools/postcss-text-decoration-shorthand@npm:^4.0.2":
version: 4.0.2
resolution: "@csstools/postcss-text-decoration-shorthand@npm:4.0.2"
"@csstools/postcss-text-decoration-shorthand@npm:^4.0.3":
version: 4.0.3
resolution: "@csstools/postcss-text-decoration-shorthand@npm:4.0.3"
dependencies:
"@csstools/color-helpers": "npm:^5.0.2"
"@csstools/color-helpers": "npm:^5.1.0"
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/01e2f3717e7a42224dc1a746491c55a381cf208cb7588f0308eeefe730675be4c7bb56c0cc557e75999c981e67da7d0b0bb68610635752c89ef251ee435b9cac
checksum: 10c0/f6af7d5dcf599edcf76c5e396ef2d372bbe1c1f3fbaaccd91e91049e64b6ff68b44f459277aef0a8110baca3eaa21275012adc52ccb8c0fc526a4c35577f8fce
languageName: node
linkType: hard
@ -3210,10 +3240,10 @@ __metadata:
languageName: node
linkType: hard
"@rolldown/pluginutils@npm:1.0.0-beta.32":
version: 1.0.0-beta.32
resolution: "@rolldown/pluginutils@npm:1.0.0-beta.32"
checksum: 10c0/ba3582fc3c35c8eb57b0df2d22d0733b1be83d37edcc258203364773f094f58fc0cb7a056d604603573a69dd0105a466506cad467f59074e1e53d0dc26191f06
"@rolldown/pluginutils@npm:1.0.0-beta.34":
version: 1.0.0-beta.34
resolution: "@rolldown/pluginutils@npm:1.0.0-beta.34"
checksum: 10c0/96565287991825ecd90b60607dae908ebfdde233661fc589c98547a75c1fd0282b2e2a7849c3eb0c9941e2fba34667a8d5cdb8d597370815c19c2f29b4c157b4
languageName: node
linkType: hard
@ -4712,18 +4742,18 @@ __metadata:
linkType: hard
"@vitejs/plugin-react@npm:^5.0.0":
version: 5.0.1
resolution: "@vitejs/plugin-react@npm:5.0.1"
version: 5.0.2
resolution: "@vitejs/plugin-react@npm:5.0.2"
dependencies:
"@babel/core": "npm:^7.28.3"
"@babel/plugin-transform-react-jsx-self": "npm:^7.27.1"
"@babel/plugin-transform-react-jsx-source": "npm:^7.27.1"
"@rolldown/pluginutils": "npm:1.0.0-beta.32"
"@rolldown/pluginutils": "npm:1.0.0-beta.34"
"@types/babel__core": "npm:^7.20.5"
react-refresh: "npm:^0.17.0"
peerDependencies:
vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
checksum: 10c0/2641171beedfc38edc5671abb47706906f9af2a79a6dfff4e946106c9550de4f83ccae41c164f3ee26a3edf07127ecc0e415fe5cddbf7abc71fbb2540016c27d
checksum: 10c0/6b02478498d8095b4c5b688b457f8ff35c3274489399f79cf412c2d68213c5e7796d245de27093ccf91b4fb4b644a31e9a759d91caa1ba62da105be3875fc6dd
languageName: node
linkType: hard
@ -5495,7 +5525,7 @@ __metadata:
languageName: node
linkType: hard
"browserslist@npm:^4.24.0, browserslist@npm:^4.24.4, browserslist@npm:^4.25.0, browserslist@npm:^4.25.1":
"browserslist@npm:^4.24.0, browserslist@npm:^4.24.4, browserslist@npm:^4.25.1":
version: 4.25.1
resolution: "browserslist@npm:4.25.1"
dependencies:
@ -6057,16 +6087,16 @@ __metadata:
languageName: node
linkType: hard
"css-has-pseudo@npm:^7.0.2":
version: 7.0.2
resolution: "css-has-pseudo@npm:7.0.2"
"css-has-pseudo@npm:^7.0.3":
version: 7.0.3
resolution: "css-has-pseudo@npm:7.0.3"
dependencies:
"@csstools/selector-specificity": "npm:^5.0.0"
postcss-selector-parser: "npm:^7.0.0"
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/456e9ce1eec8a535683c329956acfe53ce5a208345d7f2fcbe662626be8b3c98681e9041d7f4980316714397b0c1c3defde25653d629c396df17803d599c4edf
checksum: 10c0/c89f68e17bed229e9a3e98da5032e1360c83d45d974bc3fb8d6b5358399bca80cce7929e4a621a516a75536edb78678dc486eb41841eeed28cca79e3be4bdc27
languageName: node
linkType: hard
@ -6096,10 +6126,10 @@ __metadata:
languageName: node
linkType: hard
"cssdb@npm:^8.3.0":
version: 8.3.0
resolution: "cssdb@npm:8.3.0"
checksum: 10c0/56d13cbddd90e63f45f24f71f35314f9718b72760acdf15367e33014eb45df775ae97ec05c08afaa6b4b147c757e9554c1bf39ddcdaeeb26b6c2adfeee503ae7
"cssdb@npm:^8.4.0":
version: 8.4.0
resolution: "cssdb@npm:8.4.0"
checksum: 10c0/f43cc366e8f9b41b2762327ee32167438fa71b78464c869b8c02f4e014657ed9887d1b0f34529d1b2219666f17d1edce1e09ec01927a63ad91e3292e027c1ffc
languageName: node
linkType: hard
@ -10359,18 +10389,18 @@ __metadata:
languageName: node
linkType: hard
"postcss-color-functional-notation@npm:^7.0.10":
version: 7.0.10
resolution: "postcss-color-functional-notation@npm:7.0.10"
"postcss-color-functional-notation@npm:^7.0.11":
version: 7.0.11
resolution: "postcss-color-functional-notation@npm:7.0.11"
dependencies:
"@csstools/css-color-parser": "npm:^3.0.10"
"@csstools/css-color-parser": "npm:^3.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/62ee77ef220488cfb4a1c5af4f5203a0c2951c8a0613088ffc946130d48b63ca28ab67b18ed380a288a7ce51c2360a75d8d08d2db389e48f4ebb78a3e52d15b6
checksum: 10c0/b06ec053c69c972ec705969dba7a208592a905fb1de4782905dc5332db9970f8e195cf3fac105572efacb8aaeb10bdda960719dd61657a6850feefa89983876e
languageName: node
linkType: hard
@ -10452,16 +10482,16 @@ __metadata:
languageName: node
linkType: hard
"postcss-double-position-gradients@npm:^6.0.2":
version: 6.0.2
resolution: "postcss-double-position-gradients@npm:6.0.2"
"postcss-double-position-gradients@npm:^6.0.3":
version: 6.0.3
resolution: "postcss-double-position-gradients@npm:6.0.3"
dependencies:
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/7b4759813f99039c6a7c8e70b46ff4c34c27e723a9ff7f0e1044e293d568357e1d39233f94b1bf3b2768b1207348138faea0781086a66b7b8e39e780657da523
checksum: 10c0/900fb99c7151a31fca162f383047ae032a8dd48f15bc1c6f2daebb4683968c8567ef8cc99b315b798152aaf643a30b24ebbf2ef2bee3b478733f3d4c7aba84de
languageName: node
linkType: hard
@ -10517,18 +10547,18 @@ __metadata:
languageName: node
linkType: hard
"postcss-lab-function@npm:^7.0.10":
version: 7.0.10
resolution: "postcss-lab-function@npm:7.0.10"
"postcss-lab-function@npm:^7.0.11":
version: 7.0.11
resolution: "postcss-lab-function@npm:7.0.11"
dependencies:
"@csstools/css-color-parser": "npm:^3.0.10"
"@csstools/css-color-parser": "npm:^3.1.0"
"@csstools/css-parser-algorithms": "npm:^3.0.5"
"@csstools/css-tokenizer": "npm:^3.0.4"
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/utilities": "npm:^2.0.0"
peerDependencies:
postcss: ^8.4
checksum: 10c0/3e235b52f6c119937a0b41aa351f5f9ef6e17bf1b868e7068c9a04f3d31c247d0296c862388febb7fec5102d81413ccade8a4788904289afd34aa072de71390b
checksum: 10c0/031e3309b9537a77b4275c16a8072b88efede51bdcaf956556cedf68d55a256d573b836ad3d4f84276bfb1fcef5f02152fdc03b8bcb909495c1f4815664f7fcf
languageName: node
linkType: hard
@ -10604,23 +10634,25 @@ __metadata:
linkType: hard
"postcss-preset-env@npm:^10.1.5":
version: 10.2.4
resolution: "postcss-preset-env@npm:10.2.4"
version: 10.3.1
resolution: "postcss-preset-env@npm:10.3.1"
dependencies:
"@csstools/postcss-alpha-function": "npm:^1.0.0"
"@csstools/postcss-cascade-layers": "npm:^5.0.2"
"@csstools/postcss-color-function": "npm:^4.0.10"
"@csstools/postcss-color-mix-function": "npm:^3.0.10"
"@csstools/postcss-color-mix-variadic-function-arguments": "npm:^1.0.0"
"@csstools/postcss-content-alt-text": "npm:^2.0.6"
"@csstools/postcss-color-function": "npm:^4.0.11"
"@csstools/postcss-color-function-display-p3-linear": "npm:^1.0.0"
"@csstools/postcss-color-mix-function": "npm:^3.0.11"
"@csstools/postcss-color-mix-variadic-function-arguments": "npm:^1.0.1"
"@csstools/postcss-content-alt-text": "npm:^2.0.7"
"@csstools/postcss-exponential-functions": "npm:^2.0.9"
"@csstools/postcss-font-format-keywords": "npm:^4.0.0"
"@csstools/postcss-gamut-mapping": "npm:^2.0.10"
"@csstools/postcss-gradients-interpolation-method": "npm:^5.0.10"
"@csstools/postcss-hwb-function": "npm:^4.0.10"
"@csstools/postcss-ic-unit": "npm:^4.0.2"
"@csstools/postcss-gamut-mapping": "npm:^2.0.11"
"@csstools/postcss-gradients-interpolation-method": "npm:^5.0.11"
"@csstools/postcss-hwb-function": "npm:^4.0.11"
"@csstools/postcss-ic-unit": "npm:^4.0.3"
"@csstools/postcss-initial": "npm:^2.0.1"
"@csstools/postcss-is-pseudo-class": "npm:^5.0.3"
"@csstools/postcss-light-dark-function": "npm:^2.0.9"
"@csstools/postcss-light-dark-function": "npm:^2.0.10"
"@csstools/postcss-logical-float-and-clear": "npm:^3.0.0"
"@csstools/postcss-logical-overflow": "npm:^2.0.0"
"@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0"
@ -10630,38 +10662,38 @@ __metadata:
"@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.5"
"@csstools/postcss-nested-calc": "npm:^4.0.0"
"@csstools/postcss-normalize-display-values": "npm:^4.0.0"
"@csstools/postcss-oklab-function": "npm:^4.0.10"
"@csstools/postcss-progressive-custom-properties": "npm:^4.1.0"
"@csstools/postcss-oklab-function": "npm:^4.0.11"
"@csstools/postcss-progressive-custom-properties": "npm:^4.2.0"
"@csstools/postcss-random-function": "npm:^2.0.1"
"@csstools/postcss-relative-color-syntax": "npm:^3.0.10"
"@csstools/postcss-relative-color-syntax": "npm:^3.0.11"
"@csstools/postcss-scope-pseudo-class": "npm:^4.0.1"
"@csstools/postcss-sign-functions": "npm:^1.1.4"
"@csstools/postcss-stepped-value-functions": "npm:^4.0.9"
"@csstools/postcss-text-decoration-shorthand": "npm:^4.0.2"
"@csstools/postcss-text-decoration-shorthand": "npm:^4.0.3"
"@csstools/postcss-trigonometric-functions": "npm:^4.0.9"
"@csstools/postcss-unset-value": "npm:^4.0.0"
autoprefixer: "npm:^10.4.21"
browserslist: "npm:^4.25.0"
browserslist: "npm:^4.25.1"
css-blank-pseudo: "npm:^7.0.1"
css-has-pseudo: "npm:^7.0.2"
css-has-pseudo: "npm:^7.0.3"
css-prefers-color-scheme: "npm:^10.0.0"
cssdb: "npm:^8.3.0"
cssdb: "npm:^8.4.0"
postcss-attribute-case-insensitive: "npm:^7.0.1"
postcss-clamp: "npm:^4.1.0"
postcss-color-functional-notation: "npm:^7.0.10"
postcss-color-functional-notation: "npm:^7.0.11"
postcss-color-hex-alpha: "npm:^10.0.0"
postcss-color-rebeccapurple: "npm:^10.0.0"
postcss-custom-media: "npm:^11.0.6"
postcss-custom-properties: "npm:^14.0.6"
postcss-custom-selectors: "npm:^8.0.5"
postcss-dir-pseudo-class: "npm:^9.0.1"
postcss-double-position-gradients: "npm:^6.0.2"
postcss-double-position-gradients: "npm:^6.0.3"
postcss-focus-visible: "npm:^10.0.1"
postcss-focus-within: "npm:^9.0.1"
postcss-font-variant: "npm:^5.0.0"
postcss-gap-properties: "npm:^6.0.0"
postcss-image-set-function: "npm:^7.0.0"
postcss-lab-function: "npm:^7.0.10"
postcss-lab-function: "npm:^7.0.11"
postcss-logical: "npm:^8.1.0"
postcss-nesting: "npm:^13.0.2"
postcss-opacity-percentage: "npm:^3.0.0"
@ -10673,7 +10705,7 @@ __metadata:
postcss-selector-not: "npm:^8.0.1"
peerDependencies:
postcss: ^8.4
checksum: 10c0/d7f8494d355567dc4ea66fe765c86ba9b1e9ce5061ada5c80c51fdf6c98b004b0b7ef17b5f64d197e1bec2e22ef4b6c613b998e1c1bcad0b53f0a3e303ded2fe
checksum: 10c0/c57d1720d06b8dc63c7f8e27ee667b17ddb5b8215afa28fb27728088a2262ee59a5903d7f376529c777b17bbc27ac90ac5808653254d689eac499eb8603aee36
languageName: node
linkType: hard