diff --git a/.github/ISSUE_TEMPLATE/2.server_bug_report.yml b/.github/ISSUE_TEMPLATE/2.server_bug_report.yml index 5235796b58..12807a8530 100644 --- a/.github/ISSUE_TEMPLATE/2.server_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/2.server_bug_report.yml @@ -59,7 +59,7 @@ body: Any additional technical details you may have, like logs or error traces value: | If this is happening on your own Mastodon server, please fill out those: - - Ruby version: (from `ruby --version`, eg. v3.4.4) + - Ruby version: (from `ruby --version`, eg. v3.4.9) - Node.js version: (from `node --version`, eg. v22.16.0) validations: required: false diff --git a/.github/ISSUE_TEMPLATE/3.troubleshooting.yml b/.github/ISSUE_TEMPLATE/3.troubleshooting.yml index 72ae76af00..dd53116e1e 100644 --- a/.github/ISSUE_TEMPLATE/3.troubleshooting.yml +++ b/.github/ISSUE_TEMPLATE/3.troubleshooting.yml @@ -60,7 +60,7 @@ body: value: | Please at least include those informations: - Operating system: (eg. Ubuntu 24.04.2) - - Ruby version: (from `ruby --version`, eg. v3.4.4) + - Ruby version: (from `ruby --version`, eg. v3.4.9) - Node.js version: (from `node --version`, eg. v22.16.0) validations: required: false diff --git a/.github/actions/setup-ruby/action.yml b/.github/actions/setup-ruby/action.yml index 0085aa875c..fed79add6d 100644 --- a/.github/actions/setup-ruby/action.yml +++ b/.github/actions/setup-ruby/action.yml @@ -17,7 +17,7 @@ runs: sudo apt-get install -y libicu-dev libidn11-dev libvips42 ${{ inputs.additional-system-dependencies }} - name: Set up Ruby - uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1 + uses: ruby/setup-ruby@4eb9f110bac952a8b68ecf92e3b5c7a987594ba6 # v1 with: ruby-version: ${{ inputs.ruby-version }} bundler-cache: true diff --git a/.github/workflows/bundler-audit.yml b/.github/workflows/bundler-audit.yml index f3a97f8a2e..b1e8d406e2 100644 --- a/.github/workflows/bundler-audit.yml +++ b/.github/workflows/bundler-audit.yml @@ -31,7 +31,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Set up Ruby - uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1 + uses: ruby/setup-ruby@4eb9f110bac952a8b68ecf92e3b5c7a987594ba6 # v1 with: bundler-cache: true diff --git a/.github/workflows/lint-haml.yml b/.github/workflows/lint-haml.yml index 46cf1c25c1..6cc212180a 100644 --- a/.github/workflows/lint-haml.yml +++ b/.github/workflows/lint-haml.yml @@ -36,7 +36,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Set up Ruby - uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1 + uses: ruby/setup-ruby@4eb9f110bac952a8b68ecf92e3b5c7a987594ba6 # v1 with: bundler-cache: true diff --git a/.github/workflows/lint-ruby.yml b/.github/workflows/lint-ruby.yml index f99362895a..216618f4e5 100644 --- a/.github/workflows/lint-ruby.yml +++ b/.github/workflows/lint-ruby.yml @@ -38,7 +38,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Set up Ruby - uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1 + uses: ruby/setup-ruby@4eb9f110bac952a8b68ecf92e3b5c7a987594ba6 # v1 with: bundler-cache: true diff --git a/.ruby-version b/.ruby-version index 7921bd0c89..7bcbb3808b 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.4.8 +3.4.9 diff --git a/CHANGELOG.md b/CHANGELOG.md index c6c0ff20d1..0cdb887424 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1245,1154 +1245,4 @@ The following changelog entries focus on changes visible to users, administrator - Fix empty environment variables not using default nil value (#27400 by @renchap) - Fix language sorting in settings (#27158 by @gunchleoc) -## [4.2.11] - 2024-08-16 - -### Added - -- Add support for incoming `` tag ([mediaformat](https://github.com/mastodon/mastodon/pull/31375)) - -### Changed - -- Change logic of block/mute bypass for mentions from moderators to only apply to visible roles with moderation powers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/31271)) - -### Fixed - -- Fix incorrect rate limit on PUT requests ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/31356)) -- Fix presence of `ß` in adjacent word preventing mention and hashtag matching ([adamniedzielski](https://github.com/mastodon/mastodon/pull/31122)) -- Fix processing of webfinger responses with multiple `self` links ([adamniedzielski](https://github.com/mastodon/mastodon/pull/31110)) -- Fix duplicate `orderedItems` in user archive's `outbox.json` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/31099)) -- Fix click event handling when clicking outside of an open dropdown menu ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/31251)) -- Fix status processing failing halfway when a remote post has a malformed `replies` attribute ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/31246)) -- Fix `--verbose` option of `tootctl media remove`, which was previously erroneously removed ([mjankowski](https://github.com/mastodon/mastodon/pull/30536)) -- Fix division by zero on some video/GIF files ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30600)) -- Fix Web UI trying to save user settings despite being logged out ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30324)) -- Fix hashtag regexp matching some link anchors ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30190)) -- Fix local account search on LDAP login being case-sensitive ([raucao](https://github.com/mastodon/mastodon/pull/30113)) -- Fix development environment admin account not being auto-approved ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29958)) -- Fix report reason selector in moderation interface not unselecting rules when changing category ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29026)) -- Fix already-invalid reports failing to resolve ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29027)) -- Fix OCR when using S3/CDN for assets ([vmstan](https://github.com/mastodon/mastodon/pull/28551)) -- Fix error when encountering malformed `Tag` objects from Kbin ([ShadowJonathan](https://github.com/mastodon/mastodon/pull/28235)) -- Fix not all allowed image formats showing in file picker when uploading custom emoji ([june128](https://github.com/mastodon/mastodon/pull/28076)) -- Fix search popout listing unusable search options when logged out ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27918)) -- Fix processing of featured collections lacking an `items` attribute ([tribela](https://github.com/mastodon/mastodon/pull/27581)) -- Fix `mastodon:stats` decoration of stats rake task ([mjankowski](https://github.com/mastodon/mastodon/pull/31104)) - -## [4.2.10] - 2024-07-04 - -### Security - -- Fix incorrect permission checking on multiple API endpoints ([GHSA-58x8-3qxw-6hm7](https://github.com/mastodon/mastodon/security/advisories/GHSA-58x8-3qxw-6hm7)) -- Fix incorrect authorship checking when processing some activities (CVE-2024-37903, [GHSA-xjvf-fm67-4qc3](https://github.com/mastodon/mastodon/security/advisories/GHSA-xjvf-fm67-4qc3)) -- Fix ongoing streaming sessions not being invalidated when application tokens get revoked ([GHSA-vp5r-5pgw-jwqx](https://github.com/mastodon/mastodon/security/advisories/GHSA-vp5r-5pgw-jwqx)) -- Update dependencies - -### Added - -- Add yarn version specification to avoid confusion with Yarn 3 and Yarn 4 - -### Changed - -- Change preview cards generation to skip unusually long URLs ([oneiros](https://github.com/mastodon/mastodon/pull/30854)) -- Change search modifiers to be case-insensitive ([Gargron](https://github.com/mastodon/mastodon/pull/30865)) -- Change `STATSD_ADDR` handling to emit a warning rather than crashing if the address is unreachable ([timothyjrogers](https://github.com/mastodon/mastodon/pull/30691)) -- Change PWA start URL from `/home` to `/` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27377)) - -### Removed - -- Removed dependency on `posix-spawn` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18559)) - -### Fixed - -- Fix scheduled statuses scheduled in less than 5 minutes being immediately published ([danielmbrasil](https://github.com/mastodon/mastodon/pull/30584)) -- Fix encoding detection for link cards ([oneiros](https://github.com/mastodon/mastodon/pull/30780)) -- Fix `/admin/accounts/:account_id/statuses/:id` for edited posts with media attachments ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30819)) -- Fix duplicate `@context` attribute in user archive export ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30653)) - -## [4.2.9] - 2024-05-30 - -### Security - -- Update dependencies -- Fix private mention filtering ([GHSA-5fq7-3p3j-9vrf](https://github.com/mastodon/mastodon/security/advisories/GHSA-5fq7-3p3j-9vrf)) -- Fix password change endpoint not being rate-limited ([GHSA-q3rg-xx5v-4mxh](https://github.com/mastodon/mastodon/security/advisories/GHSA-q3rg-xx5v-4mxh)) -- Add hardening around rate-limit bypass ([GHSA-c2r5-cfqr-c553](https://github.com/mastodon/mastodon/security/advisories/GHSA-c2r5-cfqr-c553)) - -### Added - -- Add rate-limit on OAuth application registration ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/30316)) -- Add fallback redirection when getting a webfinger query `WEB_DOMAIN@WEB_DOMAIN` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28592)) -- Add `digest` attribute to `Admin::DomainBlock` entity in REST API ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/29092)) - -### Removed - -- Remove superfluous application-level caching in some controllers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29862)) -- Remove aggressive OAuth application vacuuming ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/30316)) - -### Fixed - -- Fix leaking Elasticsearch connections in Sidekiq processes ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30450)) -- Fix language of remote posts not being recognized when using unusual casing ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30403)) -- Fix off-by-one in `tootctl media` commands ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30306)) -- Fix removal of allowed domains (in `LIMITED_FEDERATION_MODE`) not being recorded in the audit log ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/30125)) -- Fix not being able to block a subdomain of an already-blocked domain through the API ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30119)) -- Fix `Idempotency-Key` being ignored when scheduling a post ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/30084)) -- Fix crash when supplying the `FFMPEG_BINARY` environment variable ([timothyjrogers](https://github.com/mastodon/mastodon/pull/30022)) -- Fix improper email address validation ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29838)) -- Fix results/query in `api/v1/featured_tags/suggestions` ([mjankowski](https://github.com/mastodon/mastodon/pull/29597)) -- Fix unblocking internationalized domain names under certain conditions ([tribela](https://github.com/mastodon/mastodon/pull/29530)) -- Fix admin account created by `mastodon:setup` not being auto-approved ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29379)) -- Fix reference to non-existent var in CLI maintenance command ([mjankowski](https://github.com/mastodon/mastodon/pull/28363)) - -## [4.2.8] - 2024-02-23 - -### Added - -- Add hourly task to automatically require approval for new registrations in the absence of moderators ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29318), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/29355)) - In order to prevent future abandoned Mastodon servers from being used for spam, harassment and other malicious activity, Mastodon will now automatically switch new user registrations to require moderator approval whenever they are left open and no activity (including non-moderation actions from apps) from any logged-in user with permission to access moderation reports has been detected in a full week. - When this happens, users with the permission to change server settings will receive an email notification. - This feature is disabled when `EMAIL_DOMAIN_ALLOWLIST` is used, and can also be disabled with `DISABLE_AUTOMATIC_SWITCHING_TO_APPROVED_REGISTRATIONS=true`. - -### Changed - -- Change registrations to be closed by default on new installations ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29280)) - If you are running a server and never changed your registrations mode from the default, updating will automatically close your registrations. - Simply re-enable them through the administration interface or using `tootctl settings registrations open` if you want to enable them again. - -### Fixed - -- Fix processing of remote ActivityPub actors making use of `Link` objects as `Image` `url` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29335)) -- Fix link verifications when page size exceeds 1MB ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29358)) - -## [4.2.7] - 2024-02-16 - -### Fixed - -- Fix OmniAuth tests and edge cases in error handling ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/29201), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/29207)) -- Fix new installs by upgrading to the latest release of the `nsa` gem, instead of a no longer existing commit ([mjankowski](https://github.com/mastodon/mastodon/pull/29065)) - -### Security - -- Fix insufficient checking of remote posts ([GHSA-jhrq-qvrm-qr36](https://github.com/mastodon/mastodon/security/advisories/GHSA-jhrq-qvrm-qr36)) - -## [4.2.6] - 2024-02-14 - -### Security - -- Update the `sidekiq-unique-jobs` dependency (see [GHSA-cmh9-rx85-xj38](https://github.com/mhenrixon/sidekiq-unique-jobs/security/advisories/GHSA-cmh9-rx85-xj38)) - In addition, we have disabled the web interface for `sidekiq-unique-jobs` out of caution. - If you need it, you can re-enable it by setting `ENABLE_SIDEKIQ_UNIQUE_JOBS_UI=true`. - If you only need to clear all locks, you can now use `bundle exec rake sidekiq_unique_jobs:delete_all_locks`. -- Update the `nokogiri` dependency (see [GHSA-xc9x-jj77-9p9j](https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-xc9x-jj77-9p9j)) -- Disable administrative Doorkeeper routes ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/29187)) -- Fix ongoing streaming sessions not being invalidated when applications get deleted in some cases ([GHSA-7w3c-p9j8-mq3x](https://github.com/mastodon/mastodon/security/advisories/GHSA-7w3c-p9j8-mq3x)) - In some rare cases, the streaming server was not notified of access tokens revocation on application deletion. -- Change external authentication behavior to never reattach a new identity to an existing user by default ([GHSA-vm39-j3vx-pch3](https://github.com/mastodon/mastodon/security/advisories/GHSA-vm39-j3vx-pch3)) - Up until now, Mastodon has allowed new identities from external authentication providers to attach to an existing local user based on their verified e-mail address. - This allowed upgrading users from a database-stored password to an external authentication provider, or move from one authentication provider to another. - However, this behavior may be unexpected, and means that when multiple authentication providers are configured, the overall security would be that of the least secure authentication provider. - For these reasons, this behavior is now locked under the `ALLOW_UNSAFE_AUTH_PROVIDER_REATTACH` environment variable. - In addition, regardless of this environment variable, Mastodon will refuse to attach two identities from the same authentication provider to the same account. - -## [4.2.5] - 2024-02-01 - -### Security - -- Fix insufficient origin validation (CVE-2024-23832, [GHSA-3fjr-858r-92rw](https://github.com/mastodon/mastodon/security/advisories/GHSA-3fjr-858r-92rw)) - -## [4.2.4] - 2024-01-24 - -### Fixed - -- Fix error when processing remote files with unusually long names ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28823)) -- Fix processing of compacted single-item JSON-LD collections ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28816)) -- Retry 401 errors on replies fetching ([ShadowJonathan](https://github.com/mastodon/mastodon/pull/28788)) -- Fix `RecordNotUnique` errors in LinkCrawlWorker ([tribela](https://github.com/mastodon/mastodon/pull/28748)) -- Fix Mastodon not correctly processing HTTP Signatures with query strings ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28443), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/28476)) -- Fix potential redirection loop of streaming endpoint ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28665)) -- Fix streaming API redirection ignoring the port of `streaming_api_base_url` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28558)) -- Fix error when processing link preview with an array as `inLanguage` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28252)) -- Fix unsupported time zone or locale preventing sign-up ([Gargron](https://github.com/mastodon/mastodon/pull/28035)) -- Fix "Hide these posts from home" list setting not refreshing when switching lists ([brianholley](https://github.com/mastodon/mastodon/pull/27763)) -- Fix missing background behind dismissable banner in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/27479)) -- Fix line wrapping of language selection button with long locale codes ([gunchleoc](https://github.com/mastodon/mastodon/pull/27100), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27127)) -- Fix `Undo Announce` activity not being sent to non-follower authors ([MitarashiDango](https://github.com/mastodon/mastodon/pull/18482)) -- Fix N+1s because of association preloaders not actually getting called ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28339)) -- Fix empty column explainer getting cropped under certain conditions ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28337)) -- Fix `LinkCrawlWorker` error when encountering empty OEmbed response ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28268)) -- Fix call to inefficient `delete_matched` cache method in domain blocks ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28367)) - -### Security - -- Add rate-limit of TOTP authentication attempts at controller level ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/28801)) - -## [4.2.3] - 2023-12-05 - -### Fixed - -- Fix dependency on `json-canonicalization` version that has been made unavailable since last release - -## [4.2.2] - 2023-12-04 - -### Changed - -- Change dismissed banners to be stored server-side ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27055)) -- Change GIF max matrix size error to explicitly mention GIF files ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27927)) -- Change `Follow` activities delivery to bypass availability check ([ShadowJonathan](https://github.com/mastodon/mastodon/pull/27586)) -- Change single-column navigation notice to be displayed outside of the logo container ([renchap](https://github.com/mastodon/mastodon/pull/27462), [renchap](https://github.com/mastodon/mastodon/pull/27476)) -- Change Content-Security-Policy to be tighter on media paths ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26889)) -- Change post language code to include country code when relevant ([gunchleoc](https://github.com/mastodon/mastodon/pull/27099), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27207)) - -### Fixed - -- Fix upper border radius of onboarding columns ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27890)) -- Fix incoming status creation date not being restricted to standard ISO8601 ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27655), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/28081)) -- Fix some posts from threads received out-of-order sometimes not being inserted into timelines ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27653)) -- Fix posts from force-sensitized accounts being able to trend ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27620)) -- Fix error when trying to delete already-deleted file with OpenStack Swift ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27569)) -- Fix batch attachment deletion when using OpenStack Swift ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27554)) -- Fix processing LDSigned activities from actors with unknown public keys ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27474)) -- Fix error and incorrect URLs in `/api/v1/accounts/:id/featured_tags` for remote accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27459)) -- Fix report processing notice not mentioning the report number when performing a custom action ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27442)) -- Fix handling of `inLanguage` attribute in preview card processing ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27423)) -- Fix own posts being removed from home timeline when unfollowing a used hashtag ([kmycode](https://github.com/mastodon/mastodon/pull/27391)) -- Fix some link anchors being recognized as hashtags ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27271), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27584)) -- Fix format-dependent redirects being cached regardless of requested format ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27634)) - -## [4.2.1] - 2023-10-10 - -### Added - -- Add redirection on `/deck` URLs for logged-out users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27128)) -- Add support for v4.2.0 migrations to `tootctl maintenance fix-duplicates` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27147)) - -### Changed - -- Change some worker lock TTLs to be shorter-lived ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27246)) -- Change user archive export allowed period from 7 days to 6 days ([suddjian](https://github.com/mastodon/mastodon/pull/27200)) - -### Fixed - -- Fix duplicate reports being sent when reporting some remote posts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27355)) -- Fix clicking on already-opened thread post scrolling to the top of the thread ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27331), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27338), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27350)) -- Fix some remote posts getting truncated ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27307)) -- Fix some cases of infinite scroll code trying to fetch inaccessible posts in a loop ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27286)) -- Fix `Vary` headers not being set on some redirects ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27272)) -- Fix mentions being matched in some URL query strings ([mjankowski](https://github.com/mastodon/mastodon/pull/25656)) -- Fix unexpected linebreak in version string in the Web UI ([vmstan](https://github.com/mastodon/mastodon/pull/26986)) -- Fix double scroll bars in some columns in advanced interface ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27187)) -- Fix boosts of local users being filtered in account timelines ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27204)) -- Fix multiple instances of the trend refresh scheduler sometimes running at once ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27253)) -- Fix importer returning negative row estimates ([jgillich](https://github.com/mastodon/mastodon/pull/27258)) -- Fix incorrectly keeping outdated update notices absent from the API endpoint ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27021)) -- Fix import progress not updating on certain failures ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27247)) -- Fix websocket connections being incorrectly decremented twice on errors ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/27238)) -- Fix explore prompt appearing because of posts being received out of order ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27211)) -- Fix explore prompt sometimes showing up when the home TL is loading ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27062)) -- Fix link handling of mentions in user profiles when logged out ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27185)) -- Fix filtering audit log for entries about disabling 2FA ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27186)) -- Fix notification toasts not respecting reduce-motion ([c960657](https://github.com/mastodon/mastodon/pull/27178)) -- Fix retention dashboard not displaying correct month ([vmstan](https://github.com/mastodon/mastodon/pull/27180)) -- Fix tIME chunk not being properly removed from PNG uploads ([TheEssem](https://github.com/mastodon/mastodon/pull/27111)) -- Fix division by zero in video in bitrate computation code ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27129)) -- Fix inefficient queries in “Follows and followers” as well as several admin pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27116), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27306)) -- Fix ActiveRecord using two connection pools when no replica is defined ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/27061)) -- Fix the search documentation URL in system checks ([renchap](https://github.com/mastodon/mastodon/pull/27036)) - -## [4.2.0] - 2023-09-21 - -The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by [@danielmbrasil](https://github.com/danielmbrasil), [@mjankowski](https://github.com/mjankowski), [@nschonni](https://github.com/nschonni), [@renchap](https://github.com/renchap), and [@takayamaki](https://github.com/takayamaki). - -### Added - -- **Add full-text search of opted-in public posts and rework search operators** ([Gargron](https://github.com/mastodon/mastodon/pull/26485), [jsgoldstein](https://github.com/mastodon/mastodon/pull/26344), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26657), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26650), [jsgoldstein](https://github.com/mastodon/mastodon/pull/26659), [Gargron](https://github.com/mastodon/mastodon/pull/26660), [Gargron](https://github.com/mastodon/mastodon/pull/26663), [Gargron](https://github.com/mastodon/mastodon/pull/26688), [Gargron](https://github.com/mastodon/mastodon/pull/26689), [Gargron](https://github.com/mastodon/mastodon/pull/26686), [Gargron](https://github.com/mastodon/mastodon/pull/26687), [Gargron](https://github.com/mastodon/mastodon/pull/26692), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26697), [Gargron](https://github.com/mastodon/mastodon/pull/26699), [Gargron](https://github.com/mastodon/mastodon/pull/26701), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26710), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26739), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26754), [Gargron](https://github.com/mastodon/mastodon/pull/26662), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26755), [Gargron](https://github.com/mastodon/mastodon/pull/26781), [Gargron](https://github.com/mastodon/mastodon/pull/26782), [Gargron](https://github.com/mastodon/mastodon/pull/26760), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26756), [Gargron](https://github.com/mastodon/mastodon/pull/26784), [Gargron](https://github.com/mastodon/mastodon/pull/26807), [Gargron](https://github.com/mastodon/mastodon/pull/26835), [Gargron](https://github.com/mastodon/mastodon/pull/26847), [Gargron](https://github.com/mastodon/mastodon/pull/26834), [arbolitoloco1](https://github.com/mastodon/mastodon/pull/26893), [tribela](https://github.com/mastodon/mastodon/pull/26896), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26927), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26959), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27014)) - This introduces a new `public_statuses` Elasticsearch index for public posts by users who have opted in to their posts being searchable (`toot#indexable` flag). - This also revisits the other indexes to provide more useful indexing, and adds new search operators such as `from:me`, `before:2022-11-01`, `after:2022-11-01`, `during:2022-11-01`, `language:fr`, `has:poll`, or `in:library` (for searching only in posts you have written or interacted with). - Results are now ordered chronologically. -- **Add admin notifications for new Mastodon versions** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26582)) - This is done by querying `https://api.joinmastodon.org/update-check` every 30 minutes in a background job. - That URL can be changed using the `UPDATE_CHECK_URL` environment variable, and the feature outright disabled by setting that variable to an empty string (`UPDATE_CHECK_URL=`). -- **Add “Privacy and reach” tab in profile settings** ([Gargron](https://github.com/mastodon/mastodon/pull/26484), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26508)) - This reorganized scattered privacy and reach settings to a single place, as well as improve their wording. -- **Add display of out-of-band hashtags in the web interface** ([Gargron](https://github.com/mastodon/mastodon/pull/26492), [arbolitoloco1](https://github.com/mastodon/mastodon/pull/26497), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26506), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26525), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26606), [Gargron](https://github.com/mastodon/mastodon/pull/26666), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26960)) -- **Add role badges to the web interface** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25649), [Gargron](https://github.com/mastodon/mastodon/pull/26281)) -- **Add ability to pick domains to forward reports to using the `forward_to_domains` parameter in `POST /api/v1/reports`** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25866), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26636)) - The `forward_to_domains` REST API parameter is a list of strings. If it is empty or omitted, the previous behavior is maintained. - The `forward` parameter still needs to be set for `forward_to_domains` to be taken into account. - The forwarded-to domains can only include that of the original author and people being replied to. -- **Add forwarding of reported replies to servers being replied to** ([Gargron](https://github.com/mastodon/mastodon/pull/25341), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26189)) -- Add `ONE_CLICK_SSO_LOGIN` environment variable to directly link to the Single-Sign On provider if there is only one sign up method available ([CSDUMMI](https://github.com/mastodon/mastodon/pull/26083), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26368), [CSDUMMI](https://github.com/mastodon/mastodon/pull/26857), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26901)) -- **Add webhook templating** ([Gargron](https://github.com/mastodon/mastodon/pull/23289)) -- **Add webhooks for local `status.created`, `status.updated`, `account.updated` and `report.updated`** ([VyrCossont](https://github.com/mastodon/mastodon/pull/24133), [VyrCossont](https://github.com/mastodon/mastodon/pull/24243), [VyrCossont](https://github.com/mastodon/mastodon/pull/24211)) -- **Add exclusive lists** ([dariusk, necropolina](https://github.com/mastodon/mastodon/pull/22048), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25324)) -- **Add a confirmation screen when suspending a domain** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25144), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25603)) -- **Add support for importing lists** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25203), [mgmn](https://github.com/mastodon/mastodon/pull/26120), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26372)) -- **Add optional hCaptcha support** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25019), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25057), [Gargron](https://github.com/mastodon/mastodon/pull/25395), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26388)) -- **Add lines to threads in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24549), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24677), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24696), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24711), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24714), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24713), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24715), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24800), [teeerevor](https://github.com/mastodon/mastodon/pull/25706), [renchap](https://github.com/mastodon/mastodon/pull/25807)) -- **Add new onboarding flow to web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24619), [Gargron](https://github.com/mastodon/mastodon/pull/24646), [Gargron](https://github.com/mastodon/mastodon/pull/24705), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24872), [ThisIsMissEm](https://github.com/mastodon/mastodon/pull/24883), [Gargron](https://github.com/mastodon/mastodon/pull/24954), [stevenjlm](https://github.com/mastodon/mastodon/pull/24959), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25010), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25275), [Gargron](https://github.com/mastodon/mastodon/pull/25559), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25561)) -- **Add auto-refresh of accounts we get new messages/edits of** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26510)) -- **Add Elasticsearch cluster health check and indexes mismatch check to dashboard** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26448), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26605), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26658)) -- Add `hide_collections`, `discoverable` and `indexable` attributes to credentials API ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26998)) -- Add `S3_ENABLE_CHECKSUM_MODE` environment variable to enable checksum verification on compatible S3-providers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26435)) -- Add admin API for managing tags ([rrgeorge](https://github.com/mastodon/mastodon/pull/26872)) -- Add a link to hashtag timelines from the Trending hashtags moderation interface ([gunchleoc](https://github.com/mastodon/mastodon/pull/26724)) -- Add timezone to datetimes in e-mails ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26822)) -- Add `authorized_fetch` server setting in addition to env var ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25798), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26958)) -- Add avatar image to webfinger responses ([tvler](https://github.com/mastodon/mastodon/pull/26558)) -- Add debug logging on signature verification failure ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26637), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26812)) -- Add explicit error messages when DeepL quota is exceeded ([lutoma](https://github.com/mastodon/mastodon/pull/26704)) -- Add Elasticsearch/OpenSearch version to “Software” in admin dashboard ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26652)) -- Add `data-nosnippet` attribute to remote posts and local posts with `noindex` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26648)) -- Add support for federating `memorial` attribute ([rrgeorge](https://github.com/mastodon/mastodon/pull/26583)) -- Add Cherokee and Kalmyk to languages dropdown ([gunchleoc](https://github.com/mastodon/mastodon/pull/26012), [gunchleoc](https://github.com/mastodon/mastodon/pull/26013)) -- Add `DELETE /api/v1/profile/avatar` and `DELETE /api/v1/profile/header` to the REST API ([danielmbrasil](https://github.com/mastodon/mastodon/pull/25124), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26573)) -- Add `ES_PRESET` option to customize numbers of shards and replicas ([Gargron](https://github.com/mastodon/mastodon/pull/26483), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26489)) - This can have a value of `single_node_cluster` (default), `small_cluster` (uses one replica) or `large_cluster` (uses one replica and a higher number of shards). -- Add `CACHE_BUSTER_HTTP_METHOD` environment variable ([renchap](https://github.com/mastodon/mastodon/pull/26528), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26542)) -- Add support for `DB_PASS` when using `DATABASE_URL` ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/26295)) -- Add `GET /api/v1/instance/languages` to REST API ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24443)) -- Add primary key to `preview_cards_statuses` join table ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25243), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26384), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26447), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26737), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26979)) -- Add client-side timeout on resend confirmation button ([Gargron](https://github.com/mastodon/mastodon/pull/26300)) -- Add published date and author to news on the explore screen in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26155)) -- Add `lang` attribute to various UI components ([c960657](https://github.com/mastodon/mastodon/pull/23869), [c960657](https://github.com/mastodon/mastodon/pull/23891), [c960657](https://github.com/mastodon/mastodon/pull/26111), [c960657](https://github.com/mastodon/mastodon/pull/26149)) -- Add stricter protocol fields validation for accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25937)) -- Add support for Azure blob storage ([mistydemeo](https://github.com/mastodon/mastodon/pull/23607), [mistydemeo](https://github.com/mastodon/mastodon/pull/26080)) -- Add toast with option to open post after publishing in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25564), [Signez](https://github.com/mastodon/mastodon/pull/25919), [Gargron](https://github.com/mastodon/mastodon/pull/26664)) -- Add canonical link tags in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25715)) -- Add button to see results for polls in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25726)) -- Add at-symbol prepended to mention span title ([forsamori](https://github.com/mastodon/mastodon/pull/25684)) -- Add users index on `unconfirmed_email` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25672), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25702)) -- Add superapp index on `oauth_applications` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25670)) -- Add index to backups on `user_id` column ([mjankowski](https://github.com/mastodon/mastodon/pull/25647)) -- Add onboarding prompt when home feed too slow in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25267), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25556), [Gargron](https://github.com/mastodon/mastodon/pull/25579), [renchap](https://github.com/mastodon/mastodon/pull/25580), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25581), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25617), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25917), [Gargron](https://github.com/mastodon/mastodon/pull/26829), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26935)) -- Add `POST /api/v1/conversations/:id/unread` API endpoint to mark a conversation as unread ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25509)) -- Add `translate="no"` to outgoing mentions and links ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25524)) -- Add unsubscribe link and headers to e-mails ([Gargron](https://github.com/mastodon/mastodon/pull/25378), [c960657](https://github.com/mastodon/mastodon/pull/26085)) -- Add logging of websocket send errors ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/25280)) -- Add time zone preference ([Gargron](https://github.com/mastodon/mastodon/pull/25342), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26025)) -- Add `legal` as report category ([Gargron](https://github.com/mastodon/mastodon/pull/23941), [renchap](https://github.com/mastodon/mastodon/pull/25400), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26509)) -- Add `data-nosnippet` so Google doesn't use trending posts in snippets for `/` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25279)) -- Add card with who invited you to join when displaying rules on sign-up ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23475)) -- Add missing primary keys to `accounts_tags` and `statuses_tags` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25210)) -- Add support for custom sign-up URLs ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25014), [renchap](https://github.com/mastodon/mastodon/pull/25108), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25190), [mgmn](https://github.com/mastodon/mastodon/pull/25531)) - This is set using `SSO_ACCOUNT_SIGN_UP` and reflected in the REST API by adding `registrations.sign_up_url` to the `/api/v2/instance` endpoint. -- Add polling and automatic redirection to `/start` on email confirmation ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25013)) -- Add ability to block sign-ups from IP using the CLI ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24870)) -- Add ALT badges to media that has alternative text in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24782), [c960657](https://github.com/mastodon/mastodon/pull/26166) -- Add ability to include accounts with pending follow requests in lists ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19727), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24810)) -- Add trend management to admin API ([rrgeorge](https://github.com/mastodon/mastodon/pull/24257)) - - `POST /api/v1/admin/trends/statuses/:id/approve` - - `POST /api/v1/admin/trends/statuses/:id/reject` - - `POST /api/v1/admin/trends/links/:id/approve` - - `POST /api/v1/admin/trends/links/:id/reject` - - `POST /api/v1/admin/trends/tags/:id/approve` - - `POST /api/v1/admin/trends/tags/:id/reject` - - `GET /api/v1/admin/trends/links/publishers` - - `POST /api/v1/admin/trends/links/publishers/:id/approve` - - `POST /api/v1/admin/trends/links/publishers/:id/reject` -- Add user handle to notification mail recipient address ([HeitorMC](https://github.com/mastodon/mastodon/pull/24240)) -- Add progress indicator to sign-up flow ([Gargron](https://github.com/mastodon/mastodon/pull/24545)) -- Add client-side validation for taken username in sign-up form ([Gargron](https://github.com/mastodon/mastodon/pull/24546)) -- Add `--approve` option to `tootctl accounts create` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24533)) -- Add “In Memoriam” banner back to profiles ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23591), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/23614)) - This adds the `memorial` attribute to the `Account` REST API entity. -- Add colour to follow button when hashtag is being followed ([c960657](https://github.com/mastodon/mastodon/pull/24361)) -- Add further explanations to the profile link verification instructions ([drzax](https://github.com/mastodon/mastodon/pull/19723)) -- Add a link to Identity provider's account settings from the account settings ([CSDUMMI](https://github.com/mastodon/mastodon/pull/24100), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24628)) -- Add support for streaming server to connect to postgres with self-signed certs through the `sslmode` URL parameter ([ramuuns](https://github.com/mastodon/mastodon/pull/21431)) -- Add support for specifying S3 storage classes through the `S3_STORAGE_CLASS` environment variable ([hyl](https://github.com/mastodon/mastodon/pull/22480)) -- Add support for incoming rich text ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23913)) -- Add support for Ruby 3.2 ([tenderlove](https://github.com/mastodon/mastodon/pull/22928), [casperisfine](https://github.com/mastodon/mastodon/pull/24142), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24202), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26934)) -- Add API parameter to safeguard unexpected mentions in new posts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18350)) - -### Changed - -- **Change hashtags to be displayed separately when they are the last line of a post** ([renchap](https://github.com/mastodon/mastodon/pull/26499), [renchap](https://github.com/mastodon/mastodon/pull/26614), [renchap](https://github.com/mastodon/mastodon/pull/26615)) -- **Change reblogs to be excluded from "Posts and replies" tab in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/26302)) -- **Change interaction modal in web interface** ([Gargron, ClearlyClaire](https://github.com/mastodon/mastodon/pull/26075), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26269), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26268), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26267), [mgmn](https://github.com/mastodon/mastodon/pull/26459), [tribela](https://github.com/mastodon/mastodon/pull/26461), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26593), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26795)) -- **Change design of link previews in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/26136), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26151), [Gargron](https://github.com/mastodon/mastodon/pull/26153), [Gargron](https://github.com/mastodon/mastodon/pull/26250), [Gargron](https://github.com/mastodon/mastodon/pull/26287), [Gargron](https://github.com/mastodon/mastodon/pull/26286), [c960657](https://github.com/mastodon/mastodon/pull/26184)) -- **Change "direct message" nomenclature to "private mention" in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/24248)) -- **Change translation feature to cover Content Warnings, poll options and media descriptions** ([c960657](https://github.com/mastodon/mastodon/pull/24175), [S-H-GAMELINKS](https://github.com/mastodon/mastodon/pull/25251), [c960657](https://github.com/mastodon/mastodon/pull/26168), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26452)) -- **Change account search to match by text when opted-in** ([jsgoldstein](https://github.com/mastodon/mastodon/pull/25599), [Gargron](https://github.com/mastodon/mastodon/pull/26378)) -- **Change import feature to be clearer, less error-prone and more reliable** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21054), [mgmn](https://github.com/mastodon/mastodon/pull/24874)) -- **Change local and federated timelines to be tabs of a single “Live feeds” column** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25641), [Gargron](https://github.com/mastodon/mastodon/pull/25683), [mgmn](https://github.com/mastodon/mastodon/pull/25694), [Plastikmensch](https://github.com/mastodon/mastodon/pull/26247), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26633)) -- **Change user archive export to be faster and more reliable, and export `.zip` archives instead of `.tar.gz` ones** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23360), [TheEssem](https://github.com/mastodon/mastodon/pull/25034)) -- **Change `mastodon-streaming` systemd unit files to be templated** ([e-nomem](https://github.com/mastodon/mastodon/pull/24751)) -- **Change `statsd` integration to disable sidekiq metrics by default** ([mjankowski](https://github.com/mastodon/mastodon/pull/25265), [mjankowski](https://github.com/mastodon/mastodon/pull/25336), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26310)) - This deprecates `statsd` support and disables the sidekiq integration unless `STATSD_SIDEKIQ` is set to `true`. - This is because the `nsa` gem is unmaintained, and its sidekiq integration is known to add very significant overhead. - Later versions of Mastodon will have other ways to get the same metrics. -- **Change replica support to native Rails adapter** ([krainboltgreene](https://github.com/mastodon/mastodon/pull/25693), [Gargron](https://github.com/mastodon/mastodon/pull/25849), [Gargron](https://github.com/mastodon/mastodon/pull/25874), [Gargron](https://github.com/mastodon/mastodon/pull/25851), [Gargron](https://github.com/mastodon/mastodon/pull/25977), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26074), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26326), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26386), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26856)) - This is a breaking change, dropping `makara` support, and requiring you to update your database configuration if you are using replicas. - To tell Mastodon to use a read replica, you can either set the `REPLICA_DB_NAME` environment variable (along with `REPLICA_DB_USER`, `REPLICA_DB_PASS`, `REPLICA_DB_HOST`, and `REPLICA_DB_PORT`, if they differ from the primary database), or the `REPLICA_DATABASE_URL` environment variable if your configuration is based on `DATABASE_URL`. -- Change DCT method used for JPEG encoding to float ([electroCutie](https://github.com/mastodon/mastodon/pull/26675)) -- Change from `node-redis` to `ioredis` for streaming ([gmemstr](https://github.com/mastodon/mastodon/pull/26581)) -- Change private statuses index to index without crutches ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26713)) -- Change video compression parameters ([Gargron](https://github.com/mastodon/mastodon/pull/26631), [Gargron](https://github.com/mastodon/mastodon/pull/26745), [Gargron](https://github.com/mastodon/mastodon/pull/26766), [Gargron](https://github.com/mastodon/mastodon/pull/26970)) -- Change admin e-mail notification settings to be their own settings group ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26596)) -- Change opacity of the delete icon in the search field to be more visible ([AntoninDelFabbro](https://github.com/mastodon/mastodon/pull/26449)) -- Change Account Search to prioritize username over display name ([jsgoldstein](https://github.com/mastodon/mastodon/pull/26623)) -- Change follow recommendation materialized view to be faster in most cases ([renchap, ClearlyClaire](https://github.com/mastodon/mastodon/pull/26545)) -- Change `robots.txt` to block GPTBot ([Foritus](https://github.com/mastodon/mastodon/pull/26396)) -- Change header of hashtag timelines in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26362), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26416)) -- Change streaming `/metrics` to include additional metrics ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/26299), [ThisIsMissEm](https://github.com/mastodon/mastodon/pull/26945)) -- Change indexing frequency from 5 minutes to 1 minute, add locks to schedulers ([Gargron](https://github.com/mastodon/mastodon/pull/26304)) -- Change column link to add a better keyboard focus indicator ([teeerevor](https://github.com/mastodon/mastodon/pull/26278)) -- Change poll form element colors to fit with the rest of the ui ([teeerevor](https://github.com/mastodon/mastodon/pull/26139), [teeerevor](https://github.com/mastodon/mastodon/pull/26162), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26164)) -- Change 'favourite' to 'favorite' for American English ([marekr](https://github.com/mastodon/mastodon/pull/24667), [gunchleoc](https://github.com/mastodon/mastodon/pull/26009), [nabijaczleweli](https://github.com/mastodon/mastodon/pull/26109)) -- Change ActivityStreams representation of suspended accounts to not use a blank `name` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25276)) -- Change focus UI for keyboard only input ([teeerevor](https://github.com/mastodon/mastodon/pull/25935), [Gargron](https://github.com/mastodon/mastodon/pull/26125), [Gargron](https://github.com/mastodon/mastodon/pull/26767)) -- Change thread view to scroll to the selected post rather than the post being replied to ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24685)) -- Change links in multi-column mode so tabs are open in single-column mode ([Signez](https://github.com/mastodon/mastodon/pull/25893), [Signez](https://github.com/mastodon/mastodon/pull/26070), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25973), [Signez](https://github.com/mastodon/mastodon/pull/26019), [Signez](https://github.com/mastodon/mastodon/pull/26759)) -- Change searching with `#` to include account index ([jsgoldstein](https://github.com/mastodon/mastodon/pull/25638)) -- Change label and design of sensitive and unavailable media in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25712), [Gargron](https://github.com/mastodon/mastodon/pull/26135), [Gargron](https://github.com/mastodon/mastodon/pull/26330)) -- Change button colors to increase hover/focus contrast and consistency ([teeerevor](https://github.com/mastodon/mastodon/pull/25677), [Gargron](https://github.com/mastodon/mastodon/pull/25679)) -- Change dropdown icon above compose form from ellipsis to bars in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25661)) -- Change header backgrounds to use fewer different colors in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25577)) -- Change files to be deleted in batches instead of one-by-one ([Gargron](https://github.com/mastodon/mastodon/pull/23302), [S-H-GAMELINKS](https://github.com/mastodon/mastodon/pull/25586), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25587)) -- Change emoji picker icon ([iparr](https://github.com/mastodon/mastodon/pull/25479)) -- Change edit profile page ([Gargron](https://github.com/mastodon/mastodon/pull/25413), [c960657](https://github.com/mastodon/mastodon/pull/26538)) -- Change "bot" label to "automated" ([Gargron](https://github.com/mastodon/mastodon/pull/25356)) -- Change design of dropdowns in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25107)) -- Change wording of “Content cache retention period” setting to highlight destructive implications ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23261)) -- Change autolinking to allow carets in URL search params ([renchap](https://github.com/mastodon/mastodon/pull/25216)) -- Change share action from being in action bar to being in dropdown in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25105)) -- Change sessions to be ordered from most-recent to least-recently updated ([frankieroberto](https://github.com/mastodon/mastodon/pull/25005)) -- Change vacuum scheduler to also delete expired tokens and unused application records ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24868), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24871)) -- Change "Sign in" to "Login" ([Gargron](https://github.com/mastodon/mastodon/pull/24942)) -- Change domain suspensions to also be checked before trying to fetch unknown remote resources ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24535)) -- Change media components to use aspect-ratio rather than compute height themselves ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24686), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24943), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26801)) -- Change logo version in header based on screen size in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24707)) -- Change label from "For you" to "People" on explore screen in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24706)) -- Change logged-out WebUI HTML pages to be cached for a few seconds ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24708)) -- Change unauthenticated responses to be cached in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/24348), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24662), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24665)) -- Change HTTP caching logic ([Gargron](https://github.com/mastodon/mastodon/pull/24347), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24604)) -- Change hashtags and mentions in bios to open in-app in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24643)) -- Change styling of the recommended accounts to allow bio to be more visible ([chike00](https://github.com/mastodon/mastodon/pull/24480)) -- Change account search in moderation interface to allow searching by username including the leading `@` ([HeitorMC](https://github.com/mastodon/mastodon/pull/24242)) -- Change all components to use the same error page in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24512)) -- Change search pop-out in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24305)) -- Change user settings to be stored in a more optimal way ([Gargron](https://github.com/mastodon/mastodon/pull/23630), [c960657](https://github.com/mastodon/mastodon/pull/24321), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24453), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24460), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24558), [Gargron](https://github.com/mastodon/mastodon/pull/24761), [Gargron](https://github.com/mastodon/mastodon/pull/24783), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25508), [jsgoldstein](https://github.com/mastodon/mastodon/pull/25340), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26884), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/27012)) -- Change media upload limits and remove client-side resizing ([Gargron](https://github.com/mastodon/mastodon/pull/23726)) -- Change design of account rows in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24247), [Gargron](https://github.com/mastodon/mastodon/pull/24343), [Gargron](https://github.com/mastodon/mastodon/pull/24956), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25131)) -- Change log-out to use Single Logout when using external log-in through OIDC ([CSDUMMI](https://github.com/mastodon/mastodon/pull/24020)) -- Change sidekiq-bulk's batch size from 10,000 to 1,000 jobs in one Redis call ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24034)) -- Change translation to only be offered for supported languages ([c960657](https://github.com/mastodon/mastodon/pull/23879), [c960657](https://github.com/mastodon/mastodon/pull/24037)) - This adds the `/api/v1/instance/translation_languages` REST API endpoint that returns an object with the supported translation language pairs in the form: - ```json - { - "fr": ["en", "de"] - } - ``` - (where `fr` is a supported source language and `en` and `de` or supported output language when translating a `fr` string) -- Change compose form checkbox to native input with `appearance: none` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22949)) -- Change posts' clickable area to be larger ([c960657](https://github.com/mastodon/mastodon/pull/23621)) -- Change `followed_by` link to `location=all` if account is local on /admin/accounts/:id page ([tribela](https://github.com/mastodon/mastodon/pull/23467)) - -### Removed - -- **Remove support for Node.js 14** ([renchap](https://github.com/mastodon/mastodon/pull/25198)) -- **Remove support for Ruby 2.7** ([nschonni](https://github.com/mastodon/mastodon/pull/24237)) -- **Remove clustering from streaming API** ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/24655)) -- **Remove anonymous access to the streaming API** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23989)) -- Remove obfuscation of reply count in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26768)) -- Remove `kmr` from language selection, as it was a duplicate for `ku` ([gunchleoc](https://github.com/mastodon/mastodon/pull/26014), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26787)) -- Remove 16:9 cropping from web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26132)) -- Remove back button from bookmarks, favourites and lists screens in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26126)) -- Remove display name input from sign-up form ([Gargron](https://github.com/mastodon/mastodon/pull/24704)) -- Remove `tai` locale ([c960657](https://github.com/mastodon/mastodon/pull/23880)) -- Remove empty Kushubian (csb) local files ([nschonni](https://github.com/mastodon/mastodon/pull/24151)) -- Remove `Permissions-Policy` header from all responses ([Gargron](https://github.com/mastodon/mastodon/pull/24124)) - -### Fixed - -- **Fix filters not being applying in the explore page** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25887)) -- **Fix being unable to load past a full page of filtered posts in Home timeline** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24930)) -- **Fix log-in flow when involving both OAuth and external authentication** ([CSDUMMI](https://github.com/mastodon/mastodon/pull/24073)) -- **Fix broken links in account gallery** ([c960657](https://github.com/mastodon/mastodon/pull/24218)) -- **Fix migration handler not updating lists** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24808)) -- Fix crash when viewing a moderation appeal and the moderator account has been deleted ([xrobau](https://github.com/mastodon/mastodon/pull/25900)) -- Fix error in Web UI when server rules cannot be fetched ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26957)) -- Fix paragraph margins resulting in irregular read-more cut-off in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26828)) -- Fix notification permissions being requested immediately after login ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26472)) -- Fix performances of profile directory ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26840), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26842)) -- Fix mute button and volume slider feeling disconnected in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26827), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26860)) -- Fix “Scoped order is ignored, it's forced to be batch order.” warnings ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26793)) -- Fix blocked domain appearing in account feeds ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26823)) -- Fix invalid `Content-Type` header for WebP images ([c960657](https://github.com/mastodon/mastodon/pull/26773)) -- Fix minor inefficiencies in `tootctl search deploy` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26721)) -- Fix filter form in profiles directory overflowing instead of wrapping ([arbolitoloco1](https://github.com/mastodon/mastodon/pull/26682)) -- Fix sign up steps progress layout in right-to-left locales ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26728)) -- Fix bug with “favorited by” and “reblogged by“ view on posts only showing up to 40 items ([timothyjrogers](https://github.com/mastodon/mastodon/pull/26577), [timothyjrogers](https://github.com/mastodon/mastodon/pull/26574)) -- Fix bad search type heuristic ([Gargron](https://github.com/mastodon/mastodon/pull/26673)) -- Fix not being able to negate prefix clauses in search ([Gargron](https://github.com/mastodon/mastodon/pull/26672)) -- Fix timeout on invalid set of exclusionary parameters in `/api/v1/timelines/public` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/26239)) -- Fix adding column with default value taking longer on Postgres >= 11 ([Gargron](https://github.com/mastodon/mastodon/pull/26375)) -- Fix light theme select option for hashtags ([teeerevor](https://github.com/mastodon/mastodon/pull/26311)) -- Fix AVIF attachments ([c960657](https://github.com/mastodon/mastodon/pull/26264)) -- Fix incorrect URL normalization when fetching remote resources ([c960657](https://github.com/mastodon/mastodon/pull/26219), [c960657](https://github.com/mastodon/mastodon/pull/26285)) -- Fix being unable to filter posts for individual Chinese languages ([gunchleoc](https://github.com/mastodon/mastodon/pull/26066)) -- Fix preview card sometimes linking to 4xx error pages ([c960657](https://github.com/mastodon/mastodon/pull/26200)) -- Fix emoji picker button scrolling with textarea content in single-column view ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25304)) -- Fix missing border on error screen in light theme in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/26152)) -- Fix UI overlap with the loupe icon in the Explore Tab ([gol-cha](https://github.com/mastodon/mastodon/pull/26113)) -- Fix unexpected redirection to `/explore` after sign-in ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26143)) -- Fix `/api/v1/statuses/:id/unfavourite` and `/api/v1/statuses/:id/unreblog` returning non-updated counts ([c960657](https://github.com/mastodon/mastodon/pull/24365)) -- Fix clicking the “Back” button sometimes leading out of Mastodon ([c960657](https://github.com/mastodon/mastodon/pull/23953), [CSFlorin](https://github.com/mastodon/mastodon/pull/24835), [S-H-GAMELINKS](https://github.com/mastodon/mastodon/pull/24867), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25281)) -- Fix processing of `null` ActivityPub activities ([tribela](https://github.com/mastodon/mastodon/pull/26021)) -- Fix hashtag posts not being removed from home feed on hashtag unfollow ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26028)) -- Fix for "follows you" indicator in light web UI not readable ([vmstan](https://github.com/mastodon/mastodon/pull/25993)) -- Fix incorrect line break between icon and number of reposts & favourites ([edent](https://github.com/mastodon/mastodon/pull/26004)) -- Fix sounds not being loaded from assets host ([Signez](https://github.com/mastodon/mastodon/pull/25931)) -- Fix buttons showing inconsistent styles ([teeerevor](https://github.com/mastodon/mastodon/pull/25903), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25965), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26341), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/26482)) -- Fix trend calculation working on too many items at a time ([Gargron](https://github.com/mastodon/mastodon/pull/25835)) -- Fix dropdowns being disabled for logged out users in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25714), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25964)) -- Fix explore page being inaccessible when opted-out of trends in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25716)) -- Fix re-activated accounts possibly getting deleted by `AccountDeletionWorker` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25711)) -- Fix `/api/v2/search` not working with following query param ([danielmbrasil](https://github.com/mastodon/mastodon/pull/25681)) -- Fix inefficient query when requesting a new confirmation email from a logged-in account ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25669)) -- Fix unnecessary concurrent calls to `/api/*/instance` in web UI ([mgmn](https://github.com/mastodon/mastodon/pull/25663)) -- Fix resolving local URL for remote content ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25637)) -- Fix search not being easily findable on smaller screens in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25576), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25631)) -- Fix j/k keyboard shortcuts on some status lists ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25554)) -- Fix missing validation on `default_privacy` setting ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25513)) -- Fix incorrect pagination headers in `/api/v2/admin/accounts` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/25477)) -- Fix non-interactive upload container being given a `button` role and tabIndex ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25462)) -- Fix always redirecting to onboarding in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/25396)) -- Fix inconsistent use of middle dot (·) instead of bullet (•) to separate items ([j-f1](https://github.com/mastodon/mastodon/pull/25248)) -- Fix spacing of middle dots in the detailed status meta section ([j-f1](https://github.com/mastodon/mastodon/pull/25247)) -- Fix prev/next buttons color in media viewer ([renchap](https://github.com/mastodon/mastodon/pull/25231)) -- Fix email addresses not being properly updated in `tootctl maintenance fix-duplicates` ([mjankowski](https://github.com/mastodon/mastodon/pull/25118)) -- Fix unicode surrogate pairs sometimes being broken in page title ([eai04191](https://github.com/mastodon/mastodon/pull/25148)) -- Fix various inefficient queries against account domains ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25126)) -- Fix video player offering to expand in a lightbox when it's in an `iframe` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25067)) -- Fix post embed previews ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25071)) -- Fix inadequate error handling in several API controllers when given invalid parameters ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24947), [danielmbrasil](https://github.com/mastodon/mastodon/pull/24958), [danielmbrasil](https://github.com/mastodon/mastodon/pull/25063), [danielmbrasil](https://github.com/mastodon/mastodon/pull/25072), [danielmbrasil](https://github.com/mastodon/mastodon/pull/25386), [danielmbrasil](https://github.com/mastodon/mastodon/pull/25595)) -- Fix uncaught `ActiveRecord::StatementInvalid` in Mastodon::IpBlocksCLI ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24861)) -- Fix various edge cases with local moves ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24812)) -- Fix `tootctl accounts cull` crashing when encountering a domain resolving to a private address ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23378)) -- Fix `tootctl accounts approve --number N` not aproving the N earliest registrations ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24605)) -- Fix being unable to clear media description when editing posts ([c960657](https://github.com/mastodon/mastodon/pull/24720)) -- Fix unavailable translations not falling back to English ([mgmn](https://github.com/mastodon/mastodon/pull/24727)) -- Fix anonymous visitors getting a session cookie on first visit ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24584), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24650), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24664)) -- Fix cutting off first letter of hashtag links sometimes in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/24623)) -- Fix crash in `tootctl accounts create --reattach --force` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24557), [danielmbrasil](https://github.com/mastodon/mastodon/pull/24680)) -- Fix characters being emojified even when using Variation Selector 15 (text) ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20949), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24615)) -- Fix uncaught ActiveRecord::StatementInvalid exception in `Mastodon::AccountsCLI#approve` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24590)) -- Fix email confirmation skip option in `tootctl accounts modify USERNAME --email EMAIL --confirm` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24578)) -- Fix tooltip for dates without time ([c960657](https://github.com/mastodon/mastodon/pull/24244)) -- Fix missing loading spinner and loading more on scroll in Private Mentions column ([c960657](https://github.com/mastodon/mastodon/pull/24446)) -- Fix account header image missing from `/settings/profile` on narrow screens ([c960657](https://github.com/mastodon/mastodon/pull/24433)) -- Fix height of announcements not being updated when using reduced animations ([c960657](https://github.com/mastodon/mastodon/pull/24354)) -- Fix inconsistent radius in advanced interface drawer ([thislight](https://github.com/mastodon/mastodon/pull/24407)) -- Fix loading more trending posts on scroll in the advanced interface ([OmmyZhang](https://github.com/mastodon/mastodon/pull/24314)) -- Fix poll ending notification for edited polls ([c960657](https://github.com/mastodon/mastodon/pull/24311)) -- Fix max width of media in `/about` and `/privacy-policy` ([mgmn](https://github.com/mastodon/mastodon/pull/24180)) -- Fix streaming API not being usable without `DATABASE_URL` ([Gargron](https://github.com/mastodon/mastodon/pull/23960)) -- Fix external authentication not running onboarding code for new users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23458)) - -## [4.1.8] - 2023-09-19 - -### Fixed - -- Fix post edits not being forwarded as expected ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26936)) -- Fix moderator rights inconsistencies ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26729)) -- Fix crash when encountering invalid URL ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26814)) -- Fix cached posts including stale stats ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26409)) -- Fix uploading of video files for which `ffprobe` reports `0/0` average framerate ([NicolaiSoeborg](https://github.com/mastodon/mastodon/pull/26500)) -- Fix unexpected audio stream transcoding when uploaded video is eligible to passthrough ([yufushiro](https://github.com/mastodon/mastodon/pull/26608)) - -### Security - -- Fix missing HTML sanitization in translation API (CVE-2023-42452, [GHSA-2693-xr3m-jhqr](https://github.com/mastodon/mastodon/security/advisories/GHSA-2693-xr3m-jhqr)) -- Fix incorrect domain name normalization (CVE-2023-42451, [GHSA-v3xf-c9qf-j667](https://github.com/mastodon/mastodon/security/advisories/GHSA-v3xf-c9qf-j667)) - -## [4.1.7] - 2023-09-05 - -### Changed - -- Change remote report processing to accept reports with long comments, but truncate them ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/25028)) - -### Fixed - -- **Fix blocking subdomains of an already-blocked domain** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26392)) -- Fix `/api/v1/timelines/tag/:hashtag` allowing for unauthenticated access when public preview is disabled ([danielmbrasil](https://github.com/mastodon/mastodon/pull/26237)) -- Fix inefficiencies in `PlainTextFormatter` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26727)) - -## [4.1.6] - 2023-07-31 - -### Fixed - -- Fix memory leak in streaming server ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/26228)) -- Fix wrong filters sometimes applying in streaming ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26159), [ThisIsMissEm](https://github.com/mastodon/mastodon/pull/26213), [renchap](https://github.com/mastodon/mastodon/pull/26233)) -- Fix incorrect connect timeout in outgoing requests ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26116)) - -## [4.1.5] - 2023-07-21 - -### Added - -- Add check preventing Sidekiq workers from running with Makara configured ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25850)) - -### Changed - -- Change request timeout handling to use a longer deadline ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26055)) - -### Fixed - -- Fix moderation interface for remote instances with a .zip TLD ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25885)) -- Fix remote accounts being possibly persisted to database with incomplete protocol values ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25886)) -- Fix trending publishers table not rendering correctly on narrow screens ([vmstan](https://github.com/mastodon/mastodon/pull/25945)) - -### Security - -- Fix CSP headers being unintentionally wide ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/26105)) - -## [4.1.4] - 2023-07-07 - -### Fixed - -- Fix branding:generate_app_icons failing because of disallowed ICO coder ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25794)) -- Fix crash in admin interface when viewing a remote user with verified links ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25796)) -- Fix processing of media files with unusual names ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25788)) - -## [4.1.3] - 2023-07-06 - -### Added - -- Add fallback redirection when getting a webfinger query `LOCAL_DOMAIN@LOCAL_DOMAIN` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23600)) - -### Changed - -- Change OpenGraph-based embeds to allow fullscreen ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25058)) -- Change AccessTokensVacuum to also delete expired tokens ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24868)) -- Change profile updates to be sent to recently-mentioned servers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24852)) -- Change automatic post deletion thresholds and load detection ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24614)) -- Change `/api/v1/statuses/:id/history` to always return at least one item ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25510)) -- Change auto-linking to allow carets in URL query params ([renchap](https://github.com/mastodon/mastodon/pull/25216)) - -### Removed - -- Remove invalid `X-Frame-Options: ALLOWALL` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25070)) - -### Fixed - -- Fix wrong view being displayed when a webhook fails validation ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25464)) -- Fix soft-deleted post cleanup scheduler overwhelming the streaming server ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/25519)) -- Fix incorrect pagination headers in `/api/v2/admin/accounts` ([danielmbrasil](https://github.com/mastodon/mastodon/pull/25477)) -- Fix multiple inefficiencies in automatic post cleanup worker ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24607), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24785), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24840)) -- Fix performance of streaming by parsing message JSON once ([ThisIsMissEm](https://github.com/mastodon/mastodon/pull/25278), [ThisIsMissEm](https://github.com/mastodon/mastodon/pull/25361)) -- Fix CSP headers when `S3_ALIAS_HOST` includes a path component ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25273)) -- Fix `tootctl accounts approve --number N` not approving N earliest registrations ([danielmbrasil](https://github.com/mastodon/mastodon/pull/24605)) -- Fix reports not being closed when performing batch suspensions ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24988)) -- Fix being able to vote on your own polls ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25015)) -- Fix race condition when reblogging a status ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25016)) -- Fix “Authorized applications” inefficiently and incorrectly getting last use date ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25060)) -- Fix “Authorized applications” crashing when listing apps with certain admin API scopes ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25713)) -- Fix multiple N+1s in ConversationsController ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25134), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25399), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/25499)) -- Fix user archive takeouts when using OpenStack Swift ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24431)) -- Fix searching for remote content by URL not working under certain conditions ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25637)) -- Fix inefficiencies in indexing content for search ([VyrCossont](https://github.com/mastodon/mastodon/pull/24285), [VyrCossont](https://github.com/mastodon/mastodon/pull/24342)) - -### Security - -- Add finer permission requirements for managing webhooks ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25463)) -- Update dependencies -- Add hardening headers for user-uploaded files ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/25756)) -- Fix verified links possibly hiding important parts of the URL (CVE-2023-36462) -- Fix timeout handling of outbound HTTP requests (CVE-2023-36461) -- Fix arbitrary file creation through media processing (CVE-2023-36460) -- Fix possible XSS in preview cards (CVE-2023-36459) - -## [4.1.2] - 2023-04-04 - -### Fixed - -- Fix crash in `tootctl` commands making use of parallelization when Elasticsearch is enabled ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24182), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/24377)) -- Fix crash in `db:setup` when Elasticsearch is enabled ([rrgeorge](https://github.com/mastodon/mastodon/pull/24302)) -- Fix user archive takeout when using OpenStack Swift or S3 providers with no ACL support ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24200)) -- Fix invalid/expired invites being processed on sign-up ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24337)) - -### Security - -- Update Ruby to 3.0.6 due to ReDoS vulnerabilities ([saizai](https://github.com/mastodon/mastodon/pull/24334)) -- Fix unescaped user input in LDAP query ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24379)) - -## [4.1.1] - 2023-03-16 - -### Added - -- Add redirection from paths with url-encoded `@` to their decoded form ([thijskh](https://github.com/mastodon/mastodon/pull/23593)) -- Add `lang` attribute to native language names in language picker in Web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23749)) -- Add headers to outgoing mails to avoid auto-replies ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23597)) -- Add support for refreshing many accounts at once with `tootctl accounts refresh` ([9p4](https://github.com/mastodon/mastodon/pull/23304)) -- Add confirmation modal when clicking to edit a post with a non-empty compose form ([PauloVilarinho](https://github.com/mastodon/mastodon/pull/23936)) -- Add support for the HAproxy PROXY protocol through the `PROXY_PROTO_V1` environment variable ([CSDUMMI](https://github.com/mastodon/mastodon/pull/24064)) -- Add `SENDFILE_HEADER` environment variable ([Gargron](https://github.com/mastodon/mastodon/pull/24123)) -- Add cache headers to static files served through Rails ([Gargron](https://github.com/mastodon/mastodon/pull/24120)) - -### Changed - -- Increase contrast of upload progress bar background ([toolmantim](https://github.com/mastodon/mastodon/pull/23836)) -- Change post auto-deletion throttling constants to better scale with server size ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23320)) -- Change order of bookmark and favourite sidebar entries in single-column UI for consistency ([TerryGarcia](https://github.com/mastodon/mastodon/pull/23701)) -- Change `ActivityPub::DeliveryWorker` retries to be spread out more ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21956)) - -### Fixed - -- Fix “Remove all followers from the selected domains” also removing follows and notifications ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23805)) -- Fix streaming metrics format ([emilweth](https://github.com/mastodon/mastodon/pull/23519), [emilweth](https://github.com/mastodon/mastodon/pull/23520)) -- Fix case-sensitive check for previously used hashtags in hashtag autocompletion ([deanveloper](https://github.com/mastodon/mastodon/pull/23526)) -- Fix focus point of already-attached media not saving after edit ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23566)) -- Fix sidebar behavior in settings/admin UI on mobile ([wxt2005](https://github.com/mastodon/mastodon/pull/23764)) -- Fix inefficiency when searching accounts per username in admin interface ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23801)) -- Fix duplicate “Publish” button on mobile ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23804)) -- Fix server error when failing to follow back followers from `/relationships` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23787)) -- Fix server error when attempting to display the edit history of a trendable post in the admin interface ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23574)) -- Fix `tootctl accounts migrate` crashing because of a typo ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23567)) -- Fix original account being unfollowed on migration before the follow request to the new account could be sent ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21957)) -- Fix the “Back” button in column headers sometimes leaving Mastodon ([c960657](https://github.com/mastodon/mastodon/pull/23953)) -- Fix pgBouncer resetting application name on every transaction ([Gargron](https://github.com/mastodon/mastodon/pull/23958)) -- Fix unconfirmed accounts being counted as active users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23803)) -- Fix `/api/v1/streaming` sub-paths not being redirected ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23988)) -- Fix drag'n'drop upload area text that spans multiple lines not being centered ([vintprox](https://github.com/mastodon/mastodon/pull/24029)) -- Fix sidekiq jobs not triggering Elasticsearch index updates ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24046)) -- Fix tags being unnecessarily stripped from plain-text short site description ([c960657](https://github.com/mastodon/mastodon/pull/23975)) -- Fix HTML entities not being un-escaped in extracted plain-text from remote posts ([c960657](https://github.com/mastodon/mastodon/pull/24019)) -- Fix dashboard crash on ElasticSearch server error ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23751)) -- Fix incorrect post links in strikes when the account is remote ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23611)) -- Fix misleading error code when receiving invalid WebAuthn credentials ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23568)) -- Fix duplicate mails being sent when the SMTP server is too slow to close the connection ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23750)) - -### Security - -- Change user backups to use expiring URLs for download when possible ([Gargron](https://github.com/mastodon/mastodon/pull/24136)) -- Add warning for object storage misconfiguration ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/24137)) - -## [4.1.0] - 2023-02-10 - -### Added - -- **Add support for importing/exporting server-wide domain blocks** ([enbylenore](https://github.com/mastodon/mastodon/pull/20597), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/21471), [dariusk](https://github.com/mastodon/mastodon/pull/22803), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/21470)) -- **Add listing of followed hashtags** ([connorshea](https://github.com/mastodon/mastodon/pull/21773)) -- **Add support for editing media description and focus point of already-sent posts** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20878)) - - Previously, you could add and remove attachments, but not edit media description of already-attached media - - REST API changes: - - `PUT /api/v1/statuses/:id` now takes an extra `media_attributes[]` array parameter with the `id` of the updated media and their updated `description`, `focus`, and `thumbnail` -- **Add follow request banner on account header** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20785)) - - REST API changes: - - `Relationship` entities have an extra `requested_by` boolean attribute representing whether the represented user has requested to follow you -- **Add confirmation screen when handling reports** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22375), [Gargron](https://github.com/mastodon/mastodon/pull/23156), [tribela](https://github.com/mastodon/mastodon/pull/23178)) -- Add option to make the landing page be `/about` even when trends are enabled ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20808)) -- Add `noindex` setting back to the admin interface ([prplecake](https://github.com/mastodon/mastodon/pull/22205)) -- Add instance peers API endpoint toggle back to the admin interface ([dariusk](https://github.com/mastodon/mastodon/pull/22810)) -- Add instance activity API endpoint toggle back to the admin interface ([dariusk](https://github.com/mastodon/mastodon/pull/22833)) -- Add setting for status page URL ([Gargron](https://github.com/mastodon/mastodon/pull/23390), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/23499)) - - REST API changes: - - Add `configuration.urls.status` attribute to the object returned by `GET /api/v2/instance` -- Add `account.approved` webhook ([Saiv46](https://github.com/mastodon/mastodon/pull/22938)) -- Add 12 hours option to polls ([Pleclown](https://github.com/mastodon/mastodon/pull/21131)) -- Add dropdown menu item to open admin interface for remote domains ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21895)) -- Add `--remove-headers`, `--prune-profiles` and `--include-follows` flags to `tootctl media remove` ([evanphilip](https://github.com/mastodon/mastodon/pull/22149)) -- Add `--email` and `--dry-run` options to `tootctl accounts delete` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22328)) -- Add `tootctl accounts migrate` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22330)) -- Add `tootctl accounts prune` ([tribela](https://github.com/mastodon/mastodon/pull/18397)) -- Add `tootctl domains purge` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22063)) -- Add `SIDEKIQ_CONCURRENCY` environment variable ([muffinista](https://github.com/mastodon/mastodon/pull/19589)) -- Add `DB_POOL` environment variable support for streaming server ([Gargron](https://github.com/mastodon/mastodon/pull/23470)) -- Add `MIN_THREADS` environment variable to set minimum Puma threads ([jimeh](https://github.com/mastodon/mastodon/pull/21048)) -- Add explanation text to log-in page ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20946)) -- Add user profile OpenGraph tag on post pages ([bramus](https://github.com/mastodon/mastodon/pull/21423)) -- Add maskable icon support for Android ([workeffortwaste](https://github.com/mastodon/mastodon/pull/20904)) -- Add Belarusian to supported languages ([Mixaill](https://github.com/mastodon/mastodon/pull/22022)) -- Add Western Frisian to supported languages ([ykzts](https://github.com/mastodon/mastodon/pull/18602)) -- Add Montenegrin to the language picker ([ayefries](https://github.com/mastodon/mastodon/pull/21013)) -- Add Southern Sami and Lule Sami to the language picker ([Jullan-M](https://github.com/mastodon/mastodon/pull/21262)) -- Add logging for Rails cache timeouts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21667)) -- Add color highlight for active hashtag “follow” button ([MFTabriz](https://github.com/mastodon/mastodon/pull/21629)) -- Add brotli compression to `assets:precompile` ([Izorkin](https://github.com/mastodon/mastodon/pull/19025)) -- Add “disabled” account filter to the `/admin/accounts` UI ([tribela](https://github.com/mastodon/mastodon/pull/21282)) -- Add transparency to modal background for accessibility ([edent](https://github.com/mastodon/mastodon/pull/18081)) -- Add `lang` attribute to image description textarea and poll option field ([c960657](https://github.com/mastodon/mastodon/pull/23293)) -- Add `spellcheck` attribute to Content Warning and poll option input fields ([c960657](https://github.com/mastodon/mastodon/pull/23395)) -- Add `title` attribute to video elements in media attachments ([bramus](https://github.com/mastodon/mastodon/pull/21420)) -- Add left and right margins to emojis ([dsblank](https://github.com/mastodon/mastodon/pull/20464)) -- Add `roles` attribute to `Account` entities in REST API ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23255), [tribela](https://github.com/mastodon/mastodon/pull/23428)) -- Add `reading:autoplay:gifs` to `/api/v1/preferences` ([j-f1](https://github.com/mastodon/mastodon/pull/22706)) -- Add `hide_collections` parameter to `/api/v1/accounts/credentials` ([CarlSchwan](https://github.com/mastodon/mastodon/pull/22790)) -- Add `policy` attribute to web push subscription objects in REST API at `/api/v1/push/subscriptions` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23210)) -- Add metrics endpoint to streaming API ([Gargron](https://github.com/mastodon/mastodon/pull/23388), [Gargron](https://github.com/mastodon/mastodon/pull/23469)) -- Add more specific error messages to HTTP signature verification ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21617)) -- Add Storj DCS to cloud object storage options in the `mastodon:setup` rake task ([jtolio](https://github.com/mastodon/mastodon/pull/21929)) -- Add checkmark symbol in the checkbox for sensitive media ([sidp](https://github.com/mastodon/mastodon/pull/22795)) -- Add missing accessibility attributes to logout link in modals ([kytta](https://github.com/mastodon/mastodon/pull/22549)) -- Add missing accessibility attributes to “Hide image” button in `MediaGallery` ([hs4man21](https://github.com/mastodon/mastodon/pull/22513)) -- Add missing accessibility attributes to hide content warning field when disabled ([hs4man21](https://github.com/mastodon/mastodon/pull/22568)) -- Add `aria-hidden` to footer circle dividers to improve accessibility ([hs4man21](https://github.com/mastodon/mastodon/pull/22576)) -- Add `lang` attribute to compose form inputs ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23240)) - -### Changed - -- **Ensure exact match is the first result in hashtag searches** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21315)) -- Change account search to return followed accounts first ([dariusk](https://github.com/mastodon/mastodon/pull/22956)) -- Change batch account suspension to create a strike ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20897)) -- Change default reply language to match the default language when replying to a translated post ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22272)) -- Change misleading wording about waitlists ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20850)) -- Increase width of the unread notification border ([connorshea](https://github.com/mastodon/mastodon/pull/21692)) -- Change new post notification button on profiles to make it more apparent when it is enabled ([tribela](https://github.com/mastodon/mastodon/pull/22541)) -- Change trending tags admin interface to always show batch action controls ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23013)) -- Change wording of some OAuth scope descriptions ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22491)) -- Change wording of admin report handling actions ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18388)) -- Change confirm prompts for relationships management ([tribela](https://github.com/mastodon/mastodon/pull/19411)) -- Change language surrounding disability in prompts for media descriptions ([hs4man21](https://github.com/mastodon/mastodon/pull/20923)) -- Change confusing wording in the sign in banner ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22490)) -- Change `POST /settings/applications/:id` to regenerate token on scopes change ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23359)) -- Change account moderation notes to make links clickable ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22553)) -- Change link previews for statuses to never use avatar as fallback ([Gargron](https://github.com/mastodon/mastodon/pull/23376)) -- Change email address input to be read-only for logged-in users when requesting a new confirmation e-mail ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23247)) -- Change notifications per page from 15 to 40 in REST API ([Gargron](https://github.com/mastodon/mastodon/pull/23348)) -- Change number of stored items in home feed from 400 to 800 ([Gargron](https://github.com/mastodon/mastodon/pull/23349)) -- Change API rate limits from 300/5min per user to 1500/5min per user, 300/5min per app ([Gargron](https://github.com/mastodon/mastodon/pull/23347)) -- Save avatar or header correctly even if the other one fails ([tribela](https://github.com/mastodon/mastodon/pull/18465)) -- Change `referrer-policy` to `same-origin` application-wide ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23014), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/23037)) -- Add 'private' to `Cache-Control`, match Rails expectations ([daxtens](https://github.com/mastodon/mastodon/pull/20608)) -- Make the button that expands the compose form differentiable from the button that publishes a post ([Tak](https://github.com/mastodon/mastodon/pull/20864)) -- Change automatic post deletion configuration to be accessible to moved users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20774)) -- Make tag following idempotent ([trwnh](https://github.com/mastodon/mastodon/pull/20860), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/21285)) -- Use buildx functions for faster builds ([inductor](https://github.com/mastodon/mastodon/pull/20692)) -- Split off Dockerfile components for faster builds ([moritzheiber](https://github.com/mastodon/mastodon/pull/20933), [ineffyble](https://github.com/mastodon/mastodon/pull/20948), [BtbN](https://github.com/mastodon/mastodon/pull/21028)) -- Change last occurrence of “silence” to “limit” in UI text ([cincodenada](https://github.com/mastodon/mastodon/pull/20637)) -- Change “hide toot” to “hide post” ([seanthegeek](https://github.com/mastodon/mastodon/pull/22385)) -- Don't allow URLs that contain non-normalized paths to be verified ([dgl](https://github.com/mastodon/mastodon/pull/20999)) -- Change the “Trending now” header to be a link to the Explore page ([connorshea](https://github.com/mastodon/mastodon/pull/21759)) -- Change PostgreSQL connection timeout from 2 minutes to 15 seconds ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21790)) -- Make handle more easily selectable on profile page ([cadars](https://github.com/mastodon/mastodon/pull/21479)) -- Allow admins to refresh remotely-suspended accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22327)) -- Change dropdown menu to contain “Copy link to post” even for non-public posts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21316)) -- Allow adding relays in secure mode and limited federation mode ([ineffyble](https://github.com/mastodon/mastodon/pull/22324)) -- Change timestamps to be displayed using the user's timezone throughout the moderation interface ([FrancisMurillo](https://github.com/mastodon/mastodon/pull/21878), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/22555)) -- Change CSP directives on API to be tight and concise ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20960)) -- Change web UI to not autofocus the compose form ([raboof](https://github.com/mastodon/mastodon/pull/16517), [Akkiesoft](https://github.com/mastodon/mastodon/pull/23094)) -- Change idempotency key handling for posting when database access is slow ([lambda](https://github.com/mastodon/mastodon/pull/21840)) -- Change remote media files to be downloaded outside of transactions ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21796)) -- Improve contrast of charts in “poll has ended” notifications ([j-f1](https://github.com/mastodon/mastodon/pull/22575)) -- Change OEmbed detection and validation to be somewhat more lenient ([ineffyble](https://github.com/mastodon/mastodon/pull/22533)) -- Widen ElasticSearch version detection to not display a warning for OpenSearch ([VyrCossont](https://github.com/mastodon/mastodon/pull/22422), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/23064)) -- Change link verification to allow pages larger than 1MB as long as the link is in the first 1MB ([untitaker](https://github.com/mastodon/mastodon/pull/22879)) -- Update default Node.js version to Node.js 16 ([ineffyble](https://github.com/mastodon/mastodon/pull/22223), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/22342)) - -### Removed - -- Officially remove support for Ruby 2.6 ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21477)) -- Remove `object-fit` polyfill used for old versions of Microsoft Edge ([shuuji3](https://github.com/mastodon/mastodon/pull/22693)) -- Remove `intersection-observer` polyfill for old Safari support ([shuuji3](https://github.com/mastodon/mastodon/pull/23284)) -- Remove empty `title` tag from mailer layout ([nametoolong](https://github.com/mastodon/mastodon/pull/23078)) -- Remove post count and last posts from ActivityPub representation of hashtag collections ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23460)) - -### Fixed - -- **Fix changing domain block severity not undoing individual account effects** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22135)) -- Fix suspension worker crashing on S3-compatible setups without ACL support ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22487)) -- Fix possible race conditions when suspending/unsuspending accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22363)) -- Fix being stuck in edit mode when deleting the edited posts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22126)) -- Fix attached media uploads not being cleared when replying to a post ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23504)) -- Fix filters not being applied to some notification types ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23211)) -- Fix incorrect link in push notifications for some event types ([elizabeth-dev](https://github.com/mastodon/mastodon/pull/23286)) -- Fix some performance issues with `/admin/instances` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21907)) -- Fix some pre-4.0 admin audit logs ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22091)) -- Fix moderation audit log items for warnings having incorrect links ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23242)) -- Fix account activation being sometimes triggered before email confirmation ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23245)) -- Fix missing OAuth scopes for admin APIs ([trwnh](https://github.com/mastodon/mastodon/pull/20918), [trwnh](https://github.com/mastodon/mastodon/pull/20979)) -- Fix voter count not being cleared when a poll is reset ([afontenot](https://github.com/mastodon/mastodon/pull/21700)) -- Fix attachments of edited posts not being fetched ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21565)) -- Fix irreversible and whole_word parameters handling in `/api/v1/filters` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21988)) -- Fix 500 error when marking posts as sensitive while some of them are deleted ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22134)) -- Fix expanded posts not always being scrolled into view ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21797)) -- Fix not being able to scroll the remote interaction modal on small screens ([xendke](https://github.com/mastodon/mastodon/pull/21763)) -- Fix not being able to scroll in post history modal ([cadars](https://github.com/mastodon/mastodon/pull/23396)) -- Fix audio player volume control on Safari ([minacle](https://github.com/mastodon/mastodon/pull/23187)) -- Fix disappearing “Explore” tabs on Safari ([nyura](https://github.com/mastodon/mastodon/pull/20917), [ykzts](https://github.com/mastodon/mastodon/pull/20982)) -- Fix wrong padding in RTL layout ([Gargron](https://github.com/mastodon/mastodon/pull/23157)) -- Fix drag & drop upload area display in single-column mode ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23217)) -- Fix being unable to get a single EmailDomainBlock from the admin API ([trwnh](https://github.com/mastodon/mastodon/pull/20846)) -- Fix admin-set follow recommandations being case-sensitive ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23500)) -- Fix unserialized `role` on account entities in admin API ([Gargron](https://github.com/mastodon/mastodon/pull/23290)) -- Fix pagination of followed tags ([trwnh](https://github.com/mastodon/mastodon/pull/20861)) -- Fix dropdown menu positions when scrolling ([sidp](https://github.com/mastodon/mastodon/pull/22916), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/23062)) -- Fix email with empty domain name labels passing validation ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23246)) -- Fix mysterious registration failure when “Require a reason to join” is set with open registrations ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22127)) -- Fix attachment rendering of edited posts in OpenGraph ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22270)) -- Fix invalid/empty RSS feed link on account pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20772)) -- Fix error in `VerifyLinkService` when processing links with no href ([joshuap](https://github.com/mastodon/mastodon/pull/20741)) -- Fix error in `VerifyLinkService` when processing links with invalid URLs ([untitaker](https://github.com/mastodon/mastodon/pull/23204)) -- Fix media uploads with FFmpeg 5 ([dead10ck](https://github.com/mastodon/mastodon/pull/21191)) -- Fix sensitive flag not being set when replying to a post with a content warning under certain conditions ([kedamaDQ](https://github.com/mastodon/mastodon/pull/21724)) -- Fix misleading message briefly showing up when loading follow requests under some conditions ([c960657](https://github.com/mastodon/mastodon/pull/23386)) -- Fix “Share @:user's profile” profile menu item not working ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21490)) -- Fix crash and incorrect behavior in `tootctl domains crawl` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19004)) -- Fix autoplay on iOS ([jamesadney](https://github.com/mastodon/mastodon/pull/21422)) -- Fix user clean-up scheduler crash when an unconfirmed account has a moderation note ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23318)) -- Fix spaces not being stripped in admin account search ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21324)) -- Fix spaces not being stripped when adding relays ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22655)) -- Fix infinite loading spinner instead of soft 404 for non-existing remote accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21303)) -- Fix minor visual issue with the top border of verified account fields ([j-f1](https://github.com/mastodon/mastodon/pull/22006)) -- Fix pending account approval and rejection not being recorded in the admin audit log ([FrancisMurillo](https://github.com/mastodon/mastodon/pull/22088)) -- Fix “Sign up” button with closed registrations not opening modal on mobile ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22060)) -- Fix UI header overflowing on mobile ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21783)) -- Fix 500 error when trying to migrate to an invalid address ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21462)) -- Fix crash when trying to fetch unobtainable avatar of user using external authentication ([lochiiconnectivity](https://github.com/mastodon/mastodon/pull/22462)) -- Fix processing error on incoming malformed JSON-LD under some situations ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23416)) -- Fix potential duplicate posts in Explore tab ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22121)) -- Fix deprecation warning in `tootctl accounts rotate` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22120)) -- Fix styling of featured tags in light theme ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23252)) -- Fix missing style in warning and strike cards ([AtelierSnek](https://github.com/mastodon/mastodon/pull/22177), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/22302)) -- Fix wasteful request to `/api/v1/custom_emojis` when not logged in ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22326)) -- Fix replies sometimes being delivered to user-blocked domains ([tribela](https://github.com/mastodon/mastodon/pull/22117)) -- Fix admin dashboard crash when using some ElasticSearch replacements ([cortices](https://github.com/mastodon/mastodon/pull/21006)) -- Fix profile avatar being slightly offset into left border ([RiedleroD](https://github.com/mastodon/mastodon/pull/20994)) -- Fix N+1 queries in `NotificationsController` ([nametoolong](https://github.com/mastodon/mastodon/pull/21202)) -- Fix being unable to react to announcements with the keycap number sign emoji ([kescherCode](https://github.com/mastodon/mastodon/pull/22231)) -- Fix height computation of post embeds ([hodgesmr](https://github.com/mastodon/mastodon/pull/22141)) -- Fix accessibility issue of the search bar due to hidden placeholder ([alexstine](https://github.com/mastodon/mastodon/pull/21275)) -- Fix layout change handler not being removed due to a typo ([nschonni](https://github.com/mastodon/mastodon/pull/21829)) -- Fix typo in the default `S3_HOSTNAME` used in the `mastodon:setup` rake task ([danp](https://github.com/mastodon/mastodon/pull/19932)) -- Fix the top action bar appearing in the multi-column layout ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20943)) -- Fix inability to use local LibreTranslate without setting `ALLOWED_PRIVATE_ADDRESSES` ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21926)) -- Fix punycoded local domains not being prettified in initial state ([Tritlo](https://github.com/mastodon/mastodon/pull/21440)) -- Fix CSP violation warning by removing inline CSS from SVG logo ([luxiaba](https://github.com/mastodon/mastodon/pull/20814)) -- Fix margin for search field on medium window size ([minacle](https://github.com/mastodon/mastodon/pull/21606)) -- Fix search popout scrolling with the page in single-column mode ([rgroothuijsen](https://github.com/mastodon/mastodon/pull/16463)) -- Fix minor post cache hydration discrepancy ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19879)) -- Fix `・` detection in hashtags ([parthoghosh24](https://github.com/mastodon/mastodon/pull/22888)) -- Fix hashtag follows bypassing user blocks ([tribela](https://github.com/mastodon/mastodon/pull/22849)) -- Fix moved accounts being incorrectly redirected to account settings when trying to view a remote profile ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22497)) -- Fix site upload validations ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22479)) -- Fix “Add new domain block” button using last submitted search value instead of the current one ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22485)) -- Fix misleading hashtag warning when posting with “Followers only” or “Mentioned people only” visibility ([n0toose](https://github.com/mastodon/mastodon/pull/22827)) -- Fix embedded posts with videos grabbing focus ([Akkiesoft](https://github.com/mastodon/mastodon/pull/22778)) -- Fix `$` not being escaped in `.env.production` files generated by the `mastodon:setup` rake task ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/23012), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/23072)) -- Fix sanitizer parsing link text as HTML when stripping unsupported links ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22558)) -- Fix `scheduled_at` input not using `datetime-local` when editing announcements ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/21896)) -- Fix REST API serializer for `Account` not including `moved` when the moved account has itself moved ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22483)) -- Fix `/api/v1/admin/trends/tags` using wrong serializer ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18943)) -- Fix situations in which instance actor can be set to a Mastodon-incompatible name ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22307)) - -### Security - -- Add `form-action` CSP directive ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20781), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20958), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20962)) -- Fix unbounded recursion in account discovery ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/22025)) -- Revoke all authorized applications on password reset ([FrancisMurillo](https://github.com/mastodon/mastodon/pull/21325)) -- Fix unbounded recursion in post discovery ([ClearlyClaire,nametoolong](https://github.com/mastodon/mastodon/pull/23506)) - -## [4.0.2] - 2022-11-15 - -### Fixed - -- Fix wrong color on mentions hidden behind content warning in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/20724)) -- Fix filters from other users being used in the streaming service ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20719)) -- Fix `unsafe-eval` being used when `wasm-unsafe-eval` is enough in Content Security Policy ([Gargron](https://github.com/mastodon/mastodon/pull/20729), [prplecake](https://github.com/mastodon/mastodon/pull/20606)) - -## [4.0.1] - 2022-11-14 - -### Fixed - -- Fix nodes order being sometimes mangled when rewriting emoji ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20677)) - -## [4.0.0] - 2022-11-14 - -Some of the features in this release have been funded through the [NGI0 Discovery](https://nlnet.nl/discovery) Fund, a fund established by [NLnet](https://nlnet.nl/) with financial support from the European Commission's [Next Generation Internet](https://ngi.eu/) programme, under the aegis of DG Communications Networks, Content and Technology under grant agreement No 825322. - -### Added - -- Add ability to filter followed accounts' posts by language ([Gargron](https://github.com/mastodon/mastodon/pull/19095), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19268)) -- **Add ability to follow hashtags** ([Gargron](https://github.com/mastodon/mastodon/pull/18809), [Gargron](https://github.com/mastodon/mastodon/pull/18862), [Gargron](https://github.com/mastodon/mastodon/pull/19472), [noellabo](https://github.com/mastodon/mastodon/pull/18924)) -- Add ability to filter individual posts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18945)) -- **Add ability to translate posts** ([Gargron](https://github.com/mastodon/mastodon/pull/19218), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19433), [Gargron](https://github.com/mastodon/mastodon/pull/19453), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19434), [Gargron](https://github.com/mastodon/mastodon/pull/19388), [ykzts](https://github.com/mastodon/mastodon/pull/19244), [Gargron](https://github.com/mastodon/mastodon/pull/19245)) -- Add featured tags to web UI ([noellabo](https://github.com/mastodon/mastodon/pull/19408), [noellabo](https://github.com/mastodon/mastodon/pull/19380), [noellabo](https://github.com/mastodon/mastodon/pull/19358), [noellabo](https://github.com/mastodon/mastodon/pull/19409), [Gargron](https://github.com/mastodon/mastodon/pull/19382), [ykzts](https://github.com/mastodon/mastodon/pull/19418), [noellabo](https://github.com/mastodon/mastodon/pull/19403), [noellabo](https://github.com/mastodon/mastodon/pull/19404), [Gargron](https://github.com/mastodon/mastodon/pull/19398), [Gargron](https://github.com/mastodon/mastodon/pull/19712), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20018)) -- **Add support for language preferences for trending statuses and links** ([Gargron](https://github.com/mastodon/mastodon/pull/18288), [Gargron](https://github.com/mastodon/mastodon/pull/19349), [ykzts](https://github.com/mastodon/mastodon/pull/19335)) - - Previously, you could only see trends in your current language - - For less popular languages, that meant empty trends - - Now, trends in your preferred languages' are shown on top, with others beneath -- Add server rules to sign-up flow ([Gargron](https://github.com/mastodon/mastodon/pull/19296)) -- Add privacy icons to report modal in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19190)) -- Add `noopener` to links to remote profiles in web UI ([shleeable](https://github.com/mastodon/mastodon/pull/19014)) -- Add option to open original page in dropdowns of remote content in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/20299)) -- Add warning for sensitive audio posts in web UI ([rgroothuijsen](https://github.com/mastodon/mastodon/pull/17885)) -- Add language attribute to posts in web UI ([tribela](https://github.com/mastodon/mastodon/pull/18544)) -- Add support for uploading WebP files ([Saiv46](https://github.com/mastodon/mastodon/pull/18506)) -- Add support for uploading `audio/vnd.wave` files ([tribela](https://github.com/mastodon/mastodon/pull/18737)) -- Add support for uploading AVIF files ([txt-file](https://github.com/mastodon/mastodon/pull/19647)) -- Add support for uploading HEIC files ([Gargron](https://github.com/mastodon/mastodon/pull/19618)) -- Add more debug information when processing remote accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/15605), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19209)) -- **Add retention policy for cached content and media** ([Gargron](https://github.com/mastodon/mastodon/pull/19232), [zunda](https://github.com/mastodon/mastodon/pull/19478), [Gargron](https://github.com/mastodon/mastodon/pull/19458), [Gargron](https://github.com/mastodon/mastodon/pull/19248)) - - Set for how long remote posts or media should be cached on your server - - Hands-off alternative to `tootctl` commands -- **Add customizable user roles** ([Gargron](https://github.com/mastodon/mastodon/pull/18641), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18812), [Gargron](https://github.com/mastodon/mastodon/pull/19040), [tribela](https://github.com/mastodon/mastodon/pull/18825), [tribela](https://github.com/mastodon/mastodon/pull/18826), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18776), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18777), [unextro](https://github.com/mastodon/mastodon/pull/18786), [tribela](https://github.com/mastodon/mastodon/pull/18824), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19436)) - - Previously, there were 3 hard-coded roles, user, moderator, and admin - - Create your own roles and decide which permissions they should have -- Add notifications for new reports ([Gargron](https://github.com/mastodon/mastodon/pull/18697), [Gargron](https://github.com/mastodon/mastodon/pull/19475)) -- Add ability to select all accounts matching search for batch actions in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/19053), [Gargron](https://github.com/mastodon/mastodon/pull/19054)) -- Add ability to view previous edits of a status in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/19462)) -- Add ability to block sign-ups from IP ([Gargron](https://github.com/mastodon/mastodon/pull/19037)) -- **Add webhooks to admin UI** ([Gargron](https://github.com/mastodon/mastodon/pull/18510)) -- Add admin API for managing domain allows ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18668)) -- Add admin API for managing domain blocks ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18247)) -- Add admin API for managing e-mail domain blocks ([Gargron](https://github.com/mastodon/mastodon/pull/19066)) -- Add admin API for managing canonical e-mail blocks ([Gargron](https://github.com/mastodon/mastodon/pull/19067)) -- Add admin API for managing IP blocks ([Gargron](https://github.com/mastodon/mastodon/pull/19065), [trwnh](https://github.com/mastodon/mastodon/pull/20207)) -- Add `sensitized` attribute to accounts in admin REST API ([trwnh](https://github.com/mastodon/mastodon/pull/20094)) -- Add `services` and `metadata` to the NodeInfo endpoint ([MFTabriz](https://github.com/mastodon/mastodon/pull/18563)) -- Add `--remove-role` option to `tootctl accounts modify` ([Gargron](https://github.com/mastodon/mastodon/pull/19477)) -- Add `--days` option to `tootctl media refresh` ([tribela](https://github.com/mastodon/mastodon/pull/18425)) -- Add `EMAIL_DOMAIN_LISTS_APPLY_AFTER_CONFIRMATION` environment variable ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18642)) -- Add `IP_RETENTION_PERIOD` and `SESSION_RETENTION_PERIOD` environment variables ([kescherCode](https://github.com/mastodon/mastodon/pull/18757)) -- Add `http_hidden_proxy` environment variable ([tribela](https://github.com/mastodon/mastodon/pull/18427)) -- Add `ENABLE_STARTTLS` environment variable ([erbridge](https://github.com/mastodon/mastodon/pull/20321)) -- Add caching for payload serialization during fan-out ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19637), [Gargron](https://github.com/mastodon/mastodon/pull/19642), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19746), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19747), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19963)) -- Add assets from Twemoji 14.0 ([Gargron](https://github.com/mastodon/mastodon/pull/19733)) -- Add reputation and followers score boost to SQL-only account search ([Gargron](https://github.com/mastodon/mastodon/pull/19251)) -- Add Scots, Balaibalan, Láadan, Lingua Franca Nova, Lojban, Toki Pona to languages list ([VyrCossont](https://github.com/mastodon/mastodon/pull/20168)) -- Set autocomplete hints for e-mail, password and OTP fields ([rcombs](https://github.com/mastodon/mastodon/pull/19833), [offbyone](https://github.com/mastodon/mastodon/pull/19946), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20071)) -- Add support for DigitalOcean Spaces in setup wizard ([v-aisac](https://github.com/mastodon/mastodon/pull/20573)) - -### Changed - -- **Change brand color and logotypes** ([Gargron](https://github.com/mastodon/mastodon/pull/18592), [Gargron](https://github.com/mastodon/mastodon/pull/18639), [Gargron](https://github.com/mastodon/mastodon/pull/18691), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18634), [Gargron](https://github.com/mastodon/mastodon/pull/19254), [mayaeh](https://github.com/mastodon/mastodon/pull/18710)) -- **Change post editing to be enabled in web UI** ([Gargron](https://github.com/mastodon/mastodon/pull/19103)) -- **Change web UI to work for logged-out users** ([Gargron](https://github.com/mastodon/mastodon/pull/18961), [Gargron](https://github.com/mastodon/mastodon/pull/19250), [Gargron](https://github.com/mastodon/mastodon/pull/19294), [Gargron](https://github.com/mastodon/mastodon/pull/19306), [Gargron](https://github.com/mastodon/mastodon/pull/19315), [ykzts](https://github.com/mastodon/mastodon/pull/19322), [Gargron](https://github.com/mastodon/mastodon/pull/19412), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19437), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19415), [Gargron](https://github.com/mastodon/mastodon/pull/19348), [Gargron](https://github.com/mastodon/mastodon/pull/19295), [Gargron](https://github.com/mastodon/mastodon/pull/19422), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19414), [Gargron](https://github.com/mastodon/mastodon/pull/19319), [Gargron](https://github.com/mastodon/mastodon/pull/19345), [Gargron](https://github.com/mastodon/mastodon/pull/19310), [Gargron](https://github.com/mastodon/mastodon/pull/19301), [Gargron](https://github.com/mastodon/mastodon/pull/19423), [ykzts](https://github.com/mastodon/mastodon/pull/19471), [ykzts](https://github.com/mastodon/mastodon/pull/19333), [ykzts](https://github.com/mastodon/mastodon/pull/19337), [ykzts](https://github.com/mastodon/mastodon/pull/19272), [ykzts](https://github.com/mastodon/mastodon/pull/19468), [Gargron](https://github.com/mastodon/mastodon/pull/19466), [Gargron](https://github.com/mastodon/mastodon/pull/19457), [Gargron](https://github.com/mastodon/mastodon/pull/19426), [Gargron](https://github.com/mastodon/mastodon/pull/19427), [Gargron](https://github.com/mastodon/mastodon/pull/19421), [Gargron](https://github.com/mastodon/mastodon/pull/19417), [Gargron](https://github.com/mastodon/mastodon/pull/19413), [Gargron](https://github.com/mastodon/mastodon/pull/19397), [Gargron](https://github.com/mastodon/mastodon/pull/19387), [Gargron](https://github.com/mastodon/mastodon/pull/19396), [Gargron](https://github.com/mastodon/mastodon/pull/19385), [ykzts](https://github.com/mastodon/mastodon/pull/19334), [ykzts](https://github.com/mastodon/mastodon/pull/19329), [Gargron](https://github.com/mastodon/mastodon/pull/19324), [Gargron](https://github.com/mastodon/mastodon/pull/19318), [Gargron](https://github.com/mastodon/mastodon/pull/19316), [Gargron](https://github.com/mastodon/mastodon/pull/19263), [trwnh](https://github.com/mastodon/mastodon/pull/19305), [ykzts](https://github.com/mastodon/mastodon/pull/19273), [Gargron](https://github.com/mastodon/mastodon/pull/19801), [Gargron](https://github.com/mastodon/mastodon/pull/19790), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19773), [Gargron](https://github.com/mastodon/mastodon/pull/19798), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19724), [Gargron](https://github.com/mastodon/mastodon/pull/19709), [Gargron](https://github.com/mastodon/mastodon/pull/19514), [Gargron](https://github.com/mastodon/mastodon/pull/19562), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19981), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19978), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20148), [Gargron](https://github.com/mastodon/mastodon/pull/20302), [cutls](https://github.com/mastodon/mastodon/pull/20400)) - - The web app can now be accessed without being logged in - - No more `/web` prefix on web app paths - - Profiles, posts, and other public pages now use the same interface for logged in and logged out users - - The web app displays a server information banner - - Pop-up windows for remote interaction have been replaced with a modal window - - No need to type in your username for remote interaction, copy-paste-to-search method explained - - Various hints throughout the app explain what the different timelines are - - New about page design - - New privacy policy page design shows when the policy was last updated - - All sections of the web app now have appropriate window titles - - The layout of the interface has been streamlined between different screen sizes - - Posts now use more horizontal space -- Change label of publish button to be "Publish" again in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/18583)) -- Change language to be carried over on reply in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18557)) -- Change "Unfollow" to "Cancel follow request" when request still pending in web UI ([prplecake](https://github.com/mastodon/mastodon/pull/19363)) -- **Change post filtering system** ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18058), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19050), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18894), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19051), [noellabo](https://github.com/mastodon/mastodon/pull/18923), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18956), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18744), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/19878), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/20567)) - - Filtered keywords and phrases can now be grouped into named categories - - Filtered posts show which exact filter was hit - - Individual posts can be added to a filter - - You can peek inside filtered posts anyway -- Change path of privacy policy page from `/terms` to `/privacy-policy` ([Gargron](https://github.com/mastodon/mastodon/pull/19249)) -- Change how hashtags are normalized ([Gargron](https://github.com/mastodon/mastodon/pull/18795), [Gargron](https://github.com/mastodon/mastodon/pull/18863), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18854)) -- Change settings area to be separated into categories in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/19407), [Gargron](https://github.com/mastodon/mastodon/pull/19533)) -- Change "No accounts selected" errors to use the appropriate noun in admin UI ([prplecake](https://github.com/mastodon/mastodon/pull/19356)) -- Change e-mail domain blocks to match subdomains of blocked domains ([Gargron](https://github.com/mastodon/mastodon/pull/18979)) -- Change custom emoji file size limit from 50 KB to 256 KB ([Gargron](https://github.com/mastodon/mastodon/pull/18788)) -- Change "Allow trends without prior review" setting to also work for trending posts ([Gargron](https://github.com/mastodon/mastodon/pull/17977)) -- Change admin announcements form to use single inputs for date and time in admin UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18321)) -- Change search API to be accessible without being logged in ([Gargron](https://github.com/mastodon/mastodon/pull/18963), [Gargron](https://github.com/mastodon/mastodon/pull/19326)) -- Change following and followers API to be accessible without being logged in ([Gargron](https://github.com/mastodon/mastodon/pull/18964)) -- Change `AUTHORIZED_FETCH` to not block unauthenticated REST API access ([Gargron](https://github.com/mastodon/mastodon/pull/19803)) -- Change Helm configuration ([deepy](https://github.com/mastodon/mastodon/pull/18997), [jgsmith](https://github.com/mastodon/mastodon/pull/18415), [deepy](https://github.com/mastodon/mastodon/pull/18941)) -- Change mentions of blocked users to not be processed ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19725)) -- Change max. thumbnail dimensions to 640x360px (360p) ([Gargron](https://github.com/mastodon/mastodon/pull/19619)) -- Change post-processing to be deferred only for large media types ([Gargron](https://github.com/mastodon/mastodon/pull/19617)) -- Change link verification to only work for https links without unicode ([Gargron](https://github.com/mastodon/mastodon/pull/20304), [Gargron](https://github.com/mastodon/mastodon/pull/20295)) -- Change account deletion requests to spread out over time ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20222)) -- Change larger reblogs/favourites numbers to be shortened in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/20303)) -- Change incoming activity processing to happen in `ingress` queue ([Gargron](https://github.com/mastodon/mastodon/pull/20264)) -- Change notifications to not link show preview cards in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20335)) -- Change amount of replies returned for logged out users in REST API ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20355)) -- Change in-app links to keep you in-app in web UI ([trwnh](https://github.com/mastodon/mastodon/pull/20540), [Gargron](https://github.com/mastodon/mastodon/pull/20628)) -- Change table header to be sticky in admin UI ([sk22](https://github.com/mastodon/mastodon/pull/20442)) - -### Removed - -- Remove setting that disables account deletes ([Gargron](https://github.com/mastodon/mastodon/pull/17683)) -- Remove digest e-mails ([Gargron](https://github.com/mastodon/mastodon/pull/17985)) -- Remove unnecessary sections from welcome e-mail ([Gargron](https://github.com/mastodon/mastodon/pull/19299)) -- Remove item titles from RSS feeds ([Gargron](https://github.com/mastodon/mastodon/pull/18640)) -- Remove volume number from hashtags in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/19253)) -- Remove Nanobox configuration ([tonyjiang](https://github.com/mastodon/mastodon/pull/17881)) - -### Fixed - -- Fix rules with same priority being sorted non-deterministically ([Gargron](https://github.com/mastodon/mastodon/pull/20623)) -- Fix error when invalid domain name is submitted ([Gargron](https://github.com/mastodon/mastodon/pull/19474)) -- Fix icons having an image role ([Gargron](https://github.com/mastodon/mastodon/pull/20600)) -- Fix connections to IPv6-only servers ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20108)) -- Fix unnecessary service worker registration and preloading when logged out in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20341)) -- Fix unnecessary and slow regex construction ([raggi](https://github.com/mastodon/mastodon/pull/20215)) -- Fix `mailers` queue not being used for mailers ([Gargron](https://github.com/mastodon/mastodon/pull/20274)) -- Fix error in webfinger redirect handling ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20260)) -- Fix report category not being set to `violation` if rule IDs are provided ([trwnh](https://github.com/mastodon/mastodon/pull/20137)) -- Fix nodeinfo metadata attribute being an array instead of an object ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20114)) -- Fix account endorsements not being idempotent ([trwnh](https://github.com/mastodon/mastodon/pull/20118)) -- Fix status and rule IDs not being strings in admin reports REST API ([trwnh](https://github.com/mastodon/mastodon/pull/20122)) -- Fix error on invalid `replies_policy` in REST API ([trwnh](https://github.com/mastodon/mastodon/pull/20126)) -- Fix redrafting a currently-editing post not leaving edit mode in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20023)) -- Fix performance by avoiding method cache busts ([raggi](https://github.com/mastodon/mastodon/pull/19957)) -- Fix opening the language picker scrolling the single-column view to the top in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19983)) -- Fix content warning button missing `aria-expanded` attribute in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19975)) -- Fix redundant `aria-pressed` attributes in web UI ([Brawaru](https://github.com/mastodon/mastodon/pull/19912)) -- Fix crash when external auth provider has no display name set ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19962)) -- Fix followers count not being updated when migrating follows ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19998)) -- Fix double button to clear emoji search input in web UI ([sunny](https://github.com/mastodon/mastodon/pull/19888)) -- Fix missing null check on applications on strike disputes ([kescherCode](https://github.com/mastodon/mastodon/pull/19851)) -- Fix featured tags not saving preferred casing ([Gargron](https://github.com/mastodon/mastodon/pull/19732)) -- Fix language not being saved when editing status ([Gargron](https://github.com/mastodon/mastodon/pull/19543)) -- Fix not being able to input featured tag with hash symbol ([Gargron](https://github.com/mastodon/mastodon/pull/19535)) -- Fix user clean-up scheduler crash when an unconfirmed account has a moderation note ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19629)) -- Fix being unable to withdraw follow request when confirmation modal is disabled in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19687)) -- Fix inaccurate admin log entry for re-sending confirmation e-mails ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19674)) -- Fix edits not being immediately reflected ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19673)) -- Fix bookmark import stopping at the first failure ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19669)) -- Fix account action type validation ([Gargron](https://github.com/mastodon/mastodon/pull/19476)) -- Fix upload progress not communicating processing phase in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/19530)) -- Fix wrong host being used for custom.css when asset host configured ([Gargron](https://github.com/mastodon/mastodon/pull/19521)) -- Fix account migration form ever using outdated account data ([Gargron](https://github.com/mastodon/mastodon/pull/18429), [nightpool](https://github.com/mastodon/mastodon/pull/19883)) -- Fix error when uploading malformed CSV import ([Gargron](https://github.com/mastodon/mastodon/pull/19509)) -- Fix avatars not using image tags in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/19488)) -- Fix handling of duplicate and out-of-order notifications in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19693)) -- Fix reblogs being discarded after the reblogged status ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19731)) -- Fix indexing scheduler trying to index when Elasticsearch is disabled ([Gargron](https://github.com/mastodon/mastodon/pull/19805)) -- Fix n+1 queries when rendering initial state JSON ([Gargron](https://github.com/mastodon/mastodon/pull/19795)) -- Fix n+1 query during status removal ([Gargron](https://github.com/mastodon/mastodon/pull/19753)) -- Fix OCR not working due to Content Security Policy in web UI ([prplecake](https://github.com/mastodon/mastodon/pull/18817)) -- Fix `nofollow` rel being removed in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/19455)) -- Fix language dropdown causing zoom on mobile devices in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/19428)) -- Fix button to dismiss suggestions not showing up in search results in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19325)) -- Fix language dropdown sometimes not appearing in web UI ([Gargron](https://github.com/mastodon/mastodon/pull/19246)) -- Fix quickly switching notification filters resulting in empty or incorrect list in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19052), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/18960)) -- Fix media modal link button in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18877)) -- Fix error upon successful account migration ([Gargron](https://github.com/mastodon/mastodon/pull/19386)) -- Fix negatives values in search index causing queries to fail ([Gargron](https://github.com/mastodon/mastodon/pull/19464), [Gargron](https://github.com/mastodon/mastodon/pull/19481)) -- Fix error when searching for invalid URL ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18580)) -- Fix IP blocks not having a unique index ([Gargron](https://github.com/mastodon/mastodon/pull/19456)) -- Fix remote account in contact account setting not being used ([Gargron](https://github.com/mastodon/mastodon/pull/19351)) -- Fix swallowing mentions of unconfirmed/unapproved users ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19191)) -- Fix incorrect and slow cache invalidation when blocking domain and removing media attachments ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19062)) -- Fix HTTPs redirect behaviour when running as I2P service ([gi-yt](https://github.com/mastodon/mastodon/pull/18929)) -- Fix deleted pinned posts potentially counting towards the pinned posts limit ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19005)) -- Fix compatibility with OpenSSL 3.0 ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18449)) -- Fix error when a remote report includes a private post the server has no access to ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18760)) -- Fix suspicious sign-in mails never being sent ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18599)) -- Fix fallback locale when somehow user's locale is an empty string ([tribela](https://github.com/mastodon/mastodon/pull/18543)) -- Fix avatar/header not being deleted locally when deleted on remote account ([tribela](https://github.com/mastodon/mastodon/pull/18973)) -- Fix missing `,` in Blurhash validation ([noellabo](https://github.com/mastodon/mastodon/pull/18660)) -- Fix order by most recent not working for relationships page in admin UI ([tribela](https://github.com/mastodon/mastodon/pull/18996)) -- Fix uncaught error when invalid date is supplied to API ([Gargron](https://github.com/mastodon/mastodon/pull/19480)) -- Fix REST API sometimes returning HTML on error ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/19135)) -- Fix ambiguous column names in `tootctl media refresh` ([tribela](https://github.com/mastodon/mastodon/pull/19206)) -- Fix ambiguous column names in `tootctl search deploy` ([mashirozx](https://github.com/mastodon/mastodon/pull/18993)) -- Fix `CDN_HOST` not being used in some asset URLs ([tribela](https://github.com/mastodon/mastodon/pull/18662)) -- Fix `CAS_DISPLAY_NAME`, `SAML_DISPLAY_NAME` and `OIDC_DISPLAY_NAME` being ignored ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/18568)) -- Fix various typos in comments throughout the codebase ([luzpaz](https://github.com/mastodon/mastodon/pull/18604)) -- Fix CSV import error when rows include unicode characters ([HamptonMakes](https://github.com/mastodon/mastodon/pull/20592)) - -### Security - -- Fix being able to spoof link verification ([Gargron](https://github.com/mastodon/mastodon/pull/20217)) -- Fix emoji substitution not applying only to text nodes in backend code ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20641)) -- Fix emoji substitution not applying only to text nodes in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/20640)) -- Fix rate limiting for paths with formats ([Gargron](https://github.com/mastodon/mastodon/pull/20675)) -- Fix out-of-bound reads in blurhash transcoder ([delroth](https://github.com/mastodon/mastodon/pull/20388)) - -_For previous changes, review the [stable-3.5 branch](https://github.com/mastodon/mastodon/blob/stable-3.5/CHANGELOG.md)_ +_For previous changes, review the [stable-4.2 branch](https://github.com/mastodon/mastodon/blob/stable-4.2/CHANGELOG.md)_ diff --git a/Dockerfile b/Dockerfile index c06bc84a33..6a191b7e85 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ ARG BASE_REGISTRY="docker.io" # Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.4.x"] # renovate: datasource=docker depName=docker.io/ruby -ARG RUBY_VERSION="3.4.8" +ARG RUBY_VERSION="3.4.9" # # Node.js version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="22"] # renovate: datasource=node-version depName=node ARG NODE_MAJOR_VERSION="24" diff --git a/Gemfile b/Gemfile index 1ff1ebf7de..5cdc2aa0e5 100644 --- a/Gemfile +++ b/Gemfile @@ -102,10 +102,10 @@ gem 'rdf-normalize', '~> 0.5' gem 'prometheus_exporter', '~> 2.2', require: false -gem 'opentelemetry-api', '~> 1.7.0' +gem 'opentelemetry-api', '~> 1.8.0' group :opentelemetry do - gem 'opentelemetry-exporter-otlp', '~> 0.31.0', require: false + gem 'opentelemetry-exporter-otlp', '~> 0.32.0', require: false gem 'opentelemetry-instrumentation-active_job', '~> 0.10.0', require: false gem 'opentelemetry-instrumentation-active_model_serializers', '~> 0.24.0', require: false gem 'opentelemetry-instrumentation-concurrent_ruby', '~> 0.24.0', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 5ab80abb8c..1c1f0aac1b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -510,10 +510,11 @@ GEM openssl (4.0.1) openssl-signature_algorithm (1.3.0) openssl (> 2.0) - opentelemetry-api (1.7.0) + opentelemetry-api (1.8.0) + logger opentelemetry-common (0.23.0) opentelemetry-api (~> 1.0) - opentelemetry-exporter-otlp (0.31.1) + opentelemetry-exporter-otlp (0.32.0) google-protobuf (>= 3.18) googleapis-common-protos-types (~> 1.3) opentelemetry-api (~> 1.1) @@ -1020,8 +1021,8 @@ DEPENDENCIES omniauth-rails_csrf_protection (~> 2.0) omniauth-saml (~> 2.0) omniauth_openid_connect (~> 0.8.0) - opentelemetry-api (~> 1.7.0) - opentelemetry-exporter-otlp (~> 0.31.0) + opentelemetry-api (~> 1.8.0) + opentelemetry-exporter-otlp (~> 0.32.0) opentelemetry-instrumentation-active_job (~> 0.10.0) opentelemetry-instrumentation-active_model_serializers (~> 0.24.0) opentelemetry-instrumentation-concurrent_ruby (~> 0.24.0) @@ -1097,7 +1098,7 @@ DEPENDENCIES xorcist (~> 1.1) RUBY VERSION - ruby 3.4.8 + ruby 3.4.9 BUNDLED WITH 4.0.8 diff --git a/app/javascript/flavours/glitch/components/dropdown_menu.tsx b/app/javascript/flavours/glitch/components/dropdown_menu.tsx index b5e1558f32..6f8525257f 100644 --- a/app/javascript/flavours/glitch/components/dropdown_menu.tsx +++ b/app/javascript/flavours/glitch/components/dropdown_menu.tsx @@ -296,6 +296,7 @@ interface DropdownProps { children?: React.ReactElement; icon?: string; iconComponent?: IconProp; + iconClassName?: string; items?: Item[]; loading?: boolean; title?: string; @@ -326,6 +327,7 @@ export const Dropdown = ({ children, icon, iconComponent, + iconClassName, items, loading, title = 'Menu', @@ -499,6 +501,7 @@ export const Dropdown = ({ iconComponent={iconComponent} title={title} active={open} + className={iconClassName} {...buttonProps} /> ); diff --git a/app/javascript/flavours/glitch/features/account_edit/components/image_edit.tsx b/app/javascript/flavours/glitch/features/account_edit/components/image_edit.tsx new file mode 100644 index 0000000000..fbb00909b3 --- /dev/null +++ b/app/javascript/flavours/glitch/features/account_edit/components/image_edit.tsx @@ -0,0 +1,154 @@ +import { useCallback, useMemo } from 'react'; +import type { FC } from 'react'; + +import { defineMessages, useIntl } from 'react-intl'; + +import classNames from 'classnames'; + +import type { OffsetValue } from 'react-overlays/esm/usePopper'; + +import type { ModalType } from '@/flavours/glitch/actions/modal'; +import { openModal } from '@/flavours/glitch/actions/modal'; +import { Dropdown } from '@/flavours/glitch/components/dropdown_menu'; +import { IconButton } from '@/flavours/glitch/components/icon_button'; +import type { MenuItem } from '@/flavours/glitch/models/dropdown_menu'; +import { + createAppSelector, + useAppDispatch, + useAppSelector, +} from '@/flavours/glitch/store'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import DeleteIcon from '@/material-icons/400-24px/delete.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; +import CameraIcon from '@/material-icons/400-24px/photo_camera.svg?react'; +import ReplaceImageIcon from '@/material-icons/400-24px/replace_image.svg?react'; + +import classes from '../styles.module.scss'; + +const messages = defineMessages({ + add: { + id: 'account_edit.image_edit.add_button', + defaultMessage: 'Add image', + }, + replace: { + id: 'account_edit.image_edit.replace_button', + defaultMessage: 'Replace image', + }, + altAdd: { + id: 'account_edit.image_edit.alt_add_button', + description: 'Alt is short for "alternative".', + defaultMessage: 'Add alt text', + }, + altEdit: { + id: 'account_edit.image_edit.alt_edit_button', + description: 'Alt is short for "alternative".', + defaultMessage: 'Edit alt text', + }, + remove: { + id: 'account_edit.image_edit.remove_button', + defaultMessage: 'Remove image', + }, +}); + +export type ImageLocation = 'avatar' | 'header'; + +const selectImageInfo = createAppSelector( + [ + (state) => state.profileEdit.profile, + (_, location: ImageLocation) => location, + ], + (profile, location) => { + if (!profile) { + return { + hasImage: false, + hasAlt: false, + }; + } + + return { + hasImage: !!profile[`${location}Static`], + hasAlt: !!profile[`${location}Description`], + }; + }, +); + +export const AccountImageEdit: FC<{ + className?: string; + location: ImageLocation; +}> = ({ className, location }) => { + const intl = useIntl(); + const { hasAlt, hasImage } = useAppSelector((state) => + selectImageInfo(state, location), + ); + const dispatch = useAppDispatch(); + + const handleModal = useCallback( + (type: ModalType) => { + dispatch(openModal({ modalType: type, modalProps: { location } })); + }, + [dispatch, location], + ); + + const items = useMemo( + () => + [ + { + text: intl.formatMessage(messages.replace), + action: () => { + handleModal('ACCOUNT_EDIT_IMAGE_UPLOAD'); + }, + icon: ReplaceImageIcon, + }, + { + text: intl.formatMessage(hasAlt ? messages.altEdit : messages.altAdd), + action: () => { + handleModal('ACCOUNT_EDIT_IMAGE_ALT'); + }, + icon: hasAlt ? EditIcon : AddIcon, + }, + null, + { + text: intl.formatMessage(messages.remove), + action: () => { + handleModal('ACCOUNT_EDIT_IMAGE_DELETE'); + }, + icon: DeleteIcon, + dangerous: true, + }, + ] satisfies MenuItem[], + [handleModal, hasAlt, intl], + ); + + const handleAddImage = useCallback(() => { + handleModal('ACCOUNT_EDIT_IMAGE_UPLOAD'); + }, [handleModal]); + + const iconClassName = classNames(classes.imageButton, className); + + if (!hasImage) { + return ( + + ); + } + + return ( + + ); +}; + +const popperOffset = [0, 6] as OffsetValue; diff --git a/app/javascript/flavours/glitch/features/account_edit/index.tsx b/app/javascript/flavours/glitch/features/account_edit/index.tsx index feb1313c7c..b15f299c55 100644 --- a/app/javascript/flavours/glitch/features/account_edit/index.tsx +++ b/app/javascript/flavours/glitch/features/account_edit/index.tsx @@ -23,6 +23,7 @@ import { AccountEditColumn, AccountEditEmptyColumn } from './components/column'; import { EditButton } from './components/edit_button'; import { AccountField } from './components/field'; import { AccountFieldActions } from './components/field_actions'; +import { AccountImageEdit } from './components/image_edit'; import { AccountEditSection } from './components/section'; import classes from './styles.module.scss'; @@ -164,8 +165,12 @@ export const AccountEdit: FC = () => {
{headerSrc && } + +
+
+ +
-
diff --git a/app/javascript/flavours/glitch/features/account_edit/modals/image_alt.tsx b/app/javascript/flavours/glitch/features/account_edit/modals/image_alt.tsx new file mode 100644 index 0000000000..92360239de --- /dev/null +++ b/app/javascript/flavours/glitch/features/account_edit/modals/image_alt.tsx @@ -0,0 +1,11 @@ +import type { FC } from 'react'; + +import { DialogModal } from '../../ui/components/dialog_modal'; +import type { DialogModalProps } from '../../ui/components/dialog_modal'; +import type { ImageLocation } from '../components/image_edit'; + +export const ImageAltModal: FC< + DialogModalProps & { location: ImageLocation } +> = ({ onClose }) => { + return ; +}; diff --git a/app/javascript/flavours/glitch/features/account_edit/modals/image_delete.tsx b/app/javascript/flavours/glitch/features/account_edit/modals/image_delete.tsx new file mode 100644 index 0000000000..559ff67439 --- /dev/null +++ b/app/javascript/flavours/glitch/features/account_edit/modals/image_delete.tsx @@ -0,0 +1,11 @@ +import type { FC } from 'react'; + +import { DialogModal } from '../../ui/components/dialog_modal'; +import type { DialogModalProps } from '../../ui/components/dialog_modal'; +import type { ImageLocation } from '../components/image_edit'; + +export const ImageDeleteModal: FC< + DialogModalProps & { location: ImageLocation } +> = ({ onClose }) => { + return ; +}; diff --git a/app/javascript/flavours/glitch/features/account_edit/modals/image_upload.tsx b/app/javascript/flavours/glitch/features/account_edit/modals/image_upload.tsx new file mode 100644 index 0000000000..6eb7b73e6c --- /dev/null +++ b/app/javascript/flavours/glitch/features/account_edit/modals/image_upload.tsx @@ -0,0 +1,11 @@ +import type { FC } from 'react'; + +import { DialogModal } from '../../ui/components/dialog_modal'; +import type { DialogModalProps } from '../../ui/components/dialog_modal'; +import type { ImageLocation } from '../components/image_edit'; + +export const ImageUploadModal: FC< + DialogModalProps & { location: ImageLocation } +> = ({ onClose }) => { + return ; +}; diff --git a/app/javascript/flavours/glitch/features/account_edit/modals/index.ts b/app/javascript/flavours/glitch/features/account_edit/modals/index.ts index 861e81f597..9b64300e46 100644 --- a/app/javascript/flavours/glitch/features/account_edit/modals/index.ts +++ b/app/javascript/flavours/glitch/features/account_edit/modals/index.ts @@ -1,6 +1,9 @@ export * from './bio_modal'; export * from './fields_modals'; export * from './fields_reorder_modal'; +export * from './image_alt'; +export * from './image_delete'; +export * from './image_upload'; export * from './name_modal'; export * from './profile_display_modal'; export * from './verified_modal'; diff --git a/app/javascript/flavours/glitch/features/account_edit/styles.module.scss b/app/javascript/flavours/glitch/features/account_edit/styles.module.scss index bafe1bc5b1..ea4aeb6920 100644 --- a/app/javascript/flavours/glitch/features/account_edit/styles.module.scss +++ b/app/javascript/flavours/glitch/features/account_edit/styles.module.scss @@ -5,6 +5,7 @@ background: var(--color-bg-secondary); border-bottom: 1px solid var(--color-border-primary); overflow: hidden; + position: relative; @container (width >= 500px) { height: 160px; @@ -16,12 +17,27 @@ width: 100%; height: 100%; } + + .imageButton { + top: 16px; + right: 24px; + } } .avatar { margin-top: -64px; margin-left: 18px; - border: 1px solid var(--color-border-primary); + position: relative; + width: 82px; + + > :global(.account__avatar) { + border: 1px solid var(--color-border-primary); + } + + .imageButton { + bottom: -8px; + right: -8px; + } } .field { @@ -153,6 +169,41 @@ font-size: 15px; } +// Image edit component + +.imageButton { + --default-bg-color: var(--color-bg-primary); + + &, + &:global(.active) { + // Overrides the transparent background added by default with .active + --hover-bg-color: var(--color-bg-brand-softer-solid); + } + + position: absolute; + width: 28px; + height: 28px; + border: 1px solid var(--color-border-primary); + border-radius: 9999px; + box-sizing: border-box; + padding: 4px; + transition: + color 0.2s ease-in-out, + background-color 0.2s ease-in-out; + + svg { + width: 18px; + height: 18px; + } +} + +.imageMenu { + svg { + width: 20px; + height: 20px; + } +} + // Item list component .itemList { diff --git a/app/javascript/flavours/glitch/features/account_timeline/components/redesign.module.scss b/app/javascript/flavours/glitch/features/account_timeline/components/redesign.module.scss index 51a7962c76..0d9036265a 100644 --- a/app/javascript/flavours/glitch/features/account_timeline/components/redesign.module.scss +++ b/app/javascript/flavours/glitch/features/account_timeline/components/redesign.module.scss @@ -293,11 +293,7 @@ svg.badgeIcon { .fieldOverflowButton { --default-bg-color: var(--color-bg-secondary-solid); - --hover-bg-color: color-mix( - in oklab, - var(--color-bg-brand-base), - var(--default-bg-color) var(--overlay-strength-brand) - ); + --hover-bg-color: var(--color-bg-brand-softer-solid); position: absolute; right: 8px; diff --git a/app/javascript/flavours/glitch/features/onboarding/follows.tsx b/app/javascript/flavours/glitch/features/onboarding/follows.tsx index c050c1c33e..ffd1a8dcdc 100644 --- a/app/javascript/flavours/glitch/features/onboarding/follows.tsx +++ b/app/javascript/flavours/glitch/features/onboarding/follows.tsx @@ -121,7 +121,6 @@ export const Follows: React.FC<{ icon='person' iconComponent={PersonIcon} multiColumn={multiColumn} - showBackButton /> 0 &&
}
- +
diff --git a/app/javascript/flavours/glitch/features/onboarding/profile.tsx b/app/javascript/flavours/glitch/features/onboarding/profile.tsx index fa93e6ba6e..65475d98c7 100644 --- a/app/javascript/flavours/glitch/features/onboarding/profile.tsx +++ b/app/javascript/flavours/glitch/features/onboarding/profile.tsx @@ -136,7 +136,7 @@ export const Profile: React.FC<{ }), ) .then(() => { - history.push('/start/follows'); + history.push('/home'); dispatch(closeOnboarding()); return ''; }) @@ -163,6 +163,7 @@ export const Profile: React.FC<{ icon='person' iconComponent={PersonIcon} multiColumn={multiColumn} + showBackButton />
@@ -300,8 +301,8 @@ export const Profile: React.FC<{ ) : ( )} diff --git a/app/javascript/flavours/glitch/features/ui/components/modal_root.jsx b/app/javascript/flavours/glitch/features/ui/components/modal_root.jsx index 859cc46ea5..5e52711273 100644 --- a/app/javascript/flavours/glitch/features/ui/components/modal_root.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/modal_root.jsx @@ -110,6 +110,9 @@ export const MODAL_COMPONENTS = { 'ACCOUNT_EDIT_FIELD_EDIT': accountEditModal('EditFieldModal'), 'ACCOUNT_EDIT_FIELD_DELETE': accountEditModal('DeleteFieldModal'), 'ACCOUNT_EDIT_FIELDS_REORDER': accountEditModal('ReorderFieldsModal'), + 'ACCOUNT_EDIT_IMAGE_ALT': accountEditModal('ImageAltModal'), + 'ACCOUNT_EDIT_IMAGE_DELETE': accountEditModal('ImageDeleteModal'), + 'ACCOUNT_EDIT_IMAGE_UPLOAD': accountEditModal('ImageUploadModal'), }; /** @arg {keyof import('@/flavours/glitch/features/account_edit/modals')} type */ diff --git a/app/javascript/flavours/glitch/features/ui/index.jsx b/app/javascript/flavours/glitch/features/ui/index.jsx index 1fa24881b1..de336ba7f2 100644 --- a/app/javascript/flavours/glitch/features/ui/index.jsx +++ b/app/javascript/flavours/glitch/features/ui/index.jsx @@ -238,8 +238,8 @@ class SwitchingColumnsArea extends PureComponent { - - + + diff --git a/app/javascript/flavours/glitch/styles/mastodon/components.scss b/app/javascript/flavours/glitch/styles/mastodon/components.scss index 782dbda3ea..a0fb345833 100644 --- a/app/javascript/flavours/glitch/styles/mastodon/components.scss +++ b/app/javascript/flavours/glitch/styles/mastodon/components.scss @@ -2075,7 +2075,9 @@ body > [data-popper-placement] { .account { padding: 10px; // glitch: reduced padding - &:not(&--without-border) { + // Using :where keeps specificity low, allowing for existing + // .account overrides to still apply + &:where(:not(&--without-border)) { border-bottom: 1px solid var(--color-border-primary); } @@ -11813,6 +11815,9 @@ noscript { .column-footer { padding: 16px; + position: sticky; + bottom: 0; + background: var(--color-bg-primary); } .lists-scrollable { diff --git a/app/javascript/flavours/glitch/styles/mastodon/theme/_dark.scss b/app/javascript/flavours/glitch/styles/mastodon/theme/_dark.scss index 9af3385d45..a22c7cc8f4 100644 --- a/app/javascript/flavours/glitch/styles/mastodon/theme/_dark.scss +++ b/app/javascript/flavours/glitch/styles/mastodon/theme/_dark.scss @@ -81,6 +81,11 @@ var(--color-bg-brand-base), var(--overlay-strength-brand) )}; + --color-bg-brand-softer-solid: color-mix( + in srgb, + var(--color-bg-primary), + var(--color-bg-brand-base) var(--overlay-strength-brand) + ); // Error --overlay-strength-error: 10%; diff --git a/app/javascript/flavours/glitch/styles/mastodon/theme/_light.scss b/app/javascript/flavours/glitch/styles/mastodon/theme/_light.scss index 64390017b3..47d32320fa 100644 --- a/app/javascript/flavours/glitch/styles/mastodon/theme/_light.scss +++ b/app/javascript/flavours/glitch/styles/mastodon/theme/_light.scss @@ -78,6 +78,11 @@ #0012d8, var(--overlay-strength-brand) )}; + --color-bg-brand-softer-solid: color-mix( + in srgb, + var(--color-bg-primary), + var(--color-bg-brand-base) var(--overlay-strength-brand) + ); // Error --overlay-strength-error: 5%; diff --git a/app/javascript/mastodon/components/dropdown_menu.tsx b/app/javascript/mastodon/components/dropdown_menu.tsx index 24d75080e9..c3b683392d 100644 --- a/app/javascript/mastodon/components/dropdown_menu.tsx +++ b/app/javascript/mastodon/components/dropdown_menu.tsx @@ -296,6 +296,7 @@ interface DropdownProps { children?: React.ReactElement; icon?: string; iconComponent?: IconProp; + iconClassName?: string; items?: Item[]; loading?: boolean; title?: string; @@ -326,6 +327,7 @@ export const Dropdown = ({ children, icon, iconComponent, + iconClassName, items, loading, title = 'Menu', @@ -499,6 +501,7 @@ export const Dropdown = ({ iconComponent={iconComponent} title={title} active={open} + className={iconClassName} {...buttonProps} /> ); diff --git a/app/javascript/mastodon/features/account_edit/components/image_edit.tsx b/app/javascript/mastodon/features/account_edit/components/image_edit.tsx new file mode 100644 index 0000000000..b99b424aec --- /dev/null +++ b/app/javascript/mastodon/features/account_edit/components/image_edit.tsx @@ -0,0 +1,154 @@ +import { useCallback, useMemo } from 'react'; +import type { FC } from 'react'; + +import { defineMessages, useIntl } from 'react-intl'; + +import classNames from 'classnames'; + +import type { OffsetValue } from 'react-overlays/esm/usePopper'; + +import type { ModalType } from '@/mastodon/actions/modal'; +import { openModal } from '@/mastodon/actions/modal'; +import { Dropdown } from '@/mastodon/components/dropdown_menu'; +import { IconButton } from '@/mastodon/components/icon_button'; +import type { MenuItem } from '@/mastodon/models/dropdown_menu'; +import { + createAppSelector, + useAppDispatch, + useAppSelector, +} from '@/mastodon/store'; +import AddIcon from '@/material-icons/400-24px/add.svg?react'; +import DeleteIcon from '@/material-icons/400-24px/delete.svg?react'; +import EditIcon from '@/material-icons/400-24px/edit.svg?react'; +import CameraIcon from '@/material-icons/400-24px/photo_camera.svg?react'; +import ReplaceImageIcon from '@/material-icons/400-24px/replace_image.svg?react'; + +import classes from '../styles.module.scss'; + +const messages = defineMessages({ + add: { + id: 'account_edit.image_edit.add_button', + defaultMessage: 'Add image', + }, + replace: { + id: 'account_edit.image_edit.replace_button', + defaultMessage: 'Replace image', + }, + altAdd: { + id: 'account_edit.image_edit.alt_add_button', + description: 'Alt is short for "alternative".', + defaultMessage: 'Add alt text', + }, + altEdit: { + id: 'account_edit.image_edit.alt_edit_button', + description: 'Alt is short for "alternative".', + defaultMessage: 'Edit alt text', + }, + remove: { + id: 'account_edit.image_edit.remove_button', + defaultMessage: 'Remove image', + }, +}); + +export type ImageLocation = 'avatar' | 'header'; + +const selectImageInfo = createAppSelector( + [ + (state) => state.profileEdit.profile, + (_, location: ImageLocation) => location, + ], + (profile, location) => { + if (!profile) { + return { + hasImage: false, + hasAlt: false, + }; + } + + return { + hasImage: !!profile[`${location}Static`], + hasAlt: !!profile[`${location}Description`], + }; + }, +); + +export const AccountImageEdit: FC<{ + className?: string; + location: ImageLocation; +}> = ({ className, location }) => { + const intl = useIntl(); + const { hasAlt, hasImage } = useAppSelector((state) => + selectImageInfo(state, location), + ); + const dispatch = useAppDispatch(); + + const handleModal = useCallback( + (type: ModalType) => { + dispatch(openModal({ modalType: type, modalProps: { location } })); + }, + [dispatch, location], + ); + + const items = useMemo( + () => + [ + { + text: intl.formatMessage(messages.replace), + action: () => { + handleModal('ACCOUNT_EDIT_IMAGE_UPLOAD'); + }, + icon: ReplaceImageIcon, + }, + { + text: intl.formatMessage(hasAlt ? messages.altEdit : messages.altAdd), + action: () => { + handleModal('ACCOUNT_EDIT_IMAGE_ALT'); + }, + icon: hasAlt ? EditIcon : AddIcon, + }, + null, + { + text: intl.formatMessage(messages.remove), + action: () => { + handleModal('ACCOUNT_EDIT_IMAGE_DELETE'); + }, + icon: DeleteIcon, + dangerous: true, + }, + ] satisfies MenuItem[], + [handleModal, hasAlt, intl], + ); + + const handleAddImage = useCallback(() => { + handleModal('ACCOUNT_EDIT_IMAGE_UPLOAD'); + }, [handleModal]); + + const iconClassName = classNames(classes.imageButton, className); + + if (!hasImage) { + return ( + + ); + } + + return ( + + ); +}; + +const popperOffset = [0, 6] as OffsetValue; diff --git a/app/javascript/mastodon/features/account_edit/index.tsx b/app/javascript/mastodon/features/account_edit/index.tsx index 7dc2397f8b..a621de4c5d 100644 --- a/app/javascript/mastodon/features/account_edit/index.tsx +++ b/app/javascript/mastodon/features/account_edit/index.tsx @@ -23,6 +23,7 @@ import { AccountEditColumn, AccountEditEmptyColumn } from './components/column'; import { EditButton } from './components/edit_button'; import { AccountField } from './components/field'; import { AccountFieldActions } from './components/field_actions'; +import { AccountImageEdit } from './components/image_edit'; import { AccountEditSection } from './components/section'; import classes from './styles.module.scss'; @@ -164,8 +165,12 @@ export const AccountEdit: FC = () => {
{headerSrc && } + +
+
+ +
-
diff --git a/app/javascript/mastodon/features/account_edit/modals/image_alt.tsx b/app/javascript/mastodon/features/account_edit/modals/image_alt.tsx new file mode 100644 index 0000000000..92360239de --- /dev/null +++ b/app/javascript/mastodon/features/account_edit/modals/image_alt.tsx @@ -0,0 +1,11 @@ +import type { FC } from 'react'; + +import { DialogModal } from '../../ui/components/dialog_modal'; +import type { DialogModalProps } from '../../ui/components/dialog_modal'; +import type { ImageLocation } from '../components/image_edit'; + +export const ImageAltModal: FC< + DialogModalProps & { location: ImageLocation } +> = ({ onClose }) => { + return ; +}; diff --git a/app/javascript/mastodon/features/account_edit/modals/image_delete.tsx b/app/javascript/mastodon/features/account_edit/modals/image_delete.tsx new file mode 100644 index 0000000000..559ff67439 --- /dev/null +++ b/app/javascript/mastodon/features/account_edit/modals/image_delete.tsx @@ -0,0 +1,11 @@ +import type { FC } from 'react'; + +import { DialogModal } from '../../ui/components/dialog_modal'; +import type { DialogModalProps } from '../../ui/components/dialog_modal'; +import type { ImageLocation } from '../components/image_edit'; + +export const ImageDeleteModal: FC< + DialogModalProps & { location: ImageLocation } +> = ({ onClose }) => { + return ; +}; diff --git a/app/javascript/mastodon/features/account_edit/modals/image_upload.tsx b/app/javascript/mastodon/features/account_edit/modals/image_upload.tsx new file mode 100644 index 0000000000..6eb7b73e6c --- /dev/null +++ b/app/javascript/mastodon/features/account_edit/modals/image_upload.tsx @@ -0,0 +1,11 @@ +import type { FC } from 'react'; + +import { DialogModal } from '../../ui/components/dialog_modal'; +import type { DialogModalProps } from '../../ui/components/dialog_modal'; +import type { ImageLocation } from '../components/image_edit'; + +export const ImageUploadModal: FC< + DialogModalProps & { location: ImageLocation } +> = ({ onClose }) => { + return ; +}; diff --git a/app/javascript/mastodon/features/account_edit/modals/index.ts b/app/javascript/mastodon/features/account_edit/modals/index.ts index 861e81f597..9b64300e46 100644 --- a/app/javascript/mastodon/features/account_edit/modals/index.ts +++ b/app/javascript/mastodon/features/account_edit/modals/index.ts @@ -1,6 +1,9 @@ export * from './bio_modal'; export * from './fields_modals'; export * from './fields_reorder_modal'; +export * from './image_alt'; +export * from './image_delete'; +export * from './image_upload'; export * from './name_modal'; export * from './profile_display_modal'; export * from './verified_modal'; diff --git a/app/javascript/mastodon/features/account_edit/styles.module.scss b/app/javascript/mastodon/features/account_edit/styles.module.scss index bafe1bc5b1..ea4aeb6920 100644 --- a/app/javascript/mastodon/features/account_edit/styles.module.scss +++ b/app/javascript/mastodon/features/account_edit/styles.module.scss @@ -5,6 +5,7 @@ background: var(--color-bg-secondary); border-bottom: 1px solid var(--color-border-primary); overflow: hidden; + position: relative; @container (width >= 500px) { height: 160px; @@ -16,12 +17,27 @@ width: 100%; height: 100%; } + + .imageButton { + top: 16px; + right: 24px; + } } .avatar { margin-top: -64px; margin-left: 18px; - border: 1px solid var(--color-border-primary); + position: relative; + width: 82px; + + > :global(.account__avatar) { + border: 1px solid var(--color-border-primary); + } + + .imageButton { + bottom: -8px; + right: -8px; + } } .field { @@ -153,6 +169,41 @@ font-size: 15px; } +// Image edit component + +.imageButton { + --default-bg-color: var(--color-bg-primary); + + &, + &:global(.active) { + // Overrides the transparent background added by default with .active + --hover-bg-color: var(--color-bg-brand-softer-solid); + } + + position: absolute; + width: 28px; + height: 28px; + border: 1px solid var(--color-border-primary); + border-radius: 9999px; + box-sizing: border-box; + padding: 4px; + transition: + color 0.2s ease-in-out, + background-color 0.2s ease-in-out; + + svg { + width: 18px; + height: 18px; + } +} + +.imageMenu { + svg { + width: 20px; + height: 20px; + } +} + // Item list component .itemList { diff --git a/app/javascript/mastodon/features/account_timeline/components/redesign.module.scss b/app/javascript/mastodon/features/account_timeline/components/redesign.module.scss index 51a7962c76..0d9036265a 100644 --- a/app/javascript/mastodon/features/account_timeline/components/redesign.module.scss +++ b/app/javascript/mastodon/features/account_timeline/components/redesign.module.scss @@ -293,11 +293,7 @@ svg.badgeIcon { .fieldOverflowButton { --default-bg-color: var(--color-bg-secondary-solid); - --hover-bg-color: color-mix( - in oklab, - var(--color-bg-brand-base), - var(--default-bg-color) var(--overlay-strength-brand) - ); + --hover-bg-color: var(--color-bg-brand-softer-solid); position: absolute; right: 8px; diff --git a/app/javascript/mastodon/features/onboarding/follows.tsx b/app/javascript/mastodon/features/onboarding/follows.tsx index d30834d0b6..d53f1ea50d 100644 --- a/app/javascript/mastodon/features/onboarding/follows.tsx +++ b/app/javascript/mastodon/features/onboarding/follows.tsx @@ -121,7 +121,6 @@ export const Follows: React.FC<{ icon='person' iconComponent={PersonIcon} multiColumn={multiColumn} - showBackButton /> 0 &&
}
- +
diff --git a/app/javascript/mastodon/features/onboarding/profile.tsx b/app/javascript/mastodon/features/onboarding/profile.tsx index 3f1168abe5..0c6b5215b6 100644 --- a/app/javascript/mastodon/features/onboarding/profile.tsx +++ b/app/javascript/mastodon/features/onboarding/profile.tsx @@ -133,7 +133,7 @@ export const Profile: React.FC<{ }), ) .then(() => { - history.push('/start/follows'); + history.push('/home'); dispatch(closeOnboarding()); return ''; }) @@ -160,6 +160,7 @@ export const Profile: React.FC<{ icon='person' iconComponent={PersonIcon} multiColumn={multiColumn} + showBackButton />
@@ -297,8 +298,8 @@ export const Profile: React.FC<{ ) : ( )} diff --git a/app/javascript/mastodon/features/ui/components/modal_root.jsx b/app/javascript/mastodon/features/ui/components/modal_root.jsx index 7bd1aa1872..2f3f5ee7c8 100644 --- a/app/javascript/mastodon/features/ui/components/modal_root.jsx +++ b/app/javascript/mastodon/features/ui/components/modal_root.jsx @@ -102,6 +102,9 @@ export const MODAL_COMPONENTS = { 'ACCOUNT_EDIT_FIELD_EDIT': accountEditModal('EditFieldModal'), 'ACCOUNT_EDIT_FIELD_DELETE': accountEditModal('DeleteFieldModal'), 'ACCOUNT_EDIT_FIELDS_REORDER': accountEditModal('ReorderFieldsModal'), + 'ACCOUNT_EDIT_IMAGE_ALT': accountEditModal('ImageAltModal'), + 'ACCOUNT_EDIT_IMAGE_DELETE': accountEditModal('ImageDeleteModal'), + 'ACCOUNT_EDIT_IMAGE_UPLOAD': accountEditModal('ImageUploadModal'), }; /** @arg {keyof import('@/mastodon/features/account_edit/modals')} type */ diff --git a/app/javascript/mastodon/features/ui/index.jsx b/app/javascript/mastodon/features/ui/index.jsx index 47fe6ff0cc..3e14b016e9 100644 --- a/app/javascript/mastodon/features/ui/index.jsx +++ b/app/javascript/mastodon/features/ui/index.jsx @@ -230,8 +230,8 @@ class SwitchingColumnsArea extends PureComponent { - - + + diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index e3c75bd21b..bfd0f8bd60 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -717,7 +717,6 @@ "notifications_permission_banner.how_to_control": "لتلقي الإشعارات عندما لا يكون ماستدون مفتوح، قم بتفعيل إشعارات سطح المكتب، يمكنك التحكم بدقة في أنواع التفاعلات التي تولد إشعارات سطح المكتب من خلال زر الـ{icon} أعلاه بمجرد تفعيلها.", "notifications_permission_banner.title": "لا تفوت شيئاً أبداً", "onboarding.follows.back": "عودة", - "onboarding.follows.done": "تمّ", "onboarding.follows.empty": "نأسف، لا يمكن عرض نتائج في الوقت الحالي. جرب البحث أو انتقل لصفحة الاستكشاف لإيجاد أشخاص للمتابعة، أو حاول مرة أخرى.", "onboarding.follows.search": "بحث", "onboarding.follows.title": "للبدء قم بمتابعة أشخاص", @@ -727,7 +726,6 @@ "onboarding.profile.display_name_hint": "اسمك الكامل أو اسمك المرح…", "onboarding.profile.note": "نبذة عنك", "onboarding.profile.note_hint": "يمكنك @ذِكر أشخاص آخرين أو استعمال #الوسوم…", - "onboarding.profile.save_and_continue": "حفظ و إستمرار", "onboarding.profile.title": "إعداد الملف الشخصي", "onboarding.profile.upload_avatar": "تحميل صورة الملف الشخصي", "onboarding.profile.upload_header": "تحميل رأسية الملف الشخصي", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 92bc871b5f..850971819a 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -392,7 +392,6 @@ "notifications.permission_required": "Los avisos d'escritoriu nun tán disponibles porque nun se concedió'l permisu riquíu.", "notifications.policy.accept": "Aceptar", "notifications.policy.accept_hint": "Amosar n'avisos", - "onboarding.follows.done": "Fecho", "onboarding.profile.note": "Biografía", "onboarding.profile.note_hint": "Pues @mentar a otros perfiles o poner #etiquetes…", "password_confirmation.exceeds_maxlength": "La contraseña de confirmación supera la llongura de caráuteres máxima", diff --git a/app/javascript/mastodon/locales/az.json b/app/javascript/mastodon/locales/az.json index e4b5758c44..e664b6bd0c 100644 --- a/app/javascript/mastodon/locales/az.json +++ b/app/javascript/mastodon/locales/az.json @@ -661,7 +661,6 @@ "notifications_permission_banner.enable": "Masaüstü bildirişləri fəallaşdır", "notifications_permission_banner.title": "Heç nəyi buraxmayın", "onboarding.follows.back": "Geri", - "onboarding.follows.done": "Hazırdır", "onboarding.follows.search": "Axtar", "onboarding.follows.title": "Başlamaq üçün insanları izləyin", "onboarding.profile.discoverable": "Profilimi kəşf edilə bilən et", @@ -670,7 +669,6 @@ "onboarding.profile.display_name_hint": "Tam adınız və ya ləqəbiniz…", "onboarding.profile.note": "Bioqrafiya", "onboarding.profile.note_hint": "Digər insanların @adını_çəkə və ya #mövzu_etiketləri istifadə edə bilərsiniz…", - "onboarding.profile.save_and_continue": "Saxla və davam et", "onboarding.profile.title": "Profili ayarla", "onboarding.profile.upload_avatar": "Profil şəkli yüklə", "onboarding.profile.upload_header": "Profil başlığı yüklə", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index b4a6c58bfd..c155c8ffdc 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -915,7 +915,6 @@ "notifications_permission_banner.how_to_control": "Каб атрымліваць апавяшчэнні, калі Mastodon не адкрыты, уключыце апавяшчэнні працоўнага стала. Вы зможаце дакладна кантраляваць, якія падзеі будуць ствараць апавяшчэнні з дапамогай {icon} кнопкі, як толькі яны будуць уключаны.", "notifications_permission_banner.title": "Не прапусціце нічога", "onboarding.follows.back": "Назад", - "onboarding.follows.done": "Гатова", "onboarding.follows.empty": "На жаль, зараз немагчыма паказаць вынікі. Вы можаце паспрабаваць выкарыстоўваць пошук і праглядзець старонку агляду, каб знайсці людзей, на якіх можна падпісацца, або паўтарыць спробу пазней.", "onboarding.follows.search": "Пошук", "onboarding.follows.title": "Падпішыцеся на некага, каб пачаць", @@ -925,7 +924,6 @@ "onboarding.profile.display_name_hint": "Ваша поўнае імя або ваш псеўданім…", "onboarding.profile.note": "Біяграфія", "onboarding.profile.note_hint": "Вы можаце @згадваць іншых людзей або выкарыстоўваць #хэштэгі…", - "onboarding.profile.save_and_continue": "Захаваць і працягнуць", "onboarding.profile.title": "Налады профілю", "onboarding.profile.upload_avatar": "Загрузіць фота профілю", "onboarding.profile.upload_header": "Загрузіць шапку профілю", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 3549c0ae2a..850f117544 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -680,7 +680,6 @@ "notifications_permission_banner.how_to_control": "За да получавате известия, когато Mastodon не е отворен, включете известията на работния плот. Може да управлявате точно кои видове взаимодействия пораждат известия на работния плот чрез бутона {icon} по-горе, след като бъдат включени.", "notifications_permission_banner.title": "Никога не пропускайте нищо", "onboarding.follows.back": "Назад", - "onboarding.follows.done": "Готово", "onboarding.follows.empty": "За съжаление, в момента не могат да се показват резултати. Може да опитате посредством търсене или сърфиране да разгледате страницата, за да намерите хора за последване, или опитайте пак по-късно.", "onboarding.follows.search": "Търсене", "onboarding.follows.title": "Последвайте хора, за да започнете", @@ -690,7 +689,6 @@ "onboarding.profile.display_name_hint": "Вашето пълно име или псевдоним…", "onboarding.profile.note": "Биография", "onboarding.profile.note_hint": "Може да @споменавате други хора или #хаштагове…", - "onboarding.profile.save_and_continue": "Запазване и продължаване", "onboarding.profile.title": "Настройване на профила", "onboarding.profile.upload_avatar": "Качване на снимка на профила", "onboarding.profile.upload_header": "Качване на заглавка на профила", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 0e9e9d33e6..cb55e4a68a 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -533,13 +533,11 @@ "notifications_permission_banner.how_to_control": "Evit reseviñ kemennoù pa ne vez ket digoret Mastodon, lezelit kemennoù war ar burev. Gallout a rit kontrollañ peseurt eskemmoù a c'henel kemennoù war ar burev gant ar {icon} nozelenn a-us kentre ma'z int lezelet.", "notifications_permission_banner.title": "Na vankit netra morse", "onboarding.follows.back": "Distreiñ", - "onboarding.follows.done": "Graet", "onboarding.follows.search": "Klask", "onboarding.profile.display_name": "Anv diskouezet", "onboarding.profile.display_name_hint": "Hoc'h anv klok pe hoc'h anv fentus…", "onboarding.profile.note": "Berr-ha-berr", "onboarding.profile.note_hint": "Gallout a rit @menegiñ tud all pe #gerioù-klik…", - "onboarding.profile.save_and_continue": "Enrollañ ha kenderc'hel", "onboarding.profile.title": "Kefluniañ ar profil", "onboarding.profile.upload_avatar": "Enporzhiañ ur skeudenn profil", "password_confirmation.mismatching": "Disheñvel eo an daou c'her-termen-se", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 496cb0d0c9..029c61cf06 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -786,7 +786,6 @@ "notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no és obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.", "notifications_permission_banner.title": "No et perdis mai res", "onboarding.follows.back": "Enrere", - "onboarding.follows.done": "Fet", "onboarding.follows.empty": "Malauradament, cap resultat pot ser mostrat ara mateix. Pots provar de fer servir la cerca o visitar la pàgina Explora per a trobar gent a qui seguir o provar-ho de nou més tard.", "onboarding.follows.search": "Cerca", "onboarding.follows.title": "Seguiu gent per a començar", @@ -796,7 +795,6 @@ "onboarding.profile.display_name_hint": "El teu nom complet o el teu malnom…", "onboarding.profile.note": "Biografia", "onboarding.profile.note_hint": "Pots @mencionar altra gent o #etiquetes…", - "onboarding.profile.save_and_continue": "Desa i continua", "onboarding.profile.title": "Configuració del perfil", "onboarding.profile.upload_avatar": "Importa una foto de perfil", "onboarding.profile.upload_header": "Importa una capçalera de perfil", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index d79d67d4da..3ab9bcc5f3 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -841,7 +841,6 @@ "notifications_permission_banner.how_to_control": "Chcete-li dostávat oznámení, i když nemáte Mastodon otevřený, povolte oznámení na ploše. Můžete si zvolit, o kterých druzích interakcí chcete být oznámením na ploše informování pod tlačítkem {icon} výše.", "notifications_permission_banner.title": "Nenechte si nic uniknout", "onboarding.follows.back": "Zpět", - "onboarding.follows.done": "Hotovo", "onboarding.follows.empty": "Bohužel, žádné výsledky nelze momentálně zobrazit. Můžete zkusit najít uživatele ke sledování za pomocí vyhledávání nebo na stránce „Objevit“, nebo to zkuste znovu později.", "onboarding.follows.search": "Hledat", "onboarding.follows.title": "Sledujte lidi a začněte", @@ -851,7 +850,6 @@ "onboarding.profile.display_name_hint": "Vaše celé jméno nebo přezdívka…", "onboarding.profile.note": "O vás", "onboarding.profile.note_hint": "Můžete @zmínit jiné osoby nebo #hashtagy…", - "onboarding.profile.save_and_continue": "Uložit a pokračovat", "onboarding.profile.title": "Nastavení profilu", "onboarding.profile.upload_avatar": "Nahrát profilový obrázek", "onboarding.profile.upload_header": "Nahrát hlavičku profilu", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 3bd13587c2..dbbe7ae181 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -168,7 +168,6 @@ "account_edit.field_edit_modal.add_title": "Ychwanegu maes cyfaddas", "account_edit.field_edit_modal.edit_title": "Golygu maes cyfaddas", "account_edit.field_edit_modal.name_hint": "e.e. “Gwefan bersonol”", - "account_edit.field_edit_modal.value_hint": "e.e. “enghraifft.fi”", "account_edit.field_edit_modal.value_label": "Gwerth", "account_edit.name_modal.add_title": "Ychwanegu enw dangos", "account_edit.name_modal.edit_title": "Golygu enw dangos", @@ -938,7 +937,6 @@ "notifications_permission_banner.how_to_control": "I dderbyn hysbysiadau pan nad yw Mastodon ar agor, galluogwch hysbysiadau bwrdd gwaith. Gallwch reoli'n union pa fathau o ryngweithiadau sy'n cynhyrchu hysbysiadau bwrdd gwaith trwy'r botwm {icon} uchod unwaith y byddan nhw wedi'u galluogi.", "notifications_permission_banner.title": "Peidiwch â cholli dim", "onboarding.follows.back": "Nôl", - "onboarding.follows.done": "Wedi gorffen", "onboarding.follows.empty": "Yn anffodus, nid oes modd dangos unrhyw ganlyniadau ar hyn o bryd. Gallwch geisio defnyddio chwilio neu bori'r dudalen archwilio i ddod o hyd i bobl i'w dilyn, neu ceisio eto yn nes ymlaen.", "onboarding.follows.search": "Chwilio", "onboarding.follows.title": "Dilynwch bobl i gychwyn arni", @@ -948,7 +946,6 @@ "onboarding.profile.display_name_hint": "Eich enw llawn neu'ch enw hwyl…", "onboarding.profile.note": "Bywgraffiad", "onboarding.profile.note_hint": "Gallwch @grybwyll pobl eraill neu #hashnodau…", - "onboarding.profile.save_and_continue": "Cadw a pharhau", "onboarding.profile.title": "Gosodiad proffil", "onboarding.profile.upload_avatar": "Llwytho llun proffil", "onboarding.profile.upload_header": "Llwytho pennyn proffil", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index 237fdea063..3dde4254e7 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "Vi fraråder brug af brugerdefinerede emoji i kombination med url'er. Brugerdefinerede felter, der indeholder begge dele, vises kun som tekst i stedet for som et link for at undgå forvirring hos brugerne.", "account_edit.field_edit_modal.name_hint": "F.eks. “Personligt websted”", "account_edit.field_edit_modal.name_label": "Etiket", - "account_edit.field_edit_modal.value_hint": "F.eks. “eksempel.me”", + "account_edit.field_edit_modal.url_warning": "For at tilføje et link, skal du inkludere {protocol} i begyndelsen.", + "account_edit.field_edit_modal.value_hint": "F.eks. “https://example.me”", "account_edit.field_edit_modal.value_label": "Værdi", "account_edit.field_reorder_modal.drag_cancel": "Trækningen blev annulleret. Feltet \"{item}\" blev sluppet.", "account_edit.field_reorder_modal.drag_end": "Feltet \"{item}\" blev sluppet.", @@ -959,17 +960,17 @@ "notifications_permission_banner.how_to_control": "Aktivér computernotifikationer for at få besked, når Mastodon ikke er åben. Når de er aktiveret, kan man via knappen {icon} ovenfor præcist styre, hvilke typer af interaktioner, som genererer computernotifikationer.", "notifications_permission_banner.title": "Gå aldrig glip af noget", "onboarding.follows.back": "Tilbage", - "onboarding.follows.done": "Færdig", "onboarding.follows.empty": "Ingen resultater tilgængelige pt. Prøv at bruge søgning eller gennemse siden for at finde personer at følge, eller forsøg igen senere.", + "onboarding.follows.next": "Næste: Opsætning af din profil", "onboarding.follows.search": "Søg", "onboarding.follows.title": "Følg folk for at komme i gang", "onboarding.profile.discoverable": "Gør min profil synlig", "onboarding.profile.discoverable_hint": "Når du vælger at være synlig på Mastodon, kan dine indlæg blive vist i søgeresultater og trender, og din profil kan blive foreslået til personer med samme interesser som dig.", "onboarding.profile.display_name": "Vist navn", "onboarding.profile.display_name_hint": "Dit fulde navn eller dit sjove navn…", + "onboarding.profile.finish": "Afslut", "onboarding.profile.note": "Bio", "onboarding.profile.note_hint": "Du kan @omtale andre personer eller #hashtags…", - "onboarding.profile.save_and_continue": "Gem og fortsæt", "onboarding.profile.title": "Profilopsætning", "onboarding.profile.upload_avatar": "Upload profilbillede", "onboarding.profile.upload_header": "Upload profilbanner", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 520f949a6a..3b2d249828 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "Das Verwenden von Emojis wird bei URLs nicht empfohlen. Die Zusatzfelder werden bei dieser Kombination nur als Text und nicht als Link dargestellt.", "account_edit.field_edit_modal.name_hint": "z. B. „Meine Website“", "account_edit.field_edit_modal.name_label": "Beschriftung", - "account_edit.field_edit_modal.value_hint": "z. B. „example.me“", + "account_edit.field_edit_modal.url_warning": "Um einen Link hinzuzufügen, füge {protocol} an den Anfang ein.", + "account_edit.field_edit_modal.value_hint": "z. B. „https://example.me“", "account_edit.field_edit_modal.value_label": "Inhalt", "account_edit.field_reorder_modal.drag_cancel": "Das Ziehen wurde abgebrochen und das Feld „{item}“ wurde abgelegt.", "account_edit.field_reorder_modal.drag_end": "Das Feld „{item}“ wurde abgelegt.", @@ -959,17 +960,17 @@ "notifications_permission_banner.how_to_control": "Aktiviere Desktop-Benachrichtigungen, um Mitteilungen zu erhalten, wenn Mastodon nicht geöffnet ist. Du kannst für jede Kategorie einstellen, ob du Desktop-Benachrichtigungen erhalten möchtest. Sobald sie aktiviert sind, klicke dafür auf das {icon} -Symbol.", "notifications_permission_banner.title": "Nichts verpassen", "onboarding.follows.back": "Zurück", - "onboarding.follows.done": "Fertig", "onboarding.follows.empty": "Bedauerlicherweise können aktuell keine Ergebnisse angezeigt werden. Du kannst die Suche verwenden oder den Reiter „Entdecken“ auswählen, um neue Leute zum Folgen zu finden – oder du versuchst es später erneut.", + "onboarding.follows.next": "Nächster Schritt: Profil einrichten", "onboarding.follows.search": "Suchen", "onboarding.follows.title": "Folge Profilen, um loszulegen", "onboarding.profile.discoverable": "Mein Profil darf entdeckt werden", "onboarding.profile.discoverable_hint": "Wenn du entdeckt werden möchtest, dann können deine Beiträge in Suchergebnissen und Trends erscheinen. Dein Profil kann ebenfalls anderen mit ähnlichen Interessen vorgeschlagen werden.", "onboarding.profile.display_name": "Anzeigename", "onboarding.profile.display_name_hint": "Dein richtiger Name oder dein Fantasiename …", + "onboarding.profile.finish": "Fertig", "onboarding.profile.note": "Über mich", "onboarding.profile.note_hint": "Du kannst andere @Profile erwähnen oder #Hashtags verwenden …", - "onboarding.profile.save_and_continue": "Speichern und fortfahren", "onboarding.profile.title": "Profil einrichten", "onboarding.profile.upload_avatar": "Profilbild hochladen", "onboarding.profile.upload_header": "Titelbild hochladen", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index 7ec926b496..100fce7e9a 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "Δεν συνιστούμε τη χρήση προσαρμοσμένων emoji σε συνδυασμό με URL. Τα προσαρμοσμένα πεδία που περιέχουν και τα δύο θα εμφανίζονται ως κείμενο μόνο αντί ως σύνδεσμος, προκειμένου να αποφευχθεί η σύγχυση του χρήστη.", "account_edit.field_edit_modal.name_hint": "Π.χ. “Προσωπική ιστοσελίδα”", "account_edit.field_edit_modal.name_label": "Ετικέτα", - "account_edit.field_edit_modal.value_hint": "Π.χ. “example.me”", + "account_edit.field_edit_modal.url_warning": "Για να προσθέσεις έναν σύνδεσμο, παρακαλούμε να συμπεριλάβεις το {protocol} στην αρχή.", + "account_edit.field_edit_modal.value_hint": "Π.χ. “https://example.me”", "account_edit.field_edit_modal.value_label": "Τιμή", "account_edit.field_reorder_modal.drag_cancel": "Η μετακίνηση ακυρώθηκε. Το πεδίο \"{item}\" αφέθηκε.", "account_edit.field_reorder_modal.drag_end": "Το πεδίο \"{item}\" αφέθηκε.", @@ -959,17 +960,17 @@ "notifications_permission_banner.how_to_control": "Για να λαμβάνεις ειδοποιήσεις όταν το Mastodon δεν είναι ανοιχτό, ενεργοποίησε τις ειδοποιήσεις επιφάνειας εργασίας. Μπορείς να ελέγξεις με ακρίβεια ποιοι τύποι αλληλεπιδράσεων δημιουργούν ειδοποιήσεις επιφάνειας εργασίας μέσω του κουμπιού {icon} μόλις ενεργοποιηθούν.", "notifications_permission_banner.title": "Μη χάσεις στιγμή", "onboarding.follows.back": "Πίσω", - "onboarding.follows.done": "Έγινε", "onboarding.follows.empty": "Δυστυχώς, δεν μπορούν να εμφανιστούν αποτελέσματα αυτή τη στιγμή. Μπορείς να προσπαθήσεις να χρησιμοποιήσεις την αναζήτηση ή να περιηγηθείς στη σελίδα εξερεύνησης για να βρεις άτομα να ακολουθήσεις ή να δοκιμάσεις ξανά αργότερα.", + "onboarding.follows.next": "Επόμενο: Ρυθμίστε το προφίλ σας", "onboarding.follows.search": "Αναζήτηση", "onboarding.follows.title": "Ακολούθησε άτομα για να ξεκινήσεις", "onboarding.profile.discoverable": "Κάνε το προφίλ μου ανακαλύψιμο", "onboarding.profile.discoverable_hint": "Όταν επιλέγεις την δυνατότητα ανακάλυψης στο Mastodon, οι αναρτήσεις σου μπορεί να εμφανιστούν στα αποτελέσματα αναζήτησης και τις τάσεις, και το προφίλ σου μπορεί να προτείνεται σε άτομα με παρόμοια ενδιαφέροντα με εσένα.", "onboarding.profile.display_name": "Εμφανιζόμενο όνομα", "onboarding.profile.display_name_hint": "Το πλήρες ή το διασκεδαστικό σου όνομα…", + "onboarding.profile.finish": "Ολοκλήρωση", "onboarding.profile.note": "Βιογραφικό", "onboarding.profile.note_hint": "Μπορείς να @επισημάνεις άλλα άτομα ή #ετικέτες…", - "onboarding.profile.save_and_continue": "Αποθήκευση και συνέχεια", "onboarding.profile.title": "Ρύθμιση προφίλ", "onboarding.profile.upload_avatar": "Μεταφόρτωση εικόνας προφίλ", "onboarding.profile.upload_header": "Μεταφόρτωση κεφαλίδας προφίλ", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 4bd474bc16..25cb548c19 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "We recommend against the use of custom emoji in combination with URLs. Custom fields containing both will display as text only instead of as a link, in order to prevent user confusion.", "account_edit.field_edit_modal.name_hint": "Eg “Personal website”", "account_edit.field_edit_modal.name_label": "Label", - "account_edit.field_edit_modal.value_hint": "Eg “example.me”", + "account_edit.field_edit_modal.url_warning": "To add a link, please include {protocol} at the beginning.", + "account_edit.field_edit_modal.value_hint": "Eg “https://example.me”", "account_edit.field_edit_modal.value_label": "Value", "account_edit.field_reorder_modal.drag_cancel": "Dragging was cancelled. Field \"{item}\" was dropped.", "account_edit.field_reorder_modal.drag_end": "Field \"{item}\" was dropped.", @@ -959,17 +960,17 @@ "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", "onboarding.follows.back": "Back", - "onboarding.follows.done": "Done", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", + "onboarding.follows.next": "Next: set up your profile", "onboarding.follows.search": "Search", "onboarding.follows.title": "Follow people to get started", "onboarding.profile.discoverable": "Make my profile discoverable", "onboarding.profile.discoverable_hint": "When you opt in to discoverability on Mastodon, your posts may appear in search results and trending, and your profile may be suggested to people with similar interests to you.", "onboarding.profile.display_name": "Display name", "onboarding.profile.display_name_hint": "Your full name or your fun name…", + "onboarding.profile.finish": "Finish", "onboarding.profile.note": "Bio", "onboarding.profile.note_hint": "You can @mention other people or #hashtags…", - "onboarding.profile.save_and_continue": "Save and continue", "onboarding.profile.title": "Profile setup", "onboarding.profile.upload_avatar": "Upload profile picture", "onboarding.profile.upload_header": "Upload profile header", diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 2ede5449d1..7567c489c2 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -184,6 +184,11 @@ "account_edit.field_reorder_modal.drag_start": "Picked up field \"{item}\".", "account_edit.field_reorder_modal.handle_label": "Drag field \"{item}\"", "account_edit.field_reorder_modal.title": "Rearrange fields", + "account_edit.image_edit.add_button": "Add image", + "account_edit.image_edit.alt_add_button": "Add alt text", + "account_edit.image_edit.alt_edit_button": "Edit alt text", + "account_edit.image_edit.remove_button": "Remove image", + "account_edit.image_edit.replace_button": "Replace image", "account_edit.name_modal.add_title": "Add display name", "account_edit.name_modal.edit_title": "Edit display name", "account_edit.profile_tab.button_label": "Customize", @@ -960,17 +965,17 @@ "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", "onboarding.follows.back": "Back", - "onboarding.follows.done": "Done", "onboarding.follows.empty": "Unfortunately, no results can be shown right now. You can try using search or browsing the explore page to find people to follow, or try again later.", + "onboarding.follows.next": "Next: Setup your profile", "onboarding.follows.search": "Search", "onboarding.follows.title": "Follow people to get started", "onboarding.profile.discoverable": "Make my profile discoverable", "onboarding.profile.discoverable_hint": "When you opt in to discoverability on Mastodon, your posts may appear in search results and trending, and your profile may be suggested to people with similar interests to you.", "onboarding.profile.display_name": "Display name", "onboarding.profile.display_name_hint": "Your full name or your fun name…", + "onboarding.profile.finish": "Finish", "onboarding.profile.note": "Bio", "onboarding.profile.note_hint": "You can @mention other people or #hashtags…", - "onboarding.profile.save_and_continue": "Save and continue", "onboarding.profile.title": "Profile setup", "onboarding.profile.upload_avatar": "Upload profile picture", "onboarding.profile.upload_header": "Upload profile header", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index b577a18a85..67de7b360b 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -698,7 +698,6 @@ "notifications_permission_banner.how_to_control": "Por ricevi sciigojn kiam Mastodon ne estas malfermita, ebligu labortablajn sciigojn. Vi povas regi precize kiuj specoj de interagoj generas labortablajn sciigojn per la supra butono {icon} post kiam ili estas ebligitaj.", "notifications_permission_banner.title": "Neniam preterlasas iun ajn", "onboarding.follows.back": "Reen", - "onboarding.follows.done": "Farita", "onboarding.follows.empty": "Bedaŭrinde, neniu rezulto estas montrebla nuntempe. Vi povas provi serĉi aŭ foliumi la esploran paĝon por trovi kontojn por sekvi, aŭ retrovi baldaŭ.", "onboarding.follows.search": "Serĉi", "onboarding.follows.title": "Sekvi homojn por komenci", @@ -708,7 +707,6 @@ "onboarding.profile.display_name_hint": "Via plena nomo aŭ via kromnomo…", "onboarding.profile.note": "Sinprezento", "onboarding.profile.note_hint": "Vi povas @mencii aliajn homojn aŭ #kradvortojn…", - "onboarding.profile.save_and_continue": "Konservi kaj daŭrigi", "onboarding.profile.title": "Profila fikso", "onboarding.profile.upload_avatar": "Alŝuti profilbildon", "onboarding.profile.upload_header": "Alŝuti profilkapbildon", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 4473576b81..51e30303e0 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "No recomendamos el uso de emojis personalizados en combinación con direcciones web. Los campos personalizados que contengan ambos solo se mostrarán como texto en lugar de como enlace, con el fin de evitar la confusión del usuario.", "account_edit.field_edit_modal.name_hint": "Por ejemplo: «Sitio web personal»", "account_edit.field_edit_modal.name_label": "Etiqueta", - "account_edit.field_edit_modal.value_hint": "Por ejemplo: «ejemplo.com.ar»", + "account_edit.field_edit_modal.url_warning": "Para agregar un enlace, por favor, incluí {protocol} al comienzo.", + "account_edit.field_edit_modal.value_hint": "Por ejemplo: «https://ejemplo.com»", "account_edit.field_edit_modal.value_label": "Valor", "account_edit.field_reorder_modal.drag_cancel": "El arrastre fue cancelado. Se soltó el campo «{item}».", "account_edit.field_reorder_modal.drag_end": "Se soltó el campo «{item}».", @@ -959,7 +960,6 @@ "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no está abierto, habilitá las notificaciones de escritorio. Podés controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba, una vez que estén habilitadas.", "notifications_permission_banner.title": "No te pierdas nada", "onboarding.follows.back": "Volver", - "onboarding.follows.done": "Listo", "onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Podés intentar usar la búsqueda o navegar por la página de exploración para encontrar cuentas a las que seguir, o intentarlo de nuevo más tarde.", "onboarding.follows.search": "Buscar", "onboarding.follows.title": "Para comenzar, empezá a seguir cuentas", @@ -969,7 +969,6 @@ "onboarding.profile.display_name_hint": "Tu nombre completo o tu pseudónimo…", "onboarding.profile.note": "Biografía", "onboarding.profile.note_hint": "Podés @mencionar otras cuentas o usar #etiquetas…", - "onboarding.profile.save_and_continue": "Guardar y continuar", "onboarding.profile.title": "Configuración del perfil", "onboarding.profile.upload_avatar": "Subir avatar", "onboarding.profile.upload_header": "Subir cabecera", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index 2259fc08b4..6d99e2dbf5 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "No recomendamos el uso de emojis personalizados en combinación con direcciones URL. Los campos personalizados que contengan ambos se mostrarán solo como texto en lugar de como un enlace, con el fin de evitar confusiones al usuario.", "account_edit.field_edit_modal.name_hint": "Por ejemplo, «sitio web personal»", "account_edit.field_edit_modal.name_label": "Etiqueta", - "account_edit.field_edit_modal.value_hint": "Por ejemplo, «ejemplo.me»", + "account_edit.field_edit_modal.url_warning": "Para agregar un enlace, incluye {protocol} al principio.", + "account_edit.field_edit_modal.value_hint": "Por ejemplo: “https://ejemplo.me”", "account_edit.field_edit_modal.value_label": "Valor", "account_edit.field_reorder_modal.drag_cancel": "Se canceló el arrastre. Se eliminó el campo «{item}».", "account_edit.field_reorder_modal.drag_end": "Se ha eliminado el campo «{item}».", @@ -959,17 +960,17 @@ "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.", "notifications_permission_banner.title": "Nunca te pierdas nada", "onboarding.follows.back": "Volver", - "onboarding.follows.done": "Hecho", "onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Puedes intentar usar la búsqueda o navegar por la página de exploración para encontrar gente a la que seguir, o inténtalo de nuevo más tarde.", + "onboarding.follows.next": "Siguiente: Configura tu perfil", "onboarding.follows.search": "Buscar", "onboarding.follows.title": "Sigue personas para comenzar", "onboarding.profile.discoverable": "Hacer que mi perfil aparezca en búsquedas", "onboarding.profile.discoverable_hint": "Cuando permites que tu perfil aparezca en búsquedas en Mastodon, tus publicaciones pueden aparecer en los resultados de búsqueda y en las tendencias, y tu perfil puede ser sugerido a personas con intereses similares a los tuyos.", "onboarding.profile.display_name": "Nombre para mostrar", "onboarding.profile.display_name_hint": "Tu nombre completo o tu apodo…", + "onboarding.profile.finish": "Fiinalizar", "onboarding.profile.note": "Biografía", "onboarding.profile.note_hint": "Puedes @mencionar a otras personas o #etiquetas…", - "onboarding.profile.save_and_continue": "Guardar y continuar", "onboarding.profile.title": "Configuración del perfil", "onboarding.profile.upload_avatar": "Subir foto de perfil", "onboarding.profile.upload_header": "Subir encabezado de perfil", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index a63428c453..3bf85dc816 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -173,7 +173,6 @@ "account_edit.field_edit_modal.link_emoji_warning": "Recomendamos no usar emojis personalizados combinados con enlaces. Los campos personalizados que contengan ambos solo se mostrarán como texto en vez de un enlace, para evitar confusiones.", "account_edit.field_edit_modal.name_hint": "Ej. \"Web personal\"", "account_edit.field_edit_modal.name_label": "Etiqueta", - "account_edit.field_edit_modal.value_hint": "Ej. \"ejemplo.yo\"", "account_edit.field_edit_modal.value_label": "Valor", "account_edit.field_reorder_modal.drag_cancel": "El arrastre se ha cancelado. El campo \"{item}\" se ha soltado.", "account_edit.field_reorder_modal.drag_end": "El campo \"{item}\" se ha soltado.", @@ -959,7 +958,6 @@ "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.", "notifications_permission_banner.title": "Nunca te pierdas nada", "onboarding.follows.back": "Atrás", - "onboarding.follows.done": "Hecho", "onboarding.follows.empty": "Desafortunadamente, no se pueden mostrar resultados en este momento. Puedes intentar usar la búsqueda o navegar por la página de exploración para encontrar personas a las que seguir, o inténtalo de nuevo más tarde.", "onboarding.follows.search": "Buscar", "onboarding.follows.title": "Sigue personas para comenzar", @@ -969,7 +967,6 @@ "onboarding.profile.display_name_hint": "Tu nombre completo o tu apodo…", "onboarding.profile.note": "Biografía", "onboarding.profile.note_hint": "Puedes @mencionar a otras personas o #etiquetas…", - "onboarding.profile.save_and_continue": "Guardar y continuar", "onboarding.profile.title": "Configuración del perfil", "onboarding.profile.upload_avatar": "Subir foto de perfil", "onboarding.profile.upload_header": "Subir encabezado de perfil", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 51a9abb35c..638e723863 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -845,7 +845,6 @@ "notifications_permission_banner.how_to_control": "Et saada teateid, ajal mil Mastodon pole avatud, luba töölauamärguanded. Saad täpselt määrata, mis tüüpi tegevused tekitavad märguandeid, kasutates peale teadaannete sisse lülitamist üleval olevat nuppu {icon}.", "notifications_permission_banner.title": "Ära jää millestki ilma", "onboarding.follows.back": "Tagasi", - "onboarding.follows.done": "Valmis", "onboarding.follows.empty": "Kahjuks ei saa hetkel tulemusi näidata. Proovi kasutada otsingut või lehitse uurimise lehte, et leida inimesi, keda jälgida, või proovi hiljem uuesti.", "onboarding.follows.search": "Otsi", "onboarding.follows.title": "Jälgi inimesi, et alustada", @@ -855,7 +854,6 @@ "onboarding.profile.display_name_hint": "Su täisnimi või naljanimi…", "onboarding.profile.note": "Elulugu", "onboarding.profile.note_hint": "Saad @mainida teisi kasutajaid või lisada #teemaviidet…", - "onboarding.profile.save_and_continue": "Salvesta ja jätka", "onboarding.profile.title": "Profiili seadistamine", "onboarding.profile.upload_avatar": "Laadi üles profiilipilt", "onboarding.profile.upload_header": "Laadi üles profiili päis", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index fb50eff98b..778207fc85 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -751,7 +751,6 @@ "notifications_permission_banner.how_to_control": "Mastodon irekita ez dagoenean jakinarazpenak jasotzeko, gaitu mahaigaineko jakinarazpenak. Mahaigaineko jakinarazpenak ze elkarrekintzak eragingo dituzten zehazki kontrolatu dezakezu goiko {icon} botoia erabiliz, gaituta daudenean.", "notifications_permission_banner.title": "Ez galdu ezer inoiz", "onboarding.follows.back": "Atzera", - "onboarding.follows.done": "Egina", "onboarding.follows.empty": "Zoritxarrez, ezin da emaitzik erakutsi orain. Bilaketa erabil dezakezu edo Arakatu orrian jendea bilatu jarraitzeko, edo saiatu geroago.", "onboarding.follows.search": "Bilatu", "onboarding.follows.title": "Jarraitu jendea hasteko", @@ -761,7 +760,6 @@ "onboarding.profile.display_name_hint": "Zure izena edo ezizena…", "onboarding.profile.note": "Biografia", "onboarding.profile.note_hint": "Beste pertsona batzuk @aipa ditzakezu edo #traolak erabili…", - "onboarding.profile.save_and_continue": "Gorde eta jarraitu", "onboarding.profile.title": "Profilaren konfigurazioa", "onboarding.profile.upload_avatar": "Igo profilaren irudia", "onboarding.profile.upload_header": "Igo profilaren goiburua", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 9501be8b93..3cd7bfaf80 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -751,7 +751,6 @@ "notifications_permission_banner.how_to_control": "برای دریافت آگاهی‌ها هنگام باز نبودن ماستودون، آگاهی‌های میزکار را به کار بیندازید. پس از به کار افتادنشان می‌توانید گونه‌های دقیق برهم‌کنش‌هایی که آگاهی‌های میزکار تولید می‌کنند را از {icon} بالا واپایید.", "notifications_permission_banner.title": "هرگز چیزی را از دست ندهید", "onboarding.follows.back": "بازگشت", - "onboarding.follows.done": "انجام شد", "onboarding.follows.empty": "متأسفانه هم‌اکنون نتیجه‌ای قابل نمایش نیست. می‌توانید استفاده از جست‌وجو یا مرور صفحهٔ کاوش را برای یافتن افرادی برای پی‌گیری آزموده یا دوباره تلاش کنید.", "onboarding.follows.search": "جست‌وجو", "onboarding.follows.title": "پی گرفتن افرادی برای آغاز", @@ -761,7 +760,6 @@ "onboarding.profile.display_name_hint": "نام کامل یا نام باحالتان…", "onboarding.profile.note": "درباره شما", "onboarding.profile.note_hint": "می‌توانید افراد دیگر را @نام‌بردن یا #برچسب بزنید…", - "onboarding.profile.save_and_continue": "ذخیره کن و ادامه بده", "onboarding.profile.title": "تنظیم نمایه", "onboarding.profile.upload_avatar": "بازگذاری تصویر نمایه", "onboarding.profile.upload_header": "بارگذاری تصویر سردر نمایه", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 2d84047f13..f7f529a639 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "Emme suosittele käyttämään mukautettuja emojeita URL-osoitteiden kanssa. Molempia sisältävät mukautetut kentät näkyvät vain tekstinä linkin sijaan, jotta estetään käyttäjien sekaannus.", "account_edit.field_edit_modal.name_hint": "Esim. ”Henkilökohtainen verkkosivusto”", "account_edit.field_edit_modal.name_label": "Nimike", - "account_edit.field_edit_modal.value_hint": "Esim. ”example.me”", + "account_edit.field_edit_modal.url_warning": "Lisää linkki sisällyttämällä alkuun {protocol}.", + "account_edit.field_edit_modal.value_hint": "Esim. ”https://example.me”", "account_edit.field_edit_modal.value_label": "Arvo", "account_edit.field_reorder_modal.drag_cancel": "Veto peruttu. Kenttää ”{item}” ei siirretty.", "account_edit.field_reorder_modal.drag_end": "Kenttä ”{item}” pudotettu.", @@ -959,17 +960,17 @@ "notifications_permission_banner.how_to_control": "Saadaksesi ilmoituksia, kun Mastodon ei ole auki, ota työpöytäilmoitukset käyttöön. Voit hallita tarkasti, mistä saat työpöytäilmoituksia kun ilmoitukset on otettu käyttöön yllä olevan {icon}-painikkeen kautta.", "notifications_permission_banner.title": "Älä anna minkään mennä ohi", "onboarding.follows.back": "Takaisin", - "onboarding.follows.done": "Valmis", "onboarding.follows.empty": "Valitettavasti tuloksia ei voida näyttää juuri nyt. Voit kokeilla hakua tai selata tutustumissivua löytääksesi seurattavaa tai yrittää myöhemmin uudelleen.", + "onboarding.follows.next": "Seuraavaksi: määrittele profiilisi", "onboarding.follows.search": "Haku", "onboarding.follows.title": "Aloita seuraamalla käyttäjiä", "onboarding.profile.discoverable": "Aseta profiilini löydettäväksi", "onboarding.profile.discoverable_hint": "Kun olet määrittänyt itsesi löydettäväksi Mastodonista, julkaisusi voivat näkyä hakutuloksissa ja suosituissa kohteissa. Lisäksi profiiliasi voidaan ehdottaa käyttäjille, jotka ovat kiinnostuneita kanssasi samoista aiheista.", "onboarding.profile.display_name": "Näyttönimi", "onboarding.profile.display_name_hint": "Koko nimesi tai lempinimesi…", + "onboarding.profile.finish": "Valmis", "onboarding.profile.note": "Elämäkerta", "onboarding.profile.note_hint": "Voit @mainita muita käyttäjiä tai #aihetunnisteita…", - "onboarding.profile.save_and_continue": "Tallenna ja jatka", "onboarding.profile.title": "Profiilin määritys", "onboarding.profile.upload_avatar": "Lähetä profiilikuva", "onboarding.profile.upload_header": "Lähetä profiilin otsakekuva", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 82c1616ddf..c31f8c7681 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -313,7 +313,6 @@ "notifications.policy.filter_not_followers_title": "Mga taong hindi ka susundan", "notifications.policy.filter_not_following_title": "Mga taong hindi mo sinusundan", "onboarding.profile.note_hint": "Maaari mong @bangitin ang ibang mga tao o mga #hashtag…", - "onboarding.profile.save_and_continue": "Iimbak at magpatuloy", "picture_in_picture.restore": "Ilagay ito pabalik", "poll.closed": "Sarado", "poll.reveal": "Ipakita ang mga resulta", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 799b0a4bc4..d586fd5781 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -915,7 +915,6 @@ "notifications_permission_banner.how_to_control": "Ger skriviborðsfráboðanir virknar fyri at móttaka fráboðanir, tá Mastodon ikki er opið. Tá tær eru gjørdar virknar, kanst tú stýra, hvørji sløg av samvirkni geva skriviborðsfráboðanir. Hetta umvegis {icon} knøttin omanfyri.", "notifications_permission_banner.title": "Miss einki", "onboarding.follows.back": "Aftur", - "onboarding.follows.done": "Liðugt", "onboarding.follows.empty": "Tíverri kunnu eingi úrslit vísast beint nú. Tú kanst royna at brúka leiting ella at kaga gjøgnum Rannsaka síðuna fyri at finna fólk at fylgja - ella royna aftur seinni.", "onboarding.follows.search": "Leita", "onboarding.follows.title": "Fylg fólki fyri at koma í gongd", @@ -925,7 +924,6 @@ "onboarding.profile.display_name_hint": "Títt fulla navn ella títt stuttliga navn…", "onboarding.profile.note": "Ævilýsing", "onboarding.profile.note_hint": "Tú kanst @umrøða onnur fólk ella #frámerki…", - "onboarding.profile.save_and_continue": "Goym og halt fram", "onboarding.profile.title": "Vangauppsetan", "onboarding.profile.upload_avatar": "Legg vangamynd upp", "onboarding.profile.upload_header": "Legg vangahøvd upp", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index 6360c49eeb..007baa530c 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -18,12 +18,12 @@ "account.add_note": "Ajouter une note personnelle", "account.add_or_remove_from_list": "Ajouter ou enlever de listes", "account.badges.admin": "Admin", - "account.badges.blocked": "Bloqué", + "account.badges.blocked": "Bloqué·e", "account.badges.bot": "Bot", "account.badges.domain_blocked": "Domaine bloqué", "account.badges.group": "Groupe", - "account.badges.muted": "Masqué", - "account.badges.muted_until": "Masqué jusqu’au {until}", + "account.badges.muted": "Masqué·e", + "account.badges.muted_until": "Masqué·e jusqu’au {until}", "account.block": "Bloquer @{name}", "account.block_domain": "Bloquer le domaine {domain}", "account.block_short": "Bloquer", @@ -39,7 +39,7 @@ "account.edit_profile_short": "Modifier", "account.enable_notifications": "Me notifier quand @{name} publie", "account.endorse": "Inclure sur profil", - "account.familiar_followers_many": "Suivi par {name1}, {name2}, et {othersCount, plural, one {une autre personne que vous suivez} other {# autres personnes que vous suivez}}", + "account.familiar_followers_many": "Suivi·e par {name1}, {name2}, et {othersCount, plural, one {une autre personne que vous suivez} other {# autres personnes que vous suivez}}", "account.familiar_followers_one": "Suivi·e par {name1}", "account.familiar_followers_two": "Suivi·e par {name1} et {name2}", "account.featured": "En vedette", @@ -65,7 +65,7 @@ "account.followers": "abonné·e·s", "account.followers.empty": "Personne ne suit ce compte pour l'instant.", "account.followers_counter": "{count, plural, one {{counter} abonné·e} other {{counter} abonné·e·s}}", - "account.followers_you_know_counter": "{count, plural, one {{counter} suivi·e}, other {{counter} suivi·e·s}}", + "account.followers_you_know_counter": "{counter} que vous suivez", "account.following": "Abonné·e", "account.following_counter": "{count, plural, one {{counter} abonnement} other {{counter} abonnements}}", "account.follows.empty": "Ce compte ne suit personne présentement.", @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "Nous déconseillons l'usage d'émoji personnalisé avec les URL. Les champs personnalisés contenant les deux seront affichés comme du texte et non un lien, afin d'éviter toute confusion.", "account_edit.field_edit_modal.name_hint": "Par exemple « Site Web personnel »", "account_edit.field_edit_modal.name_label": "Libellé", - "account_edit.field_edit_modal.value_hint": "Par exemple « exemple.me »", + "account_edit.field_edit_modal.url_warning": "Pour ajouter un lien, veuillez inclure {protocol} au début.", + "account_edit.field_edit_modal.value_hint": "Par exemple « https://exemple.me »", "account_edit.field_edit_modal.value_label": "Valeur", "account_edit.field_reorder_modal.drag_cancel": "Déplacement annulé. Le champ « {item} » a été redéposé.", "account_edit.field_reorder_modal.drag_end": "Le champ « {item} » a été déposé.", @@ -959,7 +960,6 @@ "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications de bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.", "notifications_permission_banner.title": "Ne rien rater", "onboarding.follows.back": "Retour", - "onboarding.follows.done": "Terminé", "onboarding.follows.empty": "Malheureusement, aucun résultat ne peut être affiché pour le moment. Vous pouvez essayer de rechercher ou de parcourir la page \"Explorer\" pour trouver des personnes à suivre, ou réessayer plus tard.", "onboarding.follows.search": "Recherche", "onboarding.follows.title": "Suivre des personnes pour commencer", @@ -969,7 +969,6 @@ "onboarding.profile.display_name_hint": "Votre nom complet ou votre nom rigolo…", "onboarding.profile.note": "Bio", "onboarding.profile.note_hint": "Vous pouvez @mentionner d'autres personnes ou #hashtags…", - "onboarding.profile.save_and_continue": "Enregistrer et continuer", "onboarding.profile.title": "Configuration du profil", "onboarding.profile.upload_avatar": "Importer une photo de profil", "onboarding.profile.upload_header": "Importer un entête de profil", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index acde4d4a92..6eb2e0a216 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -18,12 +18,12 @@ "account.add_note": "Ajouter une note personnelle", "account.add_or_remove_from_list": "Ajouter ou retirer des listes", "account.badges.admin": "Admin", - "account.badges.blocked": "Bloqué", + "account.badges.blocked": "Bloqué·e", "account.badges.bot": "Bot", "account.badges.domain_blocked": "Domaine bloqué", "account.badges.group": "Groupe", - "account.badges.muted": "Masqué", - "account.badges.muted_until": "Masqué jusqu’au {until}", + "account.badges.muted": "Masqué·e", + "account.badges.muted_until": "Masqué·e jusqu’au {until}", "account.block": "Bloquer @{name}", "account.block_domain": "Bloquer le domaine {domain}", "account.block_short": "Bloquer", @@ -39,7 +39,7 @@ "account.edit_profile_short": "Modifier", "account.enable_notifications": "Me notifier les publications de @{name}", "account.endorse": "Recommander sur votre profil", - "account.familiar_followers_many": "Suivi par {name1}, {name2}, et {othersCount, plural, one {une autre personne que vous suivez} other {# autres personnes que vous suivez}}", + "account.familiar_followers_many": "Suivi·e par {name1}, {name2}, et {othersCount, plural, one {une autre personne que vous suivez} other {# autres personnes que vous suivez}}", "account.familiar_followers_one": "Suivi·e par {name1}", "account.familiar_followers_two": "Suivi·e par {name1} et {name2}", "account.featured": "En vedette", @@ -65,14 +65,14 @@ "account.followers": "Abonné·e·s", "account.followers.empty": "Personne ne suit cet·te utilisateur·rice pour l’instant.", "account.followers_counter": "{count, plural, one {{counter} abonné·e} other {{counter} abonné·e·s}}", - "account.followers_you_know_counter": "{count, plural, one {{counter} suivi·e}, other {{counter} suivi·e·s}}", + "account.followers_you_know_counter": "{counter} que vous suivez", "account.following": "Abonnements", "account.following_counter": "{count, plural, one {{counter} abonnement} other {{counter} abonnements}}", "account.follows.empty": "Cet·te utilisateur·rice ne suit personne pour l’instant.", "account.follows_you": "Vous suit", "account.go_to_profile": "Voir le profil", "account.hide_reblogs": "Masquer les partages de @{name}", - "account.in_memoriam": "En mémoire de.", + "account.in_memoriam": "En mémoire.", "account.joined_long": "Ici depuis le {date}", "account.joined_short": "Ici depuis", "account.languages": "Modifier les langues d'abonnements", @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "Nous déconseillons l'usage d'émoji personnalisé avec les URL. Les champs personnalisés contenant les deux seront affichés comme du texte et non un lien, afin d'éviter toute confusion.", "account_edit.field_edit_modal.name_hint": "Par exemple « Site Web personnel »", "account_edit.field_edit_modal.name_label": "Libellé", - "account_edit.field_edit_modal.value_hint": "Par exemple « exemple.me »", + "account_edit.field_edit_modal.url_warning": "Pour ajouter un lien, veuillez inclure {protocol} au début.", + "account_edit.field_edit_modal.value_hint": "Par exemple « https://exemple.me »", "account_edit.field_edit_modal.value_label": "Valeur", "account_edit.field_reorder_modal.drag_cancel": "Déplacement annulé. Le champ « {item} » a été redéposé.", "account_edit.field_reorder_modal.drag_end": "Le champ « {item} » a été déposé.", @@ -959,7 +960,6 @@ "notifications_permission_banner.how_to_control": "Pour recevoir des notifications lorsque Mastodon n’est pas ouvert, activez les notifications du bureau. Vous pouvez contrôler précisément quels types d’interactions génèrent des notifications de bureau via le bouton {icon} ci-dessus une fois qu’elles sont activées.", "notifications_permission_banner.title": "Toujours au courant", "onboarding.follows.back": "Retour", - "onboarding.follows.done": "Terminé", "onboarding.follows.empty": "Malheureusement, aucun résultat ne peut être affiché pour le moment. Vous pouvez essayer d'utiliser la recherche ou parcourir la page de découverte pour trouver des personnes à suivre, ou réessayez plus tard.", "onboarding.follows.search": "Recherche", "onboarding.follows.title": "Suivre des personnes pour commencer", @@ -969,7 +969,6 @@ "onboarding.profile.display_name_hint": "Votre nom complet ou votre nom rigolo…", "onboarding.profile.note": "Biographie", "onboarding.profile.note_hint": "Vous pouvez @mentionner d'autres personnes ou #hashtags…", - "onboarding.profile.save_and_continue": "Enregistrer et continuer", "onboarding.profile.title": "Configuration du profil", "onboarding.profile.upload_avatar": "Importer une photo de profil", "onboarding.profile.upload_header": "Importer un entête de profil", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index 230dae1d97..9592886fa6 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -664,7 +664,6 @@ "notifications_permission_banner.how_to_control": "Om meldingen te ûntfangen wannear’t Mastodon net iepen stiet. Jo kinne krekt bepale hokker soarte fan ynteraksjes wol of gjin desktopmeldingen jouwe fia de boppesteande {icon} knop.", "notifications_permission_banner.title": "Mis neat", "onboarding.follows.back": "Tebek", - "onboarding.follows.done": "Klear", "onboarding.follows.empty": "Spitigernôch kinne op dit stuit gjin resultaten toand wurde. Jo kinne probearje te sykjen of te blêdzjen troch de ferkenningsside om minsken te finen dy’t jo folgje kinne, of probearje it letter opnij.", "onboarding.follows.search": "Sykje", "onboarding.follows.title": "Folgje minsken om te begjinnen", @@ -674,7 +673,6 @@ "onboarding.profile.display_name_hint": "Jo folsleine namme of in aardige bynamme…", "onboarding.profile.note": "Biografy", "onboarding.profile.note_hint": "Jo kinne oare minsken @fermelde of #hashtags brûke…", - "onboarding.profile.save_and_continue": "Bewarje en trochgean", "onboarding.profile.title": "Profyl ynstelle", "onboarding.profile.upload_avatar": "Profylfoto oplade", "onboarding.profile.upload_header": "Omslachfoto foar profyl oplade", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index 4813907145..3374b69c41 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -173,7 +173,6 @@ "account_edit.field_edit_modal.link_emoji_warning": "Molaimid gan emoji saincheaptha a úsáid i gcomhar le Urlanna. Taispeánfar réimsí saincheaptha ina bhfuil an dá cheann mar théacs amháin seachas mar nasc, chun mearbhall úsáideoirí a sheachaint.", "account_edit.field_edit_modal.name_hint": "M.sh. “Suíomh Gréasáin pearsanta”", "account_edit.field_edit_modal.name_label": "Lipéad", - "account_edit.field_edit_modal.value_hint": "M.sh. “shampla.me”", "account_edit.field_edit_modal.value_label": "Luach", "account_edit.field_reorder_modal.drag_cancel": "Cuireadh an tarraingt ar ceal. Baineadh an réimse \"{item}\".", "account_edit.field_reorder_modal.drag_end": "Baineadh an réimse \"{item}\".", @@ -959,7 +958,6 @@ "notifications_permission_banner.how_to_control": "Chun fógraí a fháil nuair nach bhfuil Mastodon oscailte, cumasaigh fógraí deisce. Is féidir leat a rialú go beacht cé na cineálacha idirghníomhaíochtaí a ghineann fógraí deisce tríd an gcnaipe {icon} thuas nuair a bhíonn siad cumasaithe.", "notifications_permission_banner.title": "Ná caill aon rud go deo", "onboarding.follows.back": "Ar ais", - "onboarding.follows.done": "Déanta", "onboarding.follows.empty": "Ar an drochuair, ní féidir aon torthaí a thaispeáint faoi láthair. Is féidir leat triail a bhaint as cuardach nó brabhsáil ar an leathanach taiscéalaíochta chun teacht ar dhaoine le leanúint, nó bain triail eile as níos déanaí.", "onboarding.follows.search": "Cuardach", "onboarding.follows.title": "Lean daoine le tosú", @@ -969,7 +967,6 @@ "onboarding.profile.display_name_hint": "D’ainm iomlán nó d’ainm spraíúil…", "onboarding.profile.note": "Bith", "onboarding.profile.note_hint": "Is féidir leat @ daoine eile a lua nó #hashtags…", - "onboarding.profile.save_and_continue": "Sábháil agus lean ar aghaidh", "onboarding.profile.title": "Socrú próifíle", "onboarding.profile.upload_avatar": "Íosluchtaigh pictiúr próifíl", "onboarding.profile.upload_header": "Íoslódáil an ceanntásca próifíl", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index 521dcbd200..0ca7f12e3e 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -752,7 +752,6 @@ "notifications_permission_banner.how_to_control": "Airson brathan fhaighinn nuair nach eil Mastodon fosgailte, cuir na brathan deasga an comas. Tha an smachd agad fhèin air dè na seòrsaichean de chonaltradh a ghineas brathan deasga leis a’ phutan {icon} gu h-àrd nuair a bhios iad air an cur an comas.", "notifications_permission_banner.title": "Na caill dad gu bràth tuilleadh", "onboarding.follows.back": "Air ais", - "onboarding.follows.done": "Deiseil", "onboarding.follows.empty": "Gu mì-fhortanach, chan urrainn dhuinn toradh a shealltainn an-dràsta. Feuch gleus an luirg no duilleag an rùrachaidh airson daoine ri leantainn a lorg no feuch ris a-rithist an ceann tamaill.", "onboarding.follows.search": "Lorg", "onboarding.follows.title": "Lean daoine airson tòiseachadh", @@ -762,7 +761,6 @@ "onboarding.profile.display_name_hint": "D’ ainm slàn no spòrsail…", "onboarding.profile.note": "Cunntas-beatha", "onboarding.profile.note_hint": "’S urrainn dhut @iomradh a thoirt air càch no air #tagaicheanHais…", - "onboarding.profile.save_and_continue": "Sàbhail ’s lean air adhart", "onboarding.profile.title": "Suidheachadh na pròifile", "onboarding.profile.upload_avatar": "Luchdaich suas dealbh na pròifil", "onboarding.profile.upload_header": "Luchdaich suas bann-cinn na pròifil", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 3d91225361..4a7780ff84 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "Non recomendamos o uso de emojis persoais combinados con URLs. Os campos persoais que conteñen ambos móstranse só como texto e non como unha ligazón, para evitar a confusión de quen os lea.", "account_edit.field_edit_modal.name_hint": "Ex. \"Páxina web persoal\"", "account_edit.field_edit_modal.name_label": "Etiqueta", - "account_edit.field_edit_modal.value_hint": "Ex. \"exemplo.gal\"", + "account_edit.field_edit_modal.url_warning": "Para engadir unha ligazón, inclúe {protocol} diante.", + "account_edit.field_edit_modal.value_hint": "Ex. “https://exemplo.me”", "account_edit.field_edit_modal.value_label": "Valor", "account_edit.field_reorder_modal.drag_cancel": "Cancelouse o arrastrado. Soltouse o campo \"{item}\".", "account_edit.field_reorder_modal.drag_end": "Soltouse o campo \"{item}\".", @@ -959,17 +960,17 @@ "notifications_permission_banner.how_to_control": "Activa as notificacións de escritorio para recibir notificacións mentras Mastodon non está aberto. Podes controlar de xeito preciso o tipo de interaccións que crean as notificacións de escritorio a través da {icon} superior unha vez están activadas.", "notifications_permission_banner.title": "Non perder nada", "onboarding.follows.back": "Volver", - "onboarding.follows.done": "Feito", "onboarding.follows.empty": "Desgraciadamente agora mesmo non hai nada que mostrar. Podes intentalo coa busca ou na páxina descubrir para atopar persoas ás que seguir, ou intentalo máis tarde.", + "onboarding.follows.next": "Seguinte: Configura o teu perfil", "onboarding.follows.search": "Buscar", "onboarding.follows.title": "Comeza seguindo algunhas persoas", "onboarding.profile.discoverable": "Que o meu perfil se poida atopar", "onboarding.profile.discoverable_hint": "Cando elixes que poidan atoparte en Mastodon as túas publicacións aparecerán nos resultados das buscas e nos temas en voga, e o teu perfil podería ser suxerido para seguimento a persoas con intereses semellantes aos teus.", "onboarding.profile.display_name": "Nome público", "onboarding.profile.display_name_hint": "O teu nome completo ou un nome divertido…", + "onboarding.profile.finish": "Finalizar", "onboarding.profile.note": "Acerca de ti", "onboarding.profile.note_hint": "Podes @mencionar a outras persoas ou usar #cancelos…", - "onboarding.profile.save_and_continue": "Gardar e continuar", "onboarding.profile.title": "Configuración do perfil", "onboarding.profile.upload_avatar": "Subir imaxe do perfil", "onboarding.profile.upload_header": "Subir cabeceira para o perfil", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 66fd6f710b..c3f7f81818 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -173,7 +173,6 @@ "account_edit.field_edit_modal.link_emoji_warning": "אנו ממליצים נגד שימוש באמוג'י ייחודיים ביחד עם URL. שדות מיוחדים שמכילים את שניהם יופיעו כמלל בלבד ולא כקישור, כדי למנוע בלבול משתמשים.", "account_edit.field_edit_modal.name_hint": "למשל \"אתר אישי\"", "account_edit.field_edit_modal.name_label": "תווית", - "account_edit.field_edit_modal.value_hint": "למשל “example.me”", "account_edit.field_edit_modal.value_label": "ערך", "account_edit.field_reorder_modal.drag_cancel": "הגרירה בוטלה. השדה \"{item}\" נעזב.", "account_edit.field_reorder_modal.drag_end": "השדה \"{item}\" נעזב.", @@ -959,7 +958,6 @@ "notifications_permission_banner.how_to_control": "כדי לקבל התראות גם כאשר מסטודון סגור יש לאפשר התראות מסך. ניתן לשלוט בדיוק איזה סוג של אינטראקציות יביא להתראות מסך דרך כפתור ה- {icon} מרגע שהן מאופשרות.", "notifications_permission_banner.title": "לעולם אל תחמיץ דבר", "onboarding.follows.back": "בחזרה", - "onboarding.follows.done": "בוצע", "onboarding.follows.empty": "למצער, תוצאות לחיפושך אינן בנמצא. ניתן להשתמש בחיפוש או בדף החקירות לשם מציאת אנשים ולעקבם. אפשר גם לנסות שוב אחר כך.", "onboarding.follows.search": "חיפוש", "onboarding.follows.title": "כדי להתחיל, יש לעקוב אחרי אנשים", @@ -969,7 +967,6 @@ "onboarding.profile.display_name_hint": "שמך המלא או כינוי הכיף שלך…", "onboarding.profile.note": "אודות", "onboarding.profile.note_hint": "ניתן @לאזכר משתמשים אחרים או #תגיות…", - "onboarding.profile.save_and_continue": "לשמור ולהמשיך", "onboarding.profile.title": "הגדרת פרופיל", "onboarding.profile.upload_avatar": "העלאת תמונת פרופיל", "onboarding.profile.upload_header": "העלאת כותרת פרופיל", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 4e3c3fb7df..f58a33925d 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "Nem javasoljuk az egyéni emodzsik és webcímek együttes használatát. A mindkettőt tartalmazó egyéni mezők a felhasználók megzavarásának elkerülése érdekében csak szövegként jelennek meg, nem hivatkozásként.", "account_edit.field_edit_modal.name_hint": "Például „Személyes webhely”", "account_edit.field_edit_modal.name_label": "Címke", - "account_edit.field_edit_modal.value_hint": "Például „example.me”", + "account_edit.field_edit_modal.url_warning": "Hivatkozás hozzáadásakor add meg a {protocol} protokollt az elején.", + "account_edit.field_edit_modal.value_hint": "Például „https://example.me”", "account_edit.field_edit_modal.value_label": "Érték", "account_edit.field_reorder_modal.drag_cancel": "Az áthúzás megszakítva. A(z) „{item}” mező el lett dobva.", "account_edit.field_reorder_modal.drag_end": "A(z) „{item}” mező el lett dobva.", @@ -959,7 +960,6 @@ "notifications_permission_banner.how_to_control": "Ahhoz, hogy értesítéseket kapj akkor, amikor a Mastodon nincs megnyitva, engedélyezd az asztali értesítéseket. Pontosan be tudod állítani, hogy milyen interakciókról értesülj a fenti {icon} gombon keresztül, ha egyszer már engedélyezted őket.", "notifications_permission_banner.title": "Soha ne mulassz el semmit", "onboarding.follows.back": "Vissza", - "onboarding.follows.done": "Kész", "onboarding.follows.empty": "Sajnos jelenleg nem jeleníthető meg eredmény. Kipróbálhatod a keresést vagy böngészheted a felfedező oldalon a követni kívánt személyeket, vagy próbáld meg később.", "onboarding.follows.search": "Keresés", "onboarding.follows.title": "A kezdéshez kezdj el embereket követni", @@ -969,7 +969,6 @@ "onboarding.profile.display_name_hint": "Teljes neved vagy vicces neved…", "onboarding.profile.note": "Bemutatkozás", "onboarding.profile.note_hint": "Megemlíthetsz @másokat vagy #hashtag-eket…", - "onboarding.profile.save_and_continue": "Mentés és folytatás", "onboarding.profile.title": "Profilbeállítás", "onboarding.profile.upload_avatar": "Profilkép feltöltése", "onboarding.profile.upload_header": "Profil fejléc feltöltése", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index d9a2f5e844..3f65776b91 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -707,7 +707,6 @@ "notifications_permission_banner.how_to_control": "Pro reciper notificationes quando Mastodon non es aperte, activa le notificationes de scriptorio. Post lor activation, es possibile controlar precisemente qual typos de interaction genera notificationes de scriptorio per medio del button {icon} hic supra.", "notifications_permission_banner.title": "Non mancar jammais a un cosa", "onboarding.follows.back": "Retro", - "onboarding.follows.done": "Facite", "onboarding.follows.empty": "Regrettabilemente, non es possibile monstrar resultatos al momento. Tu pote tentar usar le recerca o percurrer le pagina de exploration pro cercar personas a sequer, o tentar lo de novo plus tarde.", "onboarding.follows.search": "Cercar", "onboarding.follows.title": "Seque personas pro comenciar", @@ -717,7 +716,6 @@ "onboarding.profile.display_name_hint": "Tu nomine complete o tu supernomine…", "onboarding.profile.note": "Bio", "onboarding.profile.note_hint": "Tu pote @mentionar altere personas o #hashtags…", - "onboarding.profile.save_and_continue": "Salvar e continuar", "onboarding.profile.title": "Configuration del profilo", "onboarding.profile.upload_avatar": "Incargar imagine de profilo", "onboarding.profile.upload_header": "Actualisar capite de profilo", diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json index 1160973a63..77097b05c6 100644 --- a/app/javascript/mastodon/locales/ie.json +++ b/app/javascript/mastodon/locales/ie.json @@ -478,7 +478,6 @@ "onboarding.profile.display_name_hint": "Tui complet nómine o tui amusant nómine…", "onboarding.profile.note": "Biografie", "onboarding.profile.note_hint": "Tu posse @mentionar altri persones o #hashtags…", - "onboarding.profile.save_and_continue": "Conservar e avansar", "onboarding.profile.title": "Popular tu profil", "onboarding.profile.upload_avatar": "Cargar profil-portrete", "onboarding.profile.upload_header": "Cargar cap-image", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index 13b38f40fe..9254164374 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -614,7 +614,6 @@ "notifications_permission_banner.how_to_control": "Por ganar savigi kande Mastodon ne es desklozita, ebligez komputilsavigi.", "notifications_permission_banner.title": "Irga kozo ne pasas vu", "onboarding.follows.back": "Retro", - "onboarding.follows.done": "Finis", "onboarding.follows.empty": "Regretinde, nula rezultajo povas montresar nune. Vu povas esforcar serchar, o irar al explorala pagino por trovar personi sequinda, o esforcar itere pose.", "onboarding.follows.search": "Serchar", "onboarding.follows.title": "Sequez personi por komencar", @@ -624,7 +623,6 @@ "onboarding.profile.display_name_hint": "Vua tota nomo o vua gaya nomo…", "onboarding.profile.note": "Biografio", "onboarding.profile.note_hint": "Vu povas @mencionar altra personi o #hashtagi…", - "onboarding.profile.save_and_continue": "Preservez e avancez", "onboarding.profile.title": "Kompletigez la profilo", "onboarding.profile.upload_avatar": "Kargez profiloportreto", "onboarding.profile.upload_header": "Kargez profilokapimajo", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 706e9f4865..603cf573cc 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "Við mælum gegn því að nota sérsniðin tjáningartákn saman með vefslóðum. Sérsniðnir reitir sem innihalda hvort tveggja munu birtast sem einungis texti í stað þess að vera tenglar, til að koma í veg fyrir að notendur taki annað í misgripum fyrir hitt.", "account_edit.field_edit_modal.name_hint": "T.d. \"Eigið vefsvæði\"", "account_edit.field_edit_modal.name_label": "Skýring", - "account_edit.field_edit_modal.value_hint": "T.d. \"minnvefur.is\"", + "account_edit.field_edit_modal.url_warning": "Til að bæta við tengli skaltu hafa {protocol} á undan.", + "account_edit.field_edit_modal.value_hint": "T.d. “https://vefur.is”", "account_edit.field_edit_modal.value_label": "Gildi", "account_edit.field_reorder_modal.drag_cancel": "Hætt var við að draga. Reitnum \"{item}\" var sleppt.", "account_edit.field_reorder_modal.drag_end": "Reitnum \"{item}\" var sleppt.", @@ -959,7 +960,6 @@ "notifications_permission_banner.how_to_control": "Til að taka á móti tilkynningum þegar Mastodon er ekki opið, skaltu virkja tilkynningar á skjáborði. Þegar þær eru orðnar virkar geturðu stýrt nákvæmlega hverskonar atvik framleiða tilkynningar með því að nota {icon}-hnappinn hér fyrir ofan.", "notifications_permission_banner.title": "Aldrei missa af neinu", "onboarding.follows.back": "Til baka", - "onboarding.follows.done": "Lokið", "onboarding.follows.empty": "Því miður er ekki hægt að birta neinar niðurstöður í augnablikinu. Þú getur reynt að nota leitina eða skoðað könnunarsíðuna til að finna fólk til að fylgjast með, nú eða prófað aftur síðar.", "onboarding.follows.search": "Leita", "onboarding.follows.title": "Þú ættir að fylgjast með fólki til að komast í gang", @@ -969,7 +969,6 @@ "onboarding.profile.display_name_hint": "Fullt nafn þitt eða eitthvað til gamans…", "onboarding.profile.note": "Æviágrip", "onboarding.profile.note_hint": "Þú getur @minnst á annað fólk eða #myllumerki…", - "onboarding.profile.save_and_continue": "Vista og halda áfram", "onboarding.profile.title": "Uppsetning notandasniðs", "onboarding.profile.upload_avatar": "Sendu inn auðkennismynd", "onboarding.profile.upload_header": "Sendu inn bakgrunnsmynd í haus notandasniðs", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 9ae862aedd..384723db6d 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -171,9 +171,10 @@ "account_edit.field_edit_modal.limit_header": "Superato il limite di caratteri consigliato", "account_edit.field_edit_modal.limit_message": "Gli utenti dai dispositivi mobili potrebbero non visualizzare completamente il tuo campo.", "account_edit.field_edit_modal.link_emoji_warning": "Sconsigliamo l'uso di emoji personalizzate in combinazione con gli URL. I campi personalizzati che contengono entrambi verranno visualizzati solo come testo anziché come link, in modo da evitare confusione nell'utente.", - "account_edit.field_edit_modal.name_hint": "Ad esempio: “Sito web personale”", + "account_edit.field_edit_modal.name_hint": "Per esempio: “Sito web personale”", "account_edit.field_edit_modal.name_label": "Etichetta", - "account_edit.field_edit_modal.value_hint": "Ad esempio: “example.me”", + "account_edit.field_edit_modal.url_warning": "Per aggiungere un collegamento, si prega di includere {protocol} all’inizio.", + "account_edit.field_edit_modal.value_hint": "Per esempio: “https://example.me”", "account_edit.field_edit_modal.value_label": "Valore", "account_edit.field_reorder_modal.drag_cancel": "Il trascinamento è stato annullato. Il campo \"{item}\" è stato eliminato.", "account_edit.field_reorder_modal.drag_end": "Il campo \"{item}\" è stato eliminato.", @@ -959,17 +960,17 @@ "notifications_permission_banner.how_to_control": "Per ricevere le notifiche quando Mastodon non è aperto, abilita le notifiche desktop. Puoi controllare precisamente quali tipi di interazioni generano le notifiche destkop, tramite il pulsante {icon} sopra, una volta abilitate.", "notifications_permission_banner.title": "Non perderti mai nulla", "onboarding.follows.back": "Indietro", - "onboarding.follows.done": "Fatto", "onboarding.follows.empty": "Sfortunatamente, nessun risultato può essere mostrato in questo momento. Puoi provare a utilizzare la ricerca o sfogliare la pagina di esplorazione per trovare persone da seguire, oppure riprova più tardi.", + "onboarding.follows.next": "Successivo: imposta il tuo profilo", "onboarding.follows.search": "Cerca", "onboarding.follows.title": "Segui le persone per iniziare", "onboarding.profile.discoverable": "Rendi il mio profilo rilevabile", "onboarding.profile.discoverable_hint": "Quando attivi la rilevabilità su Mastodon, i tuoi post potrebbero apparire nei risultati di ricerca e nelle tendenze e il tuo profilo potrebbe essere suggerito a persone con interessi simili ai tuoi.", "onboarding.profile.display_name": "Nome da visualizzare", "onboarding.profile.display_name_hint": "Il tuo nome completo o il tuo nome divertente…", + "onboarding.profile.finish": "Fine", "onboarding.profile.note": "Biografia", "onboarding.profile.note_hint": "Puoi @menzionare altre persone o #hashtags…", - "onboarding.profile.save_and_continue": "Salva e continua", "onboarding.profile.title": "Configurazione del profilo", "onboarding.profile.upload_avatar": "Carica l'immagine del profilo", "onboarding.profile.upload_header": "Carica l'intestazione del profilo", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 45cce53213..add5561977 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -695,7 +695,6 @@ "notifications_permission_banner.how_to_control": "Mastodonを閉じている間でも通知を受信するにはデスクトップ通知を有効にしてください。有効にすると上の {icon} ボタンから通知の内容を細かくカスタマイズできます。", "notifications_permission_banner.title": "お見逃しなく", "onboarding.follows.back": "戻る", - "onboarding.follows.done": "完了", "onboarding.follows.empty": "表示できる結果はありません。検索やエクスプローラーを使ったり、ほかのアカウントをフォローしたり、後でもう一度試しください。", "onboarding.follows.search": "検索", "onboarding.follows.title": "最初にフォローする人を選ぶ", @@ -705,7 +704,6 @@ "onboarding.profile.display_name_hint": "フルネーム、あるいは面白い名前など", "onboarding.profile.note": "自己紹介", "onboarding.profile.note_hint": "ほかのユーザーへのメンション (@mention) や、 #ハッシュタグ が使用できます", - "onboarding.profile.save_and_continue": "保存して続ける", "onboarding.profile.title": "プロフィールの設定", "onboarding.profile.upload_avatar": "プロフィール画像をアップロード", "onboarding.profile.upload_header": "プロフィールのヘッダー画像をアップロード", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 978e28bb59..9689a99036 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -592,14 +592,12 @@ "notifications_permission_banner.enable": "Rmed ilɣa n tnarit", "notifications_permission_banner.title": "Ur zeggel acemma", "onboarding.follows.back": "Uɣal", - "onboarding.follows.done": "Immed", "onboarding.follows.search": "Nadi", "onboarding.follows.title": "Ḍfeṛ walbɛaḍ i wakken ad ttebdud", "onboarding.profile.display_name": "Isem ara d-yettwaskanen", "onboarding.profile.display_name_hint": "Isem-ik·im ummid neɣ isem-ik·im n uqeṣṣer…", "onboarding.profile.note": "Tameddurt", "onboarding.profile.note_hint": "Tzemreḍ ad d-@tbedreḍ imdanen niḍen neɣ #ihacṭagen …", - "onboarding.profile.save_and_continue": "Sekles, tkemmleḍ", "onboarding.profile.title": "Asbadu n umaɣnu", "onboarding.profile.upload_avatar": "Sali tugna n umaɣnu", "onboarding.profile.upload_header": "Sali tacacit n umaɣnu", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index b19fde5bdf..6737c4b2ee 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -796,7 +796,6 @@ "notifications_permission_banner.how_to_control": "마스토돈이 열려 있지 않을 때에도 알림을 받으려면, 데스크탑 알림을 활성화 하세요. 당신은 어떤 종류의 반응이 데스크탑 알림을 발생할 지를 {icon} 버튼을 통해 세세하게 설정할 수 있습니다.", "notifications_permission_banner.title": "아무것도 놓치지 마세요", "onboarding.follows.back": "뒤로가기", - "onboarding.follows.done": "완료", "onboarding.follows.empty": "안타깝지만 아직은 아무 것도 보여드릴 수 없습니다. 검색을 이용하거나 둘러보기 페이지에서 팔로우 할 사람을 찾을 수 있습니다. 아니면 잠시 후에 다시 시도하세요.", "onboarding.follows.search": "검색", "onboarding.follows.title": "사람들을 팔로우하기", @@ -806,7 +805,6 @@ "onboarding.profile.display_name_hint": "진짜 이름 또는 재미난 이름…", "onboarding.profile.note": "자기소개", "onboarding.profile.note_hint": "남을 @mention 하거나 #hashtag 태그를 달 수 있습니다…", - "onboarding.profile.save_and_continue": "저장 및 계속", "onboarding.profile.title": "프로필 설정", "onboarding.profile.upload_avatar": "프로필 사진 업로드", "onboarding.profile.upload_header": "프로필 헤더 업로드", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index b765dbbb51..f53292c751 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -594,7 +594,6 @@ "notifications_permission_banner.how_to_control": "Para risivir avizos kuando Mastodon no esta avierto, kapasita avizos de ensimameza. Puedes kontrolar presizamente kualos tipos de enteraksiones djeneren avizos de ensimameza kon el boton {icon} arriva kuando esten kapasitadas.", "notifications_permission_banner.title": "Nunkua te piedres niente", "onboarding.follows.back": "Atras", - "onboarding.follows.done": "Fecho", "onboarding.follows.empty": "Malorozamente, no se pueden amostrar rezultados en este momento. Puedes aprovar uzar la bushkeda o navigar por la pajina de eksplorasyon para topar personas a las que segir, o aprovarlo de muevo mas tadre.", "onboarding.follows.search": "Bushka", "onboarding.follows.title": "Sige personas para ampezar", @@ -604,7 +603,6 @@ "onboarding.profile.display_name_hint": "Tu nombre para amostrar.", "onboarding.profile.note": "Tu deskripsyon", "onboarding.profile.note_hint": "Puedes @enmentar a otra djente o #etiketas…", - "onboarding.profile.save_and_continue": "Guadra i kontinua", "onboarding.profile.title": "Konfigurasyon de profil", "onboarding.profile.upload_avatar": "Karga imaje de profil", "onboarding.profile.upload_header": "Karga kavesera de profil", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index ef6fa61702..32b23ea1e2 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -745,7 +745,6 @@ "notifications_permission_banner.how_to_control": "Jei nori gauti pranešimus, kai Mastodon nėra atidarytas, įjunk darbalaukio pranešimus. Įjungęs (-usi) darbalaukio pranešimus, gali tiksliai valdyti, kokių tipų sąveikos generuoja darbalaukio pranešimus, naudojant pirmiau esančiu mygtuku {icon}.", "notifications_permission_banner.title": "Niekada nieko nepraleisk", "onboarding.follows.back": "Atgal", - "onboarding.follows.done": "Atlikta", "onboarding.follows.empty": "Deja, šiuo metu jokių rezultatų parodyti negalima. Gali pabandyti naudoti paiešką arba naršyti atradimo puslapį, kad surastum žmonių, kuriuos nori sekti, arba bandyti vėliau.", "onboarding.follows.search": "Ieškoti", "onboarding.follows.title": "Sekite asmenis, kad pradėtumėte", @@ -755,7 +754,6 @@ "onboarding.profile.display_name_hint": "Tavo pilnas vardas arba linksmas vardas…", "onboarding.profile.note": "Biografija", "onboarding.profile.note_hint": "Gali @paminėti kitus žmones arba #saitažodžius…", - "onboarding.profile.save_and_continue": "Išsaugoti ir tęsti", "onboarding.profile.title": "Profilio sąranka", "onboarding.profile.upload_avatar": "Įkelti profilio nuotrauką", "onboarding.profile.upload_header": "Įkelti profilio antraštę", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index d73177da90..83e436c756 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -610,7 +610,6 @@ "onboarding.profile.display_name_hint": "Tavs pilnais vārds vai Tavs joku vārds…", "onboarding.profile.note": "Apraksts", "onboarding.profile.note_hint": "Tu vari @pieminēt citus cilvēkus vai #tēmturus…", - "onboarding.profile.save_and_continue": "Saglabāt un turpināt", "onboarding.profile.title": "Profila iestatīšana", "onboarding.profile.upload_avatar": "Augšupielādēt profila attēlu", "onboarding.profile.upload_header": "Augšupielādēt profila galveni", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 92b12958fe..49a54815d8 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -481,7 +481,6 @@ "onboarding.profile.display_name": "Nama paparan", "onboarding.profile.display_name_hint": "Nama penuh anda atau nama anda yang menyeronokkan…", "onboarding.profile.note_hint": "Anda boleh @menyebut orang lain atau #hashtags…", - "onboarding.profile.save_and_continue": "Simpan dan teruskan", "onboarding.profile.upload_avatar": "Muat naik gambar profil", "password_confirmation.exceeds_maxlength": "Pengesahan kata laluan melebihi panjang kata laluan maksimum", "password_confirmation.mismatching": "Pengesahan kata laluan tidak sepadan", diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json index ecfe893111..ba1e90e5b9 100644 --- a/app/javascript/mastodon/locales/my.json +++ b/app/javascript/mastodon/locales/my.json @@ -385,7 +385,6 @@ "onboarding.profile.display_name": "ဖော်ပြမည့်အမည်", "onboarding.profile.display_name_hint": "သင့်အမည်အပြည့်အစုံ သို့မဟုတ် သင့်အမည်ပြောင်။", "onboarding.profile.note": "ကိုယ်ရေးအကျဉ်း", - "onboarding.profile.save_and_continue": "သိမ်းပြီး ဆက်လုပ်ပါ", "onboarding.profile.title": "ပရိုဖိုင်စနစ် ထည့်သွင်းခြင်း", "onboarding.profile.upload_avatar": "ပရိုဖိုင်ပုံ အပ်လုဒ်လုပ်ပါ", "password_confirmation.exceeds_maxlength": "စကားဝှက်အတည်ပြုခြင်းတွင် အများဆုံးစကားဝှက်အရှည်ထက် ကျော်လွန်နေပါသည်", diff --git a/app/javascript/mastodon/locales/nan-TW.json b/app/javascript/mastodon/locales/nan-TW.json index 9705503976..3d108b0074 100644 --- a/app/javascript/mastodon/locales/nan-TW.json +++ b/app/javascript/mastodon/locales/nan-TW.json @@ -173,7 +173,6 @@ "account_edit.field_edit_modal.link_emoji_warning": "Lán無建議佇URL內底用自訂ê emoji。為著避免用者舞花去,自訂ê框á若包含自訂emoji kap URL,kan-ta ē顯示做文字。", "account_edit.field_edit_modal.name_hint": "例:「個人網站」", "account_edit.field_edit_modal.name_label": "標簽", - "account_edit.field_edit_modal.value_hint": "例:「example.me」", "account_edit.field_edit_modal.value_label": "值", "account_edit.field_reorder_modal.drag_cancel": "Giú ê動作取消ah。框á「{item}」予lâng khǹg ah。", "account_edit.field_reorder_modal.drag_end": "框á「{item}」予lâng khǹg ah。", @@ -951,7 +950,6 @@ "notifications_permission_banner.how_to_control": "Nā beh佇Mastodon關起來ê時陣收通知,請啟用桌面通知。若準啟用,Lí ē當通過面頂ê {icon} 鈕á,準準控制siánn物互動ê類型ē生桌面通知。", "notifications_permission_banner.title": "逐ê著看", "onboarding.follows.back": "轉去", - "onboarding.follows.done": "做好ah", "onboarding.follows.empty": "可惜,tsit-má無半條結果通顯示。Lí ē當試用tshiau-tshuē á是瀏覽探索ê頁,來tshuē beh跟tuè ê lâng,或者是sió等leh koh試。", "onboarding.follows.search": "Tshiau-tshuē", "onboarding.follows.title": "請跟tuè lâng來開始。", @@ -961,7 +959,6 @@ "onboarding.profile.display_name_hint": "Lí ê全名á是別號……", "onboarding.profile.note": "個人紹介", "onboarding.profile.note_hint": "Lí ē當 @mention 別lâng á是用 #hashtag……", - "onboarding.profile.save_and_continue": "儲存了後繼續", "onboarding.profile.title": "個人資料ê設定", "onboarding.profile.upload_avatar": "Kā個人資料ê相片傳起去。", "onboarding.profile.upload_header": "Kā個人資料ê橫條á ê圖傳起去", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index df2191a094..c45babcc0d 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -173,7 +173,6 @@ "account_edit.field_edit_modal.link_emoji_warning": "We raden aan om aangepaste emoji in combinatie met urls te gebruiken. Aangepaste velden die beide bevatten worden alleen als tekst weergegeven in plaats van als een link, om verwarring van de gebruiker te voorkomen.", "account_edit.field_edit_modal.name_hint": "Bijv. \"Persoonlijke website\"", "account_edit.field_edit_modal.name_label": "Label", - "account_edit.field_edit_modal.value_hint": "Bijv. \"voorbeeld.me\"", "account_edit.field_edit_modal.value_label": "Waarde", "account_edit.field_reorder_modal.drag_cancel": "Slepen is geannuleerd. Veld \"{item}\" is weggevallen.", "account_edit.field_reorder_modal.drag_end": "Veld \"{item}\" was weggevallen.", @@ -959,7 +958,6 @@ "notifications_permission_banner.how_to_control": "Om meldingen te ontvangen wanneer Mastodon niet open staat. Je kunt precies bepalen welke soort interacties wel of geen desktopmeldingen geven via de bovenstaande {icon} knop.", "notifications_permission_banner.title": "Mis nooit meer iets", "onboarding.follows.back": "Terug", - "onboarding.follows.done": "Klaar", "onboarding.follows.empty": "Helaas kunnen op dit moment geen resultaten worden getoond. Je kunt proberen te zoeken of op de verkenningspagina te bladeren om mensen te vinden die je kunt volgen, of probeer het later opnieuw.", "onboarding.follows.search": "Zoeken", "onboarding.follows.title": "Volg mensen om te beginnen", @@ -969,7 +967,6 @@ "onboarding.profile.display_name_hint": "Jouw volledige naam of een leuke bijnaam…", "onboarding.profile.note": "Biografie", "onboarding.profile.note_hint": "Je kunt andere mensen @vermelden of #hashtags gebruiken…", - "onboarding.profile.save_and_continue": "Opslaan en doorgaan", "onboarding.profile.title": "Profiel instellen", "onboarding.profile.upload_avatar": "Profielfoto uploaden", "onboarding.profile.upload_header": "Omslagfoto voor het profiel uploaden", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 9d7ca37c0d..e44f7e52b9 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -913,7 +913,6 @@ "notifications_permission_banner.how_to_control": "Aktiver skrivebordsvarsel for å få varsel når Mastodon ikkje er open. Du kan nøye bestemme kva samhandlingar som skal føre til skrivebordsvarsel gjennom {icon}-knappen ovanfor etter at varsel er aktivert.", "notifications_permission_banner.title": "Gå aldri glipp av noko", "onboarding.follows.back": "Tilbake", - "onboarding.follows.done": "Ferdig", "onboarding.follows.empty": "Me kan ikkje visa deg nokon resultat no. Du kan prøva å søkja eller bla gjennom utforsk-sida for å finna folk å fylgja, eller du kan prøva att seinare.", "onboarding.follows.search": "Søk", "onboarding.follows.title": "Fylg folk for å koma i gang", @@ -923,7 +922,6 @@ "onboarding.profile.display_name_hint": "Det fulle namnet eller kallenamnet ditt…", "onboarding.profile.note": "Om meg", "onboarding.profile.note_hint": "Du kan @nemna folk eller #emneknaggar…", - "onboarding.profile.save_and_continue": "Lagre og hald fram", "onboarding.profile.title": "Profiloppsett", "onboarding.profile.upload_avatar": "Last opp profilbilete", "onboarding.profile.upload_header": "Last opp profiltoppbilete", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index a6ab9f30e1..2cd2341d8b 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -643,7 +643,6 @@ "notifications_permission_banner.how_to_control": "For å motta varsler når Mastodon ikke er åpne, aktiver desktop varsler. Du kan kontrollere nøyaktig hvilke typer interaksjoner genererer skrivebordsvarsler gjennom {icon} -knappen ovenfor når de er aktivert.", "notifications_permission_banner.title": "Aldri gå glipp av noe", "onboarding.follows.back": "Tilbake", - "onboarding.follows.done": "Ferdig", "onboarding.follows.empty": "Dessverre kan ingen resultater vises akkurat nå. Du kan prøve å bruke søk eller bla gjennom utforske-siden for å finne folk å følge, eller prøve igjen senere.", "onboarding.follows.search": "Søk", "onboarding.follows.title": "Følg folk for å komme i gang", @@ -652,7 +651,6 @@ "onboarding.profile.display_name_hint": "Ditt fulle navn eller ditt morsomme navn…", "onboarding.profile.note": "Om meg", "onboarding.profile.note_hint": "Du kan @nevne andre eller #emneknagger…", - "onboarding.profile.save_and_continue": "Lagre og fortsett", "onboarding.profile.title": "Konfigurering av profil", "onboarding.profile.upload_avatar": "Last opp profilbilde", "onboarding.profile.upload_header": "Last opp profiltoppbilde", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index 11c7022100..7fcfeb9053 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -552,11 +552,9 @@ "notifications.policy.filter_not_following_hint": "ਜਦ ਤੱਕ ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਖੁਦ ਮਨਜ਼ੂਰੀ ਨਹੀਂ ਦਿੰਦੇ", "notifications_permission_banner.enable": "ਡੈਸਕਟਾਪ ਸੂਚਨਾਵਾਂ ਸਮਰੱਥ ਕਰੋ", "onboarding.follows.back": "ਪਿੱਛੇ", - "onboarding.follows.done": "ਮੁਕੰਮਲ", "onboarding.follows.search": "ਖੋਜੋ", "onboarding.profile.display_name": "ਦਿਖਾਇਆ ਜਾਣ ਵਾਲਾ ਨਾਂ", "onboarding.profile.note": "ਜਾਣਕਾਰੀ", - "onboarding.profile.save_and_continue": "ਸੰਭਾਲੋ ਅਤੇ ਜਾਰੀ ਰੱਖੋ", "onboarding.profile.title": "ਪਰੋਫਾਈਲ ਸੈਟਅੱਪ", "onboarding.profile.upload_avatar": "ਪਰੋਫਾਈਲ ਤਸਵੀਰ ਅੱਪਲੋਡ ਕਰੋ", "poll.closed": "ਬੰਦ ਹੈ", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 0ef974c4b2..7b55c1e99d 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -733,7 +733,6 @@ "notifications_permission_banner.how_to_control": "Aby otrzymywać powiadomienia, gdy Mastodon nie jest otwarty, włącz powiadomienia na pulpicie. Możesz wybrać, które dokładnie typy interakcji generują powiadomienia na pulpicie za pomocą przycisku {icon} powyżej po ich włączeniu.", "notifications_permission_banner.title": "Nigdy niczego nie przegapisz", "onboarding.follows.back": "Wróć", - "onboarding.follows.done": "Gotowe", "onboarding.follows.empty": "Niestety, w tej chwili nie można nic wyświetlić. Możesz użyć wyszukiwania lub przeglądać stronę główną, aby znaleźć osoby, które chcesz obserwować, albo spróbuj ponownie później.", "onboarding.follows.search": "Szukaj", "onboarding.follows.title": "Zaobserwuj kogoś, aby zacząć", @@ -743,7 +742,6 @@ "onboarding.profile.display_name_hint": "Twoje imię lub pseudonim…", "onboarding.profile.note": "Opis", "onboarding.profile.note_hint": "Możesz @wzmiankować innych lub dodawać #hashtagi…", - "onboarding.profile.save_and_continue": "Zapisz i kontynuuj", "onboarding.profile.title": "Ustawienia profilu", "onboarding.profile.upload_avatar": "Dodaj zdjęcie profilowe", "onboarding.profile.upload_header": "Dodaj baner", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index d330ee4302..dc02337994 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -153,6 +153,7 @@ "account_edit.column_title": "Editar perfil", "account_edit.custom_fields.name": "Campo", "account_edit.custom_fields.placeholder": "Insira seus pronomes, links externos ou qualquer coisa que queira compartilhar.", + "account_edit.custom_fields.reorder_button": "Reordenar campos", "account_edit.custom_fields.tip_content": "Você pode facilmente dar credibilidade à sua conta Mastodon verificando os links para os seus sites.", "account_edit.custom_fields.tip_title": "Dica: Adicionando links verificados", "account_edit.custom_fields.title": "Campos personalizados", @@ -167,9 +168,16 @@ "account_edit.field_delete_modal.title": "Excluir campo personalizado?", "account_edit.field_edit_modal.add_title": "Adicionar campo personalizado", "account_edit.field_edit_modal.edit_title": "Editar campo personalizado", + "account_edit.field_edit_modal.limit_header": "Limite recomendado de caracteres excedido", + "account_edit.field_edit_modal.limit_message": "Usuários de dispositivos móveis podem não ver seu campo completo.", + "account_edit.field_edit_modal.link_emoji_warning": "Recomendamos não utilizar emojis personalizados combinados com URLs. Campos personalizados contendo ambos serão exibidos apenas como texto em vez de link, para evitar confusão dos usuários.", "account_edit.field_edit_modal.name_hint": "Ex. \"Site pessoal\"", "account_edit.field_edit_modal.name_label": "Descrição", + "account_edit.field_edit_modal.url_warning": "Para adicionar um link, por favor inclia {protocol} no início.", + "account_edit.field_edit_modal.value_hint": "Ex.: \"https://example.me\"", "account_edit.field_edit_modal.value_label": "Valor", + "account_edit.field_reorder_modal.drag_cancel": "O arrasto foi cancelado. O campo \"{item}\" foi descartado.", + "account_edit.field_reorder_modal.drag_end": "O campo \"{item}\" foi descartado.", "account_edit.name_modal.add_title": "Inserir nome de exibição", "account_edit.name_modal.edit_title": "Editar nome de exibição", "account_edit.profile_tab.button_label": "Personalizar", @@ -324,12 +332,14 @@ "collections.create_collection": "Criar coleção", "collections.delete_collection": "Eliminar coleção", "collections.description_length_hint": "Limite de 100 caracteres", + "collections.detail.accept_inclusion": "OK", "collections.detail.accounts_heading": "Contas", "collections.detail.author_added_you": "{author} adicionou você a esta coleção", "collections.detail.curated_by_author": "Curadoria de {author}", "collections.detail.curated_by_you": "Curadoria por você", "collections.detail.loading": "Carregando coleção…", "collections.detail.other_accounts_in_collection": "Outros nesta coleção:", + "collections.detail.revoke_inclusion": "Remover-me", "collections.detail.sensitive_note": "Esta coleção contém contas e conteúdo que podem ser sensíveis a alguns usuários.", "collections.detail.share": "Compartilhar esta coleção", "collections.edit_details": "Editar detalhes", @@ -345,6 +355,9 @@ "collections.old_last_post_note": "Publicado pela última vez semana passada", "collections.remove_account": "Remover esta conta", "collections.report_collection": "Denunciar esta coleção", + "collections.revoke_collection_inclusion": "Remover-me desta coleção", + "collections.revoke_inclusion.confirmation": "Você foi removido de \"{collection}\"", + "collections.revoke_inclusion.error": "Houve um erro, por favor tente novamente mais tarde.", "collections.search_accounts_label": "Buscar contas para adicionar…", "collections.search_accounts_max_reached": "Você acrescentou o numero máximo de contas", "collections.sensitive": "Sensível", @@ -468,6 +481,9 @@ "confirmations.remove_from_followers.confirm": "Remover seguidor", "confirmations.remove_from_followers.message": "{name} vai parar de te seguir. Tem certeza de que deseja continuar?", "confirmations.remove_from_followers.title": "Remover seguidor?", + "confirmations.revoke_collection_inclusion.confirm": "Remover-me", + "confirmations.revoke_collection_inclusion.message": "Esta ação é permanente e o curador não poderá adicionar-lhe de volta à coleção mais tarde.", + "confirmations.revoke_collection_inclusion.title": "Remover-se desta coleção?", "confirmations.revoke_quote.confirm": "Remover publicação", "confirmations.revoke_quote.message": "Esta ação não pode ser desfeita.", "confirmations.revoke_quote.title": "Remover publicação?", @@ -937,7 +953,6 @@ "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no computador. Você pode controlar precisamente quais tipos de interações geram notificações no computador através do botão {icon}.", "notifications_permission_banner.title": "Nunca perca nada", "onboarding.follows.back": "Voltar", - "onboarding.follows.done": "Feito", "onboarding.follows.empty": "Infelizmente, não é possível mostrar resultados agora. Você pode tentar usar a busca ou navegar na página de exploração para encontrar pessoas para seguir, ou tentar novamente mais tarde.", "onboarding.follows.search": "Buscar", "onboarding.follows.title": "Comece seguindo pessoas", @@ -947,7 +962,6 @@ "onboarding.profile.display_name_hint": "Seu nome completo ou apelido…", "onboarding.profile.note": "Biografia", "onboarding.profile.note_hint": "Você pode @mencionar outras pessoas ou usar #hashtags…", - "onboarding.profile.save_and_continue": "Salvar e continuar", "onboarding.profile.title": "Configuração do perfil", "onboarding.profile.upload_avatar": "Enviar imagem de perfil", "onboarding.profile.upload_header": "Carregar cabeçalho do perfil", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 51042e538f..7bca941543 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -173,7 +173,6 @@ "account_edit.field_edit_modal.link_emoji_warning": "Não recomendamos o uso de emojis personalizados em combinação com URLs. Campos personalizados que contenham ambos serão exibidos apenas como texto, em vez de como hiperligação, para evitar confusão aos utilizadores.", "account_edit.field_edit_modal.name_hint": "Ex.: \"Site pessoal\"", "account_edit.field_edit_modal.name_label": "Rótulo", - "account_edit.field_edit_modal.value_hint": "Ex.: “exemplo.me”", "account_edit.field_edit_modal.value_label": "Valor", "account_edit.field_reorder_modal.drag_cancel": "O arrastamento foi cancelado. O campo \"{item}\" foi largado.", "account_edit.field_reorder_modal.drag_end": "O campo \"{item}\" foi largado.", @@ -958,7 +957,6 @@ "notifications_permission_banner.how_to_control": "Para receberes notificações quando o Mastodon não estiver aberto, ativa as notificações no ambiente de trabalho. Após isso, podes controlar precisamente que tipos de interações geram notificações no ambiente de trabalho através do botão {icon} acima.", "notifications_permission_banner.title": "Nunca percas nada", "onboarding.follows.back": "Voltar", - "onboarding.follows.done": "Concluído", "onboarding.follows.empty": "Infelizmente não é possível mostrar resultados neste momento. Podes tentar pesquisar ou navegar na página \"Explorar\" para encontrares pessoas para seguires ou tentar novamente mais tarde.", "onboarding.follows.search": "Pesquisar", "onboarding.follows.title": "Segue pessoas para começar", @@ -968,7 +966,6 @@ "onboarding.profile.display_name_hint": "O teu nome completo ou o teu nome divertido…", "onboarding.profile.note": "Biografia", "onboarding.profile.note_hint": "Podes @mencionar outras pessoas e usar #etiquetas…", - "onboarding.profile.save_and_continue": "Guardar e continuar", "onboarding.profile.title": "Configuração do perfil", "onboarding.profile.upload_avatar": "Enviar foto de perfil", "onboarding.profile.upload_header": "Enviar cabeçalho do perfil", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 7424a73f12..44dd60505a 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -725,7 +725,6 @@ "notifications_permission_banner.how_to_control": "Чтобы получать уведомления, даже когда Mastodon закрыт, включите уведомления на рабочем столе. После того как вы их включите, вы сможете тонко настроить виды взаимодействий, о которых вы будете оповещены через уведомления на рабочем столе, нажав на кнопку {icon} выше.", "notifications_permission_banner.title": "Будьте в курсе происходящего", "onboarding.follows.back": "Назад", - "onboarding.follows.done": "Готово", "onboarding.follows.empty": "К сожалению, на данный момент предложения отсутствуют. Чтобы найти, на кого подписаться, вы можете просматривать раздел «Актуальное» или воспользоваться поиском.", "onboarding.follows.search": "Поиск", "onboarding.follows.title": "Начните подписываться на людей", @@ -735,7 +734,6 @@ "onboarding.profile.display_name_hint": "Ваше полное имя или псевдоним…", "onboarding.profile.note": "О себе", "onboarding.profile.note_hint": "Вы можете @упоминать других людей, а также использовать #хештеги…", - "onboarding.profile.save_and_continue": "Сохранить и продолжить", "onboarding.profile.title": "Создайте свой профиль", "onboarding.profile.upload_avatar": "Загрузить фото профиля", "onboarding.profile.upload_header": "Загрузить обложку профиля", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index ab9444c0b3..d05c906d68 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -562,12 +562,10 @@ "notifications_permission_banner.how_to_control": "Pro retzire notìficas cando Mastodon no est abertu, abilita is notìficas de iscrivania. Podes controllare cun pretzisione is castas de interatziones chi ingendrant notìficas de iscrivania pro mèdiu de su butone {icon} in subra, cando sunt abilitadas.", "notifications_permission_banner.title": "Non ti perdas mai nudda", "onboarding.follows.back": "A coa", - "onboarding.follows.done": "Fatu", "onboarding.follows.search": "Chirca", "onboarding.follows.title": "Sighi a gente pro cumintzare", "onboarding.profile.display_name": "Nòmine visìbile", "onboarding.profile.note": "Biografia", - "onboarding.profile.save_and_continue": "Sarva e sighi", "onboarding.profile.title": "Cunfiguratzione de profilu", "onboarding.profile.upload_avatar": "Càrriga una fotografia de profilu", "picture_in_picture.restore": "Torra·ddu a ue fiat", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 6f1f37f8bf..126fc4d072 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -636,7 +636,6 @@ "notifications_permission_banner.how_to_control": "Mastodon විවෘතව නොමැති විට දැනුම්දීම් ලබා ගැනීමට, ඩෙස්ක්ටොප් දැනුම්දීම් සක්‍රීය කරන්න. ඒවා සක්‍රීය කළ පසු ඉහත {icon} බොත්තම හරහා ඩෙස්ක්ටොප් දැනුම්දීම් ජනනය කරන්නේ කුමන ආකාරයේ අන්තර්ක්‍රියාද යන්න ඔබට නිශ්චිතවම පාලනය කළ හැකිය.", "notifications_permission_banner.title": "කිසිවක් අතපසු නොකරන්න", "onboarding.follows.back": "ආපසු", - "onboarding.follows.done": "කළා", "onboarding.follows.empty": "අවාසනාවකට, දැන් ප්‍රතිඵල කිසිවක් පෙන්විය නොහැක. අනුගමනය කිරීමට පුද්ගලයින් සොයා ගැනීමට ඔබට සෙවීම භාවිතා කිරීමට හෝ ගවේෂණ පිටුව බ්‍රවුස් කිරීමට උත්සාහ කළ හැකිය, නැතහොත් පසුව නැවත උත්සාහ කරන්න.", "onboarding.follows.search": "සෙවීම", "onboarding.follows.title": "ආරම්භ කිරීමට පුද්ගලයින් අනුගමනය කරන්න", @@ -646,7 +645,6 @@ "onboarding.profile.display_name_hint": "ඔබේ සම්පූර්ණ නම හෝ ඔබේ විනෝදජනක නම…", "onboarding.profile.note": "ජෛව", "onboarding.profile.note_hint": "ඔබට වෙනත් පුද්ගලයින් හෝ #හැෂ් ටැග්…@සඳහන් කළ හැක.", - "onboarding.profile.save_and_continue": "සුරකින්න සහ ඉදිරියට යන්න", "onboarding.profile.title": "පැතිකඩ සැකසුම", "onboarding.profile.upload_avatar": "පැතිකඩ පින්තූරය උඩුගත කරන්න", "onboarding.profile.upload_header": "පැතිකඩ ශීර්ෂය උඩුගත කරන්න", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index b5c7605285..0d073db623 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -634,7 +634,6 @@ "notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.", "notifications_permission_banner.title": "Nenechajte si nič ujsť", "onboarding.follows.back": "Späť", - "onboarding.follows.done": "Hotovo", "onboarding.follows.empty": "Žiaľ, momentálne sa nedajú zobraziť žiadne výsledky. Môžete skúsiť použiť vyhľadávanie alebo navštíviť stránku objavovania a nájsť ľudí, ktorých chcete sledovať, alebo to skúste znova neskôr.", "onboarding.follows.search": "Hľadať", "onboarding.follows.title": "Pre začiatok nasleduj ľudí", @@ -644,7 +643,6 @@ "onboarding.profile.display_name_hint": "Vaše celé meno alebo pokojne aj vtipná prezývka…", "onboarding.profile.note": "Niečo o vás", "onboarding.profile.note_hint": "Môžete @označiť iných ľudí alebo #hashtagy…", - "onboarding.profile.save_and_continue": "Uložiť a pokračovať", "onboarding.profile.title": "Nastavenie profilu", "onboarding.profile.upload_avatar": "Nahrať profilový obrázok", "onboarding.profile.upload_header": "Nahrať obrázok v záhlaví profilu", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index ae96039540..bebc2b3998 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -706,7 +706,6 @@ "notifications_permission_banner.how_to_control": "Če želite prejemati obvestila, ko Mastodon ni odprt, omogočite namizna obvestila. Natančno lahko nadzirate, katere vrste interakcij naj tvorijo namizna obvestila; ko so omogočena, za to uporabite gumb {icon} zgoraj.", "notifications_permission_banner.title": "Nikoli ne zamudite ničesar", "onboarding.follows.back": "Nazaj", - "onboarding.follows.done": "Opravljeno", "onboarding.follows.empty": "Žal trenutno ni mogoče prikazati nobenih rezultatov. Lahko poskusite z iskanjem ali brskanjem po strani za raziskovanje, da poiščete osebe, ki jim želite slediti, ali poskusite znova pozneje.", "onboarding.follows.search": "Išči", "onboarding.follows.title": "Vaš prvi korak je, da sledite ljudem", @@ -716,7 +715,6 @@ "onboarding.profile.display_name_hint": "Vaše polno ime ali lažno ime ...", "onboarding.profile.note": "Biografija", "onboarding.profile.note_hint": "Lahko @omenite druge osebe ali dodate #ključnike ...", - "onboarding.profile.save_and_continue": "Shrani in nadaljuj", "onboarding.profile.title": "Nastavitev profila", "onboarding.profile.upload_avatar": "Naloži sliko profila", "onboarding.profile.upload_header": "Naloži glavo profila", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 0076f1cdec..55d52f66c2 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "Rekomandojmë të mos përdoren emoji të përshtatur tok me url-ra. Fusha të përshtatura që i përmbajnë të dyja llojetn do t’i shfaqin si tekst, në vend se si një lidhje, për të parandaluar ngatërrim të përdoruesve.", "account_edit.field_edit_modal.name_hint": "P.sh., “Sajt personal”", "account_edit.field_edit_modal.name_label": "Etiketë", - "account_edit.field_edit_modal.value_hint": "P.sh., “shembull.me”", + "account_edit.field_edit_modal.url_warning": "Që të shtoni një lidhje, ju lutemi, përfshini {protocol} në fillim.", + "account_edit.field_edit_modal.value_hint": "P.sh., “https://example.me”", "account_edit.field_edit_modal.value_label": "Vlerë", "account_edit.field_reorder_modal.drag_cancel": "Tërheqja u anulua. Fusha “{item}” u la jashtë.", "account_edit.field_reorder_modal.drag_instructions": "Që të risistemoni fusha vetjake, shtypni tastin Space, ose Enter. Teksa tërhiqen, përdorni tastet shigjetë që të lëvizn fushat lart ose poshtë. Shtypni sërish tastin Space ose Enter që të lihet fusha te pozicioni i saj i ri, ose shtypni tastin Esc, që të anulohet.", @@ -953,7 +954,6 @@ "notifications_permission_banner.how_to_control": "Për të marrë njoftime, kur Mastodon-i s’është i hapur, aktivizoni njoftime në desktop. Përmes butoni {icon} më sipër, mund të kontrolloni me përpikëri cilat lloje ndërveprimesh prodhojnë njoftime në desktop, pasi të jenë aktivizuar.", "notifications_permission_banner.title": "Mos t’ju shpëtojë gjë", "onboarding.follows.back": "Mbrapsht", - "onboarding.follows.done": "U bë", "onboarding.follows.empty": "Mjerisht, s’mund të shfaqen përfundime tani. Mund të provoni të përdorni kërkimin, ose të shfletoni faqen e eksplorimit, që të gjeni persona për ndjekje, ose të riprovoni më vonë.", "onboarding.follows.search": "Kërkoni", "onboarding.follows.title": "Që t’ia filloni, ndiqni persona", @@ -963,7 +963,6 @@ "onboarding.profile.display_name_hint": "Emri juaj i plotë, ose ç’të doni…", "onboarding.profile.note": "Jetëshkrim", "onboarding.profile.note_hint": "Mund të @përmendni persona të tjerë, ose #hashtagë…", - "onboarding.profile.save_and_continue": "Ruaje dhe vazhdo", "onboarding.profile.title": "Udjisje profili", "onboarding.profile.upload_avatar": "Ngarkoni foto profili", "onboarding.profile.upload_header": "Ngarkoni krye profili", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 69ea0a1ee7..c9d62e2a9f 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -483,7 +483,6 @@ "onboarding.profile.display_name_hint": "Vaše puno ime ili nadimak…", "onboarding.profile.note": "Biografija", "onboarding.profile.note_hint": "Možete da @pomenete druge ljude ili #heš oznake…", - "onboarding.profile.save_and_continue": "Sačuvaj i nastavi", "onboarding.profile.title": "Podešavanje profila", "onboarding.profile.upload_avatar": "Otpremi sliku profila", "onboarding.profile.upload_header": "Otpremi zaglavlje profila", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index e605920147..7313eaca46 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -483,7 +483,6 @@ "onboarding.profile.display_name_hint": "Ваше пуно име или надимак…", "onboarding.profile.note": "Биографија", "onboarding.profile.note_hint": "Можете да @поменете друге људе или #хеш ознаке…", - "onboarding.profile.save_and_continue": "Сачувај и настави", "onboarding.profile.title": "Подешавање профила", "onboarding.profile.upload_avatar": "Отпреми слику профила", "onboarding.profile.upload_header": "Отпреми заглавље профила", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index e58007425e..158feb561c 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -165,7 +165,8 @@ "account_edit.field_edit_modal.limit_message": "Mobilanvändare kanske inte ser ditt fält i sin helhet.", "account_edit.field_edit_modal.name_hint": "T.ex. “Personlig webbplats”", "account_edit.field_edit_modal.name_label": "Etikett", - "account_edit.field_edit_modal.value_hint": "T.ex. \"example.me”", + "account_edit.field_edit_modal.url_warning": "För att lägga till en länk, vänligen inkludera {protocol} i början.", + "account_edit.field_edit_modal.value_hint": "T.ex. \"https://example.me”", "account_edit.profile_tab.button_label": "Anpassa", "account_note.placeholder": "Klicka för att lägga till anteckning", "admin.dashboard.daily_retention": "Användarlojalitet per dag efter registrering", @@ -851,17 +852,17 @@ "notifications_permission_banner.how_to_control": "För att ta emot aviseringar när Mastodon inte är öppet, aktivera skrivbordsaviseringar. När de är aktiverade kan du styra exakt vilka typer av interaktioner som aviseras via {icon} -knappen ovan.", "notifications_permission_banner.title": "Missa aldrig något", "onboarding.follows.back": "Tillbaka", - "onboarding.follows.done": "Färdig", "onboarding.follows.empty": "Tyvärr kan inga resultat visas just nu. Du kan prova att använda sökfunktionen eller utforska sidan för att hitta personer att följa, eller försök igen senare.", + "onboarding.follows.next": "Nästa: Ställ in din profil", "onboarding.follows.search": "Sök", "onboarding.follows.title": "Följ människor för att komma igång", "onboarding.profile.discoverable": "Gör min profil upptäckbar", "onboarding.profile.discoverable_hint": "När du väljer att vara upptäckbar på Mastodon kan dina inlägg visas i sök- och trendresultat, och din profil kan föreslås för personer med liknande intressen som du.", "onboarding.profile.display_name": "Visningsnamn", "onboarding.profile.display_name_hint": "Fullständigt namn eller ditt roliga namn…", + "onboarding.profile.finish": "Avsluta", "onboarding.profile.note": "Bio", "onboarding.profile.note_hint": "Du kan @nämna andra personer eller #hashtags…", - "onboarding.profile.save_and_continue": "Spara och fortsätt", "onboarding.profile.title": "Konfiguration av profil", "onboarding.profile.upload_avatar": "Ladda upp profilbild", "onboarding.profile.upload_header": "Ladda upp profilbanner", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 52887b8451..6a7aaeb458 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -674,7 +674,6 @@ "notifications_permission_banner.how_to_control": "เพื่อรับการแจ้งเตือนเมื่อ Mastodon ไม่ได้เปิด เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป คุณสามารถควบคุมชนิดของการโต้ตอบที่สร้างการแจ้งเตือนบนเดสก์ท็อปได้อย่างแม่นยำผ่านปุ่ม {icon} ด้านบนเมื่อเปิดใช้งานการแจ้งเตือน", "notifications_permission_banner.title": "ไม่พลาดสิ่งใด", "onboarding.follows.back": "ย้อนกลับ", - "onboarding.follows.done": "เสร็จสิ้น", "onboarding.follows.empty": "น่าเสียดาย ไม่สามารถแสดงผลลัพธ์ได้ในตอนนี้ คุณสามารถลองใช้การค้นหาหรือเรียกดูหน้าสำรวจเพื่อค้นหาผู้คนที่จะติดตาม หรือลองอีกครั้งในภายหลัง", "onboarding.follows.search": "ค้นหา", "onboarding.follows.title": "ติดตามผู้คนเพื่อเริ่มต้นใช้งาน", @@ -684,7 +683,6 @@ "onboarding.profile.display_name_hint": "ชื่อเต็มของคุณหรือชื่อแบบสนุกสนานของคุณ…", "onboarding.profile.note": "ชีวประวัติ", "onboarding.profile.note_hint": "คุณสามารถ @กล่าวถึง ผู้คนอื่น ๆ หรือ #แฮชแท็ก…", - "onboarding.profile.save_and_continue": "บันทึกและดำเนินการต่อ", "onboarding.profile.title": "การตั้งค่าโปรไฟล์", "onboarding.profile.upload_avatar": "อัปโหลดรูปภาพโปรไฟล์", "onboarding.profile.upload_header": "อัปโหลดส่วนหัวโปรไฟล์", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 40ac1f4dee..e84d8a5462 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -28,12 +28,12 @@ "account.block_domain": "{domain} alan adını engelle", "account.block_short": "Engelle", "account.blocked": "Engellendi", - "account.blocking": "Engelleme", - "account.cancel_follow_request": "Takip isteğini geri çek", - "account.copy": "Gönderi bağlantısını kopyala", + "account.blocking": "Engelli", + "account.cancel_follow_request": "Takibi bırak", + "account.copy": "Profil bağlantısını kopyala", "account.direct": "@{name} kullanıcısından özel olarak bahset", "account.disable_notifications": "@{name} kişisinin gönderi bildirimlerini kapat", - "account.domain_blocking": "Alan adını engelleme", + "account.domain_blocking": "Alan adını engelle", "account.edit_note": "Kişisel notu düzenle", "account.edit_profile": "Profili düzenle", "account.edit_profile_short": "Düzenle", @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "Url'lerle birlikte özel emoji kullanmamanızı öneririz. Her ikisini de içeren özel alanlar, kullanıcıların kafasını karıştırmamak için bağlantı yerine yalnızca metin olarak görüntülenir.", "account_edit.field_edit_modal.name_hint": "Örn. \"Kişisel web sitesi\"", "account_edit.field_edit_modal.name_label": "Etiket", - "account_edit.field_edit_modal.value_hint": "Örn. \"example.me\"", + "account_edit.field_edit_modal.url_warning": "Bağlantı eklemek için lütfen başlangıca {protocol} ekleyin.", + "account_edit.field_edit_modal.value_hint": "Örn. \"https://example.me\"", "account_edit.field_edit_modal.value_label": "Değer", "account_edit.field_reorder_modal.drag_cancel": "Sürükleme iptal edildi. \"{item}\" alanı bırakıldı.", "account_edit.field_reorder_modal.drag_end": "\"{item}\" alanı bırakıldı.", @@ -959,7 +960,6 @@ "notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra, yukarıdaki{icon} düğmesi aracılığıyla hangi etkileşim türlerinin masaüstü bildirimi oluşturacağını tam olarak kontrol edebilirsiniz.", "notifications_permission_banner.title": "Hiçbir şeyi kaçırmayın", "onboarding.follows.back": "Geri", - "onboarding.follows.done": "Tamamlandı", "onboarding.follows.empty": "Maalesef şu an bir sonuç gösterilemiyor. Takip edilecek kişileri bulmak için arama veya keşfet sayfasına gözatmayı kullanabilirsiniz veya daha sonra tekrar deneyin.", "onboarding.follows.search": "Ara", "onboarding.follows.title": "Başlamak için insanları takip edin", @@ -969,7 +969,6 @@ "onboarding.profile.display_name_hint": "Tam adınız veya kullanıcı adınız…", "onboarding.profile.note": "Kişisel bilgiler", "onboarding.profile.note_hint": "Diğer insanlara @değinebilir veya #etiketler kullanabilirsiniz…", - "onboarding.profile.save_and_continue": "Kaydet ve ilerle", "onboarding.profile.title": "Profilini ayarla", "onboarding.profile.upload_avatar": "Profil resmi yükle", "onboarding.profile.upload_header": "Profil başlığı yükle", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index 3aa940e952..65522d62d7 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -739,7 +739,6 @@ "notifications_permission_banner.how_to_control": "Щоб отримувати сповіщення, коли Mastodon не відкрито, увімкніть сповіщення стільниці. Ви можете контролювати, які типи взаємодій створюють сповіщення через кнопку {icon} вгорі після їхнього увімкнення.", "notifications_permission_banner.title": "Не проґавте нічого", "onboarding.follows.back": "Назад", - "onboarding.follows.done": "Готово", "onboarding.follows.empty": "На жаль, жоден результат не може бути показаний просто зараз. Ви можете спробувати скористатися пошуком або переглядом сторінки огляду, щоб знайти людей для слідкування або повторіть спробу пізніше.", "onboarding.follows.search": "Пошук", "onboarding.follows.title": "Слідкуйте за людьми, щоб почати", @@ -749,7 +748,6 @@ "onboarding.profile.display_name_hint": "Ваше повне ім'я або ваш псевдонім…", "onboarding.profile.note": "Біографія", "onboarding.profile.note_hint": "Ви можете @згадувати інших людей або #гештеґи…", - "onboarding.profile.save_and_continue": "Зберегти і продовжити", "onboarding.profile.title": "Налаштування профілю", "onboarding.profile.upload_avatar": "Завантажити зображення профілю", "onboarding.profile.upload_header": "Завантажити заголовок профілю", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 0879105771..911d1c0fcb 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "Không nên dùng emoji tùy chỉnh với url. Trường tùy chỉnh chứa cả hai sẽ chỉ hiển thị văn bản, để ngăn chặn việc bối rối.", "account_edit.field_edit_modal.name_hint": "Vd: “Website cá nhân”", "account_edit.field_edit_modal.name_label": "Nhãn", - "account_edit.field_edit_modal.value_hint": "Vd: “example.me”", + "account_edit.field_edit_modal.url_warning": "Để thêm một liên kết, vui lòng đặt {protocol} ở đầu.", + "account_edit.field_edit_modal.value_hint": "Vd: “https://example.me”", "account_edit.field_edit_modal.value_label": "Giá trị", "account_edit.field_reorder_modal.drag_cancel": "Đã hủy kéo. Trường \"{item}\" đã được thả.", "account_edit.field_reorder_modal.drag_end": "Trường \"{item}\" đã được thả.", @@ -959,17 +960,17 @@ "notifications_permission_banner.how_to_control": "Hãy bật thông báo trên màn hình để không bỏ lỡ những thông báo từ Mastodon. Sau khi bật, bạn có thể lựa chọn từng loại thông báo khác nhau bằng nút {icon} bên dưới.", "notifications_permission_banner.title": "Không bỏ lỡ điều thú vị nào", "onboarding.follows.back": "Quay lại", - "onboarding.follows.done": "Xong", "onboarding.follows.empty": "Không có kết quả có thể được hiển thị lúc này. Bạn có thể thử sử dụng tính năng tìm kiếm hoặc duyệt qua trang khám phá để tìm những người theo dõi hoặc thử lại sau.", + "onboarding.follows.next": "Tiếp theo: Thiết lập tài khoản", "onboarding.follows.search": "Tìm kiếm", "onboarding.follows.title": "Tìm người để theo dõi", "onboarding.profile.discoverable": "Bật khám phá cho hồ sơ của tôi", "onboarding.profile.discoverable_hint": "Khi bạn bật khám phá trên Mastodon, các tút của bạn có thể xuất hiện trong kết quả tìm kiếm và xu hướng, đồng thời hồ sơ của bạn sẽ được đề xuất cho những người có cùng sở thích với bạn.", "onboarding.profile.display_name": "Tên gọi", "onboarding.profile.display_name_hint": "Tên thật hay biệt danh đều được…", + "onboarding.profile.finish": "Hoàn thành", "onboarding.profile.note": "Giới thiệu", "onboarding.profile.note_hint": "Bạn có thể @aiđó hoặc #hashtags…", - "onboarding.profile.save_and_continue": "Lưu và tiếp tục", "onboarding.profile.title": "Thiết lập hồ sơ", "onboarding.profile.upload_avatar": "Tải lên ảnh đại diện", "onboarding.profile.upload_header": "Tải lên ảnh bìa", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 7d4685116c..9002fd1b01 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -173,7 +173,6 @@ "account_edit.field_edit_modal.link_emoji_warning": "我们建议不要同时使用自定义表情和网址。同时包含两者的自定义字段将会显示为纯文本而不是链接形式,以避免用户混淆。", "account_edit.field_edit_modal.name_hint": "例如:“个人网站”", "account_edit.field_edit_modal.name_label": "标签", - "account_edit.field_edit_modal.value_hint": "例如:“example.me”", "account_edit.field_edit_modal.value_label": "值", "account_edit.field_reorder_modal.drag_cancel": "拖拽已终止。字段“{item}”已被丢弃。", "account_edit.field_reorder_modal.drag_end": "字段“{item}”已被丢弃。", @@ -959,7 +958,6 @@ "notifications_permission_banner.how_to_control": "启用桌面通知以在 Mastodon 未打开时接收通知。你可以通过交互通过上面的 {icon} 按钮来精细控制可以发送桌面通知的交互类型。", "notifications_permission_banner.title": "精彩不容错过", "onboarding.follows.back": "返回", - "onboarding.follows.done": "完成", "onboarding.follows.empty": "很抱歉,现在无法显示任何结果。你可以尝试使用搜索或浏览探索页面来查找要关注的人,或稍后再试。", "onboarding.follows.search": "搜索", "onboarding.follows.title": "关注用户,玩转 Mastodon", @@ -969,7 +967,6 @@ "onboarding.profile.display_name_hint": "你的全名或昵称…", "onboarding.profile.note": "简介", "onboarding.profile.note_hint": "你可以提及 @其他人 或使用 #话题…", - "onboarding.profile.save_and_continue": "保存并继续", "onboarding.profile.title": "设置个人资料", "onboarding.profile.upload_avatar": "上传头像", "onboarding.profile.upload_header": "上传账号封面图", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 4b6bd119ea..e7e449a239 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -547,7 +547,6 @@ "notifications_permission_banner.enable": "啟用桌面通知", "notifications_permission_banner.how_to_control": "只要啟用桌面通知,便可在 Mastodon 網站沒有打開時收到通知。在已經啟用桌面通知的時候,你可以透過上面的 {icon} 按鈕準確控制哪些類型的互動會產生桌面通知。", "notifications_permission_banner.title": "不放過任何事情", - "onboarding.follows.done": "完成", "onboarding.follows.empty": "很遺憾,現在無法顯示任何結果。你可以嘗試搜尋或瀏覽探索頁面來找使用者來追蹤,或者稍後再試。", "onboarding.follows.search": "搜尋", "onboarding.profile.discoverable": "將個人檔案設為可被搜尋", @@ -556,7 +555,6 @@ "onboarding.profile.display_name_hint": "你的全名或暱稱…", "onboarding.profile.note": "簡介", "onboarding.profile.note_hint": "你可以 @提及他人 或使用 #標籤…", - "onboarding.profile.save_and_continue": "儲存並繼續", "onboarding.profile.title": "個人檔案設定", "onboarding.profile.upload_avatar": "上載個人檔案頭像", "onboarding.profile.upload_header": "上載個人檔案橫幅圖片", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index 913a0ab9d4..7dffcfc992 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -173,7 +173,8 @@ "account_edit.field_edit_modal.link_emoji_warning": "我們不建議於 URL 中使用自訂 emoji 表情符號。為了避免使用者混淆,包含兩者之自訂欄位將僅顯示為文字,而不是顯示為連結。", "account_edit.field_edit_modal.name_hint": "例如:「個人網站」", "account_edit.field_edit_modal.name_label": "標籤", - "account_edit.field_edit_modal.value_hint": "例如「example.me」", + "account_edit.field_edit_modal.url_warning": "如欲新增連結,請於開頭包含 {protocol}。", + "account_edit.field_edit_modal.value_hint": "例如「https://example.me」", "account_edit.field_edit_modal.value_label": "值", "account_edit.field_reorder_modal.drag_cancel": "拖放操作已取消。欄位「{item}」已放置。", "account_edit.field_reorder_modal.drag_end": "欄位「{item}」已放置。", @@ -959,17 +960,17 @@ "notifications_permission_banner.how_to_control": "啟用桌面通知以於 Mastodon 沒有開啟的時候接收通知。啟用桌面通知後,您可以透過上面的 {icon} 按鈕準確的控制哪些類型的互動會產生桌面通知。", "notifications_permission_banner.title": "不要錯過任何東西!", "onboarding.follows.back": "返回", - "onboarding.follows.done": "完成", "onboarding.follows.empty": "很遺憾,目前未能顯示任何結果。您可以嘗試使用搜尋、瀏覽探索頁面以找尋人們跟隨、或稍候再試。", + "onboarding.follows.next": "下一步:設定您的個人檔案", "onboarding.follows.search": "搜尋", "onboarding.follows.title": "開始跟隨一些人吧", "onboarding.profile.discoverable": "使我的個人檔案可以被找到", "onboarding.profile.discoverable_hint": "當您於 Mastodon 上選擇加入可發現性時,您的嘟文可能會顯示於搜尋結果與趨勢中。您的個人檔案可能會被推薦至與您志趣相投的人。", "onboarding.profile.display_name": "顯示名稱", "onboarding.profile.display_name_hint": "完整名稱或暱稱...", + "onboarding.profile.finish": "完成", "onboarding.profile.note": "個人簡介", "onboarding.profile.note_hint": "您可以 @mention 其他人或者使用 #主題標籤...", - "onboarding.profile.save_and_continue": "儲存並繼續", "onboarding.profile.title": "個人檔案設定", "onboarding.profile.upload_avatar": "上傳個人檔案大頭貼", "onboarding.profile.upload_header": "上傳個人檔案封面圖片", diff --git a/app/javascript/material-icons/400-20px/mood-fill.svg b/app/javascript/material-icons/400-20px/mood-fill.svg index febf012902..81a779d4f5 100644 --- a/app/javascript/material-icons/400-20px/mood-fill.svg +++ b/app/javascript/material-icons/400-20px/mood-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-20px/mood.svg b/app/javascript/material-icons/400-20px/mood.svg index 898697c4cd..c4dd3904cc 100644 --- a/app/javascript/material-icons/400-20px/mood.svg +++ b/app/javascript/material-icons/400-20px/mood.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-20px/warning-fill.svg b/app/javascript/material-icons/400-20px/warning-fill.svg index a4fc7efc53..f36c8d87d1 100644 --- a/app/javascript/material-icons/400-20px/warning-fill.svg +++ b/app/javascript/material-icons/400-20px/warning-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-20px/warning.svg b/app/javascript/material-icons/400-20px/warning.svg index d67ad689aa..5c4a6ccd87 100644 --- a/app/javascript/material-icons/400-20px/warning.svg +++ b/app/javascript/material-icons/400-20px/warning.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/account_circle-fill.svg b/app/javascript/material-icons/400-24px/account_circle-fill.svg index 1bf9d57a31..5a5517d980 100644 --- a/app/javascript/material-icons/400-24px/account_circle-fill.svg +++ b/app/javascript/material-icons/400-24px/account_circle-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/account_circle.svg b/app/javascript/material-icons/400-24px/account_circle.svg index ce59194be0..70a0ccde4f 100644 --- a/app/javascript/material-icons/400-24px/account_circle.svg +++ b/app/javascript/material-icons/400-24px/account_circle.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/alternate_email-fill.svg b/app/javascript/material-icons/400-24px/alternate_email-fill.svg index 7648cf9755..d586e40677 100644 --- a/app/javascript/material-icons/400-24px/alternate_email-fill.svg +++ b/app/javascript/material-icons/400-24px/alternate_email-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/alternate_email.svg b/app/javascript/material-icons/400-24px/alternate_email.svg index 7648cf9755..d586e40677 100644 --- a/app/javascript/material-icons/400-24px/alternate_email.svg +++ b/app/javascript/material-icons/400-24px/alternate_email.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/badge-fill.svg b/app/javascript/material-icons/400-24px/badge-fill.svg index 2f7175b7f1..88ac07340c 100644 --- a/app/javascript/material-icons/400-24px/badge-fill.svg +++ b/app/javascript/material-icons/400-24px/badge-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/badge.svg b/app/javascript/material-icons/400-24px/badge.svg index d413363a4c..977a04acfa 100644 --- a/app/javascript/material-icons/400-24px/badge.svg +++ b/app/javascript/material-icons/400-24px/badge.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/block-fill.svg b/app/javascript/material-icons/400-24px/block-fill.svg index 2d3801613c..8b708f27d8 100644 --- a/app/javascript/material-icons/400-24px/block-fill.svg +++ b/app/javascript/material-icons/400-24px/block-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/block.svg b/app/javascript/material-icons/400-24px/block.svg index e9df4cdd35..8d798c9eab 100644 --- a/app/javascript/material-icons/400-24px/block.svg +++ b/app/javascript/material-icons/400-24px/block.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/breaking_news-fill.svg b/app/javascript/material-icons/400-24px/breaking_news-fill.svg index 633ca48d57..38f563b524 100644 --- a/app/javascript/material-icons/400-24px/breaking_news-fill.svg +++ b/app/javascript/material-icons/400-24px/breaking_news-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/breaking_news.svg b/app/javascript/material-icons/400-24px/breaking_news.svg index c043f11a8b..9a1242b443 100644 --- a/app/javascript/material-icons/400-24px/breaking_news.svg +++ b/app/javascript/material-icons/400-24px/breaking_news.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/contact_mail-fill.svg b/app/javascript/material-icons/400-24px/contact_mail-fill.svg index c42c799955..45edf82458 100644 --- a/app/javascript/material-icons/400-24px/contact_mail-fill.svg +++ b/app/javascript/material-icons/400-24px/contact_mail-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/contact_mail.svg b/app/javascript/material-icons/400-24px/contact_mail.svg index 4547c48ec5..4d54d11570 100644 --- a/app/javascript/material-icons/400-24px/contact_mail.svg +++ b/app/javascript/material-icons/400-24px/contact_mail.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/database-fill.svg b/app/javascript/material-icons/400-24px/database-fill.svg index 3520f69614..977a1abd1d 100644 --- a/app/javascript/material-icons/400-24px/database-fill.svg +++ b/app/javascript/material-icons/400-24px/database-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/error-fill.svg b/app/javascript/material-icons/400-24px/error-fill.svg index 5125e9acce..92a5cf4abe 100644 --- a/app/javascript/material-icons/400-24px/error-fill.svg +++ b/app/javascript/material-icons/400-24px/error-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/error.svg b/app/javascript/material-icons/400-24px/error.svg index 86c4555326..9a83c93062 100644 --- a/app/javascript/material-icons/400-24px/error.svg +++ b/app/javascript/material-icons/400-24px/error.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/find_in_page-fill.svg b/app/javascript/material-icons/400-24px/find_in_page-fill.svg index 146f838a27..b180354536 100644 --- a/app/javascript/material-icons/400-24px/find_in_page-fill.svg +++ b/app/javascript/material-icons/400-24px/find_in_page-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/find_in_page.svg b/app/javascript/material-icons/400-24px/find_in_page.svg index f21c2786ca..1133db1429 100644 --- a/app/javascript/material-icons/400-24px/find_in_page.svg +++ b/app/javascript/material-icons/400-24px/find_in_page.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/format_quote.svg b/app/javascript/material-icons/400-24px/format_quote.svg index c354385ea9..17a5108568 100644 --- a/app/javascript/material-icons/400-24px/format_quote.svg +++ b/app/javascript/material-icons/400-24px/format_quote.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/format_quote_off.svg b/app/javascript/material-icons/400-24px/format_quote_off.svg index 8410c3924b..38a92eca2e 100644 --- a/app/javascript/material-icons/400-24px/format_quote_off.svg +++ b/app/javascript/material-icons/400-24px/format_quote_off.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/forward_5-fill.svg b/app/javascript/material-icons/400-24px/forward_5-fill.svg index bc0119a640..d0b8eb42da 100644 --- a/app/javascript/material-icons/400-24px/forward_5-fill.svg +++ b/app/javascript/material-icons/400-24px/forward_5-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/forward_5.svg b/app/javascript/material-icons/400-24px/forward_5.svg index bc0119a640..d0b8eb42da 100644 --- a/app/javascript/material-icons/400-24px/forward_5.svg +++ b/app/javascript/material-icons/400-24px/forward_5.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/group-fill.svg b/app/javascript/material-icons/400-24px/group-fill.svg index c0d6cef5c5..6ba4667f67 100644 --- a/app/javascript/material-icons/400-24px/group-fill.svg +++ b/app/javascript/material-icons/400-24px/group-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/group.svg b/app/javascript/material-icons/400-24px/group.svg index dbc2c937e4..03590ed624 100644 --- a/app/javascript/material-icons/400-24px/group.svg +++ b/app/javascript/material-icons/400-24px/group.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/help-fill.svg b/app/javascript/material-icons/400-24px/help-fill.svg index 6fd48ca5dd..afef63fa60 100644 --- a/app/javascript/material-icons/400-24px/help-fill.svg +++ b/app/javascript/material-icons/400-24px/help-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/help.svg b/app/javascript/material-icons/400-24px/help.svg index 0f10691c55..8aa823bf06 100644 --- a/app/javascript/material-icons/400-24px/help.svg +++ b/app/javascript/material-icons/400-24px/help.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/inbox-fill.svg b/app/javascript/material-icons/400-24px/inbox-fill.svg index 15ae2d8f3c..f9b740f214 100644 --- a/app/javascript/material-icons/400-24px/inbox-fill.svg +++ b/app/javascript/material-icons/400-24px/inbox-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/inbox.svg b/app/javascript/material-icons/400-24px/inbox.svg index 32c727e810..042b6ee9e8 100644 --- a/app/javascript/material-icons/400-24px/inbox.svg +++ b/app/javascript/material-icons/400-24px/inbox.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/info-fill.svg b/app/javascript/material-icons/400-24px/info-fill.svg index 0232e17ad0..1495472208 100644 --- a/app/javascript/material-icons/400-24px/info-fill.svg +++ b/app/javascript/material-icons/400-24px/info-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/info.svg b/app/javascript/material-icons/400-24px/info.svg index 05606f4e59..a0b97f8a5f 100644 --- a/app/javascript/material-icons/400-24px/info.svg +++ b/app/javascript/material-icons/400-24px/info.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/list_alt-fill.svg b/app/javascript/material-icons/400-24px/list_alt-fill.svg index 6aa8b50823..b84dba8fd6 100644 --- a/app/javascript/material-icons/400-24px/list_alt-fill.svg +++ b/app/javascript/material-icons/400-24px/list_alt-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/list_alt.svg b/app/javascript/material-icons/400-24px/list_alt.svg index cca8ab1955..b3aad84d73 100644 --- a/app/javascript/material-icons/400-24px/list_alt.svg +++ b/app/javascript/material-icons/400-24px/list_alt.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/lock-fill.svg b/app/javascript/material-icons/400-24px/lock-fill.svg index 0815d78418..fd34be4c36 100644 --- a/app/javascript/material-icons/400-24px/lock-fill.svg +++ b/app/javascript/material-icons/400-24px/lock-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/lock.svg b/app/javascript/material-icons/400-24px/lock.svg index 20b9e3984e..ecc5cd8992 100644 --- a/app/javascript/material-icons/400-24px/lock.svg +++ b/app/javascript/material-icons/400-24px/lock.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/manufacturing-fill.svg b/app/javascript/material-icons/400-24px/manufacturing-fill.svg index f19180759c..53b05e010f 100644 --- a/app/javascript/material-icons/400-24px/manufacturing-fill.svg +++ b/app/javascript/material-icons/400-24px/manufacturing-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/manufacturing.svg b/app/javascript/material-icons/400-24px/manufacturing.svg index f19180759c..53b05e010f 100644 --- a/app/javascript/material-icons/400-24px/manufacturing.svg +++ b/app/javascript/material-icons/400-24px/manufacturing.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/mood-fill.svg b/app/javascript/material-icons/400-24px/mood-fill.svg index 9480d0fb92..29ac126f1a 100644 --- a/app/javascript/material-icons/400-24px/mood-fill.svg +++ b/app/javascript/material-icons/400-24px/mood-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/mood.svg b/app/javascript/material-icons/400-24px/mood.svg index 46cafa7680..0ade2b1b6a 100644 --- a/app/javascript/material-icons/400-24px/mood.svg +++ b/app/javascript/material-icons/400-24px/mood.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/music_note-fill.svg b/app/javascript/material-icons/400-24px/music_note-fill.svg index b10ad1921a..6ce5eff001 100644 --- a/app/javascript/material-icons/400-24px/music_note-fill.svg +++ b/app/javascript/material-icons/400-24px/music_note-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/music_note.svg b/app/javascript/material-icons/400-24px/music_note.svg index b10ad1921a..6ce5eff001 100644 --- a/app/javascript/material-icons/400-24px/music_note.svg +++ b/app/javascript/material-icons/400-24px/music_note.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/person-fill.svg b/app/javascript/material-icons/400-24px/person-fill.svg index 73ef1efc10..321281d2cf 100644 --- a/app/javascript/material-icons/400-24px/person-fill.svg +++ b/app/javascript/material-icons/400-24px/person-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/person.svg b/app/javascript/material-icons/400-24px/person.svg index a3f6b246c8..c304462dba 100644 --- a/app/javascript/material-icons/400-24px/person.svg +++ b/app/javascript/material-icons/400-24px/person.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/person_add-fill.svg b/app/javascript/material-icons/400-24px/person_add-fill.svg index 3fa7f65288..d7cba65680 100644 --- a/app/javascript/material-icons/400-24px/person_add-fill.svg +++ b/app/javascript/material-icons/400-24px/person_add-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/person_add.svg b/app/javascript/material-icons/400-24px/person_add.svg index 39b592bf04..cfaeac0071 100644 --- a/app/javascript/material-icons/400-24px/person_add.svg +++ b/app/javascript/material-icons/400-24px/person_add.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/person_alert-fill.svg b/app/javascript/material-icons/400-24px/person_alert-fill.svg index ddbecc6053..4e88d53dd3 100644 --- a/app/javascript/material-icons/400-24px/person_alert-fill.svg +++ b/app/javascript/material-icons/400-24px/person_alert-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/person_alert.svg b/app/javascript/material-icons/400-24px/person_alert.svg index 292ea32154..2b81be1c70 100644 --- a/app/javascript/material-icons/400-24px/person_alert.svg +++ b/app/javascript/material-icons/400-24px/person_alert.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/person_remove-fill.svg b/app/javascript/material-icons/400-24px/person_remove-fill.svg index 239c7a49dc..e3a9c2f7ad 100644 --- a/app/javascript/material-icons/400-24px/person_remove-fill.svg +++ b/app/javascript/material-icons/400-24px/person_remove-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/person_remove.svg b/app/javascript/material-icons/400-24px/person_remove.svg index 725da3649b..f075b09d61 100644 --- a/app/javascript/material-icons/400-24px/person_remove.svg +++ b/app/javascript/material-icons/400-24px/person_remove.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/photo_camera-fill.svg b/app/javascript/material-icons/400-24px/photo_camera-fill.svg new file mode 100644 index 0000000000..6a9918605d --- /dev/null +++ b/app/javascript/material-icons/400-24px/photo_camera-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/photo_camera.svg b/app/javascript/material-icons/400-24px/photo_camera.svg index 4621435ce0..e863b0dfa5 100644 --- a/app/javascript/material-icons/400-24px/photo_camera.svg +++ b/app/javascript/material-icons/400-24px/photo_camera.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/public-fill.svg b/app/javascript/material-icons/400-24px/public-fill.svg index 104f26e133..ccc5efef2a 100644 --- a/app/javascript/material-icons/400-24px/public-fill.svg +++ b/app/javascript/material-icons/400-24px/public-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/public.svg b/app/javascript/material-icons/400-24px/public.svg index 104f26e133..ccc5efef2a 100644 --- a/app/javascript/material-icons/400-24px/public.svg +++ b/app/javascript/material-icons/400-24px/public.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/replace_image-fill.svg b/app/javascript/material-icons/400-24px/replace_image-fill.svg new file mode 100644 index 0000000000..e80c7b37f3 --- /dev/null +++ b/app/javascript/material-icons/400-24px/replace_image-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/replace_image.svg b/app/javascript/material-icons/400-24px/replace_image.svg new file mode 100644 index 0000000000..a1a223c144 --- /dev/null +++ b/app/javascript/material-icons/400-24px/replace_image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/replay_5-fill.svg b/app/javascript/material-icons/400-24px/replay_5-fill.svg index c0c259829e..d4dd38b30e 100644 --- a/app/javascript/material-icons/400-24px/replay_5-fill.svg +++ b/app/javascript/material-icons/400-24px/replay_5-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/replay_5.svg b/app/javascript/material-icons/400-24px/replay_5.svg index c0c259829e..d4dd38b30e 100644 --- a/app/javascript/material-icons/400-24px/replay_5.svg +++ b/app/javascript/material-icons/400-24px/replay_5.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/safety_check-fill.svg b/app/javascript/material-icons/400-24px/safety_check-fill.svg index b38091a8ec..affaa14659 100644 --- a/app/javascript/material-icons/400-24px/safety_check-fill.svg +++ b/app/javascript/material-icons/400-24px/safety_check-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/safety_check.svg b/app/javascript/material-icons/400-24px/safety_check.svg index 87bdba21fe..3f5d4726a1 100644 --- a/app/javascript/material-icons/400-24px/safety_check.svg +++ b/app/javascript/material-icons/400-24px/safety_check.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/share.svg b/app/javascript/material-icons/400-24px/share.svg index 23e617121c..6791f0ff25 100644 --- a/app/javascript/material-icons/400-24px/share.svg +++ b/app/javascript/material-icons/400-24px/share.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/shield_question-fill.svg b/app/javascript/material-icons/400-24px/shield_question-fill.svg index c647567a00..b0de7067eb 100644 --- a/app/javascript/material-icons/400-24px/shield_question-fill.svg +++ b/app/javascript/material-icons/400-24px/shield_question-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/shield_question.svg b/app/javascript/material-icons/400-24px/shield_question.svg index 342ac0800e..dce64741d8 100644 --- a/app/javascript/material-icons/400-24px/shield_question.svg +++ b/app/javascript/material-icons/400-24px/shield_question.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/smart_toy-fill.svg b/app/javascript/material-icons/400-24px/smart_toy-fill.svg index df417f5ff7..eb3fe24a76 100644 --- a/app/javascript/material-icons/400-24px/smart_toy-fill.svg +++ b/app/javascript/material-icons/400-24px/smart_toy-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/smart_toy.svg b/app/javascript/material-icons/400-24px/smart_toy.svg index b84efc73b1..68190f9ced 100644 --- a/app/javascript/material-icons/400-24px/smart_toy.svg +++ b/app/javascript/material-icons/400-24px/smart_toy.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/speed.svg b/app/javascript/material-icons/400-24px/speed.svg index 0837877f42..8b28d172b4 100644 --- a/app/javascript/material-icons/400-24px/speed.svg +++ b/app/javascript/material-icons/400-24px/speed.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/visibility-fill.svg b/app/javascript/material-icons/400-24px/visibility-fill.svg index 44b5f4c606..84b06b82e2 100644 --- a/app/javascript/material-icons/400-24px/visibility-fill.svg +++ b/app/javascript/material-icons/400-24px/visibility-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/visibility.svg b/app/javascript/material-icons/400-24px/visibility.svg index 8fe45d09af..546009d226 100644 --- a/app/javascript/material-icons/400-24px/visibility.svg +++ b/app/javascript/material-icons/400-24px/visibility.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/warning-fill.svg b/app/javascript/material-icons/400-24px/warning-fill.svg index c3727d3f57..c37c0f3abc 100644 --- a/app/javascript/material-icons/400-24px/warning-fill.svg +++ b/app/javascript/material-icons/400-24px/warning-fill.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/warning.svg b/app/javascript/material-icons/400-24px/warning.svg index 238299e606..7fe972ff27 100644 --- a/app/javascript/material-icons/400-24px/warning.svg +++ b/app/javascript/material-icons/400-24px/warning.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 22a788e2d0..a89c9cca5c 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -2010,7 +2010,9 @@ body > [data-popper-placement] { .account { padding: 16px; - &:not(&--without-border) { + // Using :where keeps specificity low, allowing for existing + // .account overrides to still apply + &:where(:not(&--without-border)) { border-bottom: 1px solid var(--color-border-primary); } @@ -11509,6 +11511,9 @@ noscript { .column-footer { padding: 16px; + position: sticky; + bottom: 0; + background: var(--color-bg-primary); } .lists-scrollable { diff --git a/app/javascript/styles/mastodon/theme/_dark.scss b/app/javascript/styles/mastodon/theme/_dark.scss index 9af3385d45..a22c7cc8f4 100644 --- a/app/javascript/styles/mastodon/theme/_dark.scss +++ b/app/javascript/styles/mastodon/theme/_dark.scss @@ -81,6 +81,11 @@ var(--color-bg-brand-base), var(--overlay-strength-brand) )}; + --color-bg-brand-softer-solid: color-mix( + in srgb, + var(--color-bg-primary), + var(--color-bg-brand-base) var(--overlay-strength-brand) + ); // Error --overlay-strength-error: 10%; diff --git a/app/javascript/styles/mastodon/theme/_light.scss b/app/javascript/styles/mastodon/theme/_light.scss index 64390017b3..47d32320fa 100644 --- a/app/javascript/styles/mastodon/theme/_light.scss +++ b/app/javascript/styles/mastodon/theme/_light.scss @@ -78,6 +78,11 @@ #0012d8, var(--overlay-strength-brand) )}; + --color-bg-brand-softer-solid: color-mix( + in srgb, + var(--color-bg-primary), + var(--color-bg-brand-base) var(--overlay-strength-brand) + ); // Error --overlay-strength-error: 5%; diff --git a/app/lib/activitypub/activity/add.rb b/app/lib/activitypub/activity/add.rb index c86862c0a3..7b4576a06a 100644 --- a/app/lib/activitypub/activity/add.rb +++ b/app/lib/activitypub/activity/add.rb @@ -12,6 +12,10 @@ class ActivityPub::Activity::Add < ActivityPub::Activity else add_featured end + when @account.collections_url + return unless Mastodon::Feature.collections_federation_enabled? + + add_collection else @collection = @account.collections.find_by(uri: @json['target']) add_collection_item if @collection && Mastodon::Feature.collections_federation_enabled? @@ -34,6 +38,10 @@ class ActivityPub::Activity::Add < ActivityPub::Activity FeaturedTag.create!(account: @account, name: name) if name.present? end + def add_collection + ActivityPub::ProcessFeaturedCollectionService.new.call(@account, @object) + end + def add_collection_item ActivityPub::ProcessFeaturedItemService.new.call(@collection, @object) end diff --git a/app/lib/activitypub/activity/remove.rb b/app/lib/activitypub/activity/remove.rb index f5cbef6757..4a1f8d80be 100644 --- a/app/lib/activitypub/activity/remove.rb +++ b/app/lib/activitypub/activity/remove.rb @@ -12,6 +12,12 @@ class ActivityPub::Activity::Remove < ActivityPub::Activity else remove_featured end + when @account.collections_url + remove_collection + else + @collection = @account.collections.find_by(uri: @json['target']) + + remove_collection_item if @collection end end @@ -34,4 +40,16 @@ class ActivityPub::Activity::Remove < ActivityPub::Activity featured_tag = FeaturedTag.by_name(name).find_by(account: @account) featured_tag&.destroy! end + + def remove_collection + collection = @account.collections.find_by(uri: value_or_id(@object)) + + collection&.destroy! + end + + def remove_collection_item + collection_item = @collection.collection_items.find_by(uri: value_or_id(@object)) + + collection_item&.destroy! + end end diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index fffc80a8e8..3ca313ddd0 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -216,7 +216,6 @@ class UserMailer < Devise::Mailer def terms_of_service_changed(user, terms_of_service) @resource = user @terms_of_service = terms_of_service - @markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, escape_html: true, no_images: true) I18n.with_locale(locale) do mail subject: default_i18n_subject diff --git a/app/models/account.rb b/app/models/account.rb index 209501de47..60868b44dc 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -15,6 +15,7 @@ # avatar_remote_url :string # avatar_storage_schema_version :integer # avatar_updated_at :datetime +# collections_url :string # discoverable :boolean # display_name :string default(""), not null # domain :string diff --git a/app/models/account_migration.rb b/app/models/account_migration.rb index 6cdc7128ef..b4ab0d604b 100644 --- a/app/models/account_migration.rb +++ b/app/models/account_migration.rb @@ -5,12 +5,12 @@ # Table name: account_migrations # # id :bigint(8) not null, primary key -# account_id :bigint(8) # acct :string default(""), not null # followers_count :bigint(8) default(0), not null -# target_account_id :bigint(8) # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) +# target_account_id :bigint(8) # class AccountMigration < ApplicationRecord diff --git a/app/models/account_moderation_note.rb b/app/models/account_moderation_note.rb index ca7f8e3d5f..a6d8feffcf 100644 --- a/app/models/account_moderation_note.rb +++ b/app/models/account_moderation_note.rb @@ -6,10 +6,10 @@ # # id :bigint(8) not null, primary key # content :text not null -# account_id :bigint(8) not null -# target_account_id :bigint(8) not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null +# target_account_id :bigint(8) not null # class AccountModerationNote < ApplicationRecord diff --git a/app/models/account_relationship_severance_event.rb b/app/models/account_relationship_severance_event.rb index c1269fad6d..115c63c062 100644 --- a/app/models/account_relationship_severance_event.rb +++ b/app/models/account_relationship_severance_event.rb @@ -6,12 +6,12 @@ # Table name: account_relationship_severance_events # # id :bigint(8) not null, primary key -# account_id :bigint(8) not null -# relationship_severance_event_id :bigint(8) not null -# created_at :datetime not null -# updated_at :datetime not null # followers_count :integer default(0), not null # following_count :integer default(0), not null +# created_at :datetime not null +# updated_at :datetime not null +# account_id :bigint(8) not null +# relationship_severance_event_id :bigint(8) not null # class AccountRelationshipSeveranceEvent < ApplicationRecord self.ignored_columns += %w( diff --git a/app/models/account_stat.rb b/app/models/account_stat.rb index 14aa7ef800..137211e66b 100644 --- a/app/models/account_stat.rb +++ b/app/models/account_stat.rb @@ -5,13 +5,13 @@ # Table name: account_stats # # id :bigint(8) not null, primary key -# account_id :bigint(8) not null -# statuses_count :bigint(8) default(0), not null -# following_count :bigint(8) default(0), not null # followers_count :bigint(8) default(0), not null +# following_count :bigint(8) default(0), not null +# last_status_at :datetime +# statuses_count :bigint(8) default(0), not null # created_at :datetime not null # updated_at :datetime not null -# last_status_at :datetime +# account_id :bigint(8) not null # class AccountStat < ApplicationRecord diff --git a/app/models/account_statuses_cleanup_policy.rb b/app/models/account_statuses_cleanup_policy.rb index 0915003c8b..94e82ab63f 100644 --- a/app/models/account_statuses_cleanup_policy.rb +++ b/app/models/account_statuses_cleanup_policy.rb @@ -5,19 +5,19 @@ # Table name: account_statuses_cleanup_policies # # id :bigint(8) not null, primary key -# account_id :bigint(8) not null # enabled :boolean default(TRUE), not null -# min_status_age :integer default(1209600), not null # keep_direct :boolean default(TRUE), not null +# keep_media :boolean default(FALSE), not null # keep_pinned :boolean default(TRUE), not null # keep_polls :boolean default(FALSE), not null -# keep_media :boolean default(FALSE), not null -# keep_self_fav :boolean default(TRUE), not null # keep_self_bookmark :boolean default(TRUE), not null +# keep_self_fav :boolean default(TRUE), not null # min_favs :integer # min_reblogs :integer +# min_status_age :integer default(1209600), not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null # class AccountStatusesCleanupPolicy < ApplicationRecord include Redisable diff --git a/app/models/account_summary.rb b/app/models/account_summary.rb index 7522a70193..b09336ff48 100644 --- a/app/models/account_summary.rb +++ b/app/models/account_summary.rb @@ -4,9 +4,9 @@ # # Table name: account_summaries # -# account_id :bigint(8) primary key # language :string # sensitive :boolean +# account_id :bigint(8) primary key # class AccountSummary < ApplicationRecord diff --git a/app/models/account_warning.rb b/app/models/account_warning.rb index 9058f73fb8..0572e8d22d 100644 --- a/app/models/account_warning.rb +++ b/app/models/account_warning.rb @@ -5,15 +5,15 @@ # Table name: account_warnings # # id :bigint(8) not null, primary key -# account_id :bigint(8) -# target_account_id :bigint(8) # action :integer default("none"), not null +# overruled_at :datetime +# status_ids :string is an Array # text :text default(""), not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) # report_id :bigint(8) -# status_ids :string is an Array -# overruled_at :datetime +# target_account_id :bigint(8) # class AccountWarning < ApplicationRecord diff --git a/app/models/account_warning_preset.rb b/app/models/account_warning_preset.rb index c20f683cff..d9fc4b4af3 100644 --- a/app/models/account_warning_preset.rb +++ b/app/models/account_warning_preset.rb @@ -6,9 +6,9 @@ # # id :bigint(8) not null, primary key # text :text default(""), not null +# title :string default(""), not null # created_at :datetime not null # updated_at :datetime not null -# title :string default(""), not null # class AccountWarningPreset < ApplicationRecord diff --git a/app/models/annual_report/statuses_per_account_count.rb b/app/models/annual_report/statuses_per_account_count.rb index 05a2f53c9d..4e1e445281 100644 --- a/app/models/annual_report/statuses_per_account_count.rb +++ b/app/models/annual_report/statuses_per_account_count.rb @@ -5,9 +5,9 @@ # Table name: annual_report_statuses_per_account_counts # # id :bigint(8) not null, primary key +# statuses_count :bigint(8) not null # year :integer not null # account_id :bigint(8) not null -# statuses_count :bigint(8) not null # class AnnualReport::StatusesPerAccountCount < ApplicationRecord diff --git a/app/models/appeal.rb b/app/models/appeal.rb index 6a75fec661..33811dd3db 100644 --- a/app/models/appeal.rb +++ b/app/models/appeal.rb @@ -5,15 +5,15 @@ # Table name: appeals # # id :bigint(8) not null, primary key -# account_id :bigint(8) not null -# account_warning_id :bigint(8) not null -# text :text default(""), not null # approved_at :datetime -# approved_by_account_id :bigint(8) # rejected_at :datetime -# rejected_by_account_id :bigint(8) +# text :text default(""), not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null +# account_warning_id :bigint(8) not null +# approved_by_account_id :bigint(8) +# rejected_by_account_id :bigint(8) # class Appeal < ApplicationRecord TEXT_LENGTH_LIMIT = 2_000 diff --git a/app/models/backup.rb b/app/models/backup.rb index 5feb31d7df..310287234a 100644 --- a/app/models/backup.rb +++ b/app/models/backup.rb @@ -5,14 +5,14 @@ # Table name: backups # # id :bigint(8) not null, primary key -# user_id :bigint(8) -# dump_file_name :string # dump_content_type :string +# dump_file_name :string +# dump_file_size :bigint(8) # dump_updated_at :datetime # processed :boolean default(FALSE), not null # created_at :datetime not null # updated_at :datetime not null -# dump_file_size :bigint(8) +# user_id :bigint(8) # class Backup < ApplicationRecord diff --git a/app/models/block.rb b/app/models/block.rb index 5476542a5a..662cc1ac20 100644 --- a/app/models/block.rb +++ b/app/models/block.rb @@ -5,11 +5,11 @@ # Table name: blocks # # id :bigint(8) not null, primary key +# uri :string # created_at :datetime not null # updated_at :datetime not null # account_id :bigint(8) not null # target_account_id :bigint(8) not null -# uri :string # class Block < ApplicationRecord diff --git a/app/models/bookmark.rb b/app/models/bookmark.rb index 04b660372e..147d87b564 100644 --- a/app/models/bookmark.rb +++ b/app/models/bookmark.rb @@ -5,10 +5,10 @@ # Table name: bookmarks # # id :bigint(8) not null, primary key -# account_id :bigint(8) not null -# status_id :bigint(8) not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null +# status_id :bigint(8) not null # class Bookmark < ApplicationRecord diff --git a/app/models/bulk_import.rb b/app/models/bulk_import.rb index 8435c245a2..e76f29bfc2 100644 --- a/app/models/bulk_import.rb +++ b/app/models/bulk_import.rb @@ -5,18 +5,18 @@ # Table name: bulk_imports # # id :bigint(8) not null, primary key -# type :integer not null -# state :integer not null -# total_items :integer default(0), not null -# imported_items :integer default(0), not null -# processed_items :integer default(0), not null # finished_at :datetime -# overwrite :boolean default(FALSE), not null +# imported_items :integer default(0), not null # likely_mismatched :boolean default(FALSE), not null # original_filename :string default(""), not null -# account_id :bigint(8) not null +# overwrite :boolean default(FALSE), not null +# processed_items :integer default(0), not null +# state :integer not null +# total_items :integer default(0), not null +# type :integer not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null # class BulkImport < ApplicationRecord self.inheritance_column = false diff --git a/app/models/bulk_import_row.rb b/app/models/bulk_import_row.rb index dd7190c970..01aba1ebc2 100644 --- a/app/models/bulk_import_row.rb +++ b/app/models/bulk_import_row.rb @@ -5,10 +5,10 @@ # Table name: bulk_import_rows # # id :bigint(8) not null, primary key -# bulk_import_id :bigint(8) not null # data :jsonb # created_at :datetime not null # updated_at :datetime not null +# bulk_import_id :bigint(8) not null # class BulkImportRow < ApplicationRecord belongs_to :bulk_import diff --git a/app/models/canonical_email_block.rb b/app/models/canonical_email_block.rb index 4ed160fc26..01e577d3f2 100644 --- a/app/models/canonical_email_block.rb +++ b/app/models/canonical_email_block.rb @@ -6,9 +6,9 @@ # # id :bigint(8) not null, primary key # canonical_email_hash :string default(""), not null -# reference_account_id :bigint(8) # created_at :datetime not null # updated_at :datetime not null +# reference_account_id :bigint(8) # class CanonicalEmailBlock < ApplicationRecord diff --git a/app/models/conversation_mute.rb b/app/models/conversation_mute.rb index 31f8e19667..3795964154 100644 --- a/app/models/conversation_mute.rb +++ b/app/models/conversation_mute.rb @@ -5,8 +5,8 @@ # Table name: conversation_mutes # # id :bigint(8) not null, primary key -# conversation_id :bigint(8) not null # account_id :bigint(8) not null +# conversation_id :bigint(8) not null # class ConversationMute < ApplicationRecord diff --git a/app/models/custom_emoji.rb b/app/models/custom_emoji.rb index 1d401261a8..6a356688c3 100644 --- a/app/models/custom_emoji.rb +++ b/app/models/custom_emoji.rb @@ -5,20 +5,20 @@ # Table name: custom_emojis # # id :bigint(8) not null, primary key -# shortcode :string default(""), not null +# disabled :boolean default(FALSE), not null # domain :string -# image_file_name :string # image_content_type :string +# image_file_name :string # image_file_size :integer +# image_remote_url :string +# image_storage_schema_version :integer # image_updated_at :datetime +# shortcode :string default(""), not null +# uri :string +# visible_in_picker :boolean default(TRUE), not null # created_at :datetime not null # updated_at :datetime not null -# disabled :boolean default(FALSE), not null -# uri :string -# image_remote_url :string -# visible_in_picker :boolean default(TRUE), not null # category_id :bigint(8) -# image_storage_schema_version :integer # class CustomEmoji < ApplicationRecord diff --git a/app/models/custom_filter_keyword.rb b/app/models/custom_filter_keyword.rb index 1abec4ddc4..b417a1dc3e 100644 --- a/app/models/custom_filter_keyword.rb +++ b/app/models/custom_filter_keyword.rb @@ -5,11 +5,11 @@ # Table name: custom_filter_keywords # # id :bigint(8) not null, primary key -# custom_filter_id :bigint(8) not null # keyword :text default(""), not null # whole_word :boolean default(TRUE), not null # created_at :datetime not null # updated_at :datetime not null +# custom_filter_id :bigint(8) not null # class CustomFilterKeyword < ApplicationRecord diff --git a/app/models/custom_filter_status.rb b/app/models/custom_filter_status.rb index c85b811280..5d50d551cc 100644 --- a/app/models/custom_filter_status.rb +++ b/app/models/custom_filter_status.rb @@ -5,10 +5,10 @@ # Table name: custom_filter_statuses # # id :bigint(8) not null, primary key -# custom_filter_id :bigint(8) not null -# status_id :bigint(8) not null # created_at :datetime not null # updated_at :datetime not null +# custom_filter_id :bigint(8) not null +# status_id :bigint(8) not null # class CustomFilterStatus < ApplicationRecord diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index 8e7d7b6afc..74a494517a 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -6,14 +6,14 @@ # # id :bigint(8) not null, primary key # domain :string default(""), not null -# created_at :datetime not null -# updated_at :datetime not null -# severity :integer default("silence") -# reject_media :boolean default(FALSE), not null -# reject_reports :boolean default(FALSE), not null +# obfuscate :boolean default(FALSE), not null # private_comment :text # public_comment :text -# obfuscate :boolean default(FALSE), not null +# reject_media :boolean default(FALSE), not null +# reject_reports :boolean default(FALSE), not null +# severity :integer default("silence") +# created_at :datetime not null +# updated_at :datetime not null # class DomainBlock < ApplicationRecord diff --git a/app/models/email_domain_block.rb b/app/models/email_domain_block.rb index 44d6bc6987..d52c76b030 100644 --- a/app/models/email_domain_block.rb +++ b/app/models/email_domain_block.rb @@ -5,11 +5,11 @@ # Table name: email_domain_blocks # # id :bigint(8) not null, primary key +# allow_with_approval :boolean default(FALSE), not null # domain :string default(""), not null # created_at :datetime not null # updated_at :datetime not null # parent_id :bigint(8) -# allow_with_approval :boolean default(FALSE), not null # class EmailDomainBlock < ApplicationRecord diff --git a/app/models/featured_tag.rb b/app/models/featured_tag.rb index a0938d6c0a..6f3279ea18 100644 --- a/app/models/featured_tag.rb +++ b/app/models/featured_tag.rb @@ -5,13 +5,13 @@ # Table name: featured_tags # # id :bigint(8) not null, primary key -# account_id :bigint(8) not null -# tag_id :bigint(8) not null -# statuses_count :bigint(8) default(0), not null # last_status_at :datetime +# name :string +# statuses_count :bigint(8) default(0), not null # created_at :datetime not null # updated_at :datetime not null -# name :string +# account_id :bigint(8) not null +# tag_id :bigint(8) not null # class FeaturedTag < ApplicationRecord diff --git a/app/models/follow.rb b/app/models/follow.rb index 4d1598dcad..c8930c2f86 100644 --- a/app/models/follow.rb +++ b/app/models/follow.rb @@ -5,14 +5,14 @@ # Table name: follows # # id :bigint(8) not null, primary key +# languages :string is an Array +# notify :boolean default(FALSE), not null +# show_reblogs :boolean default(TRUE), not null +# uri :string # created_at :datetime not null # updated_at :datetime not null # account_id :bigint(8) not null # target_account_id :bigint(8) not null -# show_reblogs :boolean default(TRUE), not null -# uri :string -# notify :boolean default(FALSE), not null -# languages :string is an Array # class Follow < ApplicationRecord diff --git a/app/models/follow_recommendation.rb b/app/models/follow_recommendation.rb index 0435437a81..98d6be527e 100644 --- a/app/models/follow_recommendation.rb +++ b/app/models/follow_recommendation.rb @@ -4,9 +4,9 @@ # # Table name: global_follow_recommendations # -# account_id :bigint(8) primary key # rank :decimal(, ) # reason :text is an Array +# account_id :bigint(8) primary key # class FollowRecommendation < ApplicationRecord diff --git a/app/models/follow_recommendation_mute.rb b/app/models/follow_recommendation_mute.rb index ef931988e7..980f6f1547 100644 --- a/app/models/follow_recommendation_mute.rb +++ b/app/models/follow_recommendation_mute.rb @@ -5,10 +5,10 @@ # Table name: follow_recommendation_mutes # # id :bigint(8) not null, primary key -# account_id :bigint(8) not null -# target_account_id :bigint(8) not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null +# target_account_id :bigint(8) not null # class FollowRecommendationMute < ApplicationRecord belongs_to :account diff --git a/app/models/follow_recommendation_suppression.rb b/app/models/follow_recommendation_suppression.rb index 59e94dc6b3..efbe135a1b 100644 --- a/app/models/follow_recommendation_suppression.rb +++ b/app/models/follow_recommendation_suppression.rb @@ -5,9 +5,9 @@ # Table name: follow_recommendation_suppressions # # id :bigint(8) not null, primary key -# account_id :bigint(8) not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null # class FollowRecommendationSuppression < ApplicationRecord diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb index 0b518036b1..906de95db2 100644 --- a/app/models/follow_request.rb +++ b/app/models/follow_request.rb @@ -5,14 +5,14 @@ # Table name: follow_requests # # id :bigint(8) not null, primary key +# languages :string is an Array +# notify :boolean default(FALSE), not null +# show_reblogs :boolean default(TRUE), not null +# uri :string # created_at :datetime not null # updated_at :datetime not null # account_id :bigint(8) not null # target_account_id :bigint(8) not null -# show_reblogs :boolean default(TRUE), not null -# uri :string -# notify :boolean default(FALSE), not null -# languages :string is an Array # class FollowRequest < ApplicationRecord diff --git a/app/models/identity.rb b/app/models/identity.rb index 77821b78fa..c01980c660 100644 --- a/app/models/identity.rb +++ b/app/models/identity.rb @@ -4,11 +4,11 @@ # # Table name: identities # +# id :bigint(8) not null, primary key # provider :string default(""), not null # uid :string default(""), not null # created_at :datetime not null # updated_at :datetime not null -# id :bigint(8) not null, primary key # user_id :bigint(8) # diff --git a/app/models/instance.rb b/app/models/instance.rb index 01d258281a..a49f73f799 100644 --- a/app/models/instance.rb +++ b/app/models/instance.rb @@ -4,8 +4,8 @@ # # Table name: instances # -# domain :string primary key # accounts_count :bigint(8) +# domain :string primary key # class Instance < ApplicationRecord diff --git a/app/models/invite.rb b/app/models/invite.rb index 9437ebee60..2e9371a074 100644 --- a/app/models/invite.rb +++ b/app/models/invite.rb @@ -5,15 +5,15 @@ # Table name: invites # # id :bigint(8) not null, primary key -# user_id :bigint(8) not null +# autofollow :boolean default(FALSE), not null # code :string default(""), not null +# comment :text # expires_at :datetime # max_uses :integer # uses :integer default(0), not null # created_at :datetime not null # updated_at :datetime not null -# autofollow :boolean default(FALSE), not null -# comment :text +# user_id :bigint(8) not null # class Invite < ApplicationRecord diff --git a/app/models/ip_block.rb b/app/models/ip_block.rb index b3b678a6a1..5bbfc1fd24 100644 --- a/app/models/ip_block.rb +++ b/app/models/ip_block.rb @@ -5,12 +5,12 @@ # Table name: ip_blocks # # id :bigint(8) not null, primary key -# created_at :datetime not null -# updated_at :datetime not null +# comment :text default(""), not null # expires_at :datetime # ip :inet default(#), not null # severity :integer default(NULL), not null -# comment :text default(""), not null +# created_at :datetime not null +# updated_at :datetime not null # class IpBlock < ApplicationRecord diff --git a/app/models/list.rb b/app/models/list.rb index 49ead642ac..221c690f07 100644 --- a/app/models/list.rb +++ b/app/models/list.rb @@ -5,12 +5,12 @@ # Table name: lists # # id :bigint(8) not null, primary key -# account_id :bigint(8) not null +# exclusive :boolean default(FALSE), not null +# replies_policy :integer default("list"), not null # title :string default(""), not null # created_at :datetime not null # updated_at :datetime not null -# replies_policy :integer default("list"), not null -# exclusive :boolean default(FALSE), not null +# account_id :bigint(8) not null # class List < ApplicationRecord diff --git a/app/models/list_account.rb b/app/models/list_account.rb index 00ecd44c3c..2eb3f92064 100644 --- a/app/models/list_account.rb +++ b/app/models/list_account.rb @@ -5,10 +5,10 @@ # Table name: list_accounts # # id :bigint(8) not null, primary key -# list_id :bigint(8) not null # account_id :bigint(8) not null # follow_id :bigint(8) # follow_request_id :bigint(8) +# list_id :bigint(8) not null # class ListAccount < ApplicationRecord diff --git a/app/models/login_activity.rb b/app/models/login_activity.rb index 240d571c0e..f124b9812b 100644 --- a/app/models/login_activity.rb +++ b/app/models/login_activity.rb @@ -5,14 +5,14 @@ # Table name: login_activities # # id :bigint(8) not null, primary key -# user_id :bigint(8) not null # authentication_method :string -# provider :string -# success :boolean # failure_reason :string # ip :inet +# provider :string +# success :boolean # user_agent :string # created_at :datetime +# user_id :bigint(8) not null # class LoginActivity < ApplicationRecord diff --git a/app/models/mention.rb b/app/models/mention.rb index e921d41de3..35491c0acf 100644 --- a/app/models/mention.rb +++ b/app/models/mention.rb @@ -5,11 +5,11 @@ # Table name: mentions # # id :bigint(8) not null, primary key -# status_id :bigint(8) not null +# silent :boolean default(FALSE), not null # created_at :datetime not null # updated_at :datetime not null # account_id :bigint(8) not null -# silent :boolean default(FALSE), not null +# status_id :bigint(8) not null # class Mention < ApplicationRecord diff --git a/app/models/mute.rb b/app/models/mute.rb index 1d18b30eea..b5594e2b7f 100644 --- a/app/models/mute.rb +++ b/app/models/mute.rb @@ -5,12 +5,12 @@ # Table name: mutes # # id :bigint(8) not null, primary key +# expires_at :datetime +# hide_notifications :boolean default(TRUE), not null # created_at :datetime not null # updated_at :datetime not null # account_id :bigint(8) not null # target_account_id :bigint(8) not null -# hide_notifications :boolean default(TRUE), not null -# expires_at :datetime # class Mute < ApplicationRecord diff --git a/app/models/notification.rb b/app/models/notification.rb index 8ee32798ad..9f03539f76 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -5,15 +5,15 @@ # Table name: notifications # # id :bigint(8) not null, primary key -# activity_id :bigint(8) not null # activity_type :string not null +# filtered :boolean default(FALSE), not null +# group_key :string +# type :string # created_at :datetime not null # updated_at :datetime not null # account_id :bigint(8) not null +# activity_id :bigint(8) not null # from_account_id :bigint(8) not null -# type :string -# filtered :boolean default(FALSE), not null -# group_key :string # class Notification < ApplicationRecord diff --git a/app/models/notification_permission.rb b/app/models/notification_permission.rb index e0001473f8..169112c69f 100644 --- a/app/models/notification_permission.rb +++ b/app/models/notification_permission.rb @@ -5,10 +5,10 @@ # Table name: notification_permissions # # id :bigint(8) not null, primary key -# account_id :bigint(8) not null -# from_account_id :bigint(8) not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null +# from_account_id :bigint(8) not null # class NotificationPermission < ApplicationRecord belongs_to :account diff --git a/app/models/notification_policy.rb b/app/models/notification_policy.rb index d22f871a37..73a13b92a8 100644 --- a/app/models/notification_policy.rb +++ b/app/models/notification_policy.rb @@ -5,14 +5,14 @@ # Table name: notification_policies # # id :bigint(8) not null, primary key -# account_id :bigint(8) not null +# for_limited_accounts :integer default("filter"), not null +# for_new_accounts :integer default("accept"), not null +# for_not_followers :integer default("accept"), not null +# for_not_following :integer default("accept"), not null +# for_private_mentions :integer default("filter"), not null # created_at :datetime not null # updated_at :datetime not null -# for_not_following :integer default("accept"), not null -# for_not_followers :integer default("accept"), not null -# for_new_accounts :integer default("accept"), not null -# for_private_mentions :integer default("filter"), not null -# for_limited_accounts :integer default("filter"), not null +# account_id :bigint(8) not null # class NotificationPolicy < ApplicationRecord diff --git a/app/models/notification_request.rb b/app/models/notification_request.rb index d95fb58b47..e8ed508d87 100644 --- a/app/models/notification_request.rb +++ b/app/models/notification_request.rb @@ -5,12 +5,12 @@ # Table name: notification_requests # # id :bigint(8) not null, primary key -# account_id :bigint(8) not null -# from_account_id :bigint(8) not null -# last_status_id :bigint(8) # notifications_count :bigint(8) default(0), not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null +# from_account_id :bigint(8) not null +# last_status_id :bigint(8) # class NotificationRequest < ApplicationRecord diff --git a/app/models/preview_card.rb b/app/models/preview_card.rb index 4c8b52a8d5..8664644570 100644 --- a/app/models/preview_card.rb +++ b/app/models/preview_card.rb @@ -5,33 +5,33 @@ # Table name: preview_cards # # id :bigint(8) not null, primary key -# url :string default(""), not null -# title :string default(""), not null -# description :string default(""), not null -# image_file_name :string -# image_content_type :string -# image_file_size :integer -# image_updated_at :datetime -# type :integer default("link"), not null -# html :text default(""), not null # author_name :string default(""), not null # author_url :string default(""), not null -# provider_name :string default(""), not null -# provider_url :string default(""), not null -# width :integer default(0), not null -# height :integer default(0), not null -# created_at :datetime not null -# updated_at :datetime not null -# embed_url :string default(""), not null -# image_storage_schema_version :integer # blurhash :string +# description :string default(""), not null +# embed_url :string default(""), not null +# height :integer default(0), not null +# html :text default(""), not null +# image_content_type :string +# image_description :string default(""), not null +# image_file_name :string +# image_file_size :integer +# image_storage_schema_version :integer +# image_updated_at :datetime # language :string +# link_type :integer # max_score :float # max_score_at :datetime -# trendable :boolean -# link_type :integer +# provider_name :string default(""), not null +# provider_url :string default(""), not null # published_at :datetime -# image_description :string default(""), not null +# title :string default(""), not null +# trendable :boolean +# type :integer default("link"), not null +# url :string default(""), not null +# width :integer default(0), not null +# created_at :datetime not null +# updated_at :datetime not null # author_account_id :bigint(8) # unverified_author_account_id :bigint(8) # diff --git a/app/models/preview_card_provider.rb b/app/models/preview_card_provider.rb index 889176036c..9d77d45e22 100644 --- a/app/models/preview_card_provider.rb +++ b/app/models/preview_card_provider.rb @@ -6,13 +6,13 @@ # # id :bigint(8) not null, primary key # domain :string default(""), not null -# icon_file_name :string # icon_content_type :string +# icon_file_name :string # icon_file_size :bigint(8) # icon_updated_at :datetime -# trendable :boolean -# reviewed_at :datetime # requested_review_at :datetime +# reviewed_at :datetime +# trendable :boolean # created_at :datetime not null # updated_at :datetime not null # diff --git a/app/models/preview_card_trend.rb b/app/models/preview_card_trend.rb index 58155971a3..f3f3bc1436 100644 --- a/app/models/preview_card_trend.rb +++ b/app/models/preview_card_trend.rb @@ -5,11 +5,11 @@ # Table name: preview_card_trends # # id :bigint(8) not null, primary key -# preview_card_id :bigint(8) not null -# score :float default(0.0), not null -# rank :integer default(0), not null # allowed :boolean default(FALSE), not null # language :string +# rank :integer default(0), not null +# score :float default(0.0), not null +# preview_card_id :bigint(8) not null # class PreviewCardTrend < ApplicationRecord include RankedTrend diff --git a/app/models/preview_cards_status.rb b/app/models/preview_cards_status.rb index 5ff6352055..d709588431 100644 --- a/app/models/preview_cards_status.rb +++ b/app/models/preview_cards_status.rb @@ -4,9 +4,9 @@ # # Table name: preview_cards_statuses # +# url :string # preview_card_id :bigint(8) not null, primary key # status_id :bigint(8) not null, primary key -# url :string # class PreviewCardsStatus < ApplicationRecord self.primary_key = [:preview_card_id, :status_id] diff --git a/app/models/relationship_severance_event.rb b/app/models/relationship_severance_event.rb index 30ada25767..864038e980 100644 --- a/app/models/relationship_severance_event.rb +++ b/app/models/relationship_severance_event.rb @@ -5,9 +5,9 @@ # Table name: relationship_severance_events # # id :bigint(8) not null, primary key -# type :integer not null -# target_name :string not null # purged :boolean default(FALSE), not null +# target_name :string not null +# type :integer not null # created_at :datetime not null # updated_at :datetime not null # diff --git a/app/models/relay.rb b/app/models/relay.rb index 8a9524e9b3..53221887bd 100644 --- a/app/models/relay.rb +++ b/app/models/relay.rb @@ -6,10 +6,10 @@ # # id :bigint(8) not null, primary key # inbox_url :string default(""), not null -# follow_activity_id :string +# state :integer default("idle"), not null # created_at :datetime not null # updated_at :datetime not null -# state :integer default("idle"), not null +# follow_activity_id :string # class Relay < ApplicationRecord diff --git a/app/models/report.rb b/app/models/report.rb index 86fbda1d2b..282a1f7570 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -5,20 +5,20 @@ # Table name: reports # # id :bigint(8) not null, primary key -# status_ids :bigint(8) default([]), not null, is an Array +# action_taken_at :datetime +# category :integer default("other"), not null # comment :text default(""), not null +# forwarded :boolean +# rule_ids :bigint(8) is an Array +# status_ids :bigint(8) default([]), not null, is an Array +# uri :string # created_at :datetime not null # updated_at :datetime not null # account_id :bigint(8) not null # action_taken_by_account_id :bigint(8) -# target_account_id :bigint(8) not null -# assigned_account_id :bigint(8) -# uri :string -# forwarded :boolean -# category :integer default("other"), not null -# action_taken_at :datetime -# rule_ids :bigint(8) is an Array # application_id :bigint(8) +# assigned_account_id :bigint(8) +# target_account_id :bigint(8) not null # class Report < ApplicationRecord diff --git a/app/models/report_note.rb b/app/models/report_note.rb index 9d3be52594..b2ac3aefe9 100644 --- a/app/models/report_note.rb +++ b/app/models/report_note.rb @@ -6,10 +6,10 @@ # # id :bigint(8) not null, primary key # content :text not null -# report_id :bigint(8) not null -# account_id :bigint(8) not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null +# report_id :bigint(8) not null # class ReportNote < ApplicationRecord diff --git a/app/models/rule.rb b/app/models/rule.rb index 672bef7d1e..0db6e13d05 100644 --- a/app/models/rule.rb +++ b/app/models/rule.rb @@ -5,12 +5,12 @@ # Table name: rules # # id :bigint(8) not null, primary key -# priority :integer default(0), not null # deleted_at :datetime +# hint :text default(""), not null +# priority :integer default(0), not null # text :text default(""), not null # created_at :datetime not null # updated_at :datetime not null -# hint :text default(""), not null # class Rule < ApplicationRecord include Discard::Model diff --git a/app/models/session_activation.rb b/app/models/session_activation.rb index 55b1428be6..39cc090d37 100644 --- a/app/models/session_activation.rb +++ b/app/models/session_activation.rb @@ -5,12 +5,12 @@ # Table name: session_activations # # id :bigint(8) not null, primary key -# session_id :string not null +# ip :inet +# user_agent :string default(""), not null # created_at :datetime not null # updated_at :datetime not null -# user_agent :string default(""), not null -# ip :inet # access_token_id :bigint(8) +# session_id :string not null # user_id :bigint(8) not null # web_push_subscription_id :bigint(8) # diff --git a/app/models/setting.rb b/app/models/setting.rb index 12ff32f00a..a5492eebb7 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -5,8 +5,8 @@ # Table name: settings # # id :bigint(8) not null, primary key -# var :string not null # value :text +# var :string not null # created_at :datetime # updated_at :datetime # diff --git a/app/models/severed_relationship.rb b/app/models/severed_relationship.rb index 64b5b0001b..eb9b0023ed 100644 --- a/app/models/severed_relationship.rb +++ b/app/models/severed_relationship.rb @@ -5,15 +5,15 @@ # Table name: severed_relationships # # id :bigint(8) not null, primary key -# relationship_severance_event_id :bigint(8) not null -# local_account_id :bigint(8) not null -# remote_account_id :bigint(8) not null # direction :integer not null -# show_reblogs :boolean -# notify :boolean # languages :string is an Array +# notify :boolean +# show_reblogs :boolean # created_at :datetime not null # updated_at :datetime not null +# local_account_id :bigint(8) not null +# relationship_severance_event_id :bigint(8) not null +# remote_account_id :bigint(8) not null # class SeveredRelationship < ApplicationRecord belongs_to :relationship_severance_event diff --git a/app/models/site_upload.rb b/app/models/site_upload.rb index 273dd6de9f..62bf03b5e8 100644 --- a/app/models/site_upload.rb +++ b/app/models/site_upload.rb @@ -5,15 +5,15 @@ # Table name: site_uploads # # id :bigint(8) not null, primary key -# var :string default(""), not null -# file_file_name :string +# blurhash :string # file_content_type :string +# file_file_name :string # file_file_size :integer # file_updated_at :datetime # meta :json +# var :string default(""), not null # created_at :datetime not null # updated_at :datetime not null -# blurhash :string # class SiteUpload < ApplicationRecord diff --git a/app/models/software_update.rb b/app/models/software_update.rb index 4c868f6f59..266ca1326f 100644 --- a/app/models/software_update.rb +++ b/app/models/software_update.rb @@ -5,10 +5,10 @@ # Table name: software_updates # # id :bigint(8) not null, primary key -# version :string not null -# urgent :boolean default(FALSE), not null -# type :integer default("patch"), not null # release_notes :string default(""), not null +# type :integer default("patch"), not null +# urgent :boolean default(FALSE), not null +# version :string not null # created_at :datetime not null # updated_at :datetime not null # diff --git a/app/models/status.rb b/app/models/status.rb index 766b3bf351..f0fe27c2e6 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -5,32 +5,32 @@ # Table name: statuses # # id :bigint(8) not null, primary key -# uri :string -# text :text default(""), not null -# created_at :datetime not null -# updated_at :datetime not null -# in_reply_to_id :bigint(8) -# reblog_of_id :bigint(8) -# url :string -# sensitive :boolean default(FALSE), not null -# visibility :integer default("public"), not null -# spoiler_text :text default(""), not null -# reply :boolean default(FALSE), not null -# language :string -# conversation_id :bigint(8) -# local :boolean -# account_id :bigint(8) not null -# application_id :bigint(8) -# in_reply_to_account_id :bigint(8) -# local_only :boolean -# poll_id :bigint(8) # content_type :string # deleted_at :datetime # edited_at :datetime -# trendable :boolean -# ordered_media_attachment_ids :bigint(8) is an Array # fetched_replies_at :datetime +# language :string +# local :boolean +# local_only :boolean +# ordered_media_attachment_ids :bigint(8) is an Array # quote_approval_policy :integer default(0), not null +# reply :boolean default(FALSE), not null +# sensitive :boolean default(FALSE), not null +# spoiler_text :text default(""), not null +# text :text default(""), not null +# trendable :boolean +# uri :string +# url :string +# visibility :integer default("public"), not null +# created_at :datetime not null +# updated_at :datetime not null +# account_id :bigint(8) not null +# application_id :bigint(8) +# conversation_id :bigint(8) +# in_reply_to_account_id :bigint(8) +# in_reply_to_id :bigint(8) +# poll_id :bigint(8) +# reblog_of_id :bigint(8) # class Status < ApplicationRecord diff --git a/app/models/status_edit.rb b/app/models/status_edit.rb index e48abb8866..b5d6ff26f1 100644 --- a/app/models/status_edit.rb +++ b/app/models/status_edit.rb @@ -5,18 +5,18 @@ # Table name: status_edits # # id :bigint(8) not null, primary key -# status_id :bigint(8) not null -# account_id :bigint(8) -# text :text default(""), not null -# spoiler_text :text default(""), not null -# created_at :datetime not null -# updated_at :datetime not null # content_type :string -# ordered_media_attachment_ids :bigint(8) is an Array # media_descriptions :text is an Array +# ordered_media_attachment_ids :bigint(8) is an Array # poll_options :string is an Array # sensitive :boolean +# spoiler_text :text default(""), not null +# text :text default(""), not null +# created_at :datetime not null +# updated_at :datetime not null +# account_id :bigint(8) # quote_id :bigint(8) +# status_id :bigint(8) not null # class StatusEdit < ApplicationRecord diff --git a/app/models/status_pin.rb b/app/models/status_pin.rb index 83711dde42..190124caed 100644 --- a/app/models/status_pin.rb +++ b/app/models/status_pin.rb @@ -5,10 +5,10 @@ # Table name: status_pins # # id :bigint(8) not null, primary key -# account_id :bigint(8) not null -# status_id :bigint(8) not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null +# status_id :bigint(8) not null # class StatusPin < ApplicationRecord diff --git a/app/models/status_trend.rb b/app/models/status_trend.rb index 807efec0ff..b76d6a7260 100644 --- a/app/models/status_trend.rb +++ b/app/models/status_trend.rb @@ -5,12 +5,12 @@ # Table name: status_trends # # id :bigint(8) not null, primary key -# status_id :bigint(8) not null -# account_id :bigint(8) not null -# score :float default(0.0), not null -# rank :integer default(0), not null # allowed :boolean default(FALSE), not null # language :string +# rank :integer default(0), not null +# score :float default(0.0), not null +# account_id :bigint(8) not null +# status_id :bigint(8) not null # class StatusTrend < ApplicationRecord diff --git a/app/models/tag.rb b/app/models/tag.rb index 97edda879e..224ec32736 100644 --- a/app/models/tag.rb +++ b/app/models/tag.rb @@ -5,18 +5,18 @@ # Table name: tags # # id :bigint(8) not null, primary key -# name :string default(""), not null -# created_at :datetime not null -# updated_at :datetime not null -# usable :boolean -# trendable :boolean -# listable :boolean -# reviewed_at :datetime -# requested_review_at :datetime +# display_name :string # last_status_at :datetime +# listable :boolean # max_score :float # max_score_at :datetime -# display_name :string +# name :string default(""), not null +# requested_review_at :datetime +# reviewed_at :datetime +# trendable :boolean +# usable :boolean +# created_at :datetime not null +# updated_at :datetime not null # class Tag < ApplicationRecord diff --git a/app/models/tag_follow.rb b/app/models/tag_follow.rb index 528616c450..5f0935345f 100644 --- a/app/models/tag_follow.rb +++ b/app/models/tag_follow.rb @@ -5,10 +5,10 @@ # Table name: tag_follows # # id :bigint(8) not null, primary key -# tag_id :bigint(8) not null -# account_id :bigint(8) not null # created_at :datetime not null # updated_at :datetime not null +# account_id :bigint(8) not null +# tag_id :bigint(8) not null # class TagFollow < ApplicationRecord diff --git a/app/models/user_ip.rb b/app/models/user_ip.rb index 25aa81ccd4..690c383c79 100644 --- a/app/models/user_ip.rb +++ b/app/models/user_ip.rb @@ -4,9 +4,9 @@ # # Table name: user_ips # -# user_id :bigint(8) primary key # ip :inet # used_at :datetime +# user_id :bigint(8) primary key # class UserIp < ApplicationRecord diff --git a/app/models/webauthn_credential.rb b/app/models/webauthn_credential.rb index 3681ce332c..0c7f9b26bf 100644 --- a/app/models/webauthn_credential.rb +++ b/app/models/webauthn_credential.rb @@ -5,13 +5,13 @@ # Table name: webauthn_credentials # # id :bigint(8) not null, primary key -# external_id :string not null -# public_key :string not null # nickname :string not null +# public_key :string not null # sign_count :bigint(8) default(0), not null -# user_id :bigint(8) # created_at :datetime not null # updated_at :datetime not null +# external_id :string not null +# user_id :bigint(8) # class WebauthnCredential < ApplicationRecord diff --git a/app/models/webhook.rb b/app/models/webhook.rb index e3dff76365..fea6a972c7 100644 --- a/app/models/webhook.rb +++ b/app/models/webhook.rb @@ -5,13 +5,13 @@ # Table name: webhooks # # id :bigint(8) not null, primary key -# url :string not null +# enabled :boolean default(TRUE), not null # events :string default([]), not null, is an Array # secret :string default(""), not null -# enabled :boolean default(TRUE), not null +# template :text +# url :string not null # created_at :datetime not null # updated_at :datetime not null -# template :text # class Webhook < ApplicationRecord diff --git a/app/serializers/activitypub/accept_feature_request_serializer.rb b/app/serializers/activitypub/accept_feature_request_serializer.rb new file mode 100644 index 0000000000..99393dac91 --- /dev/null +++ b/app/serializers/activitypub/accept_feature_request_serializer.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class ActivityPub::AcceptFeatureRequestSerializer < ActivityPub::Serializer + include RoutingHelper + + attributes :id, :type, :actor, :to, :result + + has_one :virtual_object, key: :object + + def id + [ActivityPub::TagManager.instance.uri_for(object.account), '#accepts/feature_requests/', object.id].join + end + + def type + 'Accept' + end + + def actor + ActivityPub::TagManager.instance.uri_for(object.account) + end + + def to + ActivityPub::TagManager.instance.uri_for(object.collection.account) + end + + def virtual_object + object.activity_uri + end + + def result + ap_account_feature_authorization_url(object.account_id, object) + end +end diff --git a/app/serializers/activitypub/reject_feature_request_serializer.rb b/app/serializers/activitypub/reject_feature_request_serializer.rb new file mode 100644 index 0000000000..4dbc2cdf11 --- /dev/null +++ b/app/serializers/activitypub/reject_feature_request_serializer.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +class ActivityPub::RejectFeatureRequestSerializer < ActivityPub::Serializer + include RoutingHelper + + attributes :id, :type, :actor, :to + + has_one :virtual_object, key: :object + + def id + [ActivityPub::TagManager.instance.uri_for(object.account), '#rejects/feature_requests/', object.id].join + end + + def type + 'Reject' + end + + def actor + ActivityPub::TagManager.instance.uri_for(object.account) + end + + def to + ActivityPub::TagManager.instance.uri_for(object.collection.account) + end + + def virtual_object + object.activity_uri + end +end diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index efdaa26974..e23f4a15bb 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -125,6 +125,7 @@ class ActivityPub::ProcessAccountService < BaseService def set_immediate_attributes! @account.featured_collection_url = valid_collection_uri(@json['featured']) + @account.collections_url = valid_collection_uri(@json['featuredCollections']) @account.display_name = (@json['name'] || '')[0...(Account::DISPLAY_NAME_LENGTH_HARD_LIMIT)] @account.note = (@json['summary'] || '')[0...(Account::NOTE_LENGTH_HARD_LIMIT)] @account.locked = @json['manuallyApprovesFollowers'] || false diff --git a/config/initializers/fog_connection_cache.rb b/config/initializers/fog_connection_cache.rb new file mode 100644 index 0000000000..c9cf310d83 --- /dev/null +++ b/config/initializers/fog_connection_cache.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +if ENV['SWIFT_ENABLED'] == 'true' + module PaperclipFogConnectionCache + def connection + @connection ||= begin + key = fog_credentials.hash + Thread.current[:paperclip_fog_connections] ||= {} + Thread.current[:paperclip_fog_connections][key] ||= ::Fog::Storage.new(fog_credentials) + end + end + end + + Rails.application.config.after_initialize do + Paperclip::Storage::Fog.prepend(PaperclipFogConnectionCache) + end +end diff --git a/config/locales/de.yml b/config/locales/de.yml index 2315be3f8d..0e1368d1e3 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1668,7 +1668,7 @@ de: validations: images_and_video: Es kann kein Video an einen Beitrag angehängt werden, der bereits Bilder enthält not_found: Medieninhalt(e) %{ids} nicht gefunden oder bereits an einen anderen Beitrag angehängt - not_ready: Dateien, die noch nicht verarbeitet wurden, können nicht angehängt werden. Versuche es gleich noch einmal! + not_ready: Dateien, die noch nicht verarbeitet wurden, können nicht angehängt werden. Warte einen Moment! too_many: Mehr als vier Dateien können nicht angehängt werden migrations: acct: umgezogen nach diff --git a/config/locales/it.yml b/config/locales/it.yml index 09dfb6a349..b42af3c673 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -838,7 +838,7 @@ it: rules_hint: C'è un'area dedicata per le regole che i tuoi utenti dovrebbero rispettare. title: Info allow_referrer_origin: - desc: Quando i tuoi utenti cliccano su link a siti esterni, il loro browser potrebbe inviare l'indirizzo del tuo server Mastodon come referente. Disattiva questa opzione se ciò identificherebbe in modo univoco i tuoi utenti, ad esempio se si tratta di un server Mastodon personale. + desc: Quando i tuoi utenti cliccano su link a siti esterni, il loro browser potrebbe inviare l'indirizzo del tuo server Mastodon come referente. Disattiva questa opzione se ciò identificherebbe in modo univoco i tuoi utenti, per esempio, se si tratta di un server Mastodon personale. title: Consenti ai siti esterni di vedere il tuo server Mastodon come fonte di traffico appearance: preamble: Personalizza l'interfaccia web di Mastodon. diff --git a/db/migrate/20260311152331_add_collections_url_to_accounts.rb b/db/migrate/20260311152331_add_collections_url_to_accounts.rb new file mode 100644 index 0000000000..7fc0bb2944 --- /dev/null +++ b/db/migrate/20260311152331_add_collections_url_to_accounts.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddCollectionsURLToAccounts < ActiveRecord::Migration[8.1] + def change + add_column :accounts, :collections_url, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 6c9ff47c92..60024bca34 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[8.1].define(version: 2026_03_10_095021) do +ActiveRecord::Schema[8.1].define(version: 2026_03_11_152331) do # These are extensions that must be enabled in order to support this database enable_extension "pg_catalog.plpgsql" @@ -162,6 +162,7 @@ ActiveRecord::Schema[8.1].define(version: 2026_03_10_095021) do t.string "avatar_remote_url" t.integer "avatar_storage_schema_version" t.datetime "avatar_updated_at", precision: nil + t.string "collections_url" t.datetime "created_at", precision: nil, null: false t.boolean "discoverable" t.string "display_name", default: "", null: false diff --git a/spec/lib/activitypub/activity/add_spec.rb b/spec/lib/activitypub/activity/add_spec.rb index 0f8ce53cfb..d0bdfbe218 100644 --- a/spec/lib/activitypub/activity/add_spec.rb +++ b/spec/lib/activitypub/activity/add_spec.rb @@ -80,6 +80,48 @@ RSpec.describe ActivityPub::Activity::Add do end end + context 'when the target is the `featuredCollections` collection', feature: :collections_federation do + subject { described_class.new(activity_json, account) } + + let(:account) { Fabricate(:remote_account, collections_url: 'https://example.com/actor/1/featured_collections') } + let(:featured_collection_json) do + { + '@context' => 'https://www.w3.org/ns/activitystreams', + 'id' => 'https://other.example.com/featured_item/1', + 'type' => 'FeaturedCollection', + 'attributedTo' => account.uri, + 'name' => 'Cool people', + 'summary' => 'People you should follow.', + 'totalItems' => 0, + 'sensitive' => false, + 'discoverable' => true, + 'published' => '2026-03-09T15:19:25Z', + } + end + let(:activity_json) do + { + '@context' => 'https://www.w3.org/ns/activitystreams', + 'type' => 'Add', + 'actor' => account.uri, + 'target' => 'https://example.com/actor/1/featured_collections', + 'object' => featured_collection_json, + } + end + let(:stubbed_service) do + instance_double(ActivityPub::ProcessFeaturedCollectionService, call: true) + end + + before do + allow(ActivityPub::ProcessFeaturedCollectionService).to receive(:new).and_return(stubbed_service) + end + + it 'calls the service' do + subject.perform + + expect(stubbed_service).to have_received(:call).with(account, featured_collection_json) + end + end + context 'when the target is a collection', feature: :collections_federation do subject { described_class.new(activity_json, collection.account) } diff --git a/spec/lib/activitypub/activity/remove_spec.rb b/spec/lib/activitypub/activity/remove_spec.rb index 937b938e4f..e31b40b9db 100644 --- a/spec/lib/activitypub/activity/remove_spec.rb +++ b/spec/lib/activitypub/activity/remove_spec.rb @@ -3,7 +3,11 @@ require 'rails_helper' RSpec.describe ActivityPub::Activity::Remove do - let(:sender) { Fabricate(:account, featured_collection_url: 'https://example.com/featured') } + let(:sender) do + Fabricate(:remote_account, + featured_collection_url: 'https://example.com/featured', + collections_url: 'https://example.com/actor/1/featured_collections') + end describe '#perform' do subject { described_class.new(json, sender) } @@ -59,5 +63,51 @@ RSpec.describe ActivityPub::Activity::Remove do .to change { sender.featured_tags.exists?(tag: tag) }.to(false) end end + + context 'when removing a featured collection' do + let(:collection) { Fabricate(:remote_collection, account: sender) } + let(:json) do + { + '@context' => 'https://www.w3.org/ns/activitystreams', + 'id' => 'foo', + 'type' => 'Remove', + 'actor' => ActivityPub::TagManager.instance.uri_for(sender), + 'object' => collection.uri, + 'target' => sender.collections_url, + } + end + + before do + Fabricate(:collection_item, collection:, uri: 'https://example.com/featured_items/1') + end + + it 'deletes the collection' do + expect { subject.perform } + .to change(sender.collections, :count).by(-1) + .and change(CollectionItem, :count).by(-1) + end + end + + context 'when removing a featured item' do + let(:collection) { Fabricate(:remote_collection, account: sender) } + let(:collection_item) { Fabricate(:collection_item, collection:, uri: 'https://example.com/featured_items/1') } + let(:json) do + { + '@context' => 'https://www.w3.org/ns/activitystreams', + 'id' => 'foo', + 'type' => 'Remove', + 'actor' => ActivityPub::TagManager.instance.uri_for(sender), + 'object' => collection_item.uri, + 'target' => collection.uri, + } + end + + before { json } + + it 'deletes the collection item' do + expect { subject.perform } + .to change(collection.collection_items, :count).by(-1) + end + end end end diff --git a/spec/serializers/activitypub/accept_feature_request_serializer_spec.rb b/spec/serializers/activitypub/accept_feature_request_serializer_spec.rb new file mode 100644 index 0000000000..6fc277f273 --- /dev/null +++ b/spec/serializers/activitypub/accept_feature_request_serializer_spec.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ActivityPub::AcceptFeatureRequestSerializer do + include RoutingHelper + + subject { serialized_record_json(record, described_class, adapter: ActivityPub::Adapter) } + + describe 'serializing an object' do + let(:collection) { Fabricate(:remote_collection) } + let(:record) do + Fabricate(:collection_item, + collection:, + uri: 'https://example.com/featured_items/1', + activity_uri: 'https://example.com/feature_requests/1', + state: :accepted) + end + let(:tag_manager) { ActivityPub::TagManager.instance } + + it 'returns expected attributes' do + expect(subject) + .to include( + 'id' => match("#accepts/feature_requests/#{record.id}"), + 'type' => 'Accept', + 'actor' => tag_manager.uri_for(record.account), + 'to' => tag_manager.uri_for(collection.account), + 'object' => 'https://example.com/feature_requests/1', + 'result' => ap_account_feature_authorization_url(record.account_id, record) + ) + end + end +end diff --git a/spec/serializers/activitypub/reject_feature_request_serializer_spec.rb b/spec/serializers/activitypub/reject_feature_request_serializer_spec.rb new file mode 100644 index 0000000000..1e7aa0bcde --- /dev/null +++ b/spec/serializers/activitypub/reject_feature_request_serializer_spec.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe ActivityPub::RejectFeatureRequestSerializer do + include RoutingHelper + + subject { serialized_record_json(record, described_class, adapter: ActivityPub::Adapter) } + + describe 'serializing an object' do + let(:collection) { Fabricate(:remote_collection) } + let(:record) do + Fabricate(:collection_item, + collection:, + uri: 'https://example.com/featured_items/1', + activity_uri: 'https://example.com/feature_requests/1', + state: :rejected) + end + let(:tag_manager) { ActivityPub::TagManager.instance } + + it 'returns expected attributes' do + expect(subject) + .to include( + 'id' => match("#rejects/feature_requests/#{record.id}"), + 'type' => 'Reject', + 'actor' => tag_manager.uri_for(record.account), + 'to' => tag_manager.uri_for(collection.account), + 'object' => 'https://example.com/feature_requests/1' + ) + end + end +end diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb index b2c6bc17b2..1d8d8f8ac5 100644 --- a/spec/services/activitypub/process_account_service_spec.rb +++ b/spec/services/activitypub/process_account_service_spec.rb @@ -63,6 +63,34 @@ RSpec.describe ActivityPub::ProcessAccountService do end end + context 'with collection URIs' do + let(:payload) do + { + 'id' => 'https://foo.test', + 'type' => 'Actor', + 'inbox' => 'https://foo.test/inbox', + 'featured' => 'https://foo.test/featured', + 'followers' => 'https://foo.test/followers', + 'following' => 'https://foo.test/following', + 'featuredCollections' => 'https://foo.test/featured_collections', + } + end + + before do + stub_request(:get, %r{^https://foo\.test/follow}) + .to_return(status: 200, body: '', headers: {}) + end + + it 'parses and sets the URIs' do + account = subject.call('alice', 'example.com', payload) + + expect(account.featured_collection_url).to eq 'https://foo.test/featured' + expect(account.followers_url).to eq 'https://foo.test/followers' + expect(account.following_url).to eq 'https://foo.test/following' + expect(account.collections_url).to eq 'https://foo.test/featured_collections' + end + end + context 'with attribution domains' do let(:payload) do {