自動画像グリッドの最小画像数の設定可能化
自動画像グリッド機能に制限があることに気づきました。
現在、自動グリッドの動作はサイト設定の「自動グリッド画像」によって制御されているように見えますが、コンポーザーが [grid]...[/grid] を挿入する実際の閾値はフロントエンドのコードで固定されています。
関連するコンポーザーのロジックは現在、ハードコードされた値を使用しています:
const MIN_IMAGES_TO_AUTO_GRID = 3;
したがって、私の理解では、管理者は現在以下の中から選択することになります:
| 現在管理者が行えること | 結果 |
|---|---|
| 自動グリッド画像を有効化 | 3つ以上の連続した画像のアップロードは自動的に [grid]...[/grid] でラップされます |
| 自動グリッド画像を無効化 | 自動グリッドのラッピングは行われません |
| 閾値を3から他の数値に変更 | 現在、サイト設定としては利用できません |
問題は、3 がすべてのコミュニティにとって適切な閾値ではないということです。
一部のサイトでは、自動グリッドは有用ですが、ユーザーがより多くの画像をバッチでアップロードした場合にのみ有効です。例えば、管理者は3つの画像がアップロードされた時点でトリガーされるのではなく、5、6、10、または他の値で自動グリッドを開始させたい場合があります。
これは、ユーザーが説明文と組み合わせて少数の画像をインラインでアップロードすることが多いコミュニティ、ただし大きなギャラリーはグリッドに圧縮されるべきであるというケースで特に有用です。
提案される方向性
これは、コンポーザーが自動的にグリッドを挿入する前に必要な連続した画像アップロードの最小数に対する設定可能なサイト設定を追加することで改善できると思います。
例えば以下のような設定:
auto_grid_images_minimum_count
```\n
例えば:
| 設定 | 例の値 |
| --- | --- |
| `enable_auto_grid_images` | `true` |
| `auto_grid_images_minimum_count` | `5` |
これにより、自動グリッドは引き続き利用可能ですが、設定された閾値に達した時点でのみトリガーされます。
この新しい設定のデフォルト値が `3` である場合、既存の動作をデフォルトとして維持しつつ、管理者により多くの制御を可能にします。
## 実験ブランチ / 可能な先行開始
Discourseの開発経験がより豊富な方がフォークして、クリーンアップしたり、このアイデアを進めたりする時間がある場合のために、ここに小さな実験ブランチを作成しました:
[image-grid-num-setting branch](https://github.com/Ethsim12/discourse/tree/image-grid-num-setting)
このブランチは、磨かれたPRとして意図されたものではありません。むしろ、意図された方向性を示す出発点です:
- 自動グリッドの最小画像数に対する新しいサイト設定を追加
- クライアントにその設定を公開
- コンポーザーのアップロードコード内のハードコードされた `MIN_IMAGES_TO_AUTO_GRID = 3` チェックを、設定された値に置き換え
- 既存の自動グリッドの文言が閾値が常に3であることを示唆しなくなるよう、管理者設定のテキストを更新
- 必要に応じてフロントエンドの仕様を追加/更新
私が考えていたフロントエンドの変更は、概ね以下のようなものです:
```js
const minImagesToAutoGrid = Number(
this.siteSettings.auto_grid_images_minimum_count ?? 3
);
if (
this.siteSettings.enable_auto_grid_images &&
this.#consecutiveImages?.length >= minImagesToAutoGrid &&
this.textManipulation
) {
this.textManipulation.autoGridImages([...this.#consecutiveImages]);
this.#consecutiveImages.length = 0;
}
また、PR #36014 にDiscourseスタイルの列挙型サイト設定の最近の例もあります:
PR #36014 - FEATURE: adds calendar_upcoming_events_default_view setting
このPRは画像グリッドではなくカレンダーとイベントプラグインのためのもので、この機能に直接影響を与えることを提案しているわけではありません。この種の設定可能なサイト設定に対して有用な実装パターンを示しているように見えるため、言及しています:設定を定義し、クライアントに公開し、その後 siteSettings を通じてフロントエンドから読み取ります。
関連リンク
自動グリッド画像の無効化に関する元の議論:
自動画像グリッドの発表:
Automatically apply grids to image uploads
サイト設定のアーキテクチャを示す例のPR:
PR #36014 - FEATURE: adds calendar_upcoming_events_default_view setting
私の実験ブランチ: