From 86500e3312394de52413254e81bbc91f1a9333a0 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 04:08:07 -0500 Subject: [PATCH 001/212] Extract scenic view model common methods to concern (#28111) --- app/models/account_summary.rb | 14 +++--------- app/models/concerns/database_view_record.rb | 25 +++++++++++++++++++++ app/models/follow_recommendation.rb | 12 ++-------- app/models/instance.rb | 10 ++------- app/models/user_ip.rb | 6 ++--- 5 files changed, 34 insertions(+), 33 deletions(-) create mode 100644 app/models/concerns/database_view_record.rb diff --git a/app/models/account_summary.rb b/app/models/account_summary.rb index 30ada50cc0..327c0ef305 100644 --- a/app/models/account_summary.rb +++ b/app/models/account_summary.rb @@ -10,21 +10,13 @@ # class AccountSummary < ApplicationRecord + include DatabaseViewRecord + self.primary_key = :account_id - has_many :follow_recommendation_suppressions, primary_key: :account_id, foreign_key: :account_id, inverse_of: false + has_many :follow_recommendation_suppressions, primary_key: :account_id, foreign_key: :account_id, inverse_of: false, dependent: nil scope :safe, -> { where(sensitive: false) } scope :localized, ->(locale) { order(Arel::Nodes::Case.new.when(arel_table[:language].eq(locale)).then(1).else(0).desc) } scope :filtered, -> { where.missing(:follow_recommendation_suppressions) } - - def self.refresh - Scenic.database.refresh_materialized_view(table_name, concurrently: true, cascade: false) - rescue ActiveRecord::StatementInvalid - Scenic.database.refresh_materialized_view(table_name, concurrently: false, cascade: false) - end - - def readonly? - true - end end diff --git a/app/models/concerns/database_view_record.rb b/app/models/concerns/database_view_record.rb new file mode 100644 index 0000000000..8b6672e299 --- /dev/null +++ b/app/models/concerns/database_view_record.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module DatabaseViewRecord + extend ActiveSupport::Concern + + class_methods do + def refresh + Scenic.database.refresh_materialized_view( + table_name, + concurrently: true, + cascade: false + ) + rescue ActiveRecord::StatementInvalid + Scenic.database.refresh_materialized_view( + table_name, + concurrently: false, + cascade: false + ) + end + end + + def readonly? + true + end +end diff --git a/app/models/follow_recommendation.rb b/app/models/follow_recommendation.rb index 6b49a3ca66..7ac9e6dfb9 100644 --- a/app/models/follow_recommendation.rb +++ b/app/models/follow_recommendation.rb @@ -10,6 +10,8 @@ # class FollowRecommendation < ApplicationRecord + include DatabaseViewRecord + self.primary_key = :account_id self.table_name = :global_follow_recommendations @@ -17,14 +19,4 @@ class FollowRecommendation < ApplicationRecord belongs_to :account scope :localized, ->(locale) { joins(:account_summary).merge(AccountSummary.localized(locale)) } - - def self.refresh - Scenic.database.refresh_materialized_view(table_name, concurrently: true, cascade: false) - rescue ActiveRecord::StatementInvalid - Scenic.database.refresh_materialized_view(table_name, concurrently: false, cascade: false) - end - - def readonly? - true - end end diff --git a/app/models/instance.rb b/app/models/instance.rb index 0fd31c8097..3bd4b924ae 100644 --- a/app/models/instance.rb +++ b/app/models/instance.rb @@ -9,6 +9,8 @@ # class Instance < ApplicationRecord + include DatabaseViewRecord + self.primary_key = :domain attr_accessor :failure_days @@ -27,10 +29,6 @@ class Instance < ApplicationRecord scope :by_domain_and_subdomains, ->(domain) { where("reverse('.' || domain) LIKE reverse(?)", "%.#{domain}") } scope :with_domain_follows, ->(domains) { where(domain: domains).where(domain_account_follows) } - def self.refresh - Scenic.database.refresh_materialized_view(table_name, concurrently: true, cascade: false) - end - def self.domain_account_follows Arel.sql( <<~SQL.squish @@ -44,10 +42,6 @@ class Instance < ApplicationRecord ) end - def readonly? - true - end - def delivery_failure_tracker @delivery_failure_tracker ||= DeliveryFailureTracker.new(domain) end diff --git a/app/models/user_ip.rb b/app/models/user_ip.rb index 38287c2a60..87b86a24d4 100644 --- a/app/models/user_ip.rb +++ b/app/models/user_ip.rb @@ -10,11 +10,9 @@ # class UserIp < ApplicationRecord + include DatabaseViewRecord + self.primary_key = :user_id belongs_to :user - - def readonly? - true - end end From f00ba02653ef4e654571e8942b404fcd925662b1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 10:20:23 +0100 Subject: [PATCH 002/212] Update dependency nokogiri to v1.16.2 [SECURITY] (#29106) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 01f5b45929..7c10a419ad 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -465,7 +465,7 @@ GEM net-smtp (0.4.0.1) net-protocol nio4r (2.5.9) - nokogiri (1.16.0) + nokogiri (1.16.2) mini_portile2 (~> 2.8.2) racc (~> 1.4) oj (3.16.3) From 916aeb574d24e2dce1cfefac4694066c7caf65ca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 10:23:55 +0100 Subject: [PATCH 003/212] Update DefinitelyTyped types (non-major) (#29088) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4d1084c229..8055554014 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3179,12 +3179,12 @@ __metadata: linkType: hard "@types/jest@npm:^29.5.2": - version: 29.5.11 - resolution: "@types/jest@npm:29.5.11" + version: 29.5.12 + resolution: "@types/jest@npm:29.5.12" dependencies: expect: "npm:^29.0.0" pretty-format: "npm:^29.0.0" - checksum: 524a3394845214581278bf4d75055927261fbeac7e1a89cd621bd0636da37d265fe0a85eac58b5778758faad1cbd7c7c361dfc190c78ebde03a91cce33463261 + checksum: 25fc8e4c611fa6c4421e631432e9f0a6865a8cb07c9815ec9ac90d630271cad773b2ee5fe08066f7b95bebd18bb967f8ce05d018ee9ab0430f9dfd1d84665b6f languageName: node linkType: hard @@ -3286,13 +3286,13 @@ __metadata: linkType: hard "@types/pg@npm:^8.6.6": - version: 8.10.9 - resolution: "@types/pg@npm:8.10.9" + version: 8.11.0 + resolution: "@types/pg@npm:8.11.0" dependencies: "@types/node": "npm:*" pg-protocol: "npm:*" pg-types: "npm:^4.0.1" - checksum: 6b3bec7230d09da6459636a66dfd6fb538378e466ffff0a0bcd07d67aa4ddce49c73afc7442f53adec92a49dbf9e71d8d847e0075750d7545331735dfd92d22c + checksum: df2c2ac11fa5e8863a98aadce9a9168af5cfc38a226a228d8b1be513ef48d33ceb9bfaa64ef685a87e0611a4f8d94f2e0736bb2812fa00ed264f76679b86945d languageName: node linkType: hard @@ -3476,13 +3476,13 @@ __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.2.48 - resolution: "@types/react@npm:18.2.48" + version: 18.2.54 + resolution: "@types/react@npm:18.2.54" dependencies: "@types/prop-types": "npm:*" "@types/scheduler": "npm:*" csstype: "npm:^3.0.2" - checksum: 7e89f18ea2928b1638f564b156d692894dcb9352a7e0a807873c97e858abe1f23dbd165a25dd088a991344e973fdeef88ba5724bfb64504b74072cbc9c220c3a + checksum: ad38193c30a063a481aeec2460de6396c80d8de2f1c7a8cbb80a4e8bc594f74c308ce93e165d743b38507c3ac0a491c24ce0efbd84c9ab21fd5fd38d2963d329 languageName: node linkType: hard @@ -3599,9 +3599,9 @@ __metadata: linkType: hard "@types/uuid@npm:^9.0.0": - version: 9.0.7 - resolution: "@types/uuid@npm:9.0.7" - checksum: b329ebd4f9d1d8e08d4f2cc211be4922d70d1149f73d5772630e4a3acfb5170c6d37b3d7a39a0412f1a56e86e8a844c7f297c798b082f90380608bf766688787 + version: 9.0.8 + resolution: "@types/uuid@npm:9.0.8" + checksum: b411b93054cb1d4361919579ef3508a1f12bf15b5fdd97337d3d351bece6c921b52b6daeef89b62340fd73fd60da407878432a1af777f40648cbe53a01723489 languageName: node linkType: hard From 586b4faf61dac5156a79637b49ce07ca401077d4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 10:24:44 +0100 Subject: [PATCH 004/212] Update dependency haml_lint to v0.56.0 (#29082) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 7c10a419ad..960bd48de4 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -319,7 +319,7 @@ GEM activesupport (>= 5.1) haml (>= 4.0.6) railties (>= 5.1) - haml_lint (0.55.0) + haml_lint (0.56.0) haml (>= 5.0) parallel (~> 1.10) rainbow From 5ca45403e24522257da4ed608c265078b558ab8a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 04:33:11 -0500 Subject: [PATCH 005/212] Update `nsa` gem to version 0.3.0 (#29065) --- Gemfile | 2 +- Gemfile.lock | 18 ++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/Gemfile b/Gemfile index 906441ec67..5f09b4beb2 100644 --- a/Gemfile +++ b/Gemfile @@ -63,7 +63,7 @@ gem 'kaminari', '~> 1.2' gem 'link_header', '~> 0.0' gem 'mime-types', '~> 3.5.0', require: 'mime/types/columnar' gem 'nokogiri', '~> 1.15' -gem 'nsa', github: 'jhawthorn/nsa', ref: 'e020fcc3a54d993ab45b7194d89ab720296c111b' +gem 'nsa' gem 'oj', '~> 3.14' gem 'ox', '~> 2.14' gem 'parslet' diff --git a/Gemfile.lock b/Gemfile.lock index 960bd48de4..9de0af9a4b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -7,17 +7,6 @@ GIT hkdf (~> 0.2) jwt (~> 2.0) -GIT - remote: https://github.com/jhawthorn/nsa.git - revision: e020fcc3a54d993ab45b7194d89ab720296c111b - ref: e020fcc3a54d993ab45b7194d89ab720296c111b - specs: - nsa (0.2.8) - activesupport (>= 4.2, < 7.2) - concurrent-ruby (~> 1.0, >= 1.0.2) - sidekiq (>= 3.5) - statsd-ruby (~> 1.4, >= 1.4.0) - GEM remote: https://rubygems.org/ specs: @@ -468,6 +457,11 @@ GEM nokogiri (1.16.2) mini_portile2 (~> 2.8.2) racc (~> 1.4) + nsa (0.3.0) + activesupport (>= 4.2, < 7.2) + concurrent-ruby (~> 1.0, >= 1.0.2) + sidekiq (>= 3.5) + statsd-ruby (~> 1.4, >= 1.4.0) oj (3.16.3) bigdecimal (>= 3.0) omniauth (2.1.1) @@ -886,7 +880,7 @@ DEPENDENCIES net-http (~> 0.4.0) net-ldap (~> 0.18) nokogiri (~> 1.15) - nsa! + nsa oj (~> 3.14) omniauth (~> 2.0) omniauth-cas (~> 3.0.0.beta.1) From a2d8aa1583545d52b4825a38dc1880f7dd81223d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 10:33:41 +0100 Subject: [PATCH 006/212] Update dependency tzinfo-data to v1.2024.1 (#29052) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9de0af9a4b..d6a51e2f0a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -765,7 +765,7 @@ GEM unf (~> 0.1.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - tzinfo-data (1.2023.4) + tzinfo-data (1.2024.1) tzinfo (>= 1.0.0) unf (0.1.4) unf_ext From 779d987fbc42412f80cce93a8f5979525c894d5d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 04:34:28 -0500 Subject: [PATCH 007/212] Update `codedoc/codecov-action` to v4 (#29036) --- .github/workflows/test-ruby.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-ruby.yml b/.github/workflows/test-ruby.yml index 346703ced4..4275f59420 100644 --- a/.github/workflows/test-ruby.yml +++ b/.github/workflows/test-ruby.yml @@ -139,7 +139,7 @@ jobs: - name: Upload coverage reports to Codecov if: matrix.ruby-version == '.ruby-version' - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 with: files: coverage/lcov/mastodon.lcov From 66dda7c762d19c18dc1d7e3105a26377c5b6e932 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 6 Feb 2024 10:35:27 +0100 Subject: [PATCH 008/212] Fix already-invalid reports failing to resolve (#29027) --- app/models/report.rb | 6 ++---- spec/models/report_spec.rb | 13 +++++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/models/report.rb b/app/models/report.rb index 38da26d7b7..1b132753b5 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -47,9 +47,9 @@ class Report < ApplicationRecord delegate :local?, to: :account validates :comment, length: { maximum: 1_000 }, if: :local? - validates :rule_ids, absence: true, unless: :violation? + validates :rule_ids, absence: true, if: -> { (category_changed? || rule_ids_changed?) && !violation? } - validate :validate_rule_ids + validate :validate_rule_ids, if: -> { (category_changed? || rule_ids_changed?) && violation? } # entries here need to be kept in sync with the front-end: # - app/javascript/mastodon/features/notifications/components/report.jsx @@ -162,8 +162,6 @@ class Report < ApplicationRecord end def validate_rule_ids - return unless violation? - errors.add(:rule_ids, I18n.t('reports.errors.invalid_rules')) unless rules.size == rule_ids&.size end diff --git a/spec/models/report_spec.rb b/spec/models/report_spec.rb index c514c63b39..0168268bcb 100644 --- a/spec/models/report_spec.rb +++ b/spec/models/report_spec.rb @@ -133,5 +133,18 @@ describe Report do report = Fabricate.build(:report, account: remote_account, comment: Faker::Lorem.characters(number: 1001)) expect(report.valid?).to be true end + + it 'is invalid if it references invalid rules' do + report = Fabricate.build(:report, category: :violation, rule_ids: [-1]) + expect(report.valid?).to be false + expect(report).to model_have_error_on_field(:rule_ids) + end + + it 'is invalid if it references rules but category is not "violation"' do + rule = Fabricate(:rule) + report = Fabricate.build(:report, category: :spam, rule_ids: rule.id) + expect(report.valid?).to be false + expect(report).to model_have_error_on_field(:rule_ids) + end end end From 9ce914cc897d2b1100cee8cb6d792a2283d877ec Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 6 Feb 2024 10:35:36 +0100 Subject: [PATCH 009/212] Fix report reason selector in moderation interface not unselecting rules when changing category (#29026) --- .../mastodon/components/admin/ReportReasonSelector.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx b/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx index ecce92b309..90f4334a6e 100644 --- a/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx +++ b/app/javascript/mastodon/components/admin/ReportReasonSelector.jsx @@ -124,7 +124,7 @@ class ReportReasonSelector extends PureComponent { api().put(`/api/v1/admin/reports/${id}`, { category, - rule_ids, + rule_ids: category === 'violation' ? rule_ids : [], }).catch(err => { console.error(err); }); From 90f4b8d53a027e39049b5b6f4decfe605f925bda Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 10:37:03 +0100 Subject: [PATCH 010/212] Update dependency postcss to v8.4.34 (#29103) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8055554014..8783c33f86 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13144,13 +13144,13 @@ __metadata: linkType: hard "postcss@npm:^8.2.15, postcss@npm:^8.4.24, postcss@npm:^8.4.33": - version: 8.4.33 - resolution: "postcss@npm:8.4.33" + version: 8.4.34 + resolution: "postcss@npm:8.4.34" dependencies: nanoid: "npm:^3.3.7" picocolors: "npm:^1.0.0" source-map-js: "npm:^1.0.2" - checksum: 16eda83458fcd8a91bece287b5920c7f57164c3ea293e6c80d0ea71ce7843007bcd8592260a5160b9a7f02693e6ac93e2495b02d8c7596d3f3f72c1447e3ba79 + checksum: 4d6f072cdfdc1ced16b4336263d830f8b4397fc47b9b382e02f6448fda9386d881aa9d27fbe0dd124f59c76f3a5da4f360919d25dfc818eca50b48f042af35a8 languageName: node linkType: hard From 62028b1b1bf32623c13e2c5f3419c8ab03fc1db2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 10:38:32 +0100 Subject: [PATCH 011/212] Update libretranslate/libretranslate Docker tag to v1.5.5 (#29090) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .devcontainer/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 88979723c3..ecdf9f5f53 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -70,7 +70,7 @@ services: hard: -1 libretranslate: - image: libretranslate/libretranslate:v1.5.4 + image: libretranslate/libretranslate:v1.5.5 restart: unless-stopped volumes: - lt-data:/home/libretranslate/.local From 0bec5c0755cfb270c692fd39b0f22e98ab1b4e0b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 04:56:24 -0500 Subject: [PATCH 012/212] Remove migration base class switcher from `RailsSettingsMigration` (#29047) --- db/migrate/20161006213403_rails_settings_migration.rb | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/db/migrate/20161006213403_rails_settings_migration.rb b/db/migrate/20161006213403_rails_settings_migration.rb index 401b7a83b7..9764196fab 100644 --- a/db/migrate/20161006213403_rails_settings_migration.rb +++ b/db/migrate/20161006213403_rails_settings_migration.rb @@ -1,12 +1,6 @@ # frozen_string_literal: true -MIGRATION_BASE_CLASS = if ActiveRecord::VERSION::MAJOR >= 5 - ActiveRecord::Migration[5.0] - else - ActiveRecord::Migration[4.2] - end - -class RailsSettingsMigration < MIGRATION_BASE_CLASS +class RailsSettingsMigration < ActiveRecord::Migration[5.0] def self.up create_table :settings do |t| t.string :var, null: false From a31427a629df020a975276cbff157691e51d7456 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 12:33:06 +0100 Subject: [PATCH 013/212] Update dependency pino to v8.18.0 (#29043) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8783c33f86..75b4c355af 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12667,8 +12667,8 @@ __metadata: linkType: hard "pino@npm:^8.17.1, pino@npm:^8.17.2": - version: 8.17.2 - resolution: "pino@npm:8.17.2" + version: 8.18.0 + resolution: "pino@npm:8.18.0" dependencies: atomic-sleep: "npm:^1.0.0" fast-redact: "npm:^3.1.1" @@ -12683,7 +12683,7 @@ __metadata: thread-stream: "npm:^2.0.0" bin: pino: bin.js - checksum: 9e55af6cd9d1833a4dbe64924fc73163295acd3c988a9c7db88926669f2574ab7ec607e8487b6dd71dbdad2d7c1c1aac439f37e59233f37220b1a9d88fa2ce01 + checksum: ca73bb31e4656954413b89f48c486b1680fec0c6bb12d4d796c5ccf8eca40f3ee12c9532a0fa61284ed9a800c14eaa0f496f520057ef70cdee0447114813e8eb languageName: node linkType: hard From 4cf07ed78c0f4959160f22506e1f03dc5737a815 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 06:34:11 -0500 Subject: [PATCH 014/212] Add missing action logging to `api/v1/admin/reports#update` (#29044) --- .../api/v1/admin/reports_controller.rb | 1 + .../admin/reports_controller_spec.rb | 10 +++++++ spec/requests/api/v1/admin/reports_spec.rb | 26 +++++++++++++++---- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/app/controllers/api/v1/admin/reports_controller.rb b/app/controllers/api/v1/admin/reports_controller.rb index 9dfb181a28..7129a5f6ca 100644 --- a/app/controllers/api/v1/admin/reports_controller.rb +++ b/app/controllers/api/v1/admin/reports_controller.rb @@ -35,6 +35,7 @@ class Api::V1::Admin::ReportsController < Api::BaseController def update authorize @report, :update? @report.update!(report_params) + log_action :update, @report render json: @report, serializer: REST::Admin::ReportSerializer end diff --git a/spec/controllers/admin/reports_controller_spec.rb b/spec/controllers/admin/reports_controller_spec.rb index 97daaf8da9..02760154fb 100644 --- a/spec/controllers/admin/reports_controller_spec.rb +++ b/spec/controllers/admin/reports_controller_spec.rb @@ -58,6 +58,7 @@ describe Admin::ReportsController do report.reload expect(report.action_taken_by_account).to eq user.account expect(report.action_taken?).to be true + expect(last_action_log.target).to eq(report) end end @@ -70,6 +71,7 @@ describe Admin::ReportsController do report.reload expect(report.action_taken_by_account).to be_nil expect(report.action_taken?).to be false + expect(last_action_log.target).to eq(report) end end @@ -81,6 +83,7 @@ describe Admin::ReportsController do expect(response).to redirect_to(admin_report_path(report)) report.reload expect(report.assigned_account).to eq user.account + expect(last_action_log.target).to eq(report) end end @@ -92,6 +95,13 @@ describe Admin::ReportsController do expect(response).to redirect_to(admin_report_path(report)) report.reload expect(report.assigned_account).to be_nil + expect(last_action_log.target).to eq(report) end end + + private + + def last_action_log + Admin::ActionLog.last + end end diff --git a/spec/requests/api/v1/admin/reports_spec.rb b/spec/requests/api/v1/admin/reports_spec.rb index 5403457db0..4b0b7e1713 100644 --- a/spec/requests/api/v1/admin/reports_spec.rb +++ b/spec/requests/api/v1/admin/reports_spec.rb @@ -151,7 +151,9 @@ RSpec.describe 'Reports' do let(:params) { { category: 'spam' } } it 'updates the report category', :aggregate_failures do - expect { subject }.to change { report.reload.category }.from('other').to('spam') + expect { subject } + .to change { report.reload.category }.from('other').to('spam') + .and create_an_action_log expect(response).to have_http_status(200) @@ -184,7 +186,9 @@ RSpec.describe 'Reports' do it_behaves_like 'forbidden for wrong role', '' it 'marks report as resolved', :aggregate_failures do - expect { subject }.to change { report.reload.unresolved? }.from(true).to(false) + expect { subject } + .to change { report.reload.unresolved? }.from(true).to(false) + .and create_an_action_log expect(response).to have_http_status(200) end end @@ -200,7 +204,9 @@ RSpec.describe 'Reports' do it_behaves_like 'forbidden for wrong role', '' it 'marks report as unresolved', :aggregate_failures do - expect { subject }.to change { report.reload.unresolved? }.from(false).to(true) + expect { subject } + .to change { report.reload.unresolved? }.from(false).to(true) + .and create_an_action_log expect(response).to have_http_status(200) end end @@ -216,7 +222,9 @@ RSpec.describe 'Reports' do it_behaves_like 'forbidden for wrong role', '' it 'assigns report to the requesting user', :aggregate_failures do - expect { subject }.to change { report.reload.assigned_account_id }.from(nil).to(user.account.id) + expect { subject } + .to change { report.reload.assigned_account_id }.from(nil).to(user.account.id) + .and create_an_action_log expect(response).to have_http_status(200) end end @@ -232,8 +240,16 @@ RSpec.describe 'Reports' do it_behaves_like 'forbidden for wrong role', '' it 'unassigns report from assignee', :aggregate_failures do - expect { subject }.to change { report.reload.assigned_account_id }.from(user.account.id).to(nil) + expect { subject } + .to change { report.reload.assigned_account_id }.from(user.account.id).to(nil) + .and create_an_action_log expect(response).to have_http_status(200) end end + + private + + def create_an_action_log + change(Admin::ActionLog, :count).by(1) + end end From dedefdc303a2438d9b9026797bb00a41930b91e2 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 06:40:24 -0500 Subject: [PATCH 015/212] Move length value mapping to constant in ids to bigints migration (#29048) --- db/migrate/20170918125918_ids_to_bigints.rb | 152 +++++++++++--------- 1 file changed, 82 insertions(+), 70 deletions(-) diff --git a/db/migrate/20170918125918_ids_to_bigints.rb b/db/migrate/20170918125918_ids_to_bigints.rb index 83c5ab971b..64f1d0093a 100644 --- a/db/migrate/20170918125918_ids_to_bigints.rb +++ b/db/migrate/20170918125918_ids_to_bigints.rb @@ -7,80 +7,73 @@ class IdsToBigints < ActiveRecord::Migration[5.1] include Mastodon::MigrationHelpers include Mastodon::MigrationWarning + TABLE_COLUMN_MAPPING = [ + [:account_domain_blocks, :account_id], + [:account_domain_blocks, :id], + [:accounts, :id], + [:blocks, :account_id], + [:blocks, :id], + [:blocks, :target_account_id], + [:conversation_mutes, :account_id], + [:conversation_mutes, :id], + [:domain_blocks, :id], + [:favourites, :account_id], + [:favourites, :id], + [:favourites, :status_id], + [:follow_requests, :account_id], + [:follow_requests, :id], + [:follow_requests, :target_account_id], + [:follows, :account_id], + [:follows, :id], + [:follows, :target_account_id], + [:imports, :account_id], + [:imports, :id], + [:media_attachments, :account_id], + [:media_attachments, :id], + [:mentions, :account_id], + [:mentions, :id], + [:mutes, :account_id], + [:mutes, :id], + [:mutes, :target_account_id], + [:notifications, :account_id], + [:notifications, :from_account_id], + [:notifications, :id], + [:oauth_access_grants, :application_id], + [:oauth_access_grants, :id], + [:oauth_access_grants, :resource_owner_id], + [:oauth_access_tokens, :application_id], + [:oauth_access_tokens, :id], + [:oauth_access_tokens, :resource_owner_id], + [:oauth_applications, :id], + [:oauth_applications, :owner_id], + [:reports, :account_id], + [:reports, :action_taken_by_account_id], + [:reports, :id], + [:reports, :target_account_id], + [:session_activations, :access_token_id], + [:session_activations, :user_id], + [:session_activations, :web_push_subscription_id], + [:settings, :id], + [:settings, :thing_id], + [:statuses, :account_id], + [:statuses, :application_id], + [:statuses, :in_reply_to_account_id], + [:stream_entries, :account_id], + [:stream_entries, :id], + [:subscriptions, :account_id], + [:subscriptions, :id], + [:tags, :id], + [:users, :account_id], + [:users, :id], + [:web_settings, :id], + [:web_settings, :user_id], + ].freeze + disable_ddl_transaction! def migrate_columns(to_type) - included_columns = [ - [:account_domain_blocks, :account_id], - [:account_domain_blocks, :id], - [:accounts, :id], - [:blocks, :account_id], - [:blocks, :id], - [:blocks, :target_account_id], - [:conversation_mutes, :account_id], - [:conversation_mutes, :id], - [:domain_blocks, :id], - [:favourites, :account_id], - [:favourites, :id], - [:favourites, :status_id], - [:follow_requests, :account_id], - [:follow_requests, :id], - [:follow_requests, :target_account_id], - [:follows, :account_id], - [:follows, :id], - [:follows, :target_account_id], - [:imports, :account_id], - [:imports, :id], - [:media_attachments, :account_id], - [:media_attachments, :id], - [:mentions, :account_id], - [:mentions, :id], - [:mutes, :account_id], - [:mutes, :id], - [:mutes, :target_account_id], - [:notifications, :account_id], - [:notifications, :from_account_id], - [:notifications, :id], - [:oauth_access_grants, :application_id], - [:oauth_access_grants, :id], - [:oauth_access_grants, :resource_owner_id], - [:oauth_access_tokens, :application_id], - [:oauth_access_tokens, :id], - [:oauth_access_tokens, :resource_owner_id], - [:oauth_applications, :id], - [:oauth_applications, :owner_id], - [:reports, :account_id], - [:reports, :action_taken_by_account_id], - [:reports, :id], - [:reports, :target_account_id], - [:session_activations, :access_token_id], - [:session_activations, :user_id], - [:session_activations, :web_push_subscription_id], - [:settings, :id], - [:settings, :thing_id], - [:statuses, :account_id], - [:statuses, :application_id], - [:statuses, :in_reply_to_account_id], - [:stream_entries, :account_id], - [:stream_entries, :id], - [:subscriptions, :account_id], - [:subscriptions, :id], - [:tags, :id], - [:users, :account_id], - [:users, :id], - [:web_settings, :id], - [:web_settings, :user_id], - ] - included_columns << [:deprecated_preview_cards, :id] if table_exists?(:deprecated_preview_cards) + display_warning - migration_duration_warning(<<~EXPLANATION) - This migration has some sections that can be safely interrupted - and restarted later, and will tell you when those are occurring. - - For more information, see https://github.com/mastodon/mastodon/pull/5088 - EXPLANATION - - tables = included_columns.map(&:first).uniq table_sizes = {} # Sort tables by their size @@ -103,6 +96,25 @@ class IdsToBigints < ActiveRecord::Migration[5.1] end end + def display_warning + migration_duration_warning(<<~EXPLANATION) + This migration has some sections that can be safely interrupted + and restarted later, and will tell you when those are occurring. + + For more information, see https://github.com/mastodon/mastodon/pull/5088 + EXPLANATION + end + + def tables + included_columns.map(&:first).uniq + end + + def included_columns + TABLE_COLUMN_MAPPING.dup.tap do |included_columns| + included_columns << [:deprecated_preview_cards, :id] if table_exists?(:deprecated_preview_cards) + end + end + def up migrate_columns(:bigint) end From 4fb7f611de1cf33a74ff57f1c400e9cba7a24771 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Tue, 6 Feb 2024 13:38:14 +0100 Subject: [PATCH 016/212] Return domain block digests from admin domain blocks API (#29092) --- app/serializers/rest/admin/domain_block_serializer.rb | 6 +++++- spec/requests/api/v1/admin/domain_blocks_spec.rb | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/serializers/rest/admin/domain_block_serializer.rb b/app/serializers/rest/admin/domain_block_serializer.rb index b955d008a6..e94a337cb8 100644 --- a/app/serializers/rest/admin/domain_block_serializer.rb +++ b/app/serializers/rest/admin/domain_block_serializer.rb @@ -1,11 +1,15 @@ # frozen_string_literal: true class REST::Admin::DomainBlockSerializer < ActiveModel::Serializer - attributes :id, :domain, :created_at, :severity, + attributes :id, :domain, :digest, :created_at, :severity, :reject_media, :reject_reports, :private_comment, :public_comment, :obfuscate def id object.id.to_s end + + def digest + object.domain_digest + end end diff --git a/spec/requests/api/v1/admin/domain_blocks_spec.rb b/spec/requests/api/v1/admin/domain_blocks_spec.rb index 1fb6fc8228..47aaf44d80 100644 --- a/spec/requests/api/v1/admin/domain_blocks_spec.rb +++ b/spec/requests/api/v1/admin/domain_blocks_spec.rb @@ -49,6 +49,7 @@ RSpec.describe 'Domain Blocks' do { id: domain_block.id.to_s, domain: domain_block.domain, + digest: domain_block.domain_digest, created_at: domain_block.created_at.strftime('%Y-%m-%dT%H:%M:%S.%LZ'), severity: domain_block.severity.to_s, reject_media: domain_block.reject_media, @@ -97,6 +98,7 @@ RSpec.describe 'Domain Blocks' do { id: domain_block.id.to_s, domain: domain_block.domain, + digest: domain_block.domain_digest, created_at: domain_block.created_at.strftime('%Y-%m-%dT%H:%M:%S.%LZ'), severity: domain_block.severity.to_s, reject_media: domain_block.reject_media, @@ -188,6 +190,7 @@ RSpec.describe 'Domain Blocks' do { id: domain_block.id.to_s, domain: domain_block.domain, + digest: domain_block.domain_digest, severity: 'suspend', } ) From df7acdcee516d6321a40c0f1cbc55c41b039e3c7 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 07:47:04 -0500 Subject: [PATCH 017/212] Update markers API spec for error case (#29096) --- spec/requests/api/v1/markers_spec.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/spec/requests/api/v1/markers_spec.rb b/spec/requests/api/v1/markers_spec.rb index a1ca4ba754..b04adf2594 100644 --- a/spec/requests/api/v1/markers_spec.rb +++ b/spec/requests/api/v1/markers_spec.rb @@ -52,5 +52,19 @@ RSpec.describe 'API Markers' do expect(user.markers.first.last_read_id).to eq 70_120 end end + + context 'when database object becomes stale' do + before do + allow(Marker).to receive(:transaction).and_raise(ActiveRecord::StaleObjectError) + post '/api/v1/markers', headers: headers, params: { home: { last_read_id: '69420' } } + end + + it 'returns error json' do + expect(response) + .to have_http_status(409) + expect(body_as_json) + .to include(error: /Conflict during update/) + end + end end end From 577520b6376f5ad14aa343a2aba881e7e1ef1897 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 07:49:48 -0500 Subject: [PATCH 018/212] Replace deprecated `Sidekiq::Testing` block style (#29097) --- spec/rails_helper.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index aaf587f49b..5125339096 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -95,8 +95,13 @@ RSpec.configure do |config| self.use_transactional_tests = true end - config.around(:each, :sidekiq_inline) do |example| - Sidekiq::Testing.inline!(&example) + config.around do |example| + if example.metadata[:sidekiq_inline] == true + Sidekiq::Testing.inline! + else + Sidekiq::Testing.fake! + end + example.run end config.before :each, type: :cli do From e8cc98977d081898682e0ca25154be7fb2c358fb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 13:52:28 +0100 Subject: [PATCH 019/212] Update dependency bootsnap to '~> 1.18.0' (#29019) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 5f09b4beb2..355e69b0c4 100644 --- a/Gemfile +++ b/Gemfile @@ -26,7 +26,7 @@ gem 'blurhash', '~> 0.1' gem 'active_model_serializers', '~> 0.10' gem 'addressable', '~> 2.8' -gem 'bootsnap', '~> 1.17.0', require: false +gem 'bootsnap', '~> 1.18.0', require: false gem 'browser' gem 'charlock_holmes', '~> 0.7.7' gem 'chewy', '~> 7.3' diff --git a/Gemfile.lock b/Gemfile.lock index d6a51e2f0a..57ad96437f 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -144,7 +144,7 @@ GEM binding_of_caller (1.0.0) debug_inspector (>= 0.0.1) blurhash (0.1.7) - bootsnap (1.17.1) + bootsnap (1.18.3) msgpack (~> 1.2) brakeman (6.1.1) racc @@ -823,7 +823,7 @@ DEPENDENCIES better_errors (~> 2.9) binding_of_caller (~> 1.0) blurhash (~> 0.1) - bootsnap (~> 1.17.0) + bootsnap (~> 1.18.0) brakeman (~> 6.0) browser bundler-audit (~> 0.9) From 0877f6fda417d27e7e6b9bd1d888dec1b97a7792 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 07:56:22 -0500 Subject: [PATCH 020/212] Remove redundant `return` in `IntentsController` (#29099) --- app/controllers/intents_controller.rb | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/app/controllers/intents_controller.rb b/app/controllers/intents_controller.rb index ea024e30e6..65c315208d 100644 --- a/app/controllers/intents_controller.rb +++ b/app/controllers/intents_controller.rb @@ -1,27 +1,26 @@ # frozen_string_literal: true class IntentsController < ApplicationController - before_action :check_uri + EXPECTED_SCHEME = 'web+mastodon' + before_action :handle_invalid_uri, unless: :valid_uri? rescue_from Addressable::URI::InvalidURIError, with: :handle_invalid_uri def show - if uri.scheme == 'web+mastodon' - case uri.host - when 'follow' - return redirect_to authorize_interaction_path(uri: uri.query_values['uri'].delete_prefix('acct:')) - when 'share' - return redirect_to share_path(text: uri.query_values['text']) - end + case uri.host + when 'follow' + redirect_to authorize_interaction_path(uri: uri.query_values['uri'].delete_prefix('acct:')) + when 'share' + redirect_to share_path(text: uri.query_values['text']) + else + handle_invalid_uri end - - not_found end private - def check_uri - not_found if uri.blank? + def valid_uri? + uri.present? && uri.scheme == EXPECTED_SCHEME end def handle_invalid_uri From 978fdc71cab327c98b3c03c05f3f716fbeedf6c9 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 08:04:02 -0500 Subject: [PATCH 021/212] Reduce expectation count in example from `ProcessAccountService` spec (#29100) --- .rubocop_todo.yml | 2 +- .../process_account_service_spec.rb | 24 ++++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index c8165c1edf..09e9fd73d8 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -39,7 +39,7 @@ RSpec/ExampleLength: Max: 22 RSpec/MultipleExpectations: - Max: 8 + Max: 7 # Configuration parameters: AllowSubject. RSpec/MultipleMemoizedHelpers: diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb index 9abe03181e..824577d1b0 100644 --- a/spec/services/activitypub/process_account_service_spec.rb +++ b/spec/services/activitypub/process_account_service_spec.rb @@ -21,14 +21,22 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do it 'parses out of attachment' do account = subject.call('alice', 'example.com', payload) - expect(account.fields).to be_a Array - expect(account.fields.size).to eq 2 - expect(account.fields[0]).to be_a Account::Field - expect(account.fields[0].name).to eq 'Pronouns' - expect(account.fields[0].value).to eq 'They/them' - expect(account.fields[1]).to be_a Account::Field - expect(account.fields[1].name).to eq 'Occupation' - expect(account.fields[1].value).to eq 'Unit test' + + expect(account.fields) + .to be_an(Array) + .and have_attributes(size: 2) + expect(account.fields.first) + .to be_an(Account::Field) + .and have_attributes( + name: eq('Pronouns'), + value: eq('They/them') + ) + expect(account.fields.last) + .to be_an(Account::Field) + .and have_attributes( + name: eq('Occupation'), + value: eq('Unit test') + ) end end From 2d6ab445562fd6c4d56d7aef5dd406c15de8bbf9 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 08:10:00 -0500 Subject: [PATCH 022/212] Reduce request/response round-trips in ap/collections controller spec (#29102) --- .../collections_controller_spec.rb | 92 ++++++------------- 1 file changed, 29 insertions(+), 63 deletions(-) diff --git a/spec/controllers/activitypub/collections_controller_spec.rb b/spec/controllers/activitypub/collections_controller_spec.rb index cf484ff5a4..11ef03c842 100644 --- a/spec/controllers/activitypub/collections_controller_spec.rb +++ b/spec/controllers/activitypub/collections_controller_spec.rb @@ -17,34 +17,27 @@ RSpec.describe ActivityPub::CollectionsController do end describe 'GET #show' do - context 'when id is "featured"' do - context 'without signature' do - subject(:response) { get :show, params: { id: 'featured', account_username: account.username } } + subject(:response) { get :show, params: { id: id, account_username: account.username } } - let(:body) { body_as_json } + context 'when id is "featured"' do + let(:id) { 'featured' } + + context 'without signature' do let(:remote_account) { nil } - it 'returns http success' do + it 'returns http success and correct media type' do expect(response).to have_http_status(200) - end - - it 'returns application/activity+json' do expect(response.media_type).to eq 'application/activity+json' end it_behaves_like 'cacheable response' - it 'returns orderedItems with pinned statuses' do - expect(body[:orderedItems]).to be_an Array - expect(body[:orderedItems].size).to eq 3 - end - - it 'includes URI of private pinned status' do - expect(body[:orderedItems]).to include(ActivityPub::TagManager.instance.uri_for(private_pinned)) - end - - it 'does not include contents of private pinned status' do - expect(response.body).to_not include(private_pinned.text) + it 'returns orderedItems with correct items' do + expect(body_as_json[:orderedItems]) + .to be_an(Array) + .and have_attributes(size: 3) + .and include(ActivityPub::TagManager.instance.uri_for(private_pinned)) + .and not_include(private_pinned.text) end context 'when account is permanently suspended' do @@ -73,33 +66,19 @@ RSpec.describe ActivityPub::CollectionsController do let(:remote_account) { Fabricate(:account, domain: 'example.com') } context 'when getting a featured resource' do - before do - get :show, params: { id: 'featured', account_username: account.username } - end - - it 'returns http success' do + it 'returns http success and correct media type' do expect(response).to have_http_status(200) - end - - it 'returns application/activity+json' do expect(response.media_type).to eq 'application/activity+json' end it_behaves_like 'cacheable response' - it 'returns orderedItems with pinned statuses' do - json = body_as_json - expect(json[:orderedItems]).to be_an Array - expect(json[:orderedItems].size).to eq 3 - end - - it 'includes URI of private pinned status' do - json = body_as_json - expect(json[:orderedItems]).to include(ActivityPub::TagManager.instance.uri_for(private_pinned)) - end - - it 'does not include contents of private pinned status' do - expect(response.body).to_not include(private_pinned.text) + it 'returns orderedItems with expected items' do + expect(body_as_json[:orderedItems]) + .to be_an(Array) + .and have_attributes(size: 3) + .and include(ActivityPub::TagManager.instance.uri_for(private_pinned)) + .and not_include(private_pinned.text) end end @@ -111,50 +90,36 @@ RSpec.describe ActivityPub::CollectionsController do context 'when signed request account is blocked' do before do account.block!(remote_account) - get :show, params: { id: 'featured', account_username: account.username } end - it 'returns http success' do + it 'returns http success and correct media type and cache headers' do expect(response).to have_http_status(200) - end - - it 'returns application/activity+json' do expect(response.media_type).to eq 'application/activity+json' - end - - it 'returns private Cache-Control header' do expect(response.headers['Cache-Control']).to include 'private' end it 'returns empty orderedItems' do - json = body_as_json - expect(json[:orderedItems]).to be_an Array - expect(json[:orderedItems].size).to eq 0 + expect(body_as_json[:orderedItems]) + .to be_an(Array) + .and have_attributes(size: 0) end end context 'when signed request account is domain blocked' do before do account.block_domain!(remote_account.domain) - get :show, params: { id: 'featured', account_username: account.username } end - it 'returns http success' do + it 'returns http success and correct media type and cache headers' do expect(response).to have_http_status(200) - end - - it 'returns application/activity+json' do expect(response.media_type).to eq 'application/activity+json' - end - - it 'returns private Cache-Control header' do expect(response.headers['Cache-Control']).to include 'private' end it 'returns empty orderedItems' do - json = body_as_json - expect(json[:orderedItems]).to be_an Array - expect(json[:orderedItems].size).to eq 0 + expect(body_as_json[:orderedItems]) + .to be_an(Array) + .and have_attributes(size: 0) end end end @@ -162,8 +127,9 @@ RSpec.describe ActivityPub::CollectionsController do end context 'when id is not "featured"' do + let(:id) { 'hoge' } + it 'returns http not found' do - get :show, params: { id: 'hoge', account_username: account.username } expect(response).to have_http_status(404) end end From 69e61fff38b426109bd074ccf93f5d2874d430c2 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 08:18:37 -0500 Subject: [PATCH 023/212] Move direct serializer usage out of admin view partial (#29028) --- app/helpers/react_component_helper.rb | 11 +++++++++++ app/views/admin/reports/_media_attachments.html.haml | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/app/helpers/react_component_helper.rb b/app/helpers/react_component_helper.rb index ce616e8306..821a6f1e2d 100644 --- a/app/helpers/react_component_helper.rb +++ b/app/helpers/react_component_helper.rb @@ -15,9 +15,20 @@ module ReactComponentHelper div_tag_with_data(data) end + def serialized_media_attachments(media_attachments) + media_attachments.map { |attachment| serialized_attachment(attachment) } + end + private def div_tag_with_data(data) content_tag(:div, nil, data: data) end + + def serialized_attachment(attachment) + ActiveModelSerializers::SerializableResource.new( + attachment, + serializer: REST::MediaAttachmentSerializer + ).as_json + end end diff --git a/app/views/admin/reports/_media_attachments.html.haml b/app/views/admin/reports/_media_attachments.html.haml index 3c52d69178..45cc4c5aa3 100644 --- a/app/views/admin/reports/_media_attachments.html.haml +++ b/app/views/admin/reports/_media_attachments.html.haml @@ -12,6 +12,6 @@ = react_component :media_gallery, height: 343, lang: status.language, - media: status.ordered_media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json }, + media: serialized_media_attachments(status.ordered_media_attachments), sensitive: status.sensitive?, visible: false From cf42eba0f997aa8065beac853b79d993e8a2495b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 14:31:54 +0100 Subject: [PATCH 024/212] Update dependency brakeman to v6.1.2 (#29062) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 57ad96437f..b76f449b26 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -146,7 +146,7 @@ GEM blurhash (0.1.7) bootsnap (1.18.3) msgpack (~> 1.2) - brakeman (6.1.1) + brakeman (6.1.2) racc browser (5.3.1) brpoplpush-redis_script (0.1.3) From 93a5b3f9df7dcf1965525ee2a1202e5f1e07bf05 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 08:33:42 -0500 Subject: [PATCH 025/212] Move status serializer chooser to private method (#29030) --- app/controllers/api/v1/statuses_controller.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb index 064e7632a8..702896db24 100644 --- a/app/controllers/api/v1/statuses_controller.rb +++ b/app/controllers/api/v1/statuses_controller.rb @@ -71,7 +71,7 @@ class Api::V1::StatusesController < Api::BaseController with_rate_limit: true ) - render json: @status, serializer: @status.is_a?(ScheduledStatus) ? REST::ScheduledStatusSerializer : REST::StatusSerializer + render json: @status, serializer: serializer_for_status rescue PostStatusService::UnexpectedMentionsError => e unexpected_accounts = ActiveModel::Serializer::CollectionSerializer.new( e.accounts, @@ -155,6 +155,10 @@ class Api::V1::StatusesController < Api::BaseController ) end + def serializer_for_status + @status.is_a?(ScheduledStatus) ? REST::ScheduledStatusSerializer : REST::StatusSerializer + end + def pagination_params(core_params) params.slice(:limit).permit(:limit).merge(core_params) end From 0df86d77fd5f57fc88cfd00a2cf2c265215a2839 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 09:36:04 -0500 Subject: [PATCH 026/212] Reduce `RSpec/ExampleLength` in PostStatusService spec example (#29105) --- spec/services/post_status_service_spec.rb | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb index 1e5c420a63..d10a82607e 100644 --- a/spec/services/post_status_service_spec.rb +++ b/spec/services/post_status_service_spec.rb @@ -228,13 +228,7 @@ RSpec.describe PostStatusService, type: :service do subject.call( account, text: 'test status update', - media_ids: [ - Fabricate(:media_attachment, account: account), - Fabricate(:media_attachment, account: account), - Fabricate(:media_attachment, account: account), - Fabricate(:media_attachment, account: account), - Fabricate(:media_attachment, account: account), - ].map(&:id) + media_ids: Array.new(5) { Fabricate(:media_attachment, account: account) }.map(&:id) ) end.to raise_error( Mastodon::ValidationError, From 2f19ddd1fa1c14db1edaedc93f29bb4f66ab2cf0 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 09:54:26 -0500 Subject: [PATCH 027/212] Move status serializer error handling to private method (#29031) --- app/controllers/api/v1/statuses_controller.rb | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb index 702896db24..01c3718763 100644 --- a/app/controllers/api/v1/statuses_controller.rb +++ b/app/controllers/api/v1/statuses_controller.rb @@ -73,11 +73,7 @@ class Api::V1::StatusesController < Api::BaseController render json: @status, serializer: serializer_for_status rescue PostStatusService::UnexpectedMentionsError => e - unexpected_accounts = ActiveModel::Serializer::CollectionSerializer.new( - e.accounts, - serializer: REST::AccountSerializer - ) - render json: { error: e.message, unexpected_accounts: unexpected_accounts }, status: 422 + render json: unexpected_accounts_error_json(e), status: 422 end def update @@ -159,6 +155,17 @@ class Api::V1::StatusesController < Api::BaseController @status.is_a?(ScheduledStatus) ? REST::ScheduledStatusSerializer : REST::StatusSerializer end + def unexpected_accounts_error_json(error) + { + error: error.message, + unexpected_accounts: serialized_accounts(error.accounts), + } + end + + def serialized_accounts(accounts) + ActiveModel::Serializer::CollectionSerializer.new(accounts, serializer: REST::AccountSerializer) + end + def pagination_params(core_params) params.slice(:limit).permit(:limit).merge(core_params) end From 64300e0fe344b9dee015e65423c327742db246af Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 6 Feb 2024 16:32:09 +0100 Subject: [PATCH 028/212] Fix self-destruct schedule not actually replacing initial schedule (#29049) --- config/initializers/sidekiq.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb index 9a2743ed5b..53b02edc40 100644 --- a/config/initializers/sidekiq.rb +++ b/config/initializers/sidekiq.rb @@ -26,6 +26,7 @@ Sidekiq.configure_server do |config| 'queue' => 'scheduler', }, } + SidekiqScheduler::Scheduler.instance.reload_schedule! end end From 1e0b0a3486cf04666b7cbd67a4a72cf7f8068c97 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 6 Feb 2024 11:42:25 -0500 Subject: [PATCH 029/212] Use SQL heredoc on long statement lines in migrations (#29112) --- ...0317193015_add_search_index_to_accounts.rb | 12 +++++++- ...5042_add_case_insensitive_index_to_tags.rb | 29 +++++++++++++++++-- ..._fix_canonical_email_blocks_foreign_key.rb | 17 +++++++++-- .../20220309213005_fix_reblog_deleted_at.rb | 11 ++++++- 4 files changed, 62 insertions(+), 7 deletions(-) diff --git a/db/migrate/20170317193015_add_search_index_to_accounts.rb b/db/migrate/20170317193015_add_search_index_to_accounts.rb index e29da61b15..0edc381549 100644 --- a/db/migrate/20170317193015_add_search_index_to_accounts.rb +++ b/db/migrate/20170317193015_add_search_index_to_accounts.rb @@ -2,7 +2,17 @@ class AddSearchIndexToAccounts < ActiveRecord::Migration[5.0] def up - execute 'CREATE INDEX search_index ON accounts USING gin((setweight(to_tsvector(\'simple\', accounts.display_name), \'A\') || setweight(to_tsvector(\'simple\', accounts.username), \'B\') || setweight(to_tsvector(\'simple\', coalesce(accounts.domain, \'\')), \'C\')));' + execute <<~SQL.squish + CREATE INDEX search_index + ON accounts + USING gin( + ( + setweight(to_tsvector('simple', accounts.display_name), 'A') || + setweight(to_tsvector('simple', accounts.username), 'B') || + setweight(to_tsvector('simple', coalesce(accounts.domain, '')), 'C') + ) + ) + SQL end def down diff --git a/db/migrate/20190726175042_add_case_insensitive_index_to_tags.rb b/db/migrate/20190726175042_add_case_insensitive_index_to_tags.rb index f2d3aa8ee8..02f073e14f 100644 --- a/db/migrate/20190726175042_add_case_insensitive_index_to_tags.rb +++ b/db/migrate/20190726175042_add_case_insensitive_index_to_tags.rb @@ -9,9 +9,32 @@ class AddCaseInsensitiveIndexToTags < ActiveRecord::Migration[5.2] redundant_tag_ids = row['ids'].split(',')[1..] safety_assured do - execute "UPDATE accounts_tags AS t0 SET tag_id = #{canonical_tag_id} WHERE tag_id IN (#{redundant_tag_ids.join(', ')}) AND NOT EXISTS (SELECT t1.tag_id FROM accounts_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.account_id = t0.account_id)" - execute "UPDATE statuses_tags AS t0 SET tag_id = #{canonical_tag_id} WHERE tag_id IN (#{redundant_tag_ids.join(', ')}) AND NOT EXISTS (SELECT t1.tag_id FROM statuses_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.status_id = t0.status_id)" - execute "UPDATE featured_tags AS t0 SET tag_id = #{canonical_tag_id} WHERE tag_id IN (#{redundant_tag_ids.join(', ')}) AND NOT EXISTS (SELECT t1.tag_id FROM featured_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.account_id = t0.account_id)" + execute <<~SQL.squish + UPDATE accounts_tags + AS t0 + SET tag_id = #{canonical_tag_id} + WHERE + tag_id IN (#{redundant_tag_ids.join(', ')}) + AND NOT EXISTS (SELECT t1.tag_id FROM accounts_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.account_id = t0.account_id) + SQL + + execute <<~SQL.squish + UPDATE statuses_tags + AS t0 + SET tag_id = #{canonical_tag_id} + WHERE + tag_id IN (#{redundant_tag_ids.join(', ')}) + AND NOT EXISTS (SELECT t1.tag_id FROM statuses_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.status_id = t0.status_id) + SQL + + execute <<~SQL.squish + UPDATE featured_tags + AS t0 + SET tag_id = #{canonical_tag_id} + WHERE + tag_id IN (#{redundant_tag_ids.join(', ')}) + AND NOT EXISTS (SELECT t1.tag_id FROM featured_tags AS t1 WHERE t1.tag_id = #{canonical_tag_id} AND t1.account_id = t0.account_id) + SQL end Tag.where(id: redundant_tag_ids).in_batches.delete_all diff --git a/db/migrate/20210630000137_fix_canonical_email_blocks_foreign_key.rb b/db/migrate/20210630000137_fix_canonical_email_blocks_foreign_key.rb index 9b475966bb..90a1b1a5cf 100644 --- a/db/migrate/20210630000137_fix_canonical_email_blocks_foreign_key.rb +++ b/db/migrate/20210630000137_fix_canonical_email_blocks_foreign_key.rb @@ -3,13 +3,26 @@ class FixCanonicalEmailBlocksForeignKey < ActiveRecord::Migration[6.1] def up safety_assured do - execute 'ALTER TABLE canonical_email_blocks DROP CONSTRAINT fk_rails_1ecb262096, ADD CONSTRAINT fk_rails_1ecb262096 FOREIGN KEY (reference_account_id) REFERENCES accounts(id) ON DELETE CASCADE;' + execute <<~SQL.squish + ALTER TABLE canonical_email_blocks + DROP CONSTRAINT fk_rails_1ecb262096, + ADD CONSTRAINT fk_rails_1ecb262096 + FOREIGN KEY (reference_account_id) + REFERENCES accounts(id) + ON DELETE CASCADE + SQL end end def down safety_assured do - execute 'ALTER TABLE canonical_email_blocks DROP CONSTRAINT fk_rails_1ecb262096, ADD CONSTRAINT fk_rails_1ecb262096 FOREIGN KEY (reference_account_id) REFERENCES accounts(id);' + execute <<~SQL.squish + ALTER TABLE canonical_email_blocks + DROP CONSTRAINT fk_rails_1ecb262096, + ADD CONSTRAINT fk_rails_1ecb262096 + FOREIGN KEY (reference_account_id) + REFERENCES accounts(id) + SQL end end end diff --git a/db/migrate/20220309213005_fix_reblog_deleted_at.rb b/db/migrate/20220309213005_fix_reblog_deleted_at.rb index e3474beeb1..7fb9bff26c 100644 --- a/db/migrate/20220309213005_fix_reblog_deleted_at.rb +++ b/db/migrate/20220309213005_fix_reblog_deleted_at.rb @@ -4,7 +4,16 @@ class FixReblogDeletedAt < ActiveRecord::Migration[6.1] disable_ddl_transaction! def up - safety_assured { execute 'UPDATE statuses s SET deleted_at = r.deleted_at FROM statuses r WHERE s.reblog_of_id = r.id AND r.deleted_at IS NOT NULL' } + safety_assured do + execute <<~SQL.squish + UPDATE statuses s + SET deleted_at = r.deleted_at + FROM statuses r + WHERE + s.reblog_of_id = r.id + AND r.deleted_at IS NOT NULL + SQL + end end def down; end From 7ee93b74317c0b51516146fbe32e72cd9bbb151c Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 6 Feb 2024 18:10:17 +0100 Subject: [PATCH 030/212] Change `source` attribute of `Suggestion` entity in `/api/v2/suggestions` back to a string (#29108) --- .../components/inline_follow_suggestions.jsx | 8 ++++---- app/models/account_suggestions.rb | 4 ++-- app/models/account_suggestions/suggestion.rb | 2 +- app/serializers/rest/suggestion_serializer.rb | 15 +++++++++++++- spec/requests/api/v2/suggestions_spec.rb | 20 ++++++++++++++++++- .../rest/suggestion_serializer_spec.rb | 2 +- 6 files changed, 41 insertions(+), 10 deletions(-) diff --git a/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx b/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx index ac414d04d6..f76526e045 100644 --- a/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx +++ b/app/javascript/mastodon/features/home_timeline/components/inline_follow_suggestions.jsx @@ -59,7 +59,7 @@ Source.propTypes = { id: PropTypes.oneOf(['friends_of_friends', 'similar_to_recently_followed', 'featured', 'most_followed', 'most_interactions']), }; -const Card = ({ id, source }) => { +const Card = ({ id, sources }) => { const intl = useIntl(); const account = useSelector(state => state.getIn(['accounts', id])); const relationship = useSelector(state => state.getIn(['relationships', id])); @@ -89,7 +89,7 @@ const Card = ({ id, source }) => {
- {firstVerifiedField ? : } + {firstVerifiedField ? : }
); diff --git a/app/javascript/mastodon/components/relative_timestamp.tsx b/app/javascript/mastodon/components/relative_timestamp.tsx index ac3ab0fb4d..12530c2b17 100644 --- a/app/javascript/mastodon/components/relative_timestamp.tsx +++ b/app/javascript/mastodon/components/relative_timestamp.tsx @@ -53,7 +53,6 @@ const messages = defineMessages({ }); const dateFormatOptions = { - hour12: false, year: 'numeric', month: 'short', day: '2-digit', diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 1171351c51..be9a1cec65 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -554,7 +554,7 @@ class Status extends ImmutablePureComponent {
- {status.get('edited_at') && *} + {status.get('edited_at') && *} diff --git a/app/javascript/mastodon/features/account/components/header.jsx b/app/javascript/mastodon/features/account/components/header.jsx index 233d208c64..07ea227c48 100644 --- a/app/javascript/mastodon/features/account/components/header.jsx +++ b/app/javascript/mastodon/features/account/components/header.jsx @@ -101,7 +101,6 @@ const dateFormatOptions = { month: 'short', day: 'numeric', year: 'numeric', - hour12: false, hour: '2-digit', minute: '2-digit', }; diff --git a/app/javascript/mastodon/features/getting_started/components/announcements.jsx b/app/javascript/mastodon/features/getting_started/components/announcements.jsx index ea36cefd7d..3c0b53b9e7 100644 --- a/app/javascript/mastodon/features/getting_started/components/announcements.jsx +++ b/app/javascript/mastodon/features/getting_started/components/announcements.jsx @@ -343,7 +343,7 @@ class Announcement extends ImmutablePureComponent { diff --git a/app/javascript/packs/public.jsx b/app/javascript/packs/public.jsx index 01b57dce39..d8a4c16034 100644 --- a/app/javascript/packs/public.jsx +++ b/app/javascript/packs/public.jsx @@ -65,7 +65,6 @@ function loaded() { const timeFormat = new Intl.DateTimeFormat(locale, { timeStyle: 'short', - hour12: false, }); const formatMessage = ({ id, defaultMessage }, values) => { From 14c65180df7d20bbbd5a9b8f80500301d3caca94 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 29 Feb 2024 05:51:11 -0500 Subject: [PATCH 184/212] Use sequence in `software_update` fabricator to allow multiple (#29438) --- spec/fabricators/software_update_fabricator.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/fabricators/software_update_fabricator.rb b/spec/fabricators/software_update_fabricator.rb index 622fff66e8..f4b607da0a 100644 --- a/spec/fabricators/software_update_fabricator.rb +++ b/spec/fabricators/software_update_fabricator.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true Fabricator(:software_update) do - version '99.99.99' + version { sequence(:version) { |point| "99.99.#{point}" } } urgent false type 'patch' end From e1fcb02867a0103977062ae11b86f80c5e3fd74f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 29 Feb 2024 06:00:58 -0500 Subject: [PATCH 185/212] Align `TagServersMeasure` to use `WITH` query style similar to others (#29435) --- .../metrics/measure/tag_servers_measure.rb | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/app/lib/admin/metrics/measure/tag_servers_measure.rb b/app/lib/admin/metrics/measure/tag_servers_measure.rb index 6eb46bca45..e0f1bf3440 100644 --- a/app/lib/admin/metrics/measure/tag_servers_measure.rb +++ b/app/lib/admin/metrics/measure/tag_servers_measure.rb @@ -28,14 +28,17 @@ class Admin::Metrics::Measure::TagServersMeasure < Admin::Metrics::Measure::Base def sql_query_string <<~SQL.squish SELECT axis.*, ( - SELECT count(distinct accounts.domain) AS value - FROM statuses - INNER JOIN statuses_tags ON statuses.id = statuses_tags.status_id - INNER JOIN accounts ON statuses.account_id = accounts.id - WHERE statuses_tags.tag_id = :tag_id - AND statuses.id BETWEEN :earliest_status_id AND :latest_status_id - AND date_trunc('day', statuses.created_at)::date = axis.period - ) + WITH tag_servers AS ( + SELECT DISTINCT accounts.domain + FROM statuses + INNER JOIN statuses_tags ON statuses.id = statuses_tags.status_id + INNER JOIN accounts ON statuses.account_id = accounts.id + WHERE statuses_tags.tag_id = :tag_id + AND statuses.id BETWEEN :earliest_status_id AND :latest_status_id + AND date_trunc('day', statuses.created_at)::date = axis.period + ) + SELECT COUNT(*) FROM tag_servers + ) AS value FROM ( SELECT generate_series(date_trunc('day', :start_at::timestamp)::date, date_trunc('day', :end_at::timestamp)::date, interval '1 day') AS period ) as axis From 6675bf574adf6fc898dde84fccdbd7abe17c3072 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 29 Feb 2024 08:47:38 -0500 Subject: [PATCH 186/212] Extract `parsed_uri_query_values` helper in ap/replies controller spec (#29410) --- .../activitypub/replies_controller_spec.rb | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/spec/controllers/activitypub/replies_controller_spec.rb b/spec/controllers/activitypub/replies_controller_spec.rb index 6b5a69d42a..db7f60d3f8 100644 --- a/spec/controllers/activitypub/replies_controller_spec.rb +++ b/spec/controllers/activitypub/replies_controller_spec.rb @@ -90,7 +90,7 @@ RSpec.describe ActivityPub::RepliesController do context 'when there are few self-replies' do it 'points next to replies from other people' do expect(page_json).to be_a Hash - expect(Addressable::URI.parse(page_json[:next]).query.split('&')).to include('only_other_accounts=true', 'page=true') + expect(parsed_uri_query_values(page_json[:next])).to include('only_other_accounts=true', 'page=true') end end @@ -101,7 +101,7 @@ RSpec.describe ActivityPub::RepliesController do it 'points next to other self-replies' do expect(page_json).to be_a Hash - expect(Addressable::URI.parse(page_json[:next]).query.split('&')).to include('only_other_accounts=false', 'page=true') + expect(parsed_uri_query_values(page_json[:next])).to include('only_other_accounts=false', 'page=true') end end end @@ -140,7 +140,7 @@ RSpec.describe ActivityPub::RepliesController do it 'points next to other replies' do expect(page_json).to be_a Hash - expect(Addressable::URI.parse(page_json[:next]).query.split('&')).to include('only_other_accounts=true', 'page=true') + expect(parsed_uri_query_values(page_json[:next])).to include('only_other_accounts=true', 'page=true') end end end @@ -196,6 +196,13 @@ RSpec.describe ActivityPub::RepliesController do private + def parsed_uri_query_values(uri) + Addressable::URI + .parse(uri) + .query + .split('&') + end + def ap_public_collection ActivityPub::TagManager::COLLECTIONS[:public] end From f24c62a5c809e9d3ec944804a9c28804d9896bbd Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 29 Feb 2024 14:54:02 +0100 Subject: [PATCH 187/212] Fix preview card player getting embedded when clicking on the external link button (#29457) --- app/javascript/mastodon/features/status/components/card.jsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/status/components/card.jsx b/app/javascript/mastodon/features/status/components/card.jsx index f37b558c4c..f47861f663 100644 --- a/app/javascript/mastodon/features/status/components/card.jsx +++ b/app/javascript/mastodon/features/status/components/card.jsx @@ -92,6 +92,10 @@ export default class Card extends PureComponent { this.setState({ embedded: true }); }; + handleExternalLinkClick = (e) => { + e.stopPropagation(); + }; + setRef = c => { this.node = c; }; @@ -201,7 +205,7 @@ export default class Card extends PureComponent {
- +
) : spoilerButton} From edd6aa70e1117818669cf0b85b7a3cde06a3c8c1 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 29 Feb 2024 14:54:06 +0100 Subject: [PATCH 188/212] Fix regression with search bar icon position (#29456) --- app/javascript/styles/mastodon/components.scss | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 29c91ef7bc..5bd11c3500 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -5210,10 +5210,6 @@ a.status-card { pointer-events: auto; opacity: 1; } - - @media screen and (min-width: $no-gap-breakpoint) { - inset-inline-start: 16px - 2px; - } } .icon-search { @@ -8265,7 +8261,7 @@ noscript { .search__input { border: 1px solid lighten($ui-base-color, 8%); padding: 10px; - padding-inline-end: 28px; + padding-inline-end: 30px; } .search__popout { From eb1b8f69de70bbf82fcf14663482c57a25161024 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 29 Feb 2024 09:21:56 -0500 Subject: [PATCH 189/212] Allow pagination `Link` headers on API accounts/statuses when pinned true (#29442) --- .../api/v1/accounts/statuses_controller.rb | 2 +- .../v1/accounts/statuses_controller_spec.rb | 48 ++++++++++++++++++- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/app/controllers/api/v1/accounts/statuses_controller.rb b/app/controllers/api/v1/accounts/statuses_controller.rb index fe4279302f..6a994ff541 100644 --- a/app/controllers/api/v1/accounts/statuses_controller.rb +++ b/app/controllers/api/v1/accounts/statuses_controller.rb @@ -4,7 +4,7 @@ class Api::V1::Accounts::StatusesController < Api::BaseController before_action -> { authorize_if_got_token! :read, :'read:statuses' } before_action :set_account - after_action :insert_pagination_headers, unless: -> { truthy_param?(:pinned) } + after_action :insert_pagination_headers def index cache_if_unauthenticated! diff --git a/spec/controllers/api/v1/accounts/statuses_controller_spec.rb b/spec/controllers/api/v1/accounts/statuses_controller_spec.rb index 9bf385c03d..102e3b8e91 100644 --- a/spec/controllers/api/v1/accounts/statuses_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/statuses_controller_spec.rb @@ -18,7 +18,8 @@ describe Api::V1::Accounts::StatusesController do get :index, params: { account_id: user.account.id, limit: 1 } expect(response).to have_http_status(200) - expect(response.headers['Link'].links.size).to eq(2) + expect(links_from_header.size) + .to eq(2) end context 'with only media' do @@ -55,10 +56,45 @@ describe Api::V1::Accounts::StatusesController do Fabricate(:status_pin, account: user.account, status: Fabricate(:status, account: user.account)) end - it 'returns http success' do + it 'returns http success and includes a header link' do get :index, params: { account_id: user.account.id, pinned: true } expect(response).to have_http_status(200) + expect(links_from_header.size) + .to eq(1) + expect(links_from_header) + .to contain_exactly( + have_attributes( + href: /pinned=true/, + attr_pairs: contain_exactly(['rel', 'prev']) + ) + ) + end + end + + context 'with enough pinned statuses to paginate' do + before do + stub_const 'Api::BaseController::DEFAULT_STATUSES_LIMIT', 1 + 2.times { Fabricate(:status_pin, account: user.account) } + end + + it 'returns http success and header pagination links to prev and next' do + get :index, params: { account_id: user.account.id, pinned: true } + + expect(response).to have_http_status(200) + expect(links_from_header.size) + .to eq(2) + expect(links_from_header) + .to contain_exactly( + have_attributes( + href: /pinned=true/, + attr_pairs: contain_exactly(['rel', 'next']) + ), + have_attributes( + href: /pinned=true/, + attr_pairs: contain_exactly(['rel', 'prev']) + ) + ) end end @@ -98,4 +134,12 @@ describe Api::V1::Accounts::StatusesController do end end end + + private + + def links_from_header + response + .headers['Link'] + .links + end end From 6dfe318f34d69066dc0f453a228fdfc6af84b62e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Feb 2024 16:20:39 +0100 Subject: [PATCH 190/212] Update dependency express to v4.18.3 (#29458) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 67 +++++++++++++++---------------------------------------- 1 file changed, 18 insertions(+), 49 deletions(-) diff --git a/yarn.lock b/yarn.lock index dda4ed326e..b336fef88c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,7 +42,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.23.5": version: 7.23.5 resolution: "@babel/code-frame@npm:7.23.5" dependencies: @@ -373,15 +373,6 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.22.15": - version: 7.23.6 - resolution: "@babel/parser@npm:7.23.6" - bin: - parser: ./bin/babel-parser.js - checksum: 10c0/6f76cd5ccae1fa9bcab3525b0865c6222e9c1d22f87abc69f28c5c7b2c8816a13361f5bd06bddbd5faf903f7320a8feba02545c981468acec45d12a03db7755e - languageName: node - linkType: hard - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.23.3" @@ -1500,18 +1491,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.3.3": - version: 7.22.15 - resolution: "@babel/template@npm:7.22.15" - dependencies: - "@babel/code-frame": "npm:^7.22.13" - "@babel/parser": "npm:^7.22.15" - "@babel/types": "npm:^7.22.15" - checksum: 10c0/9312edd37cf1311d738907003f2aa321a88a42ba223c69209abe4d7111db019d321805504f606c7fd75f21c6cf9d24d0a8223104cd21ebd207e241b6c551f454 - languageName: node - linkType: hard - -"@babel/template@npm:^7.23.9": +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.23.9, @babel/template@npm:^7.3.3": version: 7.23.9 resolution: "@babel/template@npm:7.23.9" dependencies: @@ -1540,18 +1520,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.23.6 - resolution: "@babel/types@npm:7.23.6" - dependencies: - "@babel/helper-string-parser": "npm:^7.23.4" - "@babel/helper-validator-identifier": "npm:^7.22.20" - to-fast-properties: "npm:^2.0.0" - checksum: 10c0/42cefce8a68bd09bb5828b4764aa5586c53c60128ac2ac012e23858e1c179347a4aac9c66fc577994fbf57595227611c5ec8270bf0cfc94ff033bbfac0550b70 - languageName: node - linkType: hard - -"@babel/types@npm:^7.23.9": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.23.9 resolution: "@babel/types@npm:7.23.9" dependencies: @@ -5026,12 +4995,12 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:1.20.1": - version: 1.20.1 - resolution: "body-parser@npm:1.20.1" +"body-parser@npm:1.20.2": + version: 1.20.2 + resolution: "body-parser@npm:1.20.2" dependencies: bytes: "npm:3.1.2" - content-type: "npm:~1.0.4" + content-type: "npm:~1.0.5" debug: "npm:2.6.9" depd: "npm:2.0.0" destroy: "npm:1.2.0" @@ -5039,10 +5008,10 @@ __metadata: iconv-lite: "npm:0.4.24" on-finished: "npm:2.4.1" qs: "npm:6.11.0" - raw-body: "npm:2.5.1" + raw-body: "npm:2.5.2" type-is: "npm:~1.6.18" unpipe: "npm:1.0.0" - checksum: 10c0/a202d493e2c10a33fb7413dac7d2f713be579c4b88343cd814b6df7a38e5af1901fc31044e04de176db56b16d9772aa25a7723f64478c20f4d91b1ac223bf3b8 + checksum: 10c0/06f1438fff388a2e2354c96aa3ea8147b79bfcb1262dfcc2aae68ec13723d01d5781680657b74e9f83c808266d5baf52804032fbde2b7382b89bd8cdb273ace9 languageName: node linkType: hard @@ -5872,7 +5841,7 @@ __metadata: languageName: node linkType: hard -"content-type@npm:~1.0.4": +"content-type@npm:~1.0.4, content-type@npm:~1.0.5": version: 1.0.5 resolution: "content-type@npm:1.0.5" checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af @@ -7740,12 +7709,12 @@ __metadata: linkType: hard "express@npm:^4.17.1, express@npm:^4.18.2": - version: 4.18.2 - resolution: "express@npm:4.18.2" + version: 4.18.3 + resolution: "express@npm:4.18.3" dependencies: accepts: "npm:~1.3.8" array-flatten: "npm:1.1.1" - body-parser: "npm:1.20.1" + body-parser: "npm:1.20.2" content-disposition: "npm:0.5.4" content-type: "npm:~1.0.4" cookie: "npm:0.5.0" @@ -7774,7 +7743,7 @@ __metadata: type-is: "npm:~1.6.18" utils-merge: "npm:1.0.1" vary: "npm:~1.1.2" - checksum: 10c0/75af556306b9241bc1d7bdd40c9744b516c38ce50ae3210658efcbf96e3aed4ab83b3432f06215eae5610c123bc4136957dc06e50dfc50b7d4d775af56c4c59c + checksum: 10c0/0b9eeafbac549e3c67d92d083bf1773e358359f41ad142b92121935c6348d29079b75054555b3f62de39263fffc8ba06898b09fdd3e213e28e714c03c5d9f44c languageName: node linkType: hard @@ -13412,15 +13381,15 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.5.1": - version: 2.5.1 - resolution: "raw-body@npm:2.5.1" +"raw-body@npm:2.5.2": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" dependencies: bytes: "npm:3.1.2" http-errors: "npm:2.0.0" iconv-lite: "npm:0.4.24" unpipe: "npm:1.0.0" - checksum: 10c0/5dad5a3a64a023b894ad7ab4e5c7c1ce34d3497fc7138d02f8c88a3781e68d8a55aa7d4fd3a458616fa8647cc228be314a1c03fb430a07521de78b32c4dd09d2 + checksum: 10c0/b201c4b66049369a60e766318caff5cb3cc5a900efd89bdac431463822d976ad0670912c931fdbdcf5543207daf6f6833bca57aa116e1661d2ea91e12ca692c4 languageName: node linkType: hard From 958a810553aac6b6cf21d9d107a47b6f68b2a401 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Thu, 29 Feb 2024 16:21:03 +0100 Subject: [PATCH 191/212] Convert `packs/admin.jsx` to Typescript (#29425) --- app/javascript/packs/admin.jsx | 244 ---------------------- app/javascript/packs/admin.tsx | 368 +++++++++++++++++++++++++++++++++ 2 files changed, 368 insertions(+), 244 deletions(-) delete mode 100644 app/javascript/packs/admin.jsx create mode 100644 app/javascript/packs/admin.tsx diff --git a/app/javascript/packs/admin.jsx b/app/javascript/packs/admin.jsx deleted file mode 100644 index 5f24d6677e..0000000000 --- a/app/javascript/packs/admin.jsx +++ /dev/null @@ -1,244 +0,0 @@ -import './public-path'; -import React from 'react'; -import { createRoot } from 'react-dom/client'; - -import Rails from '@rails/ujs'; - -import ready from '../mastodon/ready'; - -const setAnnouncementEndsAttributes = (target) => { - const valid = target?.value && target?.validity?.valid; - const element = document.querySelector('input[type="datetime-local"]#announcement_ends_at'); - if (valid) { - element.classList.remove('optional'); - element.required = true; - element.min = target.value; - } else { - element.classList.add('optional'); - element.removeAttribute('required'); - element.removeAttribute('min'); - } -}; - -Rails.delegate(document, 'input[type="datetime-local"]#announcement_starts_at', 'change', ({ target }) => { - setAnnouncementEndsAttributes(target); -}); - -const batchCheckboxClassName = '.batch-checkbox input[type="checkbox"]'; - -const showSelectAll = () => { - const selectAllMatchingElement = document.querySelector('.batch-table__select-all'); - selectAllMatchingElement.classList.add('active'); -}; - -const hideSelectAll = () => { - const selectAllMatchingElement = document.querySelector('.batch-table__select-all'); - const hiddenField = document.querySelector('#select_all_matching'); - const selectedMsg = document.querySelector('.batch-table__select-all .selected'); - const notSelectedMsg = document.querySelector('.batch-table__select-all .not-selected'); - - selectAllMatchingElement.classList.remove('active'); - selectedMsg.classList.remove('active'); - notSelectedMsg.classList.add('active'); - hiddenField.value = '0'; -}; - -Rails.delegate(document, '#batch_checkbox_all', 'change', ({ target }) => { - const selectAllMatchingElement = document.querySelector('.batch-table__select-all'); - - document.querySelectorAll(batchCheckboxClassName).forEach((content) => { - content.checked = target.checked; - }); - - if (selectAllMatchingElement) { - if (target.checked) { - showSelectAll(); - } else { - hideSelectAll(); - } - } -}); - -Rails.delegate(document, '.batch-table__select-all button', 'click', () => { - const hiddenField = document.querySelector('#select_all_matching'); - const active = hiddenField.value === '1'; - const selectedMsg = document.querySelector('.batch-table__select-all .selected'); - const notSelectedMsg = document.querySelector('.batch-table__select-all .not-selected'); - - if (active) { - hiddenField.value = '0'; - selectedMsg.classList.remove('active'); - notSelectedMsg.classList.add('active'); - } else { - hiddenField.value = '1'; - notSelectedMsg.classList.remove('active'); - selectedMsg.classList.add('active'); - } -}); - -Rails.delegate(document, batchCheckboxClassName, 'change', () => { - const checkAllElement = document.querySelector('#batch_checkbox_all'); - const selectAllMatchingElement = document.querySelector('.batch-table__select-all'); - - if (checkAllElement) { - const allCheckboxes = Array.from( - document.querySelectorAll(batchCheckboxClassName) - ); - checkAllElement.checked = allCheckboxes.every((content) => content.checked); - checkAllElement.indeterminate = !checkAllElement.checked && allCheckboxes.some((content) => content.checked); - - if (selectAllMatchingElement) { - if (checkAllElement.checked) { - showSelectAll(); - } else { - hideSelectAll(); - } - } - } -}); - -Rails.delegate(document, '.filter-subset--with-select select', 'change', ({ target }) => { - target.form.submit(); -}); - -const onDomainBlockSeverityChange = (target) => { - const rejectMediaDiv = document.querySelector('.input.with_label.domain_block_reject_media'); - const rejectReportsDiv = document.querySelector('.input.with_label.domain_block_reject_reports'); - - if (rejectMediaDiv) { - rejectMediaDiv.style.display = (target.value === 'suspend') ? 'none' : 'block'; - } - - if (rejectReportsDiv) { - rejectReportsDiv.style.display = (target.value === 'suspend') ? 'none' : 'block'; - } -}; - -Rails.delegate(document, '#domain_block_severity', 'change', ({ target }) => onDomainBlockSeverityChange(target)); - -const onEnableBootstrapTimelineAccountsChange = (target) => { - const bootstrapTimelineAccountsField = document.querySelector('#form_admin_settings_bootstrap_timeline_accounts'); - - if (bootstrapTimelineAccountsField) { - bootstrapTimelineAccountsField.disabled = !target.checked; - if (target.checked) { - bootstrapTimelineAccountsField.parentElement.classList.remove('disabled'); - bootstrapTimelineAccountsField.parentElement.parentElement.classList.remove('disabled'); - } else { - bootstrapTimelineAccountsField.parentElement.classList.add('disabled'); - bootstrapTimelineAccountsField.parentElement.parentElement.classList.add('disabled'); - } - } -}; - -Rails.delegate(document, '#form_admin_settings_enable_bootstrap_timeline_accounts', 'change', ({ target }) => onEnableBootstrapTimelineAccountsChange(target)); - -const onChangeRegistrationMode = (target) => { - const enabled = target.value === 'approved'; - - document.querySelectorAll('.form_admin_settings_registrations_mode .warning-hint').forEach((warning_hint) => { - warning_hint.style.display = target.value === 'open' ? 'inline' : 'none'; - }); - - document.querySelectorAll('#form_admin_settings_require_invite_text').forEach((input) => { - input.disabled = !enabled; - if (enabled) { - let element = input; - do { - element.classList.remove('disabled'); - element = element.parentElement; - } while (element && !element.classList.contains('fields-group')); - } else { - let element = input; - do { - element.classList.add('disabled'); - element = element.parentElement; - } while (element && !element.classList.contains('fields-group')); - } - }); -}; - -const convertUTCDateTimeToLocal = (value) => { - const date = new Date(value + 'Z'); - const twoChars = (x) => (x.toString().padStart(2, '0')); - return `${date.getFullYear()}-${twoChars(date.getMonth()+1)}-${twoChars(date.getDate())}T${twoChars(date.getHours())}:${twoChars(date.getMinutes())}`; -}; - -const convertLocalDatetimeToUTC = (value) => { - const re = /^([0-9]{4,})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2})/; - const match = re.exec(value); - const date = new Date(match[1], match[2] - 1, match[3], match[4], match[5]); - const fullISO8601 = date.toISOString(); - return fullISO8601.slice(0, fullISO8601.indexOf('T') + 6); -}; - -Rails.delegate(document, '#form_admin_settings_registrations_mode', 'change', ({ target }) => onChangeRegistrationMode(target)); - -ready(() => { - const domainBlockSeverityInput = document.getElementById('domain_block_severity'); - if (domainBlockSeverityInput) onDomainBlockSeverityChange(domainBlockSeverityInput); - - const enableBootstrapTimelineAccounts = document.getElementById('form_admin_settings_enable_bootstrap_timeline_accounts'); - if (enableBootstrapTimelineAccounts) onEnableBootstrapTimelineAccountsChange(enableBootstrapTimelineAccounts); - - const registrationMode = document.getElementById('form_admin_settings_registrations_mode'); - if (registrationMode) onChangeRegistrationMode(registrationMode); - - const checkAllElement = document.querySelector('#batch_checkbox_all'); - if (checkAllElement) { - const allCheckboxes = Array.from(document.querySelectorAll(batchCheckboxClassName)); - checkAllElement.checked = allCheckboxes.every( (content) => content.checked); - checkAllElement.indeterminate = !checkAllElement.checked && allCheckboxes.some((content) => content.checked); - } - - document.querySelector('a#add-instance-button')?.addEventListener('click', (e) => { - const domain = document.querySelector('input[type="text"]#by_domain')?.value; - - if (domain) { - const url = new URL(event.target.href); - url.searchParams.set('_domain', domain); - e.target.href = url; - } - }); - - document.querySelectorAll('input[type="datetime-local"]').forEach(element => { - if (element.value) { - element.value = convertUTCDateTimeToLocal(element.value); - } - if (element.placeholder) { - element.placeholder = convertUTCDateTimeToLocal(element.placeholder); - } - }); - - Rails.delegate(document, 'form', 'submit', ({ target }) => { - target.querySelectorAll('input[type="datetime-local"]').forEach(element => { - if (element.value && element.validity.valid) { - element.value = convertLocalDatetimeToUTC(element.value); - } - }); - }); - - const announcementStartsAt = document.querySelector('input[type="datetime-local"]#announcement_starts_at'); - if (announcementStartsAt) { - setAnnouncementEndsAttributes(announcementStartsAt); - } - - document.querySelectorAll('[data-admin-component]').forEach(element => { - const componentName = element.getAttribute('data-admin-component'); - const componentProps = JSON.parse(element.getAttribute('data-props')); - - import('../mastodon/containers/admin_component').then(({ default: AdminComponent }) => { - return import('../mastodon/components/admin/' + componentName).then(({ default: Component }) => { - const root = createRoot(element); - - root.render ( - - - , - ); - }); - }).catch(error => { - console.error(error); - }); - }); -}); diff --git a/app/javascript/packs/admin.tsx b/app/javascript/packs/admin.tsx new file mode 100644 index 0000000000..25e0889cd9 --- /dev/null +++ b/app/javascript/packs/admin.tsx @@ -0,0 +1,368 @@ +import './public-path'; +import { createRoot } from 'react-dom/client'; + +import Rails from '@rails/ujs'; + +import ready from '../mastodon/ready'; + +const setAnnouncementEndsAttributes = (target: HTMLInputElement) => { + const valid = target.value && target.validity.valid; + const element = document.querySelector( + 'input[type="datetime-local"]#announcement_ends_at', + ); + + if (!element) return; + + if (valid) { + element.classList.remove('optional'); + element.required = true; + element.min = target.value; + } else { + element.classList.add('optional'); + element.removeAttribute('required'); + element.removeAttribute('min'); + } +}; + +Rails.delegate( + document, + 'input[type="datetime-local"]#announcement_starts_at', + 'change', + ({ target }) => { + if (target instanceof HTMLInputElement) + setAnnouncementEndsAttributes(target); + }, +); + +const batchCheckboxClassName = '.batch-checkbox input[type="checkbox"]'; + +const showSelectAll = () => { + const selectAllMatchingElement = document.querySelector( + '.batch-table__select-all', + ); + selectAllMatchingElement?.classList.add('active'); +}; + +const hideSelectAll = () => { + const selectAllMatchingElement = document.querySelector( + '.batch-table__select-all', + ); + const hiddenField = document.querySelector( + 'input#select_all_matching', + ); + const selectedMsg = document.querySelector( + '.batch-table__select-all .selected', + ); + const notSelectedMsg = document.querySelector( + '.batch-table__select-all .not-selected', + ); + + selectAllMatchingElement?.classList.remove('active'); + selectedMsg?.classList.remove('active'); + notSelectedMsg?.classList.add('active'); + if (hiddenField) hiddenField.value = '0'; +}; + +Rails.delegate(document, '#batch_checkbox_all', 'change', ({ target }) => { + if (!(target instanceof HTMLInputElement)) return; + + const selectAllMatchingElement = document.querySelector( + '.batch-table__select-all', + ); + + document + .querySelectorAll(batchCheckboxClassName) + .forEach((content) => { + content.checked = target.checked; + }); + + if (selectAllMatchingElement) { + if (target.checked) { + showSelectAll(); + } else { + hideSelectAll(); + } + } +}); + +Rails.delegate(document, '.batch-table__select-all button', 'click', () => { + const hiddenField = document.querySelector( + '#select_all_matching', + ); + + if (!hiddenField) return; + + const active = hiddenField.value === '1'; + const selectedMsg = document.querySelector( + '.batch-table__select-all .selected', + ); + const notSelectedMsg = document.querySelector( + '.batch-table__select-all .not-selected', + ); + + if (!selectedMsg || !notSelectedMsg) return; + + if (active) { + hiddenField.value = '0'; + selectedMsg.classList.remove('active'); + notSelectedMsg.classList.add('active'); + } else { + hiddenField.value = '1'; + notSelectedMsg.classList.remove('active'); + selectedMsg.classList.add('active'); + } +}); + +Rails.delegate(document, batchCheckboxClassName, 'change', () => { + const checkAllElement = document.querySelector( + 'input#batch_checkbox_all', + ); + const selectAllMatchingElement = document.querySelector( + '.batch-table__select-all', + ); + + if (checkAllElement) { + const allCheckboxes = Array.from( + document.querySelectorAll(batchCheckboxClassName), + ); + checkAllElement.checked = allCheckboxes.every((content) => content.checked); + checkAllElement.indeterminate = + !checkAllElement.checked && + allCheckboxes.some((content) => content.checked); + + if (selectAllMatchingElement) { + if (checkAllElement.checked) { + showSelectAll(); + } else { + hideSelectAll(); + } + } + } +}); + +Rails.delegate( + document, + '.filter-subset--with-select select', + 'change', + ({ target }) => { + if (target instanceof HTMLSelectElement) target.form?.submit(); + }, +); + +const onDomainBlockSeverityChange = (target: HTMLInputElement) => { + const rejectMediaDiv = document.querySelector( + '.input.with_label.domain_block_reject_media', + ); + const rejectReportsDiv = document.querySelector( + '.input.with_label.domain_block_reject_reports', + ); + + if (rejectMediaDiv && rejectMediaDiv instanceof HTMLElement) { + rejectMediaDiv.style.display = + target.value === 'suspend' ? 'none' : 'block'; + } + + if (rejectReportsDiv && rejectReportsDiv instanceof HTMLElement) { + rejectReportsDiv.style.display = + target.value === 'suspend' ? 'none' : 'block'; + } +}; + +Rails.delegate(document, '#domain_block_severity', 'change', ({ target }) => { + if (target instanceof HTMLInputElement) onDomainBlockSeverityChange(target); +}); + +const onEnableBootstrapTimelineAccountsChange = (target: HTMLInputElement) => { + const bootstrapTimelineAccountsField = + document.querySelector( + '#form_admin_settings_bootstrap_timeline_accounts', + ); + + if (bootstrapTimelineAccountsField) { + bootstrapTimelineAccountsField.disabled = !target.checked; + if (target.checked) { + bootstrapTimelineAccountsField.parentElement?.classList.remove( + 'disabled', + ); + bootstrapTimelineAccountsField.parentElement?.parentElement?.classList.remove( + 'disabled', + ); + } else { + bootstrapTimelineAccountsField.parentElement?.classList.add('disabled'); + bootstrapTimelineAccountsField.parentElement?.parentElement?.classList.add( + 'disabled', + ); + } + } +}; + +Rails.delegate( + document, + '#form_admin_settings_enable_bootstrap_timeline_accounts', + 'change', + ({ target }) => { + if (target instanceof HTMLInputElement) + onEnableBootstrapTimelineAccountsChange(target); + }, +); + +const onChangeRegistrationMode = (target: HTMLInputElement) => { + const enabled = target.value === 'approved'; + + document + .querySelectorAll( + '.form_admin_settings_registrations_mode .warning-hint', + ) + .forEach((warning_hint) => { + warning_hint.style.display = target.value === 'open' ? 'inline' : 'none'; + }); + + document + .querySelectorAll( + 'input#form_admin_settings_require_invite_text', + ) + .forEach((input) => { + input.disabled = !enabled; + if (enabled) { + let element: HTMLElement | null = input; + do { + element.classList.remove('disabled'); + element = element.parentElement; + } while (element && !element.classList.contains('fields-group')); + } else { + let element: HTMLElement | null = input; + do { + element.classList.add('disabled'); + element = element.parentElement; + } while (element && !element.classList.contains('fields-group')); + } + }); +}; + +const convertUTCDateTimeToLocal = (value: string) => { + const date = new Date(value + 'Z'); + const twoChars = (x: number) => x.toString().padStart(2, '0'); + return `${date.getFullYear()}-${twoChars(date.getMonth() + 1)}-${twoChars(date.getDate())}T${twoChars(date.getHours())}:${twoChars(date.getMinutes())}`; +}; + +function convertLocalDatetimeToUTC(value: string) { + const date = new Date(value); + const fullISO8601 = date.toISOString(); + return fullISO8601.slice(0, fullISO8601.indexOf('T') + 6); +} + +Rails.delegate( + document, + '#form_admin_settings_registrations_mode', + 'change', + ({ target }) => { + if (target instanceof HTMLInputElement) onChangeRegistrationMode(target); + }, +); + +async function mountReactComponent(element: Element) { + const componentName = element.getAttribute('data-admin-component'); + const stringProps = element.getAttribute('data-props'); + + if (!stringProps) return; + + const componentProps = JSON.parse(stringProps) as object; + + const { default: AdminComponent } = await import( + '@/mastodon/containers/admin_component' + ); + + const { default: Component } = (await import( + `@/mastodon/components/admin/${componentName}` + )) as { default: React.ComponentType }; + + const root = createRoot(element); + + root.render( + + + , + ); +} + +ready(() => { + const domainBlockSeverityInput = document.querySelector( + 'input#domain_block_severity', + ); + if (domainBlockSeverityInput) + onDomainBlockSeverityChange(domainBlockSeverityInput); + + const enableBootstrapTimelineAccounts = + document.querySelector( + 'input#form_admin_settings_enable_bootstrap_timeline_accounts', + ); + if (enableBootstrapTimelineAccounts) + onEnableBootstrapTimelineAccountsChange(enableBootstrapTimelineAccounts); + + const registrationMode = document.querySelector( + 'input#form_admin_settings_registrations_mode', + ); + if (registrationMode) onChangeRegistrationMode(registrationMode); + + const checkAllElement = document.querySelector( + 'input#batch_checkbox_all', + ); + if (checkAllElement) { + const allCheckboxes = Array.from( + document.querySelectorAll(batchCheckboxClassName), + ); + checkAllElement.checked = allCheckboxes.every((content) => content.checked); + checkAllElement.indeterminate = + !checkAllElement.checked && + allCheckboxes.some((content) => content.checked); + } + + document + .querySelector('a#add-instance-button') + ?.addEventListener('click', (e) => { + const domain = document.querySelector( + 'input[type="text"]#by_domain', + )?.value; + + if (domain && e.target instanceof HTMLAnchorElement) { + const url = new URL(e.target.href); + url.searchParams.set('_domain', domain); + e.target.href = url.toString(); + } + }); + + document + .querySelectorAll('input[type="datetime-local"]') + .forEach((element) => { + if (element.value) { + element.value = convertUTCDateTimeToLocal(element.value); + } + if (element.placeholder) { + element.placeholder = convertUTCDateTimeToLocal(element.placeholder); + } + }); + + Rails.delegate(document, 'form', 'submit', ({ target }) => { + if (target instanceof HTMLFormElement) + target + .querySelectorAll('input[type="datetime-local"]') + .forEach((element) => { + if (element.value && element.validity.valid) { + element.value = convertLocalDatetimeToUTC(element.value); + } + }); + }); + + const announcementStartsAt = document.querySelector( + 'input[type="datetime-local"]#announcement_starts_at', + ); + if (announcementStartsAt) { + setAnnouncementEndsAttributes(announcementStartsAt); + } + + document.querySelectorAll('[data-admin-component]').forEach((element) => { + void mountReactComponent(element); + }); +}).catch((reason) => { + throw reason; +}); From b9940eb9778d9bf26b3bfea002424f1731c34383 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 29 Feb 2024 18:25:04 -0500 Subject: [PATCH 192/212] Disable codecov comments on PRs (#29464) --- .github/codecov.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/codecov.yml b/.github/codecov.yml index 5532c49618..9d6413a106 100644 --- a/.github/codecov.yml +++ b/.github/codecov.yml @@ -1,3 +1,4 @@ +comment: false # Do not leave PR comments coverage: status: project: @@ -8,6 +9,3 @@ coverage: default: # Github status check is not blocking informational: true -comment: - # Only write a comment in PR if there are changes - require_changes: true From ec953bf378ac6ae9b7dab5db053dca947f3c869b Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 1 Mar 2024 11:16:35 +0100 Subject: [PATCH 193/212] Fix regression in handling `select` elements in `packs/admin.tsx` (#29469) --- app/javascript/packs/admin.tsx | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/app/javascript/packs/admin.tsx b/app/javascript/packs/admin.tsx index 25e0889cd9..9fee560565 100644 --- a/app/javascript/packs/admin.tsx +++ b/app/javascript/packs/admin.tsx @@ -149,7 +149,7 @@ Rails.delegate( }, ); -const onDomainBlockSeverityChange = (target: HTMLInputElement) => { +const onDomainBlockSeverityChange = (target: HTMLSelectElement) => { const rejectMediaDiv = document.querySelector( '.input.with_label.domain_block_reject_media', ); @@ -169,7 +169,7 @@ const onDomainBlockSeverityChange = (target: HTMLInputElement) => { }; Rails.delegate(document, '#domain_block_severity', 'change', ({ target }) => { - if (target instanceof HTMLInputElement) onDomainBlockSeverityChange(target); + if (target instanceof HTMLSelectElement) onDomainBlockSeverityChange(target); }); const onEnableBootstrapTimelineAccountsChange = (target: HTMLInputElement) => { @@ -206,7 +206,7 @@ Rails.delegate( }, ); -const onChangeRegistrationMode = (target: HTMLInputElement) => { +const onChangeRegistrationMode = (target: HTMLSelectElement) => { const enabled = target.value === 'approved'; document @@ -256,7 +256,7 @@ Rails.delegate( '#form_admin_settings_registrations_mode', 'change', ({ target }) => { - if (target instanceof HTMLInputElement) onChangeRegistrationMode(target); + if (target instanceof HTMLSelectElement) onChangeRegistrationMode(target); }, ); @@ -286,11 +286,11 @@ async function mountReactComponent(element: Element) { } ready(() => { - const domainBlockSeverityInput = document.querySelector( - 'input#domain_block_severity', + const domainBlockSeveritySelect = document.querySelector( + 'select#domain_block_severity', ); - if (domainBlockSeverityInput) - onDomainBlockSeverityChange(domainBlockSeverityInput); + if (domainBlockSeveritySelect) + onDomainBlockSeverityChange(domainBlockSeveritySelect); const enableBootstrapTimelineAccounts = document.querySelector( @@ -299,8 +299,8 @@ ready(() => { if (enableBootstrapTimelineAccounts) onEnableBootstrapTimelineAccountsChange(enableBootstrapTimelineAccounts); - const registrationMode = document.querySelector( - 'input#form_admin_settings_registrations_mode', + const registrationMode = document.querySelector( + 'select#form_admin_settings_registrations_mode', ); if (registrationMode) onChangeRegistrationMode(registrationMode); From 3389c41b5899c1da479bfc08e84588184e09902d Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 1 Mar 2024 06:05:24 -0500 Subject: [PATCH 194/212] Move `nobody` position in `UserRole` magic number to constant (#29465) --- app/models/user_role.rb | 5 +++-- spec/models/user_role_spec.rb | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/models/user_role.rb b/app/models/user_role.rb index 9115d91c24..23cc28b9b7 100644 --- a/app/models/user_role.rb +++ b/app/models/user_role.rb @@ -39,6 +39,7 @@ class UserRole < ApplicationRecord }.freeze EVERYONE_ROLE_ID = -99 + NOBODY_POSITION = -1 module Flags NONE = 0 @@ -104,7 +105,7 @@ class UserRole < ApplicationRecord has_many :users, inverse_of: :role, foreign_key: 'role_id', dependent: :nullify def self.nobody - @nobody ||= UserRole.new(permissions: Flags::NONE, position: -1) + @nobody ||= UserRole.new(permissions: Flags::NONE, position: NOBODY_POSITION) end def self.everyone @@ -173,7 +174,7 @@ class UserRole < ApplicationRecord end def set_position - self.position = -1 if everyone? + self.position = NOBODY_POSITION if everyone? end def validate_own_role_edition diff --git a/spec/models/user_role_spec.rb b/spec/models/user_role_spec.rb index 9dd04a8172..96d12263ae 100644 --- a/spec/models/user_role_spec.rb +++ b/spec/models/user_role_spec.rb @@ -139,7 +139,7 @@ RSpec.describe UserRole do end it 'has negative position' do - expect(subject.position).to eq(-1) + expect(subject.position).to eq(described_class::NOBODY_POSITION) end end @@ -159,7 +159,7 @@ RSpec.describe UserRole do end it 'has negative position' do - expect(subject.position).to eq(-1) + expect(subject.position).to eq(described_class::NOBODY_POSITION) end end From 934cab75083a4ab79003a583881775b6d4a2b58a Mon Sep 17 00:00:00 2001 From: HTeuMeuLeu Date: Fri, 1 Mar 2024 13:16:53 +0100 Subject: [PATCH 195/212] New welcome email (#28883) Co-authored-by: Eugen Rochko --- .../{step5-off.png => apps_step-off.png} | Bin .../mailer-new/welcome/apps_step-on.png | Bin 0 -> 1291 bytes .../mailer-new/welcome/btn-app-store.png | Bin 0 -> 2054 bytes .../mailer-new/welcome/btn-google-play.png | Bin 0 -> 4512 bytes .../welcome/edit_profile_step-off.png | Bin 0 -> 2247 bytes ...{step1-on.png => edit_profile_step-on.png} | Bin .../mailer-new/welcome/feature_audience.png | Bin 0 -> 96392 bytes .../mailer-new/welcome/feature_control.png | Bin 0 -> 90297 bytes .../mailer-new/welcome/feature_creativity.png | Bin 0 -> 130496 bytes .../mailer-new/welcome/feature_moderation.png | Bin 0 -> 100525 bytes .../{step2-off.png => follow_step-off.png} | Bin .../mailer-new/welcome/follow_step-on.png | Bin 0 -> 1227 bytes .../{step3-off.png => post_step-off.png} | Bin .../mailer-new/welcome/post_step-on.png | Bin 0 -> 1552 bytes .../welcome/purple-extra-soft-spacer.png | Bin 0 -> 939 bytes .../welcome/purple-extra-soft-wave.png | Bin 0 -> 2531 bytes .../{step4-off.png => share_step-off.png} | Bin .../mailer-new/welcome/share_step-on.png | Bin 0 -> 1639 bytes app/javascript/styles/mailer.scss | 349 +++++++++++++++++- app/mailers/user_mailer.rb | 6 + app/models/user.rb | 2 +- .../application/mailer/_button.html.haml | 5 +- .../application/mailer/_checklist.html.haml | 20 +- .../application/mailer/_feature.html.haml | 32 ++ .../application/mailer/_follow.html.haml | 15 + .../application/mailer/_hashtag.html.haml | 20 + app/views/user_mailer/welcome.html.haml | 95 +++-- app/views/user_mailer/welcome.text.erb | 80 +++- config/locales/an.yml | 4 - config/locales/ar.yml | 4 - config/locales/ast.yml | 1 - config/locales/be.yml | 4 - config/locales/bg.yml | 4 - config/locales/ca.yml | 4 - config/locales/ckb.yml | 3 - config/locales/co.yml | 3 - config/locales/cs.yml | 4 - config/locales/cy.yml | 4 - config/locales/da.yml | 4 - config/locales/de.yml | 4 - config/locales/el.yml | 4 - config/locales/en-GB.yml | 4 - config/locales/en.yml | 41 +- config/locales/eo.yml | 4 - config/locales/es-AR.yml | 4 - config/locales/es-MX.yml | 4 - config/locales/es.yml | 4 - config/locales/et.yml | 4 - config/locales/eu.yml | 4 - config/locales/fa.yml | 4 - config/locales/fi.yml | 4 - config/locales/fo.yml | 4 - config/locales/fr-CA.yml | 4 - config/locales/fr.yml | 4 - config/locales/fy.yml | 4 - config/locales/gd.yml | 4 - config/locales/gl.yml | 4 - config/locales/he.yml | 4 - config/locales/hu.yml | 4 - config/locales/hy.yml | 1 - config/locales/ia.yml | 1 - config/locales/id.yml | 4 - config/locales/ie.yml | 4 - config/locales/io.yml | 4 - config/locales/is.yml | 4 - config/locales/it.yml | 4 - config/locales/ja.yml | 4 - config/locales/ka.yml | 3 - config/locales/kab.yml | 2 - config/locales/kk.yml | 3 - config/locales/ko.yml | 4 - config/locales/ku.yml | 4 - config/locales/lad.yml | 4 - config/locales/lt.yml | 4 - config/locales/lv.yml | 4 - config/locales/ms.yml | 4 - config/locales/my.yml | 4 - config/locales/nl.yml | 4 - config/locales/nn.yml | 4 - config/locales/no.yml | 4 - config/locales/oc.yml | 3 - config/locales/pl.yml | 4 - config/locales/pt-BR.yml | 4 - config/locales/pt-PT.yml | 4 - config/locales/ro.yml | 3 - config/locales/ru.yml | 4 - config/locales/sc.yml | 3 - config/locales/sco.yml | 4 - config/locales/si.yml | 3 - config/locales/sk.yml | 3 - config/locales/sl.yml | 4 - config/locales/sq.yml | 4 - config/locales/sr-Latn.yml | 4 - config/locales/sr.yml | 4 - config/locales/sv.yml | 4 - config/locales/th.yml | 4 - config/locales/tr.yml | 4 - config/locales/uk.yml | 4 - config/locales/vi.yml | 4 - config/locales/zh-CN.yml | 4 - config/locales/zh-HK.yml | 4 - config/locales/zh-TW.yml | 4 - 102 files changed, 619 insertions(+), 318 deletions(-) rename app/javascript/images/mailer-new/welcome/{step5-off.png => apps_step-off.png} (100%) create mode 100644 app/javascript/images/mailer-new/welcome/apps_step-on.png create mode 100644 app/javascript/images/mailer-new/welcome/btn-app-store.png create mode 100644 app/javascript/images/mailer-new/welcome/btn-google-play.png create mode 100644 app/javascript/images/mailer-new/welcome/edit_profile_step-off.png rename app/javascript/images/mailer-new/welcome/{step1-on.png => edit_profile_step-on.png} (100%) create mode 100644 app/javascript/images/mailer-new/welcome/feature_audience.png create mode 100644 app/javascript/images/mailer-new/welcome/feature_control.png create mode 100644 app/javascript/images/mailer-new/welcome/feature_creativity.png create mode 100644 app/javascript/images/mailer-new/welcome/feature_moderation.png rename app/javascript/images/mailer-new/welcome/{step2-off.png => follow_step-off.png} (100%) create mode 100644 app/javascript/images/mailer-new/welcome/follow_step-on.png rename app/javascript/images/mailer-new/welcome/{step3-off.png => post_step-off.png} (100%) create mode 100644 app/javascript/images/mailer-new/welcome/post_step-on.png create mode 100644 app/javascript/images/mailer-new/welcome/purple-extra-soft-spacer.png create mode 100644 app/javascript/images/mailer-new/welcome/purple-extra-soft-wave.png rename app/javascript/images/mailer-new/welcome/{step4-off.png => share_step-off.png} (100%) create mode 100644 app/javascript/images/mailer-new/welcome/share_step-on.png create mode 100644 app/views/application/mailer/_feature.html.haml create mode 100644 app/views/application/mailer/_follow.html.haml create mode 100644 app/views/application/mailer/_hashtag.html.haml diff --git a/app/javascript/images/mailer-new/welcome/step5-off.png b/app/javascript/images/mailer-new/welcome/apps_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/step5-off.png rename to app/javascript/images/mailer-new/welcome/apps_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/apps_step-on.png b/app/javascript/images/mailer-new/welcome/apps_step-on.png new file mode 100644 index 0000000000000000000000000000000000000000..fd631bf97ecf75b75ab3e8b149519c067f640886 GIT binary patch literal 1291 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

Qu#*6Fj=JRFVlcVW_4vkLXPn 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 literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/feature_control.png b/app/javascript/images/mailer-new/welcome/feature_control.png new file mode 100644 index 0000000000000000000000000000000000000000..1afb6c238caa18cdb35d3ce9e500742de2e370ac GIT binary patch literal 90297 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

7Qe96H^@(Rka~TF^KYM%o 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 IM6N<$f);lkVgLXD literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/feature_creativity.png b/app/javascript/images/mailer-new/welcome/feature_creativity.png new file mode 100644 index 0000000000000000000000000000000000000000..3365856699fcaf857a94cce33edd1e70e908a53f GIT binary patch literal 130496 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

fH{(>2o6S%9)okvJ`3X~jHhY) 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 literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/feature_moderation.png b/app/javascript/images/mailer-new/welcome/feature_moderation.png new file mode 100644 index 0000000000000000000000000000000000000000..7cee9b29b86721f3ef856e4c9ef48baaa6f9a2e2 GIT binary patch literal 100525 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

uwUG1ZfKBh(|D}V&vP|oww#~w40 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 literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/step2-off.png b/app/javascript/images/mailer-new/welcome/follow_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/step2-off.png rename to app/javascript/images/mailer-new/welcome/follow_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/follow_step-on.png b/app/javascript/images/mailer-new/welcome/follow_step-on.png new file mode 100644 index 0000000000000000000000000000000000000000..3ac011539bb9dea99d69c66af361273770113129 GIT binary patch literal 1227 zcmV;+1T_1JP)FT(QR z2Xe4>|4X~q?fR46mntNRxXr^(AgvWxV7PFP_wR1lkP?w1X(dM8t#3bD=Zd#r!BI+B z>ub)^=H(sdVXt>e;;9JS`sY{E=`5W$nG`^b@RX1(d+>7qw|~9y^?dvVMjpva2A!ar z?QYi?Uq2Fsa~=*`l9!HPiXW{x?WdP_2GHv%TsMk9Oc*3D8+5c4x{6;%0&(ardbTYB zx{8N#B=E(h?>ayf!rmN20Vl%Ak6-wFxC%re1b2+X?|uZT@Cu;V{dlCW;*Lrg5#L0Yms?Pp|Yg z1+JBxB~y>U^tvsLYU;VNG-3!hNk~yB3u{6GH6ekT%w<2YPUfy3ST_ym2bTB~8uX8~ zR0nE8b)Y7cg*738nvg(EYMlco_503Z-!O$+hU!fsllp!7`<@Cl4B;~UzS;Sml}BLl zI!~8+>%>}y@GRGPSx^?%gam3r0yQClnsDyB72Sd|{}>_&xTnrZAWGqbko8}q1r|t-9=^0MR;%oL?JGDS8V(q z3EbP=lW)YzF%Y@np{u>!-KcsQ719sxF4>k6RMKRCj;@BT;@2nIkk_tX6Oa6jb(bCm znh47K#`yVp9DT@%Q#l;UzCCzJk$4((f^Np;A&HG}io}y7MP5u|GXW#<=DpQtlvv&; zjGfR$k~}2yQVd4pee*(x4gFtQ p&dak0Q5ZH=&WU4hQ1Ih0-T@>J_*{MRBw_#n002ovPDHLkV1klpLdyUE literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/step3-off.png b/app/javascript/images/mailer-new/welcome/post_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/step3-off.png rename to app/javascript/images/mailer-new/welcome/post_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/post_step-on.png b/app/javascript/images/mailer-new/welcome/post_step-on.png new file mode 100644 index 0000000000000000000000000000000000000000..aa318e66c8573400568c4437d96d5b8baf048582 GIT binary patch literal 1552 zcmV+r2JiWaP)HD3M#0E2m;kDdjfH&Paq5nfE6UoT;J`pMWPEyqU^3gkU z9C;qjIfx=RH(Q%py0%vPeP^dfVowAvfA@u1D^6WBnG~RDQAZ*3R^`?1m*3Yr&-2a$ ziaagPA96x&R?B6h^L$GbwRu!+wY>fahWu!@R(N@BtpYncNatD+NF9cjHyCoXtXwsZ zJ%Lnp&wFnh26EM`%AUY~u6$esO(?9TiWhJ~HGcfkyVV)cghKF|ad`Ff6TYm5XP^m< zBe`-11#YXcEog?KDF4fGCZ|o%48`lZG`Y#%=+tFM43L7m=V*o{Zm1pPpoxSQ7!fTn zB3fWX445DsGhbr1{0ul-04Xgnj9-OoKY;|97=aRu+hEJP$XE$zqKT{Q%tdg(+-Kmf z3y}Me025J#9W=g1U}YeAy(}W|$0+hwAptTkkmMV#MG*HOW=7TqN-kCa`AX}AiwA-^ zTVbx@S8Y`l-A9B|ai|1czLe~@OolEs* zgG%h%=BauqnF(hls^9c_8||0FErIdpf{6XHbVBuzvrn#LmB0 z|Eqgc1`;4qfnMY_<)LcK1$(I4p+=+54g}f*qc2ErOY}%=kfb~!F@av2*Q&Nmr4w>p zxZ$c$PRfoe3ekyUxb_#=>a4e>H1k4RM~LK6f1o=c-VA`{bD zX_ZH$USOK#5vf`eK^JaF-rjB37~7^+9+9p^CAILQq^_Ox4$R%cfZ%pS%hO-42 zF?xSsL`EVI{dY~pba6=T+5t#TAamQBcwF3+AQmBJ=$eSQ)_zTv=w?bk66-|N3fvP1 z`9Wi6Kna0wJ6t>pyFStnFRG=x+1?Y#_LJU?>PMozFca=q-opARiz*Ut2UtfBh8nU^ zhTVEC4y|o%qa@KbkfM-r_m*m>297p{N3A(?c558bMlpmN?M@heW(QvH9-P`KoRQhhz6o<<7e|Xny7dG@-zPaYF9AH0CnA zI08*5uGDW>^xG4-y|FD{i|J#~1cED9+Z!8R_R>nEU+hg;ITSjj82~xDsa!RWyFSIX zzO^p?aOUT1eJfC3NZyCWr++u2kLVi8QB`)V$}1g-y^s@f(xmJC@T9V@Rh5 zJ~%AM_b%jI%gE7<8z<%7gCvY5RZ8NxUJ3bi822lkB%yLDuN&!xu^DspM_nyQR4s7 zaQvMgx0y3$XLQPzD8)i2q!SF>2%X~*M&at&C)^T*@(J`Lr;b=i< zweti8bIia5pOe@Uf4qG!0uox{6U~#oq=#qZbe-a}^}r9-^S}tj_CwIhO->MDhCm)& z#F?2};)d7ccHxF1*o3gTC0-RZ_J*KGQw$7AsRpvF0G(U)hT1d?UDqD~RaR?IZa`J5 zsx?#7O{EUDpU5+&;nW=2{cS#ev&0!=i3#Cyxs;YQiKgdJF$@FBDpb`fkEmv=n4!EH zXU97R8)rdE5=LkY3Pv=c3ucMD+N(CAWKSDs+fnhM!5k$}k>sMSU7+XvKQxN=(HR@z z>w5o5ocXH+!x7HtA`STRrpHC9#O$RQF`D|6UhF10oKZ%z8BKtyNeZ~{p@77N=VSx% zJkyOchT;Ibwk2{BiIC8A8n$kCWZh6ZJwN&vDpKX#_T1o8)jU+Cjc8HauKQ;~*CDVqme`zjnQIaRC+PUcLOX z*FTQA=u@t4N4Tf+mvPIrJAVFo^84qPb~*m=@$%+tpIi!M;l;bsugTr7--_qsIs^Mn H_vy<&)hi%y literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/purple-extra-soft-wave.png b/app/javascript/images/mailer-new/welcome/purple-extra-soft-wave.png new file mode 100644 index 0000000000000000000000000000000000000000..ba8f6dd3d989dc0dd74fe25cc20233375ecc87c8 GIT binary patch literal 2531 zcmaJ@dpuO@8eT;xKf0)t>uT(_h*@J?#*7h@L8H)di5=0HS=E%8HD;z}+)E0v4QE%B zP{-NPCUuG=mnb16QXSbC_YycqJiMVve5m*2Q!3S9!Ta2viJ_cklZ81KU zt~gh&1AK_JBa8=ohPin$!j3SAOpM(&kSrph0&G}72Sw~)4xc2l#eC5vq48oG!hl~O zf+Mz=KTY|%?gkwY9t;w(W~K}r&I}}=k%blBnn)xN2qqvNhc}0CRuJCO6mL$lB#_K3 zz^@kut;k~@AbC)ozScumwwOZ#0ha_pLZJ{VG{+*mgOC}KNQ7{B2#+^K5vKf5j({#Q z-dd$P`3qdU3hK3R>#M*8kq z8rgq12L;t?NeqdV60iOUo9@3`nHazDdupdlQOCUovSZ~rl2gv7lK)7~@>9@NB-%s0 z;kMH@;;7tDR{y z$s)#Z0*x!DBXQ|Ha}jGPmHvf$#^R-9z0^y~`BUZQp_(PdCEdp?%C{oMZiltH?i`rZ zunxA^x6IT3VwZSbb*M?kh{>IY@cWmEn-In@D4C1H<<4Zfv|TCx)$dK&esyg*vDtiH z@t($DhP%N@qm%A$#HFXJIqS#FNU91tyUH}B#r8yg(Gyv$h+HLK)uyi&J)T&>`w9E3 ztYqK1>b%t-ACsM5dUFGsDy|uhRrI@B&$$>rT>kom8s@Wc{jf78Et$7b6ptiMG;Ond zSEKFIb~Q=s#12{Kwx?_FRcO_K;|xlG+HV(zOoH3TYIL9Fk}csB1RRqbOI_(!p)_?{ z&3hm!O}~9<@6D{ymR9duhqJrZRo4r(*At&M#py^V4N?>Tb!oDpxA2BfbS=Awv7u?O z&!nzYV|zyE1peTf*IMtoM;pY6T;Y7eNw=*90na@|suNhnnSTA?m;PRl*l#7cq#>go z{|JS7wJD2SQL1xm8eEiCFtv( zTWf$!^{(U_4K1P+pR=BOu_oEp=_(ohM#c|@LvNfKce#?NXFC9kG|w3s4uv~aEE!~^ zM?cNaJ^C)TJ5s6CT0doY*n2Of4-!)i8qO&;ZudI(jP0GalTo6`1W4= zy%aFgz*+9z;Ju_}zM%n#(FX23;wty2mFP+*Kcx3*bQk=);M86hu{EFjy8Rx|lV-$(OPWxLl0WcS&je-3UA6k}$mb zqt4LI_LiS(63LjTch3Rfwe8ahkeg!|t!`Pbk8g4&_{=N}Vmjlk(eLZ($TH)d20Mjf zqxurZ+1Bxe=Bs7W#0TYx+Kqmj)Pd%^7KfuY_RdZ4og3@)q&9J3$&&#|d99f8axDV@ z2(m1psFvlz*Fwo>>-4ZZuj0?Soy^nPx&aJB{j)7qKB)|acL zjqTL1h&AVD@B>fUuFvt0v?pKY1sk%?mTkFT`zdN&b}6kd8~_BZ?|oF0=b$P;^VO7Z U#)Uf}i@#koM>lHW_Wd#c0U#_+bpQYW literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/step4-off.png b/app/javascript/images/mailer-new/welcome/share_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/step4-off.png rename to app/javascript/images/mailer-new/welcome/share_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/share_step-on.png b/app/javascript/images/mailer-new/welcome/share_step-on.png new file mode 100644 index 0000000000000000000000000000000000000000..98782d931739c220410da17bb5a5ddba3ab8e2d1 GIT binary patch literal 1639 zcmV-t2AKJYP)xd-Z*i~ zDHRgwiS$6F3Xv#C1qzMx&-Tu~&KrBzPO^!2{ckq${4VuOcP-`TH#2YEY#fAyl*?uD z)5jadv5G8g=R9w(TJ?%v9^n+Q=hvuMDENNe_wyxHz4LT(Pyf6@l6yM}xLLmGRi-}~ z->Lq0=ClY)f*+{e^UvR{ES1atan~Iw#6;ZmMk!GFaTsBQtZlD6o2$3IqH7> z;H?XSL;*$|BALH%zB)F2?RNE#rKLj>4@KbY_h06!rLl84R1zE!b&{%3*?qP0)erUd ze$n3G$aC`IVJGb7X1VOO_eY|5&f{V01+6A_km-)gfx zLj*T;d&0D}WCF3M0Olm9HL!?vfkfiLK6wHk>eBCmtXDVp4Pn#~hhk2Pyx;7))VNpO z1&df6!aV1-4_QR~#tUj?kL4YJBTZ6$fv<@=^}XgjEMirl4zMtqv^@AuQmy0Sz}M*Y zAuEAo`dviJxd7d;4jzWtIiZy{U2%>pU56dTM7J~q_Jc-Lu z2j`5IuqIFs-zdO`?J~YVQ&%PMS~!eIDs{FKk2=C=Q1DdN&wdc)l<)*{le-T zhytU$PY=m26y`hTbmkhwd(nF!EPzF<3N(pxD++li>q3EdKQ6E1A+C2F-|{uBUR+L+ zd=C=*=*O=o!6J=ff;do2piKnv1Vl5v3GgaGpi5lXHc#Rjf^x+K7N8LBHj4_4gjkCr zpj$dRZ#CLnRcJpv#APk-o^5$dCh|ZQ;bHx*DHISKv!ZHoTyTJz^~ej!R7Kj%X9$mo zxJ7QK*U z={PgQs=(vUfe)egZ2Ef0nnWuCo4b!rXTXQyhsj1gjY)J491E`7-uK2abb(3Ffs@egpLmR@qo&zVP zDeqpZ2M1dAI#pY_gYtNuMWlhIKBq=toIHM-3kJ-o5NJytbK(Wsl*bHFVEfYp{dtnW zwmfEdX-t%}#it%=Y3yo}$m0)-+FtjUp>E~+S`09inTD9-BCp>c+(9yVsFZ{>Vg^~o zIk5tnER?t0nMjW~fjuIGU&~mL{N&*23W=!GgaSub_#l-ySMqD%=nBfox~Rw{oVQxkx+=J7G8N@|f7Ck6k40Cob|rVv7kJiNE}Q_HVbaG!~58+C`i^ zrsMPP9F5O&7fZP3pMepLl9juID=_!kJwA18Qkqp03FlMgChp1-*9w0!p< l3*(~7gxs$0ru=glZvd^Ls7@-yC .email-desktop-column { + direction: ltr; + + [dir='rtl'] & { + direction: rtl; + } + } +} + +.email-desktop-column { + display: inline-block; + width: 100%; + max-width: none; + text-align: start; + vertical-align: top; + font-size: 16px; +} + // Header .email-header-td { padding: 16px 32px; @@ -312,6 +348,66 @@ table + p { } } +.email-header-card-table { + width: 100%; + border-collapse: separate; + overflow: hidden; + border-radius: 12px; + background-color: #fff; + border: 2px solid #fff; + box-shadow: 0 4px 16px 0 rgba(23, 6, 59, 8%); +} + +.email-header-card { + position: relative; + max-height: 100px; +} + +.email-header-card-banner-td { + border-radius: 12px 12px 0 0; + height: 80px; + background-color: #f3f2f5 !important; + background-position: center !important; + background-size: cover !important; +} + +.email-header-card-body-td { + padding: 12px; + + .email-btn-table { + width: 100%; + max-width: 212px; + } +} + +.email-header-card-instance { + margin-bottom: 4px; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + color: #17063b; + font-size: 14px; + line-height: 20px; + font-weight: 600; + + &:only-of-type { + margin-bottom: 12px; + } +} + +.email-header-card-description { + margin-bottom: 12px; + color: #746a89; + font-size: 12px; + line-height: 16px; + max-height: 32px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} + // To make the design work with images off // we create an empty div that overlaps with // the rest of the content with a dark background. @@ -336,6 +432,16 @@ table + p { mso-padding-alt: 32px; } +.email-body-columns-td { + border-top: 1px solid #dfdee3; + padding: 32px 24px 8px; +} + +.email-body-huge-padding-td { + padding: 110px 32px 32px; + mso-padding-alt: 32px; +} + .email-body-padding-td { & > p { font-size: 14px; @@ -353,6 +459,30 @@ table + p { } } +// Texts +.email-h2 { + margin-bottom: 4px; + color: #17063b; + font-size: 18px; + font-weight: 600; + line-height: 28px; +} + +.email-h-sub { + margin-bottom: 16px; + color: #746a89; + font-size: 14px; + line-height: 16px; +} + +.email-p { + margin-bottom: 16px; + color: #746a89; + font-size: 14px; + font-weight: 400; + line-height: 20px; +} + // Footer .email-footer-td { padding: 28px 32px 32px; @@ -539,8 +669,13 @@ table + p { background-color: #fff; } +.email-checklist-checked { + border-color: #c4e6d7; + background-color: #eaf6f1; +} + .email-checklist-td { - padding: 16px; + padding: 16px 16px 6px; } .email-checklist-icons-td { @@ -576,10 +711,15 @@ table + p { font-size: 14px; font-weight: 600; line-height: 16.8px; + + .email-checklist-checked & { + color: #746a89; + text-decoration: line-through; + } } p { - margin: 0 0 2px; + margin: 0 0 12px; color: #746a89; font-size: 14px; line-height: 16.8px; @@ -597,6 +737,194 @@ table + p { padding-left: 10px; padding-right: 10px; } + + div + div { + margin-inline-start: auto; + margin-bottom: 12px; + } +} + +// Welcome email +.email-welcome-apps-btns { + font-size: 12px; + line-height: 44px; +} + +.email-column-td { + padding: 0 8px; + vertical-align: top; +} + +.email-link-with-arrow { + color: #6364ff; + font-size: 14px; + font-weight: 600; + line-height: 16.8px; + + &:hover { + color: #563acc !important; + } + + span { + font-size: 12px; + font-weight: 400; + } +} + +.email-column-action-td { + padding: 24px 0; + color: #6364ff; + font-size: 14px; + font-weight: 600; + line-height: 16.8px; + text-align: center; +} + +// Follow and hashtags +.email-mini-wrapper-td { + padding: 4px 0; + + table { + table-layout: fixed; + } +} + +.email-mini-td { + border-radius: 12px; + border: 1px solid #e8e6eb; + background-color: #fff; + padding: 15px 16px; +} + +.email-mini-follow-img-td { + width: 40px; + vertical-align: top; + + img { + border-radius: 8px; + } +} + +.email-mini-follow-text-td { + padding-left: 8px; + padding-right: 16px; + vertical-align: top; + + h3 { + color: #17063b; + font-size: 14px; + font-weight: 600; + line-height: 20px; + } + + p { + color: #746a89; + font-size: 12px; + font-weight: 400; + line-height: 16px; + } +} + +.email-mini-follow-btn-td { + width: 68px; + vertical-align: top; + + .email-btn-table { + width: 100%; + } + + .email-btn-td { + mso-padding-alt: 10px; + } + + .email-btn-a { + padding-left: 10px; + padding-right: 10px; + } +} + +.email-mini-hashtag-td { + height: 40px; + + td { + vertical-align: middle; + } + + h3 { + color: #17063b; + font-size: 14px; + font-weight: 600; + line-height: 20px; + } + + p { + color: #746a89; + font-size: 12px; + font-weight: 400; + line-height: 16px; + word-break: break-all; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } +} + +.email-mini-hashtag-img-td { + width: 40px; + height: 20px; + white-space: nowrap; + text-indent: -2px; + font-size: 0; + + & + td { + padding-left: 8px; + } +} + +.email-mini-hashtag-img-span { + display: inline-block; + max-width: 12px; + font-size: 12px; + + img { + width: 16px; + height: 16px; + border-radius: 50%; + max-width: none; + border: 2px solid #fff; + vertical-align: middle; + } +} + +// Extra content on light purple background +.email-extra-wave { + height: 42px; + background-image: url('../images/mailer-new/welcome/purple-extra-soft-wave.png'); + background-position: bottom center; + background-repeat: no-repeat; +} + +.email-extra-td { + padding: 32px 32px 24px; + background-color: #f0f0ff; + background-image: url('../images/mailer-new/welcome/purple-extra-soft-spacer.png'); // Using an image to maintain the color even in forced dark modes + + .email-column-td { + padding-top: 8px; + padding-bottom: 8px; + } +} + +// Feature card +.email-feature-wrapper-td { + padding: 8px 0; +} + +.email-feature-td { + padding: 24px; + background-color: #fff; + border: 1px solid #e8e6eb; + border-radius: 12px; } // Responsive @@ -617,4 +945,21 @@ table + p { .email-desktop-flex { display: flex; } + + .email-header-left { + padding-right: 32px; + } + + .email-header-right { + width: 240px; + margin-inline-start: auto; + } + + .email-desktop-column { + max-width: 346px !important; + } + + .email-desktop-text-right { + text-align: right; + } } diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index 3b1a085cb8..96fcd51efa 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -135,6 +135,12 @@ class UserMailer < Devise::Mailer return unless @resource.active_for_authentication? + @suggestions = AccountSuggestions.new(@resource.account).get(5) + @tags = Trends.tags.query.allowed.limit(5) + @has_account_fields = @resource.account.display_name.present? || @resource.account.note.present? || @resource.account.avatar.present? + @has_active_relationships = @resource.account.active_relationships.exists? + @has_statuses = @resource.account.statuses.exists? + I18n.with_locale(locale) do mail subject: default_i18n_subject end diff --git a/app/models/user.rb b/app/models/user.rb index f706c91eff..14c2bb6e0c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -490,7 +490,7 @@ class User < ApplicationRecord BootstrapTimelineWorker.perform_async(account_id) ActivityTracker.increment('activity:accounts:local') ActivityTracker.record('activity:logins', id) - UserMailer.welcome(self).deliver_later + UserMailer.welcome(self).deliver_later(wait: 1.hour) TriggerWebhookWorker.perform_async('account.approved', 'Account', account_id) end diff --git a/app/views/application/mailer/_button.html.haml b/app/views/application/mailer/_button.html.haml index 61430732eb..0bf80b505a 100644 --- a/app/views/application/mailer/_button.html.haml +++ b/app/views/application/mailer/_button.html.haml @@ -1,4 +1,7 @@ %table.email-btn-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-btn-td - = link_to "#{text} ➜", url, class: 'email-btn-a email-btn-hover' + - if defined?(has_arrow) && !has_arrow + = link_to text, url, class: 'email-btn-a email-btn-hover' + - else + = link_to "#{text} ➜", url, class: 'email-btn-a email-btn-hover' diff --git a/app/views/application/mailer/_checklist.html.haml b/app/views/application/mailer/_checklist.html.haml index 83072bd36b..31cd5bf35d 100644 --- a/app/views/application/mailer/_checklist.html.haml +++ b/app/views/application/mailer/_checklist.html.haml @@ -1,7 +1,7 @@ %table.email-w-full.email-checklist-wrapper-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-checklist-wrapper-td - %table.email-w-full.email-checklist-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %table.email-w-full.email-checklist-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation', class: ('email-checklist-checked' if defined?(checked) && checked) } %tr %td.email-checklist-td %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } @@ -15,15 +15,25 @@ - else = image_tag frontend_asset_url('images/mailer-new/welcome/checkbox-off.png'), alt: '', width: 20, height: 20 %td.email-checklist-icons-step-td - - if defined?(step_image_url) - = image_tag step_image_url, alt: '', width: 40, height: 40 + - if defined?(key) + = image_tag frontend_asset_url("images/mailer-new/welcome/#{key}-#{checked ? 'on' : 'off'}.png"), alt: '', width: 40, height: 40 %td.email-checklist-text-td .email-desktop-flex + /[if mso] +
%div - if defined?(title) %h3= title - if defined?(text) %p= text + /[if mso] + %div - - if defined?(button_text) && defined?(button_url) && defined?(checked) && !checked - = render 'application/mailer/button', text: button_text, url: button_url + - if defined?(show_apps_buttons) && show_apps_buttons + .email-welcome-apps-btns + = link_to image_tag(frontend_asset_url('images/mailer-new/welcome/btn-app-store.png'), alt: t('user_mailer.welcome.apps_ios_action'), width: 120, height: 40), 'https://apps.apple.com/app/mastodon-for-iphone-and-ipad/id1571998974' + = link_to image_tag(frontend_asset_url('images/mailer-new/welcome/btn-google-play.png'), alt: t('user_mailer.welcome.apps_android_action'), width: 120, height: 40), 'https://play.google.com/store/apps/details?id=org.joinmastodon.android' + - elsif defined?(button_text) && defined?(button_url) && defined?(checked) && !checked + = render 'application/mailer/button', text: button_text, url: button_url, has_arrow: false + /[if mso] +
diff --git a/app/views/application/mailer/_feature.html.haml b/app/views/application/mailer/_feature.html.haml new file mode 100644 index 0000000000..d051338a9c --- /dev/null +++ b/app/views/application/mailer/_feature.html.haml @@ -0,0 +1,32 @@ +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-feature-wrapper-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-feature-td + .email-desktop-flex{ class: ('email-dir-rtl' if defined?(text_first_on_desktop) && !text_first_on_desktop) } + /[if mso] +
+ .email-desktop-column + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-td + - if defined?(feature_title) + %h2.email-h2= feature_title + - if defined?(feature_text) + %p.email-p= feature_text + - if defined?(feature_btn_url) + = link_to '', href: feature_btn_url, class: 'email-link-with-arrow' do + #{t('user_mailer.welcome.feature_action')}  + %span= '❯' + /[if mso] + + .email-desktop-column + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-td + - if defined?(key) + %p{ class: ('email-desktop-text-right' if defined?(text_first_on_desktop) && text_first_on_desktop) } + = image_tag frontend_asset_url("images/mailer-new/welcome/#{key}.png"), alt: '', width: 240, height: 230 + /[if mso] +
diff --git a/app/views/application/mailer/_follow.html.haml b/app/views/application/mailer/_follow.html.haml new file mode 100644 index 0000000000..382151a234 --- /dev/null +++ b/app/views/application/mailer/_follow.html.haml @@ -0,0 +1,15 @@ +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-wrapper-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-follow-img-td + = image_tag full_asset_url(follow.account.avatar.url), alt: '', width: 40, height: 40 + %td.email-mini-follow-text-td + %h3= follow.account.display_name.presence || follow.account.username + %p @#{follow.account.pretty_acct} + %td.email-mini-follow-btn-td + = render 'application/mailer/button', text: t('user_mailer.welcome.follow_action'), url: web_url("@#{follow.account.acct}"), has_arrow: false diff --git a/app/views/application/mailer/_hashtag.html.haml b/app/views/application/mailer/_hashtag.html.haml new file mode 100644 index 0000000000..524fd7e274 --- /dev/null +++ b/app/views/application/mailer/_hashtag.html.haml @@ -0,0 +1,20 @@ +- accounts = hashtag.statuses.with_public_visibility.joins(:account).merge(Account.without_suspended.without_silenced).includes(:account).limit(3).map(&:account) + +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-wrapper-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-hashtag-td{ height: 40 } + %h3 ##{hashtag.display_name} + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-hashtag-img-td + - accounts.each do |account| + %span.email-mini-hashtag-img-span + = image_tag full_asset_url(account.avatar.url), alt: '', width: 16, height: 16 + %td + %p= t('user_mailer.welcome.hashtags_recent_count', people: number_with_delimiter(hashtag.history.aggregate(2.days.ago.to_date..Time.zone.today).accounts), days: 2) diff --git a/app/views/user_mailer/welcome.html.haml b/app/views/user_mailer/welcome.html.haml index b77d40fb05..e7f9c47e3b 100644 --- a/app/views/user_mailer/welcome.html.haml +++ b/app/views/user_mailer/welcome.html.haml @@ -1,25 +1,76 @@ +- instance_presenter = InstancePresenter.new + = content_for :heading do - = render 'application/mailer/heading', heading_title: t('user_mailer.welcome.title', name: @resource.account.username), heading_subtitle: t('user_mailer.welcome.explanation') + .email-desktop-flex + .email-header-left + = render 'application/mailer/heading', heading_title: t('user_mailer.welcome.title', name: @resource.account.username), heading_subtitle: t('user_mailer.welcome.explanation') + .email-header-right + .email-header-card + %table.email-header-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-header-card-banner-td{ height: 140, background: full_asset_url(instance_presenter.thumbnail&.file&.url(:'@1x') || frontend_asset_path('images/preview.png')) } + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-header-card-body-td + %p.email-header-card-instance= @instance + - if instance_presenter.description.present? + %p.email-header-card-description= instance_presenter.description + = render 'application/mailer/button', text: t('user_mailer.welcome.sign_in_action'), url: new_user_session_url, has_arrow: false + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.email-body-padding-td - %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } - %tr - %td.email-inner-card-td-without-padding - %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } - %tr - %td.email-prose.email-padding-24 - %p - %b= t 'user_mailer.welcome.full_handle' - = render 'application/mailer/frame', text: "#{@resource.account.username}@#{@instance}" - %p= t 'user_mailer.welcome.full_handle_hint', instance: @instance - %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } - %tr - %td.email-border-top.email-prose.email-padding-24 - %p= t 'user_mailer.welcome.edit_profile_step' - = render 'application/mailer/button', text: t('user_mailer.welcome.edit_profile_action'), url: settings_profile_url - %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } - %tr - %td.email-border-top.email-prose.email-padding-24 - %p= t 'user_mailer.welcome.edit_profile_step' - = render 'application/mailer/button', text: t('user_mailer.welcome.final_action'), url: web_url + %td.email-body-huge-padding-td + %h2.email-h2= t('user_mailer.welcome.checklist_title') + %p.email-h-sub= t('user_mailer.welcome.checklist_subtitle') + = render 'application/mailer/checklist', key: 'edit_profile_step', title: t('user_mailer.welcome.edit_profile_title'), text: t('user_mailer.welcome.edit_profile_step'), checked: @has_account_fields, button_text: t('user_mailer.welcome.edit_profile_action'), button_url: web_url('start/profile') + = render 'application/mailer/checklist', key: 'follow_step', title: t('user_mailer.welcome.follow_title'), text: t('user_mailer.welcome.follow_step'), checked: @has_active_relationships, button_text: t('user_mailer.welcome.follow_action'), button_url: web_url('start/follows') + = render 'application/mailer/checklist', key: 'post_step', title: t('user_mailer.welcome.post_title'), text: t('user_mailer.welcome.post_step'), checked: @has_statuses, button_text: t('user_mailer.welcome.post_action'), button_url: web_url + = render 'application/mailer/checklist', key: 'share_step', title: t('user_mailer.welcome.share_title'), text: t('user_mailer.welcome.share_step'), checked: false, button_text: t('user_mailer.welcome.share_action'), button_url: web_url('start/share') + = render 'application/mailer/checklist', key: 'apps_step', title: t('user_mailer.welcome.apps_title'), text: t('user_mailer.welcome.apps_step'), checked: false, show_apps_buttons: true +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-columns-td + .email-desktop-flex + /[if mso] +
+ .email-desktop-column + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-td + %h2.email-h2= t('user_mailer.welcome.follows_title') + %p.email-h-sub= t('user_mailer.welcome.follows_subtitle') + = render partial: 'application/mailer/follow', collection: @suggestions + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-action-td + = link_to '', href: web_url('explore/suggestions'), class: 'email-link-with-arrow' do + = t('user_mailer.welcome.follows_view_more') + %span= '❯' + /[if mso] + + .email-desktop-column + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-td + %h2.email-h2= t('user_mailer.welcome.hashtags_title') + %p.email-h-sub= t('user_mailer.welcome.hashtags_subtitle') + = render partial: 'application/mailer/hashtag', collection: @tags + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-action-td + = link_to '', href: web_url('explore/tags'), class: 'email-link-with-arrow' do + = t('user_mailer.welcome.hashtags_view_more') + %span= '❯' + /[if mso] +
+.email-extra-wave +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-extra-td + = render 'application/mailer/feature', key: 'feature_control', feature_title: t('user_mailer.welcome.feature_control_title'), feature_text: t('user_mailer.welcome.feature_control'), text_first_on_desktop: true + = render 'application/mailer/feature', key: 'feature_audience', feature_title: t('user_mailer.welcome.feature_audience_title'), feature_text: t('user_mailer.welcome.feature_audience'), text_first_on_desktop: false + = render 'application/mailer/feature', key: 'feature_moderation', feature_title: t('user_mailer.welcome.feature_moderation_title'), feature_text: t('user_mailer.welcome.feature_moderation'), text_first_on_desktop: true + = render 'application/mailer/feature', key: 'feature_creativity', feature_title: t('user_mailer.welcome.feature_creativity_title'), feature_text: t('user_mailer.welcome.feature_creativity'), text_first_on_desktop: false diff --git a/app/views/user_mailer/welcome.text.erb b/app/views/user_mailer/welcome.text.erb index d78cdb938a..150944605f 100644 --- a/app/views/user_mailer/welcome.text.erb +++ b/app/views/user_mailer/welcome.text.erb @@ -1,16 +1,78 @@ <%= t 'user_mailer.welcome.title', name: @resource.account.username %> <%= t 'user_mailer.welcome.explanation' %> -=== - -<%= t 'user_mailer.welcome.full_handle' %> (<%= "@#{@resource.account.local_username_and_domain}" %>) -<%= t 'user_mailer.welcome.full_handle_hint', instance: @instance %> - --- -<%= t 'user_mailer.welcome.edit_profile_step' %> +<%= t('user_mailer.welcome.sign_in_action') %> +=== +<%= new_user_session_url %> -=> <%= settings_profile_url %> +--- -<%= t 'user_mailer.welcome.final_step' %> +<%= t('user_mailer.welcome.checklist_title') %> +=== +<%= t('user_mailer.welcome.checklist_subtitle') %> -=> <%= web_url %> +1. <%= t('user_mailer.welcome.edit_profile_title') %> + <%= t('user_mailer.welcome.edit_profile_step') %> + * <%= web_url('start/profile') %> + +2. <%= t('user_mailer.welcome.follow_title') %> + <%= t('user_mailer.welcome.follow_step') %> + * <%= web_url('start/follows') %> + +3. <%= t('user_mailer.welcome.post_title') %> + <%= t('user_mailer.welcome.post_step') %> + * <%= web_url %> + +4. <%= t('user_mailer.welcome.share_title') %> + <%= t('user_mailer.welcome.share_step') %> + * <%= web_url('start/share') %> + +5. <%= t('user_mailer.welcome.apps_title') %> + <%= t('user_mailer.welcome.apps_step') %> + * iOS: https://apps.apple.com/app/mastodon-for-iphone-and-ipad/id1571998974 + * Android: https://play.google.com/store/apps/details?id=org.joinmastodon.android + +--- + +<%= t('user_mailer.welcome.follows_title') %> +=== +<%= t('user_mailer.welcome.follows_subtitle') %> + +<%- @suggestions.each do |suggestion| %> +* <%= suggestion.account.display_name.presence || suggestion.account.username %> · @<%= suggestion.account.pretty_acct %> + <%= web_url("@#{suggestion.account.acct}") %> +<%- end %> + +<%= web_url('explore/suggestions') %> + +--- + +<%= t('user_mailer.welcome.hashtags_title') %> +=== +<%= t('user_mailer.welcome.hashtags_subtitle') %> + +<%- @tags.each do |tag| %> +* #<%= tag.display_name %> · <%= t('user_mailer.welcome.hashtags_recent_count', people: number_with_delimiter(tag.history.aggregate(2.days.ago.to_date..Time.zone.today).accounts), days: 2) %> + <%= tag_url(tag) %> +<%- end %> + +<%= web_url('explore/tags') %> + +--- + +<%= t('user_mailer.welcome.feature_control_title') %> +=== +<%= word_wrap t('user_mailer.welcome.feature_control') %> + +<%= t('user_mailer.welcome.feature_audience_title') %> +=== +<%= word_wrap t('user_mailer.welcome.feature_audience') %> + +<%= t('user_mailer.welcome.feature_moderation_title') %> +=== +<%= word_wrap t('user_mailer.welcome.feature_moderation') %> + +<%= t('user_mailer.welcome.feature_creativity_title') %> +=== +<%= word_wrap t('user_mailer.welcome.feature_creativity') %> diff --git a/config/locales/an.yml b/config/locales/an.yml index 17077041da..edfdb44b35 100644 --- a/config/locales/an.yml +++ b/config/locales/an.yml @@ -1600,10 +1600,6 @@ an: edit_profile_action: Configurar lo perfil edit_profile_step: Puetz personalizar lo tuyo perfil puyando una foto de perfil, cambiando lo tuyo nombre d'usuario y muito mas. Puetz optar per revisar a los nuevos seguidores antes que puedan seguir-te. explanation: Aquí i hai qualques consellos pa empecipiar - final_action: Empecipiar a publicar - final_step: 'Empecipia a publicar! Mesmo sin seguidores, las tuyas publicacions publicas pueden estar vistas per atros, per eixemplo en a linia de tiempo local u en etiquetas. Tal vegada quieras presentar-te con a etiqueta de #presentacions.' - full_handle: Lo suyo sobrenombre completo - full_handle_hint: Esto ye lo que le dirías a los tuyos amigos pa que ells puedan ninviar-te mensaches u seguir-te dende unatra instancia. subject: Bienveniu a Mastodon title: Te damos la bienvenida a bordo, %{name}! users: diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 0927fba0af..2b2052172e 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1969,10 +1969,6 @@ ar: edit_profile_action: تهيئة الملف التعريفي edit_profile_step: يمكنك تخصيص ملفك الشخصي عن طريق رفع صورة ملفك الشخصي, تغيير اسم العرض الخاص بك والمزيد. يمكنك اختيار مراجعة المتابعين الجدد قبل السماح لهم بمتابعتك. explanation: ها هي بعض النصائح قبل بداية الاستخدام - final_action: اشرَع في النشر - final_step: 'ابدأ في النشر! حتى بدون متابعين، منشوراتك العامة قد يشاهدها آخرون، على سبيل المثال في التوقيت المحلي أو في الوسوم. قد ترغب في تقديم نفسك على وسم #introductions.' - full_handle: عنوانك الكامل - full_handle_hint: هذا هو ما يجب تقديمه لأصدقائك قصد أن يكون بإمكانهم متابَعتك أو مُراسَلتك حتى و إن كانت حساباتهم على خوادم أخرى. subject: أهلًا بك على ماستدون title: أهلاً بك، %{name}! users: diff --git a/config/locales/ast.yml b/config/locales/ast.yml index 7e5a4c8876..da7e99c2fa 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -903,7 +903,6 @@ ast: edit_profile_action: Configurar el perfil edit_profile_step: Pues personalizar el perfil pente la xuba d'una semeya, el cambéu del nome visible ya muncho más. Tamién, si lo prefieres, pues revisar los perfiles nuevos enantes de que puedan siguite. explanation: Equí tienes dalgunos conseyos pa que comiences - final_action: Comenzar a espublizar subject: Afáyate en Mastodon title: "¡Afáyate, %{name}!" users: diff --git a/config/locales/be.yml b/config/locales/be.yml index 13cbcd8ffc..34e0722ba9 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1910,10 +1910,6 @@ be: edit_profile_action: Наладзіць профіль edit_profile_step: Вы можаце наладзіць свой профіль, запампаваўшы выяву профілю, змяніўшы адлюстраванае імя і іншае. Вы можаце праглядаць новых падпісчыкаў, перш чым ім будзе дазволена падпісацца на вас. explanation: Вось некаторыя парады каб пачаць - final_action: Пачаць пісаць - final_step: 'Пачынайце пісаць! Нават, калі ў вас няма падпісчыкаў, іншыя людзі змогуць пабачыць вашыя допісы, напрыклад, у лакальнай стужцы, або праз хэштэгі. Калі хочаце, вы можаце прадставіцца праз хэштэг #introductions.' - full_handle: Ваш поўны маркер - full_handle_hint: Гэта тое, што вы дасце сваім сябрам, каб яны маглі адпраўляць паведамленні або падпісацца на вас з іншага сервера. subject: Вітаем у Mastodon title: Рады вітаць вас, %{name}! users: diff --git a/config/locales/bg.yml b/config/locales/bg.yml index b1229ac906..15c671d539 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -1841,10 +1841,6 @@ bg: edit_profile_action: Настройване на профила edit_profile_step: Може да настроите профила си, качвайки снимката на профила, променяйки показваното си име и други неща. Може да се включите за преглед на нови последователи преди да бъдат позволени да ви последват. explanation: Ето няколко стъпки за начало - final_action: Начало на публикуване - final_step: 'Публикувайте! Дори без да имате последователи, вашите публични публикации ще бъдат видени от други, например в местната хронология или под хаштагове. Не забравяйте да се представите с хаштаг #introductions.' - full_handle: Пълното ви име - full_handle_hint: Ето какво бихте казали на приятелите си, за да могат да ви изпращат съобщения или да ви последват от друг сървър. subject: Добре дошли в Mastodon title: Добре дошли на борда, %{name}! users: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 4b5ec815ca..d80fb598e3 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1846,10 +1846,6 @@ ca: edit_profile_action: Configura el perfil edit_profile_step: Pots personalitzar el teu perfil pujant-hi un avatar, canviant el teu nom de visualització i molt més. Si ho prefereixes, pots revisar els seguidors nous abans que et puguin seguir. explanation: Aquests són alguns consells per a començar - final_action: Comença a publicar - final_step: 'Comença a publicar! Fins i tot sense seguidors, els altres poden veure els teus missatges públics, per exemple, a la línia de temps local i a les etiquetes. És possible que vulguis presentar-te amb l''etiqueta #introductions.' - full_handle: El teu nom d'usuari sencer - full_handle_hint: Això és el que has de dir als teus amics perquè puguin enviar-te missatges o seguir-te des d'un altre servidor. subject: Et donem la benvinguda a Mastodon title: Benvingut a bord, %{name}! users: diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index 72a3c08d4d..fec8f73323 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -1035,9 +1035,6 @@ ckb: welcome: edit_profile_action: پرۆفایلی جێگیرکردن explanation: ئەمە چەند ئامۆژگارییەکن بۆ دەست پێکردنت - final_action: دەست بکە بە بڵاوکردنەوە - full_handle: ناوی بەکارهێنەری تەواوی ئێوە - full_handle_hint: ئەمە ئەو شتەیە کە بە هاوڕێکانت دەلێی بۆ ئەوەی پەیام یان لە ڕاژەیەکی دیکەی ترەوە بەدوات بکەون. subject: بەخێربیت بۆ ماستۆدۆن title: بەخێربێیت، بەکارهێنەر %{name}! users: diff --git a/config/locales/co.yml b/config/locales/co.yml index f5b6b46d92..c3c185c2f5 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -1050,9 +1050,6 @@ co: welcome: edit_profile_action: Cunfigurazione di u prufile explanation: Eccu alcune idee per principià - final_action: Principià à pustà - full_handle: U vostru identificatore cumplettu - full_handle_hint: Quessu ghjè cio chì direte à i vostri amichi per circavi, abbunassi à u vostru contu da altrò, o mandà missaghji. subject: Benvenutu·a nant’à Mastodon title: Benvenutu·a, %{name}! users: diff --git a/config/locales/cs.yml b/config/locales/cs.yml index e43f671590..69640a261f 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1910,10 +1910,6 @@ cs: edit_profile_action: Nastavit profil edit_profile_step: Váš profil si můžete přizpůsobit nahráním profilového obrázku, změnou zobrazovaného jména a dalším. Můžete se přihlásit k přezkoumání nových následovatelů, než vás budou moci následovat. explanation: Zde je pár tipů do začátku - final_action: Začít psát - final_step: 'Začněte psát příspěvky! I bez sledujících mohou vaše veřejné příspěvky vidět ostatní, například na místní časové ose nebo v hashtagu. Možná se budete chtít představit na hashtagu #představení.' - full_handle: Vaše celá adresa profilu - full_handle_hint: Tohle je, co byste řekli svým přátelům, aby vám mohli posílat zprávy nebo vás sledovat z jiného serveru. subject: Vítejte na Mastodonu title: Vítejte na palubě, %{name}! users: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 1fbcbb2255..19343146f3 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1974,10 +1974,6 @@ cy: edit_profile_action: Sefydlu proffil edit_profile_step: Gallwch addasu'ch proffil trwy lwytho llun proffil, newid eich enw dangos a mwy. Gallwch ddewis i adolygu dilynwyr newydd cyn iddyn nhw gael caniatâd i'ch dilyn. explanation: Dyma ambell nodyn i'ch helpu i ddechrau - final_action: Dechrau postio - final_step: 'Dechreuwch bostio! Hyd yn oed heb ddilynwyr, efallai y bydd eraill yn gweld eich postiadau cyhoeddus, er enghraifft ar y ffrwd leol neu mewn hashnodau. Efallai y byddwch am gyflwyno eich hun ar yr hashnod #cyflwyniadau neu/a #introductions.' - full_handle: Eich enw llawn - full_handle_hint: Dyma beth fyddech chi'n ei ddweud wrth eich ffrindiau fel y gallant anfon neges neu eich dilyn o weinydd arall. subject: Croeso i Mastodon title: Croeso, %{name}! users: diff --git a/config/locales/da.yml b/config/locales/da.yml index 5ceaad9705..62e28cef16 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1846,10 +1846,6 @@ da: edit_profile_action: Opsæt profil edit_profile_step: Man kan tilpasse sin profil ved at uploade profilfoto, overskrift, ændre visningsnavn mv. Ønskes nye følgere vurderet, før de må følge dig, kan kontoen låses. explanation: Her er nogle råd for at få dig i gang - final_action: Begynd at poste - final_step: 'Begynd at poste! Selv uden følgere vil offentlige indlæg kunne ses af andre f.eks. på den lokale tidslinje og i hashtags. Man kan introducere sig selv via hastagget #introductions.' - full_handle: Dit fulde brugernavn - full_handle_hint: Dette er, hvad du oplyser til dine venner, så de kan sende dig beskeder eller følge dig fra andre servere. subject: Velkommen til Mastodon title: Velkommen ombord, %{name}! users: diff --git a/config/locales/de.yml b/config/locales/de.yml index ae1af7b308..123942672e 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1846,10 +1846,6 @@ de: edit_profile_action: Profil einrichten edit_profile_step: Du kannst dein Profil anpassen, indem du ein Profilbild hochlädst, deinen Anzeigenamen änderst und vieles mehr. Du kannst dich dafür entscheiden, neue Follower zu überprüfen, bevor sie dir folgen dürfen. explanation: Hier sind ein paar Tipps, um loszulegen - final_action: Mit erstem Beitrag starten - final_step: 'Fang jetzt an zu posten! Selbst ohne Follower werden deine öffentlichen Beiträge von anderen gesehen, zum Beispiel in der lokalen Timeline oder über die Hashtags. Möglicherweise möchtest du dich allen mit dem Hashtag #neuhier vorstellen.' - full_handle: Dein vollständiger Profilname - full_handle_hint: Deinen vollständigen Profilnamen kannst du deinen Freund*innen mitteilen, damit sie dich anschreiben oder dir von einem anderen Server folgen können. subject: Willkommen bei Mastodon! title: Willkommen an Bord, %{name}! users: diff --git a/config/locales/el.yml b/config/locales/el.yml index 16c042f185..c641d4dca9 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1707,10 +1707,6 @@ el: edit_profile_action: Στήσιμο προφίλ edit_profile_step: Μπορείς να προσαρμόσεις το προφίλ σου ανεβάζοντας μια εικόνα προφίλ, αλλάζοντας το εμφνιζόμενο όνομα και άλλα. Μπορείς να επιλέξεις να αξιολογείς νέους ακόλουθους πριν τους επιτραπεί να σε ακολουθήσουν. explanation: Μερικές συμβουλές για να ξεκινήσεις - final_action: Ξεκίνα να αναρτάς - final_step: 'Ξεκίνα να δημοσιεύεις! Ακόμα και χωρίς ακόλουθους τις δημόσιες δημοσιεύσεις σου μπορεί να τις δουν άλλοι, για παράδειγμα στην τοπική ροή ή στις ετικέτες. Ίσως να θέλεις να μας γνωρίσεις τον εαυτό σου με την ετικέτα #introductions.' - full_handle: Το πλήρες όνομά σου - full_handle_hint: Αυτό θα εδώ θα πεις στους φίλους σου για να σου μιλήσουν ή να σε ακολουθήσουν από άλλο διακομιστή. subject: Καλώς ήρθες στο Mastodon title: Καλώς όρισες, %{name}! users: diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index d4840c84e9..6b2554fe15 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1841,10 +1841,6 @@ en-GB: edit_profile_action: Setup profile edit_profile_step: You can customise your profile by uploading a profile picture, changing your display name and more. You can opt-in to review new followers before they’re allowed to follow you. explanation: Here are some tips to get you started - final_action: Start posting - final_step: 'Start posting! Even without followers, your public posts may be seen by others, for example on the local timeline or in hashtags. You may want to introduce yourself on the #introductions hashtag.' - full_handle: Your full handle - full_handle_hint: This is what you would tell your friends so they can message or follow you from another server. subject: Welcome to Mastodon title: Welcome aboard, %{name}! users: diff --git a/config/locales/en.yml b/config/locales/en.yml index efd603740a..cff244a4b9 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1844,13 +1844,42 @@ en: silence: Account limited suspend: Account suspended welcome: - edit_profile_action: Setup profile - edit_profile_step: You can customize your profile by uploading a profile picture, changing your display name and more. You can opt-in to review new followers before they’re allowed to follow you. + apps_android_action: Get it on Google Play + apps_ios_action: Download on the App Store + apps_step: Download our official apps. + apps_title: Mastodon apps + checklist_subtitle: 'Let''s get you started on this new social frontier:' + checklist_title: Welcome Checklist + edit_profile_action: Personalize + edit_profile_step: Boost your interactions by having a comprehensive profile. + edit_profile_title: Personalize your profile explanation: Here are some tips to get you started - final_action: Start posting - final_step: 'Start posting! Even without followers, your public posts may be seen by others, for example on the local timeline or in hashtags. You may want to introduce yourself on the #introductions hashtag.' - full_handle: Your full handle - full_handle_hint: This is what you would tell your friends so they can message or follow you from another server. + feature_action: Learn more + feature_audience: Mastodon provides you with a unique possibility of managing your audience without middlemen. Mastodon deployed on your own infrastructure allows you to follow and be followed from any other Mastodon server online and is under no one's control but yours. + feature_audience_title: Build your audience in confidence + feature_control: You know best what you want to see on your home feed. No algorithms or ads to waste your time. Follow anyone across any Mastodon server from a single account and receive their posts in chronological order, and make your corner of the internet a little more like you. + feature_control_title: Stay in control of your own timeline + feature_creativity: Mastodon supports audio, video and picture posts, accessibility descriptions, polls, content warnings, animated avatars, custom emojis, thumbnail crop control, and more, to help you express yourself online. Whether you're publishing your art, your music, or your podcast, Mastodon is there for you. + feature_creativity_title: Unparalleled creativity + feature_moderation: Mastodon puts decision making back in your hands. Each server creates their own rules and regulations, which are enforced locally and not top-down like corporate social media, making it the most flexible in responding to the needs of different groups of people. Join a server with the rules you agree with, or host your own. + feature_moderation_title: Moderating the way it should be + follow_action: Follow + follow_step: Following interesting people is what Mastodon is all about. + follow_title: Personalize your home feed + follows_subtitle: Follow well-known accounts + follows_title: Who to follow + follows_view_more: View more people to follow + hashtags_recent_count: "%{people} people in the past %{days} days" + hashtags_subtitle: Explore what’s trending since past 2 days + hashtags_title: Trending hashtags + hashtags_view_more: View more trending hashtags + post_action: Compose + post_step: Say hello to the world with text, photos, videos, or polls. + post_title: Make your first post + share_action: Share + share_step: Let your friends know how to find you on Mastodon. + share_title: Share your Mastodon profile + sign_in_action: Sign in subject: Welcome to Mastodon title: Welcome aboard, %{name}! users: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index beb6aa6d9f..bc694578b7 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -1763,10 +1763,6 @@ eo: edit_profile_action: Agordi profilon edit_profile_step: Vi povas personecigi vian profilon per alŝuti profilbildon, ŝangi vian montronomo kaj pli. explanation: Jen kelkaj konsiloj por helpi vin komenci - final_action: Ekmesaĝi - final_step: 'Ekmesaĝu! Eĉ sen sekvantoj, viaj publikaj mesaĝoj povas esti vidataj de aliaj, ekzemple en la loka templinio aŭ per kradvortoj. Eble vi ŝatus prezenti vin per la kradvorto #introductions / #konigo.' - full_handle: Via kompleta uzantnomo - full_handle_hint: Jen kion vi dirus al viaj amikoj, por ke ili mesaĝu aŭ sekvu vin de alia servilo. subject: Bonvenon en Mastodon title: Bonvenon, %{name}! users: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 1db8e6ecf8..37fcc11d78 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1846,10 +1846,6 @@ es-AR: edit_profile_action: Configurar perfil edit_profile_step: Podés personalizar tu perfil subiendo un avatar (imagen de perfil), cambiando tu nombre a mostrar y más. Podés optar por revisar a los nuevos seguidores antes de que puedan seguirte. explanation: Aquí hay algunos consejos para empezar - final_action: Empezá a enviar mensajes - final_step: "¡Empezá a enviar mensajes! Incluso sin seguidores, tus mensajes públicos pueden ser vistos por otros, por ejemplo en la linea temporal local o al usar etiquetas. Capaz que quieras presentarte al mundo con la etiqueta «#presentación»." - full_handle: Tu nombre de usuario completo - full_handle_hint: Esto es lo que le dirás a tus contactos para que ellos puedan enviarte mensajes o seguirte desde otro servidor. subject: Bienvenido a Mastodon title: "¡Bienvenido a bordo, %{name}!" users: diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index db5c05322b..26dbc2dfb8 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1846,10 +1846,6 @@ es-MX: edit_profile_action: Configurar el perfil edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte. explanation: Aquí hay algunos consejos para empezar - final_action: Empezar a publicar - final_step: "¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #introducciones." - full_handle: Su sobrenombre completo - full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia. subject: Bienvenido a Mastodon title: Te damos la bienvenida a bordo, %{name}! users: diff --git a/config/locales/es.yml b/config/locales/es.yml index e5ccee5ee3..7956580138 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1846,10 +1846,6 @@ es: edit_profile_action: Configurar el perfil edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte. explanation: Aquí hay algunos consejos para empezar - final_action: Empezar a publicar - final_step: "¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #presentación." - full_handle: Su sobrenombre completo - full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia. subject: Bienvenido a Mastodon title: Te damos la bienvenida a bordo, %{name}! users: diff --git a/config/locales/et.yml b/config/locales/et.yml index c21ea0b971..ed25488ce4 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1846,10 +1846,6 @@ et: Kui mõni asi arusaamatuks jääb, siis võib vaadata juhendvideot: https://youtu.be/J4ItbTOAw7Q explanation: Siin on mõned nõuanded, mis aitavad alustada - final_action: Alusta postitamist - final_step: 'Nüüd tee oma esimene postitus. Hea tava on uues kohas ennast tutvustada ning kindlasti kasuta selles postituses ka silti #tutvustus. Isegi kui sul ei ole veel jälgijaid, siis su postitusi näevad kohalikul ajajoonel ka kõik teised serveri kasutajad.' - full_handle: Kasutajanimi Mastodon võrgustikus - full_handle_hint: Kui jagad kasutajanime väljaspool serverit, siis kasuta kindlasti pikka nime. Erinevates serverites võib olla sama kasutajanimega liikmeid. subject: Tere tulemast Mastodoni title: Tere tulemast, %{name}! users: diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 6c625d08bd..fb3013e008 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -1847,10 +1847,6 @@ eu: edit_profile_action: Ezarri profila edit_profile_step: Pertsonalizatu profila abatar bat igoz, zure pantaila-izena aldatuz eta gehiago. Jarraitzaile berriak onartu aurretik berrikusi nahi badituzu, kontuari giltzarrapoa jarri diezaiokezu. explanation: Hona hasteko aholku batzuk - final_action: Hasi bidalketak argitaratzen - final_step: 'Hasi argitaratzen! Jarraitzailerik ez baduzu ere zure bidalketa publikoak besteek ikusi ditzakete, esaterako denbora-lerro lokalean eta traoletan. Zure burua aurkeztu nahi baduzu #aurkezpenak traola erabili zenezake.' - full_handle: Helbide osoa - full_handle_hint: Hau da lagunei esango zeniekeena beste zerbitzari batetik zu jarraitzeko edo zuri mezuak bidaltzeko. subject: Ongi etorri Mastodon-era title: Ongi etorri, %{name}! users: diff --git a/config/locales/fa.yml b/config/locales/fa.yml index f6ff379745..4339e06c34 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -1579,10 +1579,6 @@ fa: edit_profile_action: تنظیم نمایه edit_profile_step: می‌توانید نمایه‌تان را با بارگذاری تصویر نمایه، تغییر نام نمایشی و بیش از این‌‌ها سفارشی کنید. می‌توانید تعیین کنید که پی‌گیران جدید را پیش‌از این که بتوانند دنبالتان کنند بازبینی کنید. explanation: نکته‌هایی که برای آغاز کار به شما کمک می‌کنند - final_action: چیزی منتشر کنید - final_step: 'چیزی بنویسید! حتا بدون پی‌گیر ممکن است فرسته‌های عمومیتان دیده شود. برای مثال روی خط زمانی محلی یا در برچسب‌ها. شاید بخواهید با برچسب #معرفی خودتان را معرّفی کنید.' - full_handle: نام کاربری کامل شما - full_handle_hint: این چیزی است که باید به دوستانتان بگویید تا بتوانند از کارسازی دیگر به شما پیام داده یا پی‌گیرتان شوند. subject: به ماستودون خوش آمدید title: خوش آمدید، کاربر %{name}! users: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index ad6d6e9c07..dc303991bc 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1846,10 +1846,6 @@ fi: edit_profile_action: Määritä profiili edit_profile_step: Voit mukauttaa profiiliasi muun muassa profiilikuvalla ja uudella näyttönimellä. Voit myös valita, haluatko tarkastaa ja hyväksyä uudet seuraajat itse. explanation: Näillä vinkeillä pääset alkuun - final_action: Ala julkaista - final_step: 'Ala julkaista! Vaikkei sinulla olisi seuraajia, voivat muut nähdä julkisia julkaisujasi esimerkiksi paikallisella aikajanalla tai aihetunnisteissa. Kannattaa myös esitellä itsensä aihetunnisteella #esittely.' - full_handle: Koko käyttäjätunnuksesi - full_handle_hint: Kerro tämä kavereillesi, niin he voivat lähettää sinulle viestejä tai seurata sinua toiselta palvelimelta. subject: Tervetuloa Mastodoniin title: Tervetuloa mukaan, %{name}! users: diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 555b82a79d..6a8dd9b2ee 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1846,10 +1846,6 @@ fo: edit_profile_action: Set upp vanga edit_profile_step: Tú kanst tillaga vanga tín við at leggja eina vangamynd inn, broyta vísta navnið hjá tær og meira. Tú kanst velja at eftirkanna nýggjar fylgjarar, áðrenn teir sleppa at fylgja tær. explanation: Her eru nøkur ráð so tú kann koma gott ígongd - final_action: Byrja at posta - final_step: 'Byrja at posta! Sjálvt uttan fylgjarar, so kunnu tínir almennu postar vera sæddir av øðrum, til dømis á lokalu tíðarlinjuni ella í frámerkjum. Kanska vilt tú greiða frá um teg sjálva/n við frámerkinum #introductions.' - full_handle: Fulla brúkaranavn títt - full_handle_hint: Hetta er tað, sum tú fortelur vinum tínum, soleiðis at tey kunnu senda tær boð ella fylgja tær frá einum øðrum ambætara. subject: Vælkomin til Mastodon title: Vælkomin umborð, %{name}! users: diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 3676d0b7b5..97cb08c918 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1841,10 +1841,6 @@ fr-CA: edit_profile_action: Configuration du profil edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant une photo de profil, en changant votre nom d'utilisateur, etc. Vous pouvez opter pour le passage en revue de chaque nouvelle demande d'abonnement à chaque fois qu'un utilisateur essaie de s'abonner à votre compte. explanation: Voici quelques conseils pour vous aider à démarrer - final_action: Commencez à publier - final_step: 'Commencez à publier ! Même si vous n''avez pas encore d''abonnés, vos publications sont publiques et sont accessibles par les autres, par exemple grâce à la zone horaire locale ou par les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.' - full_handle: Votre identifiant complet - full_handle_hint: C’est ce que vous diriez à vos ami·e·s pour leur permettre de vous envoyer un message ou vous suivre à partir d’un autre serveur. subject: Bienvenue sur Mastodon title: Bienvenue à bord, %{name} ! users: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index a3aaf7a26e..b085937c76 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1841,10 +1841,6 @@ fr: edit_profile_action: Configuration du profil edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant une photo de profil, en changant votre nom d'utilisateur, etc. Vous pouvez opter pour le passage en revue de chaque nouvelle demande d'abonnement à chaque fois qu'un utilisateur essaie de s'abonner à votre compte. explanation: Voici quelques conseils pour vous aider à démarrer - final_action: Commencez à publier - final_step: 'Commencez à publier ! Même si vous n''avez pas encore d''abonnés, vos publications sont publiques et sont accessibles par les autres, par exemple grâce à la zone horaire locale ou par les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.' - full_handle: Votre identifiant complet - full_handle_hint: C’est ce que vous diriez à vos ami·e·s pour leur permettre de vous envoyer un message ou vous suivre à partir d’un autre serveur. subject: Bienvenue sur Mastodon title: Bienvenue à bord, %{name} ! users: diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 2cbb69010d..caa88dcfe4 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1841,10 +1841,6 @@ fy: edit_profile_action: Profyl ynstelle edit_profile_step: Jo kinne jo profyl oanpasse troch in profylfoto op te laden, jo werjeftenamme oan te passen en mear. Jo kinne it hânmjittich goedkarren fan folgers ynstelle. explanation: Hjir binne inkelde tips om jo op wei te helpen - final_action: Begjin mei berjochten te pleatsen - final_step: 'Begjin berjochten te pleatsen! Sels sûnder folgers kinne jo iepenbiere berjochten troch oaren besjoen wurde, bygelyks op de lokale tiidline en ûnder hashtags. Jo kinne josels foarstelle mei it gebrûk fan de hashtag #introductions.' - full_handle: Jo folsleine Mastodon-adres - full_handle_hint: Dit jouwe jo oan jo freonen, sadat se jo berjochten stjoere kinne of (fan in oare Mastodon-server ôf) folgje kinne. subject: Wolkom op Mastodon title: Wolkom oan board %{name}! users: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index d3dab8273d..e2a43564c0 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1880,10 +1880,6 @@ gd: edit_profile_action: Suidhich a’ phròifil agad edit_profile_step: "’S urrainn dhut a’ phròifil agad a ghnàthachadh is tu a’ luchdadh suas dealbh pròifil, ag atharrachadh d’ ainm-taisbeanaidh is a bharrachd. ’S urrainn dhut lèirmheas a dhèanamh air daoine mus fhaod iad ’gad leantainn ma thogras tu." explanation: Seo gliocas no dhà gus tòiseachadh - final_action: Tòisich air postadh - final_step: 'Tòisich air postadh! Fiù ’s mur eil duine sam bith ’gad leantainn, chì cuid mhath na postaichean poblach agad, can air an loidhne-ama ionadail no le tagaichean hais. Saoil an innis thu beagan mu d’ dhèidhinn air an taga hais #fàilte?' - full_handle: D’ ainm-cleachdaiche slàn - full_handle_hint: Seo na bheir thu dha na caraidean agad ach an urrainn dhaibh teachdaireachd a chur thugad no ’gad leantainn o fhrithealaiche eile. subject: Fàilte gu Mastodon title: Fàilte air bòrd, %{name}! users: diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 705f0ef4e9..8520b90ead 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1846,10 +1846,6 @@ gl: edit_profile_action: Configurar perfil edit_profile_step: Podes personalizar o teu perfil subindo unha imaxe de perfil, cambiar o nome público e moito máis. Podes elexir revisar as solicitudes de seguimento recibidas antes de permitirlles que te sigan. explanation: Aquí tes algunhas endereitas para ir aprendendo - final_action: Comeza a publicar - final_step: 'Publica! Incluso sen seguidoras, as túas mensaxes públicas serán vistas por outras persoas, por exemplo na cronoloxía local e nos cancelos. Poderías presentarte ao #fediverso utilizando o cancelo #introductions.' - full_handle: O teu alcume completo - full_handle_hint: Compárteo coas túas amizades para que poidan seguirte ou enviarche mensaxes desde outros servidores. subject: Benvida a Mastodon title: Benvida, %{name}! users: diff --git a/config/locales/he.yml b/config/locales/he.yml index b5a98dd24d..55ab576142 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1910,10 +1910,6 @@ he: edit_profile_action: הגדרת פרופיל edit_profile_step: תוכל.י להתאים אישית את הפרופיל באמצעות העלאת יצגן (אוואטר), כותרת, שינוי כינוי ועוד. אם תרצה.י לסקור את עוקביך/ייך החדשים לפני שתרשה.י להם לעקוב אחריך/ייך. explanation: הנה כמה טיפים לעזור לך להתחיל - final_action: התחל/ילי לחצרץ - final_step: 'התחל/ילי לחצצר! אפילו ללא עוקבים ייתכן שהחצרוצים הפומביים שלך יראו ע"י אחרים, למשל בציר הזמן המקומי או בתגיות הקבצה (האשתגים). כדאי להציג את עצמך תחת התגית #introductions או #היכרות' - full_handle: שם המשתמש המלא שלך - full_handle_hint: זה מה שתאמר.י לחברייך כדי שיוכלו לשלוח לך הודעה או לעקוב אחרייך ממופע אחר. subject: ברוכים הבאים למסטודון title: ברוך/ה הבא/ה, %{name} ! users: diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 456636d4c5..733d883da0 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1846,10 +1846,6 @@ hu: edit_profile_action: Készítsd el profilod edit_profile_step: Testreszabhatod a profilod egy profilkép feltöltésével, a megjelenített neved megváltoztatásával és így tovább. Bekapcsolhatod az új követőid jóváhagyását, mielőtt követhetnek. explanation: Néhány tipp a kezdeti lépésekhez - final_action: Kezdj bejegyzéseket írni - final_step: 'Kezdj tülkölni! A nyilvános bejegyzéseid még követők híján is megjelennek másoknak, például a helyi idővonalon vagy a hashtageknél. Kezdd azzal, hogy bemutatkozol a #bemutatkozas vagy az #introductions hashtag használatával.' - full_handle: Teljes felhasználóneved - full_handle_hint: Ez az, amit megadhatsz másoknak, hogy üzenhessenek neked vagy követhessenek téged más szerverekről. subject: Üdvözöl a Mastodon title: Üdv a fedélzeten, %{name}! users: diff --git a/config/locales/hy.yml b/config/locales/hy.yml index f3a6392ff0..b0d8f00864 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -875,7 +875,6 @@ hy: suspend: Հաշիւը արգելափակուած է welcome: edit_profile_action: Կարգաւորել հաշիւը - final_action: Սկսել գրել subject: Բարի գալուստ Մաստոդոն title: Բարի գալուստ նաւամատոյց, %{name} users: diff --git a/config/locales/ia.yml b/config/locales/ia.yml index a85af012f3..52cf861b48 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -256,7 +256,6 @@ ia: disable: Disactivar 2FA user_mailer: welcome: - final_step: 'Comencia a publicar! Mesmo sin sequitores, tu messages public poterea esser reguardate per alteres, per exemplo in le chronologia local o in hashtags. Tu poterea voler introducer te con le hashtag #introductiones.' subject: Benvenite in Mastodon webauthn_credentials: delete: Deler diff --git a/config/locales/id.yml b/config/locales/id.yml index ec8cf9e031..e7f42e115b 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -1560,10 +1560,6 @@ id: edit_profile_action: Siapkan profil edit_profile_step: Anda dapat mengubah profil Anda dengan mengunggah sebuah foto profil, mengubah nama tampilan Anda dan lain-lain. Anda dapat memilih untuk meninjau pengikut baru sebelum mereka diperbolehkan untuk mengikuti Anda. explanation: Beberapa tips sebelum Anda memulai - final_action: Mulai mengirim - final_step: 'Mulai mengirim! Bahkan tanpa pengikut, kiriman publik Anda dapat dilihat oleh orang lain, misalkan di linimasa lokal atau dalam tagar. Anda dapat memperkenalkan diri Anda dalam tagar #introductions.' - full_handle: Penanganan penuh Anda - full_handle_hint: Ini yang dapat Anda sampaikan kepada teman agar mereka dapat mengirim pesan atau mengikuti Anda dari server lain. subject: Selamat datang di Mastodon title: Selamat datang, %{name}! users: diff --git a/config/locales/ie.yml b/config/locales/ie.yml index 4b84d53bd5..eec8569bb2 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -1846,10 +1846,6 @@ ie: edit_profile_action: Configuration de profil edit_profile_step: Tu posse personalisar tui profil por cargar un profil-image, changear tui monstrat nómine e plu. Tu posse optar tractar nov sequitores ante que ili es permisset sequer te. explanation: Vi quelc suggestiones por que tu mey comensar - final_action: Comensar postar - final_step: 'Comensa a postar! Mem sin sequitores, tui public postas posse esser videt de altres, per exemple in li local témpor-linea o in hashtags. Tu fórsan vole introducter te per li hashtag #introductions.' - full_handle: Tui plen usator-nómine - full_handle_hint: Ti-ci es ti quel tu vell dir a tui amics por que ili mey inviar missages a te o sequer te de un altri servitor. subject: Benevenit a Mastodon title: Benevenit, %{name}! users: diff --git a/config/locales/io.yml b/config/locales/io.yml index 341477852f..189f616a4e 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -1799,10 +1799,6 @@ io: edit_profile_action: Facez profilo edit_profile_step: Vu povas kustumizar vua profilo per adchargar profilimajo, chanjesar vua montronomo e plue. Vu povas selektas kontrolar nova sequanti ante oli permisesas sequar vu. explanation: Subo esas guidilo por helpar vu komencar - final_action: Komencez postigar - final_step: 'Jus postigez! Mem sen sequanti, vua publika posti povas videsar da altra personi, exemplo es en lokala tempolineo e en hashtagi. Vu povas anke introduktar su en #introductions hashtagi.' - full_handle: Vua kompleta profilnomo - full_handle_hint: Co esas quon vu dicos a amiki por ke oli povas mesajigar o sequar vu de altra servilo. subject: Bonveno a Mastodon title: Bonveno, %{name}! users: diff --git a/config/locales/is.yml b/config/locales/is.yml index 56d71bd9ad..da6eee9e20 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1850,10 +1850,6 @@ is: edit_profile_action: Setja upp notandasnið edit_profile_step: Þú getur sérsniðið notandasniðið þitt með því að setja inn auðkennismynd þína, breyta birtingarnafninu þínu og ýmislegt fleira. Þú getur valið að yfirfara nýja fylgjendur áður en þú leyfir þeim að fylgjast með þér. explanation: Hér eru nokkrar ábendingar til að koma þér í gang - final_action: Byrjaðu að skrifa - final_step: 'Byrjaðu að tjá þig! Jafnvel án fylgjenda geta aðrir séð opinberar færslur frá þér, til dæmis á staðværu tímalínunni eða í myllumerkjum. Þú gætir jafnvel viljað kynna þig á myllumerkinu #introductions.' - full_handle: Fullt auðkenni þitt - full_handle_hint: Þetta er það sem þú myndir gefa upp við vini þína svo þeir geti sent þér skilaboð eða fylgst með þér af öðrum netþjóni. subject: Velkomin í Mastodon title: Velkomin/n um borð, %{name}! users: diff --git a/config/locales/it.yml b/config/locales/it.yml index a0f1ab7697..3adb4f6c65 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1848,10 +1848,6 @@ it: edit_profile_action: Configura profilo edit_profile_step: Puoi personalizzare il tuo profilo caricando un'immagine del profilo, cambiare il tuo nome e altro ancora. Puoi scegliere di esaminare i nuovi seguaci prima che loro siano autorizzati a seguirti. explanation: Ecco alcuni suggerimenti per iniziare - final_action: Inizia a pubblicare - final_step: 'Inizia a pubblicare! Anche senza seguaci, i tuoi post pubblici possono essere visti da altri, ad esempio sulla timeline locale o negli hashtag. Potresti presentarti con l''hashtag #presentazione.' - full_handle: Il tuo nome utente completo - full_handle_hint: Questo è ciò che diresti ai tuoi amici in modo che possano seguirti o contattarti da un altro server. subject: Benvenuto/a su Mastodon title: Benvenuto a bordo, %{name}! users: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 1bbda050bb..460f02d0a5 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1816,10 +1816,6 @@ ja: プロフィール画像をアップロードしたり、表示名を変更したりして、プロフィールをカスタマイズできます。 新しいフォロワーからフォローリクエストを承認する前に、オプトインで確認できます。 explanation: 始めるにあたってのアドバイスです - final_action: 始めましょう - final_step: 'さあ、始めましょう! たとえフォロワーがまだいなくても、あなたの公開した投稿はローカルタイムラインやハッシュタグなどを通じて誰かの目にとまるはずです。自己紹介をしたいときには #introductions ハッシュタグが便利かもしれません。' - full_handle: あなたの正式なユーザーID - full_handle_hint: 別のサーバーの友達とフォローやメッセージをやり取りする際には、これを伝えることになります。 subject: Mastodonへようこそ title: ようこそ、%{name}さん! users: diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 926922154f..1b3d48810e 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -472,9 +472,6 @@ ka: welcome: edit_profile_action: პროფილის მოწყობა explanation: აქ რამდენიმე რჩევაა დასაწყისისთვის - final_action: დაიწყე პოსტვა - full_handle: თქვენი სრული სახელური - full_handle_hint: ეს არის ის რასაც ეტყვით თქვენს მეგობრებს, რათა მოგწერონ ან გამოგყვნენ სხვა ინსტანციიდან. subject: კეთილი იყოს თქვენი მობრძანება მასტოდონში title: კეთილი იყოს თქვენი მობრძანება, %{name}! users: diff --git a/config/locales/kab.yml b/config/locales/kab.yml index a24d8994fd..d424810926 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -794,8 +794,6 @@ kab: silence: Amiḍan yesɛa talast suspend: Amiḍan yettwaḥbas welcome: - final_action: Bdu asuffeɣ - full_handle: Tansa umiḍan-ik takemmalit subject: Ansuf ɣer Maṣṭudun title: Ansuf yessek·em, %{name}! users: diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 27c76b4378..2cd894befb 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -721,9 +721,6 @@ kk: welcome: edit_profile_action: Профиль өңдеу explanation: Мына кеңестерді шолып өтіңіз - final_action: Жазба жазу - full_handle: Желі тұтқасы - full_handle_hint: This is what you would tell your friends so they can message or follow you frоm another server. subject: Mastodon Желісіне қош келдіңіз title: Ортаға қош келдің, %{name}! users: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 851c3c74b8..45a95139f0 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1816,10 +1816,6 @@ ko: edit_profile_action: 프로필 설정 edit_profile_step: 프로필 사진을 업로드하거나 사람들에게 표시할 이름을 바꾸는 것 등으로 자신의 프로필을 커스텀 할 수 있습니다. 새로운 팔로워를 검토 후에 허용하도록 할 수도 있습니다. explanation: 시작하기 전에 몇가지 팁들을 준비했습니다 - final_action: 포스팅 시작하기 - final_step: '게시물을 올리세요! 팔로워가 없더라도, 공개 게시물들은 다른 사람에게 보여질 수 있습니다, 예를 들자면 로컬이나 연합 타임라인 등이 있습니다. 사람들에게 자신을 소개하고 싶다면 #툿친소 해시태그를 이용해보세요.' - full_handle: 당신의 풀 핸들은 다음과 같습니다 - full_handle_hint: 이것을 당신의 친구들에게 알려주면 다른 서버에서 팔로우 하거나 메시지를 보낼 수 있습니다. subject: 마스토돈에 오신 것을 환영합니다 title: 환영합니다 %{name} 님! users: diff --git a/config/locales/ku.yml b/config/locales/ku.yml index e78e7ecfbb..d744aaa903 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -1594,10 +1594,6 @@ ku: edit_profile_action: Profîlê saz bike edit_profile_step: Tu dikarî bi barkirina wêneyek profîlê, guhertina navê xwe ya xuyangê û bêtir profîla xwe kesane bikî. Berî ku mafê bidî ku te şopînerên nû te bişopînin, tu dikarî binirxînî. explanation: Li vir çend serişte hene ku tu dest pê bike - final_action: Dest bi weşandinê bike - final_step: 'Dest bi weşandinê bike! Bêyî şopîneran jî dibe ku şandiyên te yên gelemperî ji hêla kesên din ve werin dîtin, mînakî li ser demjimêra herêmî û di hashtagan de. Dibe ku tu bixwazî xwe li ser hashtagê #nasname bidî nasandin.' - full_handle: Hemî destikê te - full_handle_hint: Ji hevalên xwe re, ji bona ji rajekarekê din peyam bişîne an jî ji bona ku te bikaribe bişopîne tişta ku tu bibêjî ev e. subject: Tu bi xêr hatî Mastodon title: Bi xêr hatî, %{name}! users: diff --git a/config/locales/lad.yml b/config/locales/lad.yml index d75d0d44c9..13e29f927e 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -1846,10 +1846,6 @@ lad: edit_profile_action: Konfigurasyon de profil edit_profile_step: Puedes personalizar tu profil kargando una foto de profil, trokando tu nombre de utilizador i muncho mas. Puedes optar por revizar a los muevos suivantes antes de ke puedan segirte. explanation: Aki ay algunos konsejos para ampesar - final_action: Ampesa a publikar - final_step: 'Ampesa a publikar! Inkluzo sin suivantes, tus publikasyones publikas pueden ser vistas por otros, por enshemplo en la linya de tiempo lokal o en etiketas. Tal vez keras aprezentarte kon la etiketa de #introduksiones.' - full_handle: Tu sovrenombre kompleto - full_handle_hint: Esto es lo ke le dirias a tus haverim para ke eyos puedan embiarte mesajes o segirte dizde otra instansya. subject: Bienvenido a Mastodon title: Bienvenido, %{name}! users: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 6ca6f3b62f..7ffce1a516 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -608,10 +608,6 @@ lt: welcome: edit_profile_action: Nustatyti profilį explanation: Štai keletas patarimų, kaip pradėti - final_action: Pradėti kelti įrašus - final_step: 'Pradėk skelbti! Net jei ir neturi sekėjų, tavo viešus įrašus gali matyti kiti, pavyzdžiui, vietinėje laiko skalėje arba saitažodžiuose. Galbūt norėsi prisistatyti saitažodyje #introductions.' - full_handle: Tavo pilnas slapyvardis - full_handle_hint: Štai ką pasakytum savo draugams, kad jie galėtų parašyti arba sekti tave iš kito serverio. subject: Sveiki atvykę į Mastodon title: Sveiki atvykę, %{name}! users: diff --git a/config/locales/lv.yml b/config/locales/lv.yml index fcf478cf93..89bdf5f05f 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1855,10 +1855,6 @@ lv: edit_profile_action: Iestatīt profilu edit_profile_step: Tu vari pielāgot savu profilu, augšupielādējot profila attēlu, mainot parādāmo vārdu un citas lietas. Vari izvēlēties pārskatīt jaunus sekotājus, pirms atļauj viņiem tev sekot. explanation: Šeit ir daži padomi, kā sākt darbu - final_action: Sāc publicēt - final_step: 'Sāc publicēt! Pat bez sekotājiem tavas publiskās ziņas var redzēt citi, piemēram, vietējā ziņu lentā vai atsaucēs. Iespējams, tu vēlēsies iepazīstināt ar sevi, izmantojot tēmturi #introductions.' - full_handle: Tavs pilnais lietotājvārds - full_handle_hint: Šis ir tas, ko tu pasaki saviem draugiem, lai viņi varētu tev ziņot vai sekot tev no cita servera. subject: Laipni lūgts Mastodon title: Laipni lūgts uz borta, %{name}! users: diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 6625a13b3b..81f1851b1e 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1772,10 +1772,6 @@ ms: edit_profile_action: Sediakan profil edit_profile_step: Anda boleh menyesuaikan profil anda dengan memuat naik gambar profil, menukar nama paparan anda dan banyak lagi. Anda boleh ikut serta untuk menyemak pengikut baharu sebelum mereka dibenarkan mengikuti anda. explanation: Berikut ialah beberapa petua untuk anda bermula - final_action: Mula menyiarkan - final_step: 'Mula menyiarkan! Walaupun tanpa pengikut, pos awam anda mungkin dilihat oleh orang lain, contohnya pada garis masa tempatan atau dalam hashtag. Anda mungkin ingin memperkenalkan diri anda pada hashtag #introductions.' - full_handle: Pemegang penuh anda - full_handle_hint: Inilah yang anda akan beritahu rakan anda supaya mereka boleh menghantar mesej atau mengikuti anda dari server lain. subject: Selamat datang kepada Mastodon title: Selamat datang, %{name}! users: diff --git a/config/locales/my.yml b/config/locales/my.yml index 094f581eb9..18f5c6a2d0 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -1771,10 +1771,6 @@ my: edit_profile_action: ပရိုဖိုင်ထည့်သွင်းရန် edit_profile_step: ပရိုဖိုင်ဓာတ်ပုံတစ်ပုံ တင်ခြင်း၊ ဖော်ပြမည့်အမည် ပြောင်းလဲခြင်းနှင့် အခြားအရာများပြုလုပ်ခြင်းတို့ဖြင့် သင့်ပရိုဖိုင်ကို စိတ်ကြိုက်ပြင်ဆင်နိုင်ပါသည်။ စောင့်ကြည့်သူအသစ်များ သင့်ကိုစောင့်ကြည့်ခွင့်မပြုမီ ပြန်လည်သုံးသပ်ရန်အတွက် ဆုံးဖြတ်နိုင်ပါသည်။ explanation: ဤသည်မှာ သင် စတင်အသုံးပြုနိုင်ရန်အတွက် အကြံပြုချက်အချို့ဖြစ်ပါသည် - final_action: ပို့စ် တင်ရန် - final_step: 'ပို့စ်စပြီး တင်နိုင်ပါပြီ။ စောင့်ကြည့်သူများမရှိသေးသော်လည်း သင့်အများမြင်ပို့စ်များကို ဒေသတွင်းစာမျက်နှာ သို့မဟုတ် ဟက်ရှ်တက်စာမျက်နှာတို့တွင် အခြားသူများက မြင်နိုင်ပါသည်။ #introductions ဟက်ရှ်တက်ဖြင့် သင့်ကိုယ်သင် မိတ်ဆက်နိုင်ပါသည်။' - full_handle: ကိုယ်တိုင်ထိန်းချုပ်နိုင်သည် - full_handle_hint: ဤသည်မှာ သင့်သူငယ်ချင်းများကို အခြားဆာဗာတစ်ခုမှ မက်ဆေ့ချ်ပို့နိုင်ကြောင်း သို့မဟုတ် စောင့်ကြည့်နိုင်ကြောင်း အသိပေးပါမည်။ subject: Mastodon မှ လှိုက်လှဲစွာကြိုဆိုပါသည်။ title: "%{name} က ကြိုဆိုပါတယ်။" users: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 4392c2366e..c935e9f4aa 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1846,10 +1846,6 @@ nl: edit_profile_action: Profiel instellen edit_profile_step: Je kunt jouw profiel aanpassen door een profielfoto te uploaden, jouw weergavenaam aan te passen en meer. Je kunt het handmatig goedkeuren van volgers instellen. explanation: Hier zijn enkele tips om je op weg te helpen - final_action: Begin berichten te plaatsen - final_step: 'Begin berichten te plaatsen! Zelfs zonder volgers kunnen jouw openbare berichten door anderen bekeken worden, bijvoorbeeld op de lokale tijdlijn en onder hashtags. Je kunt jezelf voorstellen met het gebruik van de hashtag #introductions.' - full_handle: Jouw volledige Mastodon-adres - full_handle_hint: Dit geef je aan jouw vrienden, zodat ze jou berichten kunnen sturen of (vanaf een andere Mastodonserver) kunnen volgen. subject: Welkom op Mastodon title: Welkom aan boord %{name}! users: diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 1524b6f7c1..aecd148e28 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1846,10 +1846,6 @@ nn: edit_profile_action: Lag til profil edit_profile_step: Du kan tilpasse profilen din ved å laste opp et profilbilde, endre visningsnavnet ditt og mer. Du kan velge at nye følgere må godkjennes av deg før de får lov til å følge deg. explanation: Her er nokre tips for å koma i gang - final_action: Kom i gang med å leggja ut - final_step: 'Skriv innlegg! Selv uten følgere kan dine offentlige innlegg bli sett av andre, for eksempel på den lokale tidslinjen og i emneknagger. Du kan introdusere deg selv ved å bruke emneknaggen #introduksjon.' - full_handle: Det fulle brukarnamnet ditt - full_handle_hint: Dette er det du fortel venene dine for at dei skal kunna senda deg meldingar eller fylgja deg frå ein annan tenar. subject: Velkomen til Mastodon title: Velkomen om bord, %{name}! users: diff --git a/config/locales/no.yml b/config/locales/no.yml index d26b20379e..481e28e863 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -1841,10 +1841,6 @@ edit_profile_action: Sett opp profil edit_profile_step: Du kan tilpasse profilen din ved å laste opp et profilbilde, endre visningsnavnet ditt og mer. Du kan velge at nye følgere må godkjennes av deg før de får lov til å følge deg. explanation: Her er noen tips for å komme i gang - final_action: Start postingen - final_step: 'Skriv innlegg! Selv uten følgere kan dine offentlige innlegg bli sett av andre, for eksempel på den lokale tidslinjen og i emneknagger. Du kan introdusere deg selv ved å bruke emneknaggen #introduksjon.' - full_handle: Ditt fullstendige brukernavn - full_handle_hint: Dette er hva du forteller venner slik at de kan sende melding eller følge deg fra en annen instanse. subject: Velkommen til Mastodon title: Velkommen ombord, %{name}! users: diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 2887fc98b3..b8330992c9 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -968,9 +968,6 @@ oc: welcome: edit_profile_action: Configuracion del perfil explanation: Vaquí qualques astúcias per vos preparar - final_action: Començar de publicar - full_handle: Vòstre escais-nom complèt - full_handle_hint: Es aquò que vos cal donar a vòstres amics per que pòscan vos escriure o sègre a partir d’un autre servidor. subject: Benvengut a Mastodon title: Vos desirem la benvenguda a bòrd %{name} ! users: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index f0e6a1f60b..f7c5d60f65 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1910,10 +1910,6 @@ pl: edit_profile_action: Skonfiguruj profil edit_profile_step: Możesz dostosować profil wysyłając awatar, zmieniając wyświetlaną nazwę i o wiele więcej. Jeżeli chcesz, możesz również włączyć przeglądanie i ręczne akceptowanie nowych próśb o możliwość obserwacji Twojego profilu. explanation: Kilka wskazówek, które pomogą Ci rozpocząć - final_action: Zacznij pisać - final_step: 'Zacznij tworzyć! Nawet jeżeli nikt Cię nie obserwuje, Twoje publiczne wiadomości będą widziane przez innych, na przykład na lokalnej osi czasu i w hashtagach. Możesz też utworzyć wpis wprowadzający używając hashtagu #introductions.' - full_handle: Twój pełny adres - full_handle_hint: Ten adres możesz podać znajomym, aby mogli skontaktować się z Tobą lub zacząć obserwować z innego serwera. subject: Witaj w Mastodonie title: Witaj na pokładzie, %{name}! users: diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index ea91fd7dfe..86972f9ef1 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1841,10 +1841,6 @@ pt-BR: edit_profile_action: Configurar perfil edit_profile_step: Você pode personalizar seu perfil enviando uma foto de perfil, mudando seu nome de exibição e mais. Você pode optar por revisar novos seguidores antes que eles possam te seguir. explanation: Aqui estão algumas dicas para você começar - final_action: Comece a publicar - final_step: 'Comece a postar! Mesmo sem seguidores, suas postagens públicas podem ser vistas pelos outros, por exemplo, na linha do tempo local ou nas hashtags. Você pode querer fazer uma introdução usando a hashtag #introduções.' - full_handle: Seu nome de usuário completo - full_handle_hint: Isso é o que você compartilha com seus amigos para que eles possam te mandar mensagens ou te seguir a partir de outro servidor. subject: Boas-vindas ao Mastodon title: Boas vindas, %{name}! users: diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 3007fd2df1..0786ba2ed4 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1846,10 +1846,6 @@ pt-PT: edit_profile_action: Configurar o perfil edit_profile_step: Pode personalizar o seu perfil carregando uma imagem de perfil, alterando o nome a exibir, entre outras opções. Pode optar por rever os novos seguidores antes de estes o poderem seguir. explanation: Aqui estão algumas dicas para começar - final_action: Começar a publicar - final_step: 'Comece a publicar! Mesmo sem seguidores, as suas mensagens públicas podem ser vistas por outros, como por exemplo na cronologia local e em etiquetas. Pense em apresentar-se usando a etiqueta #apresentações.' - full_handle: O seu nome completo - full_handle_hint: Isto é o que tem de facultar aos seus amigos para que eles lhe possam enviar mensagens ou segui-lo a partir de outra instância. subject: Bem-vindo ao Mastodon title: Bem-vindo a bordo, %{name}! users: diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 1bdc4e8ca5..8e4f9e7913 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -709,9 +709,6 @@ ro: welcome: edit_profile_action: Configurare profil explanation: Iată câteva sfaturi pentru a începe - final_action: Începe să postezi - full_handle: Numele tău complet - full_handle_hint: Asta este ceea ce vei putea spune prietenilor pentru a te putea contacta sau pentru a te urmării de pe un alt server. subject: Bine ai venit title: Bine ai venit la bord, %{name}! users: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 04e49e0427..3f15b064f0 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1905,10 +1905,6 @@ ru: edit_profile_action: Настроить профиль edit_profile_step: Вы можете настроить свой профиль добавляя аватарку, изменяя отображаемое имя и так далее. Вы можете вручную подтверждать подписчиков, перед тем как им будет разрешено подписаться на вас. explanation: Вот несколько советов для новичков - final_action: Начать постить - final_step: 'Начинайте постить! Даже без подписчиков, ваши публичные посты могут быть увиденными другими, например в локальной ленте или в хештегах. Вы можете представиться с хэштегом #introductions.' - full_handle: Ваше обращение - full_handle_hint: То, что Вы хотите сообщить своим друзьям, чтобы они могли написать Вам или подписаться с другого узла. subject: Добро пожаловать в Mastodon title: Добро пожаловать на борт, %{name}! users: diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 273ef9d2d9..533764606b 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -1094,9 +1094,6 @@ sc: welcome: edit_profile_action: Cunfigura su profilu explanation: Inoghe ddoe at una paja de impòsitos pro cumintzare - final_action: Cumintza a publicare - full_handle: Su nòmine utente intreu tuo - full_handle_hint: Custu est su chi dias nàrrere a is amistades tuas pro chi ti potzant imbiare messàgios o sighire dae un'àteru serbidore. subject: Ti donamus su benebènnidu a Mastodon title: Ti donamus su benebènnidu, %{name}! users: diff --git a/config/locales/sco.yml b/config/locales/sco.yml index a1071197f1..dc273d2d83 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -1584,10 +1584,6 @@ sco: edit_profile_action: Setup profile edit_profile_step: Ye kin customize yer profile bi uploadin a profile picture, chyngin yer display nemm an mair. Ye kin opt-in fir tae luik ower new follaers afore they’re allooed tae follae ye. explanation: Here some tips fir tae get ye stertit - final_action: Stert postin - final_step: 'Stert postin! Even athout follaers, yer public posts kin stull be seen bi ithers, fir example on the local timeline or in hashtags. Ye mibbie want tae introduce yersel on the #introductions hashtag.' - full_handle: Yer ful haunnle - full_handle_hint: This is whit ye wad tell yer pals sae thit they kin message or follae ye fae anither server. subject: Welcome tae Mastodon, 'mon in title: Welcome aboord, %{name}! users: diff --git a/config/locales/si.yml b/config/locales/si.yml index 660fd3ba31..ac292d6cf8 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1436,9 +1436,6 @@ si: welcome: edit_profile_action: පැතිකඩ පිහිටුවන්න explanation: ඔබ ආරම්භ කිරීමට උපදෙස් කිහිපයක් මෙන්න - final_action: ලිපි පළ කරන්න - full_handle: ඔබේ සම්පූර්ණ හසුරුව - full_handle_hint: මෙය ඔබ ඔබේ මිතුරන්ට පවසනු ඇත, එවිට ඔවුන්ට වෙනත් සේවාදායකයකින් ඔබට පණිවිඩ යැවීමට හෝ අනුගමනය කිරීමට හැකිය. subject: මාස්ටඩන් වෙත පිළිගනිමු title: නැවට සාදරයෙන් පිළිගනිමු, %{name}! users: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 66022b10ae..d97cfac0ea 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -1290,9 +1290,6 @@ sk: welcome: edit_profile_action: Nastav profil explanation: Tu nájdeš nejaké tipy do začiatku - final_action: Začni prispievať - full_handle: Adresa tvojho profilu v celom formáte - full_handle_hint: Toto je čo musíš dať vedieť svojím priateľom aby ti mohli posielať správy, alebo ťa následovať z iného serveru. subject: Vitaj na Mastodone title: Vitaj na palube, %{name}! users: diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 915970f805..c9b2343b69 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1910,10 +1910,6 @@ sl: edit_profile_action: Nastavitve profila edit_profile_step: Profil lahko prilagodite tako, da naložite sliko profila, spremenite pojavno ime in drugo. Lahko izberete, da želite pregledati nove sledilce, preden jim dovolite sledenje. explanation: Tu je nekaj nasvetov za začetek - final_action: Začnite objavljati - final_step: 'Začnite objavljati! Tudi brez sledilcev bodo vaše javne objave videli drugi, npr. na krajevni časovnici ali v ključnikih. Morda se želite predstaviti s ključnikom #introductions.' - full_handle: Vaša polna ročica - full_handle_hint: To bi povedali svojim prijateljem, da vam lahko pošljejo sporočila ali vam sledijo iz drugega strežnika. subject: Dobrodošli na Mastodon title: Dobrodošli, %{name}! users: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 3ad76e2429..4293271bb2 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1842,10 +1842,6 @@ sq: edit_profile_action: Ujdisje profili edit_profile_step: Profilin tuaj mund ta përshtatni duke ngarkuar një figurë, duke ndryshuar emrin tuaj në ekran, etj. Mund të zgjidhni të shqyrtoni ndjekës të rinj, para se të jenë lejuar t’ju ndjekin. explanation: Ja disa ndihmëza, sa për t’ia filluar - final_action: Filloni të postoni - final_step: 'Filloni të postoni! Edhe pa ndjekës, postimet tuaja publike mund të shihen nga të tjerët, për shembull, në rrjedhën kohore vendore, ose në hashtag-ë. Mund të doni të prezantoni veten përmes hashtag-ut #introductions.' - full_handle: Identifikuesi juaj i plotë - full_handle_hint: Kjo është ajo çka do të duhej t’u tregonit shokëve tuaj, që të mund t’ju dërgojnë mesazhe ose t’ju ndjekin nga një shërbyes tjetër. subject: Mirë se vini te Mastodon-i title: Mirë se vini, %{name}! users: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index b55b6e0d19..a1f6df067f 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1873,10 +1873,6 @@ sr-Latn: edit_profile_action: Podesi nalog edit_profile_step: Možete prilagoditi svoj profil tako što ćete postaviti profilnu sliku, promeniti ime za prikaz i tako dalje. Možete dati saglasnost da pregledate nove pratioce pre nego što im dozvolite da Vas zaprate. explanation: Evo nekoliko saveta za početak - final_action: Počnite objavljivati - final_step: 'Počnite da objavljujete! Čak i bez pratilaca, Vaše javne objave su vidljive drugim ljudima, na primer na lokalnoj vremenskoj liniji ili u heš oznakama. Možda želite da se predstavite sa heš oznakom #introductions ili #predstavljanja.' - full_handle: Vaš pun nadimak - full_handle_hint: Ovo biste rekli svojim prijateljima kako bi vam oni poslali poruku, ili zapratili sa druge instance. subject: Dobro došli na Mastodon title: Dobro došli, %{name}! users: diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 9e67e9692d..494b41a754 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1873,10 +1873,6 @@ sr: edit_profile_action: Подеси налог edit_profile_step: Можете прилагодити свој профил тако што ћете поставити профилну слику, променити име за приказ и тако даље. Можете дати сагласност да прегледате нове пратиоце пре него што им дозволите да Вас запрате. explanation: Ево неколико савета за почетак - final_action: Почните објављивати - final_step: 'Почните да објављујете! Чак и без пратилаца, Ваше јавне објаве су видљиве другим људима, на пример на локалној временској линији или у хеш ознакама. Можда желите да се представите са хеш ознаком #introductions или #представљања.' - full_handle: Ваш пун надимак - full_handle_hint: Ово бисте рекли својим пријатељима како би вам они послали поруку, или запратили са друге инстанце. subject: Добро дошли на Mastodon title: Добро дошли, %{name}! users: diff --git a/config/locales/sv.yml b/config/locales/sv.yml index deac7cc638..d0f3994b4e 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1837,10 +1837,6 @@ sv: edit_profile_action: Profilinställning edit_profile_step: Du kan anpassa din profil genom att ladda upp en profilbild, ändra ditt visningsnamn med mera. Du kan välja att granska nya följare innan de får följa dig. explanation: Här är några tips för att komma igång - final_action: Börja göra inlägg - final_step: 'Börja skriv inlägg! Även utan följare kan dina offentliga inlägg ses av andra, exempelvis på den lokala tidslinjen eller i hashtaggar. Du kanske vill introducera dig själv under hashtaggen #introduktion eller #introductions.' - full_handle: Ditt fullständiga användarnamn/mastodonadress - full_handle_hint: Det här är vad du skulle berätta för dina vänner så att de kan meddela eller följa dig från en annan instans. subject: Välkommen till Mastodon title: Välkommen ombord, %{name}! users: diff --git a/config/locales/th.yml b/config/locales/th.yml index e117c29b4a..5253dd6b78 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1814,10 +1814,6 @@ th: edit_profile_action: ตั้งค่าโปรไฟล์ edit_profile_step: คุณสามารถปรับแต่งโปรไฟล์ของคุณได้โดยอัปโหลดรูปภาพโปรไฟล์ เปลี่ยนชื่อที่แสดงของคุณ และอื่น ๆ คุณสามารถเลือกรับการตรวจทานผู้ติดตามใหม่ก่อนที่จะอนุญาตให้เขาติดตามคุณ explanation: นี่คือเคล็ดลับบางส่วนที่จะช่วยให้คุณเริ่มต้นใช้งาน - final_action: เริ่มโพสต์ - final_step: 'เริ่มโพสต์! แม้ว่าไม่มีผู้ติดตาม โพสต์สาธารณะของคุณอาจเห็นโดยผู้อื่น ตัวอย่างเช่น ในเส้นเวลาในเซิร์ฟเวอร์หรือในแฮชแท็ก คุณอาจต้องการแนะนำตัวเองในแฮชแท็ก #introductions' - full_handle: นามเต็มของคุณ - full_handle_hint: นี่คือสิ่งที่คุณจะบอกเพื่อน ๆ ของคุณเพื่อให้เขาสามารถส่งข้อความหรือติดตามคุณจากเซิร์ฟเวอร์อื่น subject: ยินดีต้อนรับสู่ Mastodon title: ยินดีต้อนรับ %{name}! users: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 4ba9d42758..7dbec9abbd 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1846,10 +1846,6 @@ tr: edit_profile_action: Profil kurulumu edit_profile_step: Bir profil resmi yükleyerek, ekran adınızı değiştirerek ve daha fazlasını yaparak profilinizi kişiselleştirebilirsiniz. Sizi takip etmelerine izin verilmeden önce yeni takipçileri incelemeyi tercih edebilirsiniz. explanation: İşte sana başlangıç için birkaç ipucu - final_action: Gönderi yazmaya başlayın - final_step: 'Gönderi yazmaya başlayın! Takipçiler olmadan bile, herkese açık gönderileriniz başkaları tarafından görülebilir, örneğin yerel zaman tünelinde veya etiketlerde. Kendinizi #introductions etiketinde tanıtmak isteyebilirsiniz.' - full_handle: Tanıtıcınız - full_handle_hint: Arkadaşlarınıza, size başka bir sunucudan mesaj atabilmeleri veya sizi takip edebilmeleri için söyleyeceğiniz şey budur. subject: Mastodon'a hoş geldiniz title: Gemiye hoşgeldin, %{name}! users: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 4d4097d658..7273a0ff2b 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1910,10 +1910,6 @@ uk: edit_profile_action: Налаштувати профіль edit_profile_step: Ви можете налаштувати свій профіль, завантаживши зображення профілю, змінивши відображуване ім'я та інше. Ви можете включити для перегляду нових підписників до того, як вони матимуть змогу підписатися на вас. explanation: Ось кілька порад для початку - final_action: Почати писати - final_step: 'Почніть дописувати! Навіть не підписавшись на вас, інші зможуть побачити ваші дописи, наприклад, у локальній стрічці та у хештеґах. Якщо ви хочете представитися, можете скористатися хештеґом #introductions.' - full_handle: Ваше звернення - full_handle_hint: Те, що ви хочете сказати друзям, щоб вони могли написати вам або підписатися з інших сайтів. subject: Ласкаво просимо до Mastodon title: Ласкаво просимо, %{name}! users: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 99434c3544..e362c97a41 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1812,10 +1812,6 @@ vi: edit_profile_action: Cài đặt trang hồ sơ edit_profile_step: Bạn có thể chỉnh sửa trang hồ sơ của mình bằng cách tải lên ảnh đại diện, ảnh bìa, đổi biệt danh và hơn thế nữa. Bạn cũng có thể tự phê duyệt những người theo dõi mới. explanation: Dưới đây là một số mẹo để giúp bạn bắt đầu - final_action: Soạn tút mới - final_step: 'Viết tút mới! Ngay cả khi chưa có người theo dõi, người khác vẫn có thể xem tút công khai của bạn trên bảng tin máy chủ và qua hashtag. Hãy giới thiệu bản thân với hashtag #introductions.' - full_handle: Tên đầy đủ của bạn - full_handle_hint: Đây cũng là địa chỉ được dùng để giao tiếp với tất cả mọi người. subject: Chào mừng đến với Mastodon title: Xin chào %{name}! users: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index cf56a2d227..46a0e40152 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1814,10 +1814,6 @@ zh-CN: edit_profile_action: 设置个人资料 edit_profile_step: 您可以通过上传个人资料图片、更改您的昵称等来自定义您的个人资料。 您可以选择在新关注者关注您之前对其进行审核。 explanation: 下面是几个小贴士,希望它们能帮到你 - final_action: 开始嘟嘟 - final_step: '开始发布嘟文! 即使没有关注者,您的公开嘟文也可能会被其他人看到,例如在本地时间轴或话题标签中。 您可能想在 #introductions 话题标签上介绍自己。' - full_handle: 你的完整用户地址 - full_handle_hint: 你需要把这个告诉你的朋友们,这样他们就能从另一台服务器向你发送信息或者关注你。 subject: 欢迎来到 Mastodon title: "%{name},欢迎你的加入!" users: diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index b010a75c04..e666e4965d 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1809,10 +1809,6 @@ zh-HK: edit_profile_action: 設定個人資料 edit_profile_step: 你可以透過上傳頭像、更改顯示名稱等來自訂個人檔案。你可以選擇讓新使用者追蹤你之前先審查他們。 explanation: 下面是幾個小貼士,希望它們能幫到你 - final_action: 開始發文 - final_step: '開始發文吧!即使你沒有追蹤者,其他人仍然能在本站時間軸或標籤等地方,看到你的公開帖文。試着用 #introductions 標籤來介紹自己吧。' - full_handle: 你的完整 Mastodon 地址 - full_handle_hint: 這訊息將顯示給你朋友們,讓他們能從另一個服務站發信息給你,或者關注你的。 subject: 歡迎來到 Mastodon (萬象) title: 歡迎 %{name} 加入! users: diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index bc8454884c..3cd3583830 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1816,10 +1816,6 @@ zh-TW: edit_profile_action: 設定個人檔案 edit_profile_step: 您可以設定您的個人檔案,包括上傳大頭貼、變更顯示名稱等等。您也可以選擇於新的跟隨者跟隨前,先對他們進行審核。 explanation: 以下是幾個小技巧,希望它們能幫到您 - final_action: 開始嘟嘟 - final_step: '開始嘟嘟吧!即使您現在沒有跟隨者,其他人仍然能於本站時間軸、主題標籤等地方,看到您的公開嘟文。試著用 #introductions 這個主題標籤介紹一下自己吧。' - full_handle: 您的完整帳號名稱 - full_handle_hint: 您需要將這告訴您的朋友們,這樣他們就能從另一個伺服器向您發送訊息或跟隨您。 subject: 歡迎來到 Mastodon title: "%{name} 誠摯歡迎您的加入!" users: From 1d721b21e1ac89fa1e9c8a845294939d33e55ae9 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 1 Mar 2024 15:51:01 +0100 Subject: [PATCH 196/212] Add attribution to Tabler.io icons used in the new mailer designs (#29470) --- .../images/mailer-new/heading/LICENSE | 21 ++++++++++++++++++ .../images/mailer-new/heading/README.md | 1 + .../btn-app-store.png | Bin .../btn-google-play.png | Bin .../images/mailer-new/welcome-icons/LICENSE | 21 ++++++++++++++++++ .../images/mailer-new/welcome-icons/README.md | 1 + .../apps_step-off.png | Bin .../apps_step-on.png | Bin .../edit_profile_step-off.png | Bin .../edit_profile_step-on.png | Bin .../follow_step-off.png | Bin .../follow_step-on.png | Bin .../post_step-off.png | Bin .../post_step-on.png | Bin .../share_step-off.png | Bin .../share_step-on.png | Bin .../application/mailer/_checklist.html.haml | 6 ++--- 17 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 app/javascript/images/mailer-new/heading/LICENSE create mode 100644 app/javascript/images/mailer-new/heading/README.md rename app/javascript/images/mailer-new/{welcome => store-icons}/btn-app-store.png (100%) rename app/javascript/images/mailer-new/{welcome => store-icons}/btn-google-play.png (100%) create mode 100644 app/javascript/images/mailer-new/welcome-icons/LICENSE create mode 100644 app/javascript/images/mailer-new/welcome-icons/README.md rename app/javascript/images/mailer-new/{welcome => welcome-icons}/apps_step-off.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/apps_step-on.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/edit_profile_step-off.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/edit_profile_step-on.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/follow_step-off.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/follow_step-on.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/post_step-off.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/post_step-on.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/share_step-off.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/share_step-on.png (100%) diff --git a/app/javascript/images/mailer-new/heading/LICENSE b/app/javascript/images/mailer-new/heading/LICENSE new file mode 100644 index 0000000000..974db1ac4b --- /dev/null +++ b/app/javascript/images/mailer-new/heading/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2024 Paweł Kuna + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/app/javascript/images/mailer-new/heading/README.md b/app/javascript/images/mailer-new/heading/README.md new file mode 100644 index 0000000000..ecd4b949e7 --- /dev/null +++ b/app/javascript/images/mailer-new/heading/README.md @@ -0,0 +1 @@ +Images in this folder are based on [Tabler.io icons](https://tabler.io/icons). diff --git a/app/javascript/images/mailer-new/welcome/btn-app-store.png b/app/javascript/images/mailer-new/store-icons/btn-app-store.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/btn-app-store.png rename to app/javascript/images/mailer-new/store-icons/btn-app-store.png diff --git a/app/javascript/images/mailer-new/welcome/btn-google-play.png b/app/javascript/images/mailer-new/store-icons/btn-google-play.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/btn-google-play.png rename to app/javascript/images/mailer-new/store-icons/btn-google-play.png diff --git a/app/javascript/images/mailer-new/welcome-icons/LICENSE b/app/javascript/images/mailer-new/welcome-icons/LICENSE new file mode 100644 index 0000000000..974db1ac4b --- /dev/null +++ b/app/javascript/images/mailer-new/welcome-icons/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2024 Paweł Kuna + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/app/javascript/images/mailer-new/welcome-icons/README.md b/app/javascript/images/mailer-new/welcome-icons/README.md new file mode 100644 index 0000000000..ecd4b949e7 --- /dev/null +++ b/app/javascript/images/mailer-new/welcome-icons/README.md @@ -0,0 +1 @@ +Images in this folder are based on [Tabler.io icons](https://tabler.io/icons). diff --git a/app/javascript/images/mailer-new/welcome/apps_step-off.png b/app/javascript/images/mailer-new/welcome-icons/apps_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/apps_step-off.png rename to app/javascript/images/mailer-new/welcome-icons/apps_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/apps_step-on.png b/app/javascript/images/mailer-new/welcome-icons/apps_step-on.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/apps_step-on.png rename to app/javascript/images/mailer-new/welcome-icons/apps_step-on.png diff --git a/app/javascript/images/mailer-new/welcome/edit_profile_step-off.png b/app/javascript/images/mailer-new/welcome-icons/edit_profile_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/edit_profile_step-off.png rename to app/javascript/images/mailer-new/welcome-icons/edit_profile_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/edit_profile_step-on.png b/app/javascript/images/mailer-new/welcome-icons/edit_profile_step-on.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/edit_profile_step-on.png rename to app/javascript/images/mailer-new/welcome-icons/edit_profile_step-on.png diff --git a/app/javascript/images/mailer-new/welcome/follow_step-off.png b/app/javascript/images/mailer-new/welcome-icons/follow_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/follow_step-off.png rename to app/javascript/images/mailer-new/welcome-icons/follow_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/follow_step-on.png b/app/javascript/images/mailer-new/welcome-icons/follow_step-on.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/follow_step-on.png rename to app/javascript/images/mailer-new/welcome-icons/follow_step-on.png diff --git a/app/javascript/images/mailer-new/welcome/post_step-off.png b/app/javascript/images/mailer-new/welcome-icons/post_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/post_step-off.png rename to app/javascript/images/mailer-new/welcome-icons/post_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/post_step-on.png b/app/javascript/images/mailer-new/welcome-icons/post_step-on.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/post_step-on.png rename to app/javascript/images/mailer-new/welcome-icons/post_step-on.png diff --git a/app/javascript/images/mailer-new/welcome/share_step-off.png b/app/javascript/images/mailer-new/welcome-icons/share_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/share_step-off.png rename to app/javascript/images/mailer-new/welcome-icons/share_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/share_step-on.png b/app/javascript/images/mailer-new/welcome-icons/share_step-on.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/share_step-on.png rename to app/javascript/images/mailer-new/welcome-icons/share_step-on.png diff --git a/app/views/application/mailer/_checklist.html.haml b/app/views/application/mailer/_checklist.html.haml index 31cd5bf35d..324fd7e6f8 100644 --- a/app/views/application/mailer/_checklist.html.haml +++ b/app/views/application/mailer/_checklist.html.haml @@ -16,7 +16,7 @@ = image_tag frontend_asset_url('images/mailer-new/welcome/checkbox-off.png'), alt: '', width: 20, height: 20 %td.email-checklist-icons-step-td - if defined?(key) - = image_tag frontend_asset_url("images/mailer-new/welcome/#{key}-#{checked ? 'on' : 'off'}.png"), alt: '', width: 40, height: 40 + = image_tag frontend_asset_url("images/mailer-new/welcome-icons/#{key}-#{checked ? 'on' : 'off'}.png"), alt: '', width: 40, height: 40 %td.email-checklist-text-td .email-desktop-flex /[if mso] @@ -31,8 +31,8 @@ %div - if defined?(show_apps_buttons) && show_apps_buttons .email-welcome-apps-btns - = link_to image_tag(frontend_asset_url('images/mailer-new/welcome/btn-app-store.png'), alt: t('user_mailer.welcome.apps_ios_action'), width: 120, height: 40), 'https://apps.apple.com/app/mastodon-for-iphone-and-ipad/id1571998974' - = link_to image_tag(frontend_asset_url('images/mailer-new/welcome/btn-google-play.png'), alt: t('user_mailer.welcome.apps_android_action'), width: 120, height: 40), 'https://play.google.com/store/apps/details?id=org.joinmastodon.android' + = link_to image_tag(frontend_asset_url('images/mailer-new/store-icons/btn-app-store.png'), alt: t('user_mailer.welcome.apps_ios_action'), width: 120, height: 40), 'https://apps.apple.com/app/mastodon-for-iphone-and-ipad/id1571998974' + = link_to image_tag(frontend_asset_url('images/mailer-new/store-icons/btn-google-play.png'), alt: t('user_mailer.welcome.apps_android_action'), width: 120, height: 40), 'https://play.google.com/store/apps/details?id=org.joinmastodon.android' - elsif defined?(button_text) && defined?(button_url) && defined?(checked) && !checked = render 'application/mailer/button', text: button_text, url: button_url, has_arrow: false /[if mso] From a25014de8fae061f191c95608aabe3d6d02ac45d Mon Sep 17 00:00:00 2001 From: Daniel M Brasil Date: Fri, 1 Mar 2024 13:17:40 -0300 Subject: [PATCH 197/212] Improve `IpBlock` model test coverage (#29460) --- spec/models/ip_block_spec.rb | 53 +++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/spec/models/ip_block_spec.rb b/spec/models/ip_block_spec.rb index ed58826672..290b99b288 100644 --- a/spec/models/ip_block_spec.rb +++ b/spec/models/ip_block_spec.rb @@ -3,7 +3,32 @@ require 'rails_helper' describe IpBlock do - describe 'to_log_human_identifier' do + describe 'validations' do + it 'validates ip presence', :aggregate_failures do + ip_block = described_class.new(ip: nil, severity: :no_access) + + expect(ip_block).to_not be_valid + expect(ip_block).to model_have_error_on_field(:ip) + end + + it 'validates severity presence', :aggregate_failures do + ip_block = described_class.new(ip: '127.0.0.1', severity: nil) + + expect(ip_block).to_not be_valid + expect(ip_block).to model_have_error_on_field(:severity) + end + + it 'validates ip uniqueness', :aggregate_failures do + described_class.create!(ip: '127.0.0.1', severity: :no_access) + + ip_block = described_class.new(ip: '127.0.0.1', severity: :no_access) + + expect(ip_block).to_not be_valid + expect(ip_block).to model_have_error_on_field(:ip) + end + end + + describe '#to_log_human_identifier' do let(:ip_block) { described_class.new(ip: '192.168.0.1') } it 'combines the IP and prefix into a string' do @@ -12,4 +37,30 @@ describe IpBlock do expect(result).to eq('192.168.0.1/32') end end + + describe '.blocked?' do + context 'when the IP is blocked' do + it 'returns true' do + described_class.create!(ip: '127.0.0.1', severity: :no_access) + + expect(described_class.blocked?('127.0.0.1')).to be true + end + end + + context 'when the IP is not blocked' do + it 'returns false' do + expect(described_class.blocked?('127.0.0.1')).to be false + end + end + end + + describe 'after_commit' do + it 'resets the cache' do + allow(Rails.cache).to receive(:delete) + + described_class.create!(ip: '127.0.0.1', severity: :no_access) + + expect(Rails.cache).to have_received(:delete).with(described_class::CACHE_KEY) + end + end end From 18945f62e07617ac44b7a25a61799b0959fe67f7 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 1 Mar 2024 11:24:45 -0500 Subject: [PATCH 198/212] Convert more API specs from controller->request style (#29004) --- .../api/v1/accounts/statuses_spec.rb} | 48 ++++++++++--------- .../api/v1/admin/trends/statuses_spec.rb} | 21 ++++---- .../api/v1/admin/trends/tags_spec.rb} | 21 ++++---- .../api/v1/announcements/reactions_spec.rb} | 24 +++++----- .../api/v1/announcements_spec.rb} | 27 +++++------ .../api/v1/conversations_spec.rb} | 39 +++++++-------- .../api/v1/filters_spec.rb} | 34 ++++++------- .../api/v1/polls/votes_spec.rb} | 18 +++---- .../api/v1/push/subscriptions_spec.rb} | 41 ++++++++-------- .../api/v1/streaming_spec.rb} | 42 ++++++++++------ 10 files changed, 159 insertions(+), 156 deletions(-) rename spec/{controllers/api/v1/accounts/statuses_controller_spec.rb => requests/api/v1/accounts/statuses_spec.rb} (71%) rename spec/{controllers/api/v1/admin/trends/statuses_controller_spec.rb => requests/api/v1/admin/trends/statuses_spec.rb} (63%) rename spec/{controllers/api/v1/admin/trends/tags_controller_spec.rb => requests/api/v1/admin/trends/tags_spec.rb} (64%) rename spec/{controllers/api/v1/announcements/reactions_controller_spec.rb => requests/api/v1/announcements/reactions_spec.rb} (64%) rename spec/{controllers/api/v1/announcements_controller_spec.rb => requests/api/v1/announcements_spec.rb} (59%) rename spec/{controllers/api/v1/conversations_controller_spec.rb => requests/api/v1/conversations_spec.rb} (50%) rename spec/{controllers/api/v1/filters_controller_spec.rb => requests/api/v1/filters_spec.rb} (75%) rename spec/{controllers/api/v1/polls/votes_controller_spec.rb => requests/api/v1/polls/votes_spec.rb} (61%) rename spec/{controllers/api/v1/push/subscriptions_controller_spec.rb => requests/api/v1/push/subscriptions_spec.rb} (67%) rename spec/{controllers/api/v1/streaming_controller_spec.rb => requests/api/v1/streaming_spec.rb} (51%) diff --git a/spec/controllers/api/v1/accounts/statuses_controller_spec.rb b/spec/requests/api/v1/accounts/statuses_spec.rb similarity index 71% rename from spec/controllers/api/v1/accounts/statuses_controller_spec.rb rename to spec/requests/api/v1/accounts/statuses_spec.rb index 102e3b8e91..371867b215 100644 --- a/spec/controllers/api/v1/accounts/statuses_controller_spec.rb +++ b/spec/requests/api/v1/accounts/statuses_spec.rb @@ -2,20 +2,16 @@ require 'rails_helper' -describe Api::V1::Accounts::StatusesController do - render_views +describe 'API V1 Accounts Statuses' do + let(:user) { Fabricate(:user) } + let(:scopes) { 'read:statuses' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - let(:user) { Fabricate(:user) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses') } - - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do + describe 'GET /api/v1/accounts/:account_id/statuses' do it 'returns expected headers', :aggregate_failures do Fabricate(:status, account: user.account) - get :index, params: { account_id: user.account.id, limit: 1 } + get "/api/v1/accounts/#{user.account.id}/statuses", params: { limit: 1 }, headers: headers expect(response).to have_http_status(200) expect(links_from_header.size) @@ -24,7 +20,7 @@ describe Api::V1::Accounts::StatusesController do context 'with only media' do it 'returns http success' do - get :index, params: { account_id: user.account.id, only_media: true } + get "/api/v1/accounts/#{user.account.id}/statuses", params: { only_media: true }, headers: headers expect(response).to have_http_status(200) end @@ -36,7 +32,7 @@ describe Api::V1::Accounts::StatusesController do before do Fabricate(:status, account: user.account, thread: Fabricate(:status)) # Reply to another user - get :index, params: { account_id: user.account.id, exclude_replies: true } + get "/api/v1/accounts/#{user.account.id}/statuses", params: { exclude_replies: true }, headers: headers end it 'returns posts along with self replies', :aggregate_failures do @@ -57,7 +53,7 @@ describe Api::V1::Accounts::StatusesController do end it 'returns http success and includes a header link' do - get :index, params: { account_id: user.account.id, pinned: true } + get "/api/v1/accounts/#{user.account.id}/statuses", params: { pinned: true }, headers: headers expect(response).to have_http_status(200) expect(links_from_header.size) @@ -79,7 +75,7 @@ describe Api::V1::Accounts::StatusesController do end it 'returns http success and header pagination links to prev and next' do - get :index, params: { account_id: user.account.id, pinned: true } + get "/api/v1/accounts/#{user.account.id}/statuses", params: { pinned: true }, headers: headers expect(response).to have_http_status(200) expect(links_from_header.size) @@ -109,15 +105,19 @@ describe Api::V1::Accounts::StatusesController do end it 'returns http success' do - get :index, params: { account_id: account.id, pinned: true } + get "/api/v1/accounts/#{account.id}/statuses", params: { pinned: true }, headers: headers + expect(response).to have_http_status(200) end context 'when user does not follow account' do it 'lists the public status only' do - get :index, params: { account_id: account.id, pinned: true } - json = body_as_json - expect(json.map { |item| item[:id].to_i }).to eq [status.id] + get "/api/v1/accounts/#{account.id}/statuses", params: { pinned: true }, headers: headers + + expect(body_as_json) + .to contain_exactly( + a_hash_including(id: status.id.to_s) + ) end end @@ -127,9 +127,13 @@ describe Api::V1::Accounts::StatusesController do end it 'lists both the public and the private statuses' do - get :index, params: { account_id: account.id, pinned: true } - json = body_as_json - expect(json.map { |item| item[:id].to_i }).to contain_exactly(status.id, private_status.id) + get "/api/v1/accounts/#{account.id}/statuses", params: { pinned: true }, headers: headers + + expect(body_as_json) + .to contain_exactly( + a_hash_including(id: status.id.to_s), + a_hash_including(id: private_status.id.to_s) + ) end end end diff --git a/spec/controllers/api/v1/admin/trends/statuses_controller_spec.rb b/spec/requests/api/v1/admin/trends/statuses_spec.rb similarity index 63% rename from spec/controllers/api/v1/admin/trends/statuses_controller_spec.rb rename to spec/requests/api/v1/admin/trends/statuses_spec.rb index 4d80055ac0..04aa0465f2 100644 --- a/spec/controllers/api/v1/admin/trends/statuses_controller_spec.rb +++ b/spec/requests/api/v1/admin/trends/statuses_spec.rb @@ -2,31 +2,26 @@ require 'rails_helper' -describe Api::V1::Admin::Trends::StatusesController do - render_views - +describe 'API V1 Admin Trends Statuses' do let(:role) { UserRole.find_by(name: 'Admin') } let(:user) { Fabricate(:user, role: role) } let(:scopes) { 'admin:read admin:write' } let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } let(:account) { Fabricate(:account) } let(:status) { Fabricate(:status) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do + describe 'GET /api/v1/admin/trends/statuses' do it 'returns http success' do - get :index, params: { account_id: account.id, limit: 2 } + get '/api/v1/admin/trends/statuses', params: { account_id: account.id, limit: 2 }, headers: headers expect(response).to have_http_status(200) end end - describe 'POST #approve' do + describe 'POST /api/v1/admin/trends/statuses/:id/approve' do before do - post :approve, params: { id: status.id } + post "/api/v1/admin/trends/statuses/#{status.id}/approve", headers: headers end it_behaves_like 'forbidden for wrong scope', 'write:statuses' @@ -37,9 +32,9 @@ describe Api::V1::Admin::Trends::StatusesController do end end - describe 'POST #reject' do + describe 'POST /api/v1/admin/trends/statuses/:id/unapprove' do before do - post :reject, params: { id: status.id } + post "/api/v1/admin/trends/statuses/#{status.id}/reject", headers: headers end it_behaves_like 'forbidden for wrong scope', 'write:statuses' diff --git a/spec/controllers/api/v1/admin/trends/tags_controller_spec.rb b/spec/requests/api/v1/admin/trends/tags_spec.rb similarity index 64% rename from spec/controllers/api/v1/admin/trends/tags_controller_spec.rb rename to spec/requests/api/v1/admin/trends/tags_spec.rb index 0b8eb8c3b8..b1437dad8d 100644 --- a/spec/controllers/api/v1/admin/trends/tags_controller_spec.rb +++ b/spec/requests/api/v1/admin/trends/tags_spec.rb @@ -2,31 +2,26 @@ require 'rails_helper' -describe Api::V1::Admin::Trends::TagsController do - render_views - +describe 'API V1 Admin Trends Tags' do let(:role) { UserRole.find_by(name: 'Admin') } let(:user) { Fabricate(:user, role: role) } let(:scopes) { 'admin:read admin:write' } let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } let(:account) { Fabricate(:account) } let(:tag) { Fabricate(:tag) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do + describe 'GET /api/v1/admin/trends/tags' do it 'returns http success' do - get :index, params: { account_id: account.id, limit: 2 } + get '/api/v1/admin/trends/tags', params: { account_id: account.id, limit: 2 }, headers: headers expect(response).to have_http_status(200) end end - describe 'POST #approve' do + describe 'POST /api/v1/admin/trends/tags/:id/approve' do before do - post :approve, params: { id: tag.id } + post "/api/v1/admin/trends/tags/#{tag.id}/approve", headers: headers end it_behaves_like 'forbidden for wrong scope', 'write:statuses' @@ -37,9 +32,9 @@ describe Api::V1::Admin::Trends::TagsController do end end - describe 'POST #reject' do + describe 'POST /api/v1/admin/trends/tags/:id/reject' do before do - post :reject, params: { id: tag.id } + post "/api/v1/admin/trends/tags/#{tag.id}/reject", headers: headers end it_behaves_like 'forbidden for wrong scope', 'write:statuses' diff --git a/spec/controllers/api/v1/announcements/reactions_controller_spec.rb b/spec/requests/api/v1/announcements/reactions_spec.rb similarity index 64% rename from spec/controllers/api/v1/announcements/reactions_controller_spec.rb rename to spec/requests/api/v1/announcements/reactions_spec.rb index c1debc33fe..ffacb2b0af 100644 --- a/spec/controllers/api/v1/announcements/reactions_controller_spec.rb +++ b/spec/requests/api/v1/announcements/reactions_spec.rb @@ -2,27 +2,26 @@ require 'rails_helper' -RSpec.describe Api::V1::Announcements::ReactionsController do - render_views - +RSpec.describe 'API V1 Announcements Reactions' do let(:user) { Fabricate(:user) } let(:scopes) { 'write:favourites' } let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } let!(:announcement) { Fabricate(:announcement) } - describe 'PUT #update' do + describe 'PUT /api/v1/announcements/:announcement_id/reactions/:id' do context 'without token' do it 'returns http unauthorized' do - put :update, params: { announcement_id: announcement.id, id: '😂' } + put "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}" + expect(response).to have_http_status 401 end end context 'with token' do before do - allow(controller).to receive(:doorkeeper_token) { token } - put :update, params: { announcement_id: announcement.id, id: '😂' } + put "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}", headers: headers end it 'creates reaction', :aggregate_failures do @@ -32,22 +31,21 @@ RSpec.describe Api::V1::Announcements::ReactionsController do end end - describe 'DELETE #destroy' do + describe 'DELETE /api/v1/announcements/:announcement_id/reactions/:id' do before do announcement.announcement_reactions.create!(account: user.account, name: '😂') end context 'without token' do it 'returns http unauthorized' do - delete :destroy, params: { announcement_id: announcement.id, id: '😂' } + delete "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}" expect(response).to have_http_status 401 end end context 'with token' do before do - allow(controller).to receive(:doorkeeper_token) { token } - delete :destroy, params: { announcement_id: announcement.id, id: '😂' } + delete "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}", headers: headers end it 'creates reaction', :aggregate_failures do @@ -56,4 +54,8 @@ RSpec.describe Api::V1::Announcements::ReactionsController do end end end + + def escaped_emoji + CGI.escape('😂') + end end diff --git a/spec/controllers/api/v1/announcements_controller_spec.rb b/spec/requests/api/v1/announcements_spec.rb similarity index 59% rename from spec/controllers/api/v1/announcements_controller_spec.rb rename to spec/requests/api/v1/announcements_spec.rb index 95ce8fd9fc..1624b76012 100644 --- a/spec/controllers/api/v1/announcements_controller_spec.rb +++ b/spec/requests/api/v1/announcements_spec.rb @@ -2,27 +2,26 @@ require 'rails_helper' -RSpec.describe Api::V1::AnnouncementsController do - render_views - - let(:user) { Fabricate(:user) } - let(:scopes) { 'read' } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } +RSpec.describe 'API V1 Announcements' do + let(:user) { Fabricate(:user) } + let(:scopes) { 'read' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } let!(:announcement) { Fabricate(:announcement) } - describe 'GET #index' do + describe 'GET /api/v1/announcements' do context 'without token' do it 'returns http unprocessable entity' do - get :index + get '/api/v1/announcements' + expect(response).to have_http_status 422 end end context 'with token' do before do - allow(controller).to receive(:doorkeeper_token) { token } - get :index + get '/api/v1/announcements', headers: headers end it 'returns http success' do @@ -31,10 +30,11 @@ RSpec.describe Api::V1::AnnouncementsController do end end - describe 'POST #dismiss' do + describe 'POST /api/v1/announcements/:id/dismiss' do context 'without token' do it 'returns http unauthorized' do - post :dismiss, params: { id: announcement.id } + post "/api/v1/announcements/#{announcement.id}/dismiss" + expect(response).to have_http_status 401 end end @@ -43,8 +43,7 @@ RSpec.describe Api::V1::AnnouncementsController do let(:scopes) { 'write:accounts' } before do - allow(controller).to receive(:doorkeeper_token) { token } - post :dismiss, params: { id: announcement.id } + post "/api/v1/announcements/#{announcement.id}/dismiss", headers: headers end it 'dismisses announcement', :aggregate_failures do diff --git a/spec/controllers/api/v1/conversations_controller_spec.rb b/spec/requests/api/v1/conversations_spec.rb similarity index 50% rename from spec/controllers/api/v1/conversations_controller_spec.rb rename to spec/requests/api/v1/conversations_spec.rb index 2734e4a07b..e2327d9a93 100644 --- a/spec/controllers/api/v1/conversations_controller_spec.rb +++ b/spec/requests/api/v1/conversations_spec.rb @@ -2,53 +2,48 @@ require 'rails_helper' -RSpec.describe Api::V1::ConversationsController do - render_views - +RSpec.describe 'API V1 Conversations' do let!(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:statuses' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + let(:other) { Fabricate(:user) } - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index', :sidekiq_inline do - let(:scopes) { 'read:statuses' } - + describe 'GET /api/v1/conversations', :sidekiq_inline do before do PostStatusService.new.call(other.account, text: 'Hey @alice', visibility: 'direct') PostStatusService.new.call(user.account, text: 'Hey, nobody here', visibility: 'direct') end it 'returns pagination headers', :aggregate_failures do - get :index, params: { limit: 1 } + get '/api/v1/conversations', params: { limit: 1 }, headers: headers expect(response).to have_http_status(200) expect(response.headers['Link'].links.size).to eq(2) end it 'returns conversations', :aggregate_failures do - get :index - json = body_as_json - expect(json.size).to eq 2 - expect(json[0][:accounts].size).to eq 1 + get '/api/v1/conversations', headers: headers + + expect(body_as_json.size).to eq 2 + expect(body_as_json[0][:accounts].size).to eq 1 end context 'with since_id' do context 'when requesting old posts' do it 'returns conversations' do - get :index, params: { since_id: Mastodon::Snowflake.id_at(1.hour.ago, with_random: false) } - json = body_as_json - expect(json.size).to eq 2 + get '/api/v1/conversations', params: { since_id: Mastodon::Snowflake.id_at(1.hour.ago, with_random: false) }, headers: headers + + expect(body_as_json.size).to eq 2 end end context 'when requesting posts in the future' do it 'returns no conversation' do - get :index, params: { since_id: Mastodon::Snowflake.id_at(1.hour.from_now, with_random: false) } - json = body_as_json - expect(json.size).to eq 0 + get '/api/v1/conversations', params: { since_id: Mastodon::Snowflake.id_at(1.hour.from_now, with_random: false) }, headers: headers + + expect(body_as_json.size).to eq 0 end end end diff --git a/spec/controllers/api/v1/filters_controller_spec.rb b/spec/requests/api/v1/filters_spec.rb similarity index 75% rename from spec/controllers/api/v1/filters_controller_spec.rb rename to spec/requests/api/v1/filters_spec.rb index b0f64ccf41..deb6e74217 100644 --- a/spec/controllers/api/v1/filters_controller_spec.rb +++ b/spec/requests/api/v1/filters_spec.rb @@ -2,23 +2,18 @@ require 'rails_helper' -RSpec.describe Api::V1::FiltersController do - render_views +RSpec.describe 'API V1 Filters' do + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - let(:user) { Fabricate(:user) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } - - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do + describe 'GET /api/v1/filters' do let(:scopes) { 'read:filters' } let!(:filter) { Fabricate(:custom_filter, account: user.account) } let!(:custom_filter_keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } it 'returns http success' do - get :index + get '/api/v1/filters', headers: headers expect(response).to have_http_status(200) expect(body_as_json) .to contain_exactly( @@ -27,13 +22,13 @@ RSpec.describe Api::V1::FiltersController do end end - describe 'POST #create' do + describe 'POST /api/v1/filters' do let(:scopes) { 'write:filters' } let(:irreversible) { true } let(:whole_word) { false } before do - post :create, params: { phrase: 'magic', context: %w(home), irreversible: irreversible, whole_word: whole_word } + post '/api/v1/filters', params: { phrase: 'magic', context: %w(home), irreversible: irreversible, whole_word: whole_word }, headers: headers end it 'creates a filter', :aggregate_failures do @@ -64,24 +59,25 @@ RSpec.describe Api::V1::FiltersController do end end - describe 'GET #show' do + describe 'GET /api/v1/filters/:id' do let(:scopes) { 'read:filters' } let(:filter) { Fabricate(:custom_filter, account: user.account) } let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } it 'returns http success' do - get :show, params: { id: keyword.id } + get "/api/v1/filters/#{keyword.id}", headers: headers + expect(response).to have_http_status(200) end end - describe 'PUT #update' do + describe 'PUT /api/v1/filters/:id' do let(:scopes) { 'write:filters' } let(:filter) { Fabricate(:custom_filter, account: user.account) } let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } before do - put :update, params: { id: keyword.id, phrase: 'updated' } + put "/api/v1/filters/#{keyword.id}", headers: headers, params: { phrase: 'updated' } end it 'updates the filter', :aggregate_failures do @@ -90,13 +86,13 @@ RSpec.describe Api::V1::FiltersController do end end - describe 'DELETE #destroy' do + describe 'DELETE /api/v1/filters/:id' do let(:scopes) { 'write:filters' } let(:filter) { Fabricate(:custom_filter, account: user.account) } let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } before do - delete :destroy, params: { id: keyword.id } + delete "/api/v1/filters/#{keyword.id}", headers: headers end it 'removes the filter', :aggregate_failures do diff --git a/spec/controllers/api/v1/polls/votes_controller_spec.rb b/spec/requests/api/v1/polls/votes_spec.rb similarity index 61% rename from spec/controllers/api/v1/polls/votes_controller_spec.rb rename to spec/requests/api/v1/polls/votes_spec.rb index 5de225a487..e2b22708be 100644 --- a/spec/controllers/api/v1/polls/votes_controller_spec.rb +++ b/spec/requests/api/v1/polls/votes_spec.rb @@ -2,30 +2,32 @@ require 'rails_helper' -RSpec.describe Api::V1::Polls::VotesController do - render_views - +RSpec.describe 'API V1 Polls Votes' do let(:user) { Fabricate(:user) } let(:scopes) { 'write:statuses' } let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - before { allow(controller).to receive(:doorkeeper_token) { token } } - - describe 'POST #create' do + describe 'POST /api/v1/polls/:poll_id/votes' do let(:poll) { Fabricate(:poll) } before do - post :create, params: { poll_id: poll.id, choices: %w(1) } + post "/api/v1/polls/#{poll.id}/votes", params: { choices: %w(1) }, headers: headers end it 'creates a vote', :aggregate_failures do expect(response).to have_http_status(200) - vote = poll.votes.where(account: user.account).first expect(vote).to_not be_nil expect(vote.choice).to eq 1 expect(poll.reload.cached_tallies).to eq [0, 1] end + + private + + def vote + poll.votes.where(account: user.account).first + end end end diff --git a/spec/controllers/api/v1/push/subscriptions_controller_spec.rb b/spec/requests/api/v1/push/subscriptions_spec.rb similarity index 67% rename from spec/controllers/api/v1/push/subscriptions_controller_spec.rb rename to spec/requests/api/v1/push/subscriptions_spec.rb index 1681914680..d699fd1e08 100644 --- a/spec/controllers/api/v1/push/subscriptions_controller_spec.rb +++ b/spec/requests/api/v1/push/subscriptions_spec.rb @@ -2,9 +2,7 @@ require 'rails_helper' -describe Api::V1::Push::SubscriptionsController do - render_views - +describe 'API V1 Push Subscriptions' do let(:user) { Fabricate(:user) } let(:create_payload) do { @@ -34,15 +32,13 @@ describe Api::V1::Push::SubscriptionsController do }, }.with_indifferent_access end - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'push') } + let(:scopes) { 'push' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'POST #create' do + describe 'POST /api/v1/push/subscription' do before do - post :create, params: create_payload + post '/api/v1/push/subscription', params: create_payload, headers: headers end it 'saves push subscriptions' do @@ -56,19 +52,23 @@ describe Api::V1::Push::SubscriptionsController do end it 'replaces old subscription on repeat calls' do - post :create, params: create_payload + post '/api/v1/push/subscription', params: create_payload, headers: headers + expect(Web::PushSubscription.where(endpoint: create_payload[:subscription][:endpoint]).count).to eq 1 end it 'returns the expected JSON' do - expect(body_as_json.with_indifferent_access).to include({ endpoint: create_payload[:subscription][:endpoint], alerts: {}, policy: 'all' }) + expect(body_as_json.with_indifferent_access) + .to include( + { endpoint: create_payload[:subscription][:endpoint], alerts: {}, policy: 'all' } + ) end end - describe 'PUT #update' do + describe 'PUT /api/v1/push/subscription' do before do - post :create, params: create_payload - put :update, params: alerts_payload + post '/api/v1/push/subscription', params: create_payload, headers: headers + put '/api/v1/push/subscription', params: alerts_payload, headers: headers end it 'changes alert settings' do @@ -82,14 +82,17 @@ describe Api::V1::Push::SubscriptionsController do end it 'returns the expected JSON' do - expect(body_as_json.with_indifferent_access).to include({ endpoint: create_payload[:subscription][:endpoint], alerts: alerts_payload[:data][:alerts], policy: alerts_payload[:data][:policy] }) + expect(body_as_json.with_indifferent_access) + .to include( + { endpoint: create_payload[:subscription][:endpoint], alerts: alerts_payload[:data][:alerts], policy: alerts_payload[:data][:policy] } + ) end end - describe 'DELETE #destroy' do + describe 'DELETE /api/v1/push/subscription' do before do - post :create, params: create_payload - delete :destroy + post '/api/v1/push/subscription', params: create_payload, headers: headers + delete '/api/v1/push/subscription', headers: headers end it 'removes the subscription' do diff --git a/spec/controllers/api/v1/streaming_controller_spec.rb b/spec/requests/api/v1/streaming_spec.rb similarity index 51% rename from spec/controllers/api/v1/streaming_controller_spec.rb rename to spec/requests/api/v1/streaming_spec.rb index 099f68a74e..6b550dfa60 100644 --- a/spec/controllers/api/v1/streaming_controller_spec.rb +++ b/spec/requests/api/v1/streaming_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -describe Api::V1::StreamingController do +describe 'API V1 Streaming' do around do |example| before = Rails.configuration.x.streaming_api_base_url Rails.configuration.x.streaming_api_base_url = "wss://#{Rails.configuration.x.web_domain}" @@ -10,14 +10,13 @@ describe Api::V1::StreamingController do Rails.configuration.x.streaming_api_base_url = before end - before do - request.headers.merge! Host: Rails.configuration.x.web_domain - end + let(:headers) { { 'Host' => Rails.configuration.x.web_domain } } context 'with streaming api on same host' do - describe 'GET #index' do + describe 'GET /api/v1/streaming' do it 'raises ActiveRecord::RecordNotFound' do - get :index + get '/api/v1/streaming', headers: headers + expect(response).to have_http_status(404) end end @@ -28,20 +27,33 @@ describe Api::V1::StreamingController do Rails.configuration.x.streaming_api_base_url = "wss://streaming-#{Rails.configuration.x.web_domain}" end - describe 'GET #index' do + describe 'GET /api/v1/streaming' do it 'redirects to streaming host' do - get :index, params: { access_token: 'deadbeef', stream: 'public' } - expect(response).to have_http_status(301) - request_uri = URI.parse(request.url) - redirect_to_uri = URI.parse(response.location) - [:scheme, :path, :query, :fragment].each do |part| - expect(redirect_to_uri.send(part)).to eq(request_uri.send(part)), "redirect target #{part}" - end - expect(redirect_to_uri.host).to eq(streaming_host), 'redirect target host' + get '/api/v1/streaming', headers: headers, params: { access_token: 'deadbeef', stream: 'public' } + + expect(response) + .to have_http_status(301) + + expect(redirect_to_uri) + .to have_attributes( + fragment: request_uri.fragment, + host: eq(streaming_host), + path: request_uri.path, + query: request_uri.query, + scheme: request_uri.scheme + ) end private + def request_uri + URI.parse(request.url) + end + + def redirect_to_uri + URI.parse(response.location) + end + def streaming_host URI.parse(Rails.configuration.x.streaming_api_base_url).host end From b4af3639e831c974cba3c4bb6d7253883e79c1ce Mon Sep 17 00:00:00 2001 From: Krzysztof Piwowar Date: Fri, 1 Mar 2024 18:35:35 +0100 Subject: [PATCH 199/212] Add Kashubian to languages dropdown (#26024) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 87f0f288d3..798f027167 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -191,6 +191,7 @@ module LanguagesHelper chr: ['Cherokee', 'ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ'].freeze, ckb: ['Sorani (Kurdish)', 'سۆرانی'].freeze, cnr: ['Montenegrin', 'crnogorski'].freeze, + csb: ['Kashubian', 'Kaszëbsczi'].freeze, jbo: ['Lojban', 'la .lojban.'].freeze, kab: ['Kabyle', 'Taqbaylit'].freeze, ldn: ['Láadan', 'Láadan'].freeze, From 8d22599318a3eec7b69df632eab463a85899cf10 Mon Sep 17 00:00:00 2001 From: Helge Date: Fri, 1 Mar 2024 18:36:00 +0100 Subject: [PATCH 200/212] Add Pennsylvania Dutch to languages dropdown (#26634) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 798f027167..5fc2d96d74 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -196,6 +196,7 @@ module LanguagesHelper kab: ['Kabyle', 'Taqbaylit'].freeze, ldn: ['Láadan', 'Láadan'].freeze, lfn: ['Lingua Franca Nova', 'lingua franca nova'].freeze, + pdc: ['Pennsylvania Dutch', 'Pennsilfaani-Deitsch'].freeze, sco: ['Scots', 'Scots'].freeze, sma: ['Southern Sami', 'Åarjelsaemien Gïele'].freeze, smj: ['Lule Sami', 'Julevsámegiella'].freeze, From 5ab944af95ddf496cde18a6bdae6a1bd87e7a713 Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Fri, 1 Mar 2024 17:40:48 +0000 Subject: [PATCH 201/212] Rename Panjabi to Punjabi (#27117) --- app/helpers/languages_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 5fc2d96d74..bea122cad6 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -127,7 +127,7 @@ module LanguagesHelper om: ['Oromo', 'Afaan Oromoo'].freeze, or: ['Oriya', 'ଓଡ଼ିଆ'].freeze, os: ['Ossetian', 'ирон æвзаг'].freeze, - pa: ['Panjabi', 'ਪੰਜਾਬੀ'].freeze, + pa: ['Punjabi', 'ਪੰਜਾਬੀ'].freeze, pi: ['Pāli', 'पाऴि'].freeze, pl: ['Polish', 'Polski'].freeze, ps: ['Pashto', 'پښتو'].freeze, From 1d5de8b26acb448f58e2ce310c1fe35e0750267b Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Fri, 1 Mar 2024 17:41:49 +0000 Subject: [PATCH 202/212] Add Vai to posting languages (#27136) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index bea122cad6..65ade9fd2a 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -202,6 +202,7 @@ module LanguagesHelper smj: ['Lule Sami', 'Julevsámegiella'].freeze, szl: ['Silesian', 'ślůnsko godka'].freeze, tok: ['Toki Pona', 'toki pona'].freeze, + vai: ['Vai', 'ꕙꔤ'].freeze, xal: ['Kalmyk', 'Хальмг келн'].freeze, zba: ['Balaibalan', 'باليبلن'].freeze, zgh: ['Standard Moroccan Tamazight', 'ⵜⴰⵎⴰⵣⵉⵖⵜ'].freeze, From b6b94c971fa7747aeb7d7588319429d6a5d856c9 Mon Sep 17 00:00:00 2001 From: Dave MacLeod <56599343+Dhghomon@users.noreply.github.com> Date: Sat, 2 Mar 2024 02:51:22 +0900 Subject: [PATCH 203/212] Add Interlingue to available_locales (#28630) --- config/initializers/i18n.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/config/initializers/i18n.rb b/config/initializers/i18n.rb index 1c1cea1b94..8643060fa6 100644 --- a/config/initializers/i18n.rb +++ b/config/initializers/i18n.rb @@ -42,6 +42,7 @@ Rails.application.configure do :hu, :hy, :id, + :ie, :ig, :io, :is, From 64b8ba36bb1ac97b7c6dc0b259682a9a4f02524f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sat, 2 Mar 2024 13:31:43 -0500 Subject: [PATCH 204/212] Add `bin/dev` script to launch foreman (#28242) --- README.md | 18 +++++++----------- Vagrantfile | 2 +- bin/dev | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+), 12 deletions(-) create mode 100755 bin/dev diff --git a/README.md b/README.md index 6cf722b355..7f9b115c4f 100644 --- a/README.md +++ b/README.md @@ -83,23 +83,19 @@ A **Vagrant** configuration is included for development purposes. To use it, com - Install Vagrant and Virtualbox - Install the `vagrant-hostsupdater` plugin: `vagrant plugin install vagrant-hostsupdater` - Run `vagrant up` -- Run `vagrant ssh -c "cd /vagrant && foreman start"` +- Run `vagrant ssh -c "cd /vagrant && bin/dev"` - Open `http://mastodon.local` in your browser ### MacOS To set up **MacOS** for native development, complete the following steps: -- Install the latest stable Ruby version (use a Ruby version manager for easy installation and management of Ruby versions) -- Run `brew install postgresql@14` -- Run `brew install redis` -- Run `brew install imagemagick` -- Run `brew install libidn` -- Install Foreman or a similar tool (such as [overmind](https://github.com/DarthSim/overmind)) to handle multiple process launching. -- Navigate to Mastodon's root directory and run `brew install nvm` then `nvm use` to use the version from .nvmrc +- Use a Ruby version manager to install the specified version from `.ruby-version` +- Run `brew install postgresql@14 redis imagemagick libidn` to install required dependencies +- Navigate to Mastodon's root directory and run `brew install nvm` then `nvm use` to use the version from `.nvmrc` - Run `corepack enable && corepack prepare` - Run `bundle exec rails db:setup` (optionally prepend `RAILS_ENV=development` to target the dev environment) -- Finally, run `overmind start -f Procfile.dev` +- Finally, run `bin/dev` which will launch the local services via `overmind` (if installed) or `foreman` ### Docker @@ -108,7 +104,7 @@ For development with **Docker**, complete the following steps: - Install Docker Desktop - Run `docker compose -f .devcontainer/docker-compose.yml up -d` - Run `docker compose -f .devcontainer/docker-compose.yml exec app .devcontainer/post-create.sh` -- Finally, run `docker compose -f .devcontainer/docker-compose.yml exec app foreman start -f Procfile.dev` +- Finally, run `docker compose -f .devcontainer/docker-compose.yml exec app bin/dev` If you are using an IDE with [support for the Development Container specification](https://containers.dev/supporting), it will run the above `docker compose` commands automatically. For **Visual Studio Code** this requires the [Dev Container extension](https://containers.dev/supporting#dev-containers). @@ -119,7 +115,7 @@ To get you coding in just a few minutes, GitHub Codespaces provides a web-based - Click this button to create a new codespace:
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=52281283&devcontainer_path=.devcontainer%2Fcodespaces%2Fdevcontainer.json) - Wait for the environment to build. This will take a few minutes. -- When the editor is ready, run `foreman start -f Procfile.dev` in the terminal. +- When the editor is ready, run `bin/dev` in the terminal. - After a few seconds, a popup will appear with a button labeled _Open in Browser_. This will open Mastodon. - On the _Ports_ tab, right click on the “stream” row and select _Port visibility_ → _Public_. diff --git a/Vagrantfile b/Vagrantfile index 6f0f511095..12bd1ba67a 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -188,7 +188,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.post_up_message = < /dev/null +then + overmind start -f Procfile.dev "$@" + exit $? +fi + +if gem list --no-installed --exact --silent foreman; then + echo "Installing foreman..." + gem install foreman +fi + +foreman start -f Procfile.dev "$@" From 68600893d2ae41c001cf8449e3dd4ffa75f7f8c9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 2 Mar 2024 19:33:33 +0100 Subject: [PATCH 205/212] Update babel monorepo to v7.24.0 (#29434) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 118 +++++++++++++++++++++++++++--------------------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/yarn.lock b/yarn.lock index b336fef88c..a600844022 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,7 +52,7 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.3, @babel/compat-data@npm:^7.23.5": +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.5": version: 7.23.5 resolution: "@babel/compat-data@npm:7.23.5" checksum: 10c0/081278ed46131a890ad566a59c61600a5f9557bd8ee5e535890c8548192532ea92590742fd74bd9db83d74c669ef8a04a7e1c85cdea27f960233e3b83c3a957c @@ -60,25 +60,25 @@ __metadata: linkType: hard "@babel/core@npm:^7.10.4, @babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1": - version: 7.23.9 - resolution: "@babel/core@npm:7.23.9" + version: 7.24.0 + resolution: "@babel/core@npm:7.24.0" dependencies: "@ampproject/remapping": "npm:^2.2.0" "@babel/code-frame": "npm:^7.23.5" "@babel/generator": "npm:^7.23.6" "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helpers": "npm:^7.23.9" - "@babel/parser": "npm:^7.23.9" - "@babel/template": "npm:^7.23.9" - "@babel/traverse": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" + "@babel/helpers": "npm:^7.24.0" + "@babel/parser": "npm:^7.24.0" + "@babel/template": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/03883300bf1252ab4c9ba5b52f161232dd52873dbe5cde9289bb2bb26e935c42682493acbac9194a59a3b6cbd17f4c4c84030db8d6d482588afe64531532ff9b + checksum: 10c0/bb37cbf0bdfd676b246af0a3d9a7932d10573f2d45114fdda02a71889e35530ce13d8930177e78b065d6734b8d45a4fbf7c77f223b1d44b4a28cfe5fefee93ed languageName: node linkType: hard @@ -250,10 +250,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.22.5 - resolution: "@babel/helper-plugin-utils@npm:7.22.5" - checksum: 10c0/d2c4bfe2fa91058bcdee4f4e57a3f4933aed7af843acfd169cd6179fab8d13c1d636474ecabb2af107dc77462c7e893199aa26632bac1c6d7e025a17cbb9d20d +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.24.0 + resolution: "@babel/helper-plugin-utils@npm:7.24.0" + checksum: 10c0/90f41bd1b4dfe7226b1d33a4bb745844c5c63e400f9e4e8bf9103a7ceddd7d425d65333b564d9daba3cebd105985764d51b4bd4c95822b97c2e3ac1201a8a5da languageName: node linkType: hard @@ -342,14 +342,14 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/helpers@npm:7.23.9" +"@babel/helpers@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/helpers@npm:7.24.0" dependencies: - "@babel/template": "npm:^7.23.9" - "@babel/traverse": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" - checksum: 10c0/f69fd0aca96a6fb8bd6dd044cd8a5c0f1851072d4ce23355345b9493c4032e76d1217f86b70df795e127553cf7f3fcd1587ede9d1b03b95e8b62681ca2165b87 + "@babel/template": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" + checksum: 10c0/dd27c9f11c1c5244ef312fae37636f2fcc69c541c46508017b846c4cf680af059f1922ce84e3f778f123a70d027ded75c96070ee8e906f3bc52dc26dc43df608 languageName: node linkType: hard @@ -364,12 +364,12 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/parser@npm:7.23.9" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/parser@npm:7.24.0" bin: parser: ./bin/babel-parser.js - checksum: 10c0/7df97386431366d4810538db4b9ec538f4377096f720c0591c7587a16f6810e62747e9fbbfa1ff99257fd4330035e4fb1b5b77c7bd3b97ce0d2e3780a6618975 + checksum: 10c0/77593d0b9de9906823c4d653bb6cda1c7593837598516330f655f70cba6224a37def7dbe5b4dad0038482d407d8d209eb8be5f48ca9a13357d769f829c5adb8e languageName: node linkType: hard @@ -1004,18 +1004,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.23.4" +"@babel/plugin-transform-object-rest-spread@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.0" dependencies: - "@babel/compat-data": "npm:^7.23.3" - "@babel/helper-compilation-targets": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/compat-data": "npm:^7.23.5" + "@babel/helper-compilation-targets": "npm:^7.23.6" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" "@babel/plugin-transform-parameters": "npm:^7.23.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b56017992ffe7fcd1dd9a9da67c39995a141820316266bcf7d77dc912980d228ccbd3f36191d234f5cc389b09157b5d2a955e33e8fb368319534affd1c72b262 + checksum: 10c0/02fe8b99ee6329e68b97b1b1b5410e50c6c20470e73dcd1d287c6ddb5623c654dce82327b2a3f6710ee3b512fe4950e43ab81d0bbc33d771f0cad3bc3cef87c6 languageName: node linkType: hard @@ -1200,18 +1200,18 @@ __metadata: linkType: hard "@babel/plugin-transform-runtime@npm:^7.22.4": - version: 7.23.9 - resolution: "@babel/plugin-transform-runtime@npm:7.23.9" + version: 7.24.0 + resolution: "@babel/plugin-transform-runtime@npm:7.24.0" dependencies: "@babel/helper-module-imports": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" babel-plugin-polyfill-corejs2: "npm:^0.4.8" babel-plugin-polyfill-corejs3: "npm:^0.9.0" babel-plugin-polyfill-regenerator: "npm:^0.5.5" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/3b959c2b88ea0009c288fa190d9f69b0d26cb336b8a7cab54a5e54b844f33cce1996725c15305a40049c8f23ca30082ee27e1f6853ff35fad723543e3d2dba47 + checksum: 10c0/a632e0c6f4b1be21955646ba4f6e4af323daaa6ab68ce39f92f5186d444402e920b33cabd40759c36f72d8c36f256a35ea03060e407ca69bcf373fdcb450aa42 languageName: node linkType: hard @@ -1333,12 +1333,12 @@ __metadata: linkType: hard "@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4": - version: 7.23.9 - resolution: "@babel/preset-env@npm:7.23.9" + version: 7.24.0 + resolution: "@babel/preset-env@npm:7.24.0" dependencies: "@babel/compat-data": "npm:^7.23.5" "@babel/helper-compilation-targets": "npm:^7.23.6" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-validator-option": "npm:^7.23.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.23.3" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.23.3" @@ -1391,7 +1391,7 @@ __metadata: "@babel/plugin-transform-new-target": "npm:^7.23.3" "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.23.4" "@babel/plugin-transform-numeric-separator": "npm:^7.23.4" - "@babel/plugin-transform-object-rest-spread": "npm:^7.23.4" + "@babel/plugin-transform-object-rest-spread": "npm:^7.24.0" "@babel/plugin-transform-object-super": "npm:^7.23.3" "@babel/plugin-transform-optional-catch-binding": "npm:^7.23.4" "@babel/plugin-transform-optional-chaining": "npm:^7.23.4" @@ -1418,7 +1418,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/2837a42089180e51bfd6864b6d197e01fc0abec1920422e71c0513c2fc8fb5f3bfe694ed778cc4e45856c546964945bc53bf8105e4b26f3580ce3685fa50cc0f + checksum: 10c0/cb5098bb860aede8418f204d7a693108d7c318edbb227f9842ac6aa71f2154ea1737846994af9bcd0c0b716cd73904f69f09bef635a9679465ec3558144beb4f languageName: node linkType: hard @@ -1483,28 +1483,28 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.3, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.23.9 - resolution: "@babel/runtime@npm:7.23.9" + version: 7.24.0 + resolution: "@babel/runtime@npm:7.24.0" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/e71205fdd7082b2656512cc98e647d9ea7e222e4fe5c36e9e5adc026446fcc3ba7b3cdff8b0b694a0b78bb85db83e7b1e3d4c56ef90726682b74f13249cf952d + checksum: 10c0/3495eed727bf4a4f84c35bb51ab53317ae38f4bbc3b1d0a8303751f9dfa0ce6f5fb2afced72b76c3dd0d8bb2ccb84787559a4dee9886291a36b26f02f0f759b4 languageName: node linkType: hard -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.23.9, @babel/template@npm:^7.3.3": - version: 7.23.9 - resolution: "@babel/template@npm:7.23.9" +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3": + version: 7.24.0 + resolution: "@babel/template@npm:7.24.0" dependencies: "@babel/code-frame": "npm:^7.23.5" - "@babel/parser": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" - checksum: 10c0/0e8b60119433787742bc08ae762bbd8d6755611c4cabbcb7627b292ec901a55af65d93d1c88572326069efb64136ef151ec91ffb74b2df7689bbab237030833a + "@babel/parser": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" + checksum: 10c0/9d3dd8d22fe1c36bc3bdef6118af1f4b030aaf6d7d2619f5da203efa818a2185d717523486c111de8d99a8649ddf4bbf6b2a7a64962d8411cf6a8fa89f010e54 languageName: node linkType: hard -"@babel/traverse@npm:7, @babel/traverse@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/traverse@npm:7.23.9" +"@babel/traverse@npm:7, @babel/traverse@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/traverse@npm:7.24.0" dependencies: "@babel/code-frame": "npm:^7.23.5" "@babel/generator": "npm:^7.23.6" @@ -1512,22 +1512,22 @@ __metadata: "@babel/helper-function-name": "npm:^7.23.0" "@babel/helper-hoist-variables": "npm:^7.22.5" "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/parser": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" + "@babel/parser": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/d1615d1d02f04d47111a7ea4446a1a6275668ca39082f31d51f08380de9502e19862be434eaa34b022ce9a17dbb8f9e2b73a746c654d9575f3a680a7ffdf5630 + checksum: 10c0/55ffd2b0ce0fbd0a09051edc4def4fb1e96f35e0b100c0dc2a7429df569971ae312c290e980e423471f350961705698a257c7eea8c8304918024cc26f02468ba languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.23.9 - resolution: "@babel/types@npm:7.23.9" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.24.0 + resolution: "@babel/types@npm:7.24.0" dependencies: "@babel/helper-string-parser": "npm:^7.23.4" "@babel/helper-validator-identifier": "npm:^7.22.20" to-fast-properties: "npm:^2.0.0" - checksum: 10c0/edc7bb180ce7e4d2aea10c6972fb10474341ac39ba8fdc4a27ffb328368dfdfbf40fca18e441bbe7c483774500d5c05e222cec276c242e952853dcaf4eb884f7 + checksum: 10c0/777a0bb5dbe038ca4c905fdafb1cdb6bdd10fe9d63ce13eca0bd91909363cbad554a53dc1f902004b78c1dcbc742056f877f2c99eeedff647333b1fadf51235d languageName: node linkType: hard From ee8d0b94473df357677cd1f82581251ce0423c01 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 4 Mar 2024 07:35:20 +0100 Subject: [PATCH 206/212] Fix follow suggestions potentially including silenced or blocked accounts (#29306) --- .../friends_of_friends_source.rb | 34 ++------ .../similar_profiles_source.rb | 3 +- app/models/account_suggestions/source.rb | 2 + .../friends_of_friends_source_spec.rb | 82 +++++++++++++++++++ .../models/account_suggestions/source_spec.rb | 20 +++-- 5 files changed, 107 insertions(+), 34 deletions(-) create mode 100644 spec/models/account_suggestions/friends_of_friends_source_spec.rb diff --git a/app/models/account_suggestions/friends_of_friends_source.rb b/app/models/account_suggestions/friends_of_friends_source.rb index 93fb10f3b0..0c95d21a3e 100644 --- a/app/models/account_suggestions/friends_of_friends_source.rb +++ b/app/models/account_suggestions/friends_of_friends_source.rb @@ -2,31 +2,15 @@ class AccountSuggestions::FriendsOfFriendsSource < AccountSuggestions::Source def get(account, limit: DEFAULT_LIMIT) - Account.find_by_sql([<<~SQL.squish, { id: account.id, limit: limit }]).map { |row| [row.id, key] } - WITH first_degree AS ( - SELECT target_account_id - FROM follows - JOIN accounts AS target_accounts ON follows.target_account_id = target_accounts.id - WHERE account_id = :id - AND NOT target_accounts.hide_collections - ) - SELECT accounts.id, COUNT(*) AS frequency - FROM accounts - JOIN follows ON follows.target_account_id = accounts.id - JOIN account_stats ON account_stats.account_id = accounts.id - LEFT OUTER JOIN follow_recommendation_mutes ON follow_recommendation_mutes.target_account_id = accounts.id AND follow_recommendation_mutes.account_id = :id - WHERE follows.account_id IN (SELECT * FROM first_degree) - AND NOT EXISTS (SELECT 1 FROM follows f WHERE f.target_account_id = follows.target_account_id AND f.account_id = :id) - AND follows.target_account_id <> :id - AND accounts.discoverable - AND accounts.suspended_at IS NULL - AND accounts.silenced_at IS NULL - AND accounts.moved_to_account_id IS NULL - AND follow_recommendation_mutes.target_account_id IS NULL - GROUP BY accounts.id, account_stats.id - ORDER BY frequency DESC, account_stats.followers_count ASC - LIMIT :limit - SQL + first_degree = account.following.where.not(hide_collections: true).select(:id).reorder(nil) + base_account_scope(account) + .joins(:account_stat) + .where(id: Follow.where(account_id: first_degree).select(:target_account_id)) + .group('accounts.id, account_stats.id') + .reorder('frequency DESC, followers_count DESC') + .limit(limit) + .pluck(Arel.sql('accounts.id, COUNT(*) AS frequency')) + .map { |id, _frequency| [id, key] } end private diff --git a/app/models/account_suggestions/similar_profiles_source.rb b/app/models/account_suggestions/similar_profiles_source.rb index 3ece20aa51..7ecdd607e5 100644 --- a/app/models/account_suggestions/similar_profiles_source.rb +++ b/app/models/account_suggestions/similar_profiles_source.rb @@ -51,7 +51,8 @@ class AccountSuggestions::SimilarProfilesSource < AccountSuggestions::Source recently_followed_account_ids = account.active_relationships.recent.limit(5).pluck(:target_account_id) if Chewy.enabled? && !recently_followed_account_ids.empty? - QueryBuilder.new(recently_followed_account_ids, account).build.limit(limit).hits.pluck('_id').map(&:to_i).zip([key].cycle) + ids_from_es = QueryBuilder.new(recently_followed_account_ids, account).build.limit(limit).hits.pluck('_id').map(&:to_i) + base_account_scope(account).where(id: ids_from_es).pluck(:id).zip([key].cycle) else [] end diff --git a/app/models/account_suggestions/source.rb b/app/models/account_suggestions/source.rb index b2c3c7a3a2..7afc4c80ed 100644 --- a/app/models/account_suggestions/source.rb +++ b/app/models/account_suggestions/source.rb @@ -12,6 +12,8 @@ class AccountSuggestions::Source def base_account_scope(account) Account .searchable + .where(discoverable: true) + .without_silenced .where.not(follows_sql, id: account.id) .where.not(follow_requests_sql, id: account.id) .not_excluded_by_account(account) diff --git a/spec/models/account_suggestions/friends_of_friends_source_spec.rb b/spec/models/account_suggestions/friends_of_friends_source_spec.rb new file mode 100644 index 0000000000..56a974add5 --- /dev/null +++ b/spec/models/account_suggestions/friends_of_friends_source_spec.rb @@ -0,0 +1,82 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AccountSuggestions::FriendsOfFriendsSource do + describe '#get' do + subject { described_class.new } + + let!(:bob) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:alice) { Fabricate(:account, discoverable: true, hide_collections: true) } + let!(:eve) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:mallory) { Fabricate(:account, discoverable: false, hide_collections: false) } + let!(:eugen) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:john) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:jerk) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:neil) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:larry) { Fabricate(:account, discoverable: true, hide_collections: false) } + + context 'with follows and blocks' do + before do + bob.block!(jerk) + FollowRecommendationMute.create!(account: bob, target_account: neil) + + # bob follows eugen, alice and larry + [eugen, alice, larry].each { |account| bob.follow!(account) } + + # alice follows eve and mallory + [john, mallory].each { |account| alice.follow!(account) } + + # eugen follows eve, john, jerk, larry and neil + [eve, mallory, jerk, larry, neil].each { |account| eugen.follow!(account) } + end + + it 'returns eligible accounts', :aggregate_failures do + results = subject.get(bob) + + # eve is returned through eugen + expect(results).to include([eve.id, :friends_of_friends]) + + # john is not reachable because alice hides who she follows + expect(results).to_not include([john.id, :friends_of_friends]) + + # mallory is not discoverable + expect(results).to_not include([mallory.id, :friends_of_friends]) + + # larry is not included because he's followed already + expect(results).to_not include([larry.id, :friends_of_friends]) + + # jerk is blocked + expect(results).to_not include([jerk.id, :friends_of_friends]) + + # the suggestion for neil has already been rejected + expect(results).to_not include([neil.id, :friends_of_friends]) + end + end + + context 'with deterministic order' do + before do + # bob follows eve and mallory + [eve, mallory].each { |account| bob.follow!(account) } + + # eve follows eugen, john, and jerk + [jerk, eugen, john].each { |account| eve.follow!(account) } + + # mallory follows eugen, john, and neil + [neil, eugen, john].each { |account| mallory.follow!(account) } + + john.follow!(eugen) + john.follow!(neil) + end + + it 'returns eligible accounts in the expected order' do + expect(subject.get(bob)).to eq [ + [eugen.id, :friends_of_friends], # followed by 2 friends, 3 followers total + [john.id, :friends_of_friends], # followed by 2 friends, 2 followers total + [neil.id, :friends_of_friends], # followed by 1 friend, 2 followers total + [jerk.id, :friends_of_friends], # followed by 1 friend, 1 follower total + ] + end + end + end +end diff --git a/spec/models/account_suggestions/source_spec.rb b/spec/models/account_suggestions/source_spec.rb index d8227e01bc..1666094082 100644 --- a/spec/models/account_suggestions/source_spec.rb +++ b/spec/models/account_suggestions/source_spec.rb @@ -11,14 +11,16 @@ RSpec.describe AccountSuggestions::Source do end context 'with follows and follow requests' do - let!(:account_domain_blocked_account) { Fabricate(:account, domain: 'blocked.host') } - let!(:account) { Fabricate(:account) } - let!(:blocked_account) { Fabricate(:account) } - let!(:eligible_account) { Fabricate(:account) } - let!(:follow_recommendation_muted_account) { Fabricate(:account) } - let!(:follow_requested_account) { Fabricate(:account) } - let!(:following_account) { Fabricate(:account) } - let!(:moved_account) { Fabricate(:account, moved_to_account: Fabricate(:account)) } + let!(:account_domain_blocked_account) { Fabricate(:account, domain: 'blocked.host', discoverable: true) } + let!(:account) { Fabricate(:account, discoverable: true) } + let!(:blocked_account) { Fabricate(:account, discoverable: true) } + let!(:eligible_account) { Fabricate(:account, discoverable: true) } + let!(:follow_recommendation_muted_account) { Fabricate(:account, discoverable: true) } + let!(:follow_requested_account) { Fabricate(:account, discoverable: true) } + let!(:following_account) { Fabricate(:account, discoverable: true) } + let!(:moved_account) { Fabricate(:account, moved_to_account: Fabricate(:account), discoverable: true) } + let!(:silenced_account) { Fabricate(:account, silenced: true, discoverable: true) } + let!(:undiscoverable_account) { Fabricate(:account, discoverable: false) } before do Fabricate :account_domain_block, account: account, domain: account_domain_blocked_account.domain @@ -40,6 +42,8 @@ RSpec.describe AccountSuggestions::Source do .and not_include(follow_requested_account) .and not_include(following_account) .and not_include(moved_account) + .and not_include(silenced_account) + .and not_include(undiscoverable_account) end end end From 0f7f2571396b3327559c31716af538fb9b34eff6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 10:39:12 +0100 Subject: [PATCH 207/212] Update Yarn to v4.1.1 (#29508) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- streaming/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4f17b427ee..9f20a981ae 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/mastodon", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.1.0", + "packageManager": "yarn@4.1.1", "engines": { "node": ">=18" }, diff --git a/streaming/package.json b/streaming/package.json index efb692578c..6e183a181c 100644 --- a/streaming/package.json +++ b/streaming/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/streaming", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.1.0", + "packageManager": "yarn@4.1.1", "engines": { "node": ">=18" }, From cb0f3ecc28f508af25013834905bb9a11ac87314 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 10:41:31 +0100 Subject: [PATCH 208/212] Update eslint (non-major) (#29505) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 731 +++++++++++++++++++++++++++++------------------------- 1 file changed, 396 insertions(+), 335 deletions(-) diff --git a/yarn.lock b/yarn.lock index a600844022..c5ec6e5f8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1743,10 +1743,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.56.0": - version: 8.56.0 - resolution: "@eslint/js@npm:8.56.0" - checksum: 10c0/60b3a1cf240e2479cec9742424224465dc50e46d781da1b7f5ef240501b2d1202c225bd456207faac4b34a64f4765833345bc4ddffd00395e1db40fa8c426f5a +"@eslint/js@npm:8.57.0": + version: 8.57.0 + resolution: "@eslint/js@npm:8.57.0" + checksum: 10c0/9a518bb8625ba3350613903a6d8c622352ab0c6557a59fe6ff6178bf882bf57123f9d92aa826ee8ac3ee74b9c6203fe630e9ee00efb03d753962dcf65ee4bd94 languageName: node linkType: hard @@ -1935,14 +1935,14 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.13": - version: 0.11.13 - resolution: "@humanwhocodes/config-array@npm:0.11.13" +"@humanwhocodes/config-array@npm:^0.11.14": + version: 0.11.14 + resolution: "@humanwhocodes/config-array@npm:0.11.14" dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.1" - debug: "npm:^4.1.1" + "@humanwhocodes/object-schema": "npm:^2.0.2" + debug: "npm:^4.3.1" minimatch: "npm:^3.0.5" - checksum: 10c0/d76ca802d853366094d0e98ff0d0994117fc8eff96649cd357b15e469e428228f597cd2e929d54ab089051684949955f16ee905bb19f7b2f0446fb377157be7a + checksum: 10c0/66f725b4ee5fdd8322c737cb5013e19fac72d4d69c8bf4b7feb192fcb83442b035b92186f8e9497c220e58b2d51a080f28a73f7899bc1ab288c3be172c467541 languageName: node linkType: hard @@ -1953,10 +1953,10 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.1": - version: 2.0.1 - resolution: "@humanwhocodes/object-schema@npm:2.0.1" - checksum: 10c0/9dba24e59fdb4041829d92b693aacb778add3b6f612aaa9c0774f3b650c11a378cc64f042a59da85c11dae33df456580a3c36837b953541aed6ff94294f97fac +"@humanwhocodes/object-schema@npm:^2.0.2": + version: 2.0.2 + resolution: "@humanwhocodes/object-schema@npm:2.0.2" + checksum: 10c0/6fd83dc320231d71c4541d0244051df61f301817e9f9da9fd4cb7e44ec8aacbde5958c1665b0c419401ab935114fdf532a6ad5d4e7294b1af2f347dd91a6983f languageName: node linkType: hard @@ -3643,14 +3643,14 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^7.0.0": - version: 7.0.2 - resolution: "@typescript-eslint/eslint-plugin@npm:7.0.2" + version: 7.1.1 + resolution: "@typescript-eslint/eslint-plugin@npm:7.1.1" dependencies: "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:7.0.2" - "@typescript-eslint/type-utils": "npm:7.0.2" - "@typescript-eslint/utils": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" + "@typescript-eslint/scope-manager": "npm:7.1.1" + "@typescript-eslint/type-utils": "npm:7.1.1" + "@typescript-eslint/utils": "npm:7.1.1" + "@typescript-eslint/visitor-keys": "npm:7.1.1" debug: "npm:^4.3.4" graphemer: "npm:^1.4.0" ignore: "npm:^5.2.4" @@ -3663,25 +3663,25 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/76727ad48f01c1bb4ef37690e7ed12754930ce3a4bbe5dcd52f24d42f4625fc0b151db8189947f3956b4a09a562eb2da683ff65b57a13a15426eee3b680f80a5 + checksum: 10c0/041799604176bbee01f6ff029c5e2fcf1196db2737ba219a20b095f095dc0064ea425d15dd6dc22eaef294daa838209601ec7bc19317258dfa89a13afb8126ba languageName: node linkType: hard "@typescript-eslint/parser@npm:^7.0.0": - version: 7.0.2 - resolution: "@typescript-eslint/parser@npm:7.0.2" + version: 7.1.1 + resolution: "@typescript-eslint/parser@npm:7.1.1" dependencies: - "@typescript-eslint/scope-manager": "npm:7.0.2" - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/typescript-estree": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" + "@typescript-eslint/scope-manager": "npm:7.1.1" + "@typescript-eslint/types": "npm:7.1.1" + "@typescript-eslint/typescript-estree": "npm:7.1.1" + "@typescript-eslint/visitor-keys": "npm:7.1.1" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/acffdbea0bba24398ba8bd1ccf5b59438bc093e41d7a325019383094f39d676b5cf2f5963bfa5e332e54728e5b9e14be3984752ee91da6f0e1a3e0b613422d0e + checksum: 10c0/84eb44f3767aaa1d7b26176348c89bd6732bc711f7f24186b1354eba95bf9e9c65b5675838772b831391210e525ff1f3bd4b51a3130ec35413aa362920effc57 languageName: node linkType: hard @@ -3695,22 +3695,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/scope-manager@npm:7.0.2" +"@typescript-eslint/scope-manager@npm:7.1.1": + version: 7.1.1 + resolution: "@typescript-eslint/scope-manager@npm:7.1.1" dependencies: - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" - checksum: 10c0/60241a0dbed7605133b6242d7fc172e8ee649e1033b8a179cebe3e21c60e0c08c12679fd37644cfef57c95a5d75a3927afc9d6365a5f9684c1d043285db23c66 + "@typescript-eslint/types": "npm:7.1.1" + "@typescript-eslint/visitor-keys": "npm:7.1.1" + checksum: 10c0/a955c8529f24945d448b95982d06b5f15a74fc5df97307f5821d55e9861d6c26d61cbd118c1ca41634164ed1d4f6c74fcb8388761341c49e6902a6fb72036afc languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/type-utils@npm:7.0.2" +"@typescript-eslint/type-utils@npm:7.1.1": + version: 7.1.1 + resolution: "@typescript-eslint/type-utils@npm:7.1.1" dependencies: - "@typescript-eslint/typescript-estree": "npm:7.0.2" - "@typescript-eslint/utils": "npm:7.0.2" + "@typescript-eslint/typescript-estree": "npm:7.1.1" + "@typescript-eslint/utils": "npm:7.1.1" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.0.1" peerDependencies: @@ -3718,7 +3718,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/fa7957aa65cb0d7366c7c9be94e45cc2f1ebe9981cbf393054b505c6d555a01b2a2fe7cd1254d668f30183a275032f909186ce0b9f213f64b776bd7872144a6e + checksum: 10c0/6f19dc383718cce42ed7262d134f5f0221bcbf225fea28975cd714c90e57d861608d5187c7ad731f6281813f94b00f22282a99a8a852167366064abc6e256341 languageName: node linkType: hard @@ -3729,10 +3729,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/types@npm:7.0.2" - checksum: 10c0/5f95266cc2cd0e6cf1239dcd36b53c7d98b01ba12c61947316f0d879df87b912b4d23f0796324e2ab0fb8780503a338da41a4695fa91d90392b6c6aca5239fa7 +"@typescript-eslint/types@npm:7.1.1": + version: 7.1.1 + resolution: "@typescript-eslint/types@npm:7.1.1" + checksum: 10c0/2bef95ec0c60e67fada336db3e82fac2be16c21a9e54fc45c7aeda3291abcceefa12aa970025db88bc2b3e113b1e70abd7f89c2a651c16b816dff1a0c46e7907 languageName: node linkType: hard @@ -3755,12 +3755,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/typescript-estree@npm:7.0.2" +"@typescript-eslint/typescript-estree@npm:7.1.1": + version: 7.1.1 + resolution: "@typescript-eslint/typescript-estree@npm:7.1.1" dependencies: - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" + "@typescript-eslint/types": "npm:7.1.1" + "@typescript-eslint/visitor-keys": "npm:7.1.1" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" @@ -3770,24 +3770,24 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/2f6795b05fced9f2e0887f6735aa1a0b20516952792e4be13cd94c5e56db8ad013ba27aeb56f89fedff8b7af587f854482f00aac75b418611c74e42169c29aeb + checksum: 10c0/2cec9d21cfe46e523a6d29aff554e5450edf1ee30ce9cf644ee8f1f5e1cfd44b94afb3632db97a949c86c4a392ae80f264d56d8747b2b0fdbe5c54139433366a languageName: node linkType: hard -"@typescript-eslint/utils@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/utils@npm:7.0.2" +"@typescript-eslint/utils@npm:7.1.1": + version: 7.1.1 + resolution: "@typescript-eslint/utils@npm:7.1.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" "@types/json-schema": "npm:^7.0.12" "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:7.0.2" - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/typescript-estree": "npm:7.0.2" + "@typescript-eslint/scope-manager": "npm:7.1.1" + "@typescript-eslint/types": "npm:7.1.1" + "@typescript-eslint/typescript-estree": "npm:7.1.1" semver: "npm:^7.5.4" peerDependencies: eslint: ^8.56.0 - checksum: 10c0/b4ae9a36393c92b332e99d70219d1ee056271261f7433924db804e5f06d97ca60408b9c7a655afce8a851982e7153243a625d6cc76fea764f767f96c8f3e16da + checksum: 10c0/3e70834c5b49e4643ec8da63fa2acaab54283a566af2cedcd4c2f4210833a59bf71c459dde69e738115633c7de9f1339130552ff246e8e1bb4db26910685408b languageName: node linkType: hard @@ -3818,13 +3818,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/visitor-keys@npm:7.0.2" +"@typescript-eslint/visitor-keys@npm:7.1.1": + version: 7.1.1 + resolution: "@typescript-eslint/visitor-keys@npm:7.1.1" dependencies: - "@typescript-eslint/types": "npm:7.0.2" + "@typescript-eslint/types": "npm:7.1.1" eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/4146d1ad6ce9374e6b5a75677fc709816bdc5fe324b1a857405f21dad23bb28c79cfd0555bc2a01c4af1d9e9ee81ff5e29ec41cc9d05b0b1101cc4264e7f21d1 + checksum: 10c0/1ab19ec966ff0b86317eddcbfcda645856ec01c3b76a451298031f35e4da0a363e4888ce5ae9e2526e874799a502c49922d83d57d21cb6fef7f3912f51e4a271 languageName: node linkType: hard @@ -4353,13 +4353,13 @@ __metadata: languageName: node linkType: hard -"array-buffer-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "array-buffer-byte-length@npm:1.0.0" +"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" dependencies: - call-bind: "npm:^1.0.2" - is-array-buffer: "npm:^3.0.1" - checksum: 10c0/12f84f6418b57a954caa41654e5e63e019142a4bbb2c6829ba86d1ba65d31ccfaf1461d1743556fd32b091fac34ff44d9dfbdb001402361c45c373b2c86f5c20 + call-bind: "npm:^1.0.5" + is-array-buffer: "npm:^3.0.4" + checksum: 10c0/f5cdf54527cd18a3d2852ddf73df79efec03829e7373a8322ef5df2b4ef546fb365c19c71d6b42d641cb6bfe0f1a2f19bc0ece5b533295f86d7c3d522f228917 languageName: node linkType: hard @@ -4420,6 +4420,19 @@ __metadata: languageName: node linkType: hard +"array.prototype.findlast@npm:^1.2.4": + version: 1.2.4 + resolution: "array.prototype.findlast@npm:1.2.4" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.3.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/4b5145a68ebaa00ef3d61de07c6694cad73d60763079f1e7662b948e5a167b5121b0c1e6feae8df1e42ead07c21699e25242b95cd5c48e094fd530b192aa4150 + languageName: node + linkType: hard + "array.prototype.findlastindex@npm:^1.2.3": version: 1.2.3 resolution: "array.prototype.findlastindex@npm:1.2.3" @@ -4445,7 +4458,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.3.1, array.prototype.flatmap@npm:^1.3.2": +"array.prototype.flatmap@npm:^1.3.2": version: 1.3.2 resolution: "array.prototype.flatmap@npm:1.3.2" dependencies: @@ -4470,31 +4483,44 @@ __metadata: languageName: node linkType: hard -"array.prototype.tosorted@npm:^1.1.1": - version: 1.1.1 - resolution: "array.prototype.tosorted@npm:1.1.1" +"array.prototype.toreversed@npm:^1.1.2": + version: 1.1.2 + resolution: "array.prototype.toreversed@npm:1.1.2" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - es-shim-unscopables: "npm:^1.0.0" - get-intrinsic: "npm:^1.1.3" - checksum: 10c0/fd5f57aca3c7ddcd1bb83965457b625f3a67d8f334f5cbdb8ac8ef33d5b0d38281524114db2936f8c08048115d5158af216c94e6ae1eb966241b9b6f4ab8a7e8 - languageName: node - linkType: hard - -"arraybuffer.prototype.slice@npm:^1.0.2": - version: 1.0.2 - resolution: "arraybuffer.prototype.slice@npm:1.0.2" - dependencies: - array-buffer-byte-length: "npm:^1.0.0" call-bind: "npm:^1.0.2" define-properties: "npm:^1.2.0" es-abstract: "npm:^1.22.1" - get-intrinsic: "npm:^1.2.1" - is-array-buffer: "npm:^3.0.2" + es-shim-unscopables: "npm:^1.0.0" + checksum: 10c0/2b7627ea85eae1e80ecce665a500cc0f3355ac83ee4a1a727562c7c2a1d5f1c0b4dd7b65c468ec6867207e452ba01256910a2c0b41486bfdd11acf875a7a3435 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.3": + version: 1.1.3 + resolution: "array.prototype.tosorted@npm:1.1.3" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.1.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/a27e1ca51168ecacf6042901f5ef021e43c8fa04b6c6b6f2a30bac3645cd2b519cecbe0bc45db1b85b843f64dc3207f0268f700b4b9fbdec076d12d432cf0865 + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.2.1" + get-intrinsic: "npm:^1.2.3" + is-array-buffer: "npm:^3.0.4" is-shared-array-buffer: "npm:^1.0.2" - checksum: 10c0/96b6e40e439678ffb7fa266398510074d33c3980fbb475490b69980cca60adec3b0777047ef377068a29862157f83edef42efc64ce48ce38977d04d68de5b7fb + checksum: 10c0/d32754045bcb2294ade881d45140a5e52bda2321b9e98fa514797b7f0d252c4c5ab0d1edb34112652c62fa6a9398def568da63a4d7544672229afea283358c36 languageName: node linkType: hard @@ -4644,10 +4670,12 @@ __metadata: languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.5": - version: 1.0.5 - resolution: "available-typed-arrays@npm:1.0.5" - checksum: 10c0/c4df567ca72d2754a6cbad20088f5f98b1065b3360178169fa9b44ea101af62c0f423fc3854fa820fd6895b6b9171b8386e71558203103ff8fc2ad503fdcc660 +"available-typed-arrays@npm:^1.0.6, available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 languageName: node linkType: hard @@ -5335,14 +5363,16 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.4, call-bind@npm:^1.0.5": - version: 1.0.5 - resolution: "call-bind@npm:1.0.5" +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.1" - set-function-length: "npm:^1.1.1" - checksum: 10c0/a6172c168fd6dacf744fcde745099218056bd755c50415b592655dcd6562157ed29f130f56c3f6db2250f67e4bd62e5c218cdc56d7bfd76e0bda50770fce2d10 + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.1" + checksum: 10c0/a3ded2e423b8e2a265983dba81c27e125b48eefb2655e7dfab6be597088da3d47c47976c24bc51b8fd9af1061f8f87b4ab78a314f3c77784b2ae2ba535ad8b8d languageName: node linkType: hard @@ -6493,14 +6523,14 @@ __metadata: languageName: node linkType: hard -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.1": - version: 1.1.1 - resolution: "define-data-property@npm:1.1.1" +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.2": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" dependencies: - get-intrinsic: "npm:^1.2.1" + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.0" - checksum: 10c0/77ef6e0bceb515e05b5913ab635a84d537cee84f8a7c37c77fdcb31fc5b80f6dbe81b33375e4b67d96aa04e6a0d8d4ea099e431d83f089af8d93adfb584bcb94 + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 languageName: node linkType: hard @@ -7051,50 +7081,52 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.2, es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2, es-abstract@npm:^1.22.1": - version: 1.22.3 - resolution: "es-abstract@npm:1.22.3" +"es-abstract@npm:^1.17.2, es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.22.4": + version: 1.22.5 + resolution: "es-abstract@npm:1.22.5" dependencies: - array-buffer-byte-length: "npm:^1.0.0" - arraybuffer.prototype.slice: "npm:^1.0.2" - available-typed-arrays: "npm:^1.0.5" - call-bind: "npm:^1.0.5" - es-set-tostringtag: "npm:^2.0.1" + array-buffer-byte-length: "npm:^1.0.1" + arraybuffer.prototype.slice: "npm:^1.0.3" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-set-tostringtag: "npm:^2.0.3" es-to-primitive: "npm:^1.2.1" function.prototype.name: "npm:^1.1.6" - get-intrinsic: "npm:^1.2.2" - get-symbol-description: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + get-symbol-description: "npm:^1.0.2" globalthis: "npm:^1.0.3" gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.0" - has-proto: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.0.3" has-symbols: "npm:^1.0.3" - hasown: "npm:^2.0.0" - internal-slot: "npm:^1.0.5" - is-array-buffer: "npm:^3.0.2" + hasown: "npm:^2.0.1" + internal-slot: "npm:^1.0.7" + is-array-buffer: "npm:^3.0.4" is-callable: "npm:^1.2.7" - is-negative-zero: "npm:^2.0.2" + is-negative-zero: "npm:^2.0.3" is-regex: "npm:^1.1.4" - is-shared-array-buffer: "npm:^1.0.2" + is-shared-array-buffer: "npm:^1.0.3" is-string: "npm:^1.0.7" - is-typed-array: "npm:^1.1.12" + is-typed-array: "npm:^1.1.13" is-weakref: "npm:^1.0.2" object-inspect: "npm:^1.13.1" object-keys: "npm:^1.1.1" - object.assign: "npm:^4.1.4" - regexp.prototype.flags: "npm:^1.5.1" - safe-array-concat: "npm:^1.0.1" - safe-regex-test: "npm:^1.0.0" + object.assign: "npm:^4.1.5" + regexp.prototype.flags: "npm:^1.5.2" + safe-array-concat: "npm:^1.1.0" + safe-regex-test: "npm:^1.0.3" string.prototype.trim: "npm:^1.2.8" string.prototype.trimend: "npm:^1.0.7" string.prototype.trimstart: "npm:^1.0.7" - typed-array-buffer: "npm:^1.0.0" - typed-array-byte-length: "npm:^1.0.0" - typed-array-byte-offset: "npm:^1.0.0" - typed-array-length: "npm:^1.0.4" + typed-array-buffer: "npm:^1.0.2" + typed-array-byte-length: "npm:^1.0.1" + typed-array-byte-offset: "npm:^1.0.2" + typed-array-length: "npm:^1.0.5" unbox-primitive: "npm:^1.0.2" - which-typed-array: "npm:^1.1.13" - checksum: 10c0/da31ec43b1c8eb47ba8a17693cac143682a1078b6c3cd883ce0e2062f135f532e93d873694ef439670e1f6ca03195118f43567ba6f33fb0d6c7daae750090236 + which-typed-array: "npm:^1.1.14" + checksum: 10c0/4bca5a60f0dff6c0a5690d8e51374cfcb8760d5dbbb1069174b4d41461cf4e0c3e0c1993bccbc5aa0799ff078199f1bcde2122b8709e0d17c2beffafff01010a languageName: node linkType: hard @@ -7105,6 +7137,22 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/6bf3191feb7ea2ebda48b577f69bdfac7a2b3c9bcf97307f55fd6ef1bbca0b49f0c219a935aca506c993d8c5d8bddd937766cb760cd5e5a1071351f2df9f9aa4 + languageName: node + linkType: hard + +"es-errors@npm:^1.1.0, es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + "es-get-iterator@npm:^1.1.3": version: 1.1.3 resolution: "es-get-iterator@npm:1.1.3" @@ -7122,45 +7170,46 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.0.12, es-iterator-helpers@npm:^1.0.15": - version: 1.0.15 - resolution: "es-iterator-helpers@npm:1.0.15" +"es-iterator-helpers@npm:^1.0.15, es-iterator-helpers@npm:^1.0.17": + version: 1.0.17 + resolution: "es-iterator-helpers@npm:1.0.17" dependencies: asynciterator.prototype: "npm:^1.0.0" - call-bind: "npm:^1.0.2" + call-bind: "npm:^1.0.7" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.22.1" - es-set-tostringtag: "npm:^2.0.1" - function-bind: "npm:^1.1.1" - get-intrinsic: "npm:^1.2.1" + es-abstract: "npm:^1.22.4" + es-errors: "npm:^1.3.0" + es-set-tostringtag: "npm:^2.0.2" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" globalthis: "npm:^1.0.3" - has-property-descriptors: "npm:^1.0.0" + has-property-descriptors: "npm:^1.0.2" has-proto: "npm:^1.0.1" has-symbols: "npm:^1.0.3" - internal-slot: "npm:^1.0.5" + internal-slot: "npm:^1.0.7" iterator.prototype: "npm:^1.1.2" - safe-array-concat: "npm:^1.0.1" - checksum: 10c0/b4c83f94bfe624260d5238092de3173989f76f1416b1d02c388aea3b2024174e5f5f0e864057311ac99790b57e836ca3545b6e77256b26066dac944519f5e6d6 + safe-array-concat: "npm:^1.1.0" + checksum: 10c0/d0f281257e7165f068fd4fc3beb63d07ae4f18fbef02a2bbe4a39272b764164c1ce3311ae7c5429ac30003aef290fcdf569050e4a9ba3560e044440f68e9a47c languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.1": - version: 2.0.1 - resolution: "es-set-tostringtag@npm:2.0.1" +"es-set-tostringtag@npm:^2.0.2, es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" dependencies: - get-intrinsic: "npm:^1.1.3" - has: "npm:^1.0.3" - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/9af096365e3861bb29755cc5f76f15f66a7eab0e83befca396129090c1d9737e54090278b8e5357e97b5f0a5b0459fca07c40c6740884c2659cbf90ef8e508cc + get-intrinsic: "npm:^1.2.4" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.1" + checksum: 10c0/f22aff1585eb33569c326323f0b0d175844a1f11618b86e193b386f8be0ea9474cfbe46df39c45d959f7aa8f6c06985dc51dd6bce5401645ec5a74c4ceaa836a languageName: node linkType: hard -"es-shim-unscopables@npm:^1.0.0": - version: 1.0.0 - resolution: "es-shim-unscopables@npm:1.0.0" +"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" dependencies: - has: "npm:^1.0.3" - checksum: 10c0/d54a66239fbd19535b3e50333913260394f14d2d7adb136a95396a13ca584bab400cf9cb2ffd9232f3fe2f0362540bd3a708240c493e46e13fe0b90cfcfedc3d + hasown: "npm:^2.0.0" + checksum: 10c0/f495af7b4b7601a4c0cfb893581c352636e5c08654d129590386a33a0432cf13a7bdc7b6493801cadd990d838e2839b9013d1de3b880440cb537825e834fe783 languageName: node linkType: hard @@ -7325,8 +7374,8 @@ __metadata: linkType: hard "eslint-plugin-jsdoc@npm:^48.0.0": - version: 48.1.0 - resolution: "eslint-plugin-jsdoc@npm:48.1.0" + version: 48.2.0 + resolution: "eslint-plugin-jsdoc@npm:48.2.0" dependencies: "@es-joy/jsdoccomment": "npm:~0.42.0" are-docs-informative: "npm:^0.0.2" @@ -7339,7 +7388,7 @@ __metadata: spdx-expression-parse: "npm:^4.0.0" peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10c0/e0fb3fb4479b6ee539b8c1b626de625ff5d24408f695fcbf648e214854fea9ea3e29b77f56b177bf38655e30a6c9a6eaaff93ef990f69c454c74e180747e39e5 + checksum: 10c0/778f979ca40594269d531767ab29fb2a6c448425f8f732708ac5d3b9c61bbeb8504f1490a1057c7740f3e8f8a75d57ff50c766bc40fb1474f195e6f1aed30814 languageName: node linkType: hard @@ -7388,28 +7437,30 @@ __metadata: linkType: hard "eslint-plugin-react@npm:^7.33.2": - version: 7.33.2 - resolution: "eslint-plugin-react@npm:7.33.2" + version: 7.34.0 + resolution: "eslint-plugin-react@npm:7.34.0" dependencies: - array-includes: "npm:^3.1.6" - array.prototype.flatmap: "npm:^1.3.1" - array.prototype.tosorted: "npm:^1.1.1" + array-includes: "npm:^3.1.7" + array.prototype.findlast: "npm:^1.2.4" + array.prototype.flatmap: "npm:^1.3.2" + array.prototype.toreversed: "npm:^1.1.2" + array.prototype.tosorted: "npm:^1.1.3" doctrine: "npm:^2.1.0" - es-iterator-helpers: "npm:^1.0.12" + es-iterator-helpers: "npm:^1.0.17" estraverse: "npm:^5.3.0" jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" minimatch: "npm:^3.1.2" - object.entries: "npm:^1.1.6" - object.fromentries: "npm:^2.0.6" - object.hasown: "npm:^1.1.2" - object.values: "npm:^1.1.6" + object.entries: "npm:^1.1.7" + object.fromentries: "npm:^2.0.7" + object.hasown: "npm:^1.1.3" + object.values: "npm:^1.1.7" prop-types: "npm:^15.8.1" - resolve: "npm:^2.0.0-next.4" + resolve: "npm:^2.0.0-next.5" semver: "npm:^6.3.1" - string.prototype.matchall: "npm:^4.0.8" + string.prototype.matchall: "npm:^4.0.10" peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 10c0/f9b247861024bafc396c4bd3c9ac946604b3b23077251c98f23602aa22027a0c33a69157fd49564e4ff7f17b3678e5dc366a46c7ec42a09454d7cbce786d5001 + checksum: 10c0/9bf0b959373ace66e799adbbfb493a7ceae54751e8f90fcce1da1a2a67b277ee23ba845571eaa4d4f05d96dba4e4977bf938b350f18bad26201fa616ee6aa4b8 languageName: node linkType: hard @@ -7441,14 +7492,14 @@ __metadata: linkType: hard "eslint@npm:^8.41.0": - version: 8.56.0 - resolution: "eslint@npm:8.56.0" + version: 8.57.0 + resolution: "eslint@npm:8.57.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.6.1" "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.56.0" - "@humanwhocodes/config-array": "npm:^0.11.13" + "@eslint/js": "npm:8.57.0" + "@humanwhocodes/config-array": "npm:^0.11.14" "@humanwhocodes/module-importer": "npm:^1.0.1" "@nodelib/fs.walk": "npm:^1.2.8" "@ungap/structured-clone": "npm:^1.2.0" @@ -7484,7 +7535,7 @@ __metadata: text-table: "npm:^0.2.0" bin: eslint: bin/eslint.js - checksum: 10c0/2be598f7da1339d045ad933ffd3d4742bee610515cd2b0d9a2b8b729395a01d4e913552fff555b559fccaefd89d7b37632825789d1b06470608737ae69ab43fb + checksum: 10c0/00bb96fd2471039a312435a6776fe1fd557c056755eaa2b96093ef3a8508c92c8775d5f754768be6b1dddd09fdd3379ddb231eeb9b6c579ee17ea7d68000a529 languageName: node linkType: hard @@ -8218,7 +8269,7 @@ __metadata: languageName: node linkType: hard -"function-bind@npm:^1.1.1, function-bind@npm:^1.1.2": +"function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 @@ -8272,15 +8323,16 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2": - version: 1.2.2 - resolution: "get-intrinsic@npm:1.2.2" +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" dependencies: + es-errors: "npm:^1.3.0" function-bind: "npm:^1.1.2" has-proto: "npm:^1.0.1" has-symbols: "npm:^1.0.3" hasown: "npm:^2.0.0" - checksum: 10c0/4e7fb8adc6172bae7c4fe579569b4d5238b3667c07931cd46b4eee74bbe6ff6b91329bec311a638d8e60f5b51f44fe5445693c6be89ae88d4b5c49f7ff12db0b + checksum: 10c0/0a9b82c16696ed6da5e39b1267104475c47e3a9bdbe8b509dfe1710946e38a87be70d759f4bb3cda042d76a41ef47fe769660f3b7c0d1f68750299344ffb15b7 languageName: node linkType: hard @@ -8321,13 +8373,14 @@ __metadata: languageName: node linkType: hard -"get-symbol-description@npm:^1.0.0": - version: 1.0.0 - resolution: "get-symbol-description@npm:1.0.0" +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.1.1" - checksum: 10c0/23bc3b44c221cdf7669a88230c62f4b9e30393b61eb21ba4400cb3e346801bd8f95fe4330ee78dbae37aecd874646d53e3e76a17a654d0c84c77f6690526d6bb + call-bind: "npm:^1.0.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/867be6d63f5e0eb026cb3b0ef695ec9ecf9310febb041072d2e142f260bd91ced9eeb426b3af98791d1064e324e653424afa6fd1af17dee373bea48ae03162bc languageName: node linkType: hard @@ -8567,19 +8620,19 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.0": - version: 1.0.0 - resolution: "has-property-descriptors@npm:1.0.0" +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.1, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" dependencies: - get-intrinsic: "npm:^1.1.1" - checksum: 10c0/d4ca882b6960d6257bd28baa3ddfa21f068d260411004a093b30ca357c740e11e985771c85216a6d1eef4161e862657f48c4758ec8ab515223b3895200ad164b + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 languageName: node linkType: hard -"has-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "has-proto@npm:1.0.1" - checksum: 10c0/c8a8fe411f810b23a564bd5546a8f3f0fff6f1b692740eb7a2fdc9df716ef870040806891e2f23ff4653f1083e3895bf12088703dd1a0eac3d9202d3a4768cd0 +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: 10c0/35a6989f81e9f8022c2f4027f8b48a552de714938765d019dbea6bb547bd49ce5010a3c7c32ec6ddac6e48fc546166a3583b128f5a7add8b058a6d8b4afec205 languageName: node linkType: hard @@ -8590,12 +8643,12 @@ __metadata: languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-tostringtag@npm:1.0.0" +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.1, has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" dependencies: - has-symbols: "npm:^1.0.2" - checksum: 10c0/1cdba76b7d13f65198a92b8ca1560ba40edfa09e85d182bf436d928f3588a9ebd260451d569f0ed1b849c4bf54f49c862aa0d0a77f9552b1855bb6deb526c011 + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c languageName: node linkType: hard @@ -8638,13 +8691,6 @@ __metadata: languageName: node linkType: hard -"has@npm:^1.0.3": - version: 1.0.4 - resolution: "has@npm:1.0.4" - checksum: 10c0/82c1220573dc1f0a014a5d6189ae52a1f820f99dfdc00323c3a725b5002dcb7f04e44f460fea7af068474b2dd7c88cbe1846925c84017be9e31e1708936d305b - languageName: node - linkType: hard - "hash-base@npm:^3.0.0": version: 3.1.0 resolution: "hash-base@npm:3.1.0" @@ -8666,12 +8712,12 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0": - version: 2.0.0 - resolution: "hasown@npm:2.0.0" +"hasown@npm:^2.0.0, hasown@npm:^2.0.1": + version: 2.0.1 + resolution: "hasown@npm:2.0.1" dependencies: function-bind: "npm:^1.1.2" - checksum: 10c0/5d415b114f410661208c95e7ab4879f1cc2765b8daceff4dc8718317d1cb7b9ffa7c5d1eafd9a4389c9aab7445d6ea88e05f3096cb1e529618b55304956b87fc + checksum: 10c0/9e27e70e8e4204f4124c8f99950d1ba2b1f5174864fd39ff26da190f9ea6488c1b3927dcc64981c26d1f637a971783c9489d62c829d393ea509e6f1ba20370bb languageName: node linkType: hard @@ -9116,14 +9162,14 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": - version: 1.0.5 - resolution: "internal-slot@npm:1.0.5" +"internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5, internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" dependencies: - get-intrinsic: "npm:^1.2.0" - has: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.0" side-channel: "npm:^1.0.4" - checksum: 10c0/66d8a66b4b5310c042e8ad00ce895dc55cb25165a3a7da0d7862ca18d69d3b1ba86511b4bf3baf4273d744d3f6e9154574af45189ef11135a444945309e39e4a + checksum: 10c0/f8b294a4e6ea3855fc59551bbf35f2b832cf01fd5e6e2a97f5c201a071cc09b49048f856e484b67a6c721da5e55736c5b6ddafaf19e2dbeb4a3ff1821680de6c languageName: node linkType: hard @@ -9242,14 +9288,13 @@ __metadata: languageName: node linkType: hard -"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": - version: 3.0.2 - resolution: "is-array-buffer@npm:3.0.2" +"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" dependencies: call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.0" - is-typed-array: "npm:^1.1.10" - checksum: 10c0/40ed13a5f5746ac3ae2f2e463687d9b5a3f5fd0086f970fb4898f0253c2a5ec2e3caea2d664dd8f54761b1c1948609702416921a22faebe160c7640a9217c80e + get-intrinsic: "npm:^1.2.1" + checksum: 10c0/42a49d006cc6130bc5424eae113e948c146f31f9d24460fc0958f855d9d810e6fd2e4519bf19aab75179af9c298ea6092459d8cafdec523cd19e529b26eab860 languageName: node linkType: hard @@ -9322,7 +9367,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.9.0": +"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" dependencies: @@ -9504,10 +9549,10 @@ __metadata: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.2": - version: 2.0.2 - resolution: "is-negative-zero@npm:2.0.2" - checksum: 10c0/eda024c158f70f2017f3415e471b818d314da5ef5be68f801b16314d4a4b6304a74cbed778acf9e2f955bb9c1c5f2935c1be0c7c99e1ad12286f45366217b6a3 +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: 10c0/bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e languageName: node linkType: hard @@ -9622,12 +9667,12 @@ __metadata: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "is-shared-array-buffer@npm:1.0.2" +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" dependencies: - call-bind: "npm:^1.0.2" - checksum: 10c0/cfeee6f171f1b13e6cbc6f3b6cc44e192b93df39f3fcb31aa66ffb1d2df3b91e05664311659f9701baba62f5e98c83b0673c628e7adc30f55071c4874fcdccec + call-bind: "npm:^1.0.7" + checksum: 10c0/adc11ab0acbc934a7b9e5e9d6c588d4ec6682f6fea8cda5180721704fa32927582ede5b123349e32517fdadd07958973d24716c80e7ab198970c47acc09e59c7 languageName: node linkType: hard @@ -9670,12 +9715,12 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.9": - version: 1.1.12 - resolution: "is-typed-array@npm:1.1.12" +"is-typed-array@npm:^1.1.13": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" dependencies: - which-typed-array: "npm:^1.1.11" - checksum: 10c0/9863e9cc7223c6fc1c462a2c3898a7beff6b41b1ee0fabb03b7d278ae7de670b5bcbc8627db56bb66ed60902fa37d53fe5cce0fd2f7d73ac64fe5da6f409b6ae + which-typed-array: "npm:^1.1.14" + checksum: 10c0/fa5cb97d4a80e52c2cc8ed3778e39f175a1a2ae4ddf3adae3187d69586a1fd57cfa0b095db31f66aa90331e9e3da79184cea9c6abdcd1abc722dc3c3edd51cca languageName: node linkType: hard @@ -11830,19 +11875,19 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.4": - version: 4.1.4 - resolution: "object.assign@npm:4.1.4" +"object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" has-symbols: "npm:^1.0.3" object-keys: "npm:^1.1.1" - checksum: 10c0/2f286118c023e557757620e647b02e7c88d3d417e0c568fca0820de8ec9cca68928304854d5b03e99763eddad6e78a6716e2930f7e6372e4b9b843f3fd3056f3 + checksum: 10c0/60108e1fa2706f22554a4648299b0955236c62b3685c52abf4988d14fffb0e7731e00aa8c6448397e3eb63d087dcc124a9f21e1980f36d0b2667f3c18bacd469 languageName: node linkType: hard -"object.entries@npm:^1.1.6, object.entries@npm:^1.1.7": +"object.entries@npm:^1.1.7": version: 1.1.7 resolution: "object.entries@npm:1.1.7" dependencies: @@ -11853,7 +11898,7 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.6, object.fromentries@npm:^2.0.7": +"object.fromentries@npm:^2.0.7": version: 2.0.7 resolution: "object.fromentries@npm:2.0.7" dependencies: @@ -11889,13 +11934,13 @@ __metadata: languageName: node linkType: hard -"object.hasown@npm:^1.1.2": - version: 1.1.2 - resolution: "object.hasown@npm:1.1.2" +"object.hasown@npm:^1.1.3": + version: 1.1.3 + resolution: "object.hasown@npm:1.1.3" dependencies: - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - checksum: 10c0/419fc1c74a2aea7ebb4d49b79d5b1599a010b26c18eae35bd061ccdd013ccb749c499d8dd6ee21a91e6d7264ccc592573d0f13562970f76e25fc844d8c1b02ce + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + checksum: 10c0/8a41ba4fb1208a85c2275e9b5098071beacc24345b9a71ab98ef0a1c61b34dc74c6b460ff1e1884c33843d8f2553df64a10eec2b74b3ed009e3b2710c826bd2c languageName: node linkType: hard @@ -12605,6 +12650,13 @@ __metadata: languageName: node linkType: hard +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd + languageName: node + linkType: hard + "postcss-calc@npm:^9.0.1": version: 9.0.1 resolution: "postcss-calc@npm:9.0.1" @@ -14011,14 +14063,15 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.0, regexp.prototype.flags@npm:^1.5.1": - version: 1.5.1 - resolution: "regexp.prototype.flags@npm:1.5.1" +"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.5.0, regexp.prototype.flags@npm:^1.5.2": + version: 1.5.2 + resolution: "regexp.prototype.flags@npm:1.5.2" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - set-function-name: "npm:^2.0.0" - checksum: 10c0/1de7d214c0a726c7c874a7023e47b0e27b9f7fdb64175bfe1861189de1704aaeca05c3d26c35aa375432289b99946f3cf86651a92a8f7601b90d8c226a23bcd8 + call-bind: "npm:^1.0.6" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + set-function-name: "npm:^2.0.1" + checksum: 10c0/0f3fc4f580d9c349f8b560b012725eb9c002f36daa0041b3fbf6f4238cb05932191a4d7d5db3b5e2caa336d5150ad0402ed2be81f711f9308fe7e1a9bf9bd552 languageName: node linkType: hard @@ -14207,16 +14260,16 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^2.0.0-next.4": - version: 2.0.0-next.4 - resolution: "resolve@npm:2.0.0-next.4" +"resolve@npm:^2.0.0-next.5": + version: 2.0.0-next.5 + resolution: "resolve@npm:2.0.0-next.5" dependencies: - is-core-module: "npm:^2.9.0" + is-core-module: "npm:^2.13.0" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10c0/1de92669e7c46cfe125294c66d5405e13288bb87b97e9bdab71693ceebbcc0255c789bde30e2834265257d330d8ff57414d7d88e3097d8f69951f3ce978bf045 + checksum: 10c0/a6c33555e3482ea2ec4c6e3d3bf0d78128abf69dca99ae468e64f1e30acaa318fd267fb66c8836b04d558d3e2d6ed875fe388067e7d8e0de647d3c21af21c43a languageName: node linkType: hard @@ -14233,16 +14286,16 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^2.0.0-next.4#optional!builtin": - version: 2.0.0-next.4 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#optional!builtin::version=2.0.0-next.4&hash=c3c19d" +"resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin": + version: 2.0.0-next.5 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d" dependencies: - is-core-module: "npm:^2.9.0" + is-core-module: "npm:^2.13.0" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10c0/ed2bb51d616b9cd30fe85cf49f7a2240094d9fa01a221d361918462be81f683d1855b7f192391d2ab5325245b42464ca59690db5bd5dad0a326fc0de5974dd10 + checksum: 10c0/78ad6edb8309a2bfb720c2c1898f7907a37f858866ce11a5974643af1203a6a6e05b2fa9c53d8064a673a447b83d42569260c306d43628bff5bb101969708355 languageName: node linkType: hard @@ -14371,15 +14424,15 @@ __metadata: languageName: node linkType: hard -"safe-array-concat@npm:^1.0.0, safe-array-concat@npm:^1.0.1": - version: 1.0.1 - resolution: "safe-array-concat@npm:1.0.1" +"safe-array-concat@npm:^1.0.0, safe-array-concat@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-array-concat@npm:1.1.0" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.1" + call-bind: "npm:^1.0.5" + get-intrinsic: "npm:^1.2.2" has-symbols: "npm:^1.0.3" isarray: "npm:^2.0.5" - checksum: 10c0/4b15ce5fce5ce4d7e744a63592cded88d2f27806ed229eadb2e42629cbcd40e770f7478608e75f455e7fe341acd8c0a01bdcd7146b10645ea7411c5e3c1d1dd8 + checksum: 10c0/833d3d950fc7507a60075f9bfaf41ec6dac7c50c7a9d62b1e6b071ecc162185881f92e594ff95c1a18301c881352dd6fd236d56999d5819559db7b92da9c28af languageName: node linkType: hard @@ -14397,14 +14450,14 @@ __metadata: languageName: node linkType: hard -"safe-regex-test@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-regex-test@npm:1.0.0" +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.1.3" + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" is-regex: "npm:^1.1.4" - checksum: 10c0/14a81a7e683f97b2d6e9c8be61fddcf8ed7a02f4e64a825515f96bb1738eb007145359313741d2704d28b55b703a0f6300c749dde7c1dbc13952a2b85048ede2 + checksum: 10c0/900bf7c98dc58f08d8523b7012b468e4eb757afa624f198902c0643d7008ba777b0bdc35810ba0b758671ce887617295fb742b3f3968991b178ceca54cb07603 languageName: node linkType: hard @@ -14662,15 +14715,17 @@ __metadata: languageName: node linkType: hard -"set-function-length@npm:^1.1.1": - version: 1.1.1 - resolution: "set-function-length@npm:1.1.1" +"set-function-length@npm:^1.2.1": + version: 1.2.1 + resolution: "set-function-length@npm:1.2.1" dependencies: - define-data-property: "npm:^1.1.1" - get-intrinsic: "npm:^1.2.1" + define-data-property: "npm:^1.1.2" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.3" gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.0" - checksum: 10c0/a29e255c116c29e3323b851c4f46c58c91be9bb8b065f191e2ea1807cb2c839df56e3175732a498e0c6d54626ba6b6fef896bf699feb7ab70c42dc47eb247c95 + has-property-descriptors: "npm:^1.0.1" + checksum: 10c0/1927e296599f2c04d210c1911f1600430a5e49e04a6d8bb03dca5487b95a574da9968813a2ced9a774bd3e188d4a6208352c8f64b8d4674cdb021dca21e190ca languageName: node linkType: hard @@ -15323,19 +15378,20 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.6, string.prototype.matchall@npm:^4.0.8": - version: 4.0.8 - resolution: "string.prototype.matchall@npm:4.0.8" +"string.prototype.matchall@npm:^4.0.10, string.prototype.matchall@npm:^4.0.6": + version: 4.0.10 + resolution: "string.prototype.matchall@npm:4.0.10" dependencies: call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - get-intrinsic: "npm:^1.1.3" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + get-intrinsic: "npm:^1.2.1" has-symbols: "npm:^1.0.3" - internal-slot: "npm:^1.0.3" - regexp.prototype.flags: "npm:^1.4.3" + internal-slot: "npm:^1.0.5" + regexp.prototype.flags: "npm:^1.5.0" + set-function-name: "npm:^2.0.0" side-channel: "npm:^1.0.4" - checksum: 10c0/644523d05c1ee93bab7474e999a5734ee5f6ad2d7ad24ed6ea8706c270dc92b352bde0f2a5420bfbeed54e28cb6a770c3800e1988a5267a70fd5e677c7750abc + checksum: 10c0/cd7495fb0de16d43efeee3887b98701941f3817bd5f09351ad1825b023d307720c86394d56d56380563d97767ab25bf5448db239fcecbb85c28e2180f23e324a languageName: node linkType: hard @@ -16183,50 +16239,55 @@ __metadata: languageName: node linkType: hard -"typed-array-buffer@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-buffer@npm:1.0.0" +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.1" - is-typed-array: "npm:^1.1.10" - checksum: 10c0/ebad66cdf00c96b1395dffc7873169cf09801fca5954507a484f41f253feb1388d815db297b0b3bb8ce7421eac6f7ff45e2ec68450a3d68408aa4ae02fcf3a6c + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/9e043eb38e1b4df4ddf9dde1aa64919ae8bb909571c1cc4490ba777d55d23a0c74c7d73afcdd29ec98616d91bb3ae0f705fad4421ea147e1daf9528200b562da languageName: node linkType: hard -"typed-array-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-byte-length@npm:1.0.0" +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" dependencies: - call-bind: "npm:^1.0.2" + call-bind: "npm:^1.0.7" for-each: "npm:^0.3.3" - has-proto: "npm:^1.0.1" - is-typed-array: "npm:^1.1.10" - checksum: 10c0/6696435d53ce0e704ff6760c57ccc35138aec5f87859e03eb2a3246336d546feae367952dbc918116f3f0dffbe669734e3cbd8960283c2fa79aac925db50d888 + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/fcebeffb2436c9f355e91bd19e2368273b88c11d1acc0948a2a306792f1ab672bce4cfe524ab9f51a0505c9d7cd1c98eff4235c4f6bfef6a198f6cfc4ff3d4f3 languageName: node linkType: hard -"typed-array-byte-offset@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-byte-offset@npm:1.0.0" +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" dependencies: - available-typed-arrays: "npm:^1.0.5" - call-bind: "npm:^1.0.2" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" for-each: "npm:^0.3.3" - has-proto: "npm:^1.0.1" - is-typed-array: "npm:^1.1.10" - checksum: 10c0/4036ce007ae9752931bed3dd61e0d6de2a3e5f6a5a85a05f3adb35388d2c0728f9b1a1e638d75579f168e49c289bfb5417f00e96d4ab081f38b647fc854ff7a5 + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/d2628bc739732072e39269389a758025f75339de2ed40c4f91357023c5512d237f255b633e3106c461ced41907c1bf9a533c7e8578066b0163690ca8bc61b22f languageName: node linkType: hard -"typed-array-length@npm:^1.0.4": - version: 1.0.4 - resolution: "typed-array-length@npm:1.0.4" +"typed-array-length@npm:^1.0.5": + version: 1.0.5 + resolution: "typed-array-length@npm:1.0.5" dependencies: - call-bind: "npm:^1.0.2" + call-bind: "npm:^1.0.7" for-each: "npm:^0.3.3" - is-typed-array: "npm:^1.1.9" - checksum: 10c0/c5163c0103d07fefc8a2ad0fc151f9ca9a1f6422098c00f695d55f9896e4d63614cd62cf8d8a031c6cee5f418e8980a533796597174da4edff075b3d275a7e23 + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/5cc0f79196e70a92f8f40846cfa62b3de6be51e83f73655e137116cf65e3c29a288502b18cc8faf33c943c2470a4569009e1d6da338441649a2db2f135761ad5 languageName: node linkType: hard @@ -17087,16 +17148,16 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.9": - version: 1.1.13 - resolution: "which-typed-array@npm:1.1.13" +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.9": + version: 1.1.14 + resolution: "which-typed-array@npm:1.1.14" dependencies: - available-typed-arrays: "npm:^1.0.5" - call-bind: "npm:^1.0.4" + available-typed-arrays: "npm:^1.0.6" + call-bind: "npm:^1.0.5" for-each: "npm:^0.3.3" gopd: "npm:^1.0.1" - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/9f5f1c42918df3d5b91c4315ed0051d5d874370998bf095c9ae0df374f0881f85094e3c384b8fb08ab7b4d4f54ba81c0aff75da6226e7c0589b83dfbec1cd4c9 + has-tostringtag: "npm:^1.0.1" + checksum: 10c0/0960f1e77807058819451b98c51d4cd72031593e8de990b24bd3fc22e176f5eee22921d68d852297c786aec117689f0423ed20aa4fde7ce2704d680677891f56 languageName: node linkType: hard From 4c138ee4eb62505b3a8af53501b5a02872532003 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 10:42:26 +0100 Subject: [PATCH 209/212] Update DefinitelyTyped types (non-major) (#29502) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index c5ec6e5f8c..75a725c4ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3266,13 +3266,13 @@ __metadata: linkType: hard "@types/pg@npm:^8.6.6": - version: 8.11.1 - resolution: "@types/pg@npm:8.11.1" + version: 8.11.2 + resolution: "@types/pg@npm:8.11.2" dependencies: "@types/node": "npm:*" pg-protocol: "npm:*" pg-types: "npm:^4.0.1" - checksum: 10c0/7563075e037c8f7579cfb55e60e0891b742537ac50dc1d802051185513f850725fb05a635418ff26602c7cb6f176f6677a0099d586d51b72c651bb741b05b6e7 + checksum: 10c0/6d873af7f71785d5d4db49311c5c73628918b2b1ece83f17073c4470b2fce6bd24a37de23a42ea0221df4e1c7dc43ea035bb9d0b6274f86ec692b21503a9a55c languageName: node linkType: hard @@ -3456,13 +3456,13 @@ __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.2.58 - resolution: "@types/react@npm:18.2.58" + version: 18.2.63 + resolution: "@types/react@npm:18.2.63" dependencies: "@types/prop-types": "npm:*" "@types/scheduler": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/80145b707b780d682092b51d520f58a0171c4067ff36cf488d3346d92b715b27fd334acd0fabb8eb21a4eb6c4061f1535e8bfa6642a7f4025e63ebec868fb6d1 + checksum: 10c0/53d86727b966a3ba097553b5ef75a1f2bea78bd8c54ebcf6d00bd338000112b208ab30536c8c0a9f5fc61055cc3fbabbc7a23910c55092341602845de4c13714 languageName: node linkType: hard From 7265d47342c82721e5f2a8570b69de3b4171a803 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 09:42:49 +0000 Subject: [PATCH 210/212] Update peter-evans/create-pull-request action to v6.0.1 (#29503) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/crowdin-download.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/crowdin-download.yml b/.github/workflows/crowdin-download.yml index a676ff12fc..45580bd06f 100644 --- a/.github/workflows/crowdin-download.yml +++ b/.github/workflows/crowdin-download.yml @@ -52,7 +52,7 @@ jobs: # Create or update the pull request - name: Create Pull Request - uses: peter-evans/create-pull-request@v6.0.0 + uses: peter-evans/create-pull-request@v6.0.1 with: commit-message: 'New Crowdin translations' title: 'New Crowdin Translations (automated)' From f89512fbedb547f66a72eefdff047768fb505eb6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 15:09:52 +0100 Subject: [PATCH 211/212] Update dependency rack-cors to v2.0.2 [SECURITY] (#29507) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 076cf915d0..6ee799eab2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -535,7 +535,7 @@ GEM rack (2.2.8.1) rack-attack (6.7.0) rack (>= 1.0, < 4) - rack-cors (2.0.1) + rack-cors (2.0.2) rack (>= 2.0.0) rack-oauth2 (1.21.3) activesupport From b8bd94ca8edb5a675ef70aac9c941ed340efc127 Mon Sep 17 00:00:00 2001 From: Mashiro Date: Wed, 6 Mar 2024 20:53:54 +0800 Subject: [PATCH 212/212] Fix unhandled nullable attachments limitation counter (#29183) --- .../containers/upload_button_container.js | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/app/javascript/mastodon/features/compose/containers/upload_button_container.js b/app/javascript/mastodon/features/compose/containers/upload_button_container.js index 7c4757b6c3..066e185346 100644 --- a/app/javascript/mastodon/features/compose/containers/upload_button_container.js +++ b/app/javascript/mastodon/features/compose/containers/upload_button_container.js @@ -3,14 +3,24 @@ import { connect } from 'react-redux'; import { uploadCompose } from '../../../actions/compose'; import UploadButton from '../components/upload_button'; -const mapStateToProps = state => ({ - disabled: state.getIn(['compose', 'poll']) !== null || state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size + state.getIn(['compose', 'pending_media_attachments']) > 3 || state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')))), - resetFileKey: state.getIn(['compose', 'resetFileKey']), -}); +const mapStateToProps = state => { + const isPoll = state.getIn(['compose', 'poll']) !== null; + const isUploading = state.getIn(['compose', 'is_uploading']); + const readyAttachmentsSize = state.getIn(['compose', 'media_attachments']).size ?? 0; + const pendingAttachmentsSize = state.getIn(['compose', 'pending_media_attachments']).size ?? 0; + const attachmentsSize = readyAttachmentsSize + pendingAttachmentsSize; + const isOverLimit = attachmentsSize > 3; + const hasVideoOrAudio = state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type'))); + + return { + disabled: isPoll || isUploading || isOverLimit || hasVideoOrAudio, + resetFileKey: state.getIn(['compose', 'resetFileKey']), + }; +}; const mapDispatchToProps = dispatch => ({ - onSelectFile (files) { + onSelectFile(files) { dispatch(uploadCompose(files)); },