diff --git a/.prettierignore b/.prettierignore index 8f16e731c88..098dac67177 100644 --- a/.prettierignore +++ b/.prettierignore @@ -81,3 +81,6 @@ AUTHORS.md # Process a few selected JS files !lint-staged.config.js + +# Ignore config YAML files that include ERB/ruby code prettier does not understand +/config/email.yml diff --git a/app/javascript/mastodon/components/column_header.tsx b/app/javascript/mastodon/components/column_header.tsx index 3a8d245b2a3..da80a864795 100644 --- a/app/javascript/mastodon/components/column_header.tsx +++ b/app/javascript/mastodon/components/column_header.tsx @@ -18,7 +18,7 @@ import { useIdentity } from 'mastodon/identity_context'; import { useAppHistory } from './router'; -const messages = defineMessages({ +export const messages = defineMessages({ show: { id: 'column_header.show_settings', defaultMessage: 'Show settings' }, hide: { id: 'column_header.hide_settings', defaultMessage: 'Hide settings' }, moveLeft: { diff --git a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx deleted file mode 100644 index 276bcbebad0..00000000000 --- a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.jsx +++ /dev/null @@ -1,53 +0,0 @@ -import PropTypes from 'prop-types'; -import { PureComponent } from 'react'; - -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; - -import { connect } from 'react-redux'; - -import SettingsIcon from '@/material-icons/400-20px/settings.svg?react'; -import CloseIcon from '@/material-icons/400-24px/close.svg?react'; -import { requestBrowserPermission } from 'mastodon/actions/notifications'; -import { changeSetting } from 'mastodon/actions/settings'; -import { Button } from 'mastodon/components/button'; -import { Icon } from 'mastodon/components/icon'; -import { IconButton } from 'mastodon/components/icon_button'; - -const messages = defineMessages({ - close: { id: 'lightbox.close', defaultMessage: 'Close' }, -}); - -class NotificationsPermissionBanner extends PureComponent { - - static propTypes = { - dispatch: PropTypes.func.isRequired, - intl: PropTypes.object.isRequired, - }; - - handleClick = () => { - this.props.dispatch(requestBrowserPermission()); - }; - - handleClose = () => { - this.props.dispatch(changeSetting(['notifications', 'dismissPermissionBanner'], true)); - }; - - render () { - const { intl } = this.props; - - return ( -
-
- -
- -

-

}} />

- -
- ); - } - -} - -export default connect()(injectIntl(NotificationsPermissionBanner)); diff --git a/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.tsx b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.tsx new file mode 100644 index 00000000000..c4617864513 --- /dev/null +++ b/app/javascript/mastodon/features/notifications/components/notifications_permission_banner.tsx @@ -0,0 +1,74 @@ +import { useCallback } from 'react'; + +import { defineMessages, FormattedMessage, useIntl } from 'react-intl'; + +import { useAppDispatch } from '@/mastodon/store'; +import CloseIcon from '@/material-icons/400-24px/close.svg?react'; +import UnfoldMoreIcon from '@/material-icons/400-24px/unfold_more.svg?react'; +import { requestBrowserPermission } from 'mastodon/actions/notifications'; +import { changeSetting } from 'mastodon/actions/settings'; +import { Button } from 'mastodon/components/button'; +import { messages as columnHeaderMessages } from 'mastodon/components/column_header'; +import { Icon } from 'mastodon/components/icon'; +import { IconButton } from 'mastodon/components/icon_button'; + +const messages = defineMessages({ + close: { id: 'lightbox.close', defaultMessage: 'Close' }, +}); + +const NotificationsPermissionBanner: React.FC = () => { + const intl = useIntl(); + const dispatch = useAppDispatch(); + + const handleClick = useCallback(() => { + dispatch(requestBrowserPermission()); + }, [dispatch]); + + const handleClose = useCallback(() => { + dispatch(changeSetting(['notifications', 'dismissPermissionBanner'], true)); + }, [dispatch]); + + return ( +
+
+ +
+ +

+ +

+

+ + ), + }} + /> +

+ +
+ ); +}; + +// eslint-disable-next-line import/no-default-export +export default NotificationsPermissionBanner; diff --git a/app/javascript/mastodon/features/ui/components/confirmation_modals/confirmation_modal.tsx b/app/javascript/mastodon/features/ui/components/confirmation_modals/confirmation_modal.tsx index 929b1a240fb..7a0bfe6a944 100644 --- a/app/javascript/mastodon/features/ui/components/confirmation_modals/confirmation_modal.tsx +++ b/app/javascript/mastodon/features/ui/components/confirmation_modals/confirmation_modal.tsx @@ -13,6 +13,7 @@ export const ConfirmationModal: React.FC< title: React.ReactNode; message: React.ReactNode; confirm: React.ReactNode; + cancel?: React.ReactNode; secondary?: React.ReactNode; onSecondary?: () => void; onConfirm: () => void; @@ -22,6 +23,7 @@ export const ConfirmationModal: React.FC< title, message, confirm, + cancel, onClose, onConfirm, secondary, @@ -57,10 +59,12 @@ export const ConfirmationModal: React.FC<
{secondary && ( diff --git a/app/javascript/mastodon/features/ui/components/confirmation_modals/discard_draft_confirmation.tsx b/app/javascript/mastodon/features/ui/components/confirmation_modals/discard_draft_confirmation.tsx new file mode 100644 index 00000000000..206e31efc9e --- /dev/null +++ b/app/javascript/mastodon/features/ui/components/confirmation_modals/discard_draft_confirmation.tsx @@ -0,0 +1,104 @@ +import { useCallback } from 'react'; + +import { defineMessages, useIntl } from 'react-intl'; + +import { replyCompose } from 'mastodon/actions/compose'; +import { editStatus } from 'mastodon/actions/statuses'; +import type { Status } from 'mastodon/models/status'; +import { useAppDispatch, useAppSelector } from 'mastodon/store'; + +import type { BaseConfirmationModalProps } from './confirmation_modal'; +import { ConfirmationModal } from './confirmation_modal'; + +const editMessages = defineMessages({ + title: { + id: 'confirmations.discard_draft.edit.title', + defaultMessage: 'Discard changes to your post?', + }, + message: { + id: 'confirmations.discard_draft.edit.message', + defaultMessage: + 'Continuing will discard any changes you have made to the post you are currently editing.', + }, + cancel: { + id: 'confirmations.discard_draft.edit.cancel', + defaultMessage: 'Resume editing', + }, +}); + +const postMessages = defineMessages({ + title: { + id: 'confirmations.discard_draft.post.title', + defaultMessage: 'Discard your draft post?', + }, + message: { + id: 'confirmations.discard_draft.post.message', + defaultMessage: + 'Continuing will discard the post you are currently composing.', + }, + cancel: { + id: 'confirmations.discard_draft.post.cancel', + defaultMessage: 'Resume draft', + }, +}); + +const messages = defineMessages({ + confirm: { + id: 'confirmations.discard_draft.confirm', + defaultMessage: 'Discard and continue', + }, +}); + +const DiscardDraftConfirmationModal: React.FC< + { + onConfirm: () => void; + } & BaseConfirmationModalProps +> = ({ onConfirm, onClose }) => { + const intl = useIntl(); + const isEditing = useAppSelector((state) => !!state.compose.get('id')); + + const contextualMessages = isEditing ? editMessages : postMessages; + + return ( + + ); +}; + +export const ConfirmReplyModal: React.FC< + { + status: Status; + } & BaseConfirmationModalProps +> = ({ status, onClose }) => { + const dispatch = useAppDispatch(); + + const onConfirm = useCallback(() => { + dispatch(replyCompose(status)); + }, [dispatch, status]); + + return ( + + ); +}; + +export const ConfirmEditStatusModal: React.FC< + { + statusId: string; + } & BaseConfirmationModalProps +> = ({ statusId, onClose }) => { + const dispatch = useAppDispatch(); + + const onConfirm = useCallback(() => { + dispatch(editStatus(statusId)); + }, [dispatch, statusId]); + + return ( + + ); +}; diff --git a/app/javascript/mastodon/features/ui/components/confirmation_modals/edit_status.tsx b/app/javascript/mastodon/features/ui/components/confirmation_modals/edit_status.tsx deleted file mode 100644 index fb958518c25..00000000000 --- a/app/javascript/mastodon/features/ui/components/confirmation_modals/edit_status.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { useCallback } from 'react'; - -import { defineMessages, useIntl } from 'react-intl'; - -import { editStatus } from 'mastodon/actions/statuses'; -import { useAppDispatch } from 'mastodon/store'; - -import type { BaseConfirmationModalProps } from './confirmation_modal'; -import { ConfirmationModal } from './confirmation_modal'; - -const messages = defineMessages({ - editTitle: { - id: 'confirmations.edit.title', - defaultMessage: 'Overwrite post?', - }, - editConfirm: { id: 'confirmations.edit.confirm', defaultMessage: 'Edit' }, - editMessage: { - id: 'confirmations.edit.message', - defaultMessage: - 'Editing now will overwrite the message you are currently composing. Are you sure you want to proceed?', - }, -}); - -export const ConfirmEditStatusModal: React.FC< - { - statusId: string; - } & BaseConfirmationModalProps -> = ({ statusId, onClose }) => { - const intl = useIntl(); - const dispatch = useAppDispatch(); - - const onConfirm = useCallback(() => { - dispatch(editStatus(statusId)); - }, [dispatch, statusId]); - - return ( - - ); -}; diff --git a/app/javascript/mastodon/features/ui/components/confirmation_modals/index.ts b/app/javascript/mastodon/features/ui/components/confirmation_modals/index.ts index 4893fb096ad..25ffb3b6291 100644 --- a/app/javascript/mastodon/features/ui/components/confirmation_modals/index.ts +++ b/app/javascript/mastodon/features/ui/components/confirmation_modals/index.ts @@ -1,8 +1,10 @@ export { ConfirmationModal } from './confirmation_modal'; export { ConfirmDeleteStatusModal } from './delete_status'; export { ConfirmDeleteListModal } from './delete_list'; -export { ConfirmReplyModal } from './reply'; -export { ConfirmEditStatusModal } from './edit_status'; +export { + ConfirmReplyModal, + ConfirmEditStatusModal, +} from './discard_draft_confirmation'; export { ConfirmUnfollowModal } from './unfollow'; export { ConfirmClearNotificationsModal } from './clear_notifications'; export { ConfirmLogOutModal } from './log_out'; diff --git a/app/javascript/mastodon/features/ui/components/confirmation_modals/reply.tsx b/app/javascript/mastodon/features/ui/components/confirmation_modals/reply.tsx deleted file mode 100644 index cccd62e4b41..00000000000 --- a/app/javascript/mastodon/features/ui/components/confirmation_modals/reply.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { useCallback } from 'react'; - -import { defineMessages, useIntl } from 'react-intl'; - -import { replyCompose } from 'mastodon/actions/compose'; -import type { Status } from 'mastodon/models/status'; -import { useAppDispatch } from 'mastodon/store'; - -import type { BaseConfirmationModalProps } from './confirmation_modal'; -import { ConfirmationModal } from './confirmation_modal'; - -const messages = defineMessages({ - replyTitle: { - id: 'confirmations.reply.title', - defaultMessage: 'Overwrite post?', - }, - replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' }, - replyMessage: { - id: 'confirmations.reply.message', - defaultMessage: - 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?', - }, -}); - -export const ConfirmReplyModal: React.FC< - { - status: Status; - } & BaseConfirmationModalProps -> = ({ status, onClose }) => { - const intl = useIntl(); - const dispatch = useAppDispatch(); - - const onConfirm = useCallback(() => { - dispatch(replyCompose(status)); - }, [dispatch, status]); - - return ( - - ); -}; diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 5fab19b38f5..2f90502fb33 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -24,7 +24,7 @@ "account.blocking": "Blokering", "account.cancel_follow_request": "Annullér anmodning om at følge", "account.copy": "Kopiér link til profil", - "account.direct": "Privat omtale @{name}", + "account.direct": "Nævn @{name} privat", "account.disable_notifications": "Advisér mig ikke længere, når @{name} poster", "account.domain_blocking": "Blokerer domæne", "account.edit_profile": "Redigér profil", @@ -121,7 +121,7 @@ "annual_report.summary.highlighted_post.by_replies": "mest besvarede indlæg", "annual_report.summary.highlighted_post.possessive": "{name}s", "annual_report.summary.most_used_app.most_used_app": "mest benyttede app", - "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest benyttede etiket", + "annual_report.summary.most_used_hashtag.most_used_hashtag": "mest benyttede hashtag", "annual_report.summary.most_used_hashtag.none": "Intet", "annual_report.summary.new_posts.new_posts": "nye indlæg", "annual_report.summary.percentile.text": "Det betyder, at man er i topaf {domain}-brugere.", @@ -194,10 +194,10 @@ "compose.saved.body": "Indlæg gemt.", "compose_form.direct_message_warning_learn_more": "Få mere at vide", "compose_form.encryption_warning": "Indlæg på Mastodon er ikke ende-til-ende-krypteret. Del derfor ikke sensitiv information via Mastodon.", - "compose_form.hashtag_warning": "Da indlægget ikke er offentligt, vises det ikke under nogen etiket, da kun offentlige indlæg er søgbare via etiketter.", + "compose_form.hashtag_warning": "Da indlægget ikke er offentligt, vises det ikke under noget hashtag, da kun offentlige indlæg er søgbare via hashtags.", "compose_form.lock_disclaimer": "Din konto er ikke {locked}. Enhver kan følge dig og se indlæg kun beregnet for følgere.", "compose_form.lock_disclaimer.lock": "låst", - "compose_form.placeholder": "Hvad tænker du på?", + "compose_form.placeholder": "Hvad har du på hjertet?", "compose_form.poll.duration": "Afstemningens varighed", "compose_form.poll.multiple": "Multivalg", "compose_form.poll.option_placeholder": "Valgmulighed {number}", @@ -205,7 +205,7 @@ "compose_form.poll.switch_to_multiple": "Ændr afstemning til flervalgstype", "compose_form.poll.switch_to_single": "Ændr afstemning til enkeltvalgstype", "compose_form.poll.type": "Stil", - "compose_form.publish": "Indsend", + "compose_form.publish": "Slå op", "compose_form.reply": "Svar", "compose_form.save_changes": "Opdatér", "compose_form.spoiler.marked": "Fjern emnefelt", @@ -305,8 +305,8 @@ "emoji_button.search_results": "Søgeresultater", "emoji_button.symbols": "Symboler", "emoji_button.travel": "Rejser og steder", - "empty_column.account_featured.me": "Intet fremhævet endnu. Vidste du, at man kan fremhæve sine mest brugte hashtags og endda en vens konti på sin profil?", - "empty_column.account_featured.other": "{acct} har ikke fremhævet noget endnu. Vidste du, at man kan fremhæve sine mest brugte hashtags og endda en vens konti på sin profil?", + "empty_column.account_featured.me": "Intet fremhævet endnu. Vidste du, at man kan fremhæve sine mest brugte hashtags og endda din vens konti på din profil?", + "empty_column.account_featured.other": "{acct} har ikke fremhævet noget endnu. Vidste du, at du kan fremhæve dine mest brugte hashtags og endda din vens konti på din profil?", "empty_column.account_featured_other.unknown": "Denne konto har ikke fremhævet noget endnu.", "empty_column.account_hides_collections": "Brugeren har valgt ikke at gøre denne information tilgængelig", "empty_column.account_suspended": "Konto suspenderet", @@ -321,8 +321,8 @@ "empty_column.favourited_statuses": "Du har endnu ingen favoritindlæg. Når du føjer et opslag til favoritter, vil det dukke op her.", "empty_column.favourites": "Ingen har endnu føjet dette indlæg til favoritter. Når nogen gør det, vil det dukke op her.", "empty_column.follow_requests": "Du har endnu ingen følgeanmodninger. Når du modtager én, vil den dukke op her.", - "empty_column.followed_tags": "Ingen etiketter følges endnu. Når det sker, vil de fremgå her.", - "empty_column.hashtag": "Der er intet med denne etiket endnu.", + "empty_column.followed_tags": "Ingen hashtags følges endnu. Når det sker, vil de fremgå her.", + "empty_column.hashtag": "Der er intet med dette hashtag endnu.", "empty_column.home": "Din hjemmetidslinje er tom! Følg nogle personer, for at fylde den op.", "empty_column.list": "Der er ikke noget på denne liste endnu. Når medlemmer af listen udgiver nye indlæg vil de fremgå her.", "empty_column.mutes": "Du har endnu ikke skjult nogle brugere.", @@ -336,9 +336,10 @@ "errors.unexpected_crash.copy_stacktrace": "Kopiér stacktrace til udklipsholderen", "errors.unexpected_crash.report_issue": "Anmeld problem", "explore.suggested_follows": "Personer", + "explore.title": "Trender", "explore.trending_links": "Nyheder", "explore.trending_statuses": "Indlæg", - "explore.trending_tags": "Etiketter", + "explore.trending_tags": "Hashtags", "featured_carousel.header": "{count, plural, one {Fastgjort indlæg} other {Fastgjorte indlæg}}", "featured_carousel.next": "Næste", "featured_carousel.post": "Indlæg", @@ -384,7 +385,7 @@ "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": "Etiketter, som følges", + "followed_tags": "Hashtag, som følges", "footer.about": "Om", "footer.directory": "Profiloversigt", "footer.get_app": "Hent appen", @@ -402,7 +403,7 @@ "hashtag.column_header.tag_mode.any": "eller {additional}", "hashtag.column_header.tag_mode.none": "uden {additional}", "hashtag.column_settings.select.no_options_message": "Ingen forslag fundet", - "hashtag.column_settings.select.placeholder": "Angiv etiketter…", + "hashtag.column_settings.select.placeholder": "Angiv hashtags…", "hashtag.column_settings.tag_mode.all": "Alle disse", "hashtag.column_settings.tag_mode.any": "Nogle af disse", "hashtag.column_settings.tag_mode.none": "Ingen af disse", @@ -411,10 +412,10 @@ "hashtag.counter_by_uses": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}}", "hashtag.counter_by_uses_today": "{count, plural, one {{counter} indlæg} other {{counter} indlæg}} i dag", "hashtag.feature": "Fremhæv på profil", - "hashtag.follow": "Følg etiket", + "hashtag.follow": "Følg hashtag", "hashtag.mute": "Tavsgør #{hashtag}", "hashtag.unfeature": "Fremhæv ikke på profil", - "hashtag.unfollow": "Stop med at følge etiket", + "hashtag.unfollow": "Følg ikke længere hashtag", "hashtags.and_other": "…og {count, plural, one {}other {# flere}}", "hints.profiles.followers_may_be_missing": "Der kan mangle følgere for denne profil.", "hints.profiles.follows_may_be_missing": "Fulgte kan mangle for denne profil.", @@ -442,7 +443,7 @@ "ignore_notifications_modal.new_accounts_title": "Ignorér notifikationer fra nye konti?", "ignore_notifications_modal.not_followers_title": "Ignorér notifikationer fra folk, som ikke er følgere?", "ignore_notifications_modal.not_following_title": "Ignorér notifikationer fra folk, man ikke følger?", - "ignore_notifications_modal.private_mentions_title": "Ignorér notifikationer fra uopfordrede Private omtaler?", + "ignore_notifications_modal.private_mentions_title": "Ignorér notifikationer fra uopfordrede private omtaler?", "info_button.label": "Hjælp", "info_button.what_is_alt_text": "

