Merge pull request #2520 from ClearlyClaire/glitch-soc/merge-upstream

Merge upstream changes up to f476d9dab2
This commit is contained in:
Claire 2023-12-18 13:19:45 +01:00 committed by GitHub
commit 18856371be
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
137 changed files with 763 additions and 421 deletions

View file

@ -8,6 +8,7 @@
public/system
public/assets
public/packs
public/packs-test
node_modules
neo4j
vendor/bundle

View file

@ -109,16 +109,11 @@ Rails/Exit:
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecfilepath
RSpec/FilePath:
CustomTransform:
ActivityPub: activitypub # Ignore the snake_case due to the amount of files to rename
ActivityPub: activitypub
DeepL: deepl
FetchOEmbedService: fetch_oembed_service
JsonLdHelper: jsonld_helper
OEmbedController: oembed_controller
OStatus: ostatus
NodeInfoController: nodeinfo_controller # NodeInfo isn't snake_cased for any of the instances
Exclude:
- 'spec/config/initializers/rack_attack_spec.rb' # namespaces usually have separate folder
- 'spec/lib/sanitize_config_spec.rb' # namespaces usually have separate folder
# Reason:
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecnamedsubject
@ -135,6 +130,16 @@ RSpec/NotToNot:
RSpec/Rails/HttpStatus:
EnforcedStyle: numeric
# Reason: Match overrides from Rspec/FilePath rule above
# https://docs.rubocop.org/rubocop-rspec/cops_rspec.html#rspecspecfilepathformat
RSpec/SpecFilePathFormat:
CustomTransform:
ActivityPub: activitypub
DeepL: deepl
FetchOEmbedService: fetch_oembed_service
OEmbedController: oembed_controller
OStatus: ostatus
# Reason:
# https://docs.rubocop.org/rubocop/cops_style.html#styleclassandmodulechildren
Style/ClassAndModuleChildren:

View file

@ -1,6 +1,6 @@
# This configuration was generated by
# `rubocop --auto-gen-config --auto-gen-only-exclude --no-exclude-limit --no-offense-counts --no-auto-gen-timestamp`
# using RuboCop version 1.57.1.
# using RuboCop version 1.57.2.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
@ -20,25 +20,10 @@ Layout/LineLength:
Exclude:
- 'app/models/account.rb'
# Configuration parameters: AllowComments, AllowEmptyLambdas.
Lint/EmptyBlock:
Exclude:
- 'spec/controllers/api/v2/search_controller_spec.rb'
- 'spec/fabricators/access_token_fabricator.rb'
- 'spec/fabricators/conversation_fabricator.rb'
- 'spec/fabricators/system_key_fabricator.rb'
- 'spec/lib/activitypub/adapter_spec.rb'
- 'spec/models/user_role_spec.rb'
Lint/NonLocalExitFromIterator:
Exclude:
- 'app/helpers/jsonld_helper.rb'
# This cop supports unsafe autocorrection (--autocorrect-all).
Lint/OrAssignmentToConstant:
Exclude:
- 'lib/sanitize_ext/sanitize_config.rb'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
Lint/UnusedBlockArgument:
@ -67,13 +52,6 @@ Metrics/CyclomaticComplexity:
Metrics/PerceivedComplexity:
Max: 27
Performance/MapMethodChain:
Exclude:
- 'app/models/feed.rb'
- 'lib/mastodon/cli/maintenance.rb'
- 'spec/services/bulk_import_service_spec.rb'
- 'spec/services/import_service_spec.rb'
RSpec/AnyInstance:
Exclude:
- 'spec/controllers/activitypub/inboxes_controller_spec.rb'
@ -96,20 +74,6 @@ RSpec/AnyInstance:
RSpec/ExampleLength:
Max: 22
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: implicit, each, example
RSpec/HookArgument:
Exclude:
- 'spec/controllers/api/v1/streaming_controller_spec.rb'
- 'spec/controllers/well_known/webfinger_controller_spec.rb'
- 'spec/helpers/instance_helper_spec.rb'
- 'spec/models/user_spec.rb'
- 'spec/rails_helper.rb'
- 'spec/serializers/activitypub/note_serializer_spec.rb'
- 'spec/serializers/activitypub/update_poll_serializer_spec.rb'
- 'spec/services/import_service_spec.rb'
# Configuration parameters: AssignmentOnly.
RSpec/InstanceVariable:
Exclude:
@ -178,24 +142,6 @@ RSpec/MessageChain:
- 'spec/models/session_activation_spec.rb'
- 'spec/models/setting_spec.rb'
# Configuration parameters: EnforcedStyle.
# SupportedStyles: have_received, receive
RSpec/MessageSpies:
Exclude:
- 'spec/controllers/admin/accounts_controller_spec.rb'
- 'spec/helpers/admin/account_moderation_notes_helper_spec.rb'
- 'spec/lib/webfinger_resource_spec.rb'
- 'spec/models/admin/account_action_spec.rb'
- 'spec/models/concerns/remotable_spec.rb'
- 'spec/models/follow_request_spec.rb'
- 'spec/models/identity_spec.rb'
- 'spec/models/session_activation_spec.rb'
- 'spec/models/setting_spec.rb'
- 'spec/services/activitypub/fetch_replies_service_spec.rb'
- 'spec/services/activitypub/process_collection_service_spec.rb'
- 'spec/spec_helper.rb'
- 'spec/validators/status_length_validator_spec.rb'
RSpec/MultipleExpectations:
Max: 8
@ -212,13 +158,6 @@ Rails/ApplicationController:
Exclude:
- 'app/controllers/health_controller.rb'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: Severity.
Rails/DuplicateAssociation:
Exclude:
- 'app/serializers/activitypub/collection_serializer.rb'
- 'app/serializers/activitypub/note_serializer.rb'
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/HasAndBelongsToMany:
@ -333,7 +272,6 @@ Rails/SkipsModelValidations:
- 'db/post_migrate/20221101190723_backfill_admin_action_logs.rb'
- 'db/post_migrate/20221206114142_backfill_admin_action_logs_again.rb'
- 'lib/mastodon/cli/accounts.rb'
- 'lib/mastodon/cli/main.rb'
- 'lib/mastodon/cli/maintenance.rb'
- 'spec/lib/activitypub/activity/follow_spec.rb'
- 'spec/services/follow_service_spec.rb'
@ -426,7 +364,6 @@ Style/FetchEnvVar:
- 'config/initializers/3_omniauth.rb'
- 'config/initializers/blacklists.rb'
- 'config/initializers/cache_buster.rb'
- 'config/initializers/content_security_policy.rb'
- 'config/initializers/devise.rb'
- 'config/initializers/paperclip.rb'
- 'config/initializers/vapid.rb'

View file

@ -1,6 +1,6 @@
# syntax=docker/dockerfile:1.4
# This needs to be bookworm-slim because the Ruby image is built on bookworm-slim
ARG NODE_VERSION="20.8-bookworm-slim"
ARG NODE_VERSION="20.9-bookworm-slim"
FROM ghcr.io/moritzheiber/ruby-jemalloc:3.2.2-slim as ruby
FROM node:${NODE_VERSION} as build

View file

@ -661,21 +661,21 @@ GEM
rubocop-ast (>= 1.28.1, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 3.0)
rubocop-ast (1.29.0)
rubocop-ast (1.30.0)
parser (>= 3.2.1.0)
rubocop-capybara (2.19.0)
rubocop (~> 1.41)
rubocop-factory_bot (2.23.1)
rubocop-factory_bot (2.24.0)
rubocop (~> 1.33)
rubocop-performance (1.19.1)
rubocop (>= 1.7.0, < 2.0)
rubocop-ast (>= 0.4.0)
rubocop-rails (2.20.2)
rubocop-rails (2.22.1)
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.33.0, < 2.0)
rubocop-rspec (2.23.2)
rubocop (~> 1.33)
rubocop-rspec (2.25.0)
rubocop (~> 1.40)
rubocop-capybara (~> 2.17)
rubocop-factory_bot (~> 2.22)
ruby-prof (1.6.3)

View file

