diff --git a/.env.test b/.env.test
index 9e6abea5c9a058..d2763e582ae926 100644
--- a/.env.test
+++ b/.env.test
@@ -4,7 +4,8 @@ NODE_ENV=production
LOCAL_DOMAIN=cb6e6126.ngrok.io
LOCAL_HTTPS=true
-# Required by ActiveRecord encryption feature
-ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=fkSxKD2bF396kdQbrP1EJ7WbU7ZgNokR
-ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=r0hvVmzBVsjxC7AMlwhOzmtc36ZCOS1E
-ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=PhdFyyfy5xJ7WVd2lWBpcPScRQHzRTNr
+# Secret values required by ActiveRecord encryption feature
+# Use `bin/rails db:encryption:init` to generate fresh secrets
+ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=test_determinist_key_DO_NOT_USE_IN_PRODUCTION
+ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=test_salt_DO_NOT_USE_IN_PRODUCTION
+ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=test_primary_key_DO_NOT_USE_IN_PRODUCTION
diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml
index 45dc8a0deb816e..2bfa59e6b12177 100644
--- a/.github/workflows/test-ruby.yml
+++ b/.github/workflows/test-ruby.yml
@@ -264,8 +264,8 @@ jobs:
ports:
- 6379:6379
- search:
- image: ${{ matrix.search-image }}
+ elasticsearch:
+ image: ${{ contains(matrix.search-image, 'elasticsearch') && matrix.search-image || '' }}
env:
discovery.type: single-node
xpack.security.enabled: false
@@ -277,6 +277,20 @@ jobs:
ports:
- 9200:9200
+ opensearch:
+ image: ${{ contains(matrix.search-image, 'opensearch') && matrix.search-image || '' }}
+ env:
+ discovery.type: single-node
+ DISABLE_INSTALL_DEMO_CONFIG: true
+ DISABLE_SECURITY_PLUGIN: true
+ options: >-
+ --health-cmd "curl http://localhost:9200/_cluster/health"
+ --health-interval 10s
+ --health-timeout 5s
+ --health-retries 10
+ ports:
+ - 9200:9200
+
env:
DB_HOST: localhost
DB_USER: postgres
@@ -300,6 +314,8 @@ jobs:
include:
- ruby-version: '.ruby-version'
search-image: docker.elastic.co/elasticsearch/elasticsearch:8.10.2
+ - ruby-version: '.ruby-version'
+ search-image: opensearchproject/opensearch:2
steps:
- uses: actions/checkout@v4
diff --git a/.rubocop.yml b/.rubocop.yml
index 542e90b5e337c1..cbc0afd2815c53 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -211,6 +211,11 @@ Style/PercentLiteralDelimiters:
Style/RedundantBegin:
Enabled: false
+# Reason: Prevailing style choice
+# https://docs.rubocop.org/rubocop/cops_style.html#styleredundantfetchblock
+Style/RedundantFetchBlock:
+ Enabled: false
+
# Reason: Overridden to reduce implicit StandardError rescues
# https://docs.rubocop.org/rubocop/cops_style.html#stylerescuestandarderror
Style/RescueStandardError:
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index 85da96d73c8e16..cdd0c5452d951a 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -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.62.1.
+# using RuboCop version 1.63.5.
# 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
@@ -122,13 +122,6 @@ Style/HashTransformValues:
- 'app/serializers/rest/web_push_subscription_serializer.rb'
- 'app/services/import_service.rb'
-# This cop supports safe autocorrection (--autocorrect).
-Style/IfUnlessModifier:
- Exclude:
- - 'config/environments/production.rb'
- - 'config/initializers/devise.rb'
- - 'config/initializers/ffmpeg.rb'
-
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/MapToHash:
Exclude:
@@ -176,16 +169,6 @@ Style/RedundantConstantBase:
- 'config/environments/production.rb'
- 'config/initializers/sidekiq.rb'
-# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: SafeForConstants.
-Style/RedundantFetchBlock:
- Exclude:
- - 'config/initializers/1_hosts.rb'
- - 'config/initializers/chewy.rb'
- - 'config/initializers/devise.rb'
- - 'config/initializers/paperclip.rb'
- - 'config/puma.rb'
-
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength.
# AllowedMethods: present?, blank?, presence, try, try!
diff --git a/.simplecov b/.simplecov
deleted file mode 100644
index fbd0207bec51ce..00000000000000
--- a/.simplecov
+++ /dev/null
@@ -1,22 +0,0 @@
-# frozen_string_literal: true
-
-if ENV['CI']
- require 'simplecov-lcov'
- SimpleCov::Formatter::LcovFormatter.config.report_with_single_file = true
- SimpleCov.formatter = SimpleCov::Formatter::LcovFormatter
-else
- SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
-end
-
-SimpleCov.start 'rails' do
- enable_coverage :branch
-
- add_filter 'lib/linter'
-
- add_group 'Libraries', 'lib'
- add_group 'Policies', 'app/policies'
- add_group 'Presenters', 'app/presenters'
- add_group 'Serializers', 'app/serializers'
- add_group 'Services', 'app/services'
- add_group 'Validators', 'app/validators'
-end
diff --git a/Gemfile b/Gemfile
index 247865aacfd5f5..240dcce95ac6a8 100644
--- a/Gemfile
+++ b/Gemfile
@@ -132,7 +132,7 @@ group :test do
gem 'email_spec'
# Extra RSpec extension methods and helpers for sidekiq
- gem 'rspec-sidekiq', '~> 4.0'
+ gem 'rspec-sidekiq', '~> 5.0'
# Browser integration testing
gem 'capybara', '~> 3.39'
@@ -178,7 +178,7 @@ group :development do
# Preview mail in the browser
gem 'letter_opener', '~> 1.8'
- gem 'letter_opener_web', '~> 2.0'
+ gem 'letter_opener_web', '~> 3.0'
# Security analysis CLI tools
gem 'brakeman', '~> 6.0', require: false
diff --git a/Gemfile.lock b/Gemfile.lock
index 3f4b1088ada8fc..eade99acfdffb8 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -10,35 +10,35 @@ GIT
GEM
remote: https://rubygems.org/
specs:
- actioncable (7.1.3.2)
- actionpack (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ actioncable (7.1.3.3)
+ actionpack (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
- actionmailbox (7.1.3.2)
- actionpack (= 7.1.3.2)
- activejob (= 7.1.3.2)
- activerecord (= 7.1.3.2)
- activestorage (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ actionmailbox (7.1.3.3)
+ actionpack (= 7.1.3.3)
+ activejob (= 7.1.3.3)
+ activerecord (= 7.1.3.3)
+ activestorage (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
mail (>= 2.7.1)
net-imap
net-pop
net-smtp
- actionmailer (7.1.3.2)
- actionpack (= 7.1.3.2)
- actionview (= 7.1.3.2)
- activejob (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ actionmailer (7.1.3.3)
+ actionpack (= 7.1.3.3)
+ actionview (= 7.1.3.3)
+ activejob (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
rails-dom-testing (~> 2.2)
- actionpack (7.1.3.2)
- actionview (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ actionpack (7.1.3.3)
+ actionview (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
nokogiri (>= 1.8.5)
racc
rack (>= 2.2.4)
@@ -46,15 +46,15 @@ GEM
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
- actiontext (7.1.3.2)
- actionpack (= 7.1.3.2)
- activerecord (= 7.1.3.2)
- activestorage (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ actiontext (7.1.3.3)
+ actionpack (= 7.1.3.3)
+ activerecord (= 7.1.3.3)
+ activestorage (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (7.1.3.2)
- activesupport (= 7.1.3.2)
+ actionview (7.1.3.3)
+ activesupport (= 7.1.3.3)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
@@ -64,22 +64,22 @@ GEM
activemodel (>= 4.1)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
- activejob (7.1.3.2)
- activesupport (= 7.1.3.2)
+ activejob (7.1.3.3)
+ activesupport (= 7.1.3.3)
globalid (>= 0.3.6)
- activemodel (7.1.3.2)
- activesupport (= 7.1.3.2)
- activerecord (7.1.3.2)
- activemodel (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ activemodel (7.1.3.3)
+ activesupport (= 7.1.3.3)
+ activerecord (7.1.3.3)
+ activemodel (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
timeout (>= 0.4.0)
- activestorage (7.1.3.2)
- actionpack (= 7.1.3.2)
- activejob (= 7.1.3.2)
- activerecord (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ activestorage (7.1.3.3)
+ actionpack (= 7.1.3.3)
+ activejob (= 7.1.3.3)
+ activerecord (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
marcel (~> 1.0)
- activesupport (7.1.3.2)
+ activesupport (7.1.3.3)
base64
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2)
@@ -100,16 +100,16 @@ GEM
attr_required (1.0.2)
awrence (1.2.1)
aws-eventstream (1.3.0)
- aws-partitions (1.922.0)
- aws-sdk-core (3.194.1)
+ aws-partitions (1.929.0)
+ aws-sdk-core (3.196.1)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8)
jmespath (~> 1, >= 1.6.1)
- aws-sdk-kms (1.80.0)
+ aws-sdk-kms (1.81.0)
aws-sdk-core (~> 3, >= 3.193.0)
aws-sigv4 (~> 1.1)
- aws-sdk-s3 (1.149.1)
+ aws-sdk-s3 (1.151.0)
aws-sdk-core (~> 3, >= 3.194.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.8)
@@ -272,7 +272,7 @@ GEM
fog-json (1.2.0)
fog-core
multi_json (~> 1.10)
- fog-openstack (1.1.0)
+ fog-openstack (1.1.1)
fog-core (~> 2.1)
fog-json (>= 1.0)
formatador (1.1.0)
@@ -389,10 +389,10 @@ GEM
addressable (~> 2.8)
letter_opener (1.10.0)
launchy (>= 2.2, < 4)
- letter_opener_web (2.0.0)
- actionmailer (>= 5.2)
- letter_opener (~> 1.7)
- railties (>= 5.2)
+ letter_opener_web (3.0.0)
+ actionmailer (>= 6.1)
+ letter_opener (~> 1.9)
+ railties (>= 6.1)
rexml
link_header (0.0.8)
llhttp-ffi (0.5.0)
@@ -422,7 +422,7 @@ GEM
memory_profiler (1.0.1)
mime-types (3.5.2)
mime-types-data (~> 3.2015)
- mime-types-data (3.2024.0305)
+ mime-types-data (3.2024.0507)
mini_mime (1.1.5)
mini_portile2 (2.8.6)
minitest (5.22.3)
@@ -434,7 +434,7 @@ GEM
uri
net-http-persistent (4.0.2)
connection_pool (~> 2.2)
- net-imap (0.4.10)
+ net-imap (0.4.11)
date
net-protocol
net-ldap (0.19.0)
@@ -444,8 +444,8 @@ GEM
timeout
net-smtp (0.5.0)
net-protocol
- nio4r (2.7.1)
- nokogiri (1.16.4)
+ nio4r (2.7.3)
+ nokogiri (1.16.5)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
nsa (0.3.0)
@@ -543,7 +543,7 @@ GEM
opentelemetry-api (~> 1.0)
opentelemetry-common (~> 0.20.0)
opentelemetry-instrumentation-base (~> 0.22.1)
- opentelemetry-instrumentation-pg (0.27.2)
+ opentelemetry-instrumentation-pg (0.27.3)
opentelemetry-api (~> 1.0)
opentelemetry-helpers-sql-obfuscation
opentelemetry-instrumentation-base (~> 0.22.1)
@@ -634,20 +634,20 @@ GEM
rackup (1.0.0)
rack (< 3)
webrick
- rails (7.1.3.2)
- actioncable (= 7.1.3.2)
- actionmailbox (= 7.1.3.2)
- actionmailer (= 7.1.3.2)
- actionpack (= 7.1.3.2)
- actiontext (= 7.1.3.2)
- actionview (= 7.1.3.2)
- activejob (= 7.1.3.2)
- activemodel (= 7.1.3.2)
- activerecord (= 7.1.3.2)
- activestorage (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ rails (7.1.3.3)
+ actioncable (= 7.1.3.3)
+ actionmailbox (= 7.1.3.3)
+ actionmailer (= 7.1.3.3)
+ actionpack (= 7.1.3.3)
+ actiontext (= 7.1.3.3)
+ actionview (= 7.1.3.3)
+ activejob (= 7.1.3.3)
+ activemodel (= 7.1.3.3)
+ activerecord (= 7.1.3.3)
+ activestorage (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
bundler (>= 1.15.0)
- railties (= 7.1.3.2)
+ railties (= 7.1.3.3)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@@ -662,9 +662,9 @@ GEM
rails-i18n (7.0.9)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
- railties (7.1.3.2)
- actionpack (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ railties (7.1.3.3)
+ actionpack (= 7.1.3.3)
+ activesupport (= 7.1.3.3)
irb
rackup (>= 1.0.0)
rake (>= 12.2)
@@ -686,14 +686,15 @@ GEM
redlock (1.3.2)
redis (>= 3.0.0, < 6.0)
regexp_parser (2.9.0)
- reline (0.5.6)
+ reline (0.5.7)
io-console (~> 0.5)
request_store (1.6.0)
rack (>= 1.4)
responders (3.1.1)
actionpack (>= 5.2)
railties (>= 5.2)
- rexml (3.2.6)
+ rexml (3.2.8)
+ strscan (>= 3.0.9)
rotp (6.3.0)
rouge (4.2.1)
rpam2 (4.0.2)
@@ -708,7 +709,7 @@ GEM
rspec-support (~> 3.13.0)
rspec-github (2.4.0)
rspec-core (~> 3.0)
- rspec-mocks (3.13.0)
+ rspec-mocks (3.13.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-rails (6.1.2)
@@ -719,7 +720,7 @@ GEM
rspec-expectations (~> 3.13)
rspec-mocks (~> 3.13)
rspec-support (~> 3.13)
- rspec-sidekiq (4.2.0)
+ rspec-sidekiq (5.0.0)
rspec-core (~> 3.0)
rspec-expectations (~> 3.0)
rspec-mocks (~> 3.0)
@@ -774,7 +775,7 @@ GEM
scenic (1.8.0)
activerecord (>= 4.0.0)
railties (>= 4.0.0)
- selenium-webdriver (4.20.1)
+ selenium-webdriver (4.21.1)
base64 (~> 0.2)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
@@ -815,6 +816,7 @@ GEM
stringio (3.1.0)
strong_migrations (1.8.0)
activerecord (>= 5.2)
+ strscan (3.1.0)
swd (1.3.0)
activesupport (>= 3)
attr_required (>= 0.0.5)
@@ -893,7 +895,7 @@ GEM
xorcist (1.1.3)
xpath (3.2.0)
nokogiri (~> 1.8)
- zeitwerk (2.6.13)
+ zeitwerk (2.6.14)
PLATFORMS
ruby
@@ -955,7 +957,7 @@ DEPENDENCIES
kaminari (~> 1.2)
kt-paperclip (~> 7.2)
letter_opener (~> 1.8)
- letter_opener_web (~> 2.0)
+ letter_opener_web (~> 3.0)
link_header (~> 0.0)
lograge (~> 0.12)
mail (~> 2.8)
@@ -1012,7 +1014,7 @@ DEPENDENCIES
rqrcode (~> 2.2)
rspec-github (~> 2.4)
rspec-rails (~> 6.0)
- rspec-sidekiq (~> 4.0)
+ rspec-sidekiq (~> 5.0)
rubocop
rubocop-capybara
rubocop-performance
diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb
index af00038eae5245..685b02ae6d99b1 100644
--- a/app/controllers/accounts_controller.rb
+++ b/app/controllers/accounts_controller.rb
@@ -25,7 +25,7 @@ def show
limit = params[:limit].present? ? [params[:limit].to_i, PAGE_SIZE_MAX].min : PAGE_SIZE
@statuses = filtered_statuses.without_reblogs.limit(limit)
- @statuses = cache_collection(@statuses, Status)
+ @statuses = preload_collection(@statuses, Status)
end
format.json do
diff --git a/app/controllers/activitypub/collections_controller.rb b/app/controllers/activitypub/collections_controller.rb
index 57480db8d883d4..15985c7f65e65c 100644
--- a/app/controllers/activitypub/collections_controller.rb
+++ b/app/controllers/activitypub/collections_controller.rb
@@ -18,7 +18,7 @@ def show
def set_items
case params[:id]
when 'featured'
- @items = for_signed_account { cache_collection(@account.pinned_statuses.not_local_only, Status) }
+ @items = for_signed_account { preload_collection(@account.pinned_statuses.not_local_only, Status) }
@items = @items.map { |item| item.distributable? ? item : ActivityPub::TagManager.instance.uri_for(item) }
when 'tags'
@items = for_signed_account { @account.featured_tags }
diff --git a/app/controllers/activitypub/outboxes_controller.rb b/app/controllers/activitypub/outboxes_controller.rb
index 8079e011dd0084..b8baf64e1a59a8 100644
--- a/app/controllers/activitypub/outboxes_controller.rb
+++ b/app/controllers/activitypub/outboxes_controller.rb
@@ -60,7 +60,7 @@ def prev_page
def set_statuses
return unless page_requested?
- @statuses = cache_collection_paginated_by_id(
+ @statuses = preload_collection_paginated_by_id(
AccountStatusesFilter.new(@account, signed_request_account).results,
Status,
LIMIT,
diff --git a/app/controllers/api/v1/accounts/statuses_controller.rb b/app/controllers/api/v1/accounts/statuses_controller.rb
index 35ea9c8ec12d5d..c42f27776ca807 100644
--- a/app/controllers/api/v1/accounts/statuses_controller.rb
+++ b/app/controllers/api/v1/accounts/statuses_controller.rb
@@ -19,11 +19,11 @@ def set_account
end
def load_statuses
- @account.unavailable? ? [] : cached_account_statuses
+ @account.unavailable? ? [] : preloaded_account_statuses
end
- def cached_account_statuses
- cache_collection_paginated_by_id(
+ def preloaded_account_statuses
+ preload_collection_paginated_by_id(
AccountStatusesFilter.new(@account, current_account, params).results,
Status,
limit_param(DEFAULT_STATUSES_LIMIT),
diff --git a/app/controllers/api/v1/bookmarks_controller.rb b/app/controllers/api/v1/bookmarks_controller.rb
index b6bb987b6bccc6..f7671a9032c066 100644
--- a/app/controllers/api/v1/bookmarks_controller.rb
+++ b/app/controllers/api/v1/bookmarks_controller.rb
@@ -13,11 +13,11 @@ def index
private
def load_statuses
- cached_bookmarks
+ preloaded_bookmarks
end
- def cached_bookmarks
- cache_collection(results.map(&:status), Status)
+ def preloaded_bookmarks
+ preload_collection(results.map(&:status), Status)
end
def results
diff --git a/app/controllers/api/v1/favourites_controller.rb b/app/controllers/api/v1/favourites_controller.rb
index 73da538f5c80ad..18ca9ab8661a0c 100644
--- a/app/controllers/api/v1/favourites_controller.rb
+++ b/app/controllers/api/v1/favourites_controller.rb
@@ -13,11 +13,11 @@ def index
private
def load_statuses
- cached_favourites
+ preloaded_favourites
end
- def cached_favourites
- cache_collection(results.map(&:status), Status)
+ def preloaded_favourites
+ preload_collection(results.map(&:status), Status)
end
def results
diff --git a/app/controllers/api/v1/notifications/requests_controller.rb b/app/controllers/api/v1/notifications/requests_controller.rb
index 6a26cc0e8abf07..0e58379a382e85 100644
--- a/app/controllers/api/v1/notifications/requests_controller.rb
+++ b/app/controllers/api/v1/notifications/requests_controller.rb
@@ -41,7 +41,7 @@ def load_requests
)
NotificationRequest.preload_cache_collection(requests) do |statuses|
- cache_collection(statuses, Status)
+ preload_collection(statuses, Status)
end
end
diff --git a/app/controllers/api/v1/notifications_controller.rb b/app/controllers/api/v1/notifications_controller.rb
index 9c75516159492c..c82900ef661812 100644
--- a/app/controllers/api/v1/notifications_controller.rb
+++ b/app/controllers/api/v1/notifications_controller.rb
@@ -50,7 +50,7 @@ def load_notifications
)
Notification.preload_cache_collection_target_statuses(notifications) do |target_statuses|
- cache_collection(target_statuses, Status)
+ preload_collection(target_statuses, Status)
end
end
diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb
index 6444f87a01754d..3f138d28bae4ba 100644
--- a/app/controllers/api/v1/statuses_controller.rb
+++ b/app/controllers/api/v1/statuses_controller.rb
@@ -26,13 +26,13 @@ class Api::V1::StatusesController < Api::BaseController
DESCENDANTS_DEPTH_LIMIT = 20
def index
- @statuses = cache_collection(@statuses, Status)
+ @statuses = preload_collection(@statuses, Status)
render json: @statuses, each_serializer: REST::StatusSerializer
end
def show
cache_if_unauthenticated!
- @status = cache_collection([@status], Status).first
+ @status = preload_collection([@status], Status).first
render json: @status, serializer: REST::StatusSerializer
end
@@ -51,8 +51,8 @@ def context
ancestors_results = @status.in_reply_to_id.nil? ? [] : @status.ancestors(ancestors_limit, current_account)
descendants_results = @status.descendants(descendants_limit, current_account, descendants_depth_limit)
- loaded_ancestors = cache_collection(ancestors_results, Status)
- loaded_descendants = cache_collection(descendants_results, Status)
+ loaded_ancestors = preload_collection(ancestors_results, Status)
+ loaded_descendants = preload_collection(descendants_results, Status)
@context = Context.new(ancestors: loaded_ancestors, descendants: loaded_descendants)
statuses = [@status] + @context.ancestors + @context.descendants
diff --git a/app/controllers/api/v1/timelines/direct_controller.rb b/app/controllers/api/v1/timelines/direct_controller.rb
index 6e98e9cacb9be0..f295cee6085e4d 100644
--- a/app/controllers/api/v1/timelines/direct_controller.rb
+++ b/app/controllers/api/v1/timelines/direct_controller.rb
@@ -15,11 +15,11 @@ def show
private
def load_statuses
- cached_direct_statuses
+ preloaded_direct_statuses
end
- def cached_direct_statuses
- cache_collection direct_statuses, Status
+ def preloaded_direct_statuses
+ preload_collection direct_statuses, Status
end
def direct_statuses
diff --git a/app/controllers/api/v1/timelines/home_controller.rb b/app/controllers/api/v1/timelines/home_controller.rb
index 36fdbea6471200..d5d18286665268 100644
--- a/app/controllers/api/v1/timelines/home_controller.rb
+++ b/app/controllers/api/v1/timelines/home_controller.rb
@@ -21,11 +21,11 @@ def show
private
def load_statuses
- cached_home_statuses
+ preloaded_home_statuses
end
- def cached_home_statuses
- cache_collection home_statuses, Status
+ def preloaded_home_statuses
+ preload_collection home_statuses, Status
end
def home_statuses
diff --git a/app/controllers/api/v1/timelines/list_controller.rb b/app/controllers/api/v1/timelines/list_controller.rb
index 14b884ecd95bf1..d8cdbdb74cf194 100644
--- a/app/controllers/api/v1/timelines/list_controller.rb
+++ b/app/controllers/api/v1/timelines/list_controller.rb
@@ -21,11 +21,11 @@ def set_list
end
def set_statuses
- @statuses = cached_list_statuses
+ @statuses = preloaded_list_statuses
end
- def cached_list_statuses
- cache_collection list_statuses, Status
+ def preloaded_list_statuses
+ preload_collection list_statuses, Status
end
def list_statuses
diff --git a/app/controllers/api/v1/timelines/public_controller.rb b/app/controllers/api/v1/timelines/public_controller.rb
index 5bc8de83341d27..5a6b4d0e98226a 100644
--- a/app/controllers/api/v1/timelines/public_controller.rb
+++ b/app/controllers/api/v1/timelines/public_controller.rb
@@ -18,11 +18,11 @@ def require_auth?
end
def load_statuses
- cached_public_statuses_page
+ preloaded_public_statuses_page
end
- def cached_public_statuses_page
- cache_collection(public_statuses, Status)
+ def preloaded_public_statuses_page
+ preload_collection(public_statuses, Status)
end
def public_statuses
diff --git a/app/controllers/api/v1/timelines/tag_controller.rb b/app/controllers/api/v1/timelines/tag_controller.rb
index 4ba439dbb202ce..3bf8f374e196f3 100644
--- a/app/controllers/api/v1/timelines/tag_controller.rb
+++ b/app/controllers/api/v1/timelines/tag_controller.rb
@@ -23,11 +23,11 @@ def load_tag
end
def load_statuses
- cached_tagged_statuses
+ preloaded_tagged_statuses
end
- def cached_tagged_statuses
- @tag.nil? ? [] : cache_collection(tag_timeline_statuses, Status)
+ def preloaded_tagged_statuses
+ @tag.nil? ? [] : preload_collection(tag_timeline_statuses, Status)
end
def tag_timeline_statuses
diff --git a/app/controllers/api/v1/trends/statuses_controller.rb b/app/controllers/api/v1/trends/statuses_controller.rb
index 48bfe119918b20..c6fbbce16778f8 100644
--- a/app/controllers/api/v1/trends/statuses_controller.rb
+++ b/app/controllers/api/v1/trends/statuses_controller.rb
@@ -20,7 +20,7 @@ def enabled?
def set_statuses
@statuses = if enabled?
- cache_collection(statuses_from_trends.offset(offset_param).limit(limit_param(DEFAULT_STATUSES_LIMIT)), Status)
+ preload_collection(statuses_from_trends.offset(offset_param).limit(limit_param(DEFAULT_STATUSES_LIMIT)), Status)
else
[]
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index bd152dbb66d5ff..1d700fa282e458 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -9,6 +9,7 @@ class ApplicationController < ActionController::Base
include UserTrackingConcern
include SessionTrackingConcern
include CacheConcern
+ include PreloadingConcern
include DomainControlHelper
include ThemingConcern
include DatabaseHelper
diff --git a/app/controllers/concerns/cache_concern.rb b/app/controllers/concerns/cache_concern.rb
index 4656539f85ee23..1823b5b8edacf9 100644
--- a/app/controllers/concerns/cache_concern.rb
+++ b/app/controllers/concerns/cache_concern.rb
@@ -45,20 +45,4 @@ def render_with_cache(**options)
Rails.cache.write(key, response.body, expires_in: expires_in, raw: true)
end
end
-
- # TODO: Rename this method, as it does not perform any caching anymore.
- def cache_collection(raw, klass)
- return raw unless klass.respond_to?(:preload_cacheable_associations)
-
- records = raw.to_a
-
- klass.preload_cacheable_associations(records)
-
- records
- end
-
- # TODO: Rename this method, as it does not perform any caching anymore.
- def cache_collection_paginated_by_id(raw, klass, limit, options)
- cache_collection raw.to_a_paginated_by_id(limit, options), klass
- end
end
diff --git a/app/controllers/concerns/preloading_concern.rb b/app/controllers/concerns/preloading_concern.rb
new file mode 100644
index 00000000000000..61e22136498048
--- /dev/null
+++ b/app/controllers/concerns/preloading_concern.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+module PreloadingConcern
+ extend ActiveSupport::Concern
+
+ def preload_collection(scope, klass)
+ return scope unless klass.respond_to?(:preload_cacheable_associations)
+
+ scope.to_a.tap do |records|
+ klass.preload_cacheable_associations(records)
+ end
+ end
+
+ def preload_collection_paginated_by_id(scope, klass, limit, options)
+ preload_collection scope.to_a_paginated_by_id(limit, options), klass
+ end
+end
diff --git a/app/controllers/settings/applications_controller.rb b/app/controllers/settings/applications_controller.rb
index d4b72056817372..6849979b115233 100644
--- a/app/controllers/settings/applications_controller.rb
+++ b/app/controllers/settings/applications_controller.rb
@@ -13,7 +13,7 @@ def show; end
def new
@application = Doorkeeper::Application.new(
redirect_uri: Doorkeeper.configuration.native_redirect_uri,
- scopes: 'read write follow'
+ scopes: 'read:me'
)
end
diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb
index b0bdbde95662b8..d6c0d872c8bfcd 100644
--- a/app/controllers/tags_controller.rb
+++ b/app/controllers/tags_controller.rb
@@ -45,7 +45,7 @@ def set_local
end
def set_statuses
- @statuses = cache_collection(TagFeed.new(@tag, nil, local: @local).get(limit_param), Status)
+ @statuses = preload_collection(TagFeed.new(@tag, nil, local: @local).get(limit_param), Status)
end
def limit_param
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index c52bbb846e0f22..b9802f23327515 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -241,11 +241,20 @@ def prerender_custom_emojis(html, custom_emojis, other_options = {})
EmojiFormatter.new(html, custom_emojis, other_options.merge(animate: prefers_autoplay?)).to_s
end
- def site_icon_path(type, size = '48')
- icon = SiteUpload.find_by(var: type)
- return nil unless icon
+ def mascot_url
+ full_asset_url(instance_presenter.mascot&.file&.url || frontend_asset_path('images/elephant_ui_plane.svg'))
+ end
+
+ def instance_presenter
+ @instance_presenter ||= InstancePresenter.new
+ end
+
+ def favicon_path(size = '48')
+ instance_presenter.favicon&.file&.url(size)
+ end
- icon.file.url(size)
+ def app_icon_path(size = '48')
+ instance_presenter.app_icon&.file&.url(size)
end
# glitch-soc addition to handle the multiple flavors
diff --git a/app/helpers/mascot_helper.rb b/app/helpers/mascot_helper.rb
deleted file mode 100644
index 34b656411ebce3..00000000000000
--- a/app/helpers/mascot_helper.rb
+++ /dev/null
@@ -1,11 +0,0 @@
-# frozen_string_literal: true
-
-module MascotHelper
- def mascot_url
- full_asset_url(instance_presenter.mascot&.file&.url || frontend_asset_path('images/elephant_ui_plane.svg'))
- end
-
- def instance_presenter
- @instance_presenter ||= InstancePresenter.new
- end
-end
diff --git a/app/javascript/flavours/glitch/actions/settings.js b/app/javascript/flavours/glitch/actions/settings.js
index 3685b0684e0b83..fbd89f9d4b0b52 100644
--- a/app/javascript/flavours/glitch/actions/settings.js
+++ b/app/javascript/flavours/glitch/actions/settings.js
@@ -20,7 +20,7 @@ export function changeSetting(path, value) {
}
const debouncedSave = debounce((dispatch, getState) => {
- if (getState().getIn(['settings', 'saved'])) {
+ if (getState().getIn(['settings', 'saved']) || !getState().getIn(['meta', 'me'])) {
return;
}
diff --git a/app/javascript/flavours/glitch/components/account.jsx b/app/javascript/flavours/glitch/components/account.jsx
index 326d4fcb696c58..038009cfa86e5a 100644
--- a/app/javascript/flavours/glitch/components/account.jsx
+++ b/app/javascript/flavours/glitch/components/account.jsx
@@ -174,7 +174,6 @@ Account.propTypes = {
onBlock: PropTypes.func,
onMute: PropTypes.func,
onMuteNotifications: PropTypes.func,
- intl: PropTypes.object.isRequired,
hidden: PropTypes.bool,
minimal: PropTypes.bool,
defaultAction: PropTypes.string,
diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss
index f5518907ce18cd..9f102b847efbb7 100644
--- a/app/javascript/flavours/glitch/styles/components.scss
+++ b/app/javascript/flavours/glitch/styles/components.scss
@@ -4608,6 +4608,10 @@ a.status-card {
&:hover {
color: $primary-text-color;
}
+
+ .icon {
+ transform: rotate(60deg);
+ }
}
&:disabled {
@@ -4655,6 +4659,10 @@ a.status-card {
padding: 0;
}
+.no-reduce-motion .column-header__button .icon {
+ transition: transform 150ms ease-in-out;
+}
+
.column-header__collapsible {
max-height: 70vh;
overflow: hidden;
diff --git a/app/javascript/mastodon/actions/settings.js b/app/javascript/mastodon/actions/settings.js
index 3685b0684e0b83..fbd89f9d4b0b52 100644
--- a/app/javascript/mastodon/actions/settings.js
+++ b/app/javascript/mastodon/actions/settings.js
@@ -20,7 +20,7 @@ export function changeSetting(path, value) {
}
const debouncedSave = debounce((dispatch, getState) => {
- if (getState().getIn(['settings', 'saved'])) {
+ if (getState().getIn(['settings', 'saved']) || !getState().getIn(['meta', 'me'])) {
return;
}
diff --git a/app/javascript/mastodon/components/account.jsx b/app/javascript/mastodon/components/account.jsx
index 3282696d341b17..18a31cba244867 100644
--- a/app/javascript/mastodon/components/account.jsx
+++ b/app/javascript/mastodon/components/account.jsx
@@ -172,7 +172,6 @@ Account.propTypes = {
onBlock: PropTypes.func,
onMute: PropTypes.func,
onMuteNotifications: PropTypes.func,
- intl: PropTypes.object.isRequired,
hidden: PropTypes.bool,
minimal: PropTypes.bool,
defaultAction: PropTypes.string,
diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json
index fd8fc74be88788..2c597699591674 100644
--- a/app/javascript/mastodon/locales/cy.json
+++ b/app/javascript/mastodon/locales/cy.json
@@ -474,7 +474,7 @@
"notification.follow_request": "Mae {name} wedi gwneud cais i'ch dilyn",
"notification.mention": "Crybwyllodd {name} amdanoch chi",
"notification.moderation-warning.learn_more": "Dysgu mwy",
- "notification.moderation_warning": "Rydych wedi derbyn rhybudd cymedroli",
+ "notification.moderation_warning": "Rydych wedi derbyn rhybudd gan gymedrolwr",
"notification.moderation_warning.action_delete_statuses": "Mae rhai o'ch postiadau wedi'u dileu.",
"notification.moderation_warning.action_disable": "Mae eich cyfrif wedi'i analluogi.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Mae rhai o'ch postiadau wedi'u marcio'n sensitif.",
diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json
index 6c24d5a2615c7e..e70348e0b2beff 100644
--- a/app/javascript/mastodon/locales/en-GB.json
+++ b/app/javascript/mastodon/locales/en-GB.json
@@ -308,6 +308,8 @@
"follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
"follow_suggestions.curated_suggestion": "Staff pick",
"follow_suggestions.dismiss": "Don't show again",
+ "follow_suggestions.featured_longer": "Hand-picked by the {domain} team",
+ "follow_suggestions.friends_of_friends_longer": "Popular among people you follow",
"follow_suggestions.hints.featured": "This profile has been hand-picked by the {domain} team.",
"follow_suggestions.hints.friends_of_friends": "This profile is popular among the people you follow.",
"follow_suggestions.hints.most_followed": "This profile is one of the most followed on {domain}.",
@@ -315,6 +317,8 @@
"follow_suggestions.hints.similar_to_recently_followed": "This profile is similar to the profiles you have most recently followed.",
"follow_suggestions.personalized_suggestion": "Personalised suggestion",
"follow_suggestions.popular_suggestion": "Popular suggestion",
+ "follow_suggestions.popular_suggestion_longer": "Popular on {domain}",
+ "follow_suggestions.similar_to_recently_followed_longer": "Similar to profiles you recently followed",
"follow_suggestions.view_all": "View all",
"follow_suggestions.who_to_follow": "Who to follow",
"followed_tags": "Followed hashtags",
@@ -469,6 +473,15 @@
"notification.follow": "{name} followed you",
"notification.follow_request": "{name} has requested to follow you",
"notification.mention": "{name} mentioned you",
+ "notification.moderation-warning.learn_more": "Learn more",
+ "notification.moderation_warning": "You have received a moderation warning",
+ "notification.moderation_warning.action_delete_statuses": "Some of your posts have been removed.",
+ "notification.moderation_warning.action_disable": "Your account has been disabled.",
+ "notification.moderation_warning.action_mark_statuses_as_sensitive": "Some of your posts have been marked as sensitive.",
+ "notification.moderation_warning.action_none": "Your account has received a moderation warning.",
+ "notification.moderation_warning.action_sensitive": "Your posts will be marked as sensitive from now on.",
+ "notification.moderation_warning.action_silence": "Your account has been limited.",
+ "notification.moderation_warning.action_suspend": "Your account has been suspended.",
"notification.own_poll": "Your poll has ended",
"notification.poll": "A poll you have voted in has ended",
"notification.reblog": "{name} boosted your status",
diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json
index b529f48ebe17dc..1a99d1d4b45e0a 100644
--- a/app/javascript/mastodon/locales/es-MX.json
+++ b/app/javascript/mastodon/locales/es-MX.json
@@ -476,12 +476,12 @@
"notification.moderation-warning.learn_more": "Saber más",
"notification.moderation_warning": "Has recibido una advertencia de moderación",
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
- "notification.moderation_warning.action_disable": "Se ha desactivado su cuenta.",
+ "notification.moderation_warning.action_disable": "Tu cuenta ha sido desactivada.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Se han marcado como sensibles algunas de tus publicaciones.",
"notification.moderation_warning.action_none": "Tu cuenta ha recibido un aviso de moderación.",
"notification.moderation_warning.action_sensitive": "De ahora en adelante, todas tus publicaciones se marcarán como sensibles.",
- "notification.moderation_warning.action_silence": "Se ha limitado tu cuenta.",
- "notification.moderation_warning.action_suspend": "Se ha suspendido tu cuenta.",
+ "notification.moderation_warning.action_silence": "Tu cuenta ha sido limitada.",
+ "notification.moderation_warning.action_suspend": "Tu cuenta ha sido suspendida.",
"notification.own_poll": "Tu encuesta ha terminado",
"notification.poll": "Una encuesta en la que has votado ha terminado",
"notification.reblog": "{name} ha retooteado tu estado",
diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json
index ed01a333750151..1782a3a1fee792 100644
--- a/app/javascript/mastodon/locales/es.json
+++ b/app/javascript/mastodon/locales/es.json
@@ -476,12 +476,12 @@
"notification.moderation-warning.learn_more": "Saber más",
"notification.moderation_warning": "Has recibido una advertencia de moderación",
"notification.moderation_warning.action_delete_statuses": "Se han eliminado algunas de tus publicaciones.",
- "notification.moderation_warning.action_disable": "Se ha desactivado su cuenta.",
+ "notification.moderation_warning.action_disable": "Tu cuenta ha sido desactivada.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Se han marcado como sensibles algunas de tus publicaciones.",
"notification.moderation_warning.action_none": "Tu cuenta ha recibido un aviso de moderación.",
"notification.moderation_warning.action_sensitive": "De ahora en adelante, todas tus publicaciones se marcarán como sensibles.",
- "notification.moderation_warning.action_silence": "Se ha limitado tu cuenta.",
- "notification.moderation_warning.action_suspend": "Se ha suspendido tu cuenta.",
+ "notification.moderation_warning.action_silence": "Tu cuenta ha sido limitada.",
+ "notification.moderation_warning.action_suspend": "Tu cuenta ha sido suspendida.",
"notification.own_poll": "Tu encuesta ha terminado",
"notification.poll": "Una encuesta en la que has votado ha terminado",
"notification.reblog": "{name} ha impulsado tu publicación",
diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json
index 77257413fdf54e..f22a829c0cf5d9 100644
--- a/app/javascript/mastodon/locales/fo.json
+++ b/app/javascript/mastodon/locales/fo.json
@@ -474,11 +474,11 @@
"notification.follow_request": "{name} biður um at fylgja tær",
"notification.mention": "{name} nevndi teg",
"notification.moderation-warning.learn_more": "Lær meira",
- "notification.moderation_warning": "Tú hevur móttikið eina umsjónarávarðing",
+ "notification.moderation_warning": "Tú hevur móttikið eina umsjónarávaring",
"notification.moderation_warning.action_delete_statuses": "Onkrir av tínum postum eru strikaðir.",
"notification.moderation_warning.action_disable": "Konta tín er gjørd óvirkin.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Nakrir av postum tínum eru merktir sum viðkvæmir.",
- "notification.moderation_warning.action_none": "Konta tín hevur móttikið eina umsjónarávarðing.",
+ "notification.moderation_warning.action_none": "Konta tín hevur móttikið eina umsjónarávaring.",
"notification.moderation_warning.action_sensitive": "Postar tínir verða merktir sum viðkvæmir frá nú av.",
"notification.moderation_warning.action_silence": "Konta tín er avmarkað.",
"notification.moderation_warning.action_suspend": "Konta tín er ógildað.",
diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json
index 88d4f5f60e059a..98cc3139485ac0 100644
--- a/app/javascript/mastodon/locales/gl.json
+++ b/app/javascript/mastodon/locales/gl.json
@@ -92,7 +92,7 @@
"block_modal.remote_users_caveat": "Ímoslle pedir ao servidor {domain} que respecte a túa decisión. Emporiso, non hai garantía de que atenda a petición xa que os servidores xestionan os bloqueos de formas diferentes. As publicacións públicas poderían aínda ser visibles para usuarias que non iniciaron sesión.",
"block_modal.show_less": "Mostrar menos",
"block_modal.show_more": "Mostrar máis",
- "block_modal.they_cant_mention": "Non te pode seguir nin mencionar.",
+ "block_modal.they_cant_mention": "Non te poden seguir nin mencionar.",
"block_modal.they_cant_see_posts": "Non pode ver as túas publicacións nin ti as de ela.",
"block_modal.they_will_know": "Pode ver que a bloqueaches.",
"block_modal.title": "Bloquear usuaria?",
diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json
index d30038d9ccef6a..313563bdfe3294 100644
--- a/app/javascript/mastodon/locales/ia.json
+++ b/app/javascript/mastodon/locales/ia.json
@@ -474,7 +474,7 @@
"notification.follow_request": "{name} ha requestate de sequer te",
"notification.mention": "{name} te ha mentionate",
"notification.moderation-warning.learn_more": "Apprender plus",
- "notification.moderation_warning": "Tu ha recipite un advertimento de moderation",
+ "notification.moderation_warning": "Tu ha recepite un aviso de moderation",
"notification.moderation_warning.action_delete_statuses": "Alcunes de tu messages ha essite removite.",
"notification.moderation_warning.action_disable": "Tu conto ha essite disactivate.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Alcunes de tu messages ha essite marcate como sensibile.",
diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json
index 7bd91ca0f9032e..1921509478c105 100644
--- a/app/javascript/mastodon/locales/ie.json
+++ b/app/javascript/mastodon/locales/ie.json
@@ -89,6 +89,7 @@
"announcement.announcement": "Proclamation",
"attachments_list.unprocessed": "(íntractat)",
"audio.hide": "Celar audio",
+ "block_modal.remote_users_caveat": "Noi va petir que li servitor {domain} mey respecter tui decision. Támen, obedientie ne es garantit pro que chascun servitor gere bloccas diferentmen. Possibilmen public postas va restar visibil a usatores de inloggat.",
"block_modal.show_less": "Monstrar minu",
"block_modal.show_more": "Monstrar plu",
"block_modal.they_cant_mention": "Ne posse mentionar ni sequer te.",
@@ -224,7 +225,10 @@
"domain_pill.their_username": "Su unic identificator sur su servitor. It es possibil que altri servitores va haver usatores con li sam nómine.",
"domain_pill.username": "Usator-nómine",
"domain_pill.whats_in_a_handle": "Ex quo consiste un identificator?",
+ "domain_pill.who_they_are": "Pro que identificatores informa qui e u un person is, tu posse interacter con persones tra li rete social de .",
+ "domain_pill.who_you_are": "Pro que tui identificator informa qui e u tu es, persones posse interacter con te tra li rete social de .",
"domain_pill.your_handle": "Tui identificator:",
+ "domain_pill.your_server": "Tui digital hem, u trova se omni tui postas. Si it ne plese te, tu posse transferer ad un altri servitor quandecunc e tui sequitores con te.",
"domain_pill.your_username": "Tui unic identificator sur ti-ci servitor. It es possibil que altri servitores va haver usatores con li sam nómine.",
"embed.instructions": "Inbedar ti-ci posta per copiar li code in infra.",
"embed.preview": "Vi qualmen it va aspecter:",
diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json
index 6e590678fb3cb3..eea06fff590708 100644
--- a/app/javascript/mastodon/locales/ja.json
+++ b/app/javascript/mastodon/locales/ja.json
@@ -474,7 +474,7 @@
"notification.follow_request": "{name}さんがあなたにフォローリクエストしました",
"notification.mention": "{name}さんがあなたに返信しました",
"notification.moderation-warning.learn_more": "さらに詳しく",
- "notification.moderation_warning": "あなたは管理者からの警告を受けています。",
+ "notification.moderation_warning": "管理者から警告が来ています",
"notification.moderation_warning.action_delete_statuses": "あなたによるいくつかの投稿が削除されました。",
"notification.moderation_warning.action_disable": "あなたのアカウントは無効になりました。",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "あなたの投稿のいくつかは閲覧注意として判定されています。",
diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json
index 798b24569f135a..0f42e97fcff7fc 100644
--- a/app/javascript/mastodon/locales/lt.json
+++ b/app/javascript/mastodon/locales/lt.json
@@ -256,7 +256,7 @@
"empty_column.community": "Vietinė laiko skalė yra tuščia. Parašyk ką nors viešai, kad pradėtum sąveikauti.",
"empty_column.direct": "Dar neturi jokių privačių paminėjimų. Kai išsiųsi arba gausi vieną iš jų, jis bus rodomas čia.",
"empty_column.domain_blocks": "Dar nėra užblokuotų domenų.",
- "empty_column.explore_statuses": "Šiuo metu niekas nėra tendencinga. Patikrink vėliau.",
+ "empty_column.explore_statuses": "Šiuo metu niekas nėra tendencinga. Patikrink vėliau!",
"empty_column.favourited_statuses": "Dar neturi mėgstamų įrašų. Kai vieną iš jų pamėgsi, jis bus rodomas čia.",
"empty_column.favourites": "Šio įrašo dar niekas nepamėgo. Kai kas nors tai padarys, jie bus rodomi čia.",
"empty_column.follow_requests": "Dar neturi jokių sekimo prašymų. Kai gausi tokį prašymą, jis bus rodomas čia.",
@@ -466,7 +466,6 @@
"notification.follow_request": "{name} paprašė tave sekti",
"notification.mention": "{name} paminėjo tave",
"notification.moderation-warning.learn_more": "Sužinoti daugiau",
- "notification.moderation_warning": "Gavai prižiūrėjimo įspėjimą",
"notification.moderation_warning.action_delete_statuses": "Kai kurie tavo įrašai buvo pašalintos.",
"notification.moderation_warning.action_disable": "Tavo paskyra buvo išjungta.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Kai kurie tavo įrašai buvo pažymėtos kaip jautrios.",
@@ -536,7 +535,7 @@
"onboarding.follows.lead": "Tavo pagrindinis srautas – pagrindinis būdas patirti Mastodon. Kuo daugiau žmonių seksi, tuo jis bus aktyvesnis ir įdomesnis. Norint pradėti, pateikiame keletą pasiūlymų:",
"onboarding.follows.title": "Suasmenink savo pagrindinį srautą",
"onboarding.profile.discoverable": "Padaryti mano profilį atrandamą",
- "onboarding.profile.discoverable_hint": "Kai pasirenki Mastodon atrandamumą, tavo įrašai gali būti rodomi paieškos rezultatuose ir tendencijose, o profilis gali būti siūlomas panašių pomėgių turintiems žmonėms.",
+ "onboarding.profile.discoverable_hint": "Kai sutinki su Mastodon atrandamumu, tavo įrašai gali būti rodomi paieškos rezultatuose ir tendencijose, o profilis gali būti siūlomas panašių pomėgių turintiems žmonėms.",
"onboarding.profile.display_name": "Rodomas vardas",
"onboarding.profile.display_name_hint": "Tavo pilnas vardas arba linksmas vardas…",
"onboarding.profile.lead": "Gali visada tai užbaigti vėliau nustatymuose, kur yra dar daugiau pritaikymo parinkčių.",
diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json
index b11daeaaa7e7b5..1a6de083593bc2 100644
--- a/app/javascript/mastodon/locales/pt-BR.json
+++ b/app/javascript/mastodon/locales/pt-BR.json
@@ -474,7 +474,6 @@
"notification.follow_request": "{name} quer te seguir",
"notification.mention": "{name} te mencionou",
"notification.moderation-warning.learn_more": "Aprender mais",
- "notification.moderation_warning": "Você recebeu um aviso de moderação",
"notification.moderation_warning.action_delete_statuses": "Algumas das suas publicações foram removidas.",
"notification.moderation_warning.action_disable": "Sua conta foi desativada.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Algumas de suas publicações foram marcadas por ter conteúdo sensível.",
diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json
index 2863442415cf1d..c583b58220ead8 100644
--- a/app/javascript/mastodon/locales/sk.json
+++ b/app/javascript/mastodon/locales/sk.json
@@ -295,6 +295,7 @@
"follow_suggestions.personalized_suggestion": "Prispôsobený návrh",
"follow_suggestions.popular_suggestion": "Obľúbený návrh",
"follow_suggestions.popular_suggestion_longer": "Populárne na {domain}",
+ "follow_suggestions.similar_to_recently_followed_longer": "Podobné profilom, ktoré si nedávno nasledoval/a",
"follow_suggestions.view_all": "Zobraziť všetky",
"follow_suggestions.who_to_follow": "Koho sledovať",
"followed_tags": "Sledované hashtagy",
@@ -445,10 +446,14 @@
"notification.follow_request": "{name} vás žiada sledovať",
"notification.mention": "{name} vás spomína",
"notification.moderation-warning.learn_more": "Zisti viac",
+ "notification.moderation_warning.action_disable": "Tvoj účet bol vypnutý.",
+ "notification.moderation_warning.action_silence": "Tvoj účet bol obmedzený.",
+ "notification.moderation_warning.action_suspend": "Tvoj účet bol pozastavený.",
"notification.own_poll": "Vaša anketa sa skončila",
"notification.poll": "Anketa, v ktorej ste hlasovali, sa skončila",
"notification.reblog": "{name} zdieľa váš príspevok",
"notification.relationships_severance_event": "Stratené prepojenia s {name}",
+ "notification.relationships_severance_event.account_suspension": "Správca z {from} pozastavil/a {target}, čo znamená, že od nich viac nemôžeš dostávať aktualizácie, alebo s nimi interaktovať.",
"notification.relationships_severance_event.learn_more": "Zisti viac",
"notification.status": "{name} uverejňuje niečo nové",
"notification.update": "{name} upravuje príspevok",
diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json
index 7806abc6b55fbb..459d05ce3ecfe8 100644
--- a/app/javascript/mastodon/locales/sl.json
+++ b/app/javascript/mastodon/locales/sl.json
@@ -474,7 +474,6 @@
"notification.follow_request": "{name} vam želi slediti",
"notification.mention": "{name} vas je omenil/a",
"notification.moderation-warning.learn_more": "Več o tem",
- "notification.moderation_warning": "Prejeli ste opozorilo moderatorjev",
"notification.moderation_warning.action_delete_statuses": "Nekatere vaše objave so odstranjene.",
"notification.moderation_warning.action_disable": "Vaš račun je bil onemogočen.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Nekatere vaše objave so bile označene kot občutljive.",
diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json
index a25eab9cbfe66e..b496f8e20385a5 100644
--- a/app/javascript/mastodon/locales/sq.json
+++ b/app/javascript/mastodon/locales/sq.json
@@ -474,7 +474,7 @@
"notification.follow_request": "{name} ka kërkuar t’ju ndjekë",
"notification.mention": "{name} ju ka përmendur",
"notification.moderation-warning.learn_more": "Mësoni më tepër",
- "notification.moderation_warning": "Keni marrë një sinjalizim moderimi",
+ "notification.moderation_warning": "Ju është dhënë një sinjalizim moderimi",
"notification.moderation_warning.action_delete_statuses": "Disa nga postimet tuaja janë hequr.",
"notification.moderation_warning.action_disable": "Llogaria juaj është çaktivizuar.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Disa prej postimeve tuaja u është vënë shenjë si me spec.",
diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json
index 5ac4b4648ff410..ba3a6b2f51ebda 100644
--- a/app/javascript/mastodon/locales/sv.json
+++ b/app/javascript/mastodon/locales/sv.json
@@ -474,7 +474,7 @@
"notification.follow_request": "{name} har begärt att följa dig",
"notification.mention": "{name} nämnde dig",
"notification.moderation-warning.learn_more": "Läs mer",
- "notification.moderation_warning": "Du har mottagit en modereringsvarning",
+ "notification.moderation_warning": "Du har fått en moderationsvarning",
"notification.moderation_warning.action_delete_statuses": "Några av dina inlägg har tagits bort.",
"notification.moderation_warning.action_disable": "Ditt konto har inaktiverats.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Några av dina inlägg har markerats som känsliga.",
diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json
index c46080cfb226a1..6c011065932473 100644
--- a/app/javascript/mastodon/locales/tr.json
+++ b/app/javascript/mastodon/locales/tr.json
@@ -474,7 +474,7 @@
"notification.follow_request": "{name} size takip isteği gönderdi",
"notification.mention": "{name} senden bahsetti",
"notification.moderation-warning.learn_more": "Daha fazlası",
- "notification.moderation_warning": "Bir denetim uyarısı aldınız",
+ "notification.moderation_warning": "Hesabınız bir denetim uyarısı aldı",
"notification.moderation_warning.action_delete_statuses": "Bazı gönderileriniz kaldırıldı.",
"notification.moderation_warning.action_disable": "Hesabınız devre dışı bırakıldı.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Bazı gönderileriniz hassas olarak işaretlendi.",
diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json
index b188488f0b135b..102f1c3b4b329a 100644
--- a/app/javascript/mastodon/locales/vi.json
+++ b/app/javascript/mastodon/locales/vi.json
@@ -474,7 +474,7 @@
"notification.follow_request": "{name} yêu cầu theo dõi bạn",
"notification.mention": "{name} nhắc đến bạn",
"notification.moderation-warning.learn_more": "Tìm hiểu",
- "notification.moderation_warning": "Bạn đã nhận một cảnh báo kiểm duyệt",
+ "notification.moderation_warning": "Bạn vừa nhận một cảnh báo kiểm duyệt",
"notification.moderation_warning.action_delete_statuses": "Một vài tút của bạn bị gỡ.",
"notification.moderation_warning.action_disable": "Tài khoản của bạn đã bị vô hiệu hóa.",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "Vài tút bạn bị đánh dấu nhạy cảm.",
diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json
index 6b08e40284b177..eaa5dabe93134b 100644
--- a/app/javascript/mastodon/locales/zh-HK.json
+++ b/app/javascript/mastodon/locales/zh-HK.json
@@ -474,7 +474,6 @@
"notification.follow_request": "{name} 要求追蹤你",
"notification.mention": "{name} 提及你",
"notification.moderation-warning.learn_more": "了解更多",
- "notification.moderation_warning": "你收到一則審核警告",
"notification.moderation_warning.action_delete_statuses": "你的部份帖文已被刪除。",
"notification.moderation_warning.action_disable": "你的帳號已被停用。",
"notification.moderation_warning.action_mark_statuses_as_sensitive": "你某些帖文已被標記為敏感內容。",
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss
index af41ab3bcc8783..72df3ce6cbe470 100644
--- a/app/javascript/styles/mastodon/components.scss
+++ b/app/javascript/styles/mastodon/components.scss
@@ -4371,6 +4371,10 @@ a.status-card {
&:hover {
color: $primary-text-color;
}
+
+ .icon {
+ transform: rotate(60deg);
+ }
}
&:disabled {
@@ -4379,6 +4383,10 @@ a.status-card {
}
}
+.no-reduce-motion .column-header__button .icon {
+ transition: transform 150ms ease-in-out;
+}
+
.column-header__collapsible {
max-height: 70vh;
overflow: hidden;
diff --git a/app/lib/admin/metrics/dimension/software_versions_dimension.rb b/app/lib/admin/metrics/dimension/software_versions_dimension.rb
index ccf556eae0864a..97cdaf589e8c5e 100644
--- a/app/lib/admin/metrics/dimension/software_versions_dimension.rb
+++ b/app/lib/admin/metrics/dimension/software_versions_dimension.rb
@@ -25,14 +25,11 @@ def mastodon_version
end
def ruby_version
- yjit = defined?(RubyVM::YJIT) && RubyVM::YJIT.enabled?
- value = "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}#{yjit ? ' +YJIT' : ''}"
-
{
key: 'ruby',
human_key: 'Ruby',
- value: value,
- human_value: value,
+ value: "#{RUBY_VERSION}p#{RUBY_PATCHLEVEL}",
+ human_value: RUBY_DESCRIPTION,
}
end
diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb
index f8c1c9a8d0048b..81a2c0c6d04bbc 100644
--- a/app/mailers/user_mailer.rb
+++ b/app/mailers/user_mailer.rb
@@ -5,7 +5,6 @@ class UserMailer < Devise::Mailer
helper :accounts
helper :application
- helper :mascot
helper :formatting
helper :instance
helper :routing
diff --git a/app/models/account_moderation_note.rb b/app/models/account_moderation_note.rb
index ad49b24229f2de..79b8b4d25ee033 100644
--- a/app/models/account_moderation_note.rb
+++ b/app/models/account_moderation_note.rb
@@ -13,7 +13,7 @@
#
class AccountModerationNote < ApplicationRecord
- CONTENT_SIZE_LIMIT = 500
+ CONTENT_SIZE_LIMIT = 2_000
belongs_to :account
belongs_to :target_account, class_name: 'Account'
diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb
index f581af74e8bf8c..fc984b2445bcdc 100644
--- a/app/models/admin/action_log_filter.rb
+++ b/app/models/admin/action_log_filter.rb
@@ -59,6 +59,7 @@ class Admin::ActionLogFilter
unsuspend_account: { target_type: 'Account', action: 'unsuspend' }.freeze,
update_announcement: { target_type: 'Announcement', action: 'update' }.freeze,
update_custom_emoji: { target_type: 'CustomEmoji', action: 'update' }.freeze,
+ update_report: { target_type: 'Report', action: 'update' }.freeze,
update_status: { target_type: 'Status', action: 'update' }.freeze,
update_user_role: { target_type: 'UserRole', action: 'update' }.freeze,
update_ip_block: { target_type: 'IpBlock', action: 'update' }.freeze,
diff --git a/app/models/report_note.rb b/app/models/report_note.rb
index b5c40a18b1487e..7361c97e670a5e 100644
--- a/app/models/report_note.rb
+++ b/app/models/report_note.rb
@@ -13,7 +13,7 @@
#
class ReportNote < ApplicationRecord
- CONTENT_SIZE_LIMIT = 500
+ CONTENT_SIZE_LIMIT = 2_000
belongs_to :account
belongs_to :report, inverse_of: :notes, touch: true
diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb
index 25df4d85aa45af..92415a69030af9 100644
--- a/app/presenters/instance_presenter.rb
+++ b/app/presenters/instance_presenter.rb
@@ -81,4 +81,16 @@ def thumbnail
def mascot
@mascot ||= Rails.cache.fetch('site_uploads/mascot') { SiteUpload.find_by(var: 'mascot') }
end
+
+ def favicon
+ return @favicon if defined?(@favicon)
+
+ @favicon ||= Rails.cache.fetch('site_uploads/favicon') { SiteUpload.find_by(var: 'favicon') }
+ end
+
+ def app_icon
+ return @app_icon if defined?(@app_icon)
+
+ @app_icon ||= Rails.cache.fetch('site_uploads/app_icon') { SiteUpload.find_by(var: 'app_icon') }
+ end
end
diff --git a/app/serializers/manifest_serializer.rb b/app/serializers/manifest_serializer.rb
index 759490228c04bf..a39fb5ef540765 100644
--- a/app/serializers/manifest_serializer.rb
+++ b/app/serializers/manifest_serializer.rb
@@ -27,7 +27,7 @@ def short_name
def icons
SiteUpload::ANDROID_ICON_SIZES.map do |size|
- src = site_icon_path('app_icon', size.to_i)
+ src = app_icon_path(size.to_i)
src = URI.join(root_url, src).to_s if src.present?
{
diff --git a/app/views/admin/accounts/show.html.haml b/app/views/admin/accounts/show.html.haml
index 41fcafa29d5af8..bcf7c073141543 100644
--- a/app/views/admin/accounts/show.html.haml
+++ b/app/views/admin/accounts/show.html.haml
@@ -62,14 +62,16 @@
.report-notes
= render partial: 'admin/report_notes/report_note', collection: @moderation_notes
- = simple_form_for @account_moderation_note, url: admin_account_moderation_notes_path do |f|
- = f.hidden_field :target_account_id
+ = simple_form_for @account_moderation_note, url: admin_account_moderation_notes_path do |form|
+ = form.hidden_field :target_account_id
+
+ = render 'shared/error_messages', object: @account_moderation_note
.field-group
- = f.input :content, placeholder: t('admin.reports.notes.placeholder'), rows: 6
+ = form.input :content, input_html: { placeholder: t('admin.reports.notes.placeholder'), maxlength: AccountModerationNote::CONTENT_SIZE_LIMIT, rows: 6, autofocus: @account_moderation_note.errors.any? }
.actions
- = f.button :button, t('admin.account_moderation_notes.create'), type: :submit
+ = form.button :button, t('admin.account_moderation_notes.create'), type: :submit
%hr.spacer/
diff --git a/app/views/admin/reports/show.html.haml b/app/views/admin/reports/show.html.haml
index c880021cffbcaf..842aa51597023e 100644
--- a/app/views/admin/reports/show.html.haml
+++ b/app/views/admin/reports/show.html.haml
@@ -83,15 +83,17 @@
.report-notes
= render @report_notes
-= simple_form_for @report_note, url: admin_report_notes_path do |f|
- = f.input :report_id, as: :hidden
+= simple_form_for @report_note, url: admin_report_notes_path do |form|
+ = form.input :report_id, as: :hidden
+
+ = render 'shared/error_messages', object: @report_note
.field-group
- = f.input :content, placeholder: t('admin.reports.notes.placeholder'), rows: 6
+ = form.input :content, input_html: { placeholder: t('admin.reports.notes.placeholder'), maxlength: ReportNote::CONTENT_SIZE_LIMIT, rows: 6, autofocus: @report_note.errors.any? }
.actions
- if @report.unresolved?
- = f.button :button, t('admin.reports.notes.create_and_resolve'), name: :create_and_resolve, type: :submit
+ = form.button :button, t('admin.reports.notes.create_and_resolve'), name: :create_and_resolve, type: :submit
- else
- = f.button :button, t('admin.reports.notes.create_and_unresolve'), name: :create_and_unresolve, type: :submit
- = f.button :button, t('admin.reports.notes.create'), type: :submit
+ = form.button :button, t('admin.reports.notes.create_and_unresolve'), name: :create_and_unresolve, type: :submit
+ = form.button :button, t('admin.reports.notes.create'), type: :submit
diff --git a/app/views/layouts/application.html.haml b/app/views/layouts/application.html.haml
index ed436b729fe778..3a4335622a66a9 100755
--- a/app/views/layouts/application.html.haml
+++ b/app/views/layouts/application.html.haml
@@ -11,13 +11,13 @@
- if storage_host?
%link{ rel: 'dns-prefetch', href: storage_host }/
- %link{ rel: 'icon', href: site_icon_path('favicon', 'ico') || '/favicon.ico', type: 'image/x-icon' }/
+ %link{ rel: 'icon', href: favicon_path('ico') || '/favicon.ico', type: 'image/x-icon' }/
- SiteUpload::FAVICON_SIZES.each do |size|
- %link{ rel: 'icon', sizes: "#{size}x#{size}", href: site_icon_path('favicon', size.to_i) || frontend_asset_path("icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/
+ %link{ rel: 'icon', sizes: "#{size}x#{size}", href: favicon_path(size.to_i) || frontend_asset_path("icons/favicon-#{size}x#{size}.png"), type: 'image/png' }/
- SiteUpload::APPLE_ICON_SIZES.each do |size|
- %link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: site_icon_path('app_icon', size.to_i) || frontend_asset_path("icons/apple-touch-icon-#{size}x#{size}.png") }/
+ %link{ rel: 'apple-touch-icon', sizes: "#{size}x#{size}", href: app_icon_path(size.to_i) || frontend_asset_path("icons/apple-touch-icon-#{size}x#{size}.png") }/
%link{ rel: 'mask-icon', href: frontend_asset_path('images/logo-symbol-icon.svg'), color: '#6364FF' }/
%link{ rel: 'manifest', href: manifest_path(format: :json) }/
diff --git a/app/views/settings/applications/_fields.html.haml b/app/views/settings/applications/_fields.html.haml
index ed97e880fc8de0..d5398489526b01 100644
--- a/app/views/settings/applications/_fields.html.haml
+++ b/app/views/settings/applications/_fields.html.haml
@@ -11,6 +11,7 @@
.fields-group
= f.input :redirect_uri,
label: t('activerecord.attributes.doorkeeper/application.redirect_uri'), hint: t('doorkeeper.applications.help.redirect_uri'),
+ required: true,
wrapper: :with_block_label
%p.hint= t('doorkeeper.applications.help.native_redirect_uri', native_redirect_uri: content_tag(:code, Doorkeeper.configuration.native_redirect_uri)).html_safe
diff --git a/app/workers/scheduler/user_cleanup_scheduler.rb b/app/workers/scheduler/user_cleanup_scheduler.rb
index 2d2efc731a3908..63ea876e5078dc 100644
--- a/app/workers/scheduler/user_cleanup_scheduler.rb
+++ b/app/workers/scheduler/user_cleanup_scheduler.rb
@@ -3,6 +3,9 @@
class Scheduler::UserCleanupScheduler
include Sidekiq::Worker
+ UNCONFIRMED_ACCOUNTS_MAX_AGE_DAYS = 7
+ DISCARDED_STATUSES_MAX_AGE_DAYS = 30
+
sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i
def perform
@@ -13,7 +16,7 @@ def perform
private
def clean_unconfirmed_accounts!
- User.where('confirmed_at is NULL AND confirmation_sent_at <= ?', 2.days.ago).reorder(nil).find_in_batches do |batch|
+ User.where('confirmed_at is NULL AND confirmation_sent_at <= ?', UNCONFIRMED_ACCOUNTS_MAX_AGE_DAYS.days.ago).reorder(nil).find_in_batches do |batch|
# We have to do it separately because of missing database constraints
AccountModerationNote.where(target_account_id: batch.map(&:account_id)).delete_all
Account.where(id: batch.map(&:account_id)).delete_all
@@ -22,7 +25,7 @@ def clean_unconfirmed_accounts!
end
def clean_discarded_statuses!
- Status.unscoped.discarded.where('deleted_at <= ?', 30.days.ago).find_in_batches do |statuses|
+ Status.unscoped.discarded.where('deleted_at <= ?', DISCARDED_STATUSES_MAX_AGE_DAYS.days.ago).find_in_batches do |statuses|
RemovalWorker.push_bulk(statuses) do |status|
[status.id, { 'immediate' => true, 'skip_streaming' => true }]
end
diff --git a/bin/dev b/bin/dev
index 9b1d3ac6fcc164..0911bae55813d2 100755
--- a/bin/dev
+++ b/bin/dev
@@ -6,7 +6,7 @@ export PORT="${PORT:-3000}"
# Get around our boot.rb ENV check
export RAILS_ENV="${RAILS_ENV:-development}"
-if command -v overmind &> /dev/null
+if command -v overmind 1> /dev/null 2>&1
then
overmind start -f Procfile.dev "$@"
exit $?
diff --git a/config/application.rb b/config/application.rb
index 402c7f0614de22..07b50ca036ba99 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -40,6 +40,7 @@
require_relative '../lib/public_file_server_middleware'
require_relative '../lib/devise/strategies/two_factor_ldap_authenticatable'
require_relative '../lib/devise/strategies/two_factor_pam_authenticatable'
+require_relative '../lib/elasticsearch/client_extensions'
require_relative '../lib/chewy/settings_extensions'
require_relative '../lib/chewy/index_extensions'
require_relative '../lib/chewy/strategy/mastodon'
diff --git a/config/environments/production.rb b/config/environments/production.rb
index b32bad0ece366a..0ce4618e166d4c 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -86,9 +86,7 @@
config.lograge.enabled = true
config.lograge.custom_payload do |controller|
- if controller.respond_to?(:signed_request?) && controller.signed_request?
- { key: controller.signature_key_id }
- end
+ { key: controller.signature_key_id } if controller.respond_to?(:signed_request?) && controller.signed_request?
end
# Use a different logger for distributed setups.
diff --git a/config/initializers/active_record_encryption.rb b/config/initializers/active_record_encryption.rb
index 7cda8c621c2b69..777bafc2730d05 100644
--- a/config/initializers/active_record_encryption.rb
+++ b/config/initializers/active_record_encryption.rb
@@ -5,7 +5,7 @@
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY
).each do |key|
- ENV.fetch(key) do
+ value = ENV.fetch(key) do
abort <<~MESSAGE
Mastodon now requires that these variables are set:
@@ -14,9 +14,18 @@
- ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT
- ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY
- Run `bin/rails db:encryption:init` to generate values and then assign the environment variables.
+ Run `bin/rails db:encryption:init` to generate new secrets and then assign the environment variables.
MESSAGE
end
+
+ next unless Rails.env.production? && value.end_with?('DO_NOT_USE_IN_PRODUCTION')
+
+ abort <<~MESSAGE
+
+ It looks like you are trying to run Mastodon in production with a #{key} value from the test environment.
+
+ Please generate fresh secrets using `bin/rails db:encryption:init` and use them instead.
+ MESSAGE
end
Rails.application.configure do
diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb
index a95c7437fa073b..5c88c4cd5f6222 100644
--- a/config/initializers/devise.rb
+++ b/config/initializers/devise.rb
@@ -79,9 +79,7 @@ def authenticate!
return pass
end
- if validate(resource)
- success!(resource)
- end
+ success!(resource) if validate(resource)
end
private
diff --git a/config/initializers/enable_yjit.rb b/config/initializers/enable_yjit.rb
new file mode 100644
index 00000000000000..7b1053ec114b7d
--- /dev/null
+++ b/config/initializers/enable_yjit.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+# Automatically enable YJIT as of Ruby 3.3, as it brings very
+# sizeable performance improvements.
+
+# If you are deploying to a memory constrained environment
+# you may want to delete this file, but otherwise it's free
+# performance.
+if defined?(RubyVM::YJIT.enable)
+ Rails.application.config.after_initialize do
+ RubyVM::YJIT.enable
+ end
+end
diff --git a/config/initializers/opentelemetry.rb b/config/initializers/opentelemetry.rb
index e50132d4617385..9af0ab89c8698a 100644
--- a/config/initializers/opentelemetry.rb
+++ b/config/initializers/opentelemetry.rb
@@ -53,10 +53,12 @@
},
})
+ prefix = ENV.fetch('OTEL_SERVICE_NAME_PREFIX', 'mastodon')
+
c.service_name = case $PROGRAM_NAME
- when /puma/ then 'mastodon/web'
+ when /puma/ then "#{prefix}/web"
else
- "mastodon/#{$PROGRAM_NAME.split('/').last}"
+ "#{prefix}/#{$PROGRAM_NAME.split('/').last}"
end
c.service_version = Mastodon::Version.to_s
end
diff --git a/config/initializers/simple_cov_source_file.rb b/config/initializers/simple_cov_source_file.rb
new file mode 100644
index 00000000000000..c6b3586c82583f
--- /dev/null
+++ b/config/initializers/simple_cov_source_file.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+# TODO: https://github.com/simplecov-ruby/simplecov/pull/1084
+# Patches this missing condition, monitor for upstream fix
+
+module SimpleCov
+ module SourceFileExtensions
+ def build_branches
+ coverage_branch_data = coverage_data.fetch('branches', {}) || {} # Add the final empty hash in case where 'branches' is present, but returns nil
+ branches = coverage_branch_data.flat_map do |condition, coverage_branches|
+ build_branches_from(condition, coverage_branches)
+ end
+
+ process_skipped_branches(branches)
+ end
+ end
+end
+
+SimpleCov::SourceFile.prepend(SimpleCov::SourceFileExtensions) if defined?(SimpleCov::SourceFile)
diff --git a/config/locales/devise.ia.yml b/config/locales/devise.ia.yml
index d83c708647718a..c68efddd07880f 100644
--- a/config/locales/devise.ia.yml
+++ b/config/locales/devise.ia.yml
@@ -86,9 +86,13 @@ ia:
destroyed: A revider! Tu conto esseva cancellate con successo. Nos spera vider te novemente tosto.
signed_up_but_pending: Un message con un ligamine de confirmation esseva inviate a tu conto de email. Post que tu clicca le ligamine, nos revidera tu application. Tu essera notificate si illo es approbate.
updated: Tu conto ha essite actualisate con successo.
+ sessions:
+ signed_in: Connexe con successo.
+ signed_out: Disconnexe con successo.
unlocks:
unlocked: Tu conto ha essite disblocate con successo. Initia session a continuar.
errors:
messages:
already_confirmed: jam esseva confirmate, tenta initiar session
not_found: non trovate
+ not_locked: non era blocate
diff --git a/config/locales/doorkeeper.en-GB.yml b/config/locales/doorkeeper.en-GB.yml
index b3ceffb13f7544..2e537c5301937e 100644
--- a/config/locales/doorkeeper.en-GB.yml
+++ b/config/locales/doorkeeper.en-GB.yml
@@ -174,6 +174,7 @@ en-GB:
read:filters: see your filters
read:follows: see your follows
read:lists: see your lists
+ read:me: read only your account's basic information
read:mutes: see your mutes
read:notifications: see your notifications
read:reports: see your reports
diff --git a/config/locales/doorkeeper.ia.yml b/config/locales/doorkeeper.ia.yml
index b5bd6cc5369fbb..dc965996810817 100644
--- a/config/locales/doorkeeper.ia.yml
+++ b/config/locales/doorkeeper.ia.yml
@@ -4,6 +4,7 @@ ia:
attributes:
doorkeeper/application:
name: Nomine de application
+ scopes: Ambitos
website: Sito web de application
errors:
models:
@@ -28,12 +29,14 @@ ia:
empty: Tu non ha applicationes.
name: Nomine
new: Nove application
+ scopes: Ambitos
show: Monstrar
title: Tu applicationes
new:
title: Nove application
show:
actions: Actiones
+ application_id: Clave del cliente
scopes: Ambitos
title: 'Application: %{name}'
authorizations:
@@ -42,13 +45,20 @@ ia:
deny: Negar
error:
title: Ocurreva un error
+ new:
+ review_permissions: Revisionar le permissos
+ title: Autorisation necessari
authorized_applications:
+ buttons:
+ revoke: Revocar
confirmations:
revoke: Es tu secur?
index:
+ authorized_at: Autorisate le %{date}
last_used_at: Ultime uso in %{date}
never_used: Nunquam usate
scopes: Permissiones
+ superapp: Interne
title: Tu applicationes autorisate
flash:
applications:
@@ -58,12 +68,21 @@ ia:
notice: Application delite.
update:
notice: Application actualisate.
+ authorized_applications:
+ destroy:
+ notice: Application revocate.
grouped_scopes:
+ access:
+ read: Accesso de sol lectura
+ read/write: Accesso de lectura e scriptura
+ write: Accesso de sol scriptura
title:
accounts: Contos
admin/accounts: Gestion de contos
+ admin/all: Tote le functiones administrative
admin/reports: Gestion de reportos
all: Accesso plen a tu conto de Mastodon
+ blocks: Blocadas
bookmarks: Marcapaginas
conversations: Conversationes
favourites: Favoritos
@@ -84,7 +103,9 @@ ia:
oauth2_provider: Fornitor OAuth2
scopes:
admin:read: leger tote le datos in le servitor
+ admin:read:accounts: leger information sensibile de tote le contos
admin:write: modificar tote le datos in le servitor
+ follow: modificar relationes del contos
read: leger tote le datos de tu conto
read:accounts: vider informationes de conto
read:bookmarks: vider tu marcapaginas
diff --git a/config/locales/doorkeeper.vi.yml b/config/locales/doorkeeper.vi.yml
index 84684d24ca7e59..624db9aff7eb4f 100644
--- a/config/locales/doorkeeper.vi.yml
+++ b/config/locales/doorkeeper.vi.yml
@@ -61,7 +61,7 @@ vi:
title: Một lỗi đã xảy ra
new:
prompt_html: "%{client_name} yêu cầu truy cập tài khoản của bạn. Đây là ứng dụng của bên thứ ba. Nếu không tin tưởng, đừng cho phép nó."
- review_permissions: Xem lại quyền cho phép
+ review_permissions: Quyền truy cập
title: Yêu cầu truy cập
show:
title: Sao chép mã này và dán nó vào ứng dụng.
@@ -122,7 +122,7 @@ vi:
admin/accounts: Quản trị tài khoản
admin/all: Mọi chức năng quản trị
admin/reports: Quản trị báo cáo
- all: Toàn quyền truy cập vào tài khoản Mastodon của bạn
+ all: Toàn quyền truy cập tài khoản Mastodon
blocks: Chặn
bookmarks: Tút đã lưu
conversations: Thảo luận
diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml
index df956902a6e904..7e31080dfa2c10 100644
--- a/config/locales/en-GB.yml
+++ b/config/locales/en-GB.yml
@@ -751,6 +751,7 @@ en-GB:
desc_html: This relies on external scripts from hCaptcha, which may be a security and privacy concern. In addition, this can make the registration process significantly less accessible to some (especially disabled) people. For these reasons, please consider alternative measures such as approval-based or invite-based registration.
title: Require new users to solve a CAPTCHA to confirm their account
content_retention:
+ danger_zone: Danger zone
preamble: Control how user-generated content is stored in Mastodon.
title: Content retention
default_noindex:
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 54267a3c0579ad..57e47e5390e7bc 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -285,6 +285,7 @@ en:
update_custom_emoji_html: "%{name} updated emoji %{target}"
update_domain_block_html: "%{name} updated domain block for %{target}"
update_ip_block_html: "%{name} changed rule for IP %{target}"
+ update_report_html: "%{name} updated report %{target}"
update_status_html: "%{name} updated post by %{target}"
update_user_role_html: "%{name} changed %{target} role"
deleted_account: deleted account
diff --git a/config/locales/fo.yml b/config/locales/fo.yml
index 15c9c7dc043e65..f7303c512ac686 100644
--- a/config/locales/fo.yml
+++ b/config/locales/fo.yml
@@ -235,7 +235,7 @@ fo:
change_email_user_html: "%{name} broytti teldupost addressuna hjá %{target}"
change_role_user_html: "%{name} broytti leiklutin hjá %{target}"
confirm_user_html: "%{name} góðtók teldupost addressuna hjá %{target}"
- create_account_warning_html: "%{name} sendi eina ávarðing til %{target}"
+ create_account_warning_html: "%{name} sendi eina ávaring til %{target}"
create_announcement_html: "%{name} stovnaði eina fráboðan %{target}"
create_canonical_email_block_html: "%{name} forðaði telduposti við hash'inum %{target}"
create_custom_emoji_html: "%{name} legði upp nýtt kenslutekn %{target}"
@@ -1835,7 +1835,7 @@ fo:
delete_statuses: Summir av postum tínum eru staðfestir at vera í stríði við eina ella fleiri av leiðreglunum og eru tí strikaðir av umsjónarfólkunum á %{instance}.
disable: Tú kanst ikki longur brúka tína kontu, men vangi tín og aðrar dátur eru óskalað. Tú kanst biðja um trygdaravrit av tínum dátum, broyta kontustillingar ella strika tína kontu.
mark_statuses_as_sensitive: Summir av postum tínum eru merktir sum viðkvæmir av umsjónarfólkunum á %{instance}. Hetta merkir, at fólk mugu trýsta á miðilin í postinum, áðrenn ein undanvísing verður víst. Tú kanst sjálv/ur merkja miðlar viðkvæmar, tá tú postar í framtíðini.
- sensitive: Frá nú av, so verða allar miðlafílur, sum tú leggur upp, merktar sum viðkvæmar og fjaldar aftan fyri eina ávarðing.
+ sensitive: Frá nú av, so verða allar miðlafílur, sum tú leggur upp, merktar sum viðkvæmar og fjaldar aftan fyri eina ávaring.
silence: Tú kanst framvegis brúka kontu tína, men einans fólk, sum longu fylgja tær, fara at síggja tínar postar á hesum ambætaranum, og tú kanst vera hildin uttanfyri ymiskar leitihentleikar. Tó so, onnur kunnu framvegis fylgja tær beinleiðis.
suspend: Tú kanst ikki longur brúka kontu tína og vangin og aðrar dátur eru ikki longur atkomulig. Tú kanst enn rita inn fyri at biðja um eitt trygdaravrit av tínum dátum, inntil dáturnar eru heilt burturbeindar um umleið 30 dagar, men vit varðveita nakrar grundleggjandi dátur fyri at forða tær í at støkka undan ógildingini.
reason: 'Grund:'
diff --git a/config/locales/ia.yml b/config/locales/ia.yml
index 712328deb83144..68676a09f73957 100644
--- a/config/locales/ia.yml
+++ b/config/locales/ia.yml
@@ -350,6 +350,18 @@ ia:
media_storage: Immagazinage de medios
new_users: nove usatores
opened_reports: reportos aperte
+ pending_appeals_html:
+ one: "%{count} appello pendente"
+ other: "%{count} appellos pendente"
+ pending_reports_html:
+ one: "%{count} reporto pendente"
+ other: "%{count} reportos pendente"
+ pending_tags_html:
+ one: "%{count} hashtag pendente"
+ other: "%{count} hashtags pendente"
+ pending_users_html:
+ one: "%{count} usator pendente"
+ other: "%{count} usatores pendente"
resolved_reports: reportos resolvite
software: Software
sources: Fontes de inscription
@@ -972,21 +984,41 @@ ia:
silence: pro limitar lor conto
suspend: pro suspender lor conto
body: "%{target} appella un decision de moderation per %{action_taken_by} ab le %{date}, que era %{type}. Ille scribeva:"
+ next_steps: Tu pote approbar le appello a disfacer le decision de moderation, o ignorar lo.
+ subject: "%{username} appella un decision de moderation sur %{instance}"
new_critical_software_updates:
+ body: Nove versiones critic de Mastodon ha essite publicate, tu poterea voler actualisar al plus tosto possibile!
subject: Actualisationes critic de Mastodon es disponibile pro %{instance}!
+ new_pending_account:
+ body: Le detalios del nove conto es infra.
+ subject: Nove conto preste a revider sur %{instance} (%{username})
+ new_report:
+ body: "%{reporter} ha reportate %{target}"
+ body_remote: Alcuno de %{domain} ha reportate %{target}
+ subject: Nove reporto pro %{instance} (#%{id})
new_software_updates:
+ body: Nove versiones de Mastodon ha essite publicate, tu poterea voler actualisar!
subject: Nove versiones de Mastodon es disponibile pro %{instance}!
new_trends:
+ body: 'Le sequente elementos besoniar de un recension ante que illos pote esser monstrate publicamente:'
new_trending_links:
title: Ligamines de tendentia
new_trending_statuses:
title: Messages de tendentia
new_trending_tags:
title: Hashtags de tendentia
+ subject: Nove tendentias pro recenser sur %{instance}
aliases:
add_new: Crear alias
+ created_msg: Create con successo un nove alias. Ora tu pote initiar le motion ab le vetere conto.
+ deleted_msg: Removite con successo le alias. Mover de ille conto a isto non sera plus possibile.
+ empty: Tu non ha aliases.
+ hint_html: Si tu desira mover ab un altere conto a isto, ci tu pote crear un alias, que es requirite ante que tu pote continuar con mover sequaces ab le vetere conto a isto. Iste action per se mesme es innocue e reversibile. Le migration de conto es initiate ab le vetere conto.
+ remove: Disligar alias
appearance:
advanced_web_interface: Interfacie web avantiate
+ advanced_web_interface_hint: 'Si tu desira facer uso de tu integre largessa de schermo, le interfacie web avantiate te permitte de configurar plure columnas differente pro vider al mesme tempore tante informationes como tu vole: pagina principal, notificationes, chronogramma federate, ulle numero de listas e hashtags.'
+ animations_and_accessibility: Animationes e accessibilitate
confirmation_dialogs: Dialogos de confirmation
discovery: Discoperta
localization:
@@ -1013,9 +1045,11 @@ ia:
auth:
apply_for_account: Peter un conto
captcha_confirmation:
+ help_html: Si tu ha problemas a solver le CAPTCHA, tu pote contactar nos per %{email} e nos pote assister te.
hint_html: Justo un altere cosa! Nos debe confirmar que tu es un human (isto es assi proque nos pote mantener foras le spam!). Solve le CAPTCHA infra e clicca "Continuar".
title: Controlo de securitate
confirmations:
+ awaiting_review: Tu adresse email es confirmate! Le personal de %{domain} ora revide tu registration. Tu recipera un email si illes approba tu conto!
awaiting_review_title: Tu registration es revidite
clicking_this_link: cliccante iste ligamine
login_link: acceder
@@ -1034,6 +1068,7 @@ ia:
logout: Clauder le session
migrate_account: Move a un conto differente
or_log_in_with: O accede con
+ privacy_policy_agreement_html: Io ha legite e acceptar le politica de confidentialitate
progress:
confirm: Confirma le email
details: Tu detalios
@@ -1043,36 +1078,86 @@ ia:
cas: CAS
saml: SAML
register: Inscribe te
+ registration_closed: "%{instance} non accepta nove membros"
resend_confirmation: Reinviar ligamine de confirmation
reset_password: Remontar le contrasigno
rules:
accept: Acceptar
back: Retro
+ invited_by: 'Tu pote junger te a %{domain} gratias al invitation que tu ha recipite de:'
+ preamble: Illos es predefinite e fortiarte per le moderatores de %{domain}.
+ preamble_invited: Ante que tu continua, considera le regulas base definite per le moderatores de %{domain}.
title: Alcun regulas base.
+ title_invited: Tu ha essite invitate.
security: Securitate
set_new_password: Definir un nove contrasigno
+ setup:
+ email_below_hint_html: Verifica tu plica de spam, o pete un altero. Tu pote corriger tu adresse email si illo es errate.
+ email_settings_hint_html: Clicca le ligamine que nos te inviava pro verificar %{email}.
+ link_not_received: Non obteneva tu un ligamine?
+ new_confirmation_instructions_sent: Tu recipera un nove email con le ligamine de confirmation in alcun minutas!
+ title: Verifica tu cassa de ingresso
+ sign_in:
+ preamble_html: Accede con tu %{domain} credentiales. Si tu conto es hospite sur un differente servitor, tu non potera authenticar te ci.
+ title: Acceder a %{domain}
+ sign_up:
+ manual_review: Le inscriptiones sur %{domain} passa per revision manual de nostre moderatores. Pro adjutar nos a processar tu registration, scribe un poco re te mesme e perque tu vole un conto sur %{domain}.
+ preamble: Con un conto sur iste servitor de Mastodon, tu potera sequer ulle altere persona in rete, sin reguardo de ubi lor conto es hospite.
+ title: Lassa que nos te configura sur %{domain}.
status:
account_status: Stato del conto
+ confirming: Attendente esser completate email de confirmation.
+ functional: Tu conto es plenmente operative.
+ pending: Tu application es pendente de revision per nostre personal. Isto pote prender alcun tempore. Tu recipera un email si tu application es approbate.
+ redirecting_to: Tu conto es inactive perque illo es actualmente re-adressa a %{acct}.
+ self_destruct: Dum %{domain} va clauder, tu solo habera accesso limitate a tu conto.
view_strikes: Examinar le admonitiones passate contra tu conto
+ too_fast: Formulario inviate troppo velocemente, retenta.
+ use_security_key: Usar clave de securitate
challenge:
confirm: Continuar
+ hint_html: "Consilio: Nos non te demandara tu contrasigno ancora pro le proxime hora."
invalid_password: Contrasigno non valide
prompt: Confirma le contrasigno pro continuar
+ crypto:
+ errors:
+ invalid_key: non es un clave Ed25519 o Curve25519 valide
+ invalid_signature: non es un valide firma Ed25519
+ date:
+ formats:
+ default: "%b %d, %Y"
+ with_month_name: "%B %d, %Y"
datetime:
distance_in_words:
+ about_x_hours: "%{count}h"
+ about_x_months: "%{count}me"
+ about_x_years: "%{count}a"
+ almost_x_years: "%{count}a"
half_a_minute: Justo ora
+ less_than_x_minutes: "%{count} m"
less_than_x_seconds: Justo ora
over_x_years: "%{count}a"
x_days: "%{count}d"
x_minutes: "%{count} m"
+ x_months: "%{count}me"
+ x_seconds: "%{count}s"
deletes:
+ challenge_not_passed: Le informationes que tu ha inserite non era correcte
confirm_password: Insere tu contrasigno actual pro verificar tu identitate
+ confirm_username: Insere tu actual contrasigno pro verificar tu identitate
proceed: Deler le conto
success_msg: Tu conto esseva delite con successo
warning:
+ before: 'Insere tu nomine de usator pro confirmar le procedura:'
+ caches: Contente que ha essite in cache per altere servitores pote persister
data_removal: Tu messages e altere datos essera removite permanentemente
email_change_html: Tu pote cambiar tu adresse de e-mail sin deler tu conto
+ email_contact_html: Si illo ancora non arriva, tu pote inviar email a %{email} pro peter adjuta
+ email_reconfirmation_html: Si tu non recipe le email de confirmation, tu pote politica de confidentialitate.
username_available: Tu nomine de usator essera disponibile novemente
+ username_unavailable: Tu nomine de usator remanera indisponibile
disputes:
strikes:
action_taken: Action prendite
@@ -1103,28 +1188,48 @@ ia:
your_appeal_approved: Tu appello ha essite approbate
your_appeal_pending: Tu ha submittite un appello
your_appeal_rejected: Tu appello ha essite rejectate
+ domain_validator:
+ invalid_domain: non es un nomine de dominio valide
edit_profile:
basic_information: Information basic
other: Alteres
errors:
+ '400': Le requesta que tu inviava era non valide o mal formate.
+ '403': Tu non ha le permisso pro acceder a iste pagina.
+ '404': Le pagina que tu cerca non es ci.
+ '406': Iste pagina non es disponibile in le formato requirite.
+ '410': Le pagina que tu cercava non plus existe ci.
'422':
content: Le verification de securitate ha fallite. Bloca tu le cookies?
title: Falleva le verification de securitate
+ '429': Troppe requestas
+ '500':
+ content: Nos lo regretta, ma alco errate eveniva sur nostre extremo.
+ title: Iste pagina non es correcte
+ '503': Le pagina non poteva esser servite per un panna de servitor temporari.
+ noscript_html: A usar le application web Mastodon, activa JavaScript. In alternativa, tenta un del apps native de Mastodon pro tu platteforma.
existing_username_validator:
+ not_found: impossibile trovar un usator local con ille nomine de usator
not_found_multiple: non poteva trovar %{usernames}
exports:
archive_takeout:
date: Data
download: Discargar tu archivo
+ hint_html: Tu pote requirer un archivo de tu messages e medios cargate. Le datos exportate sera in le formato ActivityPub, legibile per ulle software conforme.
+ in_progress: Compilante tu archivo...
+ request: Pete tu archivo
size: Dimension
blocks: Tu ha blocate
bookmarks: Marcapaginas
csv: CSV
domain_blocks: Blocadas de dominio
+ lists: Listas
mutes: Tu ha silentiate
storage: Immagazinage de medios
featured_tags:
add_new: Adder nove
+ errors:
+ limit: Tu ha jam consiliate le maxime numero de hashtags
filters:
contexts:
account: Profilos
@@ -1137,15 +1242,34 @@ ia:
keywords: Parolas clave
statuses: Messages individual
title: Modificar filtro
+ errors:
+ invalid_context: Nulle o non valide contexto supplite
index:
+ contexts: Filtros in %{contexts}
delete: Deler
+ empty: Tu non ha filtros.
+ expires_in: Expira in %{distance}
+ expires_on: Expira le %{date}
+ keywords:
+ one: "%{count} parola clave"
+ other: "%{count} parolas clave"
statuses:
one: "%{count} message"
other: "%{count} messages"
+ statuses_long:
+ one: "%{count} singule message celate"
+ other: "%{count} singule messages celate"
title: Filtros
new:
save: Salveguardar nove filtro
title: Adder nove filtro
+ statuses:
+ back_to_filter: Retro al filtro
+ batch:
+ remove: Remover ab filtro
+ index:
+ hint: Iste filtro se applica pro seliger messages singule sin reguardo de altere criterios. Tu pote adder altere messages a iste filtro ab le interfacie web.
+ title: Messages filtrate
generic:
all: Toto
cancel: Cancellar
@@ -1153,15 +1277,29 @@ ia:
confirm: Confirmar
copy: Copiar
delete: Deler
+ deselect: Deseliger toto
+ none: Nemo
order_by: Ordinar per
save_changes: Salvar le cambios
+ select_all_matching_items:
+ one: Selige %{count} elemento concordante tu recerca.
+ other: Selige %{count} elementos concordante tu recerca.
today: hodie
+ validation_errors:
+ one: Alco non es multo bon ancora! Controla le error infra
+ other: Alco non es multo bon ancora! Controla %{count} errores infra
imports:
errors:
empty: File CSV vacue
+ incompatible_type: Incompatibile con le typo de importation seligite
invalid_csv_file: 'File CSV non valide. Error: %{error}'
+ over_rows_processing_limit: contine plus que %{count} rangos
too_large: Le file es troppo longe
failures: Fallimentos
+ imported: Importate
+ mismatched_types_warning: Il appare que tu pote haber seligite le typo errate pro iste importation, controla duo vices.
+ modes:
+ overwrite_long: Reimplaciar registros actual con le noves
overwrite_preambles:
blocking_html: Tu es sur le puncto de reimplaciar tu lista de blocadas per usque a %{total_items} contos proveniente de %{filename}.
domain_blocking_html: Tu es sur le puncto de reimplaciar tu lista de blocadas de dominio per usque a %{total_items} dominios proveniente de %{filename}.
@@ -1170,7 +1308,14 @@ ia:
domain_blocking_html: Tu es sur le puncto de blocar usque a %{total_items} dominios a partir de %{filename}.
preface: Tu pote importar datos que tu ha exportate de un altere servitor, como un lista de personas que tu seque o bloca.
recent_imports: Importationes recente
+ states:
+ finished: Terminate
+ in_progress: In curso
+ scheduled: Planificate
+ unconfirmed: Non confirmate
status: Stato
+ success: Tu datos era cargate con successo e sera processate in tempore debite
+ time_started: Initiate le
titles:
blocking: Importation de contos blocate
bookmarks: Importation de marcapaginas
@@ -1186,7 +1331,9 @@ ia:
blocking: Lista de blocadas
bookmarks: Marcapaginas
domain_blocking: Lista de dominios blocate
+ following: Sequente lista
lists: Listas
+ muting: Lista del silentiates
upload: Incargar
invites:
delete: Disactivar
@@ -1199,10 +1346,18 @@ ia:
'604800': 1 septimana
'86400': 1 die
expires_in_prompt: Nunquam
+ generate: Generar ligamine de invitation
+ invalid: Iste invitation non es valide
+ max_uses:
+ one: un uso
+ other: "%{count} usos"
+ table:
+ expires_at: Expira
title: Invitar personas
login_activities:
authentication_methods:
password: contrasigno
+ webauthn: claves de securitate
mail_subscriptions:
unsubscribe:
action: Si, desubscriber
@@ -1220,33 +1375,100 @@ ia:
title: Desubcriber
migrations:
errors:
+ move_to_self: non pote esser le conto actual
not_found: non poterea esser trovate
+ moderation:
+ title: Moderation
move_handler:
carry_blocks_over_text: Iste usator ha cambiate de conto desde %{acct}, que tu habeva blocate.
notification_mailer:
+ admin:
+ sign_up:
+ subject: "%{name} se ha inscribite"
follow:
title: Nove sequitor
follow_request:
title: Nove requesta de sequimento
mention:
action: Responder
+ title: Nove mention
poll:
subject: Un inquesta de %{name} ha finite
+ otp_authentication:
+ enable: Activar
+ setup: Configurar
pagination:
next: Sequente
+ prev: Previe
+ truncate: "…"
+ polls:
+ errors:
+ already_voted: Tu jam ha votate in iste sondage
+ duplicate_options: contine elementos duplicate
+ duration_too_long: il es troppo lontan in le futuro
+ duration_too_short: il es troppo tosto
+ expired: Le sondage ha jam finite
+ invalid_choice: Le option de voto eligite non existe
+ over_character_limit: non pote esser plus longe que %{max} characteres cata un
+ self_vote: Tu non pote vota in tu proprie sondages
+ too_few_options: debe haber plus que un elemento
+ too_many_options: non pote continer plus que %{max} elementos
preferences:
other: Altere
+ posting_defaults: Publicationes predefinite
public_timelines: Chronologias public
+ privacy:
+ privacy: Confidentialitate
+ reach: Portata
+ search: Cercar
+ title: Confidentialitate e portata
privacy_policy:
title: Politica de confidentialitate
+ reactions:
+ errors:
+ limit_reached: Limite de reactiones differente attingite
+ unrecognized_emoji: non es un emoticone recognoscite
+ redirects:
+ prompt: Si tu te fide de iste ligamine, clicca lo pro continuar.
+ title: Tu va lassar %{instance}.
relationships:
activity: Activitate del conto
+ confirm_follow_selected_followers: Desira tu vermente remover le sequaces seligite?
+ confirm_remove_selected_followers: Desira tu vermente remover le sequaces seligite?
+ confirm_remove_selected_follows: Desira tu vermente remover le sequaces seligite?
+ dormant: Dormiente
+ follow_failure: Impossibile sequer alcun del contos seligite.
+ follow_selected_followers: Sequer le sequaces seligite
+ followers: Sequaces
+ following: Sequente
+ invited: Invitate
+ last_active: Ultimo active
most_recent: Plus recente
+ moved: Movite
+ mutual: Mutue
+ primary: Primari
+ relationship: Relation
+ remove_selected_domains: Remover tote le sequaces ab le dominios seligite
+ remove_selected_followers: Remover le sequaces seligite
+ remove_selected_follows: Non plus sequer le usatores seligite
status: Stato del conto
+ remote_follow:
+ missing_resource: Impossibile trovar le requirite re-adresse URL pro tu conto
+ reports:
+ errors:
+ invalid_rules: non referentia regulas valide
rss:
content_warning: 'Advertimento de contento:'
descriptions:
account: Messages public de @%{acct}
+ tag: 'Messages public plachettate #%{hashtag}'
+ scheduled_statuses:
+ over_daily_limit: Tu ha excedite le limite de %{limit} messages programmate pro hodie
+ over_total_limit: Tu ha excedite le limite de %{limit} messages programmate
+ too_soon: Le data programmate debe esser in le futuro
+ self_destruct:
+ lead_html: Infortunatemente, %{domain} va clauder permanentemente. Si tu habeva un conto illac, tu non potera continuar a usar lo, ma tu pote ancora peter un salveguarda de tu datos.
+ title: Iste servitor va clauder
sessions:
activity: Ultime activitate
browser: Navigator
@@ -1273,6 +1495,8 @@ ia:
current_session: Session actual
date: Data
description: "%{browser} sur %{platform}"
+ explanation: Il ha navigatores del web actualmente connexe a tu conto Mastodon.
+ ip: IP
platforms:
adobe_air: Adobe Air
android: Android
@@ -1287,10 +1511,16 @@ ia:
windows: Windows
windows_mobile: Windows Mobile
windows_phone: Windows Phone
+ revoke: Revocar
+ revoke_success: Session revocate con successo
+ title: Sessiones
+ view_authentication_history: Vider chronologia de authentication de tu conto
settings:
account: Conto
account_settings: Parametros de conto
+ aliases: Aliases de conto
appearance: Apparentia
+ authorized_apps: Apps autorisate
delete: Deletion de conto
development: Disveloppamento
edit_profile: Modificar profilo
@@ -1316,9 +1546,17 @@ ia:
vote: Votar
show_more: Monstrar plus
visibilities:
+ direct: Directe
private_long: Solmente monstrar a sequitores
public: Public
statuses_cleanup:
+ keep_pinned_hint: Non dele alcuno de tu messages appunctate
+ keep_polls: Mantener sondages
+ keep_polls_hint: Non dele ulle de tu sondages
+ keep_self_bookmark: Mantener messages que tu marcava con marcapaginas
+ keep_self_bookmark_hint: Non dele tu proprie messages si tu los ha marcate con marcapaginas
+ keep_self_fav: Mantene messages que tu favoriva
+ keep_self_fav_hint: Non dele tu proprie messages si tu los ha favorite
min_age:
'1209600': 2 septimanas
'15778476': 6 menses
@@ -1328,6 +1566,7 @@ ia:
'604800': 1 septimana
'63113904': 2 annos
'7889238': 3 menses
+ min_age_label: Limine de etate
stream_entries:
sensitive_content: Contento sensibile
strikes:
@@ -1342,6 +1581,7 @@ ia:
add: Adder
disable: Disactivar 2FA
edit: Modificar
+ generate_recovery_codes: Generar codices de recuperation
user_mailer:
appeal_approved:
action: Parametros de conto
@@ -1350,8 +1590,11 @@ ia:
explanation: Le appello contra le admonition contra tu conto del %{strike_date}, que tu ha submittite le %{appeal_date}, ha essite rejectate.
warning:
appeal: Submitter un appello
+ categories:
+ spam: Spam
subject:
disable: Tu conto %{acct} ha essite gelate
+ mark_statuses_as_sensitive: Tu messages sur %{acct} ha essite marcate como sensibile
none: Advertimento pro %{acct}
sensitive: Tu messages sur %{acct} essera marcate como sensibile a partir de ora
silence: Tu conto %{acct} ha essite limitate
@@ -1370,8 +1613,12 @@ ia:
apps_step: Discarga nostre applicationes official.
apps_title: Applicationes de Mastodon
edit_profile_action: Personalisar
+ edit_profile_step: Impulsa tu interactiones con un profilo comprehensive.
edit_profile_title: Personalisar tu profilo
+ explanation: Ecce alcun consilios pro initiar
feature_action: Apprender plus
+ feature_audience_title: Crea tu auditorio in fiducia
+ feature_moderation_title: Moderation como deberea esser
follow_action: Sequer
post_title: Face tu prime message
share_action: Compartir
diff --git a/config/locales/ie.yml b/config/locales/ie.yml
index 2b819c53de616e..473d7b750f6741 100644
--- a/config/locales/ie.yml
+++ b/config/locales/ie.yml
@@ -751,6 +751,7 @@ ie:
desc_html: To ci usa extern scrites de hCaptcha, quel posse esser ínquietant pro rasones de securitá e privatie. In plu, it posse far li processu de registration mult plu desfacil (particularimen por tis con deshabilitás). Pro ti rasones, ples considerar alternativ mesuras, tales quam registration per aprobation o invitation.
title: Exige que nov usatores solue un CAPTCHA por confirmar lor conto
content_retention:
+ danger_zone: Zone de dangere
preamble: Decider qualmen usator-generat contenete es inmagasinat in Mastodon.
title: Retention de contenete
default_noindex:
@@ -1659,6 +1660,7 @@ ie:
preferences: Preferenties
profile: Public profil
relationships: Sequetes e sequitores
+ severed_relationships: Detranchat relationes
statuses_cleanup: Automatisat deletion de postas
strikes: Admonimentes moderatori
two_factor_authentication: 2-factor autentication
@@ -1672,6 +1674,7 @@ ie:
lost_followers: Perdit sequitores
lost_follows: Perdit sequetes
preamble: Tu posse perdir tis queles tu seque e tui sequitores quande tu blocca un domonia o quande tui moderatores decide suspender un lontan servitor. Tande, tu va posser descargar listes de dejuntet relationes, a inspecter e possibilmen importar sur un altri servitor.
+ purged: Information pri ti-ci servitor ha esset purgat per li administratores de tui servitor.
type: Eveniment
statuses:
attached:
diff --git a/config/locales/lt.yml b/config/locales/lt.yml
index b815cada5c7f74..552afa83014561 100644
--- a/config/locales/lt.yml
+++ b/config/locales/lt.yml
@@ -507,6 +507,8 @@ lt:
roles:
everyone: Numatytieji leidimai
everyone_full_description_html: Tai – bazinis vaidmuo, turintis įtakos visiems naudotojams, net ir tiems, kurie neturi priskirto vaidmens. Visi kiti vaidmenys iš jo paveldi teises.
+ privileges:
+ manage_taxonomies_description: Leidžia naudotojams peržiūrėti tendencingą turinį ir atnaujinti saitažodžių nustatymus
settings:
captcha_enabled:
desc_html: Tai priklauso nuo hCaptcha išorinių skriptų, kurie gali kelti susirūpinimą dėl saugumo ir privatumo. Be to, dėl to registracijos procesas kai kuriems žmonėms (ypač neįgaliesiems) gali būti gerokai sunkiau prieinami. Dėl šių priežasčių apsvarstyk alternatyvias priemones, pavyzdžiui, patvirtinimu arba kvietimu grindžiamą registraciją.
@@ -514,6 +516,7 @@ lt:
danger_zone: Pavojinga zona
discovery:
public_timelines: Viešieji laiko skalės
+ trends: Tendencijos
domain_blocks:
all: Visiems
registrations:
@@ -526,6 +529,7 @@ lt:
title: Medija
no_status_selected: Jokie statusai nebuvo pakeisti, nes niekas nepasirinkta
title: Paskyros statusai
+ trending: Tendencinga
with_media: Su medija
system_checks:
elasticsearch_health_yellow:
@@ -536,8 +540,45 @@ lt:
message_html: Tavo Elasticsearch klasteris turi tik vieną mazgą, ES_PRESET turėtų būti nustatyta į single_node_cluster.
title: Administracija
trends:
+ allow: Leisti
+ approved: Patvirtinta
+ disallow: Neleisti
+ links:
+ allow: Leisti nuorodą
+ allow_provider: Leisti leidėją
+ description_html: Tai – nuorodos, kuriomis šiuo metu daug bendrinasi paskyros, iš kurių tavo serveris mato įrašus. Tai gali padėti naudotojams sužinoti, kas vyksta pasaulyje. Jokios nuorodos nerodomos viešai, kol nepatvirtinai leidėjo. Taip pat gali leisti arba atmesti atskiras nuorodas.
+ disallow: Neleisti nuorodą
+ disallow_provider: Neleisti leidėją
+ no_link_selected: Jokios nuorodos nebuvo pakeistos, nes nebuvo pasirinkta nė viena
+ publishers:
+ no_publisher_selected: Jokie leidėjai nebuvo pakeisti, nes nė vienas nebuvo pasirinktas
+ title: Tendencingos nuorodos
+ usage_comparison: Bendrinta %{today} kartų šiandien, palyginti su %{yesterday} vakar
+ not_allowed_to_trend: Neleidžiama tendencinguoti
+ only_allowed: Leidžiama tik
+ pending_review: Laukiama peržiūros
preview_card_providers:
+ allowed: Nuorodos iš šio leidėjo gali tendencinguoti
+ description_html: Tai – domenai, iš kurių dažnai bendrinamos nuorodos tavo serveryje. Nuorodos netendencinguos, nebent nuorodos domenas yra patvirtintas. Tavo patvirtinimas (arba atmetimas) apima ir subdomenus.
+ rejected: Nuorodos iš šio leidėjo netendencinguos
title: Leidėjai
+ rejected: Atmesta
+ statuses:
+ allow: Leisti įrašą
+ allow_account: Leisti autorių (-ę)
+ description_html: Tai – įrašai, apie kuriuos žino tavo serveris ir kuriais šiuo metu daug bendrinamasi ir kurie yra mėgstami. Tai gali padėti naujiems ir grįžtantiems naudotojams rasti daugiau žmonių, kuriuos galima sekti. Jokie įrašai nerodomi viešai, kol nepatvirtinai autoriaus (-ės), o autorius (-ė) leidžia savo paskyrą siūlyti kitiems. Taip pat gali leisti arba atmesti atskirus įrašus.
+ disallow: Neleisti įrašą
+ disallow_account: Neleisti autorių (-ę)
+ no_status_selected: Jokie tendencingi įrašai nebuvo pakeisti, nes nė vienas iš jų nebuvo pasirinktas
+ not_discoverable: Autorius (-ė) nesutiko, kad būtų galima juos atrasti
+ title: Tendencingi įrašai
+ tags:
+ not_trendable: Nepasirodys tendencijose
+ title: Tendencingos saitažodžiai
+ trendable: Gali pasirodyti tendencijose
+ trending_rank: 'Tendencinga #%{rank}'
+ title: Tendencijos
+ trending: Tendencinga
warning_presets:
add_new: Pridėti naują
delete: Ištrinti
@@ -554,6 +595,14 @@ lt:
body: "%{reporter} parašė skundą apie %{target}"
body_remote: Kažkas iš %{domain} parašė skundą apie %{target}
subject: Naujas skundas %{instance} (#%{id})
+ new_trends:
+ new_trending_links:
+ title: Tendencingos nuorodos
+ new_trending_statuses:
+ title: Tendencingi įrašai
+ new_trending_tags:
+ title: Tendencingos saitažodžiai
+ subject: Naujos tendencijos peržiūrimos %{instance}
appearance:
advanced_web_interface: Išplėstinė žiniatinklio sąsaja
advanced_web_interface_hint: 'Jei nori išnaudoti visą ekrano plotį, išplėstinė žiniatinklio sąsaja leidžia sukonfigūruoti daug skirtingų stulpelių, kad vienu metu matytum tiek informacijos, kiek tik nori: Pagrindinis, pranešimai, federacinė laiko skalė, bet kokie sąrašai ir saitažodžiai.'
@@ -925,8 +974,8 @@ lt:
follows_subtitle: Sek gerai žinomas paskyras.
follows_title: Ką sekti
follows_view_more: Peržiūrėti daugiau sekamų žmonių
- hashtags_subtitle: Naršyk, kas tendencinga per pastarąsias 2 dienas.
- hashtags_title: Trendingiausi saitažodžiai
+ hashtags_subtitle: Naršyk, kas tendencinga per pastarąsias 2 dienas
+ hashtags_title: Tendencingos saitažodžiai
hashtags_view_more: Peržiūrėti daugiau tendencingų saitažodžių
post_action: Sukurti
post_step: Sakyk labas pasauliui tekstu, nuotraukomis, vaizdo įrašais arba apklausomis.
diff --git a/config/locales/simple_form.cs.yml b/config/locales/simple_form.cs.yml
index 54edc4149df4a6..0b1a34e1b99dec 100644
--- a/config/locales/simple_form.cs.yml
+++ b/config/locales/simple_form.cs.yml
@@ -77,11 +77,13 @@ cs:
warn: Schovat filtrovaný obsah za varováním zmiňujicím název filtru
form_admin_settings:
activity_api_enabled: Počty lokálně zveřejnělých příspěvků, aktivních uživatelů a nových registrací v týdenních intervalech
+ app_icon: WEBP, PNG, GIF nebo JPG. Nahradí výchozí ikonu aplikace v mobilních zařízeních vlastní ikonou.
backups_retention_period: Uživatelé mají možnost vytvářet archivy svých příspěvků, které si mohou stáhnout později. Pokud je nastaveno na kladnou hodnotu, budou tyto archivy po zadaném počtu dní automaticky odstraněny z úložiště.
bootstrap_timeline_accounts: Tyto účty budou připnuty na vrchol nových uživatelů podle doporučení.
closed_registrations_message: Zobrazeno při zavření registrace
content_cache_retention_period: Všechny příspěvky z jiných serverů (včetně boostů a odpovědí) budou po uplynutí stanoveného počtu dní smazány bez ohledu na interakci místního uživatele s těmito příspěvky. To se týká i příspěvků, které místní uživatel přidal do záložek nebo oblíbených. Soukromé zmínky mezi uživateli z různých instancí budou rovněž ztraceny a nebude možné je obnovit. Použití tohoto nastavení je určeno pro instance pro speciální účely a při implementaci pro obecné použití porušuje mnohá očekávání uživatelů.
custom_css: Můžete použít vlastní styly ve verzi Mastodonu.
+ favicon: WEBP, PNG, GIF nebo JPG. Nahradí výchozí favicon Mastodonu vlastní ikonou.
mascot: Přepíše ilustraci v pokročilém webovém rozhraní.
media_cache_retention_period: Mediální soubory z příspěvků vzdálených uživatelů se ukládají do mezipaměti na vašem serveru. Pokud je nastaveno na kladnou hodnotu, budou média po zadaném počtu dní odstraněna. Pokud jsou mediální data vyžádána po jejich odstranění, budou znovu stažena, pokud je zdrojový obsah stále k dispozici. Vzhledem k omezením týkajícím se četnosti dotazů karet náhledů odkazů na weby třetích stran se doporučuje nastavit tuto hodnotu alespoň na 14 dní, jinak nebudou karty náhledů odkazů na vyžádání aktualizovány dříve.
peers_api_enabled: Seznam názvů domén se kterými se tento server setkal ve fediversu. Neobsahuje žádná data o tom, zda jste federovali s daným serverem, pouze že o něm váš server ví. Toto je využíváno službami, které sbírají o federování statistiku v obecném smyslu.
diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml
index 51a3aac273c07c..5e8fd85293f75a 100644
--- a/config/locales/simple_form.cy.yml
+++ b/config/locales/simple_form.cy.yml
@@ -77,11 +77,13 @@ cy:
warn: Cuddiwch y cynnwys wedi'i hidlo y tu ôl i rybudd sy'n sôn am deitl yr hidlydd
form_admin_settings:
activity_api_enabled: Cyfrif o bostiadau a gyhoeddir yn lleol, defnyddwyr gweithredol, a chofrestriadau newydd mewn bwcedi wythnosol
+ app_icon: WEBP, PNG, GIF neu JPG. Yn diystyru'r eicon ap rhagosodedig ar ddyfeisiau symudol gydag eicon cyfaddas.
backups_retention_period: Mae gan ddefnyddwyr y gallu i gynhyrchu archifau o'u postiadau i'w llwytho i lawr yn ddiweddarach. Pan gânt eu gosod i werth positif, bydd yr archifau hyn yn cael eu dileu'n awtomatig o'ch storfa ar ôl y nifer penodedig o ddyddiau.
bootstrap_timeline_accounts: Bydd y cyfrifon hyn yn cael eu pinio i frig argymhellion dilynol defnyddwyr newydd.
closed_registrations_message: Yn cael eu dangos pan fydd cofrestriadau wedi cau
content_cache_retention_period: Bydd yr holl bostiadau gan weinyddion eraill (gan gynnwys hwb ac atebion) yn cael eu dileu ar ôl y nifer penodedig o ddyddiau, heb ystyried unrhyw ryngweithio defnyddiwr lleol â'r postiadau hynny. Mae hyn yn cynnwys postiadau lle mae defnyddiwr lleol wedi ei farcio fel nodau tudalen neu ffefrynnau. Bydd cyfeiriadau preifat rhwng defnyddwyr o wahanol achosion hefyd yn cael eu colli ac yn amhosibl eu hadfer. Mae'r defnydd o'r gosodiad hwn wedi'i fwriadu ar gyfer achosion pwrpas arbennig ac mae'n torri llawer o ddisgwyliadau defnyddwyr pan gaiff ei weithredu at ddibenion cyffredinol.
custom_css: Gallwch gymhwyso arddulliau cyfaddas ar fersiwn gwe Mastodon.
+ favicon: WEBP, PNG, GIF neu JPG. Yn diystyru'r favicon Mastodon rhagosodedig gydag eicon cyfaddas.
mascot: Yn diystyru'r darlun yn y rhyngwyneb gwe uwch.
media_cache_retention_period: Mae ffeiliau cyfryngau o bostiadau a wneir gan ddefnyddwyr o bell yn cael eu storio ar eich gweinydd. Pan gaiff ei osod i werth positif, bydd y cyfryngau yn cael eu dileu ar ôl y nifer penodedig o ddyddiau. Os gofynnir am y data cyfryngau ar ôl iddo gael ei ddileu, caiff ei ail-lwytho i lawr, os yw'r cynnwys ffynhonnell yn dal i fod ar gael. Oherwydd cyfyngiadau ar ba mor aml y mae cardiau rhagolwg cyswllt yn pleidleisio i wefannau trydydd parti, argymhellir gosod y gwerth hwn i o leiaf 14 diwrnod, neu ni fydd cardiau rhagolwg cyswllt yn cael eu diweddaru ar alw cyn yr amser hwnnw.
peers_api_enabled: Rhestr o enwau parth y mae'r gweinydd hwn wedi dod ar eu traws yn y ffediws. Nid oes unrhyw ddata wedi'i gynnwys yma ynghylch a ydych chi'n ffedereiddio â gweinydd penodol, dim ond bod eich gweinydd yn gwybod amdano. Defnyddir hwn gan wasanaethau sy'n casglu ystadegau ar ffedereiddio mewn ystyr cyffredinol.
diff --git a/config/locales/simple_form.en-GB.yml b/config/locales/simple_form.en-GB.yml
index f4668ccada1c38..eaf0501a27ba9e 100644
--- a/config/locales/simple_form.en-GB.yml
+++ b/config/locales/simple_form.en-GB.yml
@@ -77,10 +77,15 @@ en-GB:
warn: Hide the filtered content behind a warning mentioning the filter's title
form_admin_settings:
activity_api_enabled: Counts of locally published posts, active users, and new registrations in weekly buckets
+ app_icon: WEBP, PNG, GIF or JPG. Overrides the default app icon on mobile devices with a custom icon.
+ backups_retention_period: Users have the ability to generate archives of their posts to download later. When set to a positive value, these archives will be automatically deleted from your storage after the specified number of days.
bootstrap_timeline_accounts: These accounts will be pinned to the top of new users' follow recommendations.
closed_registrations_message: Displayed when sign-ups are closed
+ content_cache_retention_period: All posts from other servers (including boosts and replies) will be deleted after the specified number of days, without regard to any local user interaction with those posts. This includes posts where a local user has marked it as bookmarks or favorites. Private mentions between users from different instances will also be lost and impossible to restore. Use of this setting is intended for special purpose instances and breaks many user expectations when implemented for general purpose use.
custom_css: You can apply custom styles on the web version of Mastodon.
+ favicon: WEBP, PNG, GIF or JPG. Overrides the default Mastodon favicon with a custom icon.
mascot: Overrides the illustration in the advanced web interface.
+ media_cache_retention_period: Media files from posts made by remote users are cached on your server. When set to a positive value, media will be deleted after the specified number of days. If the media data is requested after it is deleted, it will be re-downloaded, if the source content is still available. Due to restrictions on how often link preview cards poll third-party sites, it is recommended to set this value to at least 14 days, or link preview cards will not be updated on demand before that time.
peers_api_enabled: A list of domain names this server has encountered in the fediverse. No data is included here about whether you federate with a given server, just that your server knows about it. This is used by services that collect statistics on federation in a general sense.
profile_directory: The profile directory lists all users who have opted-in to be discoverable.
require_invite_text: When sign-ups require manual approval, make the “Why do you want to join?” text input mandatory rather than optional
@@ -240,6 +245,7 @@ en-GB:
backups_retention_period: User archive retention period
bootstrap_timeline_accounts: Always recommend these accounts to new users
closed_registrations_message: Custom message when sign-ups are not available
+ content_cache_retention_period: Remote content retention period
custom_css: Custom CSS
mascot: Custom mascot (legacy)
media_cache_retention_period: Media cache retention period
diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml
index 90e223dec3edfc..b3c8a857e83411 100644
--- a/config/locales/simple_form.es-MX.yml
+++ b/config/locales/simple_form.es-MX.yml
@@ -77,11 +77,13 @@ es-MX:
warn: Ocultar el contenido filtrado detrás de una advertencia mencionando el título del filtro
form_admin_settings:
activity_api_enabled: Conteo de publicaciones publicadas localmente, usuarios activos, y nuevos registros en periodos semanales
+ app_icon: WEBP, PNG, GIF o JPG. Reemplaza el icono de aplicación predeterminado en dispositivos móviles con un icono personalizado.
backups_retention_period: Los usuarios tienen la capacidad de generar archivos de sus mensajes para descargar más adelante. Cuando se establece un valor positivo, estos archivos se eliminarán automáticamente del almacenamiento después del número de días especificado.
bootstrap_timeline_accounts: Estas cuentas aparecerán en la parte superior de las recomendaciones de los nuevos usuarios.
closed_registrations_message: Mostrado cuando los registros están cerrados
content_cache_retention_period: Todas las publicaciones de otros servidores (incluso impulsos y respuestas) se eliminarán después del número de días especificado, sin tener en cuenta la interacción del usuario local con esos mensajes. Esto incluye mensajes donde un usuario local los ha marcado como marcadores o favoritos. Las menciones privadas entre usuarios de diferentes instancias también se perderán sin posibilidad de recuperación. El uso de esta configuración está destinado a instancias de propósito especial, y rompe muchas expectativas de los usuarios cuando se implementa para un uso de propósito general.
custom_css: Puedes aplicar estilos personalizados a la versión web de Mastodon.
+ favicon: WEBP, PNG, GIF o JPG. Reemplaza el favicon predeterminado de Mastodon con un icono personalizado.
mascot: Reemplaza la ilustración en la interfaz web avanzada.
media_cache_retention_period: Los archivos multimedia de las publicaciones creadas por usuarios remotos se almacenan en caché en tu servidor. Cuando se establece un valor positivo, estos archivos se eliminarán después del número especificado de días. Si los datos multimedia se solicitan después de eliminarse, se volverán a descargar, si el contenido fuente todavía está disponible. Debido a restricciones en la frecuencia con la que las tarjetas de previsualización de enlaces realizan peticiones a sitios de terceros, se recomienda establecer este valor a al menos 14 días, o las tarjetas de previsualización de enlaces no se actualizarán bajo demanda antes de ese momento.
peers_api_enabled: Una lista de nombres de dominio que este servidor ha encontrado en el fediverso. Aquí no se incluye ningún dato sobre si usted federa con un servidor determinado, sólo que su servidor lo sabe. Esto es utilizado por los servicios que recopilan estadísticas sobre la federación en un sentido general.
diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml
index 1d75bc4234ea0c..2fb5cab987f793 100644
--- a/config/locales/simple_form.es.yml
+++ b/config/locales/simple_form.es.yml
@@ -77,11 +77,13 @@ es:
warn: Ocultar el contenido filtrado detrás de una advertencia mencionando el título del filtro
form_admin_settings:
activity_api_enabled: Conteo de publicaciones publicadas localmente, usuarios activos y registros nuevos cada semana
+ app_icon: WEBP, PNG, GIF o JPG. Reemplaza el icono de aplicación predeterminado en dispositivos móviles con un icono personalizado.
backups_retention_period: Los usuarios tienen la capacidad de generar archivos de sus mensajes para descargar más adelante. Cuando se establece un valor positivo, estos archivos se eliminarán automáticamente del almacenamiento después del número de días especificado.
bootstrap_timeline_accounts: Estas cuentas aparecerán en la parte superior de las recomendaciones de los nuevos usuarios.
closed_registrations_message: Mostrado cuando los registros están cerrados
content_cache_retention_period: Todas las publicaciones de otros servidores (incluso impulsos y respuestas) se eliminarán después del número de días especificado, sin tener en cuenta la interacción del usuario local con esos mensajes. Esto incluye mensajes donde un usuario local los ha marcado como marcadores o favoritos. Las menciones privadas entre usuarios de diferentes instancias también se perderán sin posibilidad de recuperación. El uso de esta configuración está destinado a instancias de propósito especial, y rompe muchas expectativas de los usuarios cuando se implementa para un uso de propósito general.
custom_css: Puedes aplicar estilos personalizados a la versión web de Mastodon.
+ favicon: WEBP, PNG, GIF o JPG. Reemplaza el favicon predeterminado de Mastodon con un icono personalizado.
mascot: Reemplaza la ilustración en la interfaz web avanzada.
media_cache_retention_period: Los archivos multimedia de las publicaciones creadas por usuarios remotos se almacenan en caché en tu servidor. Cuando se establece un valor positivo, estos archivos se eliminarán después del número especificado de días. Si los datos multimedia se solicitan después de eliminarse, se volverán a descargar, si el contenido fuente todavía está disponible. Debido a restricciones en la frecuencia con la que las tarjetas de previsualización de enlaces realizan peticiones a sitios de terceros, se recomienda establecer este valor a al menos 14 días, o las tarjetas de previsualización de enlaces no se actualizarán bajo demanda antes de ese momento.
peers_api_enabled: Una lista de nombres de dominio que este servidor ha encontrado en el Fediverso. Aquí no se incluye ningún dato sobre si federas con un servidor determinado, solo que tu servidor lo conoce. Esto es utilizado por los servicios que recopilan estadísticas sobre la federación en un sentido general.
diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml
index 4971e250222077..2f7010bacf172e 100644
--- a/config/locales/simple_form.fi.yml
+++ b/config/locales/simple_form.fi.yml
@@ -81,9 +81,11 @@ fi:
backups_retention_period: Käyttäjillä on mahdollisuus arkistoida julkaisujaan myöhemmin ladattaviksi. Kun tämä on asetettu positiiviseksi arvoksi, nämä arkistot poistetaan automaattisesti asetetun päivien määrän jälkeen.
bootstrap_timeline_accounts: Nämä tilit kiinnitetään uusien käyttäjien seuraamissuosituslistojen alkuun.
closed_registrations_message: Näkyy, kun rekisteröityminen on suljettu
+ content_cache_retention_period: Kaikki muiden palvelimien viestit (mukaan lukien tehostukset ja vastaukset) poistetaan määritetyn päivien lukumäärän jälkeen, ottamatta huomioon paikallisen käyttäjän vuorovaikutusta kyseisten viestien kanssa. Sisältää viestit, jossa paikallinen käyttäjä on merkinnyt kirjanmerkiksi tai suosikeiksi. Myös yksityiset maininnat eri käyttäjien välillä menetetään, eikä niitä voi palauttaa. Tämän asetuksen käyttö on tarkoitettu erityisiin tapauksiin ja se rikkoo monia käyttäjien odotuksia, kun se toteutetaan yleistarkoituksiin.
custom_css: Voit käyttää mukautettuja tyylejä Mastodonin verkkoversiossa.
favicon: WEBP, PNG, GIF tai JPG. Korvaa oletusarvoisen Mastodonin suosikkikuvakkeen omalla kuvakkeella.
mascot: Ohittaa kuvituksen edistyneessä selainkäyttöliittymässä.
+ media_cache_retention_period: Mediatiedostot käyttäjien tekemistä viesteistä ovat välimuistissa palvelimellasi. Kun arvo on positiivinen, media poistetaan määritetyn ajan jälkeen. Jos mediaa pyydetään sen poistamisen jälkeen, ne ladataan uudelleen, jos lähdesisältö on vielä saatavilla. Koska linkkien katselun kyselyitä kolmansien osapuolien sivustoille on rajoitettu, on suositeltavaa asettaa tämä arvo vähintään 14 päivään tai linkkien kortteja ei päivitetä pyynnöstä ennen tätä aikaa.
peers_api_enabled: Luettelo verkkotunnuksista, jotka tämä palvelin on kohdannut fediversumissa. Se ei kerro, oletko liitossa tietyn palvelimen kanssa, vaan että palvelimesi on ylipäätään tietoinen siitä. Tätä tietoa käytetään palveluissa, jotka keräävät tilastoja federoinnista yleisellä tasolla.
profile_directory: Profiilihakemisto lueteloi kaikki käyttäjät, jotka ovat ilmoittaneet olevansa löydettävissä.
require_invite_text: Kun rekisteröityminen vaatii manuaalisen hyväksynnän, tee ”Miksi haluat liittyä?” -tekstikentästä pakollinen vapaaehtoisen sijaan
diff --git a/config/locales/simple_form.ie.yml b/config/locales/simple_form.ie.yml
index e482bd828c899b..2b995e7efa5e8a 100644
--- a/config/locales/simple_form.ie.yml
+++ b/config/locales/simple_form.ie.yml
@@ -77,10 +77,15 @@ ie:
warn: Celar li contenete filtrat detra un avise mentionant li titul del filtre
form_admin_settings:
activity_api_enabled: Númeres de postas publicat localmen, activ usatores, e nov adhesiones in periodes semanal
+ app_icon: WEBP, PNG, GIF o JPG. Remplazza li predenifit favicon Mastodon sur mobiles con un icon customisat.
+ backups_retention_period: Usatores posse generar archives de lor postas por adcargar plu tard. Si on specifica un valore positiv, li archives va esser automaticmen deletet de tui magazinage pos li specificat quantitá de dies.
bootstrap_timeline_accounts: Ti-ci contos va esser pinglat al parte superiori del recomandationes por nov usatores.
closed_registrations_message: Monstrat quande adhesiones es cludet
+ content_cache_retention_period: Omni postas de altri servitores (includente boosts e responses) va esser deletet pos li specificat quantitá de dies, sin egard a local usator-interactiones con les. To vale anc por postas queles un local usator ha marcat o favoritat it. Anc privat mentiones ínter usatores de diferent instanties va esser perdit e ínrestorabil. Talmen, ti-ci parametre es intentet por scopes special pro que it posse ruptes li expectationes de usatores.
custom_css: On posse aplicar customisat stiles al web-version de Mastodon.
+ favicon: WEBP, PNG, GIF oo JPG. Remplazza li predenifit favicon Mastodon con in icon customisat.
mascot: Substitue li ilustration in li avansat interfacie web.
+ media_cache_retention_period: Files de medie de postas creat de lontan usatores es cachat sur tui servitor. Si on specifica un valore positiv, ili va esser automaticmen deletet pos li specificat quantitá de dies. Si on peti li data del medie pos deletion, it va esser re-descargat si li original fonte es disponibil. Restrictiones pri li frequentie de ligament-previsiones posse exister sur altri situs, e pro to it es recomandat que on usa un valore de adminim 14 dies; altrimen, li ligament-previsiones ne va esser actualisat secun demande ante ti témpor.
peers_api_enabled: Un liste de nómines de dominia queles ti-ci servitor ha incontrat in li fediverse. Ci null data es includet pri ca tu confedera con un cert servitor o ne; it indica solmen que tui servitor conosse it. Usat per servicies colectent general statisticas pri federation.
profile_directory: Li profilarium monstra omni usatores volent esser decovribil.
require_invite_text: Quande registrationes besona manual aprobation, fa que li textu "Pro quo tu vole registrar te?" es obligatori vice facultativ
@@ -240,6 +245,7 @@ ie:
backups_retention_period: Periode de retener archives de usator
bootstrap_timeline_accounts: Sempre recomandar ti-ci contos a nov usatores
closed_registrations_message: Customisat missage quande registration ne disponibil
+ content_cache_retention_period: Periode de retention por contenete lontan
custom_css: Custom CSS
mascot: Customisat mascot (hereditat)
media_cache_retention_period: Periode de retention por cachat medie
diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml
index caf4c5429965b2..c0698c3f7a755c 100644
--- a/config/locales/simple_form.ja.yml
+++ b/config/locales/simple_form.ja.yml
@@ -77,11 +77,13 @@ ja:
warn: フィルタに一致した投稿を非表示にし、フィルタのタイトルを含む警告を表示します
form_admin_settings:
activity_api_enabled: 週単位でローカルで公開された投稿数、アクティブユーザー数、新規登録者数を表示します
+ app_icon: モバイル端末で表示されるデフォルトのアプリアイコンを独自のアイコンで上書きします。WEBP、PNG、GIF、JPGが利用可能です。
backups_retention_period: ユーザーには、後でダウンロードするために投稿のアーカイブを生成する機能があります。正の値に設定すると、これらのアーカイブは指定された日数後に自動的にストレージから削除されます。
bootstrap_timeline_accounts: これらのアカウントは、新しいユーザー向けのおすすめユーザーの一番上にピン留めされます。
closed_registrations_message: アカウント作成を停止している時に表示されます
content_cache_retention_period: 他のサーバーからのすべての投稿(ブーストや返信を含む)は、指定された日数が経過すると、ローカルユーザーとのやりとりに関係なく削除されます。これには、ローカルユーザーがブックマークやお気に入りとして登録した投稿も含まれます。異なるサーバーのユーザー間の非公開な変身も失われ、復元することは不可能です。この設定の使用は特別な目的のインスタンスのためのものであり、一般的な目的のサーバーで使用するした場合、多くのユーザーの期待を裏切ることになります。
custom_css: ウェブ版のMastodonでカスタムスタイルを適用できます。
+ favicon: デフォルトのMastodonのブックマークアイコンを独自のアイコンで上書きします。WEBP、PNG、GIF、JPGが利用可能です。
mascot: 上級者向けWebインターフェースのイラストを上書きします。
media_cache_retention_period: リモートユーザーが投稿したメディアファイルは、あなたのサーバーにキャッシュされます。正の値を設定すると、メディアは指定した日数後に削除されます。削除後にメディアデータが要求された場合、ソースコンテンツがまだ利用可能であれば、再ダウンロードされます。リンクプレビューカードがサードパーティのサイトを更新する頻度に制限があるため、この値を少なくとも14日に設定することをお勧めします。
peers_api_enabled: このサーバーが Fediverse で遭遇したドメイン名のリストです。このサーバーが知っているだけで、特定のサーバーと連合しているかのデータは含まれません。これは一般的に Fediverse に関する統計情報を収集するサービスによって使用されます。
diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml
index df4755c4fbc15d..54d36eafe0393f 100644
--- a/config/locales/simple_form.ko.yml
+++ b/config/locales/simple_form.ko.yml
@@ -78,11 +78,14 @@ ko:
form_admin_settings:
activity_api_enabled: 주별 로컬에 게시된 글, 활성 사용자 및 새로운 가입자 수
app_icon: WEBP, PNG, GIF 또는 JPG. 모바일 기기에 쓰이는 기본 아이콘을 대체합니다.
+ backups_retention_period: 사용자들은 나중에 다운로드하기 위해 게시물 아카이브를 생성할 수 있습니다. 양수로 설정된 경우 이 아카이브들은 지정된 일수가 지난 후에 저장소에서 자동으로 삭제될 것입니다.
bootstrap_timeline_accounts: 이 계정들은 팔로우 추천 목록 상단에 고정됩니다.
closed_registrations_message: 새 가입을 차단했을 때 표시됩니다
+ content_cache_retention_period: 다른 서버의 모든 게시물(부스트 및 답글 포함)은 해당 게시물에 대한 로컬 사용자의 상호 작용과 관계없이 지정된 일수가 지나면 삭제됩니다. 여기에는 로컬 사용자가 북마크 또는 즐겨찾기로 표시한 게시물도 포함됩니다. 다른 인스턴스 사용자와 주고 받은 비공개 멘션도 손실되며 복원할 수 없습니다. 이 설정은 특수 목적의 인스턴스를 위한 것이며 일반적인 용도의 많은 사용자의 예상이 빗나가게 됩니다.
custom_css: 사용자 지정 스타일을 웹 버전의 마스토돈에 지정할 수 있습니다.
favicon: WEBP, PNG, GIF 또는 JPG. 기본 파비콘을 대체합니다.
mascot: 고급 웹 인터페이스의 그림을 대체합니다.
+ media_cache_retention_period: 원격 사용자가 작성한 글의 미디어 파일은 이 서버에 캐시됩니다. 양수로 설정하면 지정된 일수 후에 미디어가 삭제됩니다. 삭제된 후에 미디어 데이터를 요청하면 원본 콘텐츠를 사용할 수 있는 경우 다시 다운로드됩니다. 링크 미리 보기 카드가 타사 사이트를 폴링하는 빈도에 제한이 있으므로 이 값을 최소 14일로 설정하는 것이 좋으며, 그렇지 않으면 그 이전에는 링크 미리 보기 카드가 제때 업데이트되지 않을 것입니다.
peers_api_enabled: 이 서버가 연합우주에서 만났던 서버들에 대한 도메인 네임의 목록입니다. 해당 서버와 어떤 연합을 했는지에 대한 정보는 전혀 포함되지 않고, 단순히 그 서버를 알고 있는지에 대한 것입니다. 이것은 일반적으로 연합에 대한 통계를 수집할 때 사용됩니다.
profile_directory: 프로필 책자는 발견되기를 희망하는 모든 사람들의 목록을 나열합니다.
require_invite_text: 가입이 수동 승인을 필요로 할 때, "왜 가입하려고 하나요?" 항목을 선택사항으로 두는 것보다는 필수로 두는 것이 낫습니다
diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml
index 6631b59b19e7f0..1c73ce0a842a56 100644
--- a/config/locales/simple_form.lt.yml
+++ b/config/locales/simple_form.lt.yml
@@ -85,6 +85,7 @@ lt:
thumbnail: Maždaug 2:1 dydžio vaizdas, rodomas šalia tavo serverio informacijos.
timeline_preview: Atsijungę lankytojai galės naršyti naujausius viešus įrašus, esančius serveryje.
trends: Trendai rodo, kurios įrašai, saitažodžiai ir naujienų istorijos tavo serveryje sulaukia didžiausio susidomėjimo.
+ trends_as_landing_page: Rodyti tendencingą turinį atsijungusiems naudotojams ir lankytojams vietoj šio serverio aprašymo. Reikia, kad tendencijos būtų įjungtos.
rule:
hint: Pasirinktinai. Pateik daugiau informacijos apie taisyklę.
sessions:
@@ -169,6 +170,9 @@ lt:
site_title: Serverio pavadinimas
theme: Numatytoji tema
thumbnail: Serverio miniatūra
+ trendable_by_default: Leisti tendencijas be išankstinės peržiūros
+ trends: Įjungti tendencijas
+ trends_as_landing_page: Naudoti tendencijas kaip nukreipimo puslapį
invite_request:
text: Kodėl nori prisijungti?
notification_emails:
@@ -181,6 +185,7 @@ lt:
software_updates:
label: Yra nauja Mastodon versija
patch: Pranešti apie klaidų ištaisymo atnaujinimus
+ trending_tag: Reikia peržiūros naujam tendencijai
rule:
hint: Papildoma informacija
text: Taisyklė
diff --git a/config/locales/sk.yml b/config/locales/sk.yml
index 78e7bdb25eafc1..f05887dc33cc0c 100644
--- a/config/locales/sk.yml
+++ b/config/locales/sk.yml
@@ -254,9 +254,12 @@ sk:
destroy_status_html: "%{name} zmazal/a príspevok od %{target}"
destroy_unavailable_domain_html: "%{name} znova spustil/a doručovanie pre doménu %{target}"
destroy_user_role_html: "%{name} vymazal/a rolu pre %{target}"
+ enable_custom_emoji_html: "%{name} povolil/a emotikonu %{target}"
enable_user_html: "%{name} povolil/a prihlásenie pre používateľa %{target}"
memorialize_account_html: "%{name} zmenil/a účet %{target} na pamätnú stránku"
+ promote_user_html: "%{name} povýšil/a užívateľa %{target}"
reject_appeal_html: "%{name} zamietol/la námietku moderovacieho rozhodnutia od %{target}"
+ reject_user_html: "%{name} odmietol/la registráciu od %{target}"
remove_avatar_user_html: "%{name} vymazal/a %{target}/ov/in avatar"
reopen_report_html: "%{name} znovu otvoril/a nahlásenie %{target}"
resend_user_html: "%{name} znovu odoslal/a potvrdzovací email pre %{target}"
@@ -266,7 +269,9 @@ sk:
silence_account_html: "%{name} obmedzil/a účet %{target}"
suspend_account_html: "%{name} zablokoval/a účet používateľa %{target}"
unassigned_report_html: "%{name} odobral/a report od %{target}"
+ unblock_email_account_html: "%{name} odblokoval/a %{target}ovu/inu emailovú adresu"
unsensitive_account_html: "%{name} odznačil/a médium od %{target} ako chúlostivé"
+ unsilence_account_html: "%{name} zrušil/a obmedzenie %{target}ovho/inho účtu"
unsuspend_account_html: "%{name} spojazdnil/a účet %{target}"
update_announcement_html: "%{name} aktualizoval/a oboznámenie %{target}"
update_custom_emoji_html: "%{name} aktualizoval/a emotikonu %{target}"
@@ -529,6 +534,9 @@ sk:
actions:
suspend_description_html: Tento účet a všetok jeho obsah bude nedostupný a nakoniec zmazaný, interaktovať s ním bude nemožné. Zvrátiteľné v rámci 30 dní. Uzatvára všetky hlásenia voči tomuto účtu.
add_to_report: Pridaj viac do hlásenia
+ already_suspended_badges:
+ local: Na tomto serveri už vylúčený/á
+ remote: Už vylúčený/á na ich serveri
are_you_sure: Si si istý/á?
assign_to_self: Priraď sebe
assigned: Priradený moderátor
@@ -538,6 +546,7 @@ sk:
comment:
none: Žiadne
confirm: Potvrď
+ confirm_action: Potvrď moderovací úkon proti @%{acct}
created_at: Nahlásené
delete_and_resolve: Vymaž príspevky
forwarded: Preposlané
@@ -592,8 +601,14 @@ sk:
delete: Vymaž
edit: Uprav postavenie %{name}
everyone: Východzie oprávnenia
+ permissions_count:
+ few: "%{count} povolení"
+ many: "%{count} povolení"
+ one: "%{count} povolenie"
+ other: "%{count} povolenia"
privileges:
administrator: Správca
+ administrator_description: Užívatelia s týmto povolením, obídu všetky povolenia
delete_user_data: Vymaž užívateľské dáta
invite_users: Pozvi užívateľov
manage_announcements: Spravuj oboznámenia
diff --git a/config/locales/th.yml b/config/locales/th.yml
index 8a001d875581c5..56b7bea69a8ad8 100644
--- a/config/locales/th.yml
+++ b/config/locales/th.yml
@@ -1838,6 +1838,9 @@ th:
feature_action: เรียนรู้เพิ่มเติม
feature_audience: Mastodon มีความพิเศษที่ให้คุณจัดการผู้รับสารของคุณได้โดยไม่มีตัวกลาง นอกจากนี้ การติดตั้ง Mastodon บนโครงสร้างพื้นฐานของคุณจะทำให้คุณสามารถติดตาม (และติดตามโดย) เซิร์ฟเวอร์ Mastodon แห่งไหนก็ได้ที่ทำงานอยู่ โดยไม่มีใครสามารถควบคุมได้นอกจากคุณ
feature_audience_title: สร้างผู้ชมของคุณด้วยความมั่นใจ
+ feature_control_title: การควบคุมเส้นเวลาของคุณเอง
+ feature_creativity_title: ความคิดสร้างสรรค์ที่ไม่มีใครเทียบได้
+ feature_moderation_title: การกลั่นกรองในแบบที่ควรจะเป็น
follow_action: ติดตาม
follow_step: การติดตามผู้คนที่น่าสนใจคือสิ่งที่ Mastodon ให้ความสำคัญ
follow_title: ปรับแต่งฟีดหน้าแรกของคุณ
diff --git a/config/navigation.rb b/config/navigation.rb
index de5f28ce9690e7..4d41b357ce1d3f 100644
--- a/config/navigation.rb
+++ b/config/navigation.rb
@@ -42,7 +42,7 @@
end
n.item :invites, safe_join([fa_icon('user-plus fw'), t('invites.title')]), invites_path, if: -> { current_user.can?(:invite_users) && current_user.functional? && !self_destruct }
- n.item :development, safe_join([fa_icon('code fw'), t('settings.development')]), settings_applications_path, if: -> { current_user.functional? && !self_destruct }
+ n.item :development, safe_join([fa_icon('code fw'), t('settings.development')]), settings_applications_path, highlights_on: %r{/settings/applications}, if: -> { current_user.functional? && !self_destruct }
n.item :trends, safe_join([fa_icon('fire fw'), t('admin.trends.title')]), admin_trends_statuses_path, if: -> { current_user.can?(:manage_taxonomies) && !self_destruct } do |s|
s.item :statuses, safe_join([fa_icon('comments-o fw'), t('admin.trends.statuses.title')]), admin_trends_statuses_path, highlights_on: %r{/admin/trends/statuses}
@@ -51,8 +51,8 @@
end
n.item :moderation, safe_join([fa_icon('gavel fw'), t('moderation.title')]), nil, if: -> { current_user.can?(:manage_reports, :view_audit_log, :manage_users, :manage_invites, :manage_taxonomies, :manage_federation, :manage_blocks) && !self_destruct } do |s|
- s.item :reports, safe_join([fa_icon('flag fw'), t('admin.reports.title')]), admin_reports_path, highlights_on: %r{/admin/reports}, if: -> { current_user.can?(:manage_reports) }
- s.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_path(origin: 'local'), highlights_on: %r{/admin/accounts|/admin/pending_accounts|/admin/disputes|/admin/users}, if: -> { current_user.can?(:manage_users) }
+ s.item :reports, safe_join([fa_icon('flag fw'), t('admin.reports.title')]), admin_reports_path, highlights_on: %r{/admin/reports|admin/report_notes}, if: -> { current_user.can?(:manage_reports) }
+ s.item :accounts, safe_join([fa_icon('users fw'), t('admin.accounts.title')]), admin_accounts_path(origin: 'local'), highlights_on: %r{/admin/accounts|admin/account_moderation_notes|/admin/pending_accounts|/admin/disputes|/admin/users}, if: -> { current_user.can?(:manage_users) }
s.item :invites, safe_join([fa_icon('user-plus fw'), t('admin.invites.title')]), admin_invites_path, if: -> { current_user.can?(:manage_invites) }
s.item :follow_recommendations, safe_join([fa_icon('user-plus fw'), t('admin.follow_recommendations.title')]), admin_follow_recommendations_path, highlights_on: %r{/admin/follow_recommendations}, if: -> { current_user.can?(:manage_taxonomies) }
s.item :instances, safe_join([fa_icon('cloud fw'), t('admin.instances.title')]), admin_instances_path(limited: limited_federation_mode? ? nil : '1'), highlights_on: %r{/admin/instances|/admin/domain_blocks|/admin/domain_allows}, if: -> { current_user.can?(:manage_federation) }
diff --git a/lib/elasticsearch/client_extensions.rb b/lib/elasticsearch/client_extensions.rb
new file mode 100644
index 00000000000000..700bfa4a1c6bca
--- /dev/null
+++ b/lib/elasticsearch/client_extensions.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+module Elasticsearch
+ module ClientExtensions
+ def verify_elasticsearch
+ @verified = true
+ end
+ end
+end
+
+Elasticsearch::Client.prepend(Elasticsearch::ClientExtensions)
diff --git a/lib/mastodon/cli/media.rb b/lib/mastodon/cli/media.rb
index e26b4f24afa272..509d11a8198948 100644
--- a/lib/mastodon/cli/media.rb
+++ b/lib/mastodon/cli/media.rb
@@ -128,7 +128,7 @@ def remove_orphans
model_name = path_segments.first.classify
attachment_name = path_segments[1].singularize
- record_id = path_segments[2..-2].join.to_i
+ record_id = path_segments[2...-2].join.to_i
file_name = path_segments.last
record = record_map.dig(model_name, record_id)
attachment = record&.public_send(attachment_name)
@@ -172,7 +172,7 @@ def remove_orphans
end
model_name = path_segments.first.classify
- record_id = path_segments[2..-2].join.to_i
+ record_id = path_segments[2...-2].join.to_i
attachment_name = path_segments[1].singularize
file_name = path_segments.last
@@ -297,7 +297,7 @@ def lookup(url)
fail_with_message 'Not a media URL' unless VALID_PATH_SEGMENTS_SIZE.include?(path_segments.size)
model_name = path_segments.first.classify
- record_id = path_segments[2..-2].join.to_i
+ record_id = path_segments[2...-2].join.to_i
fail_with_message "Cannot find corresponding model: #{model_name}" unless PRELOAD_MODEL_WHITELIST.include?(model_name)
@@ -353,7 +353,7 @@ def preload_records_from_mixed_objects(objects)
next unless VALID_PATH_SEGMENTS_SIZE.include?(segments.size)
model_name = segments.first.classify
- record_id = segments[2..-2].join.to_i
+ record_id = segments[2...-2].join.to_i
next unless PRELOAD_MODEL_WHITELIST.include?(model_name)
diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake
index d6377c9c82c347..d8bc927bc495ba 100644
--- a/lib/tasks/db.rake
+++ b/lib/tasks/db.rake
@@ -8,7 +8,7 @@ namespace :db do
desc 'Generate a set of keys for configuring Active Record encryption in a given environment'
task :init do # rubocop:disable Rails/RakeEnvironment
puts <<~MSG
- Add these environment variables to your Mastodon environment:#{' '}
+ Add these secret environment variables to your Mastodon environment (e.g. .env.production):#{' '}
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=#{SecureRandom.alphanumeric(32)}
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=#{SecureRandom.alphanumeric(32)}
diff --git a/package.json b/package.json
index 20a4366e7d7344..99f895f8c33484 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,7 @@
"fix": "yarn fix:js && yarn fix:css",
"format": "prettier --write --log-level warn .",
"format:check": "prettier --check --ignore-unknown .",
- "i18n:extract": "formatjs extract 'app/javascript/**/*.{js,jsx,ts,tsx}' '--ignore=**/*.d.ts' --out-file app/javascript/flavours/glitch/locales/en.json --format config/formatjs-formatter.js",
+ "i18n:extract": "formatjs extract 'app/javascript/**/*.{js,jsx,ts,tsx}' --ignore '**/*.d.ts' --out-file app/javascript/flavours/glitch/locales/en.json --format config/formatjs-formatter.js",
"jest": "cross-env NODE_ENV=test jest",
"lint:js": "eslint . --ext=.js,.jsx,.ts,.tsx --cache --report-unused-disable-directives",
"lint:css": "stylelint \"**/*.{css,scss}\"",
@@ -45,7 +45,7 @@
"@formatjs/intl-pluralrules": "^5.2.2",
"@gamestdio/websocket": "^0.3.2",
"@github/webauthn-json": "^2.1.1",
- "@rails/ujs": "7.1.3-2",
+ "@rails/ujs": "7.1.3-3",
"@reduxjs/toolkit": "^2.0.1",
"@svgr/webpack": "^5.5.0",
"arrow-key-navigation": "^1.2.0",
diff --git a/spec/controllers/admin/account_moderation_notes_controller_spec.rb b/spec/controllers/admin/account_moderation_notes_controller_spec.rb
index 8d24a7af37383b..5ea546f4180c08 100644
--- a/spec/controllers/admin/account_moderation_notes_controller_spec.rb
+++ b/spec/controllers/admin/account_moderation_notes_controller_spec.rb
@@ -24,10 +24,19 @@
end
end
- context 'when parameters are invalid' do
+ context 'when the content is too short' do
let(:params) { { account_moderation_note: { target_account_id: target_account.id, content: '' } } }
- it 'falls to create a note' do
+ it 'fails to create a note' do
+ expect { subject }.to_not change(AccountModerationNote, :count)
+ expect(response).to render_template 'admin/accounts/show'
+ end
+ end
+
+ context 'when the content is too long' do
+ let(:params) { { account_moderation_note: { target_account_id: target_account.id, content: 'test' * AccountModerationNote::CONTENT_SIZE_LIMIT } } }
+
+ it 'fails to create a note' do
expect { subject }.to_not change(AccountModerationNote, :count)
expect(response).to render_template 'admin/accounts/show'
end
diff --git a/spec/controllers/admin/report_notes_controller_spec.rb b/spec/controllers/admin/report_notes_controller_spec.rb
index 4ddf4a4e2476cc..8d5b5c7aecf871 100644
--- a/spec/controllers/admin/report_notes_controller_spec.rb
+++ b/spec/controllers/admin/report_notes_controller_spec.rb
@@ -22,7 +22,7 @@
let(:account_id) { nil }
context 'when create_and_resolve flag is on' do
- let(:params) { { report_note: { content: 'test content', report_id: report.id }, create_and_resolve: nil } }
+ let(:params) { { report_note: { report_id: report.id, content: 'test content' }, create_and_resolve: nil } }
it 'creates a report note and resolves report' do
expect { subject }.to change(ReportNote, :count).by(1)
@@ -32,7 +32,7 @@
end
context 'when create_and_resolve flag is false' do
- let(:params) { { report_note: { content: 'test content', report_id: report.id } } }
+ let(:params) { { report_note: { report_id: report.id, content: 'test content' } } }
it 'creates a report note and does not resolve report' do
expect { subject }.to change(ReportNote, :count).by(1)
@@ -47,7 +47,7 @@
let(:account_id) { user.account.id }
context 'when create_and_unresolve flag is on' do
- let(:params) { { report_note: { content: 'test content', report_id: report.id }, create_and_unresolve: nil } }
+ let(:params) { { report_note: { report_id: report.id, content: 'test content' }, create_and_unresolve: nil } }
it 'creates a report note and unresolves report' do
expect { subject }.to change(ReportNote, :count).by(1)
@@ -57,7 +57,7 @@
end
context 'when create_and_unresolve flag is false' do
- let(:params) { { report_note: { content: 'test content', report_id: report.id } } }
+ let(:params) { { report_note: { report_id: report.id, content: 'test content' } } }
it 'creates a report note and does not unresolve report' do
expect { subject }.to change(ReportNote, :count).by(1)
@@ -68,12 +68,24 @@
end
end
- context 'when parameter is invalid' do
- let(:params) { { report_note: { content: '', report_id: report.id } } }
+ context 'when content is too short' do
+ let(:params) { { report_note: { report_id: report.id, content: '' } } }
let(:action_taken) { nil }
let(:account_id) { nil }
it 'renders admin/reports/show' do
+ expect { subject }.to_not change(ReportNote, :count)
+ expect(subject).to render_template 'admin/reports/show'
+ end
+ end
+
+ context 'when content is too long' do
+ let(:params) { { report_note: { report_id: report.id, content: 'test' * ReportNote::CONTENT_SIZE_LIMIT } } }
+ let(:action_taken) { nil }
+ let(:account_id) { nil }
+
+ it 'renders admin/reports/show' do
+ expect { subject }.to_not change(ReportNote, :count)
expect(subject).to render_template 'admin/reports/show'
end
end
diff --git a/spec/controllers/concerns/cache_concern_spec.rb b/spec/controllers/concerns/preloading_concern_spec.rb
similarity index 79%
rename from spec/controllers/concerns/cache_concern_spec.rb
rename to spec/controllers/concerns/preloading_concern_spec.rb
index fffd2b266e1fa9..795afbc45e2e4f 100644
--- a/spec/controllers/concerns/cache_concern_spec.rb
+++ b/spec/controllers/concerns/preloading_concern_spec.rb
@@ -2,20 +2,20 @@
require 'rails_helper'
-RSpec.describe CacheConcern do
+RSpec.describe PreloadingConcern do
controller(ApplicationController) do
- include CacheConcern
+ include PreloadingConcern
def empty_array
- render plain: cache_collection([], Status).size
+ render plain: preload_collection([], Status).size
end
def empty_relation
- render plain: cache_collection(Status.none, Status).size
+ render plain: preload_collection(Status.none, Status).size
end
def account_statuses_favourites
- render plain: cache_collection(Status.where(account_id: params[:id]), Status).map(&:favourites_count)
+ render plain: preload_collection(Status.where(account_id: params[:id]), Status).map(&:favourites_count)
end
end
@@ -27,7 +27,7 @@ def account_statuses_favourites
end
end
- describe '#cache_collection' do
+ describe '#preload_collection' do
context 'when given an empty array' do
it 'returns an empty array' do
get :empty_array
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 0c378a4bf2ecc5..2a472d75a60f72 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -288,26 +288,31 @@ def current_skin = 'default'
end
end
- describe '#site_icon_path' do
+ describe 'favicon' do
context 'when an icon exists' do
let!(:favicon) { Fabricate(:site_upload, var: 'favicon') }
+ let!(:app_icon) { Fabricate(:site_upload, var: 'app_icon') }
it 'returns the URL of the icon' do
- expect(helper.site_icon_path('favicon')).to eq(favicon.file.url('48'))
+ expect(helper.favicon_path).to eq(favicon.file.url('48'))
+ expect(helper.app_icon_path).to eq(app_icon.file.url('48'))
end
it 'returns the URL of the icon with size parameter' do
- expect(helper.site_icon_path('favicon', 16)).to eq(favicon.file.url('16'))
+ expect(helper.favicon_path(16)).to eq(favicon.file.url('16'))
+ expect(helper.app_icon_path(16)).to eq(app_icon.file.url('16'))
end
end
context 'when an icon does not exist' do
it 'returns nil' do
- expect(helper.site_icon_path('favicon')).to be_nil
+ expect(helper.favicon_path).to be_nil
+ expect(helper.app_icon_path).to be_nil
end
it 'returns nil with size parameter' do
- expect(helper.site_icon_path('favicon', 16)).to be_nil
+ expect(helper.favicon_path(16)).to be_nil
+ expect(helper.app_icon_path(16)).to be_nil
end
end
end
diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb
index d8eb561d42446d..38aa711089e325 100644
--- a/spec/rails_helper.rb
+++ b/spec/rails_helper.rb
@@ -2,6 +2,31 @@
ENV['RAILS_ENV'] ||= 'test'
+unless ENV['DISABLE_SIMPLECOV'] == 'true'
+ require 'simplecov'
+
+ SimpleCov.start 'rails' do
+ if ENV['CI']
+ require 'simplecov-lcov'
+ formatter SimpleCov::Formatter::LcovFormatter
+ formatter.config.report_with_single_file = true
+ else
+ formatter SimpleCov::Formatter::HTMLFormatter
+ end
+
+ enable_coverage :branch
+
+ add_filter 'lib/linter'
+
+ add_group 'Libraries', 'lib'
+ add_group 'Policies', 'app/policies'
+ add_group 'Presenters', 'app/presenters'
+ add_group 'Serializers', 'app/serializers'
+ add_group 'Services', 'app/services'
+ add_group 'Validators', 'app/validators'
+ end
+end
+
# This needs to be defined before Rails is initialized
STREAMING_PORT = ENV.fetch('TEST_STREAMING_PORT', '4020')
ENV['STREAMING_API_BASE_URL'] = "http://localhost:#{STREAMING_PORT}"
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 8a01792a19910b..1f9cc40f12afd4 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,9 +1,5 @@
# frozen_string_literal: true
-unless ENV['DISABLE_SIMPLECOV'] == 'true'
- require 'simplecov' # Configuration details loaded from .simplecov
-end
-
RSpec.configure do |config|
config.example_status_persistence_file_path = 'tmp/rspec/examples.txt'
config.expect_with :rspec do |expectations|
diff --git a/spec/workers/scheduler/user_cleanup_scheduler_spec.rb b/spec/workers/scheduler/user_cleanup_scheduler_spec.rb
index 8fda246ba81b8c..c3940901d4e2c8 100644
--- a/spec/workers/scheduler/user_cleanup_scheduler_spec.rb
+++ b/spec/workers/scheduler/user_cleanup_scheduler_spec.rb
@@ -14,7 +14,7 @@
before do
# Need to update the already-existing users because their initialization overrides confirmation_sent_at
new_unconfirmed_user.update!(confirmed_at: nil, confirmation_sent_at: Time.now.utc)
- old_unconfirmed_user.update!(confirmed_at: nil, confirmation_sent_at: 1.week.ago)
+ old_unconfirmed_user.update!(confirmed_at: nil, confirmation_sent_at: 10.days.ago)
confirmed_user.update!(confirmed_at: 1.day.ago)
end
diff --git a/yarn.lock b/yarn.lock
index 380b4952ca9ad4..f0e9771f30334c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1617,15 +1617,15 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/postcss-cascade-layers@npm:^4.0.4":
- version: 4.0.4
- resolution: "@csstools/postcss-cascade-layers@npm:4.0.4"
+"@csstools/postcss-cascade-layers@npm:^4.0.6":
+ version: 4.0.6
+ resolution: "@csstools/postcss-cascade-layers@npm:4.0.6"
dependencies:
- "@csstools/selector-specificity": "npm:^3.0.3"
+ "@csstools/selector-specificity": "npm:^3.1.1"
postcss-selector-parser: "npm:^6.0.13"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/87fdd1e3d846e45c2e415f24f66076e04c3c4539e8b802f1114b2a0fef9421d562d9eb61464ba3599d73805555ad8e95c51a8827cb3ddacfda01ec0df4afbfe0
+ checksum: 10c0/134019e9b3f71de39034658e2a284f549883745a309f774d8d272871f9e65680e0981c893766537a8a56ed7f41dba2d0f9fc3cb4fa4057c227bc193976a2ec79
languageName: node
linkType: hard
@@ -1749,15 +1749,15 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/postcss-is-pseudo-class@npm:^4.0.6":
- version: 4.0.6
- resolution: "@csstools/postcss-is-pseudo-class@npm:4.0.6"
+"@csstools/postcss-is-pseudo-class@npm:^4.0.8":
+ version: 4.0.8
+ resolution: "@csstools/postcss-is-pseudo-class@npm:4.0.8"
dependencies:
- "@csstools/selector-specificity": "npm:^3.0.3"
+ "@csstools/selector-specificity": "npm:^3.1.1"
postcss-selector-parser: "npm:^6.0.13"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/aa071954e08dc9368fbeddbec6a8da2dea3a771b33bad53f67f3bc5a6b2f0a270909948f3e7b29ec885f4cceee245f16388809aeb0620284a1d66ad1f2026f28
+ checksum: 10c0/82f191571c3e0973354a54ef15feeb17f9408b4abbefad19fc0f087683b1212fc854cdf09a47324267dd47be4c5cb47d63b8d083695a67c3f8f3e53df3d561f6
languageName: node
linkType: hard
@@ -1983,12 +1983,12 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/selector-specificity@npm:^3.0.3":
- version: 3.0.3
- resolution: "@csstools/selector-specificity@npm:3.0.3"
+"@csstools/selector-specificity@npm:^3.0.3, @csstools/selector-specificity@npm:^3.1.1":
+ version: 3.1.1
+ resolution: "@csstools/selector-specificity@npm:3.1.1"
peerDependencies:
postcss-selector-parser: ^6.0.13
- checksum: 10c0/e4f0355165882ddde8bd4a2f0252868150e67b9fae927fd2d94a91cee31e438e7041059f20b9c755a93b0bd8e527a9f78b01168fe67b3539be32091240aa63bf
+ checksum: 10c0/1d4a3f8015904d6aeb3203afe0e1f6db09b191d9c1557520e3e960c9204ad852df9db4cbde848643f78a26f6ea09101b4e528dbb9193052db28258dbcc8a6e1d
languageName: node
linkType: hard
@@ -2132,14 +2132,17 @@ __metadata:
languageName: node
linkType: hard
-"@es-joy/jsdoccomment@npm:~0.42.0":
- version: 0.42.0
- resolution: "@es-joy/jsdoccomment@npm:0.42.0"
+"@es-joy/jsdoccomment@npm:~0.43.0":
+ version: 0.43.0
+ resolution: "@es-joy/jsdoccomment@npm:0.43.0"
dependencies:
+ "@types/eslint": "npm:^8.56.5"
+ "@types/estree": "npm:^1.0.5"
+ "@typescript-eslint/types": "npm:^7.2.0"
comment-parser: "npm:1.4.1"
esquery: "npm:^1.5.0"
jsdoc-type-pratt-parser: "npm:~4.0.0"
- checksum: 10c0/a8122762d2df3c6501a9c459e2822315a23c0078c4aeb0b40fb3c84b99e21a78e85e67f962d6b5dde5eb751792a1c67c6a170b619573db7151098a19950abe35
+ checksum: 10c0/862294ed89772a231f309edd68405ece00f6aaf43103210f28410da894a6b697bc1f281c59e813dd37d5b7294f633ee7b874e07a0aa3d72f49504089fc9cb2c4
languageName: node
linkType: hard
@@ -2755,7 +2758,7 @@ __metadata:
"@formatjs/intl-pluralrules": "npm:^5.2.2"
"@gamestdio/websocket": "npm:^0.3.2"
"@github/webauthn-json": "npm:^2.1.1"
- "@rails/ujs": "npm:7.1.3-2"
+ "@rails/ujs": "npm:7.1.3-3"
"@reduxjs/toolkit": "npm:^2.0.1"
"@svgr/webpack": "npm:^5.5.0"
"@testing-library/jest-dom": "npm:^6.0.0"
@@ -3042,16 +3045,16 @@ __metadata:
languageName: node
linkType: hard
-"@rails/ujs@npm:7.1.3-2":
- version: 7.1.3-2
- resolution: "@rails/ujs@npm:7.1.3-2"
- checksum: 10c0/8bd5b3a409c62f53790ed7e914f1f48235f461a472da7b4ce1d9ad57356fcdeaa7891c946298f7f620ff0ff7c6d5b995bf44057929c4fce796867a8cf4f27c99
+"@rails/ujs@npm:7.1.3-3":
+ version: 7.1.3-3
+ resolution: "@rails/ujs@npm:7.1.3-3"
+ checksum: 10c0/9eee95372b72d8f704b67f14a3bf9f2681ab5b11c7b79919bfde3341f2970771876af5b40de5b3e4fca6a97c76a41046eff71d96490617c1fc80ef3ad8bbac47
languageName: node
linkType: hard
"@reduxjs/toolkit@npm:^2.0.1":
- version: 2.2.4
- resolution: "@reduxjs/toolkit@npm:2.2.4"
+ version: 2.2.5
+ resolution: "@reduxjs/toolkit@npm:2.2.5"
dependencies:
immer: "npm:^10.0.3"
redux: "npm:^5.0.1"
@@ -3065,7 +3068,7 @@ __metadata:
optional: true
react-redux:
optional: true
- checksum: 10c0/fdbf510210a5aa4864432397e1a9469367e297cd1d9c09a82e68638df7555672c2f8511fe76f933b00efbbb233c534831591772a44e8c41233e34f3cd0f54569
+ checksum: 10c0/be0593bf26852482fb8716b9248531466c6e8782a3114b823ae680fce90267d8c5512a3231cfecc30b17eff81a4604112772b49ad7ca6a3366ddd4f2a838e53c
languageName: node
linkType: hard
@@ -3391,8 +3394,8 @@ __metadata:
linkType: hard
"@testing-library/react@npm:^15.0.0":
- version: 15.0.6
- resolution: "@testing-library/react@npm:15.0.6"
+ version: 15.0.7
+ resolution: "@testing-library/react@npm:15.0.7"
dependencies:
"@babel/runtime": "npm:^7.12.5"
"@testing-library/dom": "npm:^10.0.0"
@@ -3404,7 +3407,7 @@ __metadata:
peerDependenciesMeta:
"@types/react":
optional: true
- checksum: 10c0/3705a2272f929f2f848f5d7e6ac9829bf7ecc1725a35733ffae7e7a261d4bdab470b080558e8544edb1f9ba25db9fbc4232527df9b4ec6ab6ae4462a902a7f95
+ checksum: 10c0/ac8ee8968e81949ecb35f7ee34741c2c043f73dd7fee2247d56f6de6a30de4742af94f25264356863974e54387485b46c9448ecf3f6ca41cf4339011c369f2d4
languageName: node
linkType: hard
@@ -3523,17 +3526,17 @@ __metadata:
languageName: node
linkType: hard
-"@types/eslint@npm:7 || 8":
- version: 8.44.6
- resolution: "@types/eslint@npm:8.44.6"
+"@types/eslint@npm:7 || 8, @types/eslint@npm:^8.56.5":
+ version: 8.56.10
+ resolution: "@types/eslint@npm:8.56.10"
dependencies:
"@types/estree": "npm:*"
"@types/json-schema": "npm:*"
- checksum: 10c0/fc449107eb186bdc5d30149bbcb4e673af8530afdeacca3b89f14deefcbfc67463157d6a81b42cd9df92ddeafda5351853d13310ff7ac6ab0d9769ac7cc0cc3a
+ checksum: 10c0/674349d6c342c3864d70f4d5a9965f96fb253801532752c8c500ad6a1c2e8b219e01ccff5dc8791dcb58b5483012c495708bb9f3ff929f5c9322b3da126c15d3
languageName: node
linkType: hard
-"@types/estree@npm:*, @types/estree@npm:^1.0.0":
+"@types/estree@npm:*, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.5":
version: 1.0.5
resolution: "@types/estree@npm:1.0.5"
checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d
@@ -3926,12 +3929,12 @@ __metadata:
linkType: hard
"@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7":
- version: 18.3.1
- resolution: "@types/react@npm:18.3.1"
+ version: 18.3.2
+ resolution: "@types/react@npm:18.3.2"
dependencies:
"@types/prop-types": "npm:*"
csstype: "npm:^3.0.2"
- checksum: 10c0/18d856c12a4ec93f3cda2d58ef3d77a9480818afd3af895f812896fb82cfca1f35a692ab1add4ce826a4eb58a071624c7d1c8c6c4ccfb81c100d2916dc607614
+ checksum: 10c0/9fb2f1fcf7e889ee4ea7c3c5978df595c66e770e5fd3a245dbdd2589b9b911524c11dab25a6275d8af4e336e4cb5fa850d447884b84c335a187a338c89df99ba
languageName: node
linkType: hard
@@ -4053,9 +4056,9 @@ __metadata:
linkType: hard
"@types/webpack-env@npm:^1.18.4":
- version: 1.18.4
- resolution: "@types/webpack-env@npm:1.18.4"
- checksum: 10c0/3fa77dbff0ed71685404576b0a1cf74587567fe2ee1cfd11d56d6eefcab7a61e4c9ead0eced264e289d2cf0fc74296dbd55ed6c95774fe0fd6264d156c5a59f0
+ version: 1.18.5
+ resolution: "@types/webpack-env@npm:1.18.5"
+ checksum: 10c0/b9e4876e8c7cae419896249f9ed795db283c008fe1d38efa679cbbf05194fc2eea2a5bfb4ff4393d109e3a9895416dadf5f3ddd5c22931b678062230f860454e
languageName: node
linkType: hard
@@ -4196,7 +4199,7 @@ __metadata:
languageName: node
linkType: hard
-"@typescript-eslint/types@npm:7.8.0":
+"@typescript-eslint/types@npm:7.8.0, @typescript-eslint/types@npm:^7.2.0":
version: 7.8.0
resolution: "@typescript-eslint/types@npm:7.8.0"
checksum: 10c0/b2fdbfc21957bfa46f7d8809b607ad8c8b67c51821d899064d09392edc12f28b2318a044f0cd5d523d782e84e8f0558778877944964cf38e139f88790cf9d466
@@ -6388,9 +6391,9 @@ __metadata:
linkType: hard
"core-js@npm:^3.30.2":
- version: 3.37.0
- resolution: "core-js@npm:3.37.0"
- checksum: 10c0/7e00331f346318ca3f595c08ce9e74ddae744715aef137486c1399163afd79792fb94c3161280863adfdc3e30f8026912d56bd3036f93cacfc689d33e185f2ee
+ version: 3.37.1
+ resolution: "core-js@npm:3.37.1"
+ checksum: 10c0/440eb51a7a39128a320225fe349f870a3641b96c9ecd26470227db730ef8c161ea298eaea621db66ec0ff622a85299efb4e23afebf889c0a1748616102307675
languageName: node
linkType: hard
@@ -6584,16 +6587,16 @@ __metadata:
languageName: node
linkType: hard
-"css-has-pseudo@npm:^6.0.3":
- version: 6.0.3
- resolution: "css-has-pseudo@npm:6.0.3"
+"css-has-pseudo@npm:^6.0.5":
+ version: 6.0.5
+ resolution: "css-has-pseudo@npm:6.0.5"
dependencies:
- "@csstools/selector-specificity": "npm:^3.0.3"
+ "@csstools/selector-specificity": "npm:^3.1.1"
postcss-selector-parser: "npm:^6.0.13"
postcss-value-parser: "npm:^4.2.0"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/bbe663eff5256233c7bcce256cd8de7d93d82f2d4f2ca104af8e39e2159170d67746d3a2954385d03ec4ea7ef2728fe9a7d8cb62c52c0a6df1ad3d3bb1e3439d
+ checksum: 10c0/946930b7e699d6dbcb8426ebcd593228ee0e2143a148fb2399111ea4c9ed8d6eb3447e944251f1be44ae987d5ab16e450b0b006ca197f318c2a3760ba431fbb9
languageName: node
linkType: hard
@@ -7830,10 +7833,10 @@ __metadata:
linkType: hard
"eslint-plugin-jsdoc@npm:^48.0.0":
- version: 48.2.3
- resolution: "eslint-plugin-jsdoc@npm:48.2.3"
+ version: 48.2.4
+ resolution: "eslint-plugin-jsdoc@npm:48.2.4"
dependencies:
- "@es-joy/jsdoccomment": "npm:~0.42.0"
+ "@es-joy/jsdoccomment": "npm:~0.43.0"
are-docs-informative: "npm:^0.0.2"
comment-parser: "npm:1.4.1"
debug: "npm:^4.3.4"
@@ -7844,7 +7847,7 @@ __metadata:
spdx-expression-parse: "npm:^4.0.0"
peerDependencies:
eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
- checksum: 10c0/e755923d96118890c6fd28b1c2298e1fe67ccbce08060ffc091b29ced59d0058ad8820323c56eef6f85c2954c783fc4076e78c0e5bc64838ae099b4e62ea702e
+ checksum: 10c0/601c9d6ee41de56102c7813106ceb0b8b8342223670f7add010a8f89753c250cde4cc93e353e3911b7b29677f2634f3f4be45f27abb7a95c6fdbd058adfa3343
languageName: node
linkType: hard
@@ -8906,8 +8909,8 @@ __metadata:
linkType: hard
"glob@npm:^10.2.2, glob@npm:^10.2.6, glob@npm:^10.3.10, glob@npm:^10.3.7":
- version: 10.3.14
- resolution: "glob@npm:10.3.14"
+ version: 10.3.15
+ resolution: "glob@npm:10.3.15"
dependencies:
foreground-child: "npm:^3.1.0"
jackspeak: "npm:^2.3.6"
@@ -8916,7 +8919,7 @@ __metadata:
path-scurry: "npm:^1.11.0"
bin:
glob: dist/esm/bin.mjs
- checksum: 10c0/19126e53b99c94dea9b3509500e22b325e24d2674523fc95b9fe710f1549ad7e091fbb0704c325c53d3a172fc21a8251acce5395c4f3efd872a2e65a376c82a1
+ checksum: 10c0/cda748ddc181b31b3df9548c0991800406d5cc3b3f8110e37a8751ec1e39f37cdae7d7782d5422d7df92775121cdf00599992dff22f7ff1260344843af227c2b
languageName: node
linkType: hard
@@ -9516,9 +9519,9 @@ __metadata:
linkType: hard
"immutable@npm:^4.0.0, immutable@npm:^4.0.0-rc.1, immutable@npm:^4.3.0":
- version: 4.3.5
- resolution: "immutable@npm:4.3.5"
- checksum: 10c0/63d2d7908241a955d18c7822fd2215b6e89ff5a1a33cc72cd475b013cbbdef7a705aa5170a51ce9f84a57f62fdddfaa34e7b5a14b33d8a43c65cc6a881d6e894
+ version: 4.3.6
+ resolution: "immutable@npm:4.3.6"
+ checksum: 10c0/7d0952a768b4fadcee47230ed86dc9505a4517095eceaf5a47e65288571c42400c6e4a2ae21eca4eda957cb7bc50720213135b62cf6a181639111f8acae128c3
languageName: node
linkType: hard
@@ -13063,13 +13066,6 @@ __metadata:
languageName: node
linkType: hard
-"pino-std-serializers@npm:^6.0.0":
- version: 6.2.2
- resolution: "pino-std-serializers@npm:6.2.2"
- checksum: 10c0/8f1c7f0f0d8f91e6c6b5b2a6bfb48f06441abeb85f1c2288319f736f9c6d814fbeebe928d2314efc2ba6018fa7db9357a105eca9fc99fc1f28945a8a8b28d3d5
- languageName: node
- linkType: hard
-
"pino-std-serializers@npm:^7.0.0":
version: 7.0.0
resolution: "pino-std-serializers@npm:7.0.0"
@@ -13078,23 +13074,23 @@ __metadata:
linkType: hard
"pino@npm:^9.0.0":
- version: 9.0.0
- resolution: "pino@npm:9.0.0"
+ version: 9.1.0
+ resolution: "pino@npm:9.1.0"
dependencies:
atomic-sleep: "npm:^1.0.0"
fast-redact: "npm:^3.1.1"
on-exit-leak-free: "npm:^2.1.0"
pino-abstract-transport: "npm:^1.2.0"
- pino-std-serializers: "npm:^6.0.0"
+ pino-std-serializers: "npm:^7.0.0"
process-warning: "npm:^3.0.0"
quick-format-unescaped: "npm:^4.0.3"
real-require: "npm:^0.2.0"
safe-stable-stringify: "npm:^2.3.1"
- sonic-boom: "npm:^3.7.0"
- thread-stream: "npm:^2.6.0"
+ sonic-boom: "npm:^4.0.1"
+ thread-stream: "npm:^3.0.0"
bin:
pino: bin.js
- checksum: 10c0/10ef10aee0cf80af8ed83468cff2e29d642b6794b53cf641e1abcaf9e9958d8bcbc6e09d62757054aef3b4415c45d66a5018da11d43b81a23ba299ef5dc4e8b1
+ checksum: 10c0/d060530ae2e4e8f21d04bb0f44f009f94d207d7f4337f508f618416514214ddaf1b29f8c5c265153a19ce3b6480b451461f40020f916ace9d53a5aa07624b79c
languageName: node
linkType: hard
@@ -13569,16 +13565,16 @@ __metadata:
languageName: node
linkType: hard
-"postcss-nesting@npm:^12.1.2":
- version: 12.1.2
- resolution: "postcss-nesting@npm:12.1.2"
+"postcss-nesting@npm:^12.1.4":
+ version: 12.1.4
+ resolution: "postcss-nesting@npm:12.1.4"
dependencies:
"@csstools/selector-resolve-nested": "npm:^1.1.0"
- "@csstools/selector-specificity": "npm:^3.0.3"
+ "@csstools/selector-specificity": "npm:^3.1.1"
postcss-selector-parser: "npm:^6.0.13"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/39d1d100f61863f904393b17169be83cdf82bd50d530efb3e3ae0c7b0f838b254e10e5d12e25119cf31dce9e351a2b770a03f9b2029ff33bef0ec924c0d2f642
+ checksum: 10c0/b3408de4c04b58a88a56fa81aeff59b12615c78d4f5a57e09c1ee47e74cff51f8c9cad1684da0059067303cf65b4b688f85f0c5ca8d54af8c4ab998f727ab9fd
languageName: node
linkType: hard
@@ -13733,10 +13729,10 @@ __metadata:
linkType: hard
"postcss-preset-env@npm:^9.5.2":
- version: 9.5.11
- resolution: "postcss-preset-env@npm:9.5.11"
+ version: 9.5.13
+ resolution: "postcss-preset-env@npm:9.5.13"
dependencies:
- "@csstools/postcss-cascade-layers": "npm:^4.0.4"
+ "@csstools/postcss-cascade-layers": "npm:^4.0.6"
"@csstools/postcss-color-function": "npm:^3.0.16"
"@csstools/postcss-color-mix-function": "npm:^2.0.16"
"@csstools/postcss-exponential-functions": "npm:^1.0.7"
@@ -13746,7 +13742,7 @@ __metadata:
"@csstools/postcss-hwb-function": "npm:^3.0.15"
"@csstools/postcss-ic-unit": "npm:^3.0.6"
"@csstools/postcss-initial": "npm:^1.0.1"
- "@csstools/postcss-is-pseudo-class": "npm:^4.0.6"
+ "@csstools/postcss-is-pseudo-class": "npm:^4.0.8"
"@csstools/postcss-light-dark-function": "npm:^1.0.5"
"@csstools/postcss-logical-float-and-clear": "npm:^2.0.1"
"@csstools/postcss-logical-overflow": "npm:^1.0.1"
@@ -13768,7 +13764,7 @@ __metadata:
autoprefixer: "npm:^10.4.19"
browserslist: "npm:^4.22.3"
css-blank-pseudo: "npm:^6.0.2"
- css-has-pseudo: "npm:^6.0.3"
+ css-has-pseudo: "npm:^6.0.5"
css-prefers-color-scheme: "npm:^9.0.1"
cssdb: "npm:^8.0.0"
postcss-attribute-case-insensitive: "npm:^6.0.3"
@@ -13788,7 +13784,7 @@ __metadata:
postcss-image-set-function: "npm:^6.0.3"
postcss-lab-function: "npm:^6.0.16"
postcss-logical: "npm:^7.0.1"
- postcss-nesting: "npm:^12.1.2"
+ postcss-nesting: "npm:^12.1.4"
postcss-opacity-percentage: "npm:^2.0.0"
postcss-overflow-shorthand: "npm:^5.0.1"
postcss-page-break: "npm:^3.0.4"
@@ -13798,7 +13794,7 @@ __metadata:
postcss-selector-not: "npm:^7.0.2"
peerDependencies:
postcss: ^8.4
- checksum: 10c0/9460f4ce18cf1af7582d0a1f366151f59b6e9b0c7cbb62e59081dc91da14760a749f59fa52bc190e5e2c8fd531952c647719d19c4740aa1a0ebcb93f075ad931
+ checksum: 10c0/5bbb6e87b1b3acc816ef445836f85df5f50ac96bdc3d571952a83794c80863c652d27ab14c66f6b88f86f5664119d49b357e4184162022cc3436676f3fbe833b
languageName: node
linkType: hard
@@ -15344,15 +15340,15 @@ __metadata:
linkType: hard
"sass@npm:^1.62.1":
- version: 1.77.0
- resolution: "sass@npm:1.77.0"
+ version: 1.77.2
+ resolution: "sass@npm:1.77.2"
dependencies:
chokidar: "npm:>=3.0.0 <4.0.0"
immutable: "npm:^4.0.0"
source-map-js: "npm:>=0.6.2 <2.0.0"
bin:
sass: sass.js
- checksum: 10c0/bce0e5f5b535491e4e775045a79f19cbe10d800ef53b5f7698958d2992505d7b124c968169b05a0190842d8e0a24c2aa6d75dfbdd7c213820d9d59e227009c19
+ checksum: 10c0/0d292339064de3c902e209d41de9c4eb2038cff326476aeebbb5be3eee1d23400d975face2b8e124ae617b10af3e93bec01580f61912f34e4c517fe137a118b6
languageName: node
linkType: hard
@@ -15843,7 +15839,7 @@ __metadata:
languageName: node
linkType: hard
-"sonic-boom@npm:^3.0.0, sonic-boom@npm:^3.7.0":
+"sonic-boom@npm:^3.0.0":
version: 3.7.0
resolution: "sonic-boom@npm:3.7.0"
dependencies:
@@ -15852,6 +15848,15 @@ __metadata:
languageName: node
linkType: hard
+"sonic-boom@npm:^4.0.1":
+ version: 4.0.1
+ resolution: "sonic-boom@npm:4.0.1"
+ dependencies:
+ atomic-sleep: "npm:^1.0.0"
+ checksum: 10c0/7b467f2bc8af7ff60bf210382f21c59728cc4b769af9b62c31dd88723f5cc472752d2320736cc366acc7c765ddd5bec3072c033b0faf249923f576a7453ba9d3
+ languageName: node
+ linkType: hard
+
"source-list-map@npm:^2.0.0":
version: 2.0.1
resolution: "source-list-map@npm:2.0.1"
@@ -16797,12 +16802,12 @@ __metadata:
languageName: node
linkType: hard
-"thread-stream@npm:^2.6.0":
- version: 2.6.0
- resolution: "thread-stream@npm:2.6.0"
+"thread-stream@npm:^3.0.0":
+ version: 3.0.0
+ resolution: "thread-stream@npm:3.0.0"
dependencies:
real-require: "npm:^0.2.0"
- checksum: 10c0/276e2545b33273232eb2c22c53fc11844951c1322f8a78c522477af716ebcfe0d106ccf1fbc455f6e48d928e93231fed6377ce91fdcb3885086e8ffa1f011c88
+ checksum: 10c0/1f4da5a8c93b170cdc7c1ad774af49bb2af43f73cfd9a7f8fb02b766255b483eb6d0b734502c880397baa95c0ce3490088b9a487cff32d4e481aab6fe76560f5
languageName: node
linkType: hard