Hvad er alt-tekst?

Alt-tekst leverer billedbeskrivelser til folk med synsnedsættelser, lav båndbredde-forbindelser eller med ønske om ekstra kontekst.

Tilgængelighed og forståelse kan forbedres for alle ved at skrive klar, kortfattet og objektiv alt-tekst.

  • Fang vigtige elementer
  • Opsummér tekst i billeder
  • Brug almindelig sætningsstruktur
  • Undgå overflødig information
  • Fokusér på tendenser og centrale resultater i kompleks grafik (såsom diagrammer eller kort)
", "interaction_modal.action.favourite": "For at fortsætte, skal du føje til favoritter fra din konto.", @@ -558,7 +559,7 @@ "navigation_bar.favourites": "Favoritter", "navigation_bar.filters": "Skjulte ord", "navigation_bar.follow_requests": "Følgeanmodninger", - "navigation_bar.followed_tags": "Etiketter, som følges", + "navigation_bar.followed_tags": "Hashtag, som følges", "navigation_bar.follows_and_followers": "Følges og følgere", "navigation_bar.import_export": "Import og eksport", "navigation_bar.lists": "Lister", @@ -574,7 +575,9 @@ "navigation_bar.search": "Søg", "navigation_bar.search_trends": "Søg/Populære", "navigation_panel.collapse_followed_tags": "Sammenfold menuen Fulgte hashtags", + "navigation_panel.collapse_lists": "Luk listemenu", "navigation_panel.expand_followed_tags": "Udfold menuen Fulgte hashtags", + "navigation_panel.expand_lists": "Udvid listemenu", "not_signed_in_indicator.not_signed_in": "Log ind for at tilgå denne ressource.", "notification.admin.report": "{name} anmeldte {target}", "notification.admin.report_account": "{name} anmeldte {count, plural, one {et indlæg} other {# indlæg}} fra {target} angående {category}", @@ -703,7 +706,7 @@ "onboarding.profile.display_name": "Vist navn", "onboarding.profile.display_name_hint": "Dit fulde navn eller dit sjove navn…", "onboarding.profile.note": "Bio", - "onboarding.profile.note_hint": "Man kan @omtale andre personer eller #etiketter…", + "onboarding.profile.note_hint": "Du kan @omtale andre personer eller #hashtags…", "onboarding.profile.save_and_continue": "Gem og fortsæt", "onboarding.profile.title": "Profilopsætning", "onboarding.profile.upload_avatar": "Upload profilbillede", @@ -728,9 +731,9 @@ "privacy.private.short": "Følgere", "privacy.public.long": "Alle på og udenfor Mastodon", "privacy.public.short": "Offentlig", - "privacy.unlisted.additional": "Dette er præcis som offentlig adfærd, dog vises indlægget ikke i tidslinjer, under etiketter, udforsk eller Mastodon-søgning, selv hvis du ellers har sagt at dine opslag godt må være søgbare.", + "privacy.unlisted.additional": "Dette er præcis som offentlig adfærd, dog vises indlægget ikke i live feeds/hashtags, udforsk eller Mastodon-søgning, selv hvis valget gælder hele kontoen.", "privacy.unlisted.long": "Færre algoritmiske fanfarer", - "privacy.unlisted.short": "Stille offentligt", + "privacy.unlisted.short": "Offentlig (stille)", "privacy_policy.last_updated": "Senest opdateret {date}", "privacy_policy.title": "Privatlivspolitik", "recommended": "Anbefalet", @@ -801,14 +804,15 @@ "report_notification.categories.violation": "Regelovertrædelse", "report_notification.categories.violation_sentence": "regelovertrædelse", "report_notification.open": "Åbn anmeldelse", + "search.clear": "Ryd søgning", "search.no_recent_searches": "Ingen seneste søgninger", "search.placeholder": "Søg", "search.quick_action.account_search": "Profiler matchende {x}", "search.quick_action.go_to_account": "Gå til profilen {x}", - "search.quick_action.go_to_hashtag": "Gå til etiketten {x}", + "search.quick_action.go_to_hashtag": "Gå til hashtagget {x}", "search.quick_action.open_url": "Åbn URL i Mastodon", "search.quick_action.status_search": "Indlæg matchende {x}", - "search.search_or_paste": "Søg efter eller angiv URL", + "search.search_or_paste": "Søg eller indsæt URL", "search_popout.full_text_search_disabled_message": "Utilgængelig på {domain}.", "search_popout.full_text_search_logged_out_message": "Kun tilgængelig, når logget ind.", "search_popout.language_code": "ISO-sprogkode", @@ -819,9 +823,9 @@ "search_popout.user": "bruger", "search_results.accounts": "Profiler", "search_results.all": "Alle", - "search_results.hashtags": "Etiketter", + "search_results.hashtags": "Hashtags", "search_results.no_results": "Ingen resultater.", - "search_results.no_search_yet": "Prøv at søge efter indlæg, profiler eller etiketter.", + "search_results.no_search_yet": "Prøv at søge efter indlæg, profiler eller hashtags.", "search_results.see_all": "Vis alle", "search_results.statuses": "Indlæg", "search_results.title": "Søg efter \"{q}\"", @@ -846,7 +850,7 @@ "status.copy": "Kopiér link til indlæg", "status.delete": "Slet", "status.detailed_status": "Detaljeret samtalevisning", - "status.direct": "Privat omtale @{name}", + "status.direct": "Nævn @{name} privat", "status.direct_indicator": "Privat omtale", "status.edit": "Redigér", "status.edited": "Senest redigeret {date}", @@ -903,7 +907,10 @@ "subscribed_languages.save": "Gem ændringer", "subscribed_languages.target": "Skift abonnementssprog for {target}", "tabs_bar.home": "Hjem", + "tabs_bar.menu": "Menu", "tabs_bar.notifications": "Notifikationer", + "tabs_bar.publish": "Nyt indlæg", + "tabs_bar.search": "Søg", "terms_of_service.effective_as_of": "Gældende pr. {date}", "terms_of_service.title": "Tjenestevilkår", "terms_of_service.upcoming_changes_on": "Kommende ændringer pr. {date}", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 6a2a7a885b1..59d39a15361 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -219,11 +219,15 @@ "confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", "confirmations.delete_list.title": "Delete list?", + "confirmations.discard_draft.confirm": "Discard and continue", + "confirmations.discard_draft.edit.cancel": "Resume editing", + "confirmations.discard_draft.edit.message": "Continuing will discard any changes you have made to the post you are currently editing.", + "confirmations.discard_draft.edit.title": "Discard changes to your post?", + "confirmations.discard_draft.post.cancel": "Resume draft", + "confirmations.discard_draft.post.message": "Continuing will discard the post you are currently composing.", + "confirmations.discard_draft.post.title": "Discard your draft post?", "confirmations.discard_edit_media.confirm": "Discard", "confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?", - "confirmations.edit.confirm": "Edit", - "confirmations.edit.message": "Editing now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.edit.title": "Overwrite post?", "confirmations.follow_to_list.confirm": "Follow and add to list", "confirmations.follow_to_list.message": "You need to be following {name} to add them to a list.", "confirmations.follow_to_list.title": "Follow user?", @@ -241,9 +245,6 @@ "confirmations.remove_from_followers.confirm": "Remove follower", "confirmations.remove_from_followers.message": "{name} will stop following you. Are you sure you want to proceed?", "confirmations.remove_from_followers.title": "Remove follower?", - "confirmations.reply.confirm": "Reply", - "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", - "confirmations.reply.title": "Overwrite post?", "confirmations.unfollow.confirm": "Unfollow", "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", "confirmations.unfollow.title": "Unfollow user?", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 008c13ce172..855896bce86 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -569,6 +569,7 @@ "navigation_bar.mutes": "کاربران خموشانده", "navigation_bar.opened_in_classic_interface": "فرسته‌ها، حساب‌ها و دیگر صفحه‌های خاص به طور پیش‌گزیده در میانای وب کلاسیک گشوده می‌شوند.", "navigation_bar.preferences": "ترجیحات", + "navigation_bar.privacy_and_reach": "محرمانگی و دسترسی", "navigation_bar.search": "جست‌وجو", "navigation_bar.search_trends": "جستجو \\ پرطرفدار", "not_signed_in_indicator.not_signed_in": "برای دسترسی به این منبع باید وارد شوید.", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index e5549021ddc..360554cf634 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -804,6 +804,7 @@ "report_notification.categories.violation": "Sääntörikkomus", "report_notification.categories.violation_sentence": "sääntörikkomus", "report_notification.open": "Avaa raportti", + "search.clear": "Tyhjennä haku", "search.no_recent_searches": "Ei viimeaikaisia hakuja", "search.placeholder": "Hae", "search.quick_action.account_search": "Profiilit haulla {x}", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 32a35c62ad6..e17efeafaa8 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -563,6 +563,8 @@ "navigation_bar.follows_and_followers": "Ag leanúint agus do do leanúint", "navigation_bar.import_export": "Allmhairiú agus onnmhairiú", "navigation_bar.lists": "Liostaí", + "navigation_bar.live_feed_local": "Fotha beo (áitiúil)", + "navigation_bar.live_feed_public": "Fotha beo (poiblí)", "navigation_bar.logout": "Logáil Amach", "navigation_bar.moderation": "Measarthacht", "navigation_bar.more": "Tuilleadh", @@ -802,6 +804,7 @@ "report_notification.categories.violation": "Sárú rialach", "report_notification.categories.violation_sentence": "sárú riail", "report_notification.open": "Oscail tuairisc", + "search.clear": "Glan an cuardach", "search.no_recent_searches": "Níl aon chuardach le déanaí", "search.placeholder": "Cuardaigh", "search.quick_action.account_search": "Próifílí a mheaitseálann {x}", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 9af9fdf2ea0..b018cc8b796 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -573,7 +573,10 @@ "navigation_bar.preferences": "Preferências", "navigation_bar.privacy_and_reach": "Privacidade e alcance", "navigation_bar.search": "Pesquisar", + "navigation_bar.search_trends": "Pesquisar / Em destaque", + "navigation_panel.collapse_followed_tags": "Recolher o menu de etiquetas seguidas", "navigation_panel.collapse_lists": "Recolher lista de menu", + "navigation_panel.expand_followed_tags": "Expandir o menu de etiquetas seguidas", "navigation_panel.expand_lists": "Expandir lista de menu", "not_signed_in_indicator.not_signed_in": "Tens de iniciar a sessão para utilizares esta funcionalidade.", "notification.admin.report": "{name} denunciou {target}", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index dce92940ca0..2abc07d85a2 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -804,6 +804,7 @@ "report_notification.categories.violation": "Kural ihlali", "report_notification.categories.violation_sentence": "kural ihlali", "report_notification.open": "Bildirim aç", + "search.clear": "Aramayı temizle", "search.no_recent_searches": "Son arama yok", "search.placeholder": "Ara", "search.quick_action.account_search": "Eşleşen profiller {x}", diff --git a/app/lib/search_query_transformer.rb b/app/lib/search_query_transformer.rb index 59352c6e6e3..fae2403281e 100644 --- a/app/lib/search_query_transformer.rb +++ b/app/lib/search_query_transformer.rb @@ -35,7 +35,7 @@ class SearchQueryTransformer < Parslet::Transform private def clauses_by_operator - @clauses_by_operator ||= @clauses.compact.chunk(&:operator).to_h + @clauses_by_operator ||= @clauses.compact.group_by(&:operator) end def flags_from_clauses! diff --git a/app/views/admin/terms_of_service/index.html.haml b/app/views/admin/terms_of_service/index.html.haml index 636851b449f..f34d1bda44a 100644 --- a/app/views/admin/terms_of_service/index.html.haml +++ b/app/views/admin/terms_of_service/index.html.haml @@ -40,4 +40,3 @@ .content__heading__actions = link_to t('admin.terms_of_service.create'), admin_terms_of_service_draft_path, class: 'button' - = link_to t('admin.terms_of_service.generate'), admin_terms_of_service_generate_path, class: 'button button-secondary' diff --git a/config/application.rb b/config/application.rb index 2021810ed59..90cfe47428f 100644 --- a/config/application.rb +++ b/config/application.rb @@ -35,6 +35,7 @@ require_relative '../lib/paperclip/response_with_limit_adapter' require_relative '../lib/terrapin/multi_pipe_extensions' require_relative '../lib/mastodon/middleware/public_file_server' require_relative '../lib/mastodon/middleware/socket_cleanup' +require_relative '../lib/mastodon/email_configuration_helper' require_relative '../lib/mastodon/feature' require_relative '../lib/mastodon/snowflake' require_relative '../lib/mastodon/version' @@ -104,6 +105,7 @@ module Mastodon config.x.cache_buster = config_for(:cache_buster) config.x.captcha = config_for(:captcha) + config.x.email = config_for(:email) config.x.mastodon = config_for(:mastodon) config.x.omniauth = config_for(:omniauth) config.x.translation = config_for(:translation) diff --git a/config/email.yml b/config/email.yml new file mode 100644 index 00000000000..0480520c3e6 --- /dev/null +++ b/config/email.yml @@ -0,0 +1,21 @@ +# Note that these settings only apply in `production` even when other +# keys are added here. +production: + delivery_method: <%= ENV.fetch('SMTP_DELIVERY_METHOD', 'smtp') %> + from_address: <%= ENV.fetch('SMTP_FROM_ADDRESS', 'notifications@localhost') %> + reply_to: <%= ENV.fetch('SMTP_REPLY_TO', nil) %> + return_path: <%= ENV.fetch('SMTP_RETURN_PATH', nil) %> + smtp_settings: + port: <%= ENV.fetch('SMTP_PORT', nil) %> + address: <%= ENV.fetch('SMTP_SERVER', nil) %> + user_name: <%= ENV.fetch('SMTP_LOGIN', nil) %> + password: <%= ENV.fetch('SMTP_PASSWORD', nil) %> + domain: <%= ENV.fetch('SMTP_DOMAIN', ENV.fetch('LOCAL_DOMAIN', nil)) %> + authentication: <%= ENV.fetch('SMTP_AUTH_METHOD', 'plain') %> + ca_file: <%= ENV.fetch('SMTP_CA_FILE', '/etc/ssl/certs/ca-certificates.crt') %> + openssl_verify_mode: <%= ENV.fetch('SMTP_OPENSSL_VERIFY_MODE', nil) %> + enable_starttls: <%= ENV.fetch('SMTP_ENABLE_STARTTLS', nil) %> + enable_starttls_auto: <%= ENV.fetch('SMTP_ENABLE_STARTTLS_AUTO', true) != 'false' %> + tls: <%= ENV.fetch('SMTP_TLS', false) == 'true' ? true : nil %> + ssl: <%= ENV.fetch('SMTP_SSL', false) == 'true' ? true : nil %> + read_timeout: 20 diff --git a/config/environments/production.rb b/config/environments/production.rb index efe422c3c8e..af57eec5601 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -99,7 +99,7 @@ Rails.application.configure do config.action_mailer.perform_caching = false # E-mails - outgoing_email_address = ENV.fetch('SMTP_FROM_ADDRESS', 'notifications@localhost') + outgoing_email_address = config.x.email.from_address outgoing_email_domain = Mail::Address.new(outgoing_email_address).domain config.action_mailer.default_options = { @@ -107,40 +107,12 @@ Rails.application.configure do message_id: -> { "<#{Mail.random_tag}@#{outgoing_email_domain}>" }, } - config.action_mailer.default_options[:reply_to] = ENV['SMTP_REPLY_TO'] if ENV['SMTP_REPLY_TO'].present? - config.action_mailer.default_options[:return_path] = ENV['SMTP_RETURN_PATH'] if ENV['SMTP_RETURN_PATH'].present? + config.action_mailer.default_options[:reply_to] = config.x.email.reply_to if config.x.email.reply_to.present? + config.action_mailer.default_options[:return_path] = config.x.email.return_path if config.x.email.return_path.present? - enable_starttls = nil - enable_starttls_auto = nil + config.action_mailer.smtp_settings = Mastodon::EmailConfigurationHelper.smtp_settings(config.x.email.smtp_settings) - case ENV.fetch('SMTP_ENABLE_STARTTLS', nil) - when 'always' - enable_starttls = true - when 'never' - enable_starttls = false - when 'auto' - enable_starttls_auto = true - else - enable_starttls_auto = ENV['SMTP_ENABLE_STARTTLS_AUTO'] != 'false' - end - - config.action_mailer.smtp_settings = { - port: ENV.fetch('SMTP_PORT', nil), - address: ENV.fetch('SMTP_SERVER', nil), - user_name: ENV['SMTP_LOGIN'].presence, - password: ENV['SMTP_PASSWORD'].presence, - domain: ENV['SMTP_DOMAIN'] || ENV.fetch('LOCAL_DOMAIN', nil), - authentication: ENV['SMTP_AUTH_METHOD'] == 'none' ? nil : ENV['SMTP_AUTH_METHOD'] || :plain, - ca_file: ENV['SMTP_CA_FILE'].presence || '/etc/ssl/certs/ca-certificates.crt', - openssl_verify_mode: ENV.fetch('SMTP_OPENSSL_VERIFY_MODE', nil), - enable_starttls: enable_starttls, - enable_starttls_auto: enable_starttls_auto, - tls: ENV['SMTP_TLS'].presence && ENV['SMTP_TLS'] == 'true', - ssl: ENV['SMTP_SSL'].presence && ENV['SMTP_SSL'] == 'true', - read_timeout: 20, - } - - config.action_mailer.delivery_method = ENV.fetch('SMTP_DELIVERY_METHOD', 'smtp').to_sym + config.action_mailer.delivery_method = config.x.email.delivery_method.to_sym config.action_dispatch.default_headers = { 'Server' => 'Mastodon', diff --git a/config/i18n-tasks.yml b/config/i18n-tasks.yml index fc043c4223e..0dbc0873855 100644 --- a/config/i18n-tasks.yml +++ b/config/i18n-tasks.yml @@ -71,6 +71,7 @@ ignore_unused: - 'mail_subscriptions.unsubscribe.emails.*' - 'preferences.other' # some locales are missing other keys, therefore leading i18n-tasks to detect `preferences` as plural and not finding use - 'edit_profile.other' # some locales are missing other keys, therefore leading i18n-tasks to detect `preferences` as plural and not finding use + - 'admin.terms_of_service.generate' # temporarily disabled ignore_inconsistent_interpolations: - '*.one' diff --git a/config/locales/activerecord.ru.yml b/config/locales/activerecord.ru.yml index 08e91e459f6..349536a0fad 100644 --- a/config/locales/activerecord.ru.yml +++ b/config/locales/activerecord.ru.yml @@ -3,30 +3,30 @@ ru: activerecord: attributes: poll: - expires_at: Срок окончания голосования - options: Варианты + expires_at: Продолжительность опроса + options: Варианты ответа user: - agreement: Соглашение с условиями сервиса - email: Адрес эл. почты + agreement: Пользовательское соглашение + email: Адрес электронной почты locale: Язык password: Пароль user/account: username: Имя пользователя user/invite_request: - text: Причина + text: Текст заявки на регистрацию errors: attributes: domain: - invalid: не является действующим доменным именем + invalid: не является корректным доменным именем messages: - invalid_domain_on_line: "%{value} Не является действительным доменным именем" + invalid_domain_on_line: "%{value} не является корректным доменным именем" models: account: attributes: fields: fields_with_values_missing_labels: содержит значения с отсутствующими ключами username: - invalid: только буквы, цифры и символ подчёркивания + invalid: может содержать только буквы, цифры и символы подчёркивания reserved: зарезервировано admin/webhook: attributes: diff --git a/config/locales/da.yml b/config/locales/da.yml index 5257d9dee7e..5b1aec4294d 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -578,6 +578,13 @@ da: all: Alle limited: Begrænset title: Moderation + moderation_notes: + create: Tilføj moderationsnotat + created_msg: Instansmoderationsnotat oprettet! + description_html: Se og skriv notater til andre moderatorer og dit fremtidige jeg + destroyed_msg: Instansmoderationsnotat slettet! + placeholder: Oplysninger om denne instans, foretaget handlinger eller andet, som kan assistere ved fremtidige instansmoderationer. + title: Moderationsnotater private_comment: Privat kommentar public_comment: Offentlig kommentar purge: Udrens @@ -770,7 +777,7 @@ da: manage_settings: Håndtere indstillinger manage_settings_description: Tillader brugere at ændre webstedsindstillinger manage_taxonomies: Håndtere taksonomier - manage_taxonomies_description: Tillader brugere at gennemse tenderende indhold og opdatere etiket-indstillinger + manage_taxonomies_description: Giver brugerne mulighed for at gennemgå trendende indhold og opdatere hashtag-indstillinger manage_user_access: Håndtere brugeradgang manage_user_access_description: Tillader brugere at deaktivere andre brugeres tofaktorgodkendelse, skifte deres e-mailadresse og nulstille deres adgangskode manage_users: Håndtere brugere @@ -971,7 +978,7 @@ da: reset: Nulstil review: Gennmgangsstatus search: Søg - title: Etiketter + title: Hashtags updated_msg: Hashtag-indstillinger opdateret terms_of_service: back: Tilbage til Tjenestevilkår @@ -1061,14 +1068,14 @@ da: tag_servers_dimension: Topservere tag_servers_measure: forskellige servere tag_uses_measure: anvendelser i alt - description_html: Disse er etiketter, som pt. vises i en masse indlæg, som serveren ser. Det kan hjælpe brugerne til at finde ud af, hvad folk taler mest om pt. Ingen etiketter vises offentligt, før man godkender dem. + description_html: Disse er hashtags, som pt. vises i en masse indlæg, som din server ser. Det kan hjælpe dine brugere til at finde ud af, hvad folk taler mest om pt. Ingen hashtags vises offentligt, før du godkender dem. listable: Kan foreslås no_tag_selected: Intet tag ændret (da intet var valgt) not_listable: Foreslås ikke not_trendable: Vises ikke under tendenser not_usable: Kan ikke anvendes peaked_on_and_decaying: Toppede pr. %{date}, nu for nedadgående - title: Populære etiketter + title: Populære hashtags trendable: Kan vises under tendenser trending_rank: 'Populær #%{rank}' usable: Kan anvendes @@ -1140,7 +1147,7 @@ da: new_trending_statuses: title: Populære opslag new_trending_tags: - title: Populære etiketter + title: Populære hashtags subject: Nye tendenser klar til gennemgang på %{instance} aliases: add_new: Opret alias @@ -1151,7 +1158,7 @@ da: remove: Fjern aliaslinkning appearance: advanced_web_interface: Avanceret webgrænseflade - advanced_web_interface_hint: 'Ønsker du udnytte hele skærmbredden, lader den avancerede netgrænseflade dig opsætte mange forskellige kolonner for at se så meget information på samme tid som ønsket: Hjem, notifikationer, fødereret tidslinje, et hvilket som helst antal lister og etiketter.' + advanced_web_interface_hint: 'Ønsker du udnytte hele skærmbredden, lader den avancerede webgrænseflade dig opsætte mange forskellige kolonner for at se så meget information på samme tid som ønsket: Hjem, notifikationer, federeret tidslinje, et hvilket som helst antal lister og hashtags.' animations_and_accessibility: Animationer og tilgængelighed confirmation_dialogs: Bekræftelsesdialoger discovery: Opdagelse @@ -1378,8 +1385,8 @@ da: featured_tags: add_new: Tilføj nyt errors: - limit: Det maksimale antal etiketter er allerede fremhævet - hint_html: "Hvad er fremhævede etiketter? De vises i en fremtrædende position på din offentlige profil og giver folk mulighed for at gennemse dine offentlige indlæg specifikt under disse etiketter. De er et fantastisk værktøj til at holde styr på kreative værker eller langsigtede projekter." + limit: Det maksimale antal hashtags er allerede fremhævet + hint_html: "Hvad er fremhævede hashtags? De vises i en fremtrædende position på din offentlige profil og giver folk mulighed for at gennemse dine offentlige indlæg specifikt under disse hashtags. De er et fantastisk værktøj til at holde styr på kreative værker eller langsigtede projekter." filters: contexts: account: Profiler @@ -1691,14 +1698,14 @@ da: errors: already_voted: Du har allerede stemt i denne afstemning duplicate_options: indeholder dubletvalg - duration_too_long: er for lang en varighed - duration_too_short: er for kort en varighed + duration_too_long: er for langt ude i fremtiden + duration_too_short: er for kort expired: Afstemningen er allerede afsluttet invalid_choice: Den valgte stemmemulighed findes ikke over_character_limit: må maks. udgøre %{max} tegn hver self_vote: Du kan ikke stemme i dine egne afstemninger too_few_options: skal have flere end ét valg - too_many_options: for mange svar (maks. %{max}) + too_many_options: må maks. indeholde %{max} valg preferences: other: Andet posting_defaults: Standarder for indlæg @@ -1751,7 +1758,7 @@ da: content_warning: 'Indholdsadvarsel:' descriptions: account: Offentlige indlæg fra @%{acct} - tag: 'Offentlige indlæg etiketteret #%{hashtag}' + tag: 'Offentlige indlæg tagget #%{hashtag}' scheduled_statuses: over_daily_limit: Den daglige grænse på %{limit} planlagte indlæg er nået over_total_limit: Grænsen på %{limit} planlagte indlæg er nået @@ -1816,7 +1823,7 @@ da: development: Udvikling edit_profile: Redigér profil export: Eksport - featured_tags: Udvalgte etiketter + featured_tags: Fremhævede hashtags import: Import import_and_export: Import og eksport migrate: Kontomigrering @@ -1856,7 +1863,7 @@ da: content_warning: 'Indholdsadvarsel: %{warning}' default_language: Samme som UI-sproget disallowed_hashtags: - one: 'indeholdte en ikke tilladt etiket: %{tags}' + one: 'indeholdte et ikke tilladt hashtag: %{tags}' other: 'indeholdte de ikke tilladte etiketter: %{tags}' edited_at_html: Redigeret %{date} errors: @@ -2063,8 +2070,8 @@ da: one: "%{people} person de seneste 2 dage" other: "%{people} personer de seneste 2 dage" hashtags_subtitle: Udforsk de seneste 2 dages tendenser - hashtags_title: Populære etiketter - hashtags_view_more: Se flere populære etiketter + hashtags_title: Populære hashtags + hashtags_view_more: Se flere populære hashtags post_action: Skriv post_step: Sig hej til verden med tekst, fotos, videoer eller afstemninger. post_title: Opret det første indlæg diff --git a/config/locales/de.yml b/config/locales/de.yml index 12731f7756d..39530f6ee30 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -578,6 +578,13 @@ de: all: Alle limited: Eingeschränkt title: Server + moderation_notes: + create: Moderationsnotiz hinzufügen + created_msg: Moderationsnotiz für diesen Server erfolgreich erstellt! + description_html: Hinterlasse Notizen für dich und deine Moderator*innen + destroyed_msg: Moderationsnotiz für diesen Server erfolgreich entfernt! + placeholder: Informationen über diesen Server, ergriffene Maßnahmen oder andere Sachverhalte, die in Zukunft nützlich sein könnten. + title: Moderationsnotizen private_comment: Privater Kommentar public_comment: Öffentlicher Kommentar purge: Säubern diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 0be9b846993..9ed16616162 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -578,6 +578,13 @@ es-AR: all: Todas limited: Limitadas title: Moderación + moderation_notes: + create: Agregar nota de moderación + created_msg: "¡Nota de moderación de instancia creada!" + description_html: Ver y dejar notas para otros moderadores y a tu yo futuro + destroyed_msg: "¡Nota de moderación de instancia eliminada con éxito!" + placeholder: Información sobre esta instancia, acciones tomadas o cualquier otra cosa que te ayude a moderar esta instancia en el futuro. + title: Notas de moderación private_comment: Comentario privado public_comment: Comentario público purge: Purgar diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index a1cfb9e5468..44c1b172bcf 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -578,6 +578,13 @@ es-MX: all: Todos limited: Limitado title: Moderación + moderation_notes: + create: Añadir nota de moderación + created_msg: "¡Nota de moderación de instancia creada!" + description_html: Ver y dejar notas para otros moderadores y a tu yo futuro + destroyed_msg: "¡Nota de moderación de instancia eliminada con éxito!" + placeholder: Información sobre esta instancia, acciones tomadas o cualquier otra cosa que te ayude a moderar esta instancia en el futuro. + title: Notas de Moderación private_comment: Comentario privado public_comment: Comentario público purge: Purgar diff --git a/config/locales/es.yml b/config/locales/es.yml index 749104d691e..19f340cec21 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -578,6 +578,13 @@ es: all: Todos limited: Limitado title: Moderación + moderation_notes: + create: Añadir nota de moderación + created_msg: "¡Nota de moderación de instancia creada!" + description_html: Ver y dejar notas para otros moderadores y a tu yo futuro + destroyed_msg: "¡Nota de moderación de instancia eliminada con éxito!" + placeholder: Información sobre esta instancia, acciones tomadas o cualquier otra cosa que te ayude a moderar esta instancia en el futuro. + title: Notas de Moderación private_comment: Comentario privado public_comment: Comentario público purge: Purgar diff --git a/config/locales/fa.yml b/config/locales/fa.yml index bb719a0af11..41f8b7febf0 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -786,6 +786,7 @@ fa: title: نقش‌ها rules: add_new: افزودن قانون + add_translation: افزودن ترجمه delete: حذف description_html: در حالی که اکثر افراد ادعا می‌کنند که شرایط استفاده را خوانده و پذیرفته‌اند، افراد معمولا تا پیش از بروز مشکل این متن را مطالعه نمی‌کنند. پیدا کردن قوانین کارساز‌تان را با تبدیل‌شان به صورت فهرست برای کاربران تسهیل کنید. سعی کنید هر قانون را کوتاه و ساده نگاه دارید اما از آن طرف هم تلاش نکنید که آن‌ها به تعداد زیادی مورد جدا از هم تقسیم کنید. edit: ویرایش قانون @@ -816,6 +817,7 @@ fa: discovery: follow_recommendations: پیروی از پیشنهادها preamble: ارائه محتوای جالب در جذب کاربران جدیدی که ممکن است کسی ماستودون را نشناسند، مفید است. نحوه عملکرد ویژگی‌های کشف مختلف روی سرور خود را کنترل کنید. + privacy: محرمانگی profile_directory: شاخهٔ نمایه public_timelines: خط زمانی‌های عمومی publish_statistics: انتشار آمار diff --git a/config/locales/fi.yml b/config/locales/fi.yml index 5e64c035f28..4de6815a00e 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -576,6 +576,13 @@ fi: all: Kaikki limited: Rajoitettu title: Moderointi + moderation_notes: + create: Lisää moderointimuistiinpano + created_msg: Instanssin moderointimuistiinpanon luonti onnistui! + description_html: Tarkastele ja jätä muistiinpanoja muille moderaattoreille ja itsellesi tulevaisuuteen + destroyed_msg: Instanssin moderointimuistiinpano poistettu! + placeholder: Tietoa tästä instanssista, tehdyistä toimista tai muusta sellaisesta, joka auttaa moderoimaan tätä instanssia tulevaisuudessa. + title: Moderointimuistiinpanot private_comment: Yksityinen kommentti public_comment: Julkinen kommentti purge: Tyhjennä diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 7e3866dcb10..05427192526 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -578,6 +578,13 @@ fo: all: Allir limited: Avmarkaðir title: Umsjón + moderation_notes: + create: Legg umsjónarviðmerking afturat + created_msg: Umsjónarviðmerking fyri hesa eindina stovnað! + description_html: Vís ella skriva viðmerkingar til onnur umsjónarfólk ella teg sjálva/n í framtíðini + destroyed_msg: Umsjónarviðmerking fyri hesa eindina strikað! + placeholder: Upplýsingar um hesa eindina, framdar atgerðir ella eitthvørt annað, sum kann hjálpa tær við umsjónini av hesi eindini í framtíðini. + title: Umsjónarviðmerkingar private_comment: Privat viðmerking public_comment: Sjónlig viðmerking purge: Reinsa diff --git a/config/locales/ga.yml b/config/locales/ga.yml index 223b0cd08db..a38a3cfc7a2 100644 --- a/config/locales/ga.yml +++ b/config/locales/ga.yml @@ -611,6 +611,13 @@ ga: all: Uile limited: Teoranta title: Measarthacht + moderation_notes: + create: Cuir Nóta Modhnóireachta leis + created_msg: Cruthaíodh nóta modhnóireachta an cháis go rathúil! + description_html: Féach ar nótaí agus fág iad do mhodhnóirí eile agus do do dhuine féin sa todhchaí + destroyed_msg: Scriosadh nóta modhnóireachta an cháis go rathúil! + placeholder: Faisnéis faoin gcás seo, gníomhartha a rinneadh, nó aon rud eile a chabhróidh leat an cás seo a mhodhnú amach anseo. + title: Nótaí Modhnóireachta private_comment: Trácht príobháideach public_comment: Trácht poiblí purge: Glan diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 420e26e285e..cfc72681a92 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -578,6 +578,13 @@ gl: all: Todo limited: Limitado title: Moderación + moderation_notes: + create: Engadir nota de moderación + created_msg: Creouse correctamente a nota de moderación da instancia! + description_html: Ver e deixar notas de referencia para ti e outras moderadoras + destroyed_msg: Eliminouse correctamente a nota de moderación! + placeholder: Información sobre esta instancia, accións realizadas, ou calquera outra cousa que che axude no futuro a moderar esta instancia. + title: Notas de moderación private_comment: Comentario privado public_comment: Comentario público purge: Purgar diff --git a/config/locales/he.yml b/config/locales/he.yml index 12287c72564..5a562f81167 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -600,6 +600,13 @@ he: all: הכל limited: מוגבלים title: ניהול דיון + moderation_notes: + create: הוספת הערות מנחה דיונים + created_msg: הודעת מנחה לגבי שרת נוצרה בהצלחה! + description_html: צפייה והשארת הערות עבור מנחים אחרים או לעצמך לעתיד + destroyed_msg: הודעת מנחה לגבי שרת נמחקה בהצלחה! + placeholder: מידע לגבי שרת זה, פעולות שננקטו, או כל מידע אחר שיסייע לך להחליט כיצד למתן הודעות משרת זה בעתיד. + title: הודעות מנחה דיונים private_comment: הערה פרטית public_comment: תגובה פומבית purge: טיהור diff --git a/config/locales/hu.yml b/config/locales/hu.yml index c224f5da4ac..1bf0194043e 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -578,6 +578,13 @@ hu: all: Mind limited: Korlátozott title: Moderáció + moderation_notes: + create: Moderátori megjegyzés hozzáadása + created_msg: A példány moderátori megjegyzése sikeresen létrehozva! + description_html: Megtekintés, és megjegyzések hagyása más moderátoroknak és saját magának + destroyed_msg: A példány moderátori megjegyzése sikeresen törölve! + placeholder: Információk erről a példányról, a végzett műveletekről vagy bármi másról, amely segít a példány jövőbeli moderációjában. + title: Moderátori megjegyzések private_comment: Privát megjegyzés public_comment: Nyilvános megjegyzés purge: Végleges törlés diff --git a/config/locales/ko.yml b/config/locales/ko.yml index c399723bd4f..926e98a87f3 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -569,6 +569,12 @@ ko: all: 모두 limited: 제한 title: 중재 + moderation_notes: + create: 중재 참고사항 추가 + created_msg: 서버 중재 참고사항을 만들었습니다! + description_html: 확인하고 다른 중재자나 미래의 자신을 위해 참고사항을 작성합니다 + destroyed_msg: 서버 중재 참고사항을 삭제했습니다! + title: 중재 참고사항 private_comment: 비공개 주석 public_comment: 공개 주석 purge: 퍼지 diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 246642109e6..92f2f4ab345 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -578,6 +578,13 @@ nl: all: Alles limited: Beperkt title: Moderatie + moderation_notes: + create: Moderatie-opmerking aanmaken + created_msg: Aanmaken van servermoderatie-opmerking geslaagd! + description_html: Opmerkingen bekijken, en voor jezelf en andere moderatoren achterlaten + destroyed_msg: Verwijderen van servermoderatie-opmerking geslaagd! + placeholder: Informatie over deze server, genomen acties of iets anders die jou kunnen helpen om deze server in de toekomst te moderen. + title: Moderatie-opmerkingen private_comment: Privé-opmerking public_comment: Openbare opmerking purge: Volledig verwijderen @@ -683,7 +690,7 @@ nl: delete: Verwijderen placeholder: Beschrijf welke maatregelen zijn genomen of andere gerelateerde opmerkingen... title: Opmerkingen - notes_description_html: Bekijk en laat opmerkingen achter voor andere moderatoren en voor jouw toekomstige zelf + notes_description_html: Opmerkingen bekijken, en voor jezelf en andere moderatoren achterlaten processed_msg: 'Rapportage #%{id} succesvol afgehandeld' quick_actions_description_html: 'Neem een snelle maatregel of scroll naar beneden om de gerapporteerde inhoud te bekijken:' remote_user_placeholder: de externe gebruiker van %{instance} diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 2ac66086178..b74119f4e33 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -578,6 +578,13 @@ pt-PT: all: Todas limited: Limitadas title: Moderação + moderation_notes: + create: Adicionar Nota de Moderação + created_msg: Nota de moderação da instância criada com sucesso! + description_html: Ver e deixar notas para outros moderadores e para referência futura + destroyed_msg: Nota de moderação da instância eliminada com sucesso! + placeholder: Informações sobre esta instância, ações tomadas ou qualquer outra informação que o ajude na moderação desta instância no futuro. + title: Notas de Moderação private_comment: Comentário privado public_comment: Comentário público purge: Purgar diff --git a/config/locales/ru.yml b/config/locales/ru.yml index bb9d274a479..704a849e3cd 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1733,15 +1733,15 @@ ru: polls: errors: already_voted: Вы уже голосовали в этом опросе - duplicate_options: содержит одинаковые варианты - duration_too_long: слишком далеко в будущем - duration_too_short: слишком короткий срок + duplicate_options: не должны повторяться + duration_too_long: слишком велика + duration_too_short: слишком мала expired: Опрос уже завершился invalid_choice: Выбранного варианта голосования не существует - over_character_limit: каждый не вариант не может быть длиннее %{max} символов + over_character_limit: не должны превышать %{max} символов self_vote: Вы не можете голосовать в своих опросах - too_few_options: должно быть больше 1 варианта - too_many_options: может содержать не больше %{max} вариантов + too_few_options: должны содержать не меньше двух опций + too_many_options: должны ограничиваться максимум %{max} опциями preferences: other: Остальное posting_defaults: Настройки отправки по умолчанию diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index 91275091ac5..6afd585bec9 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -8,7 +8,7 @@ da: display_name: Dit fulde navn eller dit sjove navn. fields: Din hjemmeside, dine pronominer, din alder, eller hvad du har lyst til. indexable: Dine offentlige indlæg vil kunne vises i Mastodon-søgeresultater. Folk, som har interageret med dem, vil kunne finde dem uanset. - note: 'Du kan @omtale andre personer eller #etiketter.' + note: 'Du kan @omtale andre personer eller #hashtags.' show_collections: Folk vil ikke kunne tjekke dine Følger og Følgere. Folk, du selv følger, vil stadig kunne se dette. unlocked: Man vil kunne følges af folk uden først at godkende dem. Ønsker man at gennemgå Følg-anmodninger og individuelt acceptere/afvise nye følgere, så fjern markeringen. account_alias: @@ -16,7 +16,7 @@ da: account_migration: acct: Angiv brugernavn@domain for den konto, hvortil du vil flytte account_warning_preset: - text: Du kan bruge indlægssyntaks, såsom URL'er, etiketter og omtaler + text: Du kan bruge indlægssyntaks, såsom URL'er, hashtags og omtaler title: Valgfri. Ikke synlig for modtageren admin_account_action: include_statuses: Brugeren vil se, hvilke indlæg, som har forårsaget modereringen/advarslen @@ -72,7 +72,7 @@ da: domain: Dette kan være domænenavnet vist i den benyttede i e-mailadresse eller MX-post. Begge tjekkes under tilmelding. with_dns_records: Et forsøg på at opløse det givne domænes DNS-poster foretages, og resultaterne blokeres ligeledes featured_tag: - name: 'Her er nogle af dine hyppigst brugte etiketter:' + name: 'Her er nogle af dine hyppigst brugte hashtags:' filters: action: Vælg handlingen til eksekvering, når et indlæg matcher filteret actions: @@ -105,7 +105,7 @@ da: thumbnail: Et ca. 2:1 billede vist sammen med serveroplysningerne. timeline_preview: Udloggede besøgende kan gennemse serverens seneste offentlige indlæg. trendable_by_default: Spring manuel gennemgang af trendindhold over. Individuelle elementer kan stadig fjernes fra trends efter kendsgerningen. - trends: Tendenser viser, hvilke indlæg, etiketter og nyheder opnår momentum på serveren. + trends: Tendenser viser, hvilke indlæg, hashtags og nyheder opnår momentum på serveren. trends_as_landing_page: Vis tendensindhold til udloggede brugere og besøgende i stedet for en beskrivelse af denne server. Kræver, at tendenser er aktiveret. form_challenge: current_password: Du bevæger dig ind på et sikkert område @@ -339,10 +339,10 @@ da: indexable: Inkludér profilside i søgemaskiner show_application: Vis, fra hvilken app et indlæg er sendt tag: - listable: Tillad visning af denne etiket i søgninger og forslag + listable: Tillad visning af dette hashtag i søgninger og forslag name: Hashtag - trendable: Tillad visning af denne etiket under tendenser - usable: Tillad indlæg at benytte denne etiket lokalt + trendable: Tillad visning af dette hashtag under trends + usable: Tillad indlæg at benytte dette hashtag lokalt terms_of_service: changelog: Hvad der er ændret? effective_date: Ikrafttrædelsesdato diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 383d185dc93..7e681c90318 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -578,6 +578,13 @@ tr: all: Tümü limited: Sınırlı title: Denetim + moderation_notes: + create: Denetleme Notu Ekle + created_msg: Sunucu denetleme notu başarıyla oluşturuldu! + description_html: Kendiniz ve diğer moderatörler için not bırakın veya notları görüntüleyin + destroyed_msg: Sunucu denetleme notu başarıyla silindi! + placeholder: Bu sunucu hakkında bilgi, gerçekleştirilen eylemler veya ileride bu sunucunun denetimi için işinize yarayabilecek herhangi bir şey. + title: Denetleme Notları private_comment: Özel yorum public_comment: Genel yorum purge: Temizle diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 6ca9a39944e..dd9e8e826ec 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -570,6 +570,9 @@ uk: all: Усі limited: Обмежені title: Модерація + moderation_notes: + create: Додати нотатку модерації + title: Нотатки модераторів private_comment: Приватний коментар public_comment: Публічний коментар purge: Очисти diff --git a/config/locales/vi.yml b/config/locales/vi.yml index ffd470d2492..271683c2389 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -567,6 +567,13 @@ vi: all: Tất cả limited: Hạn chế title: Kiểm duyệt + moderation_notes: + create: Thêm Lưu ý kiểm duyệt + created_msg: Thêm lưu ý kiểm duyệt máy chủ thành công! + description_html: Xem và để lại lưu ý cho các kiểm duyệt viên khác + destroyed_msg: Xóa lưu ý kiểm duyệt máy chủ thành công! + placeholder: Thông tin về máy chủ này, hành động trước đây, hoặc bất cứ lưu ý giúp bạn kiểm duyệt máy chủ này trong tương lai. + title: Lưu ý kiểm duyệt private_comment: Bình luận riêng public_comment: Bình luận công khai purge: Thanh trừng diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 78423109c4a..7c895d6794d 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -567,6 +567,13 @@ zh-TW: all: 全部 limited: 限制 title: 管管 + moderation_notes: + create: 新增站務筆記 + created_msg: 已成功新增站點管理筆記! + description_html: 檢視或替其他管理員與未來的自己留下筆記 + destroyed_msg: 已成功刪除站點管理筆記! + placeholder: 關於此站點之資訊、已採取行動、或任何協助您將來管理此站點之事項。 + title: 站務筆記 private_comment: 私人留言 public_comment: 公開留言 purge: 清除 diff --git a/lib/mastodon/email_configuration_helper.rb b/lib/mastodon/email_configuration_helper.rb new file mode 100644 index 00000000000..f5014ad686a --- /dev/null +++ b/lib/mastodon/email_configuration_helper.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +module Mastodon + module EmailConfigurationHelper + module_function + + # Convert smtp settings from environment variables (or defaults in + # `config/email.yml`) into the format that `ActionMailer` understands + def smtp_settings(config) + enable_starttls = nil + enable_starttls_auto = nil + + case config[:enable_starttls] + when 'always' + enable_starttls = true + when 'never' + enable_starttls = false + when 'auto' + enable_starttls_auto = true + else + enable_starttls_auto = config[:enable_starttls_auto] != 'false' + end + + authentication = config[:authentication] == 'none' ? nil : (config[:authentication] || 'plain') + + config.merge( + authentication:, + enable_starttls:, + enable_starttls_auto: + ) + end + end +end diff --git a/spec/lib/mastodon/email_configuration_helper_spec.rb b/spec/lib/mastodon/email_configuration_helper_spec.rb new file mode 100644 index 00000000000..c08f87d1688 --- /dev/null +++ b/spec/lib/mastodon/email_configuration_helper_spec.rb @@ -0,0 +1,98 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Mastodon::EmailConfigurationHelper do + describe '#smtp_settings' do + subject { described_class } + + let(:converted_settings) { subject.smtp_settings(configuration) } + let(:base_configuration) do + { + address: 'localhost', + port: 25, + user_name: 'mastodon', + password: 'mastodon', + } + end + + context 'when `enable_starttls` is "always"' do + let(:configuration) do + base_configuration.merge({ enable_starttls: 'always' }) + end + + it 'converts this to `true`' do + expect(converted_settings[:enable_starttls]).to be true + end + end + + context 'when `enable_starttls` is "never"' do + let(:configuration) do + base_configuration.merge({ enable_starttls: 'never' }) + end + + it 'converts this to `false`' do + expect(converted_settings[:enable_starttls]).to be false + end + end + + context 'when `enable_starttls` is "auto"' do + let(:configuration) do + base_configuration.merge({ enable_starttls: 'auto' }) + end + + it 'sets `enable_starttls_auto` instead' do + expect(converted_settings[:enable_starttls]).to be_nil + expect(converted_settings[:enable_starttls_auto]).to be true + end + end + + context 'when `enable_starttls` is unset' do + context 'when `enable_starttls_auto` is unset' do + let(:configuration) { base_configuration } + + it 'sets `enable_starttls_auto` to `true`' do + expect(converted_settings[:enable_starttls_auto]).to be true + end + end + + context 'when `enable_starttls_auto` is set to "false"' do + let(:configuration) do + base_configuration.merge({ enable_starttls_auto: 'false' }) + end + + it 'sets `enable_starttls_auto` to `false`' do + expect(converted_settings[:enable_starttls_auto]).to be false + end + end + end + + context 'when `authentication` is set to "none"' do + let(:configuration) do + base_configuration.merge({ authentication: 'none' }) + end + + it 'sets `authentication` to `nil`' do + expect(converted_settings[:authentication]).to be_nil + end + end + + context 'when `authentication` is set to `login`' do + let(:configuration) do + base_configuration.merge({ authentication: 'login' }) + end + + it 'is left as-is' do + expect(converted_settings[:authentication]).to eq 'login' + end + end + + context 'when `authentication` is unset' do + let(:configuration) { base_configuration } + + it 'sets `authentication` to "plain"' do + expect(converted_settings[:authentication]).to eq 'plain' + end + end + end +end diff --git a/spec/lib/search_query_transformer_spec.rb b/spec/lib/search_query_transformer_spec.rb index b69e3afc9d5..e77d54f3635 100644 --- a/spec/lib/search_query_transformer_spec.rb +++ b/spec/lib/search_query_transformer_spec.rb @@ -129,4 +129,24 @@ RSpec.describe SearchQueryTransformer do end end end + + context 'with multiple prefix clauses before a search term' do + let(:query) { 'from:me has:media foo' } + + it 'transforms clauses' do + expect(subject.send(:must_clauses).map(&:term)).to contain_exactly('foo') + expect(subject.send(:must_not_clauses)).to be_empty + expect(subject.send(:filter_clauses).map(&:prefix)).to contain_exactly('from', 'has') + end + end + + context 'with a search term between two prefix clauses' do + let(:query) { 'from:me foo has:media' } + + it 'transforms clauses' do + expect(subject.send(:must_clauses).map(&:term)).to contain_exactly('foo') + expect(subject.send(:must_not_clauses)).to be_empty + expect(subject.send(:filter_clauses).map(&:prefix)).to contain_exactly('from', 'has') + end + end end diff --git a/yarn.lock b/yarn.lock index d9b506ab0f8..17f8eca40c5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1283,15 +1283,15 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-cascade-layers@npm:^5.0.1": - version: 5.0.1 - resolution: "@csstools/postcss-cascade-layers@npm:5.0.1" +"@csstools/postcss-cascade-layers@npm:^5.0.2": + version: 5.0.2 + resolution: "@csstools/postcss-cascade-layers@npm:5.0.2" dependencies: "@csstools/selector-specificity": "npm:^5.0.0" postcss-selector-parser: "npm:^7.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/5cc3c6f220d9216f7ab16e716a20d6db845f127c917521e6236342bfa871accd63eb662a04c1e24a28e396412dcb47b1c4abccc490b88e4010cd704d14a702f1 + checksum: 10c0/dd8e29cfd3a93932fa35e3a59aa62fd2e720772d450f40f38f65ce1e736e2fe839635eb6f033abcc8ee8bc2856161a297f4458b352b26d2216856feb03176612 languageName: node linkType: hard @@ -10533,10 +10533,10 @@ __metadata: linkType: hard "postcss-preset-env@npm:^10.1.5": - version: 10.2.3 - resolution: "postcss-preset-env@npm:10.2.3" + version: 10.2.4 + resolution: "postcss-preset-env@npm:10.2.4" dependencies: - "@csstools/postcss-cascade-layers": "npm:^5.0.1" + "@csstools/postcss-cascade-layers": "npm:^5.0.2" "@csstools/postcss-color-function": "npm:^4.0.10" "@csstools/postcss-color-mix-function": "npm:^3.0.10" "@csstools/postcss-color-mix-variadic-function-arguments": "npm:^1.0.0" @@ -10602,7 +10602,7 @@ __metadata: postcss-selector-not: "npm:^8.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/f3d2ea8b95083acad2cf74aca93904dd3158639bf692d1d471598b538e0c6b4447ae306e7bc1c2426dd465e7c9715373678855b7e211e194b507ef8184e83f99 + checksum: 10c0/d7f8494d355567dc4ea66fe765c86ba9b1e9ce5061ada5c80c51fdf6c98b004b0b7ef17b5f64d197e1bec2e22ef4b6c613b998e1c1bcad0b53f0a3e303ded2fe languageName: node linkType: hard