2023年11月 - refactoring Discovery routes: 私のテーマ/プラグインへの影響は?

Discourse を Ember の最新バージョンにアップグレードするプロジェクトの一環として、Discovery (別名「トピックリスト」) ルートの大幅なリファクタリングに取り組んでいます。

このトピックは、テーマ/プラグイン開発者を対象としており、リファクタリングの影響を受ける可能性のあるテーマ/プラグインの活動の種類をリストアップすることを目的としています。

背景

このリファクタリングは、最新の Ember が {{outlet \"topics\"}} のような「名前付きアウトレット」をサポートしなくなったために必要となりました。これらのルートでは、名前付きアウトレットを広範囲に使用していました。基本的に、以前は名前付きアウトレットにレンダリングされていたすべてのコントローラー/テンプレートがコンポーネントに変換されました。

その過程で、関連コードのモダナイズと統合の機会を得ました (例: すべてのタイプのディスカバリルートが同じコントローラーとテンプレートを共有するようになりました)。

コアでの変更の実装はまだ完了していませんが、作業中のものはこのブランチで見つけることができます。マージの具体的な日付は未定ですが、数週間以内になると予想しています。ご質問や懸念事項があれば、お知らせください。

どのテーマ/プラグイン活動が影響を受けますか?

このリファクタリングは、主に「コントローラー」レイヤーに影響します。ルートはほとんど変更されておらず、\u003cTopicList /\u003e コンポーネント以下のすべては影響を受けません。

影響は、コアコードに深くアクセスしている (例: modifyClass やテンプレートオーバーライド経由) テーマ/プラグインに限られると予想されます。定義済みの API とアウトレットは影響を受けません。

テンプレートオーバーライド

:shushing_face: これらのテンプレートはコンポーネントにリファクタリングされました。既存のオーバーライドはサイレントに機能しなくなります。

  • navigation/categories
  • navigation/category
  • navigation/default
  • navigation/filter
  • discovery/topics

:boom: これらのテンプレートは大幅にリファクタリングされました。既存のテンプレートオーバーライドは、サイトで壊滅的なエラーを引き起こす可能性が高いです。

  • discovery
  • tag/show
  • user-topics-list
  • user/messages
  • discovery/categories
  • components/basic-topic-list
  • components/d-navigation

技術的には、この変更によって導入された新しいテンプレートをオーバーライドすることは可能ですが、テンプレートオーバーライドは推奨されておらず、廃止されつつあります

したがって、すべてのテンプレートオーバーライドは削除し、より堅牢な拡張 API (例: プラグインアウトレット) に置き換える必要があります。Discourse の既存の拡張ポイントでは実現できないと思われることがあれば、お知らせください。

modifyClass および lookup() 呼び出し

:wastebasket: これらのクラスはもはや存在しません。modifyClass はサイレントに機能しなくなります。ルックアップは null を返し、エラーにつながる可能性があります。最も一般的なケースでは、後方互換性のためにシムを導入しました (脚注を参照)。

  • controller:discovery
  • controller:discovery/topics[1]
  • controller:discovery-sortable ( -\u003e controller:discovery/list)
  • controller:discovery-filter ( -\u003e controller:discovery/filter)
  • controller:navigation/categories
  • controller:navigation/category [2]
  • controller:navigation/default
  • controller:tag/show [3]
  • controller:discovery.* ( -\u003e controller:discovery/list)

:technologist: これらのクラスは大幅にリファクタリングされました。modifyClass およびルックアップ呼び出しのリファクタリングが必要になる場合があります。

  • route/discovery
  • route/discovery.*
  • route/tag-show

ルート

:motorway: ルート名 (つまり router.currentRouteName) は変更されていません。

:clipboard: Discovery ルートの model() フック (つまり router.currentRoute.attributes) は、ほとんど変更されていません。

プラグインアウトレット

:electric_plug: すべてのプラグインアウトレットとその引数は変更されていません。

HTML / CSS

:art: HTML 構造とクラスは、ほとんど影響を受けていません。


  1. 「モデル」プロパティへの読み取り専用アクセスは、非推奨通知付きでシムされています。 ↩︎

  2. 「カテゴリ」プロパティへの読み取り専用アクセスは、非推奨通知付きでシムされています。 ↩︎

  3. 「タグ」プロパティへの読み取り専用アクセスは、非推奨通知付きでシムされています。 ↩︎

「いいね!」 16

今週、この変更のテストをホスティング全体に拡大し、来週初め(11月6日)に main/tests-passed にマージすることを目指します。

「いいね!」 6

この変更は現在 main/tests-passed でライブになっています

「いいね!」 3