Discourse 2.4.0.beta3 リリースノート

2.4.0.beta3 の新機能

robots.txt のカスタマイズ許可

この機能により、管理者は /admin/customize/robotsrobots.txt ファイルの内容をカスタマイズまたは上書きできるようになります。このページは UI 内のどこにもリンクされていません。管理者は URL を手動で入力してアクセスする必要があります。

一括招待で最大 200 通のメールを 1 分間に送信

注意: invite.via_email は非推奨となり、代わりに invite.emailed_status が使用されます。

このコミットにより、メール送信ステータスを追跡するために invites テーブルに新しいカラム emailed_status が追加されました。

 0 - 不要
 1 - 保留中
 2 - 一括保留中
 3 - 送信中
 4 - 送信済み
  • 通常のメール招待の場合、招待レコードは emailed_status が ‘pending’ に設定されて作成されます。
  • 一括招待が送信される場合、招待レコードは emailed_status が ‘bulk pending’ に設定されて作成されます。
  • リンクを生成する招待の場合、招待レコードは emailed_status が ‘not required’ に設定されて作成されます。
  • 招待メールがキューに入ると emailed_status は ‘sending’ に更新されます。
  • InviteEmail ジョブを通じてメールが送信されると、招待の emailed_status は ‘sent’ に更新されます。

招待の交換時の外部認証

この機能(有効化された場合)は、invite_only サイトが招待を交換する前に外部認証を要求することを可能にします。

  • この機能を切り替えるための非表示のサイト設定が作成されました
  • ローカルログインが無効化された状態での招待送信を可能にします
  • 招待フォームに OAuth ボタンが追加されました
  • OAuth のメールアドレスが招待のメールアドレスと一致している必要があります
  • OAuth 認証に失敗した場合、招待の交換を防止します

PM を公開する際のカテゴリ選択の許可

以前はデフォルトで 未分類 でしたが、一部のフォーラムでは適切ではありませんでした。現在、スタッフメンバーは PM をどのカテゴリに移動するかを即座に決定できます。

審査待ちの投稿に対する生メールの閲覧許可

投稿がメールで到着したが審査が必要な場合、メールの生内容を表示するためにクリックできるアイコンが表示されるようになりました。

これは、Discourse のメールパーサーが異常に動作している場合や、投稿を審査するユーザーが承認/却下する前に元のコンテンツを知りたい場合に役立ちます。

監視ワードの改善

今回のリリースで新しい機能が追加されました。

新しいボタンが 2 つあります。1 つ目は管理者がアクションごとの監視ワードを .txt ファイルとしてダウンロードできるもので、2 つ目はアクションごと(ブロック、フラグなど)に削除されたワードをすべてクリアするものです。さらに、1 つ以上のブロックされたワードを含むために投稿が却下された場合、エラーメッセージには投稿に含まれるすべてのブロックされたワードがリストされるようになりました。

なお、この新機能により、監視ワードをインポートするためのファイル形式が .csv から .txt に変更され、監視ワードをエクスポートする際のファイル拡張子と一致しなくなっています。

HTML メールのカスタマイズ

この機能により、カスタム HTML テンプレートと、必要に応じてスタイルを設定するための CSS を使用して、すべてのメールの HTML 部分をカスタマイズできるようになりました。CSS はメールクライアントでのサポートが不十分なため、パースされてインラインスタイルに変換されます。カスタム HTML と CSS を記述する際は、どのメールクライアントがサポートしているかに注意してください。カスタマイズは非常にシンプルに保ってください

カスタマイズは「管理 > カスタマイズ > メールスタイル」から追加および編集できます。

サマリーメールはすでにスタイル設定が大幅に行われているため、サマリーメールにカスタムスタイルを適用しないための設定 apply custom styles to digest が「管理 > 設定 > メール」にあります。

この作業の一環として、RTL ロケールがすべてのメールで正しくレンダリングされるようになりました。

「About」ページにカテゴリモデレーターの一覧を表示

Category Group Review/Moderation の機能に関する新しいアップデートです。今後は、カテゴリモデレーターがスタッフメンバーとともに、サイトの「About」ページに表示されるようになります。

グループメンバーの表示レベルのサポート追加とメンバーがグループに承認された際の通知送信

