Настраиваемое минимальное количество изображений для автоматических сеток
Я столкнулся с ограничением функции автоматических сеток изображений.
В настоящее время поведение автоматической сетки, похоже, контролируется параметром сайта для автоматических сеток изображений, но фактический порог, при котором редактор вставляет [grid]...[/grid], всё ещё задан жёстко в клиентском коде.
Соответствующая логика редактора в настоящее время использует жёстко заданное значение:
const MIN_IMAGES_TO_AUTO_GRID = 3;
Так что, насколько я могу судить, у администраторов на данный момент есть выбор между:
| Что могут сделать администраторы сейчас | Результат |
|---|---|
| Включить автоматические сетки изображений | Загрузки из 3 или более последовательных изображений автоматически оборачиваются в [grid]...[/grid] |
| Отключить автоматические сетки изображений | Нет автоматического оборачивания в сетку |
| Изменить порог с 3 на другое число | В настоящее время недоступно как параметр сайта |
Проблема в том, что 3 не обязательно является правильным порогом для каждого сообщества.
Для некоторых сайтов автоматические сетки полезны, но только когда пользователи загружают большую партию изображений. Например, администратор может захотеть, чтобы автоматическая сетка начиналась с 5, 6, 10 или другого значения, а не срабатывала сразу после загрузки 3 изображений.
Это было бы особенно полезно для сообществ, где пользователи часто загружают небольшое количество изображений в тексте с пояснениями, но большие галереи всё ещё должны быть компактно оформлены в виде сетки.
Предлагаемое направление
Я думаю, что это можно улучшить, добавив настраиваемый параметр сайта для минимального количества последовательных загрузок изображений, после которого редактор автоматически вставляет сетку.
Что-то вроде:
auto_grid_images_minimum_count
```\n
Например:
| Параметр | Пример значения |
| --- | --- |
| `enable_auto_grid_images` | `true` |
| `auto_grid_images_minimum_count` | `5` |
Тогда автоматическая сетка всё ещё будет доступна, но она будет срабатывать только после достижения настроенного порога.
Это сохраняет существующее поведение по умолчанию, если новое значение по умолчанию равно `3`, одновременно давая администраторам больше контроля.
## Экспериментальная ветка / возможный старт
Я создал небольшую экспериментальную ветку здесь, на случай если кто-то с большим опытом разработки Discourse найдёт время, чтобы форкнуть её, очистить или развить идею:
[ветка image-grid-num-setting](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;
}
Также есть недавний пример параметра сайта в стиле Discourse (перечисление) в PR #36014:
PR #36014 - FEATURE: добавляет параметр calendar_upcoming_events_default_view
Этот PR предназначен для плагина Календарь и события, а не напрямую для сеток изображений, поэтому я не предлагаю, чтобы он влиял на эту функцию. Я упоминаю его, потому что он, кажется, демонстрирует полезный шаблон реализации для такого типа настраиваемых параметров сайта: определить параметр, сделать его доступным для клиента, а затем читать его на стороне клиента через siteSettings.
Связанные ссылки
Оригинальное обсуждение отключения автоматических сеток изображений:
Отключение автоматических сеток изображений?
Объявление об автоматических сетках изображений:
Автоматическое применение сеток к загруженным изображениям
Пример PR, демонстрирующий архитектуру параметров сайта:
PR #36014 - FEATURE: добавляет параметр calendar_upcoming_events_default_view
Моя экспериментальная ветка: