Merge commit '7201f99cf83a74331febd1624ca9aaace68af5e6' into glitch-soc/merge-upstream

This commit is contained in:
Claire 2024-05-04 15:24:22 +02:00
commit d6f9c97ae4
53 changed files with 823 additions and 226 deletions

View File

@ -115,8 +115,8 @@ jobs:
matrix:
ruby-version:
- '3.1'
- '3.2'
- '.ruby-version'
- '3.3'
steps:
- uses: actions/checkout@v4
@ -190,8 +190,8 @@ jobs:
matrix:
ruby-version:
- '3.1'
- '3.2'
- '.ruby-version'
- '3.3'
steps:
- uses: actions/checkout@v4
@ -289,8 +289,8 @@ jobs:
matrix:
ruby-version:
- '3.1'
- '3.2'
- '.ruby-version'
- '3.3'
search-image:
- docker.elastic.co/elasticsearch/elasticsearch:7.17.13
include:

3
.gitignore vendored
View File

@ -68,3 +68,6 @@ yarn-debug.log
# Ignore Docker option files
docker-compose.override.yml
# Ignore dotenv .local files
.env*.local

View File

@ -1 +1 @@
3.2.4
3.3.1

View File

@ -7,15 +7,15 @@
ARG TARGETPLATFORM=${TARGETPLATFORM}
ARG BUILDPLATFORM=${BUILDPLATFORM}
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.2.4"]
ARG RUBY_VERSION="3.2.4"
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.3.1"]
ARG RUBY_VERSION="3.3.1"
# # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
ARG NODE_MAJOR_VERSION="20"
# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"]
ARG DEBIAN_VERSION="bookworm"
# Node image to use for base image based on combined variables (ex: 20-bookworm-slim)
FROM docker.io/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim as node
# Ruby image to use for base image based on combined variables (ex: 3.2.4-slim-bookworm)
# Ruby image to use for base image based on combined variables (ex: 3.3.1-slim-bookworm)
FROM docker.io/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} as ruby
# Resulting version string is vX.X.X-MASTODON_VERSION_PRERELEASE+MASTODON_VERSION_METADATA

View File

@ -693,7 +693,7 @@ GEM
scenic (1.8.0)
activerecord (>= 4.0.0)
railties (>= 4.0.0)
selenium-webdriver (4.19.0)
selenium-webdriver (4.20.1)
base64 (~> 0.2)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
@ -952,7 +952,7 @@ DEPENDENCIES
xorcist (~> 1.1)
RUBY VERSION
ruby 3.2.3p157
ruby 3.3.1p55
BUNDLED WITH
2.5.9

View File