グループの表示管理に関するもう一つの追加機能です。現在、グループの表示レベルと同様に 5 つの表示レベルがあります。

  • public(デフォルト)
  • ログインユーザー
  • メンバーのみ
  • スタッフ
  • オーナー

管理者とグループオーナーは常にグループメンバーを表示できます。

また、今後はユーザーがグループに承認された際に通知が送信されるようになります。

JavaScript API を通じたリモートサイトへのトピック一覧の埋め込み

この機能により、Discourse のトピック一覧としてレンダリングされる <d-topics-list> タグのサポートが追加されました。タグの属性はすべてフィルターとして渡されます。例えば:

<d-topics-list discourse-url="URL" category="1234"> はカテゴリ 1234 にフィルターを適用します。

この機能を使用するには、「embed topics list」サイト設定を有効にしてください。次に、埋め込みたいサイトには以下の JavaScript を含めてください。

<script src="http://URL/javascripts/embed-topics.js"></script>

ここで URL は Discourse フォーラムの URL です。

その後、HTML ドキュメントに <d-topics-list discourse-url="URL"> タグを含めると、それがトピック一覧に置き換えられます。

詳細については Embedding a list of Discourse Topics in another site を参照してください。

ユーザー通知用のウェブフックの追加

有効化された場合、ユーザーの通知が作成されるたびにウェブフックが発火します。フォーラムの規模によっては大量のデータになる可能性があるため、すべてのユーザーがフィードで表示する内容が含まれるため、慎重に使用する必要があります。

theme_uploads を JavaScript 内の設定として扱う機能と、テーマによる JS ファイルのアセットアップロードの許可

これらはテーマに関する他の改善点です。1 つ目はテーマとコンポーネントがテーマアセットにアクセスできるようにするものです。つまり、テーマ内の JS 内で以下のコードを使ってアセットの URL を取得できるようになりました。

settings.theme_uploads.name

2 つ目の改善点は、テーマがより大きな JS ペイロードの読み込みを遅延させる機能を解放するものです。テーマはすでにインライン JS を含めることが許可されているため、この変更は安全です。

iOS/Android ネイティブアプリとのリンクのためのサイト設定と PWA インストールプロンプトの Discourse UI への組み込み

今回のリリースでは、Android および iOS アプリ向けの新機能も追加されました。

現在、apple-app-site-association エンドポイントを介した iOS ユニバーサルリンクのサポートと、.well-known/assetlinks.json エンドポイントを介した Google Digital Asset Links のサポートを追加するための 2 つの新しいサイト設定があります。

さらに、ネイティブインストールの「ミニ情報」バーが表示されるのを防ぎ、それがポップアップするイベントをキャプチャし、ユーザーが現在の基準(現在は信頼レベル 1)を満たすまで遅延させるようにしました。

イベントが発生し、ユーザーが基準を満たした場合、インストールを提案する Discourse のアラートバナーが表示されます。バナーの閉じる操作は記録されるため、同じデバイスではユーザーが二度と邪魔されなくなります。

Discord でのログイン

discourse-plugin-discord-auth の機能をコアに追加しました。プラグインはコアが更新された際に自動的に無効化されます。詳細は discourse/discourse-plugin-discord-auth@fd08678?w=1 を参照してください。

セットアップ手順については Configure Discord Login for Discourse をご覧ください。

匿名キャッシュのパフォーマンス改善

パフォーマンスを向上させるための 2 つの新機能です。

  • DISCOURSE_COMPRESS_ANON_CACHE (true|false、デフォルトは false): Redis 内の匿名キャッシュのボディエントリをオプションで圧縮できます。Redis が Web サーバーとは別のサーバーに存在する高負荷サイトにとって有用です。
  • DISCOURSE_ANON_CACHE_STORE_THRESHOLD(デフォルトは 2): エントリを Redis に格納するのは、N 回以上観測された場合のみです。これにより、クローラーが大量のトピックを巡回してそれらをすべて Redis に格納し、二度と使用されないという状況を回避できます。トピックのデフォルトの匿名キャッシュ時間はわずか 60 秒です。匿名キャッシュは、1 分で 100 人以上のユーザーが単一のトピックにアクセスする「スラッシュドット効果」を回避するために存在します。
「いいね!」 26

