diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0ce92ec0016..f333f2c5683 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,301 +6,325 @@ All notable changes to this project will be documented in this file.
## [Unreleased]
### Added
-- Add link for adding a user to a list from their profile (#9062)
-- Add joining several hashtags in a single column (#8904)
-- Add volume sliders for videos (#9366)
-- Add a tooltip explaining what a locked account is (#9403)
-- Add preloaded cache for common JSON-LD contexts (#9412)
-- Add profile directory (#9427)
-- Add setting to not group reblogs in home feed (#9248)
-- Add admin ability to remove a user's header image (#9495)
-- Add account hashtags to ActivityPub actor JSON (#9450)
-- Add error message for avatar image that's too large (#9518)
-- Add notification quick-filter bar (#9399)
-- Add new first-time tutorial (#9531)
-- Add moderation warnings (#9519)
-- Add emoji codepoint mappings for v11.0 (#9618)
-- Add REST API for creating an account (#9572)
-- Add support for Malayalam in language filter (#9624)
-- Add exclude_reblogs option to account statuses API (#9640)
-- Add local followers page to admin account UI (#9610)
-- Add healthcheck commands to docker-compose.yml (#9143)
-- Add handler for Move activity to migrate followers (#9629)
-- Add CSV export for lists and domain blocks (#9677)
-- Add `tootctl accounts follow ACCT` (#9414)
-- Add scheduled statuses (#9706)
-- Add immutable caching for S3 objects (#9722)
-- Add cache to custom emojis API (#9732)
-- Add preview cards to non-detailed statuses on public pages (#9714)
-- Add `mod` and `moderator` to list of default reserved usernames (#9713)
-- Add quick links to the admin interface in the web UI (#8545)
+- Add link for adding a user to a list from their profile ([namelessGonbai](https://github.com/tootsuite/mastodon/pull/9062))
+- Add joining several hashtags in a single column ([gdpelican](https://github.com/tootsuite/mastodon/pull/8904))
+- Add volume sliders for videos ([sumdog](https://github.com/tootsuite/mastodon/pull/9366))
+- Add a tooltip explaining what a locked account is ([pawelngei](https://github.com/tootsuite/mastodon/pull/9403))
+- Add preloaded cache for common JSON-LD contexts ([ThibG](https://github.com/tootsuite/mastodon/pull/9412))
+- Add profile directory ([Gargron](https://github.com/tootsuite/mastodon/pull/9427))
+- Add setting to not group reblogs in home feed ([ThibG](https://github.com/tootsuite/mastodon/pull/9248))
+- Add admin ability to remove a user's header image ([ThibG](https://github.com/tootsuite/mastodon/pull/9495))
+- Add account hashtags to ActivityPub actor JSON ([Gargron](https://github.com/tootsuite/mastodon/pull/9450))
+- Add error message for avatar image that's too large ([sumdog](https://github.com/tootsuite/mastodon/pull/9518))
+- Add notification quick-filter bar ([pawelngei](https://github.com/tootsuite/mastodon/pull/9399))
+- Add new first-time tutorial ([Gargron](https://github.com/tootsuite/mastodon/pull/9531))
+- Add moderation warnings ([Gargron](https://github.com/tootsuite/mastodon/pull/9519))
+- Add emoji codepoint mappings for v11.0 ([Gargron](https://github.com/tootsuite/mastodon/pull/9618))
+- Add REST API for creating an account ([Gargron](https://github.com/tootsuite/mastodon/pull/9572))
+- Add support for Malayalam in language filter ([tachyons](https://github.com/tootsuite/mastodon/pull/9624))
+- Add exclude_reblogs option to account statuses API ([Gargron](https://github.com/tootsuite/mastodon/pull/9640))
+- Add local followers page to admin account UI ([chr-1x](https://github.com/tootsuite/mastodon/pull/9610))
+- Add healthcheck commands to docker-compose.yml ([BenLubar](https://github.com/tootsuite/mastodon/pull/9143))
+- Add handler for Move activity to migrate followers ([Gargron](https://github.com/tootsuite/mastodon/pull/9629))
+- Add CSV export for lists and domain blocks ([Gargron](https://github.com/tootsuite/mastodon/pull/9677))
+- Add `tootctl accounts follow ACCT` ([Gargron](https://github.com/tootsuite/mastodon/pull/9414))
+- Add scheduled statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/9706))
+- Add immutable caching for S3 objects ([nolanlawson](https://github.com/tootsuite/mastodon/pull/9722))
+- Add cache to custom emojis API ([Gargron](https://github.com/tootsuite/mastodon/pull/9732))
+- Add preview cards to non-detailed statuses on public pages ([Gargron](https://github.com/tootsuite/mastodon/pull/9714))
+- Add `mod` and `moderator` to list of default reserved usernames ([Gargron](https://github.com/tootsuite/mastodon/pull/9713))
+- Add quick links to the admin interface in the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/8545))
+- Add `tootctl domains crawl` ([Gargron](https://github.com/tootsuite/mastodon/pull/9809))
+- Add attachment list fallback to public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/9780))
+- Add `tootctl --version` ([Gargron](https://github.com/tootsuite/mastodon/pull/9835))
+- Add information about how to opt-in to the directory on the directory ([Gargron](https://github.com/tootsuite/mastodon/pull/9834))
+- Add timeouts for S3 ([Gargron](https://github.com/tootsuite/mastodon/pull/9842))
+- Add support for non-public reblogs from ActivityPub ([Gargron](https://github.com/tootsuite/mastodon/pull/9841))
+- Add sending of `Reject` activity when sending a `Block` activity ([ThibG](https://github.com/tootsuite/mastodon/pull/9811))
### Changed
-- Temporarily pause timeline if mouse moved recently (#9200)
-- Change the password form order (#9267)
-- Redesign admin UI for accounts (#9340, #9643)
-- Redesign admin UI for instances/domain blocks (#9645)
-- Swap avatar and header input fields in profile page (#9271)
-- When posting in mobile mode, go back to previous history location (#9502)
-- Split out is_changing_upload from is_submitting (#9536)
-- Back to the getting-started when pins the timeline. (#9561)
-- Allow unauthenticated REST API access to GET /api/v1/accounts/:id/statuses (#9573)
-- Limit maximum visibility of local silenced users to unlisted (#9583)
-- Change API error message for unconfirmed accounts (#9625)
-- Change the icon to "reply-all" when it's a reply to other accounts (#9378)
-- Do not ignore federated reports targetting already-reported accounts (#9534)
-- Upgrade default Ruby version to 2.6.0 (#9688)
-- Change e-mail digest frequency (#9689)
-- Change Docker images for Tor support in docker-compose.yml (#9438)
-- Display fallback link card thumbnail when none is given (#9715)
-- Change account bio length validation to ignore mention domains and URLs (#9717)
-- Use configured contact user for "anonymous" federation activities (#9661)
-- Change remote interaction dialog to use specific actions instead of generic "interact" (#9743)
-- Always re-fetch public key when signature verification fails to support blind key rotation (#9667)
-- Make replies to boosts impossible, connect reply to original status instead (#9129)
-- Change e-mail MX validation to check both A and MX records against blacklist (#9489)
+- Temporarily pause timeline if mouse moved recently ([lmorchard](https://github.com/tootsuite/mastodon/pull/9200))
+- Change the password form order ([mayaeh](https://github.com/tootsuite/mastodon/pull/9267))
+- Redesign admin UI for accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/9340), [Gargron](https://github.com/tootsuite/mastodon/pull/9643))
+- Redesign admin UI for instances/domain blocks ([Gargron](https://github.com/tootsuite/mastodon/pull/9645))
+- Swap avatar and header input fields in profile page ([ThibG](https://github.com/tootsuite/mastodon/pull/9271))
+- When posting in mobile mode, go back to previous history location ([ThibG](https://github.com/tootsuite/mastodon/pull/9502))
+- Split out is_changing_upload from is_submitting ([ThibG](https://github.com/tootsuite/mastodon/pull/9536))
+- Back to the getting-started when pins the timeline. ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/9561))
+- Allow unauthenticated REST API access to GET /api/v1/accounts/:id/statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/9573))
+- Limit maximum visibility of local silenced users to unlisted ([ThibG](https://github.com/tootsuite/mastodon/pull/9583))
+- Change API error message for unconfirmed accounts ([noellabo](https://github.com/tootsuite/mastodon/pull/9625))
+- Change the icon to "reply-all" when it's a reply to other accounts ([mayaeh](https://github.com/tootsuite/mastodon/pull/9378))
+- Do not ignore federated reports targetting already-reported accounts ([ThibG](https://github.com/tootsuite/mastodon/pull/9534))
+- Upgrade default Ruby version to 2.6.0 ([Gargron](https://github.com/tootsuite/mastodon/pull/9688))
+- Change e-mail digest frequency ([Gargron](https://github.com/tootsuite/mastodon/pull/9689))
+- Change Docker images for Tor support in docker-compose.yml ([Sir-Boops](https://github.com/tootsuite/mastodon/pull/9438))
+- Display fallback link card thumbnail when none is given ([Gargron](https://github.com/tootsuite/mastodon/pull/9715))
+- Change account bio length validation to ignore mention domains and URLs ([Gargron](https://github.com/tootsuite/mastodon/pull/9717))
+- Use configured contact user for "anonymous" federation activities ([yukimochi](https://github.com/tootsuite/mastodon/pull/9661))
+- Change remote interaction dialog to use specific actions instead of generic "interact" ([Gargron](https://github.com/tootsuite/mastodon/pull/9743))
+- Always re-fetch public key when signature verification fails to support blind key rotation ([ThibG](https://github.com/tootsuite/mastodon/pull/9667))
+- Make replies to boosts impossible, connect reply to original status instead ([valerauko](https://github.com/tootsuite/mastodon/pull/9129))
+- Change e-mail MX validation to check both A and MX records against blacklist ([Gargron](https://github.com/tootsuite/mastodon/pull/9489))
+- Hide floating action button on search and getting started pages ([tmm576](https://github.com/tootsuite/mastodon/pull/9826))
+- Redesign public hashtag page to use a masonry layout ([Gargron](https://github.com/tootsuite/mastodon/pull/9822))
+- Use `summary` as summary instead of content warning for converted ActivityPub objects ([Gargron](https://github.com/tootsuite/mastodon/pull/9823))
+- Display a double reply arrow on public pages for toots that are replies ([ThibG](https://github.com/tootsuite/mastodon/pull/9808))
+- Change admin UI right panel size to be wider ([Kjwon15](https://github.com/tootsuite/mastodon/pull/9768))
### Removed
-- Remove links to bridge.joinmastodon.org (non-functional) (#9608)
-- Remove LD-Signatures from activities that do not need them (#9659)
+- Remove links to bridge.joinmastodon.org (non-functional) ([Gargron](https://github.com/tootsuite/mastodon/pull/9608))
+- Remove LD-Signatures from activities that do not need them ([ThibG](https://github.com/tootsuite/mastodon/pull/9659))
### Fixed
-- Remove unused computation of reblog references from updateTimeline (#9244)
-- Fix loaded embeds resetting if a status arrives from API again (#9270)
-- Fix race condition causing shallow status with only a "favourited" attribute (#9272)
-- Remove intermediary arrays when creating hash maps from results (#9291)
-- Extract counters from accounts table to account_stats table to improve performance (#9295)
-- Change identities id column to a bigint (#9371)
-- Fix conversations API pagination (#9407)
-- Improve account suspension speed and completeness (#9290)
-- Fix thread depth computation in statuses_controller (#9426)
-- Fix database deadlocks by moving account stats update outside transaction (#9437)
-- Escape HTML in profile name preview in profile settings (#9446)
-- Use same CORS policy for /@:username and /users/:username (#9485)
-- Make custom emoji domains case insensitive (#9474)
-- Various fixes to scrollable lists and media gallery (#9501)
-- Fix bootsnap cache directory being declared relatively (#9511)
-- Fix timeline pagination in the web UI (#9516)
-- Fix padding on dropdown elements in preferences (#9517)
-- Make avatar and headers respect GIF autoplay settings (#9515)
-- Do no retry Web Push workers if the server returns a 4xx response (#9434)
-- Minor scrollable list fixes (#9551)
-- Ignore low-confidence CharlockHolmes guesses when parsing link cards (#9510)
-- Fix `tootctl accounts rotate` not updating public keys (#9556)
-- Fix CSP / X-Frame-Options for media players (#9558)
-- Fix unnecessary loadMore calls when the end of a timeline has been reached (#9581)
-- Skip mailer job retries when a record no longer exists (#9590)
-- Fix composer not getting focus after reply confirmation dialog (#9602)
-- Fix signature verification stoplight triggering on non-timeout errors (#9617)
-- Fix ThreadResolveWorker getting queued with invalid URLs (#9628)
-- Fix crash when clearing uninitialized timeline (#9662)
-- Avoid duplicate work by merging ReplyDistributionWorker into DistributionWorker (#9660)
-- Skip full text search if it fails, instead of erroring out completely (#9654)
-- Fix profile metadata links not verifying correctly sometimes (#9673)
-- Ensure blocked user unfollows blocker if Block/Undo-Block activities are processed out of order (#9687)
-- Fix unreadable text color in report modal for some statuses (#9716)
-- Stop GIFV timeline preview explicitly when it's opened in modal (#9749)
+- Remove unused computation of reblog references from updateTimeline ([ThibG](https://github.com/tootsuite/mastodon/pull/9244))
+- Fix loaded embeds resetting if a status arrives from API again ([ThibG](https://github.com/tootsuite/mastodon/pull/9270))
+- Fix race condition causing shallow status with only a "favourited" attribute ([ThibG](https://github.com/tootsuite/mastodon/pull/9272))
+- Remove intermediary arrays when creating hash maps from results ([Gargron](https://github.com/tootsuite/mastodon/pull/9291))
+- Extract counters from accounts table to account_stats table to improve performance ([Gargron](https://github.com/tootsuite/mastodon/pull/9295))
+- Change identities id column to a bigint ([Gargron](https://github.com/tootsuite/mastodon/pull/9371))
+- Fix conversations API pagination ([ThibG](https://github.com/tootsuite/mastodon/pull/9407))
+- Improve account suspension speed and completeness ([Gargron](https://github.com/tootsuite/mastodon/pull/9290))
+- Fix thread depth computation in statuses_controller ([ThibG](https://github.com/tootsuite/mastodon/pull/9426))
+- Fix database deadlocks by moving account stats update outside transaction ([ThibG](https://github.com/tootsuite/mastodon/pull/9437))
+- Escape HTML in profile name preview in profile settings ([pawelngei](https://github.com/tootsuite/mastodon/pull/9446))
+- Use same CORS policy for /@:username and /users/:username ([ThibG](https://github.com/tootsuite/mastodon/pull/9485))
+- Make custom emoji domains case insensitive ([Esteth](https://github.com/tootsuite/mastodon/pull/9474))
+- Various fixes to scrollable lists and media gallery ([ThibG](https://github.com/tootsuite/mastodon/pull/9501))
+- Fix bootsnap cache directory being declared relatively ([Gargron](https://github.com/tootsuite/mastodon/pull/9511))
+- Fix timeline pagination in the web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9516))
+- Fix padding on dropdown elements in preferences ([ThibG](https://github.com/tootsuite/mastodon/pull/9517))
+- Make avatar and headers respect GIF autoplay settings ([ThibG](https://github.com/tootsuite/mastodon/pull/9515))
+- Do no retry Web Push workers if the server returns a 4xx response ([Gargron](https://github.com/tootsuite/mastodon/pull/9434))
+- Minor scrollable list fixes ([ThibG](https://github.com/tootsuite/mastodon/pull/9551))
+- Ignore low-confidence CharlockHolmes guesses when parsing link cards ([ThibG](https://github.com/tootsuite/mastodon/pull/9510))
+- Fix `tootctl accounts rotate` not updating public keys ([Gargron](https://github.com/tootsuite/mastodon/pull/9556))
+- Fix CSP / X-Frame-Options for media players ([jomo](https://github.com/tootsuite/mastodon/pull/9558))
+- Fix unnecessary loadMore calls when the end of a timeline has been reached ([ThibG](https://github.com/tootsuite/mastodon/pull/9581))
+- Skip mailer job retries when a record no longer exists ([Gargron](https://github.com/tootsuite/mastodon/pull/9590))
+- Fix composer not getting focus after reply confirmation dialog ([ThibG](https://github.com/tootsuite/mastodon/pull/9602))
+- Fix signature verification stoplight triggering on non-timeout errors ([Gargron](https://github.com/tootsuite/mastodon/pull/9617))
+- Fix ThreadResolveWorker getting queued with invalid URLs ([Gargron](https://github.com/tootsuite/mastodon/pull/9628))
+- Fix crash when clearing uninitialized timeline ([ThibG](https://github.com/tootsuite/mastodon/pull/9662))
+- Avoid duplicate work by merging ReplyDistributionWorker into DistributionWorker ([ThibG](https://github.com/tootsuite/mastodon/pull/9660))
+- Skip full text search if it fails, instead of erroring out completely ([Kjwon15](https://github.com/tootsuite/mastodon/pull/9654))
+- Fix profile metadata links not verifying correctly sometimes ([shrft](https://github.com/tootsuite/mastodon/pull/9673))
+- Ensure blocked user unfollows blocker if Block/Undo-Block activities are processed out of order ([ThibG](https://github.com/tootsuite/mastodon/pull/9687))
+- Fix unreadable text color in report modal for some statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/9716))
+- Stop GIFV timeline preview explicitly when it's opened in modal ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/9749))
+- Fix scrollbar width compensation ([ThibG](https://github.com/tootsuite/mastodon/pull/9824))
+- Fix race conditions when processing deleted toots ([ThibG](https://github.com/tootsuite/mastodon/pull/9815))
+- Fix SSO issues on WebKit browsers by disabling Same-Site cookie again ([moritzheiber](https://github.com/tootsuite/mastodon/pull/9819))
+- Fix empty OEmbed error ([renatolond](https://github.com/tootsuite/mastodon/pull/9807))
+- Fix drag & drop modal not disappearing sometimes ([hinaloe](https://github.com/tootsuite/mastodon/pull/9797))
+- Fix statuses with content warnings being displayed in web push notifications sometimes ([ThibG](https://github.com/tootsuite/mastodon/pull/9778))
+- Fix scroll-to-detailed status not working on public pages ([ThibG](https://github.com/tootsuite/mastodon/pull/9773))
+- Fix media modal loading indicator ([ThibG](https://github.com/tootsuite/mastodon/pull/9771))
+- Fix hashtag search results not having a permalink fallback in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9810))
+- Fix slightly cropped font on settings page dropdowns when using system font ([ariasuni](https://github.com/tootsuite/mastodon/pull/9839))
+- Fix not being able to drag & drop text into forms ([tmm576](https://github.com/tootsuite/mastodon/pull/9840))
### Security
-- Sanitize and sandbox toot embeds in web UI (#9552)
+- Sanitize and sandbox toot embeds in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9552))
+- Add tombstones for remote statuses to prevent replay attacks ([ThibG](https://github.com/tootsuite/mastodon/pull/9830))
## [2.6.5] - 2018-12-01
### Changed
-- Change lists to display replies to others on the list and list owner (#9324)
+- Change lists to display replies to others on the list and list owner ([ThibG](https://github.com/tootsuite/mastodon/pull/9324))
### Fixed
-- Fix failures caused by commonly-used JSON-LD contexts being unavailable (#9412)
+- Fix failures caused by commonly-used JSON-LD contexts being unavailable ([ThibG](https://github.com/tootsuite/mastodon/pull/9412))
## [2.6.4] - 2018-11-30
### Fixed
-- Fix yarn dependencies not installing due to yanked event-stream package (#9401)
+- Fix yarn dependencies not installing due to yanked event-stream package ([Gargron](https://github.com/tootsuite/mastodon/pull/9401))
## [2.6.3] - 2018-11-30
### Added
-- Add hyphen to characters allowed in remote usernames (#9345)
+- Add hyphen to characters allowed in remote usernames ([ThibG](https://github.com/tootsuite/mastodon/pull/9345))
### Changed
-- Change server user count to exclude suspended accounts (#9380)
+- Change server user count to exclude suspended accounts ([Gargron](https://github.com/tootsuite/mastodon/pull/9380))
### Fixed
-- Fix ffmpeg processing sometimes stalling due to overfilled stdout buffer (#9368)
-- Fix missing DNS records raising the wrong kind of exception (#9379)
-- Fix already queued deliveries still trying to reach inboxes marked as unavailable (#9358)
+- Fix ffmpeg processing sometimes stalling due to overfilled stdout buffer ([hugogameiro](https://github.com/tootsuite/mastodon/pull/9368))
+- Fix missing DNS records raising the wrong kind of exception ([Gargron](https://github.com/tootsuite/mastodon/pull/9379))
+- Fix already queued deliveries still trying to reach inboxes marked as unavailable ([Gargron](https://github.com/tootsuite/mastodon/pull/9358))
### Security
-- Fix TLS handshake timeout not being enforced (#9381)
+- Fix TLS handshake timeout not being enforced ([Gargron](https://github.com/tootsuite/mastodon/pull/9381))
## [2.6.2] - 2018-11-23
### Added
-- Add Page to whitelisted ActivityPub types (#9188)
-- Add 20px to column width in web UI (#9227)
-- Add amount of freed disk space in `tootctl media remove` (#9229, #9239, #9288)
-- Add "Show thread" link to self-replies (#9228)
+- Add Page to whitelisted ActivityPub types ([mbajur](https://github.com/tootsuite/mastodon/pull/9188))
+- Add 20px to column width in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/9227))
+- Add amount of freed disk space in `tootctl media remove` ([Gargron](https://github.com/tootsuite/mastodon/pull/9229), [Gargron](https://github.com/tootsuite/mastodon/pull/9239), [mayaeh](https://github.com/tootsuite/mastodon/pull/9288))
+- Add "Show thread" link to self-replies ([Gargron](https://github.com/tootsuite/mastodon/pull/9228))
### Changed
-- Change order of Atom and RSS links so Atom is first (#9302)
-- Change Nginx configuration for Nanobox apps (#9310)
-- Change the follow action to appear instant in web UI (#9220)
-- Change how the ActiveRecord connection is instantiated in on_worker_boot (#9238)
-- Change `tootctl accounts cull` to always touch accounts so they can be skipped (#9293)
-- Change mime type comparison to ignore JSON-LD profile (#9179)
+- Change order of Atom and RSS links so Atom is first ([Alkarex](https://github.com/tootsuite/mastodon/pull/9302))
+- Change Nginx configuration for Nanobox apps ([danhunsaker](https://github.com/tootsuite/mastodon/pull/9310))
+- Change the follow action to appear instant in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/9220))
+- Change how the ActiveRecord connection is instantiated in on_worker_boot ([Gargron](https://github.com/tootsuite/mastodon/pull/9238))
+- Change `tootctl accounts cull` to always touch accounts so they can be skipped ([renatolond](https://github.com/tootsuite/mastodon/pull/9293))
+- Change mime type comparison to ignore JSON-LD profile ([valerauko](https://github.com/tootsuite/mastodon/pull/9179))
### Fixed
-- Fix web UI crash when conversation has no last status (#9207)
-- Fix follow limit validator reporting lower number past threshold (#9230)
-- Fix form validation flash message color and input borders (#9235)
-- Fix invalid twitter:player cards being displayed (#9254)
-- Fix emoji update date being processed incorrectly (#9255)
-- Fix playing embed resetting if status is reloaded in web UI (#9270, #9275)
-- Fix web UI crash when favouriting a deleted status (#9272)
-- Fix intermediary arrays being created for hash maps (#9291)
-- Fix filter ID not being a string in REST API (#9303)
+- Fix web UI crash when conversation has no last status ([sammy8806](https://github.com/tootsuite/mastodon/pull/9207))
+- Fix follow limit validator reporting lower number past threshold ([Gargron](https://github.com/tootsuite/mastodon/pull/9230))
+- Fix form validation flash message color and input borders ([Gargron](https://github.com/tootsuite/mastodon/pull/9235))
+- Fix invalid twitter:player cards being displayed ([ThibG](https://github.com/tootsuite/mastodon/pull/9254))
+- Fix emoji update date being processed incorrectly ([ThibG](https://github.com/tootsuite/mastodon/pull/9255))
+- Fix playing embed resetting if status is reloaded in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9270), [Gargron](https://github.com/tootsuite/mastodon/pull/9275))
+- Fix web UI crash when favouriting a deleted status ([ThibG](https://github.com/tootsuite/mastodon/pull/9272))
+- Fix intermediary arrays being created for hash maps ([Gargron](https://github.com/tootsuite/mastodon/pull/9291))
+- Fix filter ID not being a string in REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/9303))
### Security
-- Fix multiple remote account deletions being able to deadlock the database (#9292)
-- Fix HTTP connection timeout of 10s not being enforced (#9329)
+- Fix multiple remote account deletions being able to deadlock the database ([Gargron](https://github.com/tootsuite/mastodon/pull/9292))
+- Fix HTTP connection timeout of 10s not being enforced ([Gargron](https://github.com/tootsuite/mastodon/pull/9329))
## [2.6.1] - 2018-10-30
### Fixed
-- Fix resolving resources by URL not working due to a regression in #9132 (#9171)
-- Fix reducer error in web UI when a conversation has no last status (#9173)
+- Fix resolving resources by URL not working due to a regression in [valerauko](https://github.com/tootsuite/mastodon/pull/9132) ([Gargron](https://github.com/tootsuite/mastodon/pull/9171))
+- Fix reducer error in web UI when a conversation has no last status ([Gargron](https://github.com/tootsuite/mastodon/pull/9173))
## [2.6.0] - 2018-10-30
### Added
-- Add link ownership verification (#8703)
-- Add conversations API (#8832)
-- Add limit for the number of people that can be followed from one account (#8807)
-- Add admin setting to customize mascot (#8766)
-- Add support for more granular ActivityPub audiences from other software, i.e. circles (#8950, #9093, #9150)
-- Add option to block all reports from a domain (#8830)
-- Add user preference to always expand toots marked with content warnings (#8762)
-- Add user preference to always hide all media (#8569)
-- Add `force_login` param to OAuth authorize page (#8655)
-- Add `tootctl accounts backup` (#8642, #8811)
-- Add `tootctl accounts create` (#8642, #8811)
-- Add `tootctl accounts cull` (#8642, #8811)
-- Add `tootctl accounts delete` (#8642, #8811)
-- Add `tootctl accounts modify` (#8642, #8811)
-- Add `tootctl accounts refresh` (#8642, #8811)
-- Add `tootctl feeds build` (#8642, #8811)
-- Add `tootctl feeds clear` (#8642, #8811)
-- Add `tootctl settings registrations open` (#8642, #8811)
-- Add `tootctl settings registrations close` (#8642, #8811)
-- Add `min_id` param to REST API to support backwards pagination (#8736)
-- Add a confirmation dialog when hitting reply and the compose box isn't empty (#8893)
-- Add PostgreSQL disk space growth tracking in PGHero (#8906)
-- Add button for disabling local account to report quick actions bar (#9024)
-- Add Czech language (#8594)
-- Add `same-site` (`lax`) attribute to cookies (#8626)
-- Add support for styled scrollbars in Firefox Nightly (#8653)
-- Add highlight to the active tab in web UI profiles (#8673)
-- Add auto-focus for comment textarea in report modal (#8689)
-- Add auto-focus for emoji picker's search field (#8688)
-- Add nginx and systemd templates to `dist/` directory (#8770)
-- Add support for `/.well-known/change-password` (#8828)
-- Add option to override FFMPEG binary path (#8855)
-- Add `dns-prefetch` tag when using different host for assets or uploads (#8942)
-- Add `description` meta tag (#8941)
-- Add `Content-Security-Policy` header (#8957)
-- Add cache for the instance info API (#8765)
-- Add suggested follows to search screen in mobile layout (#9010)
-- Add CORS header to `/.well-known/*` routes (#9083)
-- Add `card` attribute to statuses returned from REST API (#9120)
-- Add in-stream link preview (#9120)
-- Add support for ActivityPub `Page` objects (#9121)
+- Add link ownership verification ([Gargron](https://github.com/tootsuite/mastodon/pull/8703))
+- Add conversations API ([Gargron](https://github.com/tootsuite/mastodon/pull/8832))
+- Add limit for the number of people that can be followed from one account ([Gargron](https://github.com/tootsuite/mastodon/pull/8807))
+- Add admin setting to customize mascot ([ashleyhull-versent](https://github.com/tootsuite/mastodon/pull/8766))
+- Add support for more granular ActivityPub audiences from other software, i.e. circles ([Gargron](https://github.com/tootsuite/mastodon/pull/8950), [Gargron](https://github.com/tootsuite/mastodon/pull/9093), [Gargron](https://github.com/tootsuite/mastodon/pull/9150))
+- Add option to block all reports from a domain ([Gargron](https://github.com/tootsuite/mastodon/pull/8830))
+- Add user preference to always expand toots marked with content warnings ([webroo](https://github.com/tootsuite/mastodon/pull/8762))
+- Add user preference to always hide all media ([fvh-P](https://github.com/tootsuite/mastodon/pull/8569))
+- Add `force_login` param to OAuth authorize page ([Gargron](https://github.com/tootsuite/mastodon/pull/8655))
+- Add `tootctl accounts backup` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
+- Add `tootctl accounts create` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
+- Add `tootctl accounts cull` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
+- Add `tootctl accounts delete` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
+- Add `tootctl accounts modify` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
+- Add `tootctl accounts refresh` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
+- Add `tootctl feeds build` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
+- Add `tootctl feeds clear` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
+- Add `tootctl settings registrations open` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
+- Add `tootctl settings registrations close` ([Gargron](https://github.com/tootsuite/mastodon/pull/8642), [Gargron](https://github.com/tootsuite/mastodon/pull/8811))
+- Add `min_id` param to REST API to support backwards pagination ([Gargron](https://github.com/tootsuite/mastodon/pull/8736))
+- Add a confirmation dialog when hitting reply and the compose box isn't empty ([ThibG](https://github.com/tootsuite/mastodon/pull/8893))
+- Add PostgreSQL disk space growth tracking in PGHero ([Gargron](https://github.com/tootsuite/mastodon/pull/8906))
+- Add button for disabling local account to report quick actions bar ([Gargron](https://github.com/tootsuite/mastodon/pull/9024))
+- Add Czech language ([Aditoo17](https://github.com/tootsuite/mastodon/pull/8594))
+- Add `same-site` (`lax`) attribute to cookies ([sorin-davidoi](https://github.com/tootsuite/mastodon/pull/8626))
+- Add support for styled scrollbars in Firefox Nightly ([sorin-davidoi](https://github.com/tootsuite/mastodon/pull/8653))
+- Add highlight to the active tab in web UI profiles ([rhoio](https://github.com/tootsuite/mastodon/pull/8673))
+- Add auto-focus for comment textarea in report modal ([ThibG](https://github.com/tootsuite/mastodon/pull/8689))
+- Add auto-focus for emoji picker's search field ([ThibG](https://github.com/tootsuite/mastodon/pull/8688))
+- Add nginx and systemd templates to `dist/` directory ([Gargron](https://github.com/tootsuite/mastodon/pull/8770))
+- Add support for `/.well-known/change-password` ([Gargron](https://github.com/tootsuite/mastodon/pull/8828))
+- Add option to override FFMPEG binary path ([sascha-sl](https://github.com/tootsuite/mastodon/pull/8855))
+- Add `dns-prefetch` tag when using different host for assets or uploads ([Gargron](https://github.com/tootsuite/mastodon/pull/8942))
+- Add `description` meta tag ([Gargron](https://github.com/tootsuite/mastodon/pull/8941))
+- Add `Content-Security-Policy` header ([ThibG](https://github.com/tootsuite/mastodon/pull/8957))
+- Add cache for the instance info API ([ykzts](https://github.com/tootsuite/mastodon/pull/8765))
+- Add suggested follows to search screen in mobile layout ([Gargron](https://github.com/tootsuite/mastodon/pull/9010))
+- Add CORS header to `/.well-known/*` routes ([BenLubar](https://github.com/tootsuite/mastodon/pull/9083))
+- Add `card` attribute to statuses returned from REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/9120))
+- Add in-stream link preview ([Gargron](https://github.com/tootsuite/mastodon/pull/9120))
+- Add support for ActivityPub `Page` objects ([mbajur](https://github.com/tootsuite/mastodon/pull/9121))
### Changed
-- Change forms design (#8703)
-- Change reports overview to group by target account (#8674)
-- Change web UI to show "read more" link on overly long in-stream statuses (#8205)
-- Change design of direct messages column (#8832, #9022)
-- Change home timelines to exclude DMs (#8940)
-- Change list timelines to exclude all replies (#8683)
-- Change admin accounts UI default sort to most recent (#8813)
-- Change documentation URL in the UI (#8898)
-- Change style of success and failure messages (#8973)
-- Change DM filtering to always allow DMs from staff (#8993)
-- Change recommended Ruby version to 2.5.3 (#9003)
-- Change docker-compose default to persist volumes in current directory (#9055)
-- Change character counters on edit profile page to input length limit (#9100)
-- Change notification filtering to always let through messages from staff (#9152)
-- Change "hide boosts from user" function also hiding notifications about boosts (#9147)
-- Change CSS `detailed-status__wrapper` class actually wrap the detailed status (#8547)
+- Change forms design ([Gargron](https://github.com/tootsuite/mastodon/pull/8703))
+- Change reports overview to group by target account ([Gargron](https://github.com/tootsuite/mastodon/pull/8674))
+- Change web UI to show "read more" link on overly long in-stream statuses ([lanodan](https://github.com/tootsuite/mastodon/pull/8205))
+- Change design of direct messages column ([Gargron](https://github.com/tootsuite/mastodon/pull/8832), [Gargron](https://github.com/tootsuite/mastodon/pull/9022))
+- Change home timelines to exclude DMs ([Gargron](https://github.com/tootsuite/mastodon/pull/8940))
+- Change list timelines to exclude all replies ([cbayerlein](https://github.com/tootsuite/mastodon/pull/8683))
+- Change admin accounts UI default sort to most recent ([Gargron](https://github.com/tootsuite/mastodon/pull/8813))
+- Change documentation URL in the UI ([Gargron](https://github.com/tootsuite/mastodon/pull/8898))
+- Change style of success and failure messages ([Gargron](https://github.com/tootsuite/mastodon/pull/8973))
+- Change DM filtering to always allow DMs from staff ([qguv](https://github.com/tootsuite/mastodon/pull/8993))
+- Change recommended Ruby version to 2.5.3 ([zunda](https://github.com/tootsuite/mastodon/pull/9003))
+- Change docker-compose default to persist volumes in current directory ([Gargron](https://github.com/tootsuite/mastodon/pull/9055))
+- Change character counters on edit profile page to input length limit ([Gargron](https://github.com/tootsuite/mastodon/pull/9100))
+- Change notification filtering to always let through messages from staff ([Gargron](https://github.com/tootsuite/mastodon/pull/9152))
+- Change "hide boosts from user" function also hiding notifications about boosts ([ThibG](https://github.com/tootsuite/mastodon/pull/9147))
+- Change CSS `detailed-status__wrapper` class actually wrap the detailed status ([trwnh](https://github.com/tootsuite/mastodon/pull/8547))
### Deprecated
-- `GET /api/v1/timelines/direct` → `GET /api/v1/conversations` (#8832)
-- `POST /api/v1/notifications/dismiss` → `POST /api/v1/notifications/:id/dismiss` (#8905)
-- `GET /api/v1/statuses/:id/card` → `card` attributed included in status (#9120)
+- `GET /api/v1/timelines/direct` → `GET /api/v1/conversations` ([Gargron](https://github.com/tootsuite/mastodon/pull/8832))
+- `POST /api/v1/notifications/dismiss` → `POST /api/v1/notifications/:id/dismiss` ([Gargron](https://github.com/tootsuite/mastodon/pull/8905))
+- `GET /api/v1/statuses/:id/card` → `card` attributed included in status ([Gargron](https://github.com/tootsuite/mastodon/pull/9120))
### Removed
-- Remove "on this device" label in column push settings (#8704)
-- Remove rake tasks in favour of tootctl commands (#8675)
+- Remove "on this device" label in column push settings ([rhoio](https://github.com/tootsuite/mastodon/pull/8704))
+- Remove rake tasks in favour of tootctl commands ([Gargron](https://github.com/tootsuite/mastodon/pull/8675))
### Fixed
-- Fix remote statuses using instance's default locale if no language given (#8861)
-- Fix streaming API not exiting when port or socket is unavailable (#9023)
-- Fix network calls being performed in database transaction in ActivityPub handler (#8951)
-- Fix dropdown arrow position (#8637)
-- Fix first element of dropdowns being focused even if not using keyboard (#8679)
-- Fix tootctl requiring `bundle exec` invocation (#8619)
-- Fix public pages not using animation preference for avatars (#8614)
-- Fix OEmbed/OpenGraph cards not understanding relative URLs (#8669)
-- Fix some dark emojis not having a white outline (#8597)
-- Fix media description not being displayed in various media modals (#8678)
-- Fix generated URLs of desktop notifications missing base URL (#8758)
-- Fix RTL styles (#8764, #8767, #8823, #8897, #9005, #9007, #9018, #9021, #9145, #9146)
-- Fix crash in streaming API when tag param missing (#8955)
-- Fix hotkeys not working when no element is focused (#8998)
-- Fix some hotkeys not working on detailed status view (#9006)
-- Fix og:url on status pages (#9047)
-- Fix upload option buttons only being visible on hover (#9074)
-- Fix tootctl not returning exit code 1 on wrong arguments (#9094)
-- Fix preview cards for appearing for profiles mentioned in toot (#6934, #9158)
-- Fix local accounts sometimes being duplicated as faux-remote (#9109)
-- Fix emoji search when the shortcode has multiple separators (#9124)
-- Fix dropdowns sometimes being partially obscured by other elements (#9126)
-- Fix cache not updating when reply/boost/favourite counters or media sensitivity update (#9119)
-- Fix empty display name precedence over username in web UI (#9163)
-- Fix td instead of th in sessions table header (#9162)
-- Fix handling of content types with profile (#9132)
+- Fix remote statuses using instance's default locale if no language given ([Kjwon15](https://github.com/tootsuite/mastodon/pull/8861))
+- Fix streaming API not exiting when port or socket is unavailable ([Gargron](https://github.com/tootsuite/mastodon/pull/9023))
+- Fix network calls being performed in database transaction in ActivityPub handler ([Gargron](https://github.com/tootsuite/mastodon/pull/8951))
+- Fix dropdown arrow position ([ThibG](https://github.com/tootsuite/mastodon/pull/8637))
+- Fix first element of dropdowns being focused even if not using keyboard ([ThibG](https://github.com/tootsuite/mastodon/pull/8679))
+- Fix tootctl requiring `bundle exec` invocation ([abcang](https://github.com/tootsuite/mastodon/pull/8619))
+- Fix public pages not using animation preference for avatars ([renatolond](https://github.com/tootsuite/mastodon/pull/8614))
+- Fix OEmbed/OpenGraph cards not understanding relative URLs ([ThibG](https://github.com/tootsuite/mastodon/pull/8669))
+- Fix some dark emojis not having a white outline ([ThibG](https://github.com/tootsuite/mastodon/pull/8597))
+- Fix media description not being displayed in various media modals ([ThibG](https://github.com/tootsuite/mastodon/pull/8678))
+- Fix generated URLs of desktop notifications missing base URL ([GenbuHase](https://github.com/tootsuite/mastodon/pull/8758))
+- Fix RTL styles ([mabkenar](https://github.com/tootsuite/mastodon/pull/8764), [mabkenar](https://github.com/tootsuite/mastodon/pull/8767), [mabkenar](https://github.com/tootsuite/mastodon/pull/8823), [mabkenar](https://github.com/tootsuite/mastodon/pull/8897), [mabkenar](https://github.com/tootsuite/mastodon/pull/9005), [mabkenar](https://github.com/tootsuite/mastodon/pull/9007), [mabkenar](https://github.com/tootsuite/mastodon/pull/9018), [mabkenar](https://github.com/tootsuite/mastodon/pull/9021), [mabkenar](https://github.com/tootsuite/mastodon/pull/9145), [mabkenar](https://github.com/tootsuite/mastodon/pull/9146))
+- Fix crash in streaming API when tag param missing ([Gargron](https://github.com/tootsuite/mastodon/pull/8955))
+- Fix hotkeys not working when no element is focused ([ThibG](https://github.com/tootsuite/mastodon/pull/8998))
+- Fix some hotkeys not working on detailed status view ([ThibG](https://github.com/tootsuite/mastodon/pull/9006))
+- Fix og:url on status pages ([ThibG](https://github.com/tootsuite/mastodon/pull/9047))
+- Fix upload option buttons only being visible on hover ([Gargron](https://github.com/tootsuite/mastodon/pull/9074))
+- Fix tootctl not returning exit code 1 on wrong arguments ([sascha-sl](https://github.com/tootsuite/mastodon/pull/9094))
+- Fix preview cards for appearing for profiles mentioned in toot ([ThibG](https://github.com/tootsuite/mastodon/pull/6934), [ThibG](https://github.com/tootsuite/mastodon/pull/9158))
+- Fix local accounts sometimes being duplicated as faux-remote ([Gargron](https://github.com/tootsuite/mastodon/pull/9109))
+- Fix emoji search when the shortcode has multiple separators ([ThibG](https://github.com/tootsuite/mastodon/pull/9124))
+- Fix dropdowns sometimes being partially obscured by other elements ([kedamaDQ](https://github.com/tootsuite/mastodon/pull/9126))
+- Fix cache not updating when reply/boost/favourite counters or media sensitivity update ([Gargron](https://github.com/tootsuite/mastodon/pull/9119))
+- Fix empty display name precedence over username in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/9163))
+- Fix td instead of th in sessions table header ([Gargron](https://github.com/tootsuite/mastodon/pull/9162))
+- Fix handling of content types with profile ([valerauko](https://github.com/tootsuite/mastodon/pull/9132))
## [2.5.2] - 2018-10-12
### Security
-- Fix XSS vulnerability (#8959)
+- Fix XSS vulnerability ([Gargron](https://github.com/tootsuite/mastodon/pull/8959))
## [2.5.1] - 2018-10-07
### Fixed
-- Fix database migrations for PostgreSQL below 9.5 (#8903)
-- Fix class autoloading issue in ActivityPub Create handler (#8820)
-- Fix cache statistics not being sent via statsd when statsd enabled (#8831)
-- Bump puma from 3.11.4 to 3.12.0 (#8883)
+- Fix database migrations for PostgreSQL below 9.5 ([Gargron](https://github.com/tootsuite/mastodon/pull/8903))
+- Fix class autoloading issue in ActivityPub Create handler ([Gargron](https://github.com/tootsuite/mastodon/pull/8820))
+- Fix cache statistics not being sent via statsd when statsd enabled ([ykzts](https://github.com/tootsuite/mastodon/pull/8831))
+- Bump puma from 3.11.4 to 3.12.0 ([dependabot[bot]](https://github.com/tootsuite/mastodon/pull/8883))
### Security
-- Fix some local images not having their EXIF metadata stripped on upload (#8714)
-- Fix being able to enable a disabled relay via ActivityPub Accept handler (#8864)
-- Bump nokogiri from 1.8.4 to 1.8.5 (#8881)
-- Fix being able to report statuses not belonging to the reported account (#8916)
+- Fix some local images not having their EXIF metadata stripped on upload ([ThibG](https://github.com/tootsuite/mastodon/pull/8714))
+- Fix being able to enable a disabled relay via ActivityPub Accept handler ([ThibG](https://github.com/tootsuite/mastodon/pull/8864))
+- Bump nokogiri from 1.8.4 to 1.8.5 ([dependabot[bot]](https://github.com/tootsuite/mastodon/pull/8881))
+- Fix being able to report statuses not belonging to the reported account ([ThibG](https://github.com/tootsuite/mastodon/pull/8916))
diff --git a/Dockerfile b/Dockerfile
index 28cb5260e50..aefcb44bded 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
-FROM node:8.14.0-alpine as node
-FROM ruby:2.4.5-alpine3.8
+FROM node:8.15-alpine as node
+FROM ruby:2.6-alpine3.8
LABEL maintainer="https://github.com/tootsuite/mastodon" \
description="Your self-hosted, globally interconnected microblogging community"
diff --git a/Gemfile b/Gemfile
index 5b523f338b5..bf3c2b51d08 100644
--- a/Gemfile
+++ b/Gemfile
@@ -90,7 +90,7 @@ gem 'tzinfo-data', '~> 1.2018'
gem 'webpacker', '~> 3.5'
gem 'webpush'
-gem 'json-ld', '~> 2.2'
+gem 'json-ld', '~> 3.0'
gem 'json-ld-preloaded', '~> 3.0'
gem 'rdf-normalize', '~> 0.3'
@@ -128,8 +128,8 @@ group :development do
gem 'letter_opener', '~> 1.7'
gem 'letter_opener_web', '~> 1.3'
gem 'memory_profiler'
- gem 'rubocop', '~> 0.62', require: false
- gem 'brakeman', '~> 4.3', require: false
+ gem 'rubocop', '~> 0.63', require: false
+ gem 'brakeman', '~> 4.4', require: false
gem 'bundler-audit', '~> 0.6', require: false
gem 'scss_lint', '~> 0.57', require: false
diff --git a/Gemfile.lock b/Gemfile.lock
index a94e4f14517..0d37a8d36be 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -100,14 +100,14 @@ GEM
debug_inspector (>= 0.0.1)
bootsnap (1.3.2)
msgpack (~> 1.0)
- brakeman (4.3.1)
+ brakeman (4.4.0)
browser (2.5.3)
builder (3.2.3)
bullet (5.9.0)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
- bundler-audit (0.6.0)
- bundler (~> 1.2)
+ bundler-audit (0.6.1)
+ bundler (>= 1.2.0, < 3)
thor (~> 0.18)
byebug (10.0.2)
capistrano (3.11.0)
@@ -286,10 +286,10 @@ GEM
idn-ruby (0.1.0)
ipaddress (0.8.3)
iso-639 (0.2.8)
- jaro_winkler (1.5.1)
+ jaro_winkler (1.5.2)
jmespath (1.4.0)
json (2.1.0)
- json-ld (2.2.1)
+ json-ld (3.0.2)
multi_json (~> 1.12)
rdf (>= 2.2.8, < 4.0)
json-ld-preloaded (3.0.0)
@@ -365,7 +365,7 @@ GEM
concurrent-ruby (~> 1.0, >= 1.0.2)
sidekiq (>= 3.5)
statsd-ruby (~> 1.4, >= 1.4.0)
- oj (3.7.6)
+ oj (3.7.7)
omniauth (1.9.0)
hashie (>= 3.4.6, < 3.7.0)
rack (>= 1.6.2, < 3)
@@ -394,7 +394,7 @@ GEM
parallel (1.12.1)
parallel_tests (2.27.1)
parallel
- parser (2.5.3.0)
+ parser (2.6.0.0)
ast (~> 2.4.0)
pastel (0.7.2)
equatable (~> 0.5.0)
@@ -473,7 +473,7 @@ GEM
rb-fsevent (0.10.3)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
- rdf (3.0.7)
+ rdf (3.0.9)
hamster (~> 3.0)
link_header (~> 0.0, >= 0.0.8)
rdf-normalize (0.3.3)
@@ -527,7 +527,7 @@ GEM
rspec-core (~> 3.0, >= 3.0.0)
sidekiq (>= 2.4.0)
rspec-support (3.8.0)
- rubocop (0.62.0)
+ rubocop (0.63.0)
jaro_winkler (~> 1.5.1)
parallel (~> 1.10)
parser (>= 2.5, != 2.5.1.1)
@@ -663,7 +663,7 @@ DEPENDENCIES
better_errors (~> 2.5)
binding_of_caller (~> 0.7)
bootsnap (~> 1.3)
- brakeman (~> 4.3)
+ brakeman (~> 4.4)
browser
bullet (~> 5.9)
bundler-audit (~> 0.6)
@@ -702,7 +702,7 @@ DEPENDENCIES
i18n-tasks (~> 0.9)
idn-ruby
iso-639
- json-ld (~> 2.2)
+ json-ld (~> 3.0)
json-ld-preloaded (~> 3.0)
kaminari (~> 1.1)
letter_opener (~> 1.7)
@@ -749,7 +749,7 @@ DEPENDENCIES
rqrcode (~> 0.10)
rspec-rails (~> 3.8)
rspec-sidekiq (~> 3.0)
- rubocop (~> 0.62)
+ rubocop (~> 0.63)
sanitize (~> 5.0)
scss_lint (~> 0.57)
sidekiq (~> 5.2)
diff --git a/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb b/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb
index 4315b028323..6851099f661 100644
--- a/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb
+++ b/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb
@@ -25,7 +25,7 @@ class Api::V1::Statuses::RebloggedByAccountsController < Api::BaseController
end
def paginated_statuses
- Status.where(reblog_of_id: @status.id).paginate_by_max_id(
+ Status.where(reblog_of_id: @status.id).where(visibility: [:public, :unlisted]).paginate_by_max_id(
limit_param(DEFAULT_ACCOUNTS_LIMIT),
params[:max_id],
params[:since_id]
diff --git a/app/controllers/tags_controller.rb b/app/controllers/tags_controller.rb
index d06f4e070bf..186d276c23b 100644
--- a/app/controllers/tags_controller.rb
+++ b/app/controllers/tags_controller.rb
@@ -3,6 +3,8 @@
class TagsController < ApplicationController
PAGE_SIZE = 20
+ layout 'public'
+
before_action :set_body_classes
before_action :set_instance_presenter
diff --git a/app/javascript/flavours/glitch/components/display_name.js b/app/javascript/flavours/glitch/components/display_name.js
index d6ac4907d6b..a26cff0492c 100644
--- a/app/javascript/flavours/glitch/components/display_name.js
+++ b/app/javascript/flavours/glitch/components/display_name.js
@@ -9,15 +9,23 @@ export default function DisplayName ({
account,
className,
inline,
+ localDomain,
}) {
const computedClass = classNames('display-name', { inline }, className);
+ if (!account) return null;
+
+ let acct = account.get('acct');
+ if (acct.indexOf('@') === -1 && localDomain) {
+ acct = `${acct}@${localDomain}`;
+ }
+
// The result.
return account ? (
{inline ? ' ' : null}
- @{account.get('acct')}
+ @{acct}
) : null;
}
@@ -27,4 +35,5 @@ DisplayName.propTypes = {
account: ImmutablePropTypes.map,
className: PropTypes.string,
inline: PropTypes.bool,
+ localDomain: PropTypes.string,
};
diff --git a/app/javascript/flavours/glitch/features/standalone/hashtag_timeline/index.js b/app/javascript/flavours/glitch/features/standalone/hashtag_timeline/index.js
index 44ba8db92fa..17f06471359 100644
--- a/app/javascript/flavours/glitch/features/standalone/hashtag_timeline/index.js
+++ b/app/javascript/flavours/glitch/features/standalone/hashtag_timeline/index.js
@@ -1,28 +1,32 @@
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
-import StatusListContainer from 'flavours/glitch/features/ui/containers/status_list_container';
+import ImmutablePropTypes from 'react-immutable-proptypes';
import { expandHashtagTimeline } from 'flavours/glitch/actions/timelines';
-import Column from 'flavours/glitch/components/column';
-import ColumnHeader from 'flavours/glitch/components/column_header';
import { connectHashtagStream } from 'flavours/glitch/actions/streaming';
+import Masonry from 'react-masonry-infinite';
+import { List as ImmutableList } from 'immutable';
+import DetailedStatusContainer from 'flavours/glitch/features/status/containers/detailed_status_container';
+import { debounce } from 'lodash';
+import LoadingIndicator from 'flavours/glitch/components/loading_indicator';
-@connect()
-export default class HashtagTimeline extends React.PureComponent {
+const mapStateToProps = (state, { hashtag }) => ({
+ statusIds: state.getIn(['timelines', `hashtag:${hashtag}`, 'items'], ImmutableList()),
+ isLoading: state.getIn(['timelines', `hashtag:${hashtag}`, 'isLoading'], false),
+ hasMore: state.getIn(['timelines', `hashtag:${hashtag}`, 'hasMore'], false),
+});
+
+export default @connect(mapStateToProps)
+class HashtagTimeline extends React.PureComponent {
static propTypes = {
dispatch: PropTypes.func.isRequired,
+ statusIds: ImmutablePropTypes.list.isRequired,
+ isLoading: PropTypes.bool.isRequired,
+ hasMore: PropTypes.bool.isRequired,
hashtag: PropTypes.string.isRequired,
};
- handleHeaderClick = () => {
- this.column.scrollTop();
- }
-
- setRef = c => {
- this.column = c;
- }
-
componentDidMount () {
const { dispatch, hashtag } = this.props;
@@ -37,28 +41,52 @@ export default class HashtagTimeline extends React.PureComponent {
}
}
- handleLoadMore = maxId => {
- this.props.dispatch(expandHashtagTimeline(this.props.hashtag, { maxId }));
+ handleLoadMore = () => {
+ const maxId = this.props.statusIds.last();
+
+ if (maxId) {
+ this.props.dispatch(expandHashtagTimeline(this.props.hashtag, { maxId }));
+ }
}
+ setRef = c => {
+ this.masonry = c;
+ }
+
+ handleHeightChange = debounce(() => {
+ if (!this.masonry) {
+ return;
+ }
+
+ this.masonry.forcePack();
+ }, 50)
+
render () {
- const { hashtag } = this.props;
+ const { statusIds, hasMore, isLoading } = this.props;
+
+ const sizes = [
+ { columns: 1, gutter: 0 },
+ { mq: '415px', columns: 1, gutter: 10 },
+ { mq: '640px', columns: 2, gutter: 10 },
+ { mq: '960px', columns: 3, gutter: 10 },
+ { mq: '1255px', columns: 3, gutter: 10 },
+ ];
+
+ const loader = (isLoading && statusIds.isEmpty()) ?
%{instance}
ist möglicherweise nicht der Server auf dem du registriert bist, also müssen wir dich erst auf deinen Heimserver weiterleiten."
@@ -774,7 +774,7 @@ de:
weibo: Weibo
current_session: Aktuelle Sitzung
description: "%{browser} auf %{platform}"
- explanation: Dies sind die Webbrowser, die derzeit in dein Mastodon-Konto eingeloggt sind.
+ explanation: Dies sind die Webbrowser, die derzeit in deinem Mastodon-Konto eingeloggt sind.
ip: IP-Adresse
platforms:
adobe_air: Adobe Air
@@ -801,7 +801,7 @@ de:
export: Datenexport
followers: Autorisierte Folgende
import: Datenimport
- migrate: Account-Umzug
+ migrate: Konto-Umzug
notifications: Benachrichtigungen
preferences: Einstellungen
settings: Einstellungen
@@ -842,7 +842,7 @@ de:
stream_entries:
pinned: Angehefteter Beitrag
reblogged: teilte
- sensitive_content: Heikle Inhalte
+ sensitive_content: Sensible Inhalte
terms:
body_html: |
rel="me"
-Attribut enthalten. Der Linktext is dabei egal. Hier ist ein Beispiel:'
+ explanation_html: 'Du kannst bestätigen, dass die Links in deinen Profil-Metadaten dir gehören. Dafür muss die verlinkte Website einen Link zurück auf dein Mastodon-Profil enthalten. Dieser Link muss ein rel="me"
-Attribut enthalten. Der Linktext ist dabei egal. Hier ist ein Beispiel:'
verification: Verifizierung
diff --git a/config/locales/devise.sr.yml b/config/locales/devise.sr.yml
index 9d1359695cb..9061e01d470 100644
--- a/config/locales/devise.sr.yml
+++ b/config/locales/devise.sr.yml
@@ -17,11 +17,33 @@ sr:
unconfirmed: Пре наставка морате потврдити свој налог.
mailer:
confirmation_instructions:
+ action: Потврдите адресу е-поште
+ action_with_app: Потврди и врати се на %{app}
+ explanation: Направили сте налог на %{host} са адресом ове е-поште. На један клик сте удаљени од активирања. Ако ово нисте ви, молимо игноришите ову е-пошту.
+ extra_html: Молимо да такође проверите правила ове инстанце и наше услове коришћења.
subject: 'Мастодонт: Упутство за потврду корисничког налога на инстанци %{instance}'
+ title: Потврдите адресу е-поште
+ email_changed:
+ explanation: 'Адреса ове е-поште за ваш налог ће бити промењена у:'
+ extra: Ако нисте променили вашу е-пошту, сасвим је могуће да је неко други добио приступ вашем налогу. Молимо промените лозинку одмах или контактирајте администратора инстанце ако сте закључани изван вашег налога.
+ subject: 'Мастодон: Е-пошта промењена'
+ title: Нова адреса е-поште
password_change:
+ explanation: Лозинка вашег налога је промењена.
+ extra: Ако нисте променили вашу е-пошту, сасвим је могуће да је неко други добио приступ вашем налогу. Молимо промените лозинку одмах или контактирајте администратора инстанце ако сте закључани изван вашег налога.
subject: 'Мастодонт: Лозинка промењена'
+ title: Лозинка промењена
+ reconfirmation_instructions:
+ explanation: Потврдите нову адресу да бисте променили е-пошту.
+ extra: Ако ова промена није иницирана са ваше стране, молимо игноришите ову е-пошту. Адреса е-пошта за овај Мастодон налог неће бити промењена док не приступите повезници/линку изнад.
+ subject: 'Мастодон: Потврдите е-пошту за %{instance}'
+ title: Потврдите адресу е-поште
reset_password_instructions:
+ action: Лозинка промењена
+ explanation: Затражили сте нову лозинку за ваш налог.
+ extra: Ако нисте затражили ово, молимо игноришите ову е-пошту. Ваша лозинка неће бити промењена док не приступите повезници/линку изнад и не направите нову.
subject: 'Мастодонт: Упутство за ресетовање лозинке'
+ title: Лозинка ресетована
unlock_instructions:
subject: 'Мастодонт: Упутство за откључавање корисничког налога'
omniauth_callbacks:
diff --git a/config/locales/doorkeeper.cs.yml b/config/locales/doorkeeper.cs.yml
index 352b31895e2..b9e9bc03493 100644
--- a/config/locales/doorkeeper.cs.yml
+++ b/config/locales/doorkeeper.cs.yml
@@ -72,7 +72,7 @@ cs:
index:
application: Aplikace
created_at: Autorizováno
- date_format: "%d.%m.%Y %H:%M:%S"
+ date_format: "%d. %m. %Y %H:%M:%S"
scopes: Rozsahy
title: Vaše autorizované aplikace
errors:
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 006937a5ce5..8cc9d7c0b22 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -556,8 +556,11 @@ en:
warning_title: Disseminated content availability
directories:
directory: Profile directory
+ enabled: You are currently listed in the directory.
+ enabled_but_waiting: You have opted-in to be listed in the directory, but you do not have the minimum number of followers (%{min_followers}) to be listed yet.
explanation: Discover users based on their interests
explore_mastodon: Explore %{title}
+ how_to_enable: You are not currently opted-in to the directory. You can opt-in below. Use hashtags in your bio text to be listed under specific hashtags!
people:
one: "%{count} person"
other: "%{count} people"
diff --git a/config/locales/ro.yml b/config/locales/ro.yml
index 60a38b7c691..aa4d3c967c4 100644
--- a/config/locales/ro.yml
+++ b/config/locales/ro.yml
@@ -1,6 +1,8 @@
---
ro:
about:
+ features:
+ not_a_product_title: Ești o persoană, nu un produs
hosted_on: Mastodon găzduit de %{domain}
accounts:
posts:
@@ -64,7 +66,7 @@ ro:
success_msg: Contul tău a fost șterg. Nu mai poate fi recuperat :D
warning_html: Doar ștergerea conținutului de pe acest server este garantată. Conținutul tău care a fost redistribuit în alte instațe e posibil să lase urme. Serverele deconecate sau care nu mai sunt abonate la actualizările contului tău nu își vor mai actualiza baza de date.
directories:
- explanation: Descoperă utilizatori în funcție de interesele lor
+ explanation: Descoperă oameni și companii în funcție de interesele lor
explore_mastodon: Explorează %{title}
people:
few: "%{count} persoană"
diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml
index d6e7942b3f0..3958e315f66 100644
--- a/config/locales/simple_form.de.yml
+++ b/config/locales/simple_form.de.yml
@@ -10,14 +10,14 @@ de:
type_html: Wähle aus, was du mit %{acct} machen möchtest
warning_preset_id: Optional. Du kannst immer noch eigenen Text an das Ende der Vorlage hinzufügen
defaults:
- autofollow: Leute die sich über deine Einladung registrieren werden dir automatisch folgen
+ autofollow: Leute, die sich über deine Einladung registrieren, werden dir automatisch folgen
avatar: PNG, GIF oder JPG. Maximal %{size}. Wird auf %{dimensions} px herunterskaliert
bot: Dieses Konto führt lediglich automatisierte Aktionen durch und wird möglicherweise nicht überwacht
context: Ein oder mehrere Aspekte, wo der Filter greifen soll
digest: Wenn du lange Zeit inaktiv bist, wird dir eine Zusammenfassung von Erwähnungen in deiner Abwesenheit zugeschickt
- discoverable_html: Das Verzeichnis lässt dich neue Benutzerkonten finden basierend auf Interessen und Aktivitäten. Dies benötigt mindestens %{min_followers} Follower
- email: Du wirst ein Bestätigungs-E-Mail erhalten
- fields: Du kannst bis zu 4 Elemente als Tabelle dargestellt auf deinem Profil anzeigen lassen
+ discoverable_html: Das Verzeichnis lässt dich basierend auf Interessen und Aktivitäten neue Benutzerkonten finden. Dies benötigt mindestens %{min_followers} Follower
+ email: Du wirst eine Bestätigungs-E-Mail erhalten
+ fields: Du kannst bis zu 4 Elemente auf deinem Profil anzeigen lassen, die als Tabelle dargestellt werden
header: PNG, GIF oder JPG. Maximal %{size}. Wird auf %{dimensions} px herunterskaliert
inbox_url: Kopiere die URL von der Startseite des gewünschten Relays
irreversible: Gefilterte Beiträge werden unwiderruflich gefiltert, selbst wenn der Filter später entfernt wurde
@@ -31,11 +31,11 @@ de:
setting_display_media_default: Verstecke Medien, die als sensibel markiert sind
setting_display_media_hide_all: Alle Medien immer verstecken
setting_display_media_show_all: Medien, die als sensibel markiert sind, immer anzeigen
- setting_hide_network: Wem du folgst und wer dir folgt wird in deinem Profil nicht angezeigt
+ setting_hide_network: Wem du folgst und wer dir folgt, wird in deinem Profil nicht angezeigt
setting_noindex: Betrifft dein öffentliches Profil und deine Beiträge
setting_theme: Wirkt sich darauf aus, wie Mastodon aussieht, egal auf welchem Gerät du eingeloggt bist.
username: Dein Benutzer:innen-Name wird auf %{domain} nur einmal vorkommen
- whole_word: Wenn das Schlüsselwort oder -phrase nur Buchstaben und Zahlen enthält, wird es nur angewendet werden, wenn es dem ganzen Wort entspricht
+ whole_word: Wenn das Schlagwort oder die Phrase nur Buchstaben und Zahlen enthält, wird es nur angewendet, wenn es dem ganzen Wort entspricht
imports:
data: CSV-Datei, die aus einer anderen Mastodon-Instanz exportiert wurde
sessions:
@@ -60,7 +60,7 @@ de:
suspend: Deaktivieren und unwiderruflich Benutzerdaten löschen
warning_preset_id: Benutze eine Warnungsvorlage
defaults:
- autofollow: Einladen, um deinen Account zu folgen
+ autofollow: Einladen, um deinem Account zu folgen
avatar: Profilbild
bot: Dieser Benutzer ist ein Bot
chosen_languages: Sprachen filtern
@@ -76,7 +76,7 @@ de:
fields: Profil-Metadaten
header: Kopfbild
inbox_url: Inbox-URL des Relays
- irreversible: Fallen lassen anstatt es zu verstecken
+ irreversible: Verwerfen statt verstecken
locale: Sprache der Benutzeroberfläche
locked: Gesperrtes Profil
max_uses: Maximale Verwendungen
@@ -90,28 +90,28 @@ de:
setting_boost_modal: Bestätigungsdialog anzeigen, bevor ein Beitrag geteilt wird
setting_default_language: Beitragssprache
setting_default_privacy: Beitragssichtbarkeit
- setting_default_sensitive: Medien immer als heikel markieren
+ setting_default_sensitive: Medien immer als sensibel markieren
setting_delete_modal: Bestätigungsdialog anzeigen, bevor ein Beitrag gelöscht wird
setting_display_media: Medien-Anzeige
setting_display_media_default: Standard
setting_display_media_hide_all: Alle verstecken
setting_display_media_show_all: Alle anzeigen
- setting_expand_spoilers: Toots mit Inhaltswarnungen immer ausklappen
+ setting_expand_spoilers: Beiträge mit Inhaltswarnungen immer ausklappen
setting_hide_network: Blende dein Netzwerk aus
setting_noindex: Suchmaschinen-Indexierung verhindern
setting_reduce_motion: Bewegung in Animationen verringern
setting_system_font_ui: Standardschriftart des Systems verwenden
setting_theme: Theme der Website
- setting_unfollow_modal: Bestätigungsdialog anzeigen, bevor jemand entfolgt wird
+ setting_unfollow_modal: Bestätigungsdialog anzeigen, bevor jemandem entfolgt wird
severity: Schweregrad
type: Importtyp
username: Profilname
- username_or_email: Profilname oder Email
+ username_or_email: Profilname oder E-Mail
whole_word: Ganzes Wort
interactions:
must_be_follower: Benachrichtigungen von Nicht-Folgenden blockieren
must_be_following: Benachrichtigungen von Profilen blockieren, denen ich nicht folge
- must_be_following_dm: Private Nachrichten von Profilen denen ich nicht folge blockieren
+ must_be_following_dm: Private Nachrichten von Profilen, denen ich nicht folge, blockieren
notification_emails:
digest: Schicke Übersichts-E-Mails
favourite: E-Mail senden, wenn jemand meinen Beitrag favorisiert
diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml
index c6294d4ba20..d88c4032384 100644
--- a/config/locales/simple_form.sr.yml
+++ b/config/locales/simple_form.sr.yml
@@ -2,12 +2,21 @@
sr:
simple_form:
hints:
+ account_warning_preset:
+ text: Можете користити синтаксу труба, као што су нпр. УРЛ-ова, тарабе и помињања
+ admin_account_action:
+ send_email_notification: Корисник ће добити објашњење тога шта му се десило са налога
+ text_html: Опционално. Можете користити синтаксу труба. Можете додати упозоравајућа преподешавање да сачувате време
+ type_html: Изаберите шта да радите са %{acct}
+ warning_preset_id: Опционално. Можете и даље додати прилагођени текст на крај пресета
defaults:
autofollow: Особе које се пријаве кроз позивнице ће вас аутоматски запратити
avatar: PNG, GIF или JPG. Највише %{size}. Биће смањена на %{dimensions}px
bot: Овај налог углавном врши аутоматизоване радње и можда се не надгледа
context: Један или више контекста у којима треба да се примени филтер
digest: Послато после дужег периода неактивности са прегледом свих битних ствари које сте добили док сте били одсутни
+ discoverable_html: Директоријум омогућава људима да пронађу налоге засноване на интересима и активности. Захтева бар %{min_followers} пратиоца
+ email: Биће вам послата е-пошта са потврдом
fields: Можете имати до 4 ставке приказане као табела на вашем профилу
header: PNG, GIF или JPG. Највише %{size}. Биће смањена на %{dimensions}px
inbox_url: Копирајте URL са насловне стране релеја који желите користити
@@ -17,6 +26,7 @@ sr:
password: Користите најмање 8 знакова
phrase: Биће упарена без обзира на велико или мало слово у тексту или упозорења о садржају трубе
scopes: Којим API-јима ће апликација дозволити приступ. Ако изаберете опсег највишег нивоа, не морате одабрати појединачне.
+ setting_aggregate_reblogs: Не показуј нова дељења за трубе које су недавно подељене (утиче само на недавно примљена дељења)
setting_default_language: Језик ваших труба може бити аутоматски откривен, али није увек прецизан
setting_hide_network: Кога пратите и ко вас прати неће бити приказано на вашем профилу
setting_noindex: Утиче на Ваш јавни профил и статусне стране
@@ -33,6 +43,10 @@ sr:
fields:
name: Етикета
value: Садржај
+ account_warning_preset:
+ text: Текст пресета
+ admin_account_action:
+ warning_preset_id: Користи упозоравајући пресет
defaults:
autofollow: Позовите да прати ваш налог
avatar: Аватар
diff --git a/db/migrate/20190117114553_create_tombstones.rb b/db/migrate/20190117114553_create_tombstones.rb
new file mode 100644
index 00000000000..06d6d8c5ad0
--- /dev/null
+++ b/db/migrate/20190117114553_create_tombstones.rb
@@ -0,0 +1,12 @@
+class CreateTombstones < ActiveRecord::Migration[5.2]
+ def change
+ create_table :tombstones do |t|
+ t.belongs_to :account, foreign_key: { on_delete: :cascade }
+ t.string :uri, null: false
+
+ t.timestamps
+ end
+
+ add_index :tombstones, :uri
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 2836ff91fd7..c6c94609fe0 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.define(version: 2019_01_03_124754) do
+ActiveRecord::Schema.define(version: 2019_01_17_114553) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -627,6 +627,15 @@ ActiveRecord::Schema.define(version: 2019_01_03_124754) do
t.index ["name"], name: "index_tags_on_name", unique: true
end
+ create_table "tombstones", force: :cascade do |t|
+ t.bigint "account_id"
+ t.string "uri", null: false
+ t.datetime "created_at", null: false
+ t.datetime "updated_at", null: false
+ t.index ["account_id"], name: "index_tombstones_on_account_id"
+ t.index ["uri"], name: "index_tombstones_on_uri"
+ end
+
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.datetime "created_at", null: false
@@ -757,6 +766,7 @@ ActiveRecord::Schema.define(version: 2019_01_03_124754) do
add_foreign_key "statuses_tags", "tags", name: "fk_3081861e21", on_delete: :cascade
add_foreign_key "stream_entries", "accounts", name: "fk_5659b17554", on_delete: :cascade
add_foreign_key "subscriptions", "accounts", name: "fk_9847d1cbb5", on_delete: :cascade
+ add_foreign_key "tombstones", "accounts", on_delete: :cascade
add_foreign_key "users", "accounts", name: "fk_50500f500d", on_delete: :cascade
add_foreign_key "users", "invites", on_delete: :nullify
add_foreign_key "users", "oauth_applications", column: "created_by_application_id", on_delete: :nullify
diff --git a/lib/cli.rb b/lib/cli.rb
index a810c632a2c..6036adfbed7 100644
--- a/lib/cli.rb
+++ b/lib/cli.rb
@@ -7,6 +7,7 @@ require_relative 'mastodon/accounts_cli'
require_relative 'mastodon/feeds_cli'
require_relative 'mastodon/settings_cli'
require_relative 'mastodon/domains_cli'
+require_relative 'mastodon/version'
module Mastodon
class CLI < Thor
@@ -31,5 +32,12 @@ module Mastodon
desc 'domains SUBCOMMAND ...ARGS', 'Manage account domains'
subcommand 'domains', Mastodon::DomainsCLI
+
+ map %w(--version -v) => :version
+
+ desc 'version', 'Show version'
+ def version
+ say(Mastodon::Version.to_s)
+ end
end
end
diff --git a/lib/mastodon/domains_cli.rb b/lib/mastodon/domains_cli.rb
index be68ae84b9f..303b8a94a0f 100644
--- a/lib/mastodon/domains_cli.rb
+++ b/lib/mastodon/domains_cli.rb
@@ -140,15 +140,8 @@ module Mastodon
end
def stats_to_json(stats)
- totals.each_key do |domain|
- if totals[domain].is_a?(Hash)
- totals[domain]['activity'] = stats[domain]
- else
- totals.delete(domain)
- end
- end
-
- say(Oj.dump(totals))
+ stats.compact!
+ say(Oj.dump(stats))
end
end
end
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index 167a309abf4..90514d78cbf 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -21,7 +21,7 @@ module Mastodon
end
def flags
- 'rc1'
+ 'rc3'
end
def to_a
diff --git a/lib/tasks/repo.rake b/lib/tasks/repo.rake
index 367859e941c..263cca84cc6 100644
--- a/lib/tasks/repo.rake
+++ b/lib/tasks/repo.rake
@@ -1,9 +1,9 @@
# frozen_string_literal: true
namespace :repo do
- desc 'Generate the authors.md file'
+ desc 'Generate the AUTHORS.md file'
task :authors do
- file = File.open('AUTHORS.md', 'w')
+ file = File.open(Rails.root.join('AUTHORS.md'), 'w')
file << <<~HEADER
Mastodon is available on [GitHub](https://github.com/tootsuite/mastodon)
and provided thanks to the work of the following contributors:
@@ -27,4 +27,50 @@ namespace :repo do
This document is provided for informational purposes only. Since it is only updated once per release, the version you are looking at may be currently out of date. To see the full list of contributors, consider looking at the [git history](https://github.com/tootsuite/mastodon/graphs/contributors) instead.
FOOTER
end
+
+ desc 'Replace pull requests with authors in the CHANGELOG.md file'
+ task :changelog do
+ path = Rails.root.join('CHANGELOG.md')
+ tmp = Tempfile.new
+
+ HttpLog.config.compact_log = true
+
+ begin
+ File.open(path, 'r') do |file|
+ file.each_line do |line|
+ if line.start_with?('-')
+ new_line = line.gsub(/#([[:digit:]]+)*/) do |pull_request_reference|
+ pull_request_number = pull_request_reference[1..-1]
+ response = nil
+
+ loop do
+ response = HTTP.headers('Authorization' => "token #{ENV['GITHUB_API_TOKEN']}").get("https://api.github.com/repos/tootsuite/mastodon/pulls/#{pull_request_number}")
+
+ if response.code == 403
+ sleep_for = (response.headers['X-RateLimit-Reset'].to_i - Time.now.to_i).abs
+ puts "Sleeping for #{sleep_for} seconds to get over rate limit"
+ sleep sleep_for
+ else
+ break
+ end
+ end
+
+ pull_request = Oj.load(response.to_s)
+ "[#{pull_request['user']['login']}](#{pull_request['html_url']})"
+ end
+
+ tmp.puts new_line
+ else
+ tmp.puts line
+ end
+ end
+ end
+
+ tmp.close
+ FileUtils.mv(tmp.path, path)
+ ensure
+ tmp.close
+ tmp.unlink
+ end
+ end
end
diff --git a/package.json b/package.json
index 92470572ad6..ecd9f86ebd3 100644
--- a/package.json
+++ b/package.json
@@ -100,6 +100,7 @@
"react-immutable-proptypes": "^2.1.0",
"react-immutable-pure-component": "^1.1.1",
"react-intl": "^2.7.2",
+ "react-masonry-infinite": "^1.2.2",
"react-motion": "^0.5.2",
"react-notification": "^6.8.4",
"react-overlays": "^0.8.3",
diff --git a/spec/controllers/tags_controller_spec.rb b/spec/controllers/tags_controller_spec.rb
index 33ccaed61c4..69def90cf7d 100644
--- a/spec/controllers/tags_controller_spec.rb
+++ b/spec/controllers/tags_controller_spec.rb
@@ -17,7 +17,7 @@ RSpec.describe TagsController, type: :controller do
it 'renders application layout' do
get :show, params: { id: 'test', max_id: late.id }
- expect(response).to render_template layout: 'application'
+ expect(response).to render_template layout: 'public'
end
end
diff --git a/spec/services/unfollow_service_spec.rb b/spec/services/unfollow_service_spec.rb
index c5914c81820..8a2881ab17f 100644
--- a/spec/services/unfollow_service_spec.rb
+++ b/spec/services/unfollow_service_spec.rb
@@ -56,4 +56,22 @@ RSpec.describe UnfollowService, type: :service do
expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once
end
end
+
+ describe 'remote ActivityPub (reverse)' do
+ let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', protocol: :activitypub, domain: 'example.com', inbox_url: 'http://example.com/inbox')).account }
+
+ before do
+ bob.follow!(sender)
+ stub_request(:post, 'http://example.com/inbox').to_return(status: 200)
+ subject.call(bob, sender)
+ end
+
+ it 'destroys the following relation' do
+ expect(bob.following?(sender)).to be false
+ end
+
+ it 'sends a reject activity' do
+ expect(a_request(:post, 'http://example.com/inbox')).to have_been_made.once
+ end
+ end
end
diff --git a/yarn.lock b/yarn.lock
index e66cbe2f623..3137b085634 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1685,6 +1685,13 @@ braces@^2.3.0, braces@^2.3.1:
split-string "^3.0.2"
to-regex "^3.0.1"
+bricks.js@^1.7.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/bricks.js/-/bricks.js-1.8.0.tgz#8fdeb3c0226af251f4d5727a7df7f9ac0092b4b2"
+ integrity sha1-j96zwCJq8lH01XJ6fff5rACStLI=
+ dependencies:
+ knot.js "^1.1.5"
+
brorand@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
@@ -5536,6 +5543,11 @@ kleur@^2.0.1:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300"
integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ==
+knot.js@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/knot.js/-/knot.js-1.1.5.tgz#28e72522f703f50fe98812fde224dd72728fef5d"
+ integrity sha1-KOclIvcD9Q/piBL94iTdcnKP710=
+
lcid@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
@@ -7566,6 +7578,13 @@ react-immutable-pure-component@^1.1.1:
optionalDependencies:
"@types/react" "16.4.6"
+react-infinite-scroller@^1.0.12:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/react-infinite-scroller/-/react-infinite-scroller-1.2.4.tgz#f67eaec4940a4ce6417bebdd6e3433bfc38826e9"
+ integrity sha512-/oOa0QhZjXPqaD6sictN2edFMsd3kkMiE19Vcz5JDgHpzEJVqYcmq+V3mkwO88087kvKGe1URNksHEOt839Ubw==
+ dependencies:
+ prop-types "^15.5.8"
+
react-input-autosize@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/react-input-autosize/-/react-input-autosize-2.2.1.tgz#ec428fa15b1592994fb5f9aa15bb1eb6baf420f8"
@@ -7604,6 +7623,15 @@ react-lifecycles-compat@^3.0.2, react-lifecycles-compat@^3.0.4:
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+react-masonry-infinite@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/react-masonry-infinite/-/react-masonry-infinite-1.2.2.tgz#20c1386f9ccdda9747527c8f42bc2c02dd2e7951"
+ integrity sha1-IME4b5zN2pdHUnyPQrwsAt0ueVE=
+ dependencies:
+ bricks.js "^1.7.0"
+ prop-types "^15.5.10"
+ react-infinite-scroller "^1.0.12"
+
react-motion@^0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/react-motion/-/react-motion-0.5.2.tgz#0dd3a69e411316567927917c6626551ba0607316"