@ -98,7 +98,7 @@ export function updateNotifications(notification, intlMessages, intlLocale) {
}
dispatch(notificationsUpdate(notification, preferPendingItems, playSound && !filtered));
dispatch(notificationsUpdate({ notification, preferPendingItems, playSound: playSound && !filtered}));
fetchRelatedRelationships(dispatch, [notification]);
} else if (playSound && !filtered) {

View file

@ -1,6 +1,6 @@
{
"about.blocks": "Moderoidut palvelimet",
"about.contact": "Ota yhteyttä:",
"about.contact": "Ota yhteys:",
"about.disclaimer": "Mastodon on vapaa avoimen lähdekoodin ohjelmisto ja Mastodon gGmbH:n tavaramerkki.",
"about.domain_blocks.no_reason_available": "Syytä ei ole ilmoitettu",
"about.domain_blocks.preamble": "Mastodonin avulla voidaan yleensä tarkastella minkä tahansa fediversumiin kuuluvan palvelimen sisältöä ja vuorovaikuttaa eri palvelinten käyttäjien kanssa. Nämä ovat tälle palvelimelle määritetyt poikkeukset.",

View file

@ -39,7 +39,7 @@
"account.follows.empty": "Esta usuaria aínda non segue a ninguén.",
"account.follows_you": "Séguete",
"account.go_to_profile": "Ir ao perfil",
"account.hide_reblogs": "Agochar repeticións de @{name}",
"account.hide_reblogs": "Agochar promocións de @{name}",
"account.in_memoriam": "Lembranzas.",
"account.joined_short": "Uniuse",
"account.languages": "Modificar os idiomas subscritos",
@ -518,7 +518,7 @@
"privacy.public.long": "Visible por todas",
"privacy.public.short": "Público",
"privacy.unlisted.long": "Visible por todas, pero excluída da sección descubrir",
"privacy.unlisted.short": "Non listado",
"privacy.unlisted.short": "Sen listar",
"privacy_policy.last_updated": "Actualizado por última vez no {date}",
"privacy_policy.title": "Política de Privacidade",
"refresh": "Actualizar",

View file

@ -143,7 +143,7 @@
"compose_form.hashtag_warning": "הודעה זו לא תרשם תחת תגיות הקבצה היות והנראות שלה איננה 'ציבורית'. רק הודעות ציבוריות ימצאו בחיפוש תגיות הקבצה.",
"compose_form.lock_disclaimer": "חשבונך אינו {locked}. כל אחד יוכל לעקוב אחריך כדי לקרוא את הודעותיך המיועדות לעוקבים בלבד.",
"compose_form.lock_disclaimer.lock": "נעול",
"compose_form.placeholder": "על מה את/ה חושב/ת ?",
"compose_form.placeholder": "על מה את.ה חושב.ת?",
"compose_form.poll.add_option": "הוסיפו בחירה",
"compose_form.poll.duration": "משך הסקר",
"compose_form.poll.option_placeholder": "אפשרות מספר {number}",
@ -235,7 +235,7 @@
"empty_column.favourites": "עוד לא חיבבו את ההודעה הזו. כאשר זה יקרה, החיבובים יופיעו כאן.",
"empty_column.follow_requests": "אין לך שום בקשות מעקב עדיין. לכשיתקבלו כאלה, הן תופענה כאן.",
"empty_column.followed_tags": "עוד לא עקבת אחרי תגיות. כשיהיו לך תגיות נעקבות, ההודעות יופיעו פה.",
"empty_column.hashtag": "אין כלום בהאשתג הזה עדיין.",
"empty_column.hashtag": "אין כלום בתגית הזאת עדיין.",
"empty_column.home": "פיד הבית ריק ! אפשר לבקר ב{public} או להשתמש בחיפוש כדי להתחיל ולהכיר משתמשים/ות אחרים/ות. {suggestions}",
"empty_column.list": "אין עדיין פריטים ברשימה. כאשר חברים ברשימה הזאת יפרסמו הודעות חדשות, הן יופיעו פה.",
"empty_column.lists": "אין לך שום רשימות עדיין. לכשיהיו, הן תופענה כאן.",
@ -278,7 +278,7 @@
"follow_requests.unlocked_explanation": "למרות שחשבונך אינו נעול, צוות {domain} חושב שאולי כדאי לוודא את בקשות המעקב האלה ידנית.",
"followed_tags": "התגיות שהחשבון שלך עוקב אחריהן",
"footer.about": "אודות",
"footer.directory": "מדריך פרופילים",
"footer.directory": "ספריית פרופילים",
"footer.get_app": "להתקנת היישומון",
"footer.invite": "להזמין אנשים",
"footer.keyboard_shortcuts": "קיצורי מקלדת",

View file

@ -1,12 +1,16 @@
{
"about.blocks": "Moderirani poslužitelji",
"about.contact": "Kontakt:",
"about.domain_blocks.no_reason_available": "Razlog nije dostupan",
"about.domain_blocks.suspended.title": "Suspendiran",
"about.rules": "Pravila servera",
"account.account_note_header": "Bilješka",
"account.add_or_remove_from_list": "Dodaj ili ukloni s liste",
"account.badges.bot": "Bot",
"account.badges.group": "Grupa",
"account.block": "Blokiraj @{name}",
"account.block_domain": "Blokiraj domenu {domain}",
"account.block_short": "Blokiraj",
"account.blocked": "Blokirano",
"account.browse_more_on_origin_server": "Pogledajte više na izvornom profilu",
"account.cancel_follow_request": "Withdraw follow request",
@ -15,17 +19,20 @@
"account.edit_profile": "Uredi profil",
"account.enable_notifications": "Obavjesti me kada @{name} napravi objavu",
"account.endorse": "Istakni na profilu",
"account.featured_tags.last_status_at": "Zadnji post {date}",
"account.featured_tags.last_status_never": "Nema postova",
"account.follow": "Prati",
"account.followers": "Pratitelji",
"account.followers.empty": "Nitko još ne prati korisnika/cu.",
"account.followers_counter": "{count, plural, one {{counter} pratitelj} other {{counter} pratitelja}}",
"account.following": "Pratim",
"account.following_counter": "{count, plural, one {{counter} praćeni} few{{counter} praćena} other {{counter} praćenih}}",
"account.follows.empty": "Korisnik/ca još ne prati nikoga.",
"account.follows_you": "Prati te",
"account.go_to_profile": "Idi na profil",
"account.hide_reblogs": "Sakrij boostove od @{name}",
"account.in_memoriam": "U sjećanje.",
"account.joined_short": "Pridružen",
"account.link_verified_on": "Vlasništvo ove poveznice provjereno je {date}",
"account.locked_info": "Status privatnosti ovog računa postavljen je na zaključano. Vlasnik ručno pregledava tko ih može pratiti.",
"account.media": "Medijski sadržaj",
@ -65,13 +72,17 @@
"bundle_column_error.error.title": "Oh, ne!",
"bundle_column_error.network.title": "Greška mreže",
"bundle_column_error.retry": "Pokušajte ponovno",
"bundle_column_error.return": "Na glavnu",
"bundle_column_error.routing.title": "404",
"bundle_modal_error.close": "Zatvori",
"bundle_modal_error.message": "Nešto je pošlo po zlu tijekom učitavanja ove komponente.",
"bundle_modal_error.retry": "Pokušajte ponovno",
"closed_registrations_modal.find_another_server": "Nađi drugi server",
"column.about": "O aplikaciji",
"column.blocks": "Blokirani korisnici",
"column.bookmarks": "Knjižne oznake",
"column.community": "Lokalna vremenska crta",
"column.direct": "Privatna spominjanja",
"column.directory": "Pregledavanje profila",
"column.domain_blocks": "Blokirane domene",
"column.favourites": "Favoriti",
@ -95,6 +106,7 @@
"community.column_settings.remote_only": "Samo udaljeno",
"compose.language.change": "Promijeni jezik",
"compose.language.search": "Pretraži jezike...",
"compose.published.body": "Post je objavljen.",
"compose.published.open": "Otvori",
"compose.saved.body": "Post spremljen.",
"compose_form.direct_message_warning_learn_more": "Saznajte više",
@ -132,6 +144,7 @@
"confirmations.discard_edit_media.message": "Postoje nespremljene promjene u opisu medija ili u pretpregledu, svejedno ih odbaciti?",
"confirmations.domain_block.confirm": "Blokiraj cijelu domenu",
"confirmations.domain_block.message": "Jeste li zaista, zaista sigurni da želite blokirati cijelu domenu {domain}? U većini slučajeva dovoljno je i preferirano nekoliko ciljanih blokiranja ili utišavanja. Nećete vidjeti sadržaj s te domene ni u kojim javnim vremenskim crtama ili Vašim obavijestima. Vaši pratitelji s te domene bit će uklonjeni.",
"confirmations.edit.confirm": "Uredi",
"confirmations.logout.confirm": "Odjavi se",
"confirmations.logout.message": "Jeste li sigurni da se želite odjaviti?",
"confirmations.mute.confirm": "Utišaj",
@ -146,10 +159,14 @@
"conversation.mark_as_read": "Označi kao pročitano",
"conversation.open": "Prikaži razgovor",
"conversation.with": "S {names}",
"copypaste.copied": "Kopirano",
"copypaste.copy_to_clipboard": "Kopiraj u međuspremnik",
"directory.federated": "Iz znanog fediversa",
"directory.local": "Samo iz {domain}",
"directory.new_arrivals": "Novi korisnici",
"directory.recently_active": "Nedavno aktivni",
"disabled_account_banner.account_settings": "Postavke računa",
"disabled_account_banner.text": "Tvoj račun {disabledAccount} je trenutno onemogućen.",
"dismissable_banner.explore_links": "These news stories are being talked about by people on this and other servers of the decentralized network right now.",
"dismissable_banner.explore_tags": "These hashtags are gaining traction among people on this and other servers of the decentralized network right now.",
"embed.instructions": "Embed this status on your website by copying the code below.",
@ -172,7 +189,7 @@
"empty_column.account_timeline": "Ovdje nema tootova!",
"empty_column.account_unavailable": "Profil nije dostupan",
"empty_column.blocks": "Još niste blokirali nikoga.",
"empty_column.bookmarked_statuses": "Još nemaš niti jedan označeni toot. Kada označiš jedan, prikazad će se ovdje.",
"empty_column.bookmarked_statuses": "Još nemaš niti jedan označeni toot. Kada označiš jedan, prikazat će se ovdje.",
"empty_column.community": "Lokalna vremenska crta je prazna. Napišite nešto javno da biste pokrenuli stvari!",
"empty_column.domain_blocks": "Još nema blokiranih domena.",
"empty_column.follow_requests": "Nemaš niti jedan zahtjev za praćenjem. Ako ga dobiješ, prikazat će se ovdje.",
@ -204,6 +221,7 @@
"filter_modal.title.status": "Filtriraj objavu",
"firehose.all": "Sve",
"firehose.local": "Ovaj server",
"firehose.remote": "Drugi serveri",
"follow_request.authorize": "Autoriziraj",
"follow_request.reject": "Odbij",
"footer.about": "O aplikaciji",
@ -235,6 +253,7 @@
"interaction_modal.login.action": "Odvedi me kući",
"interaction_modal.no_account_yet": "Nisi na Mastodonu?",
"interaction_modal.on_this_server": "Na ovom serveru",
"interaction_modal.title.follow": "Prati {name}",
"intervals.full.days": "{number, plural, one {# dan} other {# dana}}",
"intervals.full.hours": "{number, plural, one {# sat} few {# sata} other {# sati}}",
"intervals.full.minutes": "{number, plural, one {# minuta} few {# minute} other {# minuta}}",
@ -247,6 +266,7 @@
"keyboard_shortcuts.direct": "to open direct messages column",
"keyboard_shortcuts.down": "za pomak dolje na listi",
"keyboard_shortcuts.enter": "za otvaranje toota",
"keyboard_shortcuts.favourites": "Otvori listu omiljenih",
"keyboard_shortcuts.federated": "za otvaranje federalne vremenske crte",
"keyboard_shortcuts.heading": "Tipkovnički prečaci",
"keyboard_shortcuts.home": "za otvaranje početne vremenske crte",
@ -273,6 +293,7 @@
"lightbox.close": "Zatvori",
"lightbox.next": "Sljedeće",
"lightbox.previous": "Prethodno",
"limited_account_hint.action": "Svejedno prikaži profil",
"lists.account.add": "Dodaj na listu",
"lists.account.remove": "Ukloni s liste",
"lists.delete": "Izbriši listu",
@ -289,12 +310,16 @@
"media_gallery.toggle_visible": "Sakrij {number, plural, one {sliku} other {slike}}",
"mute_modal.duration": "Trajanje",
"mute_modal.hide_notifications": "Sakrij obavijesti ovog korisnika?",
"navigation_bar.about": "O aplikaciji",
"navigation_bar.blocks": "Blokirani korisnici",
"navigation_bar.community_timeline": "Lokalna vremenska crta",
"navigation_bar.compose": "Compose new toot",
"navigation_bar.direct": "Privatna spominjanja",
"navigation_bar.discover": "Istraživanje",
"navigation_bar.domain_blocks": "Blokirane domene",
"navigation_bar.edit_profile": "Uredi profil",
"navigation_bar.explore": "Istraži",
"navigation_bar.favourites": "Favoriti",
"navigation_bar.filters": "Utišane riječi",
"navigation_bar.follow_requests": "Zahtjevi za praćenje",
"navigation_bar.follows_and_followers": "Praćeni i pratitelji",
@ -305,6 +330,7 @@
"navigation_bar.pins": "Prikvačeni tootovi",
"navigation_bar.preferences": "Postavke",
"navigation_bar.public_timeline": "Federalna vremenska crta",
"navigation_bar.search": "Traži",
"navigation_bar.security": "Sigurnost",
"not_signed_in_indicator.not_signed_in": "You need to sign in to access this resource.",
"notification.follow": "{name} Vas je počeo/la pratiti",
@ -332,6 +358,7 @@
"notifications.filter.follows": "Praćenja",
"notifications.filter.mentions": "Spominjanja",
"notifications.filter.polls": "Rezultati anketa",
"notifications.grant_permission": "Odobri dopuštenje.",
"notifications.group": "{count} obavijesti",
"notifications.mark_as_read": "Označi sve obavijesti kao pročitane",
"onboarding.actions.go_to_explore": "See what's trending",
@ -343,12 +370,14 @@
"onboarding.steps.follow_people.body": "You curate your own feed. Lets fill it with interesting people.",
"onboarding.steps.follow_people.title": "Follow {count, plural, one {one person} other {# people}}",
"onboarding.steps.publish_status.body": "Say hello to the world.",
"onboarding.steps.publish_status.title": "Napiši svoj prvi post",
"onboarding.steps.setup_profile.body": "Others are more likely to interact with you with a filled out profile.",
"onboarding.steps.setup_profile.title": "Customize your profile",
"onboarding.steps.share_profile.body": "Let your friends know how to find you on Mastodon!",
"onboarding.steps.share_profile.title": "Share your profile",
"poll.closed": "Završeno",
"poll.refresh": "Osvježi",
"poll.reveal": "Vidi rezultate",
"poll.total_people": "{count, plural, one {# osoba} few {# osobe} other {# osoba}}",
"poll.total_votes": "{count, plural, one {# glas} few {# glasa} other {# glasova}}",
"poll.vote": "Glasaj",
@ -397,14 +426,41 @@
"report.reasons.spam_description": "Zlonamjerne poveznice, lažni angažman ili repetitivni odgovori",
"report.submit": "Pošalji",
"report.target": "Prijavljivanje korisnika {target}",
"report.thanks.title": "Ne želiš vidjeti ovo?",
"report_notification.attached_statuses": "{count, plural, one {# post} other {# posts}} attached",
"report_notification.categories.other": "Drugo",
"report_notification.categories.spam": "Spam",
"report_notification.categories.violation": "Povreda pravila",
"report_notification.open": "Otvori izvješće",
"search.no_recent_searches": "Nema nedavnih pretraga",
"search.placeholder": "Traži",
"search.quick_action.go_to_account": "Idi na profil {x}",
"search.quick_action.open_url": "Otvori link u Mastodonu",
"search.search_or_paste": "Pretraži ili zalijepi URL",
"search_popout.full_text_search_disabled_message": "Nije dostuppno na {domain}.",
"search_popout.language_code": "ISO jezični kod",
"search_popout.options": "Opcije pretraživanja",
"search_popout.quick_actions": "Brze radnje",
"search_popout.recent": "Nedavne pretrage",
"search_popout.specific_date": "specifičan datum",
"search_popout.user": "korisnik",
"search_results.accounts": "Profili",
"search_results.all": "Sve",
"search_results.nothing_found": "Nije pronađeno ništa za te ključne riječi",
"search_results.see_all": "Prikaži sve",
"search_results.statuses": "Toots",
"search_results.title": "Traži {q}",
"server_banner.about_active_users": "Popis aktivnih korisnika prošli mjesec",
"server_banner.active_users": "aktivni korisnici",
"server_banner.administered_by": "Administrator je:",
"server_banner.introduction": "{domain} je dio decentralizirane socijalne mreže koju pokreće {mastodon}.",
"server_banner.learn_more": "Saznaj više",
"server_banner.server_stats": "Statistike poslužitelja:",
"sign_in_banner.create_account": "Stvori račun",
"sign_in_banner.sign_in": "Prijavi se",
"sign_in_banner.sso_redirect": "Prijava ili registracija",
"status.admin_status": "Open this status in the moderation interface",
"status.block": "Blokiraj @{name}",
"status.bookmark": "Dodaj u favorite",
"status.cannot_reblog": "Ova objava ne može biti boostana",
"status.copy": "Copy link to status",
@ -419,6 +475,7 @@
"status.history.created": "Kreirao/la {name} prije {date}",
"status.history.edited": "Uredio/la {name} prije {date}",
"status.load_more": "Učitaj više",
"status.media.open": "Kliknite za otvaranje",
"status.media_hidden": "Sakriven medijski sadržaj",
"status.mention": "Spomeni @{name}",
"status.more": "Više",
@ -447,6 +504,7 @@
"status.title.with_attachments": "{user} posted {attachmentCount, plural, one {an attachment} other {# attachments}}",
"status.translate": "Prevedi",
"status.translated_from_with": "Prevedno s {lang} koristeći {provider}",
"status.uncached_media_warning": "Pregled nije dostupan",
"status.unmute_conversation": "Poništi utišavanje razgovora",
"status.unpin": "Otkvači s profila",
"subscribed_languages.save": "Spremi promjene",
@ -484,6 +542,7 @@
"upload_modal.description_placeholder": "Gojazni đačić s biciklom drži hmelj i finu vatu u džepu nošnje",
"upload_modal.detect_text": "Detektiraj tekst sa slike",
"upload_modal.edit_media": "Uređivanje medija",
"upload_modal.preparing_ocr": "Pripremam OCR…",
"upload_modal.preview_label": "Pretpregled ({ratio})",
"upload_progress.label": "Prenošenje...",
"upload_progress.processing": "Obrada…",

View file

@ -204,7 +204,7 @@
"dismissable_banner.explore_links": "이 소식들은 오늘 소셜 웹에서 가장 많이 공유된 내용들입니다. 새 소식을 더 많은 사람들이 공유할수록 높은 순위가 됩니다.",
"dismissable_banner.explore_statuses": "이 게시물들은 오늘 소셜 웹에서 호응을 얻고 있는 게시물들입니다. 부스트와 관심을 받는 새로운 글들이 높은 순위가 됩니다.",
"dismissable_banner.explore_tags": "이 해시태그들은 이 서버와 분산화된 네트워크의 다른 서버에서 사람들의 인기를 끌고 있는 것들입니다.",
"dismissable_banner.public_timeline": "{domain} 사람들이 팔로우하는 소셜 웹 사람들의 최신 공개 게시물입니다.",
"dismissable_banner.public_timeline": "이것들은 {domain}에 있는 사람들이 팔로우한 사람들의 최신 공개 게시물들입니다.",
"embed.instructions": "아래의 코드를 복사하여 대화를 원하는 곳으로 공유하세요.",
"embed.preview": "이렇게 표시됩니다:",
"emoji_button.activity": "활동",

View file

@ -225,7 +225,7 @@
"empty_column.account_suspended": "帳號已被停權",
"empty_column.account_timeline": "這裡還沒有嘟文!",
"empty_column.account_unavailable": "無法取得個人檔案",
"empty_column.blocks": "您尚未封鎖任何使用者。",
"empty_column.blocks": "您還沒有封鎖任何使用者。",
"empty_column.bookmarked_statuses": "您還沒有建立任何書籤。當您建立書籤時,它將於此顯示。",
"empty_column.community": "本站時間軸是空的。快公開嘟些文搶頭香啊!",
"empty_column.direct": "您還沒有收到任何私訊。當您私訊別人或收到私訊時,它將於此顯示。",

View file

@ -1818,12 +1818,14 @@ a.account__display-name {
&.activate {
& > .icon {
animation: spring-rotate-in 1s linear;
transform-origin: 50% 55%;
}
}
&.deactivate {
& > .icon {
animation: spring-rotate-out 1s linear;
transform-origin: 50% 55%;
}
}
}

View file

@ -62,7 +62,7 @@ class DeliveryFailureTracker
key.delete_prefix(exhausted_deliveries_key_by(''))
end
domains - UnavailableDomain.all.pluck(:domain)
domains - UnavailableDomain.pluck(:domain)
end
def warning_domains_map(domains = nil)

View file

@ -271,7 +271,7 @@ class FeedManager
# @param [Account] target_account
# @return [void]
def clear_from_lists(account, target_account)
List.where(account: account).each do |list|
List.where(account: account).find_each do |list|
clear_from_list(list, target_account)
end
end

View file

@ -23,9 +23,9 @@ class Feed
max_id = '+inf' if max_id.blank?
if min_id.blank?
since_id = '-inf' if since_id.blank?
unhydrated = redis.zrevrangebyscore(key, "(#{max_id}", "(#{since_id}", limit: [0, limit], with_scores: true).map(&:first).map(&:to_i)
unhydrated = redis.zrevrangebyscore(key, "(#{max_id}", "(#{since_id}", limit: [0, limit], with_scores: true).map { |id| id.first.to_i }
else
unhydrated = redis.zrangebyscore(key, "(#{min_id}", "(#{max_id}", limit: [0, limit], with_scores: true).map(&:first).map(&:to_i)
unhydrated = redis.zrangebyscore(key, "(#{min_id}", "(#{max_id}", limit: [0, limit], with_scores: true).map { |id| id.first.to_i }
end
Status.where(id: unhydrated).cache_ids

View file

@ -488,7 +488,7 @@ class User < ApplicationRecord
end
def validate_email_dns?
email_changed? && !external? && !Rails.env.local? # rubocop:disable Rails/UnknownEnv
email_changed? && !external? && !Rails.env.local?
end
def validate_role_elevation

View file

@ -55,7 +55,7 @@ class ActivityPub::FetchFeaturedTagsCollectionService < BaseService
FeaturedTag.includes(:tag).references(:tag).where(account: @account).where.not(tag: { name: normalized_names }).delete_all
FeaturedTag.includes(:tag).references(:tag).where(account: @account, tag: { name: normalized_names }).each do |featured_tag|
FeaturedTag.includes(:tag).references(:tag).where(account: @account, tag: { name: normalized_names }).find_each do |featured_tag|
featured_tag.update(name: tags.delete(featured_tag.tag.name))
end

View file

@ -23,7 +23,7 @@ class ActivityPub::SynchronizeFollowersService < BaseService
private
def remove_unexpected_local_followers!
@account.followers.local.where.not(id: @expected_followers.map(&:id)).each do |unexpected_follower|
@account.followers.local.where.not(id: @expected_followers.map(&:id)).reorder(nil).find_each do |unexpected_follower|
UnfollowService.new.call(unexpected_follower, @account)
end
end

View file

@ -22,7 +22,7 @@ class AppealService < BaseService
end
def notify_staff!
User.those_who_can(:manage_appeals).includes(:account).each do |u|
User.those_who_can(:manage_appeals).includes(:account).find_each do |u|
AdminMailer.with(recipient: u.account).new_appeal(@appeal).deliver_later if u.allows_appeal_emails?
end
end

View file

@ -53,7 +53,7 @@ class ApproveAppealService < BaseService
def undo_mark_statuses_as_sensitive!
representative_account = Account.representative
@strike.statuses.includes(:media_attachments).each do |status|
@strike.statuses.includes(:media_attachments).find_each do |status|
UpdateStatusService.new.call(status, representative_account.id, sensitive: false) if status.with_media?
end
end

View file

@ -24,7 +24,7 @@ class ProcessHashtagsService < BaseService
added_tags = @current_tags - @previous_tags
unless added_tags.empty?
@account.featured_tags.where(tag_id: added_tags.map(&:id)).each do |featured_tag|
@account.featured_tags.where(tag_id: added_tags.map(&:id)).find_each do |featured_tag|
featured_tag.increment(@status.created_at)
end
end
@ -32,7 +32,7 @@ class ProcessHashtagsService < BaseService
removed_tags = @previous_tags - @current_tags
unless removed_tags.empty?
@account.featured_tags.where(tag_id: removed_tags.map(&:id)).each do |featured_tag|
@account.featured_tags.where(tag_id: removed_tags.map(&:id)).find_each do |featured_tag|
featured_tag.decrement(@status.id)
end
end

View file

@ -116,7 +116,7 @@ class RemoveStatusService < BaseService
end
def remove_from_hashtags
@account.featured_tags.where(tag_id: @status.tags.map(&:id)).each do |featured_tag|
@account.featured_tags.where(tag_id: @status.tags.map(&:id)).find_each do |featured_tag|
featured_tag.decrement(@status.id)
end

View file

@ -42,7 +42,7 @@ class ReportService < BaseService
def notify_staff!
return if @report.unresolved_siblings?
User.those_who_can(:manage_reports).includes(:account).each do |u|
User.those_who_can(:manage_reports).includes(:account).find_each do |u|
LocalNotificationWorker.perform_async(u.account_id, @report.id, 'Report', 'admin.report')
AdminMailer.with(recipient: u.account).new_report(@report).deliver_later if u.allows_report_emails?
end

View file

@ -47,7 +47,7 @@
%h3= t('admin.statuses.history')
%ol.history
- @status.edits.includes(:account, status: [:account]).each.with_index do |status_edit, i|
- @status.edits.reorder(nil).includes(:account, status: [:account]).find_each(order: :asc).with_index do |status_edit, i|
%li
.history__entry
%h5

View file

@ -206,7 +206,7 @@ module Mastodon
# We use our own middleware for this
config.public_file_server.enabled = false
config.middleware.use PublicFileServerMiddleware if Rails.env.local? || ENV['RAILS_SERVE_STATIC_FILES'] == 'true' # rubocop:disable Rails/UnknownEnv
config.middleware.use PublicFileServerMiddleware if Rails.env.local? || ENV['RAILS_SERVE_STATIC_FILES'] == 'true'
config.middleware.use Rack::Attack
config.middleware.use Mastodon::RackMiddleware

View file

@ -33,13 +33,13 @@ def sso_host
end
unless Rails.env.development?
assets_host = Rails.configuration.action_controller.asset_host || "https://#{ENV['WEB_DOMAIN'] || ENV['LOCAL_DOMAIN']}"
assets_host = Rails.configuration.action_controller.asset_host || "https://#{ENV['WEB_DOMAIN'] || Rails.configuration.x.local_domain}"
data_hosts = [assets_host]
if ENV['S3_ENABLED'] == 'true' || ENV['AZURE_ENABLED'] == 'true'
attachments_host = host_to_url(ENV['S3_ALIAS_HOST'] || ENV['S3_CLOUDFRONT_HOST'] || ENV['AZURE_ALIAS_HOST'] || ENV['S3_HOSTNAME'] || "s3-#{ENV['S3_REGION'] || 'us-east-1'}.amazonaws.com")
elsif ENV['SWIFT_ENABLED'] == 'true'
attachments_host = ENV['SWIFT_OBJECT_URL']
attachments_host = ENV.fetch('SWIFT_OBJECT_URL')
attachments_host = "https://#{Addressable::URI.parse(attachments_host).host}"
else
attachments_host = nil

View file

@ -20,7 +20,6 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym 'PubSubHubbub'
inflect.acronym 'ActivityStreams'
inflect.acronym 'JsonLd'
inflect.acronym 'NodeInfo'
inflect.acronym 'Ed25519'
inflect.acronym 'TOC'
inflect.acronym 'RSS'

View file

@ -1537,7 +1537,7 @@ bg:
reach: Обхват
reach_hint_html: Управлявайте дали искате да бъдете открити и последвани от нови хора. Искате ли публикациите ви да се появяват в главния екран? Искате ли другите да ви виждат в препоръките им за последване? Желаете ли да приемате автоматично всички нови последователи или да имате подробен контрол върху всеки един?
search: Търсене
search_hint_html: Управлявайте как искате да бъдете открити. Желаете ли хората да ви открият по това, за което сте публикували публично? Искате ли хората извън Mastodon да намират профила ви, търсейки из мрежата? Обърнете внимание, че общото изключване от всички търсачки не може да гарантира за публичната информация.
search_hint_html: Управлявайте как искате да бъдете открити. Желаете ли хората да ви открият по това, за което сте публикували обществено? Искате ли хората извън Mastodon да намират профила ви, търсейки из уебпространството? Обърнете внимание, че пълното изключване от всички търсачки не може да се гарантира за обществените сведения.
title: Поверителност и обхват
privacy_policy:
title: Политика за поверителност

View file

@ -747,7 +747,7 @@ de:
title: Neue Nutzer*innen müssen ein CAPTCHA lösen, um das Konto zu bestätigen
content_retention:
preamble: Lege fest, wie lange Inhalte von Nutzer*innen auf deinem Mastodon-Server gespeichert bleiben.
title: Aufbewahrung von Inhalten
title: Cache & Archive
default_noindex:
desc_html: Betrifft alle Profile, die diese Einstellung bei sich nicht geändert haben
title: Profile standardmäßig von der Suchmaschinen-Indizierung ausnehmen

View file

@ -27,12 +27,12 @@ fi:
title: Vahvista sähköpostiosoite
email_changed:
explanation: 'Tilin sähköpostiosoitteeksi vaihdetaan:'
extra: Jos et vaihtanut sähköpostiosoitettasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä, tai ota yhteyttä palvelimen ylläpitäjään, jos et pääse kirjautumaan tilillesi.
extra: Jos et vaihtanut sähköpostiosoitettasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä, tai ota yhteys palvelimen ylläpitäjään, jos et pääse kirjautumaan tilillesi.
subject: 'Mastodon: Sähköpostiosoite vaihdettu'
title: Uusi sähköpostiosoite
password_change:
explanation: Tilisi salasana on vaihdettu.
extra: Jos et vaihtanut salasanaasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä, tai ota yhteyttä palvelimen ylläpitäjään, jos et pääse kirjautumaan tilillesi.
extra: Jos et vaihtanut salasanaasi, joku muu on todennäköisesti päässyt käyttämään tiliäsi. Vaihda salasanasi viipymättä, tai ota yhteys palvelimen ylläpitäjään, jos et pääse kirjautumaan tilillesi.
subject: 'Mastodon: salasana vaihdettu'
title: Salasana vaihdettu
reconfirmation_instructions:

View file

@ -5,24 +5,61 @@ hr:
confirmed: Vaša adresa e-pošte uspješno je potvrđena.
send_instructions: Za nekoliko minuta primit ćete e-poštu s uputama kako potvrditi Vašu adresu e-pošte. Molimo pogledajte Vašu mapu s neželjenom poštom, ako niste primili ovu e-poštu.
send_paranoid_instructions: Ako Vaša adresa e-pošte postoji u našoj bazi podataka, za nekoliko minuta primit ćete e-poštu s uputama kako ju potvrditi. Molimo provjerite mapu s neželjenom poštom, ako niste primili ovu e-poštu.
failure:
already_authenticated: Već ste prijavljeni.
inactive: Vaš račun još nije aktiviran.
invalid: "%{authentication_keys} ili lozinka nisu valjani."
last_attempt: Imate još jedan pokušaj prije zaključavanja računa.
locked: Vaš je račun zaključan.
not_found_in_database: "%{authentication_keys} ili lozinka nisu valjani."
pending: Tvoj račun je još uvijek pod revizijom.
timeout: Vaša je sesija istekla. Ponovno se prijavite kako biste nastavili.
unauthenticated: Morate se prijaviti ili registrirati prije nastavka.
unconfirmed: Moraš potvrditi svoju email adresu kako bi nastavio.
mailer:
confirmation_instructions:
action: Potvrdi adresu e-pošte
action_with_app: Potvrdi i vrati se na %{app}
extra_html: Važno je da pročitaš <a href="%{terms_path}">pravila ovog servera</a> i <a href="%{policy_path}">naše uvjete korištenja</a>.
subject: 'Mastodon: upute za potvrđivanje za %{instance}'
title: Potvrdi adresu e-pošte
email_changed:
explanation: 'Email adresa za ovaj račun je izmijenjena u:'
subject: 'Mastodon: adresa e-pošte je promijenjena'
title: Nova adresa e-pošte
password_change:
explanation: Lozinka tvog računa je promijenjena.
subject: 'Mastodon: lozinka je promijenjena'
title: Lozinka je promijenjena
reconfirmation_instructions:
explanation: Potvrdi novu adresu kako bi promijenio email.
subject: 'Mastodon: Potvrdi email za %{instance}'
title: Potvrdi adresu e-pošte
reset_password_instructions:
action: Promijeni lozinku
explanation: Zatražili ste novu lozinku za svoj račun.
extra: Ako nisi ovo zatražio, samo ignoriraj ovu email poruku. Tvoja lozinka neće biti promijenjena sve dok ne pristupiš linku iznad kako bi stvorio novu.
subject: 'Mastodon: upute za ponovno postavljanje lozinke'
title: Ponovno postavljanje lozinke
two_factor_disabled:
subject: 'Mastodon: Dvo-faktorska autentifikacija je onemogućena'
title: 2FA je onemogućen
two_factor_enabled:
subject: 'Mastodon: Dvo-faktorska autentifikacija je omogućena'
title: 2FA omogućena
unlock_instructions:
subject: 'Mastodon: upute za otključavanje'
webauthn_credential:
added:
subject: 'Mastodon: Novi sigurnosni ključ'
title: Dodan je novi sigurnosni ključ
deleted:
subject: 'Mastodon: Sigurnosni ključ je obrisan'
title: Jedan od tvojih sigurnosnih ključeva je obrisan
webauthn_disabled:
title: Sigurnosni ključevi su onemogućeni
webauthn_enabled:
title: Sigurnosni ključevi su omogućeni
omniauth_callbacks:
failure: Ne možemo Vas autentificirati s %{kind} zbog "%{reason}".
success: Uspješno ste autentificirani s računom na %{kind}.

View file

@ -33,7 +33,7 @@ gl:
help:
native_redirect_uri: Utiliza %{native_redirect_uri} para probas locais
redirect_uri: Utiliza unha liña por URI
scopes: Separar permisos con espazos. Deixar en branco para utilizar os permisos por omisión.
scopes: Separar permisos con espazos. Deixar en branco para utilizar os permisos por defecto.
index:
application: Aplicación
callback_url: URL de chamada

View file

@ -38,12 +38,12 @@ he:
application: יישום
callback_url: כתובת גישה חוזרת (Callback URL)
delete: למחוק
empty: אין לך אפליקציות.
empty: אין לך יישומים.
name: שם
new: ישום חדש
scopes: תחומים
show: להציג
title: ישומך
title: היישומים שלך
new:
title: ישום חדש
show:

View file

@ -776,6 +776,7 @@ eu:
open: Edonork eman dezake izena
security:
authorized_fetch: Eskatu autentifikazioa federatutako zerbitzarietatik
federation_authentication: Federazio autentifikazioaren betearaztea
title: Zerbitzariko ezarpenak
site_uploads:
delete: Ezabatu igotako fitxategia
@ -859,6 +860,7 @@ eu:
message_html: Mastodon eguneraketa kritikoa eskuragarri, mesedez eguneratu ahal bezain azkar.
software_version_patch_check:
action: Ikusi eguneraketa eskuragarriak
message_html: Mastodon akats konponketa eguneratze bat eskuragarri dago.
upload_check_privacy_error:
action: Ikus hemen informazio gehiagorako
message_html: "<strong>Zure zerbitzaria ez dago ongi konfiguratua. Zure erabiltzaileen pribatutasuna arriskuan dago.</strong>"
@ -981,6 +983,9 @@ eu:
body: "%{reporter}(e)k %{target} salatu du"
body_remote: "%{domain} domeinuko norbaitek %{target} salatu du"
subject: Salaketa berria %{instance} instantzian (#%{id})
new_software_updates:
body: Mastodon bertsio berria atera da, eguneratu nahiko duzu, ezta!
subject: Mastodon bertsio berriak %{instance} rentzat eskuragarri daude!
new_trends:
body: 'Ondorengo elementuak berrikusi behar dira publikoki bistaratu aurretik:'
new_trending_links:
@ -1033,6 +1038,12 @@ eu:
hint_html: Azken kontu bat! Gizakia zarela berretsi behar dugu (zabor-kontuak kanpoan mantentzeko baino ez da!) Ebatzi azpiko CAPTCHA eta sakatu "Jarraitu".
title: Segurtasun txekeoa
confirmations:
awaiting_review_title: Zure izen-ematea berrikusten ari da
clicking_this_link: lotura hau klikatzen
login_link: hasi saioa
proceed_to_login_html: Orain jarraitu dezakezu %{login_link} -era.
registration_complete: Osatuta dago orain zure izen-ematea %{domain} -en!
welcome_title: Ongi etorri, %{name}!
wrong_email_hint: Helbide-elektroniko hori zuzena ez bada, kontuaren ezarpenetan alda dezakezu.
delete_account: Ezabatu kontua
delete_account_html: Kontua ezabatu nahi baduzu, <a href="%{path}">jarraitu hemen</a>. Berrestea eskatuko zaizu.

View file

@ -748,6 +748,12 @@ fa:
message_html: هیچ قانون کارسازی تعریف نکرده‌اید.
sidekiq_process_check:
message_html: صف(های) %{value} فاقد هیچونه فرایند Sidekiq هستند. لطفا تنظیمات Sidekiq خود را بازبینی کنید
software_version_critical_check:
action: مشاهده به‌روزرسانی‌های موجود
message_html: یک به‌روزرسانی حیاتی ماستودون موجود است، لطفا در اسرع وقت به‌روزرسانی کنید.
software_version_patch_check:
action: مشاهده به‌روزرسانی‌های موجود
message_html: یک به‌روزرسانی رفع اشکال ماستودون موجود است.
upload_check_privacy_error:
action: برای اطّلاعات بیش‌تر این‌جا را بررسی کنید
message_html: "<strong>کارساز وبتان بد پیکربندی شده. محرمانگی کاربرانتان در خطر است.</strong>"
@ -879,6 +885,9 @@ fa:
apply_for_account: درخواست یک حساب
captcha_confirmation:
title: بررسی های امنیتی
confirmations:
login_link: ورود
welcome_title: خوش آمدید، %{name}!
delete_account: پاک‌کردن حساب
delete_account_html: اگر می‌خواهید حساب خود را پاک کنید، از <a href="%{path}">این‌جا</a> پیش بروید. از شما درخواست تأیید خواهد شد.
description:
@ -901,6 +910,8 @@ fa:
progress:
confirm: تأیید رایانامه
details: جزئیات شما
review: بررسی ما
rules: پذیرش قوانین
providers:
cas: CAS
saml: SAML

View file

@ -1837,7 +1837,7 @@ fi:
follow_limit_reached: Et voi seurata yli %{limit} henkilöä
go_to_sso_account_settings: Avaa identiteettitarjoajasi tiliasetukset
invalid_otp_token: Virheellinen kaksivaiheisen todentamisen koodi
otp_lost_help_html: Jos sinulla ei ole pääsyä kumpaankaan, voit ottaa yhteyttä osoitteeseen %{email}
otp_lost_help_html: Jos sinulla ei ole pääsyä kumpaankaan, voit ottaa yhteyden osoitteeseen %{email}
seamless_external_login: Olet kirjautunut ulkoisen palvelun kautta, joten salasana- ja sähköpostiasetukset eivät ole käytettävissä.
signed_in_as: 'Kirjautunut tilillä:'
verification:

View file

@ -750,7 +750,7 @@ gl:
title: Retención do contido
default_noindex:
desc_html: Aféctalle a tódalas usuarias que non cambiaron este axuste elas mesmas
title: Por omisión exclúe as usuarias do indexado por servidores de busca
title: Omitir por defecto ás usuarias do indexado por servidores de busca
discovery:
follow_recommendations: Recomendacións de seguimento
preamble: Destacar contido interesante é importante para axudar a que as novas usuarias se sintan cómodas se non coñecen a ninguén en Mastodon. Xestiona os diferentes xeitos de promocionar contidos.
@ -1528,7 +1528,7 @@ gl:
too_many_options: non pode haber máis de %{max} opcións
preferences:
other: Outro
posting_defaults: Valores por omisión
posting_defaults: Valores por defecto
public_timelines: Cronoloxías públicas
privacy:
hint_html: "<strong>Personaliza o xeito no que queres que se atope o teu perfil e publicacións.</strong> Mastodon ten variedade de ferramentas para axudarche a acadar unha audiencia maior. Dedica un minuto a revisalas e confirma que se axustan ao teu caso persoal."
@ -1698,7 +1698,7 @@ gl:
private_long: Mostrar só as seguidoras
public: Público
public_long: Visible para calquera
unlisted: Non listado
unlisted: Sen listar
unlisted_long: Visible para calquera, pero non en cronoloxías públicas
statuses_cleanup:
enabled: Borrar automáticamente publicacións antigas

View file

@ -782,7 +782,7 @@ he:
discovery:
follow_recommendations: המלצות מעקב
preamble: הצפה של תוכן מעניין בקבלת פני משתמשות חדשות שאולי אינן מכירות עדיין א.נשים במסטודון. ניתן לשלוט איך אפשרויות גילוי שונות עובדות על השרת שלך.
profile_directory: מדריך פרופילים
profile_directory: ספריית פרופילים
public_timelines: פידים פומביים
publish_discovered_servers: פרסום שרתים שנתגלו
publish_statistics: פרסום הסטטיסטיקות בפומבי
@ -1417,7 +1417,7 @@ he:
'604800': שבוע
'86400': יום אחד
expires_in_prompt: לעולם לא
generate: צור קישור להזמנה
generate: יצירת קישור להזמנה
invited_by: הוזמנת ע"י
max_uses:
many: "%{count} שימושים"
@ -1425,9 +1425,9 @@ he:
other: "%{count} שימושים"
two: "%{count} שימושים"
max_uses_prompt: ללא הגבלה
prompt: צור ושתף קישורים לאחרים על מנת להעניק גישה לשרת זה
prompt: צרו ושתפו קישורים לאחרים על מנת להעניק גישה לשרת זה
table:
expires_at: פוקעת ב
expires_at: פג תוקף ב-
uses: שימושים
title: הזמנת אנשים
lists:
@ -1917,7 +1917,7 @@ he:
error: היתה בעיה בהוספת מפתח האבטחה. נסה שנית.
success: מפתח האבטחה הוסף בהצלחה.
delete: למחוק
delete_confirmation: האם אתה בטוח שברצונך למחוק מפתח אבטחה זה?
delete_confirmation: האם את.ה בטוח שברצונך למחוק מפתח אבטחה זה?
description_html: אם יאופשר <strong>אימות במפתח אבטחה</strong>, כניסה לאתר תדרוש שימוש באחד ממפתחות האבטחה שלך.
destroy:
error: היתה בעיה במחיקת מפתח האבטחה. נסה בשנית.

View file

@ -47,6 +47,8 @@ hr:
followers: Pratitelji
follows: Praćeni
header: Zaglavlje
ip: IP
joined: Pridružen
location:
all: Sve
local: Lokalno
@ -54,6 +56,11 @@ hr:
title: Lokacija
moderation:
all: Sve
most_recent_activity: Nedavne aktivnosti
perform_full_suspension: Suspendiraj
protocol: Protokol
public: Javno
reject: Odbij
action_logs:
empty: Nema pronađenih izvješća.
filter_by_action: Filtriraj prema radnji

View file

@ -534,6 +534,7 @@ nn:
total_reported: Rapportar om dei
total_storage: Medievedlegg
totals_time_period_hint_html: Totalsum vist nedanfor gjeld data for alle tidsperiodar.
unknown_instance: Dette domenet er ukjent for denne serveren.
invites:
deactivate_all: Slå av alle
filter:
@ -1101,6 +1102,7 @@ nn:
functional: Kontoen din er fullt operativt.
pending: Søknaden din ventar på gjennomgang frå personalet vårt. Dette kan taka litt tid. Du får ein e-post om søknaden din vert godkjend.
redirecting_to: Kontoen din er inaktiv fordi den for øyeblikket omdirigerer til %{acct}.
self_destruct: Siden %{domain} stenger, vil du kun ha begrenset tilgang til kontoen din.
view_strikes: Vis tidligere advarsler mot kontoen din
too_fast: Skjemaet ble sendt inn for raskt, prøv på nytt.
use_security_key: Bruk sikkerhetsnøkkel
@ -1570,6 +1572,9 @@ nn:
over_daily_limit: Du har overskredet grensen på %{limit} planlagte tuter for den dagen
over_total_limit: Du har overskredet grensen på %{limit} planlagte tuter
too_soon: Den planlagte datoen må være i fremtiden
self_destruct:
lead_html: Dessverre stenger <strong>%{domain}</strong> for alltid. Hvis du hadde en konto der vil du ikke kunne fortsette å bruke den, men du kan fremdeles be om en sikkerhetskopi av dataene dine.
title: Denne serveren stenger
sessions:
activity: Siste aktivitet
browser: Nettlesar

View file

@ -534,6 +534,7 @@
total_reported: Rapporter om dem
total_storage: Mediavedlegg
totals_time_period_hint_html: Summen som vises nedenfor inkluderer data for alle tider.
unknown_instance: Dette domenet er ukjent for denne serveren.
invites:
deactivate_all: Deaktiver alle
filter:
@ -1096,6 +1097,7 @@
functional: Kontoen din er fullt operativt.
pending: Søknaden din avventer gjennomgang av våre medarbeidere. Dette kan ta litt tid. Du vil motta en e-post dersom søknaden din blir godkjent.
redirecting_to: Kontoen din er inaktiv fordi den for øyeblikket omdirigerer til %{acct}.
self_destruct: Siden %{domain} stenger, vil du kun ha begrenset tilgang til kontoen din.
view_strikes: Vis tidligere advarsler mot kontoen din
too_fast: Skjemaet ble sendt inn for raskt, prøv på nytt.
use_security_key: Bruk sikkerhetsnøkkel
@ -1565,6 +1567,9 @@
over_daily_limit: Du har overskredet grensen på %{limit} planlagte innlegg for i dag
over_total_limit: Du har overskredet grensen på %{limit} planlagte innlegg
too_soon: Den planlagte datoen må være i fremtiden
self_destruct:
lead_html: Dessverre stenger <strong>%{domain}</strong> for alltid. Hvis du hadde en konto der vil du ikke kunne fortsette å bruke den, men du kan fremdeles be om en sikkerhetskopi av dataene dine.
title: Denne serveren stenger
sessions:
activity: Siste aktivitet
browser: Nettleser

View file

@ -534,6 +534,7 @@ pt-BR:
total_reported: Denúncias sobre eles
total_storage: Mídias anexadas
totals_time_period_hint_html: Os totais exibidos abaixo incluem dados para todo o tempo.
unknown_instance: Atualmente não há registros deste domínio neste servidor.
invites:
deactivate_all: Desativar todos
filter:
@ -1040,6 +1041,12 @@ pt-BR:
hint_html: Só mais uma coisa! Precisamos confirmar que você é um humano (isso é para que possamos evitar o spam!). Resolva o CAPTCHA abaixo e clique em "Continuar".
title: Verificação de segurança
confirmations:
awaiting_review: Seu endereço de e-mail foi confirmado! A equipe de %{domain} está agora revisando o seu cadastro. Eles lhe enviarão um e-mail se aprovarem a sua conta!
awaiting_review_title: Seu cadastro está sendo analisado
clicking_this_link: clicar este link
login_link: entrar
proceed_to_login_html: Agora você pode prosseguir para %{login_link}.
redirect_to_app_html: Você deveria ter sido redirecionado para o aplicativo <strong>%{app_name}</strong>. Se isso não aconteceu, tente %{clicking_this_link} ou volte manualmente para o aplicativo.
registration_complete: Seu cadastro no %{domain} foi concluído!
welcome_title: Boas vindas, %{name}!
wrong_email_hint: Se esse endereço de e-mail não estiver correto, você pode alterá-lo nas configurações da conta.

View file

@ -295,7 +295,7 @@ bg:
all: Известие за всички обновявания
critical: Известие само за критични обновявания
label: Има нова версия на Mastodon
none: Никога да не се известяват обновявания (не се препоръчва)
none: Никога да не се известява обновяване (непрепоръчително)
patch: Известие за обновявания на оправени грешки
trending_tag: Изискване на преглед за новонашумели
rule:

View file

@ -84,6 +84,7 @@ fa:
custom_css: می‌توانیدروی نگارش وب ماستودون سبک‌های سفارشی اعمال کنید.
mascot: نقش میانای وب پیش‌رفته را پایمال می‌کند.
media_cache_retention_period: اگر به مقدار مثبتی تنظیم شود، پرونده‌های رسانهٔ بارگرفته پس از روزهای مشخّص شده حذف خواهند شد و هنگام درخواست دوباره بارگرفته می‌شوند.
peers_api_enabled: فهرستی از نام‌های دامنه‌ای که این کارساز در فدیورس با آن مواجه شده است. هیچ اطلاعاتی در مورد اینکه آیا شما با یک کارساز داده شده متعهد هستید، در اینجا گنجانده نشده است، فقط کارساز شما در مورد آن می‌داند. این توسط خدماتی استفاده می‌شود که آمار مربوط به فدراسیون را به معنای کلی جمع‌آوری می‌کنند.
profile_directory: شاخهٔ نمایه، همهٔ کاربرانی که کشف‌پذیری را برگزیده‌اند سیاهه می‌کند.
require_invite_text: زمانی که نام‌نویسی ها نیازمند تایید دستی است، متن «چرا می‌خواهید بپیوندید؟» بخش درخواست دعوت را به جای اختیاری، اجباری کنید
site_contact_email: چگونگی دسترسی افراد به شما برای مقاصد قانونی یا پشتیبانی.
@ -91,6 +92,7 @@ fa:
site_extended_description: هر اطّلاعات بیش‌تری که ممکن است برای بازدیدکنندگان و کاربرانتان مفید باشد. می‌تواند به شکل مارک‌دون باشد.
site_short_description: شرحی کوتاه برای کمک به شناسایی یکتای کارسازتان. چه‌کسی می‌گرداندش و برای چه کسیست؟
site_terms: از سیاست محرمانگی خوتان استفاده کرده یا برای استفاده از سیاست پیش‌گزیده خالی بگذارید. می‌تواند در قالب مارک‌دون باشد.
site_title: چگونه مردم ممکن است به کارساز شما علاوه بر نام دامنه آن مراجعه کنند.
form_challenge:
current_password: شما در حال ورود به یک منطقهٔ‌ حفاظت‌شده هستید
imports:

View file

@ -252,7 +252,7 @@ fi:
require_invite_text: Vaadi syy liittyä
show_domain_blocks: Näytä verkkotunnusten estot
show_domain_blocks_rationale: Näytä, miksi verkkotunnukset on estetty
site_contact_email: Ota yhteyttä sähköpostilla
site_contact_email: Ota yhteys sähköpostitse
site_contact_username: Yhteyshenkilön käyttäjänimi
site_extended_description: Laajennettu kuvaus
site_short_description: Palvelimen kuvaus

View file

@ -210,7 +210,7 @@ gl:
setting_delete_modal: Solicitar confirmación antes de eliminar unha publicación
setting_disable_swiping: Desactivar opcións de desprazamento
setting_display_media: Mostrar multimedia
setting_display_media_default: Por omisión
setting_display_media_default: Por defecto
setting_display_media_hide_all: Ocultar todo
setting_display_media_show_all: Mostrar todo
setting_expand_spoilers: Despregar sempre as publicacións marcadas con avisos de contido
@ -259,7 +259,7 @@ gl:
site_terms: Política de Privacidade
site_title: Nome do servidor
status_page_url: URL da páxina do estado
theme: Decorado por omisión
theme: Decorado por defecto
thumbnail: Icona do servidor
timeline_preview: Permitir acceso á cronoloxía pública sen autenticación
trendable_by_default: Permitir tendencias sen aprobación previa

View file

@ -2,12 +2,18 @@
hr:
simple_form:
hints:
account:
display_name: Tvoje puno ime ili tvoj online nadimak.
account_warning_preset:
title: Proizvoljno. Nije vidljivo primatelju
defaults:
avatar: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjeno na %{dimensions}px
header: PNG, GIF ili JPG. Najviše %{size}. Bit će smanjeno na %{dimensions}px
password: Mora biti najmanje 8 znakova
setting_display_media_default: Sakrij medijski sadržaj označen kao osjetljiv
setting_display_media_hide_all: Uvijek sakrij medijski sadržaj
setting_display_media_show_all: Uvijek prikaži medijski sadržaj
username: Mora sadržavati samo slova, brojeve i _
imports:
data: CSV datoteka izvezena iz drugog Mastodonovog poslužitelja
labels:

View file

@ -1041,6 +1041,7 @@ sv:
hint_html: En sista sak till! Vi måste bekräfta att du är en människa (för att hålla borta skräpinlägg!). Lös CAPTCHA nedan och klicka på "Fortsätt".
title: Säkerhetskontroll
confirmations:
awaiting_review: Din e-postadress är bekräftad! %{domain} personalen granskar nu din registrering. Du kommer att få ett e-postmeddelande om de godkänner ditt konto!
awaiting_review_title: Din registrering är under granskning
clicking_this_link: klicka på denna länk
login_link: logga in

View file

@ -54,14 +54,14 @@ uk:
no_role: Немає ролі
title: Змінити роль для %{username}
confirm: Зберегти
confirmed: Підтвердити ел.адресу
confirmed: Підтверджено
confirming: Зберігається
custom: Власне
delete: Видалити дані
deleted: Видалено
demote: Усунути
destroyed_msg: Дані %{username} тепер в черзі на негайне видалення
disable: Вимкнути
disable: Заморозити
disable_sign_in_token_auth: Вимкнути автентифікацію за допомогою е-пошти
disable_two_factor_authentication: Вимкнути двофакторну авторизацію
disabled: Вимкнено
@ -70,7 +70,7 @@ uk:
edit: Змінити
email: Електронна пошта
email_status: Стан електронної пошти
enable: Увімкнути
enable: Розморозити
enable_sign_in_token_auth: Увімкнути автентифікацію за допомогою е-пошти
enabled: Увімкнено
enabled_msg: Обліковий запис %{username} успішно розморожено

View file

@ -1023,6 +1023,14 @@ zh-HK:
hint_html: 還有最後一步!我們需要確認你是人類(這樣我們才能杜絕垃圾郵件!)。解答下方的 CAPTCHA然後點擊「繼續」。
title: 安全檢查
confirmations:
awaiting_review: 已確認你的電郵地址!%{domain} 的工作人員正在審核你的註冊資料。如果他們批准你的帳號,你將會收到電郵通知。
awaiting_review_title: 正在審核你的註冊
clicking_this_link: 點擊此連結
login_link: 登入
proceed_to_login_html: 你現在可前往 %{login_link}
redirect_to_app_html: 你應該已被重新導向<strong>%{app_name}</strong>應用程式。如果尚未被導向,請嘗試%{clicking_this_link}或自行回到應用程式。
registration_complete: 你在%{domain}已完成註冊!
welcome_title: 歡迎,%{name}
wrong_email_hint: 如果該電郵地址不正確,你可以在帳號設定中修改。
delete_account: 刪除帳號
delete_account_html: 如果你想刪除你的帳號,請<a href="%{path}">點擊這裡繼續</a>。你需要確認你的操作。

View file

@ -52,12 +52,12 @@ Rails.application.routes.draw do
end
get '.well-known/host-meta', to: 'well_known/host_meta#show', as: :host_meta, defaults: { format: 'xml' }
get '.well-known/nodeinfo', to: 'well_known/nodeinfo#index', as: :nodeinfo, defaults: { format: 'json' }
get '.well-known/nodeinfo', to: 'well_known/node_info#index', as: :nodeinfo, defaults: { format: 'json' }
get '.well-known/webfinger', to: 'well_known/webfinger#show', as: :webfinger
get '.well-known/change-password', to: redirect('/auth/edit')
get '.well-known/proxy', to: redirect { |_, request| "/authorize_interaction?#{request.params.to_query}" }
get '/nodeinfo/2.0', to: 'well_known/nodeinfo#show', as: :nodeinfo_schema
get '/nodeinfo/2.0', to: 'well_known/node_info#show', as: :nodeinfo_schema
get 'manifest', to: 'manifests#show', defaults: { format: 'json' }
get 'intent', to: 'intents#show'

View file

@ -2,8 +2,10 @@
class AddProfileFieldsToAccounts < ActiveRecord::Migration[4.2]
def change
add_column :accounts, :note, :text, null: false, default: ''
add_column :accounts, :display_name, :string, null: false, default: ''
add_column :accounts, :uri, :string, null: false, default: ''
change_table :accounts, bulk: true do |t|
t.column :note, :text, null: false, default: ''
t.column :display_name, :string, null: false, default: ''
t.column :uri, :string, null: false, default: ''
end
end
end

View file

@ -2,7 +2,9 @@
class AddMetadataToStatuses < ActiveRecord::Migration[4.2]
def change
add_column :statuses, :in_reply_to_id, :integer, null: true
add_column :statuses, :reblog_of_id, :integer, null: true
change_table(:statuses, bulk: true) do |t|
t.column :in_reply_to_id, :integer, null: true
t.column :reblog_of_id, :integer, null: true
end
end
end

View file

@ -2,7 +2,7 @@
class AddDeviseToUsers < ActiveRecord::Migration[4.2]
def self.up
change_table(:users) do |t|
change_table(:users, bulk: true) do |t|
## Database authenticatable
t.string :encrypted_password, null: false, default: ''

View file

@ -2,8 +2,10 @@
class AddOwnerToApplication < ActiveRecord::Migration[4.2]
def change
add_column :oauth_applications, :owner_id, :integer, null: true
add_column :oauth_applications, :owner_type, :string, null: true
change_table(:oauth_applications, bulk: true) do |t|
t.column :owner_id, :integer, null: true
t.column :owner_type, :string, null: true
end
add_index :oauth_applications, [:owner_id, :owner_type]
end
end

View file

@ -2,8 +2,10 @@
class RemoveOwnerFromApplication < ActiveRecord::Migration[5.0]
def change
remove_index :oauth_applications, [:owner_id, :owner_type]
remove_column :oauth_applications, :owner_id, :integer, null: true
remove_column :oauth_applications, :owner_type, :string, null: true
change_table(:oauth_applications, bulk: true) do |t|
t.remove_index [:owner_id, :owner_type]
t.remove :owner_id, type: :integer, options: { null: true }
t.remove :owner_type, type: :string, options: { null: true }
end
end
end

View file

@ -2,10 +2,12 @@
class AddConfirmableToUsers < ActiveRecord::Migration[5.0]
def change
add_column :users, :confirmation_token, :string
add_column :users, :confirmed_at, :datetime
add_column :users, :confirmation_sent_at, :datetime
add_column :users, :unconfirmed_email, :string
change_table(:users, bulk: true) do |t|
t.column :confirmation_token, :string
t.column :confirmed_at, :datetime
t.column :confirmation_sent_at, :datetime
t.column :unconfirmed_email, :string
end
add_index :users, :confirmation_token, unique: true
end
end

View file

@ -2,20 +2,24 @@
class MigrateSettings < ActiveRecord::Migration[4.2]
def up
remove_index :settings, [:target_type, :target_id, :var]
rename_column :settings, :target_id, :thing_id
rename_column :settings, :target_type, :thing_type
change_column :settings, :thing_id, :integer, null: true, default: nil
change_column :settings, :thing_type, :string, null: true, default: nil
add_index :settings, [:thing_type, :thing_id, :var], unique: true
change_table(:settings, bulk: true) do |t|
t.remove_index [:target_type, :target_id, :var]
t.rename :target_id, :thing_id
t.rename :target_type, :thing_type
t.change :thing_id, :integer, null: true, default: nil
t.change :thing_type, :string, null: true, default: nil
t.index [:thing_type, :thing_id, :var], unique: true
end
end
def down
remove_index :settings, [:thing_type, :thing_id, :var]
rename_column :settings, :thing_id, :target_id
rename_column :settings, :thing_type, :target_type
change_column :settings, :target_id, :integer, null: false
change_column :settings, :target_type, :string, null: false, default: ''
add_index :settings, [:target_type, :target_id, :var], unique: true
change_table(:settings, bulk: true) do |t|
t.remove_index [:thing_type, :thing_id, :var]
t.rename :thing_id, :target_id
t.rename :thing_type, :target_type
t.column :target_id, :integer, null: false
t.column :target_type, :string, null: false, default: ''
t.index [:target_type, :target_id, :var], unique: true
end
end
end

View file

@ -2,10 +2,12 @@
class AddDeviseTwoFactorToUsers < ActiveRecord::Migration[5.0]
def change
add_column :users, :encrypted_otp_secret, :string
add_column :users, :encrypted_otp_secret_iv, :string
add_column :users, :encrypted_otp_secret_salt, :string
add_column :users, :consumed_timestep, :integer
add_column :users, :otp_required_for_login, :boolean
change_table(:users, bulk: true) do |t|
t.column :encrypted_otp_secret, :string
t.column :encrypted_otp_secret_iv, :string
t.column :encrypted_otp_secret_salt, :string
t.column :consumed_timestep, :integer
t.column :otp_required_for_login, :boolean
end
end
end

View file

@ -2,9 +2,11 @@
class ChangePrimaryKeyToBigintOnStatuses < ActiveRecord::Migration[5.0]
def change
change_column :statuses, :id, :bigint
change_column :statuses, :reblog_of_id, :bigint
change_column :statuses, :in_reply_to_id, :bigint
change_table(:statuses, bulk: true) do |t|
t.change :id, :bigint
t.change :reblog_of_id, :bigint
t.change :in_reply_to_id, :bigint
end
change_column :media_attachments, :status_id, :bigint
change_column :mentions, :status_id, :bigint

View file

@ -2,11 +2,15 @@
class AddCounterCaches < ActiveRecord::Migration[5.0]
def change
add_column :statuses, :favourites_count, :integer, null: false, default: 0
add_column :statuses, :reblogs_count, :integer, null: false, default: 0
add_column :accounts, :statuses_count, :integer, null: false, default: 0
add_column :accounts, :followers_count, :integer, null: false, default: 0
add_column :accounts, :following_count, :integer, null: false, default: 0
change_table(:statuses, bulk: true) do |t|
t.column :favourites_count, :integer, null: false, default: 0
t.column :reblogs_count, :integer, null: false, default: 0
end
change_table(:accounts, bulk: true) do |t|
t.column :statuses_count, :integer, null: false, default: 0
t.column :followers_count, :integer, null: false, default: 0
t.column :following_count, :integer, null: false, default: 0
end
end
end

View file

@ -2,13 +2,15 @@
class AddOEmbedToPreviewCards < ActiveRecord::Migration[5.0]
def change
add_column :preview_cards, :type, :integer, default: 0, null: false
add_column :preview_cards, :html, :text, null: false, default: ''
add_column :preview_cards, :author_name, :string, null: false, default: ''
add_column :preview_cards, :author_url, :string, null: false, default: ''
add_column :preview_cards, :provider_name, :string, null: false, default: ''
add_column :preview_cards, :provider_url, :string, null: false, default: ''
add_column :preview_cards, :width, :integer, default: 0, null: false
add_column :preview_cards, :height, :integer, default: 0, null: false
change_table(:preview_cards, bulk: true) do |t|
t.column :type, :integer, default: 0, null: false
t.column :html, :text, null: false, default: ''
t.column :author_name, :string, null: false, default: ''
t.column :author_url, :string, null: false, default: ''
t.column :provider_name, :string, null: false, default: ''
t.column :provider_url, :string, null: false, default: ''
t.column :width, :integer, default: 0, null: false
t.column :height, :integer, default: 0, null: false
end
end
end

View file

@ -2,8 +2,10 @@
class ReAddOwnerToApplication < ActiveRecord::Migration[5.0]
def change
add_column :oauth_applications, :owner_id, :integer, null: true
add_column :oauth_applications, :owner_type, :string, null: true
change_table(:oauth_applications, bulk: true) do |t|
t.column :owner_id, :integer, null: true
t.column :owner_type, :string, null: true
end
add_index :oauth_applications, [:owner_id, :owner_type]
add_foreign_key :oauth_applications, :users, column: :owner_id, on_delete: :cascade
end

View file

@ -3,9 +3,12 @@
class ChangeLanguageFilterToOptOut < ActiveRecord::Migration[5.0]
def change
remove_index :users, :allowed_languages
remove_column :users, :allowed_languages
add_column :users, :filtered_languages, :string, array: true, default: [], null: false
change_table(:users, bulk: true) do |t|
t.remove :allowed_languages
t.column :filtered_languages, :string, array: true, default: [], null: false
end
add_index :users, :filtered_languages, using: :gin
end
end

View file

@ -2,8 +2,10 @@
class AddDescriptionToSessionActivations < ActiveRecord::Migration[5.1]
def change
add_column :session_activations, :user_agent, :string, null: false, default: ''
add_column :session_activations, :ip, :inet
change_table(:session_activations, bulk: true) do |t|
t.column :user_agent, :string, null: false, default: ''
t.column :ip, :inet
end
add_foreign_key :session_activations, :users, on_delete: :cascade
end
end

View file

@ -2,10 +2,12 @@
class AddActivityPubToAccounts < ActiveRecord::Migration[5.1]
def change
add_column :accounts, :inbox_url, :string, null: false, default: ''
add_column :accounts, :outbox_url, :string, null: false, default: ''
add_column :accounts, :shared_inbox_url, :string, null: false, default: ''
add_column :accounts, :followers_url, :string, null: false, default: ''
add_column :accounts, :protocol, :integer, null: false, default: 0
change_table(:accounts, bulk: true) do |t|
t.column :inbox_url, :string, null: false, default: ''
t.column :outbox_url, :string, null: false, default: ''
t.column :shared_inbox_url, :string, null: false, default: ''
t.column :followers_url, :string, null: false, default: ''
t.column :protocol, :integer, null: false, default: 0
end
end
end

View file

@ -2,7 +2,11 @@
class AddUriToCustomEmojis < ActiveRecord::Migration[5.2]
def change
add_column :custom_emojis, :uri, :string
add_column :custom_emojis, :image_remote_url, :string
safety_assured do
change_table(:custom_emojis, bulk: true) do |t|
t.column :uri, :string
t.column :image_remote_url, :string
end
end
end
end

View file

@ -15,7 +15,9 @@ class ChangeRelaysEnabled < ActiveRecord::Migration[5.2]
end
def down
remove_column :relays, :state
add_column :relays, :enabled, :boolean, default: false, null: false
change_table(:relays, bulk: true) do |t|
t.remove :state
t.column :enabled, :boolean, default: false, null: false
end
end
end

View file

@ -13,8 +13,12 @@ class AddSilencedAtSuspendedAtToAccounts < ActiveRecord::Migration[5.2]
end
def up
add_column :accounts, :silenced_at, :datetime
add_column :accounts, :suspended_at, :datetime
safety_assured do
change_table(:accounts, bulk: true) do |t|
t.column :silenced_at, :datetime
t.column :suspended_at, :datetime
end
end
# Record suspend date of blocks and silences for users whose limitations match
# a domain block
@ -36,7 +40,9 @@ class AddSilencedAtSuspendedAtToAccounts < ActiveRecord::Migration[5.2]
Account.where(suspended: false).where.not(suspended_at: nil).in_batches.update_all(suspended: true)
Account.where(silenced: false).where.not(silenced_at: nil).in_batches.update_all(silenced: true)
remove_column :accounts, :silenced_at
remove_column :accounts, :suspended_at
change_table(:accounts, bulk: true) do |t|
t.column :silenced_at, :datetime
t.column :suspended_at, :datetime
end
end
end

View file

@ -2,10 +2,14 @@
class AddCapabilitiesToTags < ActiveRecord::Migration[5.2]
def change
add_column :tags, :usable, :boolean
add_column :tags, :trendable, :boolean
add_column :tags, :listable, :boolean
add_column :tags, :reviewed_at, :datetime
add_column :tags, :requested_review_at, :datetime
safety_assured do
change_table(:tags, bulk: true) do |t|
t.column :usable, :boolean
t.column :trendable, :boolean
t.column :listable, :boolean
t.column :reviewed_at, :datetime
t.column :requested_review_at, :datetime
end
end
end
end

View file

@ -2,7 +2,11 @@
class AddCommentsToDomainBlocks < ActiveRecord::Migration[5.2]
def change
add_column :domain_blocks, :private_comment, :text
add_column :domain_blocks, :public_comment, :text
safety_assured do
change_table(:domain_blocks, bulk: true) do |t|
t.column :private_comment, :text
t.column :public_comment, :text
end
end
end
end

View file

@ -2,7 +2,11 @@
class AddLastStatusAtToTags < ActiveRecord::Migration[5.2]
def change
add_column :tags, :last_status_at, :datetime
add_column :tags, :last_trend_at, :datetime
safety_assured do
change_table(:tags, bulk: true) do |t|
t.column :last_status_at, :datetime
t.column :last_trend_at, :datetime
end
end
end
end

View file

@ -2,7 +2,11 @@
class AddMaxScoreToTags < ActiveRecord::Migration[5.2]
def change
add_column :tags, :max_score, :float
add_column :tags, :max_score_at, :datetime
safety_assured do
change_table(:tags, bulk: true) do |t|
t.column :max_score, :float
t.column :max_score_at, :datetime
end
end
end
end

View file

@ -3,8 +3,12 @@
class AddStorageSchemaVersion < ActiveRecord::Migration[5.2]
def change
add_column :preview_cards, :image_storage_schema_version, :integer
add_column :accounts, :avatar_storage_schema_version, :integer
add_column :accounts, :header_storage_schema_version, :integer
safety_assured do
change_table(:accounts, bulk: true) do |t|
t.column :avatar_storage_schema_version, :integer
t.column :header_storage_schema_version, :integer
end
end
add_column :media_attachments, :file_storage_schema_version, :integer
add_column :custom_emojis, :image_storage_schema_version, :integer
end

View file

@ -2,7 +2,11 @@
class AddSignInTokenToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :sign_in_token, :string
add_column :users, :sign_in_token_sent_at, :datetime
safety_assured do
change_table(:users, bulk: true) do |t|
t.column :sign_in_token, :string
t.column :sign_in_token_sent_at, :datetime
end
end
end
end

View file

@ -2,8 +2,12 @@
class AddLanguageToPreviewCards < ActiveRecord::Migration[6.1]
def change
add_column :preview_cards, :language, :string
add_column :preview_cards, :max_score, :float
add_column :preview_cards, :max_score_at, :datetime
safety_assured do
change_table(:preview_cards, bulk: true) do |t|
t.column :language, :string
t.column :max_score, :float
t.column :max_score_at, :datetime
end
end
end
end

View file

@ -8,16 +8,24 @@ class AddCategoryToReports < ActiveRecord::Migration[6.1]
disable_ddl_transaction!
def up
safety_assured { add_column_with_default :reports, :category, :int, default: 0, allow_null: false }
add_column :reports, :action_taken_at, :datetime
add_column :reports, :rule_ids, :bigint, array: true
safety_assured { execute 'UPDATE reports SET action_taken_at = updated_at WHERE action_taken = TRUE' }
safety_assured do
add_column_with_default :reports, :category, :int, default: 0, allow_null: false
change_table(:reports, bulk: true) do |t|
t.column :action_taken_at, :datetime
t.column :rule_ids, :bigint, array: true
end
execute 'UPDATE reports SET action_taken_at = updated_at WHERE action_taken = TRUE'
end
end
def down
safety_assured { execute 'UPDATE reports SET action_taken = TRUE WHERE action_taken_at IS NOT NULL' }
remove_column :reports, :category
remove_column :reports, :action_taken_at
remove_column :reports, :rule_ids
safety_assured do
execute 'UPDATE reports SET action_taken = TRUE WHERE action_taken_at IS NOT NULL'
remove_column :reports, :category
change_table(:reports, bulk: true) do |t|
t.column :action_taken_at, :datetime
t.column :rule_ids, :bigint, array: true
end
end
end
end

View file

@ -2,8 +2,12 @@
class AddTrendableToAccounts < ActiveRecord::Migration[6.1]
def change
add_column :accounts, :trendable, :boolean
add_column :accounts, :reviewed_at, :datetime
add_column :accounts, :requested_review_at, :datetime
safety_assured do
change_table(:accounts, bulk: true) do |t|
t.column :trendable, :boolean
t.column :reviewed_at, :datetime
t.column :requested_review_at, :datetime
end
end
end
end

View file

@ -2,7 +2,11 @@
class AddIpsToEmailDomainBlocks < ActiveRecord::Migration[6.1]
def change
add_column :email_domain_blocks, :ips, :inet, array: true
add_column :email_domain_blocks, :last_refresh_at, :datetime
safety_assured do
change_table(:email_domain_blocks, bulk: true) do |t|
t.column :ips, :inet, array: true
t.column :last_refresh_at, :datetime
end
end
end
end

View file

@ -2,7 +2,11 @@
class AddLastUsedAtToOauthAccessTokens < ActiveRecord::Migration[6.1]
def change
add_column :oauth_access_tokens, :last_used_at, :datetime
add_column :oauth_access_tokens, :last_used_ip, :inet
safety_assured do
change_table(:oauth_access_tokens, bulk: true) do |t|
t.column :last_used_at, :datetime
t.column :last_used_ip, :inet
end
end
end
end

View file

@ -2,9 +2,13 @@
class AddOrderedMediaAttachmentIdsToStatusEdits < ActiveRecord::Migration[6.1]
def change
add_column :status_edits, :ordered_media_attachment_ids, :bigint, array: true
add_column :status_edits, :media_descriptions, :text, array: true
add_column :status_edits, :poll_options, :string, array: true
add_column :status_edits, :sensitive, :boolean
safety_assured do
change_table(:status_edits, bulk: true) do |t|
t.column :ordered_media_attachment_ids, :bigint, array: true
t.column :media_descriptions, :text, array: true
t.column :poll_options, :string, array: true
t.column :sensitive, :boolean
end
end
end
end

View file

@ -2,8 +2,12 @@
class AddHumanIdentifierToAdminActionLogs < ActiveRecord::Migration[6.1]
def change
add_column :admin_action_logs, :human_identifier, :string
add_column :admin_action_logs, :route_param, :string
add_column :admin_action_logs, :permalink, :string
safety_assured do
change_table(:admin_action_logs, bulk: true) do |t|
t.column :human_identifier, :string
t.column :route_param, :string
t.column :permalink, :string
end
end
end
end

View file

@ -224,7 +224,7 @@ module Mastodon::CLI
users = User.where(id: row['ids'].split(',')).sort_by(&:updated_at).reverse
ref_user = users.shift
say "Multiple users registered with e-mail address #{ref_user.email}.", :yellow
say "e-mail will be disabled for the following accounts: #{user.map(&:account).map(&:acct).join(', ')}", :yellow
say "e-mail will be disabled for the following accounts: #{user.map { |user| user.account.acct }.join(', ')}", :yellow
say 'Please reach out to them and set another address with `tootctl account modify` or delete them.', :yellow
users.each_with_index do |user, index|
@ -253,7 +253,7 @@ module Mastodon::CLI
def deduplicate_users_process_confirmation_token
ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE confirmation_token IS NOT NULL GROUP BY confirmation_token HAVING count(*) > 1").each do |row|
users = User.where(id: row['ids'].split(',')).sort_by(&:created_at).reverse.drop(1)
say "Unsetting confirmation token for those accounts: #{users.map(&:account).map(&:acct).join(', ')}", :yellow
say "Unsetting confirmation token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
users.each do |user|
user.update!(confirmation_token: nil)
@ -265,7 +265,7 @@ module Mastodon::CLI
if ActiveRecord::Migrator.current_version < 2022_01_18_183010
ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE remember_token IS NOT NULL GROUP BY remember_token HAVING count(*) > 1").each do |row|
users = User.where(id: row['ids'].split(',')).sort_by(&:updated_at).reverse.drop(1)
say "Unsetting remember token for those accounts: #{users.map(&:account).map(&:acct).join(', ')}", :yellow
say "Unsetting remember token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
users.each do |user|
user.update!(remember_token: nil)
@ -277,7 +277,7 @@ module Mastodon::CLI
def deduplicate_users_process_password_token
ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE reset_password_token IS NOT NULL GROUP BY reset_password_token HAVING count(*) > 1").each do |row|
users = User.where(id: row['ids'].split(',')).sort_by(&:updated_at).reverse.drop(1)
say "Unsetting password reset token for those accounts: #{users.map(&:account).map(&:acct).join(', ')}", :yellow
say "Unsetting password reset token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
users.each do |user|
user.update!(reset_password_token: nil)

View file

@ -74,7 +74,7 @@ class Sanitize
current_node.replace(Nokogiri::XML::Text.new(current_node.text, current_node.document)) unless LINK_PROTOCOLS.include?(scheme)
end
MASTODON_STRICT ||= freeze_config(
MASTODON_STRICT = freeze_config(
elements: %w(p br span a abbr del pre blockquote code b strong u sub sup i em h1 h2 h3 h4 h5 ul ol li),
attributes: {
@ -106,7 +106,7 @@ class Sanitize
]
)
MASTODON_OEMBED ||= freeze_config(
MASTODON_OEMBED = freeze_config(
elements: %w(audio embed iframe source video),
attributes: {
@ -154,7 +154,7 @@ class Sanitize
end
end
MASTODON_OUTGOING ||= freeze_config MASTODON_STRICT.merge(
MASTODON_OUTGOING = freeze_config MASTODON_STRICT.merge(
attributes: merge(
MASTODON_STRICT[:attributes],
'a' => %w(href rel class title target translate)

View file

@ -18,21 +18,8 @@ RSpec.describe Admin::AccountsController do
end
it 'filters with parameters' do
new = AccountFilter.method(:new)
expect(AccountFilter).to receive(:new) do |params|
h = params.to_h
expect(h[:origin]).to eq 'local'
expect(h[:by_domain]).to eq 'domain'
expect(h[:status]).to eq 'active'
expect(h[:username]).to eq 'username'
expect(h[:display_name]).to eq 'display name'
expect(h[:email]).to eq 'local-part@domain'
expect(h[:ip]).to eq '0.0.0.42'
new.call({})
end
account_filter = instance_double(AccountFilter, results: Account.all)
allow(AccountFilter).to receive(:new).and_return(account_filter)
get :index, params: {
origin: 'local',
@ -43,6 +30,18 @@ RSpec.describe Admin::AccountsController do
email: 'local-part@domain',
ip: '0.0.0.42',
}
expect(AccountFilter).to have_received(:new) do |params|
h = params.to_h
expect(h[:origin]).to eq 'local'
expect(h[:by_domain]).to eq 'domain'
expect(h[:status]).to eq 'active'
expect(h[:username]).to eq 'username'
expect(h[:display_name]).to eq 'display name'
expect(h[:email]).to eq 'local-part@domain'
expect(h[:ip]).to eq '0.0.0.42'
end
end
it 'paginates accounts' do

View file

@ -3,14 +3,14 @@
require 'rails_helper'
describe Api::V1::StreamingController do
around(:each) do |example|
around do |example|
before = Rails.configuration.x.streaming_api_base_url
Rails.configuration.x.streaming_api_base_url = Rails.configuration.x.web_domain
example.run
Rails.configuration.x.streaming_api_base_url = before
end
before(:each) do
before do
request.headers.merge! Host: Rails.configuration.x.web_domain
end
@ -24,7 +24,7 @@ describe Api::V1::StreamingController do
end
context 'with streaming api on different host' do
before(:each) do
before do
Rails.configuration.x.streaming_api_base_url = "wss://streaming-#{Rails.configuration.x.web_domain}"
@streaming_host = URI.parse(Rails.configuration.x.streaming_api_base_url).host
end

View file

@ -53,7 +53,7 @@ RSpec.describe Api::V2::SearchController do
context 'without token' do
describe 'GET #index' do
let(:search_params) {}
let(:search_params) { nil }
before do
get :index, params: search_params

View file

@ -16,7 +16,7 @@ describe WellKnown::WebfingerController do
let(:alice) { Fabricate(:account, username: 'alice') }
let(:resource) { nil }
around(:each) do |example|
around do |example|
tmp = Rails.configuration.x.alternate_domains
Rails.configuration.x.alternate_domains = alternate_domains
example.run

View file

@ -1,4 +1,3 @@
# frozen_string_literal: true
Fabricator :access_token, from: 'Doorkeeper::AccessToken' do
end
Fabricator :access_token, from: 'Doorkeeper::AccessToken'

View file

@ -1,4 +1,3 @@
# frozen_string_literal: true
Fabricator(:conversation) do
end
Fabricator(:conversation)

View file

@ -1,4 +1,3 @@
# frozen_string_literal: true
Fabricator(:system_key) do
end
Fabricator(:system_key)

View file

@ -7,11 +7,7 @@ describe 'email confirmation flow when captcha is enabled' do
let(:client_app) { nil }
before do
# rubocop:disable RSpec/AnyInstance -- easiest way to deal with that that I know of
allow_any_instance_of(Auth::ConfirmationsController).to receive(:captcha_enabled?).and_return(true)
allow_any_instance_of(Auth::ConfirmationsController).to receive(:check_captcha!).and_return(true)
allow_any_instance_of(Auth::ConfirmationsController).to receive(:render_captcha).and_return(nil)
# rubocop:enable RSpec/AnyInstance
allow(Auth::ConfirmationsController).to receive(:new).and_return(stubbed_controller)
end
context 'when the user signed up through an app' do
@ -40,4 +36,12 @@ describe 'email confirmation flow when captcha is enabled' do
expect(page).to have_link(I18n.t('auth.confirmations.clicking_this_link'), href: client_app.confirmation_redirect_uri)
end
end
private
def stubbed_controller
Auth::ConfirmationsController.new.tap do |controller|
allow(controller).to receive_messages(captcha_enabled?: true, check_captcha!: true, render_captcha: nil)
end
end
end

View file

@ -18,13 +18,15 @@ RSpec.describe Admin::AccountModerationNotesHelper do
let(:account) { Fabricate(:account) }
it 'calls #link_to' do
expect(helper).to receive(:link_to).with(
allow(helper).to receive(:link_to)
helper.admin_account_link_to(account)
expect(helper).to have_received(:link_to).with(
admin_account_path(account.id),
class: name_tag_classes(account),
title: account.acct
)
helper.admin_account_link_to(account)
end
end
end

Some files were not shown because too many files have changed in this diff Show more