@ -3,7 +3,7 @@ import { List as ImmutableList } from 'immutable';
import { debounce } from 'lodash';
import type { MarkerJSON } from 'mastodon/api_types/markers';
import type { RootState } from 'mastodon/store';
import type { AppDispatch, RootState } from 'mastodon/store';
import { createAppAsyncThunk } from 'mastodon/store/typed_functions';
import api, { authorizationTokenFromState } from '../api';
@ -72,18 +72,21 @@ interface MarkerParam {
}
function getLastHomeId(state: RootState): string | undefined {
/* eslint-disable @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access */
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
return (
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
state
// @ts-expect-error state.timelines is not yet typed
.getIn(['timelines', 'home', 'items'], ImmutableList())
// @ts-expect-error state.timelines is not yet typed
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
.find((item) => item !== null)
);
}
function getLastNotificationId(state: RootState): string | undefined {
// @ts-expect-error state.notifications is not yet typed
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call
return state.getIn(['notifications', 'lastReadId']);
}
@ -131,8 +134,8 @@ export const submitMarkersAction = createAppAsyncThunk<{
});
const debouncedSubmitMarkers = debounce(
(dispatch) => {
dispatch(submitMarkersAction());
(dispatch: AppDispatch) => {
void dispatch(submitMarkersAction());
},
300000,
{

View File

@ -0,0 +1,88 @@
import PropTypes from 'prop-types';
import { useCallback } from 'react';
import { FormattedMessage, useIntl, defineMessages } from 'react-intl';
import { Link } from 'react-router-dom';
import { useDispatch, useSelector } from 'react-redux';
import CloseIcon from '@/material-icons/400-24px/close.svg?react';
import { followAccount, unfollowAccount } from 'mastodon/actions/accounts';
import { dismissSuggestion } from 'mastodon/actions/suggestions';
import { Avatar } from 'mastodon/components/avatar';
import { Button } from 'mastodon/components/button';
import { DisplayName } from 'mastodon/components/display_name';
import { IconButton } from 'mastodon/components/icon_button';
import { domain } from 'mastodon/initial_state';
const messages = defineMessages({
follow: { id: 'account.follow', defaultMessage: 'Follow' },
unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' },
dismiss: { id: 'follow_suggestions.dismiss', defaultMessage: "Don't show again" },
});
export const Card = ({ id, source }) => {
const intl = useIntl();
const account = useSelector(state => state.getIn(['accounts', id]));
const relationship = useSelector(state => state.getIn(['relationships', id]));
const dispatch = useDispatch();
const following = relationship?.get('following') ?? relationship?.get('requested');
const handleFollow = useCallback(() => {
if (following) {
dispatch(unfollowAccount(id));
} else {
dispatch(followAccount(id));
}
}, [id, following, dispatch]);
const handleDismiss = useCallback(() => {
dispatch(dismissSuggestion(id));
}, [id, dispatch]);
let label;
switch (source) {
case 'friends_of_friends':
label = <FormattedMessage id='follow_suggestions.friends_of_friends_longer' defaultMessage='Popular among people you follow' />;
break;
case 'similar_to_recently_followed':
label = <FormattedMessage id='follow_suggestions.similar_to_recently_followed_longer' defaultMessage='Similar to profiles you recently followed' />;
break;
case 'featured':
label = <FormattedMessage id='follow_suggestions.featured_longer' defaultMessage='Hand-picked by the {domain} team' values={{ domain }} />;
break;
case 'most_followed':
label = <FormattedMessage id='follow_suggestions.popular_suggestion_longer' defaultMessage='Popular on {domain}' values={{ domain }} />;
break;
case 'most_interactions':
label = <FormattedMessage id='follow_suggestions.popular_suggestion_longer' defaultMessage='Popular on {domain}' values={{ domain }} />;
break;
}
return (
<div className='explore__suggestions__card'>
<div className='explore__suggestions__card__source'>
{label}
</div>
<div className='explore__suggestions__card__body'>
<Link to={`/@${account.get('acct')}`}><Avatar account={account} size={48} /></Link>
<div className='explore__suggestions__card__body__main'>
<div className='explore__suggestions__card__body__main__name-button'>
<Link className='explore__suggestions__card__body__main__name-button__name' to={`/@${account.get('acct')}`}><DisplayName account={account} /></Link>
<IconButton iconComponent={CloseIcon} onClick={handleDismiss} title={intl.formatMessage(messages.dismiss)} />
<Button text={intl.formatMessage(following ? messages.unfollow : messages.follow)} secondary={following} onClick={handleFollow} />
</div>
</div>
</div>
</div>
);
};
Card.propTypes = {
id: PropTypes.string.isRequired,
source: PropTypes.oneOf(['friends_of_friends', 'similar_to_recently_followed', 'featured', 'most_followed', 'most_interactions']),
};

View File

@ -10,9 +10,10 @@ import { connect } from 'react-redux';
import { fetchSuggestions } from 'mastodon/actions/suggestions';
import { LoadingIndicator } from 'mastodon/components/loading_indicator';
import AccountCard from 'mastodon/features/directory/components/account_card';
import { WithRouterPropTypes } from 'mastodon/utils/react_router';
import { Card } from './components/card';
const mapStateToProps = state => ({
suggestions: state.getIn(['suggestions', 'items']),
isLoading: state.getIn(['suggestions', 'isLoading']),
@ -54,7 +55,11 @@ class Suggestions extends PureComponent {
return (
<div className='explore__suggestions scrollable' data-nosnippet>
{isLoading ? <LoadingIndicator /> : suggestions.map(suggestion => (
<AccountCard key={suggestion.get('account')} id={suggestion.get('account')} />
<Card
key={suggestion.get('account')}
id={suggestion.get('account')}
source={suggestion.getIn(['sources', 0])}
/>
))}
</div>
);

View File

@ -0,0 +1,78 @@
import { defineMessages, FormattedMessage, useIntl } from 'react-intl';
import GavelIcon from '@/material-icons/400-24px/gavel.svg?react';
import { Icon } from 'mastodon/components/icon';
// This needs to be kept in sync with app/models/account_warning.rb
const messages = defineMessages({
none: {
id: 'notification.moderation_warning.action_none',
defaultMessage: 'Your account has received a moderation warning.',
},
disable: {
id: 'notification.moderation_warning.action_disable',
defaultMessage: 'Your account has been disabled.',
},
mark_statuses_as_sensitive: {
id: 'notification.moderation_warning.action_mark_statuses_as_sensitive',
defaultMessage: 'Some of your posts have been marked as sensitive.',
},
delete_statuses: {
id: 'notification.moderation_warning.action_delete_statuses',
defaultMessage: 'Some of your posts have been removed.',
},
sensitive: {
id: 'notification.moderation_warning.action_sensitive',
defaultMessage: 'Your posts will be marked as sensitive from now on.',
},
silence: {
id: 'notification.moderation_warning.action_silence',
defaultMessage: 'Your account has been limited.',
},
suspend: {
id: 'notification.moderation_warning.action_suspend',
defaultMessage: 'Your account has been suspended.',
},
});
interface Props {
action:
| 'none'
| 'disable'
| 'mark_statuses_as_sensitive'
| 'delete_statuses'
| 'sensitive'
| 'silence'
| 'suspend';
id: string;
hidden: boolean;
}
export const ModerationWarning: React.FC<Props> = ({ action, id, hidden }) => {
const intl = useIntl();
if (hidden) {
return null;
}
return (
<a
href={`/disputes/strikes/${id}`}
target='_blank'
rel='noopener noreferrer'
className='notification__moderation-warning'
>
<Icon id='warning' icon={GavelIcon} />
<div className='notification__moderation-warning__content'>
<p>{intl.formatMessage(messages[action])}</p>
<span className='link-button'>
<FormattedMessage
id='notification.moderation-warning.learn_more'
defaultMessage='Learn more'
/>
</span>
</div>
</a>
);
};

View File

@ -26,6 +26,7 @@ import { WithRouterPropTypes } from 'mastodon/utils/react_router';
import FollowRequestContainer from '../containers/follow_request_container';
import { ModerationWarning } from './moderation_warning';
import { RelationshipsSeveranceEvent } from './relationships_severance_event';
import Report from './report';
@ -40,6 +41,7 @@ const messages = defineMessages({
adminSignUp: { id: 'notification.admin.sign_up', defaultMessage: '{name} signed up' },
adminReport: { id: 'notification.admin.report', defaultMessage: '{name} reported {target}' },
relationshipsSevered: { id: 'notification.relationships_severance_event', defaultMessage: 'Lost connections with {name}' },
moderationWarning: { id: 'notification.moderation_warning', defaultMessage: 'Your have received a moderation warning' },
});
const notificationForScreenReader = (intl, message, timestamp) => {
@ -383,6 +385,27 @@ class Notification extends ImmutablePureComponent {
);
}
renderModerationWarning (notification) {
const { intl, unread, hidden } = this.props;
const warning = notification.get('moderation_warning');
if (!warning) {
return null;
}
return (
<HotKeys handlers={this.getHandlers()}>
<div className={classNames('notification notification-moderation-warning focusable', { unread })} tabIndex={0} aria-label={notificationForScreenReader(intl, intl.formatMessage(messages.moderationWarning), notification.get('created_at'))}>
<ModerationWarning
action={warning.get('action')}
id={warning.get('id')}
hidden={hidden}
/>
</div>
</HotKeys>
);
}
renderAdminSignUp (notification, account, link) {
const { intl, unread } = this.props;
@ -456,6 +479,8 @@ class Notification extends ImmutablePureComponent {
return this.renderPoll(notification, account);
case 'severed_relationships':
return this.renderRelationshipsSevered(notification);
case 'moderation_warning':
return this.renderModerationWarning(notification);
case 'admin.sign_up':
return this.renderAdminSignUp(notification, account, link);
case 'admin.report':

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Tot i que el teu compte no està blocat, el personal de {domain} ha pensat que és possible que vulguis revisar manualment les sol·licituds de seguiment daquests comptes.",
"follow_suggestions.curated_suggestion": "Tria de l'equip",
"follow_suggestions.dismiss": "No ho tornis a mostrar",
"follow_suggestions.featured_longer": "Triat personalment per l'equip de {domain}",
"follow_suggestions.friends_of_friends_longer": "Popular entre la gent que segueixes",
"follow_suggestions.hints.featured": "L'equip de {domain} ha seleccionat aquest perfil.",
"follow_suggestions.hints.friends_of_friends": "Aquest perfil és popular entre la gent que seguiu.",
"follow_suggestions.hints.most_followed": "Aquest perfil és un dels més seguits a {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Aquest perfil és similar a d'altres que heu seguit recentment.",
"follow_suggestions.personalized_suggestion": "Suggeriment personalitzat",
"follow_suggestions.popular_suggestion": "Suggeriment popular",
"follow_suggestions.popular_suggestion_longer": "Popular a {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Semblant a perfils que has seguit fa poc",
"follow_suggestions.view_all": "Mostra-ho tot",
"follow_suggestions.who_to_follow": "A qui seguir",
"followed_tags": "Etiquetes seguides",

View File

@ -306,6 +306,8 @@
"follow_requests.unlocked_explanation": "Selvom din konto ikke er låst, synes {domain}-personalet, du måske bør gennemgå disse anmodninger manuelt.",
"follow_suggestions.curated_suggestion": "Personaleudvalgt",
"follow_suggestions.dismiss": "Vis ikke igen",
"follow_suggestions.featured_longer": "Håndplukket af {domain}-teamet",
"follow_suggestions.friends_of_friends_longer": "Populært blandt personer, som følges",
"follow_suggestions.hints.featured": "Denne profil er håndplukket af {domain}-teamet.",
"follow_suggestions.hints.friends_of_friends": "Denne profil er populær blandt de personer, som følges.",
"follow_suggestions.hints.most_followed": "Denne profil er en af de mest fulgte på {domain}.",
@ -313,6 +315,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Denne profil svarer til de profiler, som senest er blevet fulgt.",
"follow_suggestions.personalized_suggestion": "Personligt forslag",
"follow_suggestions.popular_suggestion": "Populært forslag",
"follow_suggestions.popular_suggestion_longer": "Populært på {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Svarende til profiler, som for nylig er fulgt",
"follow_suggestions.view_all": "Vis alle",
"follow_suggestions.who_to_follow": "Hvem, som skal følges",
"followed_tags": "Hashtag, som følges",
@ -467,6 +471,15 @@
"notification.follow": "{name} begyndte at følge dig",
"notification.follow_request": "{name} har anmodet om at følge dig",
"notification.mention": "{name} nævnte dig",
"notification.moderation-warning.learn_more": "Læs mere",
"notification.moderation_warning": "Du er tildelt en moderationsadvarsel",
"notification.moderation_warning.action_delete_statuses": "Nogle af dine indlæg er blevet fjernet.",
"notification.moderation_warning.action_disable": "Din konto er blevet deaktiveret.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Nogle af dine indlæg er blevet markeret som sensitive.",
"notification.moderation_warning.action_none": "Din konto er tildelt en moderationsadvarsel.",
"notification.moderation_warning.action_sensitive": "Dine indlæg markeres fra nu af som sensitive.",
"notification.moderation_warning.action_silence": "Din konto er blevet begrænset.",
"notification.moderation_warning.action_suspend": "Din konto er suspenderet.",
"notification.own_poll": "Din afstemning er afsluttet",
"notification.poll": "En afstemning, hvori du stemte, er slut",
"notification.reblog": "{name} boostede dit indlæg",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Auch wenn dein Konto öffentlich bzw. nicht geschützt ist, haben die Moderator*innen von {domain} gedacht, dass du diesen Follower lieber manuell bestätigen solltest.",
"follow_suggestions.curated_suggestion": "Vom Server-Team empfohlen",
"follow_suggestions.dismiss": "Nicht mehr anzeigen",
"follow_suggestions.featured_longer": "Vom {domain}-Team ausgewählt",
"follow_suggestions.friends_of_friends_longer": "Beliebt bei Leuten, denen du folgst",
"follow_suggestions.hints.featured": "Dieses Profil wurde vom {domain}-Team ausgewählt.",
"follow_suggestions.hints.friends_of_friends": "Dieses Profil ist bei deinen Followern beliebt.",
"follow_suggestions.hints.most_followed": "Dieses Profil ist eines der am meisten gefolgten auf {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Dieses Profil ähnelt den Profilen, denen du in letzter Zeit gefolgt hast.",
"follow_suggestions.personalized_suggestion": "Persönliche Empfehlung",
"follow_suggestions.popular_suggestion": "Beliebte Empfehlung",
"follow_suggestions.popular_suggestion_longer": "Beliebt auf {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Ähnlich zu Profilen, denen du seit kurzem folgst",
"follow_suggestions.view_all": "Alle anzeigen",
"follow_suggestions.who_to_follow": "Empfohlene Profile",
"followed_tags": "Gefolgte Hashtags",
@ -469,6 +473,15 @@
"notification.follow": "{name} folgt dir",
"notification.follow_request": "{name} möchte dir folgen",
"notification.mention": "{name} erwähnte dich",
"notification.moderation-warning.learn_more": "Mehr erfahren",
"notification.moderation_warning": "Du wurdest von den Moderator*innen verwarnt",
"notification.moderation_warning.action_delete_statuses": "Einige deiner Beiträge sind entfernt worden.",
"notification.moderation_warning.action_disable": "Dein Konto wurde deaktiviert.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Einige deiner Beiträge wurden mit einer Inhaltswarnung versehen.",
"notification.moderation_warning.action_none": "Dein Konto ist von den Moderator*innen verwarnt worden.",
"notification.moderation_warning.action_sensitive": "Deine zukünftigen Beiträge werden mit einer Inhaltswarnung versehen.",
"notification.moderation_warning.action_silence": "Dein Konto wurde eingeschränkt.",
"notification.moderation_warning.action_suspend": "Dein Konto wurde gesperrt.",
"notification.own_poll": "Deine Umfrage ist beendet",
"notification.poll": "Eine Umfrage, an der du teilgenommen hast, ist beendet",
"notification.reblog": "{name} teilte deinen Beitrag",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
"follow_suggestions.curated_suggestion": "Staff pick",
"follow_suggestions.dismiss": "Don't show again",
"follow_suggestions.featured_longer": "Hand-picked by the {domain} team",
"follow_suggestions.friends_of_friends_longer": "Popular among people you follow",
"follow_suggestions.hints.featured": "This profile has been hand-picked by the {domain} team.",
"follow_suggestions.hints.friends_of_friends": "This profile is popular among the people you follow.",
"follow_suggestions.hints.most_followed": "This profile is one of the most followed on {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "This profile is similar to the profiles you have most recently followed.",
"follow_suggestions.personalized_suggestion": "Personalized suggestion",
"follow_suggestions.popular_suggestion": "Popular suggestion",
"follow_suggestions.popular_suggestion_longer": "Popular on {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Similar to profiles you recently followed",
"follow_suggestions.view_all": "View all",
"follow_suggestions.who_to_follow": "Who to follow",
"followed_tags": "Followed hashtags",
@ -469,6 +473,15 @@
"notification.follow": "{name} followed you",
"notification.follow_request": "{name} has requested to follow you",
"notification.mention": "{name} mentioned you",
"notification.moderation-warning.learn_more": "Learn more",
"notification.moderation_warning": "Your have received a moderation warning",
"notification.moderation_warning.action_delete_statuses": "Some of your posts have been removed.",
"notification.moderation_warning.action_disable": "Your account has been disabled.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Some of your posts have been marked as sensitive.",
"notification.moderation_warning.action_none": "Your account has received a moderation warning.",
"notification.moderation_warning.action_sensitive": "Your posts will be marked as sensitive from now on.",
"notification.moderation_warning.action_silence": "Your account has been limited.",
"notification.moderation_warning.action_suspend": "Your account has been suspended.",
"notification.own_poll": "Your poll has ended",
"notification.poll": "A poll you have voted in has ended",
"notification.reblog": "{name} boosted your post",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Zure kontua blokeatuta ez badago ere, {domain} domeinuko arduradunek uste dute kontu hauetako jarraipen eskaerak agian eskuz begiratu nahiko dituzula.",
"follow_suggestions.curated_suggestion": "Domeinuaren iradokizuna",
"follow_suggestions.dismiss": "Ez erakutsi berriro",
"follow_suggestions.featured_longer": "{domain} domeinuko taldeak hautaturikoak",
"follow_suggestions.friends_of_friends_longer": "Jarraitzen duzun jendearen artean ezagunak direnak",
"follow_suggestions.hints.featured": "Profil hau {domain} domeinuko taldeak eskuz aukeratu du.",
"follow_suggestions.hints.friends_of_friends": "Profil hau ezaguna da jarraitzen duzun jendearen artean.",
"follow_suggestions.hints.most_followed": "Profil hau {domain} domeinuan gehien jarraitzen den profiletako bat da.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Profil hau duela gutxi jarraitu dituzun profil askoren antzekoa da.",
"follow_suggestions.personalized_suggestion": "Iradokizun pertsonalizatua",
"follow_suggestions.popular_suggestion": "Iradokizun ezaguna",
"follow_suggestions.popular_suggestion_longer": "{domain} domeinuan ezagunak direnak",
"follow_suggestions.similar_to_recently_followed_longer": "Berriki jarraitu dituzun profilen antzekoa",
"follow_suggestions.view_all": "Ikusi denak",
"follow_suggestions.who_to_follow": "Zein jarraitu",
"followed_tags": "Jarraitutako traolak",
@ -469,6 +473,15 @@
"notification.follow": "{name}(e)k jarraitzen dizu",
"notification.follow_request": "{name}(e)k zu jarraitzeko eskaera egin du",
"notification.mention": "{name}(e)k aipatu zaitu",
"notification.moderation-warning.learn_more": "Informazio gehiago",
"notification.moderation_warning": "Moderazio-abisu bat jaso duzu",
"notification.moderation_warning.action_delete_statuses": "Argitalpen batzuk kendu dira.",
"notification.moderation_warning.action_disable": "Zure kontua desaktibatua izan da.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Argitalpen batzuk hunkigarri gisa ezarri dira.",
"notification.moderation_warning.action_none": "Kontuak moderazio-abisu bat jaso du.",
"notification.moderation_warning.action_sensitive": "Argitalpenak hunkigarri gisa markatuko dira hemendik aurrera.",
"notification.moderation_warning.action_silence": "Kontua murriztu egin da.",
"notification.moderation_warning.action_suspend": "Kontua itxi da.",
"notification.own_poll": "Zure inkesta amaitu da",
"notification.poll": "Zuk erantzun duzun inkesta bat bukatu da",
"notification.reblog": "{name}(e)k bultzada eman dio zure bidalketari",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Vaikkei tiliäsi ole lukittu, palvelimen {domain} ylläpito on arvioinut, että saatat olla halukas tarkistamaan nämä seuraamispyynnöt erikseen.",
"follow_suggestions.curated_suggestion": "Ehdotus ylläpidolta",
"follow_suggestions.dismiss": "Älä näytä uudelleen",
"follow_suggestions.featured_longer": "Käsin valinnut palvelimen {domain} tiimi",
"follow_suggestions.friends_of_friends_longer": "Suosittu seuraamiesi ihmisten keskuudessa",
"follow_suggestions.hints.featured": "Tämän profiilin on valinnut palvelimen {domain} tiimi.",
"follow_suggestions.hints.friends_of_friends": "Seuraamasi käyttäjät suosivat tätä profiilia.",
"follow_suggestions.hints.most_followed": "Tämä profiili on palvelimen {domain} seuratuimpia.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Tämä profiili on samankaltainen kuin profiilit, joita olet viimeksi seurannut.",
"follow_suggestions.personalized_suggestion": "Mukautettu ehdotus",
"follow_suggestions.popular_suggestion": "Suosittu ehdotus",
"follow_suggestions.popular_suggestion_longer": "Suosittu palvelimella {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Samankaltainen kuin äskettäin seuraamasi profiilit",
"follow_suggestions.view_all": "Näytä kaikki",
"follow_suggestions.who_to_follow": "Ehdotuksia seurattavaksi",
"followed_tags": "Seuratut aihetunnisteet",
@ -469,6 +473,15 @@
"notification.follow": "{name} seurasi sinua",
"notification.follow_request": "{name} on pyytänyt lupaa saada seurata sinua",
"notification.mention": "{name} mainitsi sinut",
"notification.moderation-warning.learn_more": "Lue lisää",
"notification.moderation_warning": "Olet saanut moderointivaroituksen",
"notification.moderation_warning.action_delete_statuses": "Jotkin julkaisusi on poistettu.",
"notification.moderation_warning.action_disable": "Tilisi on poistettu käytöstä.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Jotkin julkaisusi on merkitty arkaluonteisiksi.",
"notification.moderation_warning.action_none": "Tilisi on saanut moderointivaroituksen.",
"notification.moderation_warning.action_sensitive": "Tästä lähtien julkaisusi merkitään arkaluonteisiksi.",
"notification.moderation_warning.action_silence": "Tiliäsi on rajoitettu.",
"notification.moderation_warning.action_suspend": "Tilisi on jäädytetty.",
"notification.own_poll": "Äänestyksesi on päättynyt",
"notification.poll": "Kysely, johon osallistuit, on päättynyt",
"notification.reblog": "{name} tehosti julkaisuasi",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Sjálvt um konta tín ikki er læst, so hugsa {domain} starvsfólkini, at tú kanska hevur hug at kanna umbønir um at fylgja frá hesum kontum við hond.",
"follow_suggestions.curated_suggestion": "Val hjá ábyrgdarfólki",
"follow_suggestions.dismiss": "Lat vera við at vísa",
"follow_suggestions.featured_longer": "Vald burturúr av {domain} toyminum",
"follow_suggestions.friends_of_friends_longer": "Vælumtókt millum fólk, sum tú fylgir",
"follow_suggestions.hints.featured": "Hesin vangin er úrvaldur av toyminum handan {domain}.",
"follow_suggestions.hints.friends_of_friends": "Hesin vangin er vælumtóktur millum tey, tú fylgir.",
"follow_suggestions.hints.most_followed": "Hesin vangin er ein av teimum, sum er mest fylgdur á {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Hesin vangin líkist teimum, sum tú nýliga hevur fylgt.",
"follow_suggestions.personalized_suggestion": "Persónligt uppskot",
"follow_suggestions.popular_suggestion": "Vælumtókt uppskot",
"follow_suggestions.popular_suggestion_longer": "Vælumtókt á {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Líkist vangum, sum tú nýliga hevur fylgt",
"follow_suggestions.view_all": "Vís øll",
"follow_suggestions.who_to_follow": "Hvørji tú átti at fylgt",
"followed_tags": "Fylgd frámerki",
@ -469,6 +473,15 @@
"notification.follow": "{name} fylgdi tær",
"notification.follow_request": "{name} biður um at fylgja tær",
"notification.mention": "{name} nevndi teg",
"notification.moderation-warning.learn_more": "Lær meira",
"notification.moderation_warning": "Tú hevur móttikið eina umsjónarávarðing",
"notification.moderation_warning.action_delete_statuses": "Onkrir av tínum postum eru strikaðir.",
"notification.moderation_warning.action_disable": "Konta tín er gjørd óvirkin.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Nakrir av postum tínum eru merktir sum viðkvæmir.",
"notification.moderation_warning.action_none": "Konta tín hevur móttikið eina umsjónarávarðing.",
"notification.moderation_warning.action_sensitive": "Postar tínir verða merktir sum viðkvæmir frá nú av.",
"notification.moderation_warning.action_silence": "Konta tín er avmarkað.",
"notification.moderation_warning.action_suspend": "Konta tín er ógildað.",
"notification.own_poll": "Tín atkvøðugreiðsla er endað",
"notification.poll": "Ein atkvøðugreiðsla, har tú hevur atkvøtt, er endað",
"notification.reblog": "{name} lyfti tín post",

View File

@ -297,6 +297,7 @@
"filter_modal.select_filter.subtitle": "Cleachd roinn-seòrsa a tha ann no cruthaich tè ùr",
"filter_modal.select_filter.title": "Criathraich am post seo",
"filter_modal.title.status": "Criathraich post",
"filtered_notifications_banner.mentions": "{count, plural, one {iomradh} two {iomradh} few {iomraidhean} other {iomradh}}",
"filtered_notifications_banner.pending_requests": "{count, plural, =0 {Chan eil brath ann o dhaoine} one {Tha brathan ann o # neach} two {Tha brathan ann o # neach} few {Tha brathan ann o # daoine} other {Tha brathan ann o # duine}} air a bheil thu eòlach s dòcha",
"filtered_notifications_banner.title": "Brathan criathraichte",
"firehose.all": "Na h-uile",
@ -307,6 +308,7 @@
"follow_requests.unlocked_explanation": "Ged nach eil an cunntas agad glaiste, tha sgioba {domain} dhen bheachd gum b fheàirrde thu lèirmheas a dhèanamh air na h-iarrtasan leantainn o na cunntasan seo a làimh.",
"follow_suggestions.curated_suggestion": "Roghainn an sgioba",
"follow_suggestions.dismiss": "Na seall seo a-rithist",
"follow_suggestions.friends_of_friends_longer": "Fèill mhòr am measg nan daoine a leanas tu",
"follow_suggestions.hints.featured": "Chaidh a phròifil seo a thaghadh le sgioba {domain} a làimh.",
"follow_suggestions.hints.friends_of_friends": "Tha fèill mhòr air a phròifil seo am measg nan daoine a leanas tu.",
"follow_suggestions.hints.most_followed": "Tha a phròifil seo am measg an fheadhainn a leanar as trice air {domain}.",
@ -314,6 +316,7 @@
"follow_suggestions.hints.similar_to_recently_followed": "Tha a phròifil seo coltach ris na pròifilean air an lean thu o chionn goirid.",
"follow_suggestions.personalized_suggestion": "Moladh pearsanaichte",
"follow_suggestions.popular_suggestion": "Moladh air a bheil fèill mhòr",
"follow_suggestions.popular_suggestion_longer": "Fèill mhòr air {domain}",
"follow_suggestions.view_all": "Seall na h-uile",
"follow_suggestions.who_to_follow": "Molaidhean leantainn",
"followed_tags": "Tagaichean hais gan leantainn",
@ -468,6 +471,7 @@
"notification.follow": "Tha {name} gad leantainn a-nis",
"notification.follow_request": "Dhiarr {name} gad leantainn",
"notification.mention": "Thug {name} iomradh ort",
"notification.moderation-warning.learn_more": "Barrachd fiosrachaidh",
"notification.own_poll": "Thàinig an cunntas-bheachd agad gu crìoch",
"notification.poll": "Thàinig cunntas-bheachd sa bhòt thu gu crìoch",
"notification.reblog": "Bhrosnaich {name} am post agad",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Malia que a túa conta non é privada, a administración de {domain} pensou que quizabes terías que revisar de xeito manual as solicitudes de seguiminto.",
"follow_suggestions.curated_suggestion": "Suxestións do Servidor",
"follow_suggestions.dismiss": "Non mostrar máis",
"follow_suggestions.featured_longer": "Elección persoal do equipo de {domain}",
"follow_suggestions.friends_of_friends_longer": "Popular entre as persoas que sigues",
"follow_suggestions.hints.featured": "Este perfil foi escollido pola administración de {domain}.",
"follow_suggestions.hints.friends_of_friends": "Este perfil é popular entre as persoas que segues.",
"follow_suggestions.hints.most_followed": "Este perfil é un dos máis seguidos en {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Este perfil ten semellanzas cos perfís que ti seguiches últimamente.",
"follow_suggestions.personalized_suggestion": "Suxestión personalizada",
"follow_suggestions.popular_suggestion": "Suxestión popular",
"follow_suggestions.popular_suggestion_longer": "Popular en {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Perfís semellantes aos que seguiches recentemente",
"follow_suggestions.view_all": "Ver todas",
"follow_suggestions.who_to_follow": "A quen seguir",
"followed_tags": "Cancelos seguidos",
@ -469,6 +473,15 @@
"notification.follow": "{name} comezou a seguirte",
"notification.follow_request": "{name} solicitou seguirte",
"notification.mention": "{name} mencionoute",
"notification.moderation-warning.learn_more": "Saber máis",
"notification.moderation_warning": "Recibiches unha advertencia da moderación",
"notification.moderation_warning.action_delete_statuses": "Algunha das túas publicacións foron eliminadas.",
"notification.moderation_warning.action_disable": "A túa conta foi desactivada.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Algunha das túas publicacións foron marcadas como sensibles.",
"notification.moderation_warning.action_none": "A túa conta recibeu unha advertencia da moderación.",
"notification.moderation_warning.action_sensitive": "De agora en diante as túas publicacións van ser marcadas como sensibles.",
"notification.moderation_warning.action_silence": "A túa conta foi limitada.",
"notification.moderation_warning.action_suspend": "A túa conta foi suspendida.",
"notification.own_poll": "A túa enquisa rematou",
"notification.poll": "Rematou a enquisa na que votaches",
"notification.reblog": "{name} compartiu a túa publicación",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "למרות שחשבונך אינו נעול, צוות {domain} חושב שאולי כדאי לוודא את בקשות המעקב האלה ידנית.",
"follow_suggestions.curated_suggestion": "בחירת הצוות",
"follow_suggestions.dismiss": "לא להציג שוב",
"follow_suggestions.featured_longer": "נבחר ידנית על ידי הצוות של {domain}",
"follow_suggestions.friends_of_friends_longer": "פופולרי בין הנעקבים שלך",
"follow_suggestions.hints.featured": "החשבון הזה נבחר אישית על ידי צוות {domain}.",
"follow_suggestions.hints.friends_of_friends": "חשבון זה פופולרי בין הנעקבים שלך.",
"follow_suggestions.hints.most_followed": "חשבון זה הוא מבין הנעקבים ביותר בשרת {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "חשבון זה דומה לחשבונות אחרים שאחריהם התחלת לעקוב לאחרונה.",
"follow_suggestions.personalized_suggestion": "הצעות מותאמות אישית",
"follow_suggestions.popular_suggestion": "הצעה פופולרית",
"follow_suggestions.popular_suggestion_longer": "פופולרי בקהילת {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "דומה למשתמשות.ים שעקבת אחריהן.ם לאחרונה",
"follow_suggestions.view_all": "צפיה בכל",
"follow_suggestions.who_to_follow": "אחרי מי לעקוב",
"followed_tags": "התגיות שהחשבון שלך עוקב אחריהן",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Bár a fiókod nincs zárolva, a(z) {domain} csapata úgy gondolta, hogy talán kézzel szeretnéd ellenőrizni ezen fiókok követési kéréseit.",
"follow_suggestions.curated_suggestion": "A stáb választása",
"follow_suggestions.dismiss": "Ne jelenjen meg újra",
"follow_suggestions.featured_longer": "A {domain} csapata által kézzel kiválasztott",
"follow_suggestions.friends_of_friends_longer": "Népszerű az Ön által követett emberek körében",
"follow_suggestions.hints.featured": "Ezt a profilt a(z) {domain} csapata választotta ki.",
"follow_suggestions.hints.friends_of_friends": "Ez a profil népszerű az általad követett emberek körében.",
"follow_suggestions.hints.most_followed": "Ez a profil a leginkább követett a(z) {domain} oldalon.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Ez a profil hasonló azokhoz a profilokhoz, melyeket nemrég kezdtél el követni.",
"follow_suggestions.personalized_suggestion": "Személyre szabott javaslat",
"follow_suggestions.popular_suggestion": "Népszerű javaslat",
"follow_suggestions.popular_suggestion_longer": "Népszerű itt: {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Hasonló profilok, melyeket nemrég követett",
"follow_suggestions.view_all": "Összes megtekintése",
"follow_suggestions.who_to_follow": "Kit érdemes követni",
"followed_tags": "Követett hashtagek",
@ -469,6 +473,15 @@
"notification.follow": "{name} követ téged",
"notification.follow_request": "{name} követni szeretne téged",
"notification.mention": "{name} megemlített",
"notification.moderation-warning.learn_more": "További információk",
"notification.moderation_warning": "Moderációs figyelmeztetést kaptál",
"notification.moderation_warning.action_delete_statuses": "Néhány bejegyzésedet eltávolították.",
"notification.moderation_warning.action_disable": "A fiókod le van tiltva.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Néhány bejegyzésedet kényesnek jelölték.",
"notification.moderation_warning.action_none": "A fiókod moderációs figyelmeztetést kapott.",
"notification.moderation_warning.action_sensitive": "A bejegyzéseid mostantól érzékenynek lesznek jelölve.",
"notification.moderation_warning.action_silence": "A fiókod korlátozásra került.",
"notification.moderation_warning.action_suspend": "A fiókod felfüggesztésre került.",
"notification.own_poll": "A szavazásod véget ért",
"notification.poll": "Egy szavazás, melyben részt vettél, véget ért",
"notification.reblog": "{name} megtolta a bejegyzésedet",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Jafnvel þótt aðgangurinn þinn sé ekki læstur, hafa umsjónarmenn {domain} ímyndað sér að þú gætir viljað yfirfara handvirkt fylgjendabeiðnir frá þessum notendum.",
"follow_suggestions.curated_suggestion": "Úrval starfsfólks",
"follow_suggestions.dismiss": "Ekki birta þetta aftur",
"follow_suggestions.featured_longer": "Handvalið af {domain}-teyminu",
"follow_suggestions.friends_of_friends_longer": "Vinsælt hjá fólki sem þú fylgist með",
"follow_suggestions.hints.featured": "Þetta notandasnið hefur verið handvalið af {domain}-teyminu.",
"follow_suggestions.hints.friends_of_friends": "Þetta notandasnið er vinsælt hjá fólki sem þú fylgist með.",
"follow_suggestions.hints.most_followed": "Þetta notandasnið er eitt af þeim sem mest er fylgst með á {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Þetta notandasnið er líkt þeim sniðum sem þú hefur valið að fylgjast með að undanförnu.",
"follow_suggestions.personalized_suggestion": "Persónuaðlöguð tillaga",
"follow_suggestions.popular_suggestion": "Vinsæl tillaga",
"follow_suggestions.popular_suggestion_longer": "Vinsælt á {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Svipar til notenda sem þú hefur nýlega farið að fylgjast með",
"follow_suggestions.view_all": "Skoða allt",
"follow_suggestions.who_to_follow": "Hverjum á að fylgjast með",
"followed_tags": "Myllumerki sem fylgst er með",
@ -469,6 +473,15 @@
"notification.follow": "{name} fylgist með þér",
"notification.follow_request": "{name} hefur beðið um að fylgjast með þér",
"notification.mention": "{name} minntist á þig",
"notification.moderation-warning.learn_more": "Kanna nánar",
"notification.moderation_warning": "Þú hefur fengið aðvörun frá umsjónarmanni",
"notification.moderation_warning.action_delete_statuses": "Sumar færslurnar þínar hafa verið fjarlægðar.",
"notification.moderation_warning.action_disable": "Aðgangurinn þinn hefur verið gerður óvirkur.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Sumar færslurnar þínar hafa verið merktar sem viðkvæmt efni.",
"notification.moderation_warning.action_none": "Aðgangurinn þinn hefur fengið aðvörun frá umsjónarmanni.",
"notification.moderation_warning.action_sensitive": "Færslur þínar á verða héðan í frá merktar sem viðkvæmar.",
"notification.moderation_warning.action_silence": "Notandaaðgangurinn þinn hefur verið takmarkaður.",
"notification.moderation_warning.action_suspend": "Notandaaðgangurinn þinn hefur verið settur í frysti.",
"notification.own_poll": "Könnuninni þinni er lokið",
"notification.poll": "Könnun sem þú tókst þátt í er lokið",
"notification.reblog": "{name} endurbirti færsluna þína",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Anche se il tuo profilo non è privato, lo staff di {domain} ha pensato che potresti voler revisionare manualmente le richieste di seguirti da questi profili.",
"follow_suggestions.curated_suggestion": "Scelta personale",
"follow_suggestions.dismiss": "Non visualizzare più",
"follow_suggestions.featured_longer": "Selezionato personalmente dal team di {domain}",
"follow_suggestions.friends_of_friends_longer": "Popolare tra le persone che segui",
"follow_suggestions.hints.featured": "Questo profilo è stato selezionato personalmente dal team di {domain}.",
"follow_suggestions.hints.friends_of_friends": "Questo profilo è popolare tra le persone che segui.",
"follow_suggestions.hints.most_followed": "Questo profilo è uno dei più seguiti su {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Questo profilo è simile ai profili che hai seguito più recentemente.",
"follow_suggestions.personalized_suggestion": "Suggerimenti personalizzati",
"follow_suggestions.popular_suggestion": "Suggerimento frequente",
"follow_suggestions.popular_suggestion_longer": "Popolare su {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Simile ai profili che hai seguito di recente",
"follow_suggestions.view_all": "Vedi tutto",
"follow_suggestions.who_to_follow": "Chi seguire",
"followed_tags": "Hashtag seguiti",
@ -469,6 +473,15 @@
"notification.follow": "{name} ha iniziato a seguirti",
"notification.follow_request": "{name} ha richiesto di seguirti",
"notification.mention": "{name} ti ha menzionato",
"notification.moderation-warning.learn_more": "Scopri di più",
"notification.moderation_warning": "Hai ricevuto un avviso di moderazione",
"notification.moderation_warning.action_delete_statuses": "Alcuni dei tuoi post sono stati rimossi.",
"notification.moderation_warning.action_disable": "Il tuo account è stato disattivato.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Alcuni dei tuoi post sono stati contrassegnati come sensibili.",
"notification.moderation_warning.action_none": "Il tuo account ha ricevuto un avviso di moderazione.",
"notification.moderation_warning.action_sensitive": "I tuoi post d'ora in poi saranno contrassegnati come sensibili.",
"notification.moderation_warning.action_silence": "Il tuo account è stato limitato.",
"notification.moderation_warning.action_suspend": "Il tuo account è stato sospeso.",
"notification.own_poll": "Il tuo sondaggio è terminato",
"notification.poll": "Un sondaggio in cui hai votato è terminato",
"notification.reblog": "{name} ha rebloggato il tuo post",

View File

@ -308,13 +308,17 @@
"follow_requests.unlocked_explanation": "Ook al is jouw account niet besloten, de medewerkers van {domain} denken dat jij misschien de volgende volgverzoeken handmatig wil controleren.",
"follow_suggestions.curated_suggestion": "Speciaal geselecteerd",
"follow_suggestions.dismiss": "Niet meer weergeven",
"follow_suggestions.hints.featured": "Deze gebruiker is geselecteerd door het team van {domain}.",
"follow_suggestions.featured_longer": "Handmatig geselecteerd door het team van {domain}",
"follow_suggestions.friends_of_friends_longer": "Populair onder mensen die je volgt",
"follow_suggestions.hints.featured": "Deze gebruiker is handmatig geselecteerd door het team van {domain}.",
"follow_suggestions.hints.friends_of_friends": "Deze gebruiker is populair onder de mensen die jij volgt.",
"follow_suggestions.hints.most_followed": "Deze gebruiker is een van de meest gevolgde gebruikers op {domain}.",
"follow_suggestions.hints.most_interactions": "Deze gebruiker is de laatste tijd erg populair op {domain}.",
"follow_suggestions.hints.similar_to_recently_followed": "Deze gebruiker is vergelijkbaar met gebruikers die je recentelijk hebt gevolgd.",
"follow_suggestions.personalized_suggestion": "Gepersonaliseerde aanbeveling",
"follow_suggestions.popular_suggestion": "Populaire aanbeveling",
"follow_suggestions.popular_suggestion_longer": "Populair op {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Vergelijkbaar met accounts die je recentelijk bent gaan volgen",
"follow_suggestions.view_all": "Alles weergeven",
"follow_suggestions.who_to_follow": "Wie te volgen",
"followed_tags": "Gevolgde hashtags",
@ -469,6 +473,15 @@
"notification.follow": "{name} volgt jou nu",
"notification.follow_request": "{name} wil jou graag volgen",
"notification.mention": "{name} vermeldde jou",
"notification.moderation-warning.learn_more": "Meer informatie",
"notification.moderation_warning": "Je hebt een moderatie-waarschuwing ontvangen",
"notification.moderation_warning.action_delete_statuses": "Sommige van je berichten zijn verwijderd.",
"notification.moderation_warning.action_disable": "Je account is uitgeschakeld.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Sommige van je berichten zijn gemarkeerd als gevoelig.",
"notification.moderation_warning.action_none": "Jouw account heeft een moderatie-waarschuwing ontvangen.",
"notification.moderation_warning.action_sensitive": "Je berichten worden vanaf nu als gevoelig gemarkeerd.",
"notification.moderation_warning.action_silence": "Jouw account is beperkt.",
"notification.moderation_warning.action_suspend": "Jouw account is opgeschort.",
"notification.own_poll": "Jouw peiling is beëindigd",
"notification.poll": "Een peiling waaraan jij hebt meegedaan is beëindigd",
"notification.reblog": "{name} boostte jouw bericht",

View File

@ -468,6 +468,15 @@
"notification.follow": "{name} fylgde deg",
"notification.follow_request": "{name} har bedt om å fylgja deg",
"notification.mention": "{name} nemnde deg",
"notification.moderation-warning.learn_more": "Lær meir",
"notification.moderation_warning": "Du har mottatt ei moderasjonsåtvaring",
"notification.moderation_warning.action_delete_statuses": "Nokre av innlegga dine har blitt fjerna.",
"notification.moderation_warning.action_disable": "Kontoen din har blitt deaktivert.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Nokre av innlegga dine har blitt markert som sensitive.",
"notification.moderation_warning.action_none": "Kontoen din har mottatt ei moderasjonsåtvaring.",
"notification.moderation_warning.action_sensitive": "Innlegga dine vil bli markerte som sensitive frå no av.",
"notification.moderation_warning.action_silence": "Kontoen din har blitt avgrensa.",
"notification.moderation_warning.action_suspend": "Kontoen din har blitt suspendert.",
"notification.own_poll": "Rundspørjinga di er ferdig",
"notification.poll": "Ei rundspørjing du har røysta i er ferdig",
"notification.reblog": "{name} framheva innlegget ditt",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Mimo że Twoje konto nie jest zablokowane, zespół {domain} uznał że możesz chcieć ręcznie przejrzeć prośby o możliwość obserwacji.",
"follow_suggestions.curated_suggestion": "Wybrane przez personel",
"follow_suggestions.dismiss": "Nie pokazuj ponownie",
"follow_suggestions.featured_longer": "Wybrane przez zespół {domain}",
"follow_suggestions.friends_of_friends_longer": "Popularni wśród ludzi których obserwujesz",
"follow_suggestions.hints.featured": "Ten profil został wybrany przez zespół {domain}.",
"follow_suggestions.hints.friends_of_friends": "Ten profil jest popularny w gronie użytkowników, których obserwujesz.",
"follow_suggestions.hints.most_followed": "Ten profil jest jednym z najczęściej obserwowanych na {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Ten profil jest podobny do profili ostatnio przez ciebie zaobserwowanych.",
"follow_suggestions.personalized_suggestion": "Sugestia spersonalizowana",
"follow_suggestions.popular_suggestion": "Sugestia popularna",
"follow_suggestions.popular_suggestion_longer": "Popularni na {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Podobne do ostatnio zaobserwowanych przez ciebie profilów",
"follow_suggestions.view_all": "Pokaż wszystkie",
"follow_suggestions.who_to_follow": "Kogo obserwować",
"followed_tags": "Obserwowane hasztagi",
@ -469,6 +473,15 @@
"notification.follow": "{name} obserwuje Cię",
"notification.follow_request": "{name} chce cię zaobserwować",
"notification.mention": "Wspomniało o Tobie przez {name}",
"notification.moderation-warning.learn_more": "Dowiedz się więcej",
"notification.moderation_warning": "Otrzymałeś/-łaś ostrzeżenie moderacyjne",
"notification.moderation_warning.action_delete_statuses": "Niektóre twoje wpisy zostały usunięte.",
"notification.moderation_warning.action_disable": "Twoje konto zostało wyłączone.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Niektóre twoje wpisy zostały oznaczone jako wrażliwe.",
"notification.moderation_warning.action_none": "Twoje konto otrzymało ostrzeżenie moderacyjne.",
"notification.moderation_warning.action_sensitive": "Twoje wpisy będą od teraz oznaczane jako wrażliwe.",
"notification.moderation_warning.action_silence": "Twoje konto zostało ograniczone.",
"notification.moderation_warning.action_suspend": "Twoje konto zostało zawieszone.",
"notification.own_poll": "Twoje głosowanie zakończyło się",
"notification.poll": "Głosowanie w którym brałeś(-aś) udział zakończyło się",
"notification.reblog": "Twój post został podbity przez {name}",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Apesar de a sua não ser privada, a administração de {domain} pensa que poderá querer rever manualmente os pedidos de seguimento dessas contas.",
"follow_suggestions.curated_suggestion": "Escolha da equipe",
"follow_suggestions.dismiss": "Não mostrar novamente",
"follow_suggestions.featured_longer": "Escolhido a dedo pela equipa de {domain}",
"follow_suggestions.friends_of_friends_longer": "Popular entre as pessoas que segue",
"follow_suggestions.hints.featured": "Este perfil foi escolhido a dedo pela equipe {domain}.",
"follow_suggestions.hints.friends_of_friends": "Este perfil é popular entre as pessoas que você segue.",
"follow_suggestions.hints.most_followed": "Este perfil é um dos mais seguidos no {domain}.",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "Este perfil é semelhante aos perfis que você seguiu mais recentemente.",
"follow_suggestions.personalized_suggestion": "Sugestão personalizada",
"follow_suggestions.popular_suggestion": "Sugestão popular",
"follow_suggestions.popular_suggestion_longer": "Popular em {domain}",
"follow_suggestions.similar_to_recently_followed_longer": "Semelhantes aos perfis que seguiu recentemente",
"follow_suggestions.view_all": "Ver tudo",
"follow_suggestions.who_to_follow": "Quem seguir",
"followed_tags": "Hashtags seguidas",
@ -469,6 +473,15 @@
"notification.follow": "{name} começou a seguir-te",
"notification.follow_request": "{name} pediu para segui-lo",
"notification.mention": "{name} mencionou-te",
"notification.moderation-warning.learn_more": "Saber mais",
"notification.moderation_warning": "Recebeu um aviso de moderação",
"notification.moderation_warning.action_delete_statuses": "Algumas das suas publicações foram removidas.",
"notification.moderation_warning.action_disable": "A sua conta foi desativada.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Algumas das suas publicações foram assinaladas como sensíveis.",
"notification.moderation_warning.action_none": "A sua conta recebeu um aviso de moderação.",
"notification.moderation_warning.action_sensitive": "As suas publicações serão, a partir de agora, assinaladas como sensíveis.",
"notification.moderation_warning.action_silence": "A sua conta foi limitada.",
"notification.moderation_warning.action_suspend": "A sua conta foi suspensa.",
"notification.own_poll": "A sua votação terminou",
"notification.poll": "Uma votação em que participaste chegou ao fim",
"notification.reblog": "{name} reforçou a tua publicação",

View File

@ -297,7 +297,6 @@
"filter_modal.select_filter.subtitle": "Använd en befintlig kategori eller skapa en ny",
"filter_modal.select_filter.title": "Filtrera detta inlägg",
"filter_modal.title.status": "Filtrera ett inlägg",
"filtered_notifications_banner.mentions": "{count, plural, one {mention} other {mentions}}",
"filtered_notifications_banner.pending_requests": "Aviseringar från {count, plural, =0 {ingen} one {en person} other {# personer}} du kanske känner",
"filtered_notifications_banner.title": "Filtrerade aviseringar",
"firehose.all": "Allt",
@ -469,6 +468,11 @@
"notification.follow": "{name} följer dig",
"notification.follow_request": "{name} har begärt att följa dig",
"notification.mention": "{name} nämnde dig",
"notification.moderation-warning.learn_more": "Läs mer",
"notification.moderation_warning.action_delete_statuses": "Några av dina inlägg har tagits bort.",
"notification.moderation_warning.action_disable": "Ditt konto har inaktiverats.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Några av dina inlägg har markerats som känsliga.",
"notification.moderation_warning.action_silence": "Ditt konto har begränsats.",
"notification.own_poll": "Din röstning har avslutats",
"notification.poll": "En omröstning du röstat i har avslutats",
"notification.reblog": "{name} boostade ditt inlägg",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "尽管你没有锁嘟,但是 {domain} 的工作人员认为你也许会想手动审核审核这些账号的关注请求。",
"follow_suggestions.curated_suggestion": "站务人员精选",
"follow_suggestions.dismiss": "不再显示",
"follow_suggestions.featured_longer": "由 {domain} 管理团队精选",
"follow_suggestions.friends_of_friends_longer": "在你关注的人中很受欢迎",
"follow_suggestions.hints.featured": "该用户已被 {domain} 管理团队精选。",
"follow_suggestions.hints.friends_of_friends": "该用户在您关注的人中很受欢迎。",
"follow_suggestions.hints.most_followed": "该用户是 {domain} 上关注度最高的用户之一。",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "该用户与您最近关注的用户类似。",
"follow_suggestions.personalized_suggestion": "个性化建议",
"follow_suggestions.popular_suggestion": "热门建议",
"follow_suggestions.popular_suggestion_longer": "在 {domain} 上很受欢迎",
"follow_suggestions.similar_to_recently_followed_longer": "与你近期关注的用户相似",
"follow_suggestions.view_all": "查看全部",
"follow_suggestions.who_to_follow": "推荐关注",
"followed_tags": "关注的话题标签",
@ -469,6 +473,15 @@
"notification.follow": "{name} 开始关注你",
"notification.follow_request": "{name} 向你发送了关注请求",
"notification.mention": "{name} 提及了你",
"notification.moderation-warning.learn_more": "了解更多",
"notification.moderation_warning": "你收到了一条管理警告",
"notification.moderation_warning.action_delete_statuses": "你的一些嘟文已被移除。",
"notification.moderation_warning.action_disable": "你的账号已被禁用。",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "你的一些嘟文已被标记为敏感内容。",
"notification.moderation_warning.action_none": "你的账号收到了管理警告。",
"notification.moderation_warning.action_sensitive": "今后你的嘟文都会被标记为敏感内容。",
"notification.moderation_warning.action_silence": "你的账号已被限制。",
"notification.moderation_warning.action_suspend": "你的账号已被封禁.",
"notification.own_poll": "你的投票已经结束",
"notification.poll": "你参与的一个投票已经结束",
"notification.reblog": "{name} 转发了你的嘟文",

View File

@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "即便您的帳號未被鎖定,{domain} 的管理員認為您可能想要自己審核這些帳號的跟隨請求。",
"follow_suggestions.curated_suggestion": "精選內容",
"follow_suggestions.dismiss": "不再顯示",
"follow_suggestions.featured_longer": "{domain} 團隊精選",
"follow_suggestions.friends_of_friends_longer": "受您跟隨之使用者愛戴的風雲人物",
"follow_suggestions.hints.featured": "這個個人檔案是 {domain} 管理團隊精心挑選。",
"follow_suggestions.hints.friends_of_friends": "這個個人檔案於您跟隨的帳號中很受歡迎。",
"follow_suggestions.hints.most_followed": "這個個人檔案是 {domain} 中最受歡迎的帳號之一。",
@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "這個個人檔案與您最近跟隨之帳號類似。",
"follow_suggestions.personalized_suggestion": "個人化推薦",
"follow_suggestions.popular_suggestion": "熱門推薦",
"follow_suggestions.popular_suggestion_longer": "{domain} 上的人氣王",
"follow_suggestions.similar_to_recently_followed_longer": "與您近日跟隨相近之帳號",
"follow_suggestions.view_all": "檢視全部",
"follow_suggestions.who_to_follow": "推薦跟隨帳號",
"followed_tags": "已跟隨主題標籤",
@ -469,6 +473,15 @@
"notification.follow": "{name} 已跟隨您",
"notification.follow_request": "{name} 要求跟隨您",
"notification.mention": "{name} 已提到您",
"notification.moderation-warning.learn_more": "了解更多",
"notification.moderation_warning": "您已收到管理員警告",
"notification.moderation_warning.action_delete_statuses": "某些您的嘟文已被刪除。",
"notification.moderation_warning.action_disable": "您的帳號已被停用。",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "某些您的嘟文已被標記為敏感內容。",
"notification.moderation_warning.action_none": "您的帳號已收到管理員警告。",
"notification.moderation_warning.action_sensitive": "即日起,您的嘟文將會被標記為敏感內容。",
"notification.moderation_warning.action_silence": "您的帳號已被限制。",
"notification.moderation_warning.action_suspend": "您的帳號已被停權。",
"notification.own_poll": "您的投票已結束",
"notification.poll": "您曾投過的投票已經結束",
"notification.reblog": "{name} 已轉嘟您的嘟文",

View File

@ -56,6 +56,7 @@ export const notificationToMap = notification => ImmutableMap({
status: notification.status ? notification.status.id : null,
report: notification.report ? fromJS(notification.report) : null,
event: notification.event ? fromJS(notification.event) : null,
moderation_warning: notification.moderation_warning ? fromJS(notification.moderation_warning) : null,
});
const normalizeNotification = (state, notification, usePendingItems) => {

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M160-120v-80h480v80H160Zm226-194L160-540l84-86 228 226-86 86Zm254-254L414-796l86-84 226 226-86 86Zm184 408L302-682l56-56 522 522-56 56Z"/></svg>

After

Width:  |  Height:  |  Size: 241 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M160-120v-80h480v80H160Zm226-194L160-540l84-86 228 226-86 86Zm254-254L414-796l86-84 226 226-86 86Zm184 408L302-682l56-56 522 522-56 56Z"/></svg>

After

Width:  |  Height:  |  Size: 241 B

View File

@ -2016,7 +2016,10 @@ a .account__avatar {
display: flex;
align-items: center;
gap: 8px;
}
.account__relationship,
.explore__suggestions__card {
.icon-button {
border: 1px solid var(--background-border-color);
border-radius: 4px;
@ -2177,7 +2180,8 @@ a.account__display-name {
}
}
.notification__relationships-severance-event {
.notification__relationships-severance-event,
.notification__moderation-warning {
display: flex;
gap: 16px;
color: $secondary-text-color;
@ -2964,6 +2968,75 @@ $ui-header-logo-wordmark-width: 99px;
display: none;
}
.explore__suggestions__card {
padding: 12px 16px;
gap: 8px;
display: flex;
flex-direction: column;
border-bottom: 1px solid var(--background-border-color);
&:last-child {
border-bottom: 0;
}
&__source {
padding-inline-start: 60px;
font-size: 13px;
line-height: 16px;
color: $dark-text-color;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
&__body {
display: flex;
gap: 12px;
align-items: center;
&__main {
flex: 1 1 auto;
display: flex;
flex-direction: column;
gap: 8px;
min-width: 0;
&__name-button {
display: flex;
align-items: center;
gap: 8px;
&__name {
display: block;
color: inherit;
text-decoration: none;
flex: 1 1 auto;
min-width: 0;
}
.button {
min-width: 80px;
}
.display-name {
font-size: 15px;
line-height: 20px;
color: $secondary-text-color;
strong {
font-weight: 700;
}
&__account {
color: $darker-text-color;
display: block;
}
}
}
}
}
}
@media screen and (max-width: $no-gap-breakpoint - 1px) {
.columns-area__panels__pane--compositional {
display: none;
@ -7293,10 +7366,11 @@ a.status-card {
content: '';
position: absolute;
bottom: -1px;
left: 0;
width: 100%;
left: 50%;
transform: translateX(-50%);
width: 40px;
height: 3px;
border-radius: 4px;
border-radius: 4px 4px 0 0;
background: $highlight-text-color;
}
}

View File

@ -52,7 +52,7 @@ class Admin::AccountAction
process_reports!
end
process_email!
process_notification!
process_queue!
end
@ -158,8 +158,11 @@ class Admin::AccountAction
queue_suspension_worker! if type == 'suspend'
end
def process_email!
UserMailer.warning(target_account.user, warning).deliver_later! if warnable?
def process_notification!
return unless warnable?
UserMailer.warning(target_account.user, warning).deliver_later!
LocalNotificationWorker.perform_async(target_account.id, warning.id, 'AccountWarning', 'moderation_warning')
end
def warnable?

View File

@ -65,7 +65,8 @@ class Admin::StatusBatchAction
statuses.each { |status| Tombstone.find_or_create_by(uri: status.uri, account: status.account, by_moderator: true) } unless target_account.local?
end
UserMailer.warning(target_account.user, @warning).deliver_later! if warnable?
process_notification!
RemovalWorker.push_bulk(status_ids) { |status_id| [status_id, { 'preserve' => target_account.local?, 'immediate' => !target_account.local? }] }
end
@ -101,7 +102,7 @@ class Admin::StatusBatchAction
text: text
)
UserMailer.warning(target_account.user, @warning).deliver_later! if warnable?
process_notification!
end
def handle_report!
@ -127,6 +128,13 @@ class Admin::StatusBatchAction
!report.nil?
end
def process_notification!
return unless warnable?
UserMailer.warning(target_account.user, @warning).deliver_later!
LocalNotificationWorker.perform_async(target_account.id, @warning.id, 'AccountWarning', 'moderation_warning')
end
def warnable?
send_email_notification && target_account.local?
end

View File

@ -57,6 +57,9 @@ class Notification < ApplicationRecord
severed_relationships: {
filterable: false,
}.freeze,
moderation_warning: {
filterable: false,
}.freeze,
'admin.sign_up': {
filterable: false,
}.freeze,
@ -90,6 +93,7 @@ class Notification < ApplicationRecord
belongs_to :poll, inverse_of: false
belongs_to :report, inverse_of: false
belongs_to :account_relationship_severance_event, inverse_of: false
belongs_to :account_warning, inverse_of: false
end
validates :type, inclusion: { in: TYPES }
@ -186,7 +190,7 @@ class Notification < ApplicationRecord
self.from_account_id = activity&.status&.account_id
when 'Account'
self.from_account_id = activity&.id
when 'AccountRelationshipSeveranceEvent'
when 'AccountRelationshipSeveranceEvent', 'AccountWarning'
# These do not really have an originating account, but this is mandatory
# in the data model, and the recipient's account will by definition
# always exist

View File

@ -0,0 +1,16 @@
# frozen_string_literal: true
class REST::AccountWarningSerializer < ActiveModel::Serializer
attributes :id, :action, :text, :status_ids, :created_at
has_one :target_account, serializer: REST::AccountSerializer
has_one :appeal, serializer: REST::AppealSerializer
def id
object.id.to_s
end
def status_ids
object&.status_ids&.map(&:to_s)
end
end

View File

@ -0,0 +1,15 @@
# frozen_string_literal: true
class REST::AppealSerializer < ActiveModel::Serializer
attributes :text, :state
def state
if object.approved?
'approved'
elsif object.rejected?
'rejected'
else
'pending'
end
end
end

View File

@ -7,6 +7,7 @@ class REST::NotificationSerializer < ActiveModel::Serializer
belongs_to :target_status, key: :status, if: :status_type?, serializer: REST::StatusSerializer
belongs_to :report, if: :report_type?, serializer: REST::ReportSerializer
belongs_to :account_relationship_severance_event, key: :event, if: :relationship_severance_event?, serializer: REST::AccountRelationshipSeveranceEventSerializer
belongs_to :account_warning, key: :moderation_warning, if: :moderation_warning_event?, serializer: REST::AccountWarningSerializer
def id
object.id.to_s
@ -23,4 +24,8 @@ class REST::NotificationSerializer < ActiveModel::Serializer
def relationship_severance_event?
object.type == :severed_relationships
end
def moderation_warning_event?
object.type == :moderation_warning
end
end

View File

@ -9,6 +9,7 @@ class NotifyService < BaseService
update
poll
status
moderation_warning
# TODO: this probably warrants an email notification
severed_relationships
).freeze
@ -22,7 +23,7 @@ class NotifyService < BaseService
def dismiss?
blocked = @recipient.unavailable?
blocked ||= from_self? && @notification.type != :poll && @notification.type != :severed_relationships
blocked ||= from_self? && %i(poll severed_relationships moderation_warning).exclude?(@notification.type)
return blocked if message? && from_staff?
@ -75,6 +76,7 @@ class NotifyService < BaseService
admin.report
poll
update
account_warning
).freeze
def initialize(notification)

View File

@ -176,7 +176,7 @@ class PostStatusService < BaseService
def idempotency_duplicate
if scheduled?
@account.schedule_statuses.find(@idempotency_duplicate)
@account.scheduled_statuses.find(@idempotency_duplicate)
else
@account.statuses.find(@idempotency_duplicate)
end
@ -228,7 +228,7 @@ class PostStatusService < BaseService
end
def scheduled_options
@options.tap do |options_hash|
@options.dup.tap do |options_hash|
options_hash[:in_reply_to_id] = options_hash.delete(:thread)&.id
options_hash[:application_id] = options_hash.delete(:application)&.id
options_hash[:scheduled_at] = nil

View File

@ -14,14 +14,18 @@
= f.input :media_cache_retention_period,
input_html: { pattern: '[0-9]+' },
wrapper: :with_block_label
= f.input :backups_retention_period,
input_html: { pattern: '[0-9]+' },
wrapper: :with_block_label
%h4= t('admin.settings.content_retention.danger_zone')
.fields-group
= f.input :content_cache_retention_period,
hint: false,
input_html: { pattern: '[0-9]+' },
warning_hint: t('simple_form.hints.form_admin_settings.content_cache_retention_period'),
wrapper: :with_block_label
= f.input :backups_retention_period,
input_html: { pattern: '[0-9]+' },
wrapper: :with_block_label
.actions
= f.button :button, t('generic.save_changes'), type: :submit

View File

@ -1449,7 +1449,7 @@ de:
cooldown: Nach dem Umzug wird es eine Weile dauern, bis du erneut umziehen darfst
disabled_account: Dein altes Konto ist nur noch eingeschränkt nutzbar. Du kannst jedoch deine Daten exportieren und das Konto wieder reaktivieren.
followers: Alle Follower werden vom alten zum neuen Konto übertragen
only_redirect_html: Alternativ kannst du auch <a href="%{path}">nur eine Weiterleitung zu deinem neuen Profil</a> einrichten, ohne die Follower zu übertragen.
only_redirect_html: Alternativ kannst du auch <a href="%{path}">nur eine Weiterleitung zu deinem neuen Konto</a> einrichten, ohne die Follower zu übertragen.
other_data: Keine anderen Daten werden automatisch zum neuen Konto übertragen
redirect: Dein altes Konto wird einen Hinweis erhalten, dass du umgezogen bist. Außerdem wird das Profil von Suchanfragen ausgeschlossen
moderation:
@ -1845,7 +1845,7 @@ de:
mark_statuses_as_sensitive: Deine Beiträge von %{acct} wurden mit einer Inhaltswarnung versehen
none: Warnung für %{acct}
sensitive: Deine Beiträge von %{acct} werden künftig mit einer Inhaltswarnung versehen
silence: Dein Konto %{acct} wurde stummgeschaltet
silence: Dein Konto %{acct} wurde eingeschränkt
suspend: Dein Konto %{acct} wurde gesperrt
title:
delete_statuses: Beiträge entfernt

View File

@ -174,6 +174,7 @@ pt-PT:
read:filters: ver os seus filtros
read:follows: ver quem você segue
read:lists: ver as suas listas
read:me: ler apenas as informações básicas da sua conta
read:mutes: ver os utilizadores que silenciou
read:notifications: ver as suas notificações
read:reports: ver as suas denúncias

View File

@ -751,6 +751,7 @@ en:
desc_html: This relies on external scripts from hCaptcha, which may be a security and privacy concern. In addition, <strong>this can make the registration process significantly less accessible to some (especially disabled) people</strong>. For these reasons, please consider alternative measures such as approval-based or invite-based registration.
title: Require new users to solve a CAPTCHA to confirm their account
content_retention:
danger_zone: Danger zone
preamble: Control how user-generated content is stored in Mastodon.
title: Content retention
default_noindex:

View File

@ -77,13 +77,13 @@ en:
warn: Hide the filtered content behind a warning mentioning the filter's title
form_admin_settings:
activity_api_enabled: Counts of locally published posts, active users, and new registrations in weekly buckets
backups_retention_period: Keep generated user archives for the specified number of days.
backups_retention_period: Users have the ability to generate archives of their posts to download later. When set to a positive value, these archives will be automatically deleted from your storage after the specified number of days.
bootstrap_timeline_accounts: These accounts will be pinned to the top of new users' follow recommendations.
closed_registrations_message: Displayed when sign-ups are closed
content_cache_retention_period: All posts and boosts from other servers will be deleted after the specified number of days. Some posts may not be recoverable. All related bookmarks, favourites and boosts will also be lost and impossible to undo.
content_cache_retention_period: All posts from other servers (including boosts and replies) will be deleted after the specified number of days, without regard to any local user interaction with those posts. This includes posts where a local user has marked it as bookmarks or favorites. Private mentions between users from different instances will also be lost and impossible to restore. Use of this setting is intended for special purpose instances and breaks many user expectations when implemented for general purpose use.
custom_css: You can apply custom styles on the web version of Mastodon.
mascot: Overrides the illustration in the advanced web interface.
media_cache_retention_period: Downloaded media files will be deleted after the specified number of days when set to a positive value, and re-downloaded on demand.
media_cache_retention_period: Media files from posts made by remote users are cached on your server. When set to a positive value, media will be deleted after the specified number of days. If the media data is requested after it is deleted, it will be re-downloaded, if the source content is still available. Due to restrictions on how often link preview cards poll third-party sites, it is recommended to set this value to at least 14 days, or link preview cards will not be updated on demand before that time.
peers_api_enabled: A list of domain names this server has encountered in the fediverse. No data is included here about whether you federate with a given server, just that your server knows about it. This is used by services that collect statistics on federation in a general sense.
profile_directory: The profile directory lists all users who have opted-in to be discoverable.
require_invite_text: When sign-ups require manual approval, make the “Why do you want to join?” text input mandatory rather than optional
@ -243,7 +243,7 @@ en:
backups_retention_period: User archive retention period
bootstrap_timeline_accounts: Always recommend these accounts to new users
closed_registrations_message: Custom message when sign-ups are not available
content_cache_retention_period: Content cache retention period
content_cache_retention_period: Remote content retention period
custom_css: Custom CSS
mascot: Custom mascot (legacy)
media_cache_retention_period: Media cache retention period

View File

@ -67,7 +67,7 @@
"core-js": "^3.30.2",
"cross-env": "^7.0.3",
"css-loader": "^5.2.7",
"cssnano": "^6.0.1",
"cssnano": "^7.0.0",
"detect-passive-events": "^2.0.3",
"emoji-mart": "npm:emoji-mart-lazyload@latest",
"escape-html": "^1.0.3",

View File

@ -69,22 +69,22 @@ RSpec.describe Admin::AccountAction do
end
end
it 'creates Admin::ActionLog' do
it 'sends notification, log the action, and closes other reports', :aggregate_failures do
other_report = Fabricate(:report, target_account: target_account)
emails = []
expect do
subject
end.to change(Admin::ActionLog, :count).by 1
end
emails = capture_emails { subject }
end.to (change(Admin::ActionLog.where(action: type), :count).by 1)
.and(change { other_report.reload.action_taken? }.from(false).to(true))
it 'calls process_email!' do
allow(account_action).to receive(:process_email!)
subject
expect(account_action).to have_received(:process_email!)
end
expect(emails).to contain_exactly(
have_attributes(
to: contain_exactly(target_account.user.email)
)
)
it 'calls process_reports!' do
allow(account_action).to receive(:process_reports!)
subject
expect(account_action).to have_received(:process_reports!)
expect(LocalNotificationWorker).to have_enqueued_sidekiq_job(target_account.id, anything, 'AccountWarning', 'moderation_warning')
end
end

View File

@ -138,6 +138,17 @@ RSpec.describe Notification do
expect(notification.account).to eq(account)
end
end
context 'when activity_type is an AccountWarning' do
it 'sets the notification from_account to the recipient of the notification' do
account = Fabricate(:account)
account_warning = Fabricate(:account_warning, target_account: account)
notification = Fabricate.build(:notification, activity_type: 'AccountWarning', activity: account_warning, account: account)
expect(notification.from_account).to eq(account)
end
end
end
describe '.preload_cache_collection_target_statuses' do

View File

@ -54,6 +54,13 @@ RSpec.describe PostStatusService do
.to not_change { account.statuses_count }
.and(not_change { previous_status.replies_count })
end
it 'returns existing status when used twice with idempotency key' do
account = Fabricate(:account)
status1 = subject.call(account, text: 'test', idempotency: 'meepmeep', scheduled_at: future)
status2 = subject.call(account, text: 'test', idempotency: 'meepmeep', scheduled_at: future)
expect(status2.id).to eq status1.id
end
end
it 'creates response to the original status of boost' do

View File

@ -24,7 +24,7 @@
"jsdom": "^24.0.0",
"pg": "^8.5.0",
"pg-connection-string": "^2.6.0",
"pino": "^8.17.2",
"pino": "^9.0.0",
"pino-http": "^9.0.0",
"prom-client": "^15.0.0",
"uuid": "^9.0.0",

365
yarn.lock
View File

@ -2788,7 +2788,7 @@ __metadata:
core-js: "npm:^3.30.2"
cross-env: "npm:^7.0.3"
css-loader: "npm:^5.2.7"
cssnano: "npm:^6.0.1"
cssnano: "npm:^7.0.0"
detect-passive-events: "npm:^2.0.3"
emoji-mart: "npm:emoji-mart-lazyload@latest"
escape-html: "npm:^1.0.3"
@ -2907,7 +2907,7 @@ __metadata:
jsdom: "npm:^24.0.0"
pg: "npm:^8.5.0"
pg-connection-string: "npm:^2.6.0"
pino: "npm:^8.17.2"
pino: "npm:^9.0.0"
pino-http: "npm:^9.0.0"
pino-pretty: "npm:^11.0.0"
prom-client: "npm:^15.0.0"
@ -6669,64 +6669,64 @@ __metadata:
languageName: node
linkType: hard
"cssnano-preset-default@npm:^6.1.2":
version: 6.1.2
resolution: "cssnano-preset-default@npm:6.1.2"
"cssnano-preset-default@npm:^7.0.1":
version: 7.0.1
resolution: "cssnano-preset-default@npm:7.0.1"
dependencies:
browserslist: "npm:^4.23.0"
css-declaration-sorter: "npm:^7.2.0"
cssnano-utils: "npm:^4.0.2"
postcss-calc: "npm:^9.0.1"
postcss-colormin: "npm:^6.1.0"
postcss-convert-values: "npm:^6.1.0"
postcss-discard-comments: "npm:^6.0.2"
postcss-discard-duplicates: "npm:^6.0.3"
postcss-discard-empty: "npm:^6.0.3"
postcss-discard-overridden: "npm:^6.0.2"
postcss-merge-longhand: "npm:^6.0.5"
postcss-merge-rules: "npm:^6.1.1"
postcss-minify-font-values: "npm:^6.1.0"
postcss-minify-gradients: "npm:^6.0.3"
postcss-minify-params: "npm:^6.1.0"
postcss-minify-selectors: "npm:^6.0.4"
postcss-normalize-charset: "npm:^6.0.2"
postcss-normalize-display-values: "npm:^6.0.2"
postcss-normalize-positions: "npm:^6.0.2"
postcss-normalize-repeat-style: "npm:^6.0.2"
postcss-normalize-string: "npm:^6.0.2"
postcss-normalize-timing-functions: "npm:^6.0.2"
postcss-normalize-unicode: "npm:^6.1.0"
postcss-normalize-url: "npm:^6.0.2"
postcss-normalize-whitespace: "npm:^6.0.2"
postcss-ordered-values: "npm:^6.0.2"
postcss-reduce-initial: "npm:^6.1.0"
postcss-reduce-transforms: "npm:^6.0.2"
postcss-svgo: "npm:^6.0.3"
postcss-unique-selectors: "npm:^6.0.4"
cssnano-utils: "npm:^5.0.0"
postcss-calc: "npm:^10.0.0"
postcss-colormin: "npm:^7.0.0"
postcss-convert-values: "npm:^7.0.0"
postcss-discard-comments: "npm:^7.0.0"
postcss-discard-duplicates: "npm:^7.0.0"
postcss-discard-empty: "npm:^7.0.0"
postcss-discard-overridden: "npm:^7.0.0"
postcss-merge-longhand: "npm:^7.0.0"
postcss-merge-rules: "npm:^7.0.0"
postcss-minify-font-values: "npm:^7.0.0"
postcss-minify-gradients: "npm:^7.0.0"
postcss-minify-params: "npm:^7.0.0"
postcss-minify-selectors: "npm:^7.0.0"
postcss-normalize-charset: "npm:^7.0.0"
postcss-normalize-display-values: "npm:^7.0.0"
postcss-normalize-positions: "npm:^7.0.0"
postcss-normalize-repeat-style: "npm:^7.0.0"
postcss-normalize-string: "npm:^7.0.0"
postcss-normalize-timing-functions: "npm:^7.0.0"
postcss-normalize-unicode: "npm:^7.0.0"
postcss-normalize-url: "npm:^7.0.0"
postcss-normalize-whitespace: "npm:^7.0.0"
postcss-ordered-values: "npm:^7.0.0"
postcss-reduce-initial: "npm:^7.0.0"
postcss-reduce-transforms: "npm:^7.0.0"
postcss-svgo: "npm:^7.0.0"
postcss-unique-selectors: "npm:^7.0.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/af99021f936763850f5f35dc9e6a9dfb0da30856dea36e0420b011da2a447099471db2a5f3d1f5f52c0489da186caf9a439d8f048a80f82617077efb018333fa
checksum: 10c0/bee65239d25de2ba87e85b4091cbc1cac9ba1b57c9f803dff5a71ea8a55a885045805840dd732be284c28cca6343dece37fc76d7096aba37cfa02eff2ee7714c
languageName: node
linkType: hard
"cssnano-utils@npm:^4.0.2":
version: 4.0.2
resolution: "cssnano-utils@npm:4.0.2"
"cssnano-utils@npm:^5.0.0":
version: 5.0.0
resolution: "cssnano-utils@npm:5.0.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/260b8c8ffa48b908aa77ef129f9b8648ecd92aed405b20e7fe6b8370779dd603530344fc9d96683d53533246e48b36ac9d2aa5a476b4f81c547bbad86d187f35
checksum: 10c0/492593fb45151e8622357bb958d0d80475372de38523ef0587d77e9c5f386beb55c30b41f2f3c735a374a230bc61404eb7ae9c2beeab0666afb499442c62ecba
languageName: node
linkType: hard
"cssnano@npm:^6.0.1":
version: 6.1.2
resolution: "cssnano@npm:6.1.2"
"cssnano@npm:^7.0.0":
version: 7.0.1
resolution: "cssnano@npm:7.0.1"
dependencies:
cssnano-preset-default: "npm:^6.1.2"
cssnano-preset-default: "npm:^7.0.1"
lilconfig: "npm:^3.1.1"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/4df0dc0389b34b38acb09b7cfb07267b0eda95349c6d5e9b7666acc7200bb33359650869a60168e9d878298b05f4ad2c7f070815c90551720a3f4e1037f79691
checksum: 10c0/8b17d13efe98ec2db2fbde9ca24e91842b9afe2f80becc5e4271ee1170d77cf73eed3cdc2f35ed51bacdeac763ff85db45ae8e9627a8862bf01d457a819a640e
languageName: node
linkType: hard
@ -12944,13 +12944,13 @@ __metadata:
languageName: node
linkType: hard
"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:^1.1.0":
version: 1.1.0
resolution: "pino-abstract-transport@npm:1.1.0"
"pino-abstract-transport@npm:^1.0.0, pino-abstract-transport@npm:^1.1.0, pino-abstract-transport@npm:^1.2.0":
version: 1.2.0
resolution: "pino-abstract-transport@npm:1.2.0"
dependencies:
readable-stream: "npm:^4.0.0"
split2: "npm:^4.0.0"
checksum: 10c0/6e9b9d5a2c0a37f91ecaf224d335daae1ae682b1c79a05b06ef9e0f0a5d289f8e597992217efc857796dae6f1067e9b4882f95c6228ff433ddc153532cae8aca
checksum: 10c0/b4ab59529b7a91f488440147fc58ee0827a6c1c5ca3627292339354b1381072c1a6bfa9b46d03ad27872589e8477ecf74da12cf286e1e6b665ac64a3b806bf07
languageName: node
linkType: hard
@ -12997,7 +12997,7 @@ __metadata:
languageName: node
linkType: hard
"pino@npm:^8.17.1, pino@npm:^8.17.2":
"pino@npm:^8.17.1":
version: 8.20.0
resolution: "pino@npm:8.20.0"
dependencies:
@ -13018,6 +13018,27 @@ __metadata:
languageName: node
linkType: hard
"pino@npm:^9.0.0":
version: 9.0.0
resolution: "pino@npm:9.0.0"
dependencies:
atomic-sleep: "npm:^1.0.0"
fast-redact: "npm:^3.1.1"
on-exit-leak-free: "npm:^2.1.0"
pino-abstract-transport: "npm:^1.2.0"
pino-std-serializers: "npm:^6.0.0"
process-warning: "npm:^3.0.0"
quick-format-unescaped: "npm:^4.0.3"
real-require: "npm:^0.2.0"
safe-stable-stringify: "npm:^2.3.1"
sonic-boom: "npm:^3.7.0"
thread-stream: "npm:^2.6.0"
bin:
pino: bin.js
checksum: 10c0/10ef10aee0cf80af8ed83468cff2e29d642b6794b53cf641e1abcaf9e9958d8bcbc6e09d62757054aef3b4415c45d66a5018da11d43b81a23ba299ef5dc4e8b1
languageName: node
linkType: hard
"pirates@npm:^4.0.4":
version: 4.0.6
resolution: "pirates@npm:4.0.6"
@ -13079,15 +13100,15 @@ __metadata:
languageName: node
linkType: hard
"postcss-calc@npm:^9.0.1":
version: 9.0.1
resolution: "postcss-calc@npm:9.0.1"
"postcss-calc@npm:^10.0.0":
version: 10.0.0
resolution: "postcss-calc@npm:10.0.0"
dependencies:
postcss-selector-parser: "npm:^6.0.11"
postcss-selector-parser: "npm:^6.0.16"
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.2.2
checksum: 10c0/e0df07337162dbcaac5d6e030c7fd289e21da8766a9daca5d6b2b3c8094bb524ae5d74c70048ea7fe5fe4960ce048c60ac97922d917c3bbff34f58e9d2b0eb0e
postcss: ^8.4.38
checksum: 10c0/d4d529f2f71b49f17441eed74a7564ccd2779c72ed8648d4bb2530261a27c0ca01fe6a07260e7bf57e55f46dd68dea07e52fd1a6b538db7bc13015124be258a5
languageName: node
linkType: hard
@ -13141,9 +13162,9 @@ __metadata:
languageName: node
linkType: hard
"postcss-colormin@npm:^6.1.0":
version: 6.1.0
resolution: "postcss-colormin@npm:6.1.0"
"postcss-colormin@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-colormin@npm:7.0.0"
dependencies:
browserslist: "npm:^4.23.0"
caniuse-api: "npm:^3.0.0"
@ -13151,19 +13172,19 @@ __metadata:
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/0802963fa0d8f2fe408b2e088117670f5303c69a58c135f0ecf0e5ceff69e95e87111b22c4e29c9adb2f69aa8d3bc175f4e8e8708eeb99c9ffc36c17064de427
checksum: 10c0/d365a5365e0a94748309d32c7208cd06249bc53eb82cc32c771de4073b109fa8552e58d60dbe84d7e69e68081ed8a01fbf645d38a650e90cb2e13b21043cd796
languageName: node
linkType: hard
"postcss-convert-values@npm:^6.1.0":
version: 6.1.0
resolution: "postcss-convert-values@npm:6.1.0"
"postcss-convert-values@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-convert-values@npm:7.0.0"
dependencies:
browserslist: "npm:^4.23.0"
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/a80066965cb58fe8fcaf79f306b32c83fc678e1f0678e43f4db3e9fee06eed6db92cf30631ad348a17492769d44757400493c91a33ee865ee8dedea9234a11f5
checksum: 10c0/5d7cfa06f307e024574a1842016f006691e0c1932352f53a99ce8f2f9930c64c3c1ae17518e9e4e5176630b99f1beaab37bc339bc779fb07dc543670ae66bb21
languageName: node
linkType: hard
@ -13221,39 +13242,39 @@ __metadata:
languageName: node
linkType: hard
"postcss-discard-comments@npm:^6.0.2":
version: 6.0.2
resolution: "postcss-discard-comments@npm:6.0.2"
"postcss-discard-comments@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-discard-comments@npm:7.0.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/338a1fcba7e2314d956e5e5b9bd1e12e6541991bf85ac72aed6e229a029bf60edb31f11576b677623576169aa7d9c75e1be259ac7b50d0b735b841b5518f9da9
checksum: 10c0/7fef7deea85c1e68161f69057be19a3aedd54d23c9b464c9b1531faa7a115f0c96a4f0ee3a560ce300578599dbc8114fe0fb744208b20b9d2fd8df1b4b39c58a
languageName: node
linkType: hard
"postcss-discard-duplicates@npm:^6.0.3":
version: 6.0.3
resolution: "postcss-discard-duplicates@npm:6.0.3"
"postcss-discard-duplicates@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-discard-duplicates@npm:7.0.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/24d2f00e54668f2837eb38a64b1751d7a4a73b2752f9749e61eb728f1fae837984bc2b339f7f5207aff5f66f72551253489114b59b9ba21782072677a81d7d1b
checksum: 10c0/37d568dc18d47b8b9f0fd6d5115b1faf96c2bf429fc4586508a773533479e18627d6260cad6a3ca7d3bfc2f220fd9448410aee40e07f2ec6c6f96bbe3595dbc8
languageName: node
linkType: hard
"postcss-discard-empty@npm:^6.0.3":
version: 6.0.3
resolution: "postcss-discard-empty@npm:6.0.3"
"postcss-discard-empty@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-discard-empty@npm:7.0.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/1af08bb29f18eda41edf3602b257d89a4cf0a16f79fc773cfebd4a37251f8dbd9b77ac18efe55d0677d000b43a8adf2ef9328d31961c810e9433a38494a1fa65
checksum: 10c0/b54fc9ad59a6015f6b82b8c826717a4a2f82b272608f6ae37a0b568f4f6c503f5ac7d13d415853a946a0422cb37b9fe1d5ddcee91fe0c2086001138710600d8b
languageName: node
linkType: hard
"postcss-discard-overridden@npm:^6.0.2":
version: 6.0.2
resolution: "postcss-discard-overridden@npm:6.0.2"
"postcss-discard-overridden@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-discard-overridden@npm:7.0.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/fda70ef3cd4cb508369c5bbbae44d7760c40ec9f2e65df1cd1b6e0314317fb1d25ae7f64987ca84e66889c1e9d1862487a6ce391c159dfe04d536597bfc5030d
checksum: 10c0/ca00ed1d4e8793fc780039f235fa2caef123d3aa28cae47cc1472ca03b21386c39fae1f11fbf319dcb94c6bda923824067254c7e20e8b00354b47015dc754658
languageName: node
linkType: hard
@ -13371,77 +13392,77 @@ __metadata:
languageName: node
linkType: hard
"postcss-merge-longhand@npm:^6.0.5":
version: 6.0.5
resolution: "postcss-merge-longhand@npm:6.0.5"
"postcss-merge-longhand@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-merge-longhand@npm:7.0.0"
dependencies:
postcss-value-parser: "npm:^4.2.0"
stylehacks: "npm:^6.1.1"
stylehacks: "npm:^7.0.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/5a223a7f698c05ab42e9997108a7ff27ea1e0c33a11a353d65a04fc89c3b5b750b9e749550d76b6406329117a055adfc79dde7fee48dca5c8e167a2854ae3fea
checksum: 10c0/5f814f396a5107dcb5e74c2d4e55ebcd03b9bc2b3619ed7aea63a441854023ce349bc371d30aec1ac33a375139afac02709e7721e055b5e624701ac6576e8a10
languageName: node
linkType: hard
"postcss-merge-rules@npm:^6.1.1":
version: 6.1.1
resolution: "postcss-merge-rules@npm:6.1.1"
"postcss-merge-rules@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-merge-rules@npm:7.0.0"
dependencies:
browserslist: "npm:^4.23.0"
caniuse-api: "npm:^3.0.0"
cssnano-utils: "npm:^4.0.2"
cssnano-utils: "npm:^5.0.0"
postcss-selector-parser: "npm:^6.0.16"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/6d8952dbb19b1e59bf5affe0871fa1be6515103466857cff5af879d6cf619659f8642ec7a931cabb7cdbd393d8c1e91748bf70bee70fa3edea010d4e25786d04
checksum: 10c0/d9cb3a4e55db57aa7ba0bb1caefb82db93c8493d2b3db66091dae9d5794ca04729e660115765ff254d0eb960e4db037f6c5b92562b396b05216888d12acc08e0
languageName: node
linkType: hard
"postcss-minify-font-values@npm:^6.1.0":
version: 6.1.0
resolution: "postcss-minify-font-values@npm:6.1.0"
"postcss-minify-font-values@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-minify-font-values@npm:7.0.0"
dependencies:
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/0d6567170c22a7db42096b5eac298f041614890fbe01759a9fa5ccda432f2bb09efd399d92c11bf6675ae13ccd259db4602fad3c358317dee421df5f7ab0a003
checksum: 10c0/f8be40099a6986d96b9cd2eb9c32a9c681efc6ecd6504c9ab7e01feb9e688c8b9656dfd7f35aa6de2585a86d607f62152ee81d0175e712e4658d184d25f63d58
languageName: node
linkType: hard
"postcss-minify-gradients@npm:^6.0.3":
version: 6.0.3
resolution: "postcss-minify-gradients@npm:6.0.3"
"postcss-minify-gradients@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-minify-gradients@npm:7.0.0"
dependencies:
colord: "npm:^2.9.3"
cssnano-utils: "npm:^4.0.2"
cssnano-utils: "npm:^5.0.0"
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/7fcbcec94fe5455b89fe1b424a451198e60e0407c894bbacdc062d9fdef2f8571b483b5c3bb17f22d2f1249431251b2de22e1e4e8b0614d10624f8ee6e71afd2
checksum: 10c0/15d162192b598242e14def81a62e30cf273ab14f1db702c391e6bdd442c570a1aa76fc326874253a2d67f75b4d4fe73ba4f664e85dbff883f24b7090c340bfad
languageName: node
linkType: hard
"postcss-minify-params@npm:^6.1.0":
version: 6.1.0
resolution: "postcss-minify-params@npm:6.1.0"
"postcss-minify-params@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-minify-params@npm:7.0.0"
dependencies:
browserslist: "npm:^4.23.0"
cssnano-utils: "npm:^4.0.2"
cssnano-utils: "npm:^5.0.0"
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/e5c38c3e5fb42e2ca165764f983716e57d854a63a477f7389ccc94cd2ab8123707006613bd7f29acc6eafd296fff513aa6d869c98ac52590f886d641cb21a59e
checksum: 10c0/28a7ae313a197aeaff8b3fa1e695a6443b11a74258374a05adee6a1b05f5849ef52037b7a5069d6910614b03b4610acdaf4a76f38b89cb42e813a8cb5ec2fc01
languageName: node
linkType: hard
"postcss-minify-selectors@npm:^6.0.4":
version: 6.0.4
resolution: "postcss-minify-selectors@npm:6.0.4"
"postcss-minify-selectors@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-minify-selectors@npm:7.0.0"
dependencies:
postcss-selector-parser: "npm:^6.0.16"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/695ec2e1e3a7812b0cabe1105d0ed491760be3d8e9433914fb5af1fc30a84e6dc24089cd31b7e300de620b8e7adf806526c1acf8dd14077a7d1d2820c60a327c
checksum: 10c0/6baf0ea71b8dfd01bdb5b516d01aa00244c55cad8d9c674358d735cef2a6aca6586dd480d419cc8d3f470e6d2d7d19354592044f19766993caf9800d3d7e0d36
languageName: node
linkType: hard
@ -13502,101 +13523,101 @@ __metadata:
languageName: node
linkType: hard
"postcss-normalize-charset@npm:^6.0.2":
version: 6.0.2
resolution: "postcss-normalize-charset@npm:6.0.2"
"postcss-normalize-charset@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-normalize-charset@npm:7.0.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/af32a3b4cf94163d728b8aa935b2494c9f69fbc96a33b35f67ae15dbdef7fcc8732569df97cbaaf20ca6c0103c39adad0cfce2ba07ffed283796787f6c36f410
checksum: 10c0/06d9c4487a4b0e195133a1fb7a115db7014e49d2567cce73e24c59f473f0e65a1999850a726afb3bdb2d36017a3e5c92ac4fd2a7ecc427da4ff79522765fabdd
languageName: node
linkType: hard
"postcss-normalize-display-values@npm:^6.0.2":
version: 6.0.2
resolution: "postcss-normalize-display-values@npm:6.0.2"
"postcss-normalize-display-values@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-normalize-display-values@npm:7.0.0"
dependencies:
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/782761850c7e697fdb6c3ff53076de716a71b60f9e835efb2f7ef238de347c88b5d55f0d43cf5c608e1ee58de65360e3d9fccd5f20774bba08ded7c87d8a5651
checksum: 10c0/439524e1d3ed36d6265c05da10540e17aa8605e1b396f71ca4364ab3b8b98ca97763c58c211fb9492662429d43613a7fe7009a8638c84a8db327e572c382272a
languageName: node
linkType: hard
"postcss-normalize-positions@npm:^6.0.2":
version: 6.0.2
resolution: "postcss-normalize-positions@npm:6.0.2"
"postcss-normalize-positions@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-normalize-positions@npm:7.0.0"
dependencies:
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/9fdd42a47226bbda5f68774f3c4c3a90eb4fa708aef5a997c6a52fe6cac06585c9774038fe3bc1aa86a203c29223b8d8db6ebe7580c1aa293154f2b48db0b038
checksum: 10c0/428763c937cd178c8ee544cd93a9d1fef667dc9a8700ffe2e61b0beeea7f64f712492b9aeb8a1ef927ab752ec34be7ddeb23d2b50e4bc6eba02b0e58312b27a7
languageName: node
linkType: hard
"postcss-normalize-repeat-style@npm:^6.0.2":
version: 6.0.2
resolution: "postcss-normalize-repeat-style@npm:6.0.2"
"postcss-normalize-repeat-style@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-normalize-repeat-style@npm:7.0.0"
dependencies:
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/9133ccbdf1286920c1cd0d01c1c5fa0bd3251b717f2f3e47d691dcc44978ac1dc419d20d9ae5428bd48ee542059e66b823ba699356f5968ccced5606c7c7ca34
checksum: 10c0/cf7cd9f355fd26f1c9b0c11a923029ac5ea3020520db5a9778dd19c5ee1f48a1f1f368b4ae75fc6b63cb5761eef72333e486ab0de1537b9cb62d213a8c5576d0
languageName: node
linkType: hard
"postcss-normalize-string@npm:^6.0.2":
version: 6.0.2
resolution: "postcss-normalize-string@npm:6.0.2"
"postcss-normalize-string@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-normalize-string@npm:7.0.0"
dependencies:
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/fecc2d52c4029b24fecf2ca2fb45df5dbdf9f35012194ad4ea80bc7be3252cdcb21a0976400902320595aa6178f2cc625cc804c6b6740aef6efa42105973a205
checksum: 10c0/8857563f85841ce432bb9a5a9ba129847890b61693adff96d565b69dc2d5456f54dec33f4f6ce5b0abf0a484dbfb0145846d99f988959c5ac875a86a2a180576
languageName: node
linkType: hard
"postcss-normalize-timing-functions@npm:^6.0.2":
version: 6.0.2
resolution: "postcss-normalize-timing-functions@npm:6.0.2"
"postcss-normalize-timing-functions@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-normalize-timing-functions@npm:7.0.0"
dependencies:
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/a22af0b3374704e59ae70bbbcc66b7029137e284f04e30a2ad548818d1540d6c1ed748dd8f689b9b6df5c1064085a00ad07b6f7e25ffaad49d4e661b616cdeae
checksum: 10c0/bc5f6999b4c9e28e5be785ef90fe68fd48d44059ecc73ee194c2603260597d685b13a1e1751df9a2cee100fea7abb7e1b1cbcf1a7a428a576961705c9d426788
languageName: node
linkType: hard
"postcss-normalize-unicode@npm:^6.1.0":
version: 6.1.0
resolution: "postcss-normalize-unicode@npm:6.1.0"
"postcss-normalize-unicode@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-normalize-unicode@npm:7.0.0"
dependencies:
browserslist: "npm:^4.23.0"
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/ff5746670d94dd97b49a0955c3c71ff516fb4f54bbae257f877d179bacc44a62e50a0fd6e7ddf959f2ca35c335de4266b0c275d880bb57ad7827189339ab1582
checksum: 10c0/f2d6ab0076c006dcf3ed33ba30686f2d29e81a408c66acced22e2c942df6d613697ea786137833dd258aafab5fda4d3eb27df13a82df830357dbad9b79154881
languageName: node
linkType: hard
"postcss-normalize-url@npm:^6.0.2":
version: 6.0.2
resolution: "postcss-normalize-url@npm:6.0.2"
"postcss-normalize-url@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-normalize-url@npm:7.0.0"
dependencies:
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/4718f1c0657788d2c560b340ee8e0a4eb3eb053eba6fbbf489e9a6e739b4c5f9ce1957f54bd03497c50a1f39962bf6ab9ff6ba4976b69dd160f6afd1670d69b7
checksum: 10c0/3050e228be48fe0121d1316c267e629b232e8401a547128d142c3dea55eeae1e232c9beeea5c76439009188993b14925c5cf40e3a44856d076a7b8fcf4721f86
languageName: node
linkType: hard
"postcss-normalize-whitespace@npm:^6.0.2":
version: 6.0.2
resolution: "postcss-normalize-whitespace@npm:6.0.2"
"postcss-normalize-whitespace@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-normalize-whitespace@npm:7.0.0"
dependencies:
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/d5275a88e29a894aeb83a2a833e816d2456dbf3f39961628df596ce205dcc4895186a023812ff691945e0804241ccc53e520d16591b5812288474b474bbaf652
checksum: 10c0/8d61234962a4850fc61292592171e1d13de2e90d96a2eaed8c85672a05caceda02a3bd1cb495cb72414741f99d50083362df14923efaca1b3e09657d24cea34b
languageName: node
linkType: hard
@ -13609,15 +13630,15 @@ __metadata:
languageName: node
linkType: hard
"postcss-ordered-values@npm:^6.0.2":
version: 6.0.2
resolution: "postcss-ordered-values@npm:6.0.2"
"postcss-ordered-values@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-ordered-values@npm:7.0.0"
dependencies:
cssnano-utils: "npm:^4.0.2"
cssnano-utils: "npm:^5.0.0"
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/aece23a289228aa804217a85f8da198d22b9123f02ca1310b81834af380d6fbe115e4300683599b4a2ab7f1c6a1dbd6789724c47c38e2b0a3774f2ea4b4f0963
checksum: 10c0/42b14f9518b573318594c2aeb2f13fd1fbe44936d14f1b28a438e7a82644ace9a2946699bebfe7a2d383534dc24e7203c35308d749f3c585a86daa238ad920a4
languageName: node
linkType: hard
@ -13733,26 +13754,26 @@ __metadata:
languageName: node
linkType: hard
"postcss-reduce-initial@npm:^6.1.0":
version: 6.1.0
resolution: "postcss-reduce-initial@npm:6.1.0"
"postcss-reduce-initial@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-reduce-initial@npm:7.0.0"
dependencies:
browserslist: "npm:^4.23.0"
caniuse-api: "npm:^3.0.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/a8f28cf51ce9a1b9423cce1a01c1d7cbee90125930ec36435a0073e73aef402d90affe2fd3600c964b679cf738869fda447b95a9acce74414e9d67d5c6ba8646
checksum: 10c0/ed50cd680ce258df953b82ce9b3fb52564d08548724577810800e236d017d80430cbccb4b1ad38b0f4d521663598e44ab93136b20064231181ef49e1e113ae10
languageName: node
linkType: hard
"postcss-reduce-transforms@npm:^6.0.2":
version: 6.0.2
resolution: "postcss-reduce-transforms@npm:6.0.2"
"postcss-reduce-transforms@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-reduce-transforms@npm:7.0.0"
dependencies:
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/755ef27b3d083f586ac831f0c611a66e76f504d27e2100dc7674f6b86afad597901b4520cb889fe58ca70e852aa7fd0c0acb69a63d39dfe6a95860b472394e7c
checksum: 10c0/b2d4b65e71d38b604b41937850d1d64794964d6eced90f05891cfae8a78c7a9fed49911f51da9dcc5d715ac18e8bc7eacf691f2c5321dfe4d781f3e4442dfea9
languageName: node
linkType: hard
@ -13801,7 +13822,7 @@ __metadata:
languageName: node
linkType: hard
"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.16, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4":
"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.0.16, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4":
version: 6.0.16
resolution: "postcss-selector-parser@npm:6.0.16"
dependencies:
@ -13811,26 +13832,26 @@ __metadata:
languageName: node
linkType: hard
"postcss-svgo@npm:^6.0.3":
version: 6.0.3
resolution: "postcss-svgo@npm:6.0.3"
"postcss-svgo@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-svgo@npm:7.0.0"
dependencies:
postcss-value-parser: "npm:^4.2.0"
svgo: "npm:^3.2.0"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/994b15a88cbb411f32cfa98957faa5623c76f2d75fede51f5f47238f06b367ebe59c204fecbdaf21ccb9e727239a4b290087e04c502392658a0c881ddfbd61f2
checksum: 10c0/0e724069b5de83aa2b8f8a4746cb60cb663e0a8bbab0e4ba995649cb0562205af57d1f54b89fb90d8ae04a4b7ac3ac6e3751afffc3cff697cb19f7a36b71b195
languageName: node
linkType: hard
"postcss-unique-selectors@npm:^6.0.4":
version: 6.0.4
resolution: "postcss-unique-selectors@npm:6.0.4"
"postcss-unique-selectors@npm:^7.0.0":
version: 7.0.0
resolution: "postcss-unique-selectors@npm:7.0.0"
dependencies:
postcss-selector-parser: "npm:^6.0.16"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/bfb99d8a7c675c93f2e65c9d9d563477bfd46fdce9e2727d42d57982b31ccbaaf944e8034bfbefe48b3119e77fba7eb1b181c19b91cb3a5448058fa66a7c9ae9
checksum: 10c0/33b532ad0e9271c5a379859e18adfdc72986bb538672cc0fbc06295d824f82dba3f7b57264e18a3214901bc5244ff5408d28b530374d24a088507287c7f520ce
languageName: node
linkType: hard
@ -16322,15 +16343,15 @@ __metadata:
languageName: node
linkType: hard
"stylehacks@npm:^6.1.1":
version: 6.1.1
resolution: "stylehacks@npm:6.1.1"
"stylehacks@npm:^7.0.0":
version: 7.0.0
resolution: "stylehacks@npm:7.0.0"
dependencies:
browserslist: "npm:^4.23.0"
postcss-selector-parser: "npm:^6.0.16"
peerDependencies:
postcss: ^8.4.31
checksum: 10c0/2dd2bccfd8311ff71492e63a7b8b86c3d7b1fff55d4ba5a2357aff97743e633d351cdc2f5ae3c0057637d00dab4ef5fc5b218a1b370e4585a41df22b5a5128be
checksum: 10c0/c1c0231974ab7922af3a535a9cb78bfe84997767da7defe111cc76d7f10c9e139fe8cb0f9d5bea87b0c0cc0166c82a6ec98a3d6242d7e29ef90adceecfd330ae
languageName: node
linkType: hard
@ -16727,12 +16748,12 @@ __metadata:
languageName: node
linkType: hard
"thread-stream@npm:^2.0.0":
version: 2.4.1
resolution: "thread-stream@npm:2.4.1"
"thread-stream@npm:^2.0.0, thread-stream@npm:^2.6.0":
version: 2.6.0
resolution: "thread-stream@npm:2.6.0"
dependencies:
real-require: "npm:^0.2.0"
checksum: 10c0/ce29265810b9550ce896726301ff006ebfe96b90292728f07cfa4c379740585583046e2a8018afc53aca66b18fed12b33a84f3883e7ebc317185f6682898b8f8
checksum: 10c0/276e2545b33273232eb2c22c53fc11844951c1322f8a78c522477af716ebcfe0d106ccf1fbc455f6e48d928e93231fed6377ce91fdcb3885086e8ffa1f011c88
languageName: node
linkType: hard