Even more!

But wait, there’s more! We do our best to highlight new features and changes for you, but there’s always too many changes to detail. For a full list of new features, bug fixes, UX improvements, and more, be sure to review the Additional Features and Fixes listed below.

Security Updates

This beta includes 10 security fixes for issues reported by our community and HackerOne.

  • Reset password when activating an account via auth provider
  • Don’t send CSRF token in query string
  • Bump nokogiri
  • Add rate limiting to anon JS error reporting
  • Don’t reveal category details to users that do not have access
  • Restrict message-bus access on login_required sites
  • Require POST with CSRF token for OmniAuth request phase
  • Sanitize email id for use as mutex key
  • Add confirmation screen when connecting associated accounts
  • Validate backup chunk identifier

Plugin improvements

Discourse Cakeday

  • Update translations

Discourse Checklist

  • Update translations

Discourse Math

  • Update translations

Discourse Saved Searches

  • Update translations

Discourse Policy

  • Update deprecated icon

Discourse Invite Token

  • FIX: invite.via_email is deprecated in favor of invite.emailed_status

Discourse User Notes

  • Update translations
  • Update deprecated icon names
  • Remove package.json
  • Update setting names, readme, to reflect rename to user notes
  • Update README.md
  • FIX: Rename site setting in the database, too.
  • FIX: uses correct path
  • DEV: Rename files, functions and DB entries plus two small fixes

Discourse Translator

  • Use zh-Hans and zh-Hant as language codes for Microsoft API
  • FIX: Use HTML option in Microsoft translator
  • Fix specs

Discourse Steam Login

  • Make Rubocop happy

Discourse Amazon Login

  • FIX: Amazon verifies the email addresses.
  • Make Rubocop happy

Discourse Canned Replies

  • Update translations
  • Update deprecated icon names
  • REFACTOR: minor refactoring/formatting
  • DEV: removes sendAction deprecation
  • FIX: limit edit reply modal height on mobile

Discourse Oauth2 Basic

  • Update translations
  • FEATURE: Migrate to ManagedAuthenticator
  • FIX: Ignore duplicate user_ids when migrating old data
  • Make Rubocop happy
  • FIX: Ignore non-numeric values when migrating from old data format

Discourse Chat Integration

  • Update translations
  • Update deprecated icon names
  • FIX: Access transcript params correctly
  • FIX: undefined local variable or method `site_setting_saved’
  • FIX: An error would be raised if fewer than “skip_messages” existed

Discourse Graphviz

  • Add id to decorateCooked API call
  • FIX: register plugin only if enabled
  • FIX: don’t do any work if not enabled
  • FIX: allows to render multiple graphs in preview
  • FIX: auto strip comments from graph definition
  • FIX: allows graph definition to have blank lines
  • FEATURE: use svg=true to force graphviz to avoid image conversion
  • FEATURE: render svg to actual svg and replace inline

Discourse Tooltips

  • REFACTOR: removes this.$() pattern
  • PERF: enable 3 minute anon cache for tooltips
  • FEATURE: adds support for rate limit when requests are queuing

Discourse Signatures

  • DEV: Do not require restart to enable signatures
  • FIX: Only serialize user custom fields specific to this plugin

Discourse Patreon

  • Update translations
  • Update deprecated icon
  • FIX: Don’t error when patrons group or badge already exists.
  • lint file

Discourse Code Review

  • Update deprecated icon
  • Changes after feedback from Sam
  • DEV: Rename i18n keys because they’re not i18n pluralization keys
  • DEV: Move user syncing to its own module
  • DEV: Move category creation into its own module
  • FIX: Race-condition
  • FIX: Pulling an individual commit was broken by 079055c
  • FEATURE: Sync unmerged commits
  • FEATURE: Sync post deletes back to Github
  • REFACTOR: old patterns and deprecations
  • Make Rubocop happy
  • DEV: Add helpers for sanitizing input
  • FEATURE: Pull Request Syncing
  • DEV: Make Rubocop happy
  • FIX: Make string constants upper snake case
  • FIX: Only sync regular posts
  • FIX: Skip validation when updating close posts
  • FIX: Update node_id after mirroring comment
  • FEATURE: Github Webhook Configuring Page
  • DEV: Added tests for mirroring PR posts to github as comments
  • FIX: Post and Topic creation race-condition

Discourse Styleguide

  • REFACTOR: removes this.$() pattern
  • Update deprecated FA 4.7 icon names and link
  • link update, additional details for icon section
  • UX: Small style fixes
  • List all available icons in the SVG Sprites

Discourse Characters Required

  • Update translations

Discourse Solved

  • Update translations
  • UX: Integrate text with button to improve spacing
  • Revert “UX: Integrate text with button to improve spacing”
  • UX: If I can’t unselect an answer, show text not a button
  • remove unused variable
  • Solved button text margin fix
  • FIX: Include previously solved topics in auto-bump
  • FIX: Fix test suite after fabricated category defaults changed
  • Replace deprecated icon

Discourse Calendar

  • Various bug fixes and performance improvements
  • Fix Prettier
  • Make Rubocop happy
  • FIX: ensure only active users can be on holiday
  • DEV: let’s not introduce time-based heisentests
  • FIX: do not attempt to validate a post from a topic with no calendar
  • FIX: ensures we check on op and not any post
  • minor code styling fix
  • FIX: do not markdownify calendar if plugin is not enabled
  • Fix prettier

Discourse Plugin Discord Auth

(From this release Discord support is included in Discourse core, this plugin is no longer required)

  • DEV: Approve users using the reviewable API
  • FIX: send_email should be false
  • FEATURE: Migrate Discord to ManagedAuthenticator
  • DEV: Remove unused strategy parameters
  • FIX: Correct after_authenticate method signature to allow reconnect
  • DEV: Remove dependency on omniauth-discord
  • FEATURE: Change the method for restricting access to trusted_guilds
  • UX: Define discord secret key as a secret site setting
  • Automatically disable plugin when core is updated with Discord support
  • UX: Update client_id site setting copy

Discourse Prometheus

  • Make Rubocop happy
  • DEV: lint file, attempt to isolate root of db exception
  • DEV: attempt to aggressively clear connections
  • FEATURE: track count of SQL calls per HTTP endpoint
  • FEATURE: track anonymous cache performance
  • DEV: logging db is overkill

Discourse Data Explorer

  • Update translations
  • REFACTOR: old patterns, deprecations and dead code
  • adds prettier
  • fixes prettier
  • FIX: prevents egression mutating read only object

Discourse Akismet

  • Update translations
  • Update deprecated icon names
  • FIX: don’t send user IP/UA when not available
  • FIX: always check for a bio before sending to Akismet
  • Check for comment_content before stripping
  • FIX: Skip user if the client_ip is not present
  • Update duplicated test description
  • Fix rubocop
  • Revert “Check for comment_content before stripping”
  • FEATURE: Link to the user profile if possible when reviewing AkismetFlaggedUsers
  • FIX: make compatible with ‘debundled plugin css assets’ feature.

Discourse Assign

  • Update translations
  • DEV: use group ids to allow assign on groups
  • REFACTOR: old ember patterns, deprecations, dead code
  • DEV: uses new topic-button API
  • FIX: uses taskActions api and removes old buttons
  • DEV: Assign allowed groups are sent alongside suggestions. After the migration happens, we’ll need to still have access to the allowed group names so we can search users.
  • FIX: remove unused import
  • Initialize allowedGroups inside the constructor
  • Make Rubocop happy
  • UX: Add “Assigned” to the page title for the assigned topic list
  • FIX: Use can_assign instead of staff to show the assign modal correctly

Discourse Voting

  • Update translations
  • DEV: Define category_custom_field as boolean
  • FIX: Reclaim votes when voting is disabled on a category
  • Make Rubocop happy
  • PERF: avoid N+1 on category load
  • DEV: uses new addNavigationBarItem API
  • DEV: moves back part of initializer in pre-initializer
  • FIX: wraps overrides in reloadable_patch
  • FIX: Add can_vote attribute to all category serializers.
  • linting
  • FIX: ensures container has not been destroyed
  • FIX: prevents any work if not enabled
  • FIX: keep plugin compatible with older discourse versions
  • REFACTOR: plugin CSS cleanup
  • UX: wrap avatars in voter pop-up

Discourse AD

  • Update translations
  • FIX: wrong size DFP ads when using multiple sizes
  • DEV: migrate no_ads_for_groups to use IDs instead of group names
  • FIX: Amazon ads never showing
  • DEV: migrate no_ads_for_groups to use IDs instead of group names
  • FIX: ads always showing in all placements for CodeFund and Carbon Ads
  • FIX: CodeFund ads in between posts on narrow widths
  • FEATURE: add option to disable ads in restricted categories

Additional Features and Fixes

Click to expand

New Features

  • Support data-explorer outlet in group navigation
  • Track date api key was last used
  • Embed topic with detailed metadata
  • Anon cache reports data to loggers
  • Create a rake task for destroying categories
  • New ‘Discourse-Render’ HTTP header
  • Notify posters when restoring flagged posts
  • Do not replace ↔ with an emoji
  • Publish read state on group messages. (Originally introduced in #7989)
  • Add hook after all initializers
  • Adds countdown attribute to [date]
  • Protect against replay attacks when using TLS 1.3 0-RTT
  • Allow plugins to manipulate site settings during backup restore
  • Publish read state on group messages.
  • Favorites emojis will also show in composer autocomplete
  • Staff only poll results
  • Add a preview to the poll builder
  • Allow themes to override color transformation variables
  • External auth when redeeming invites
  • Add setting to show content of forwarded emails in topics
  • Add option to always send excerpts in emails
  • Mention in secure category to prioritize groups
  • Allow post process mutex to be held longer
  • Add a test facility to the watched words admin interface
  • Improve stats provided by rake db:stats
  • Generate new VAPID keys when base_url changes
  • Sync unread state live to topic lists
  • Add attachments to outgoing emails
  • Add search operator to see all direct messages from a user
  • Permit users who had no penalties in last 6 months to be TL3.
  • Create a rake task for destroying categories]``[1]`
  • New date/time components
  • Gz to zip for exports
  • Admin/user exports are compressed using the zip format
  • Create a rake task for destroying categories
  • Make Discourse work offline with WorkboxJS

Bug Fixes

  • Mobile Safari composer improvements
  • Make ‘group membership requests’ feature compatible with visibility level option ‘logged_on_users’.
  • Adjust composer size for iPhone Xs Max and Xʀ
  • Report cached controller and action to loggers
  • Ensures google classic has correct man_facepalming emoji
  • Include ‘short_url’ as src if upload url not exist
  • Close user card after clicking Message button
  • Auth popup handling for Safari same-site cookie quirks
  • Flagged posts user notifications
  • User should get notified when a post is deleted
  • Broken scheduler when changing per_host <-> global
  • Allow accessing nested objects within theme settings
  • In case of orphan user records skip badge
  • Heartbeat should be per host
  • Notifications not updating correctly from background tab
  • Remote theme record not saved when checking for updates
  • Avoid publishing changes if the topic was deleted
  • Include read indicator when the publish_group_state is enabled
  • An overridden text of a non-existent plural key resulted in error
  • Ensure live-reloading of theme CSS works first time
  • Made turbo_rspec display errors in shared groups correctly
  • Race condition during deploys creating stylesheets
  • Don’t search for tags when editing topic title
  • Don’t blow up if the topic does not exists anymore
  • When activating via omniauth, create tokens after password reset
  • When activating a user, ensure the change is reflected immediately
  • Allow dashboard to load even when git version cannot be found
  • Display actual readers on the first post
  • Ensure avatar sizes are integers
  • Only use app argument for official iOS app banner
  • Show who read only if the attribute is enabled
  • Update topic groups correctly
  • Overriding _MF texts didn’t work for en_US
  • When using a custom authenticator URL, send request using GET
  • Add_to_serializer not correctly accounting for inheritance chains
  • Don’t display PWA banner when using native app
  • Remove duplicate %-sign from error messages
  • Heartbeat check per sidekiq process
  • Allows mini-tag-chooser to fetch tags in background
  • Filter out hidden posts for wordpress
  • Do not set destination_url cookie after deleting own account.
  • Infinite loop when mentioning in IE11
  • Properly load desktop and mobile only plugin css assets.
  • Allow topic edits when using a hidden tag
  • Race-condition in fallback handlers
  • Don’t try to delete staged, unused admins and mods
  • Regularly reset unknown extension of uploads
  • Limit PWA install banner to Android for now
  • Read indicator only appears when the group setting is enabled
  • Ensure extra locales are only available to staff
  • Ensure offset is always positive
  • Prevents mobile nav to create an error when unregistering click events
  • Uses simpler pattern for custom href on extra nav items
  • Rack-mini-profiler not showing plugin frames
  • J/K navigation resets current selection when scrolling fast.
  • Properly set notification levels on group invite
  • When inviting groups to message respect tracking state
  • Explicitly require topic_query_params
  • Clear banner topic cache after remapping
  • Ensures reports can’t modify records
  • Correct race condition loading library
  • Hold s3 related distributed locks longer
  • Store custom attributes that are needed by plugins in queuedpost payload
  • Attempts to use params from addDiscoveryQueryParam
  • Convert omniauth authenticator names to symbols before comparing
  • Do not raise exception if the authenticator email is missing
  • Downcase email coming back from auth-provider
  • Replace model usage with SQL query
  • Correct ordering for post_edits report, and remove query limit
  • Correct query for post_edits dashboard report
  • Remove the tmp inventory files after the s3 uploads check.
  • RIP swipe-in menus on Android
  • Don’t update watching_first_post notifications when moving first post
  • Trusted users might cause content to be hidden with one flag
  • Prevent failed remaps during restores
  • Truncate topic_links.url to 500 chars during remap
  • Do not create a double like notification.
  • Blank second factor gets default name
  • Polyfills String.prototype.repeat for IE
  • Disallow user self-delete when user posted in PMs
  • Use #dup instead of #+@ since content could be an instance of Nokogiri::XML::Element.
  • Drop readonly function when dropping table
  • Create readonly functions during backup
  • Detect DiscourseHub user agent.
  • Award ‘First Onebox’ badge just for Oneboxed URLs.
  • Correct OmniAuth route ordering
  • Notify on Reviewable update.
  • Wrong discobot tutorial started for certain locales.
  • Remove dependency on present? in distributed_mutex lib
  • Correctly encode non-ASCII filenames in HTTP header
  • Do not follow redirect on same host with path /login or /session
  • Allows replacement of digits and symbols emojis
  • Embedding topics would fail with some HTML
  • Don’t hide/close topics if they don’t meet minimum visibility
  • Use unescaped title as combo-box id
  • S3 uploads were missing a cache-control header
  • Ensures flag-ratio report shows users with disagreed >` agreed
  • Show membership requests link just for group owners.
  • Generated controller should be in an underscored folder
  • Ensures pikaday picker is showing in UTC
  • Allows copy pasting file in composer with chrome
  • Syntax error in b1f5949
  • Make the workbox path compatible with multisite
  • Composer preview on IE11
  • Rename deprecated “refresh” icon to “sync”
  • Better detection of Apple browsers
  • Various watched words improvements
  • Don’t include multisite upload path to source URL if already exist.
  • Make uploads recovery compatible with multisite.
  • Correctly update replies when first post gets moved
  • Modal onClose was being called repeatedly
  • Rollback when multisite tests raise exceptions
  • Don’t reuse redis connections in different threads in tests
  • Gravatar uploads being dependent on authorized_extensions.
  • DistributedMutex
  • Better error message on username update from Admin user page.
  • Add back verbose option to DbHelper.remap
  • Add frozen_string_literal: true in the migration
  • Prevent user-notifications-dropdown from causing unintended changes
  • Post#each_upload_url yields incorrect path to block when CDN is enabled.
  • Make initializer work on first db:migrate
  • Correctly identify Chromium-based Edge
  • Support multi-file stylesheets in theme components
  • Better error when SSO fails due to blank secret
  • Include default label when exporting reports
  • Provide an error message if no valid tags were selected
  • Frozen string error in TopicEmbed.import
  • Hide live-loaded posts from ignored users
  • Reverts #18e2816
  • Use same id for both original & optimized inventories in multisite setup.
  • Apply defaults constraints to routes format (take 2)
  • Keep query params present in auth_redirect
  • Ensure that jobs don’t run immediately after migrate_to_s3
  • Improves tags checking when updating category of topic
  • Removes uncategorized context if not allowed in composer
  • Send featuredLink as featured_link to backend to update correct …
  • Send featuredLink as featured_link to backend to update correct value
  • Use uniq instead of uniq! when checking for uncompressed root path. Use rails naming convention for ZipUtils
  • Migrations tried to change frozen string
  • Update reply count when moving posts
  • Delete notifications users can’t see after moving posts
  • Old notifications didn’t link to correct post after moving post
  • Allows to specify camelCased attributes in wrap component
  • Set a minimum reading time per post.
  • Always backup local uploads in addition to files stored on S3
  • Do not request refresh on ‘log out all’ request
  • Show same username or name for post notices.
  • Empty backup names with unicode site titles]``[1]`
  • URL encode usernames in user profile links in RSS feeds
  • Remove post upload record creation inside ‘find_missing_uploads’ method.
  • Bugs preventing to close delete account modal with button
  • String that can’t be translated in watched words UI
  • Empty backup names with unicode site titles
  • Respect logout_redirect setting on ‘Log out all’
  • When ‘raw’ started with non-image upload url it’s not converted to short-url.
  • Convert hotlinked non-image urls to short url.
  • Remove all service workers from Apple devices again
  • Rename deprecated icons, allow custom icons in badges
  • Recompile extra_js theme assets when COMPILER_VERSION changes
  • Fallback to gzip compression if brotli isn’t supported
  • Skip markdown conversion for hotlinked non image urls
  • Backups taken by pg_dump >`= 11 are nonportable
  • Apply defaults constraints to routes format
  • Ensure suppressed categories do not produce any featured topics.

UX Changes

  • Use Flexbox for topic list embed
  • User vertical-align: middle instead of em units
  • Use color code variable
  • Convert embedded topic list HTML structure from table to div
  • Read indicator improvements.
  • Remove unused strings about desktop notifications
  • Small follow-up to #8047
  • Better alignment for tags in the header
  • Workaround chrome autocomplete bug in search
  • Layout fix for category boxes w/ long subcategory names
  • Prevents non-lightboxed images in quotes from stretching/squeezing
  • Hide “Create Tag” option if user cannot create tag.
  • Consistent placement of category-title-before plugin outlet
  • Add link to robots.txt editor in site setting description
  • Fallback to unlocalized auth provider name if required
  • Prevent twitter onebox iframes from being taller than mobie viewport
  • Improve error handling for common OmniAuth exceptions
  • Modifies admin email template to have more space for the form
  • Clear username when opening ignore duration modal
  • Hide login/signup header buttons during authentication flows
  • Add login button icon to no_ember page
  • Improve layout of poll builder modal
  • Improves dates on reports export UI
  • Use shorter weekday labels in local-dates plugin
  • Use shorter weekday labels in date picker
  • Rename “Keep Post” to “Keep Post Hidden” when hidden
  • Style fixes for admin digest email preview page
  • Remove confusing border on ignored users list
  • Make profile views consistent with other elements
  • Prevents cooked dates from wrapping
  • Show a warning when admin clicks save without adding group when changing category permissions
  • Increase contrast of pinned/tracking reason text, improve layout
  • Improve account association when account description is missing
  • Add expanded/collapsed class to post-controls
  • Fixes onebox favicon vertical alignment
  • Improve layout of long tag headings on mobile
  • Refactor avatar upload modal for better mobile spacing
  • Update invite ‘not found’ message
  • Fix profile image upload control spacing on mobile
  • Adds <a> tag with href category box titles
  • Remove duplicate copy in two-factor preferences
  • Use SCSS color variables
  • Disable system edit notifications by default
  • Swap ignore and mute sections to move the ‘Save changes’ button to the bottom
  • Use height relative to the viewport for robots.txt textarea
  • Rearrange controls in edit modals

Performance

  • Use CDN url for proxy of favicon
  • Run multiple threads for regular job schedules
  • Reduce window of consistency on user actions
  • Avoid filtering shared drafts when not used
  • Only select the only field we use
  • Precalculate the last post readed by a group member
  • Faster length calculation of composer body
  • Avoid N+1 on topic view
  • Rake posts:rebake_uncooked_posts runs inline
  • Message_bus will be deferred by server when flooded
  • Add more constraint on the Cache Storage usage
  • Improve query speed when looking up direct PMs
「いいね!」 25