2.8.0.beta5以降、現在のカテゴリへのスクロールが壊れています

Discourse の 2.8.0.beta5 より前のバージョンでは、トピックを編集してカテゴリ選択ドロップダウンをクリックすると、現在のカテゴリが選択され、カテゴリリストでスクロールダウンされて、すぐに表示され、そのサブカテゴリ(存在する場合)も表示されます。これにより、トピックをより適切なサブカテゴリに簡単に移動できます。

2.8.0.beta4 以前での動作:

2.8.0.beta5 以降では、カテゴリ選択ドロップダウンを開いても、現在のカテゴリにスクロールされなくなりました。

これらの短いビデオデモが、説明しようとしていることを素早く示すのに役立つことを願っています。

注: 私の例では、「固定カテゴリ位置」と「作成時の固定カテゴリ位置」オプションがオンになっていますが、これらのオプションがオンでもオフでも、現在の位置へのスクロール動作が欠落しています。

ローカル開発環境で 2.8.0.beta4 をインストールして期待どおりの動作を確認し、その後 2.8.0.beta5 にアップデートして動作しなくなったことを確認することで、これを検証しました。

コードを調べたところ、select-kit.js を含む以下の大きなコミットで変更が行われたことがわかりました(しばらく待つと、問題のコード行にジャンプします)。

_scrollToCurrent() メソッドによって呼び出される _scrollToRow() メソッドから、以下のコードが削除されました。

if (rowContainer) {
  const collectionContainer = rowContainer.parentNode;

  collectionContainer.scrollTop =
    rowContainer.offsetTop - collectionContainer.offsetTop;
}

2.8.0.beta5 の select-kit.js にこのコードを戻すと問題が解決することを、コードを戻して確認しました。ただし、なぜ削除されたのか不明なため、戻すことによる他の副作用があるかどうかは不明です。

この件についてご確認いただき、将来のリリースでこの動作が再び機能するようになることを願っています。

「いいね!」 4

こんにちは、ありがとうございます :+1:

正確には覚えていませんが、現時点での私の理解では、これも間違いだと思います。

このプルリクエストを作成しました。

このコードを試してみて、これで十分かどうか教えていただけますか?

Joffreyさん、ご確認いただきありがとうございます!最新の変更をテストしましたが、機能していないようです。マージされたため、tests-passed ブランチで確認しました。

PR内の2つのコミットのうち、最初のコミットは機能します(ab0fbf1)が、2番目のコミット(92943ff)によって上書きされています。

992行目の変更は問題ないように見えますが、期待される効果が得られていません。collectionContainer.scrollTop の値を調整するコードブロックが削除されたことが原因のようです。

重ねて感謝いたします。

「いいね!」 1

はい、この動作で十分かどうか確信が持てませんでした。明日これを元に戻すことができます。この動作のどこが気に入らないのか、もう少し具体的に教えていただけますか?

Joffrey様

ご確認いただきありがとうございます。現在のコード変更(最新のコードをプルし、tmpをクリアし、開発サーバーを再起動しました)でも、2.8.0.beta5より前のバージョンで見られた動作は回復していません。ドロップダウンの表示オプションの先頭にある現在のカテゴリを表示するようにスクロールしなくなっています。

正しく、望ましい動作は元の投稿の最初のビデオに示されているものですが、現在は2番目のビデオのように動作しています。現在、現在のカテゴリがオプションのどこにあっても、スクロールバーは常に一番上から始まります。

rowContainer?.focus({ preventScroll }); という行は、preventScroll が true、false の場合、あるいは行全体が削除された場合でも、このケースでは効果がないようです。

動作を正しく行うために不可欠な行(現在のリリースには存在しません)は次のとおりです。

collectionContainer.scrollTop =
          rowContainer.offsetTop - collectionContainer.offsetTop;

これがないと、scrollTop はデフォルトで 0 になるため、正しい位置にスクロールしません。この行が実行されると、scrollTop は下にスクロールする必要がある正しいピクセル数と等しくなります。

お役に立てば幸いです。さらに明確にできることがあればお知らせください。

よろしくお願いいたします。

いいえ、一番上ではありませんが、ビューポート内にあります。それで十分だと私は言います。

Joffrey様

フィードバックありがとうございます。デモにカテゴリをさらに追加し、現在のカテゴリがビューポートに表示されることを確認しました。これは間違いなく改善です。以前のように、リストの最上部に表示されるのが理想的です。これにより、その下にあるサブカテゴリの多くがすぐに表示され、ユーザーはスクロールダウンして表示する前にサブカテゴリをクリックして変更できるようになります。私の意見では、これは隣接する無関係なカテゴリを表示するよりも強力なユースケースです。中央に表示されるように意図的に変更されたのですか、それとも以前の動作の意図しない後退でしたか?いずれにせよ、あなた次第です。私の2セントを提供しているだけです。

重ねて、Discourseでのご尽力に感謝いたします。