Переработка редактора за флагом enable_new_composer_actions
Это обновление вводит новый дизайн редактора и выпускает его за флагом новой альфа-версии предстоящих изменений. При выключенном флаге (по умолчанию) визуально ничего не меняется. Администраторы могут включить его через страницу администрирования предстоящих изменений.
Что меняется при включении флага
Единое выпадающее меню действий. Устаревшее выпадающее меню SelectKit composer-actions заменено на новый компонент Glimmer/DMenu (composer-actions-new.gjs). Оно по-прежнему отображает все те же строки переключения режимов (ответ на тему, ответ как новая тема, создание ЛС и т. д.) с более понятными подписями и иконками.
Переключатели интегрированы в действия. Опции «Шепот» / «Без уведомления» / «Не в списке» теперь отображаются как элементы <DToggleSwitch> в нижней части того же выпадающего меню — отдельное комбинированное меню больше не требуется. Состояние переключателя сохраняется при смене режимов (например: включить шепот → переключиться с «ответа на тему» на «ответ на пост» → шепот остается включенным).
Индикатор шепота в виде кнопки-таблетки. Небольшая кнопка справа от триггера выпадающего меню отображает текущее состояние шепота в двух визуальных вариантах: --public (третичный цвет, иконка глаза, «Ответ будет виден») и --whispering (фон primary-medium / primary-very-low, иконка перечеркнутого глаза, «Шепот»). Нажатие на неё переключает шепот — используется тот же путь кода, что и у переключателя внутри меню, поэтому оба элемента остаются синхронизированными. Сама иконка триггера также меняется на far-eye-slash при включенном шепоте.
UX редактирования. При редактировании поста выпадающее меню сворачивается в статичную метку без стрелки (иконка карандаша + «Редактировать пост»). Кнопка «Добавить причину редактирования», которая раньше располагалась в другом месте интерфейса редактора, теперь встроена в этот статичный триггер как кликабельная кнопка «Опишите ваше изменение»; при нажатии на неё метка заменяется текстовым полем, привязанным к composer.editReason, и фокус устанавливается на него.
Интерфейс редактора. Текст/тег .action-title удалён — текущий режим отображается непосредственно в триггере выпадающего меню.
Ссылки на посты/темы теперь будут отображаться только при необходимости. Ссылка на тему появится при переходе с темы, а ссылка на пост — при прокрутке за пределы поста или переходе с него.
Примечания для разработчиков плагинов
Новый компонент не является подклассом SelectKit, поэтому старые API расширений к нему не применяются. Для поддержки обоих состояний флага на этапе альфа-версии плагинам следует регистрировать оба API:
Старый API (работает только со старым компонентом)
api.registerBehaviorTransformer("composer-actions-on-select", ({ context, next }) => { if (context.actionId === "foo") { ...; return; } next(); })
Структура строки ({ name, description, icon, id }) идентична в обоих случаях. Трансформер поведения получает в контексте { actionId, options, model }.
Плагины, которые регистрируют только старые хуки, незаметно исчезнут из редактора сразу после включения флага администратором. Плагины, которые регистрируют только новые трансформеры, будут невидимы, пока флаг выключен (по умолчанию для всех после слияния).
Ссылки:
discourse-post-voting/extend-composer-actions.js — рабочий пример двойной регистрации (в ядре)
transformers.js — названия двух новых трансформеров
Примечания по выпуску
Статус флага — альфа — включение только для внутреннего тестирования.
Плагинам, интегрирующимся с действиями редактора, следует добавить двойную регистрацию до перехода флага в статус beta/stable.
Тесты покрывают оба состояния: существующие acceptance/system-спецификации покрывают состояние с выключенным флагом; файлы *-new-test.js покрывают состояние с включенным флагом (плюс новые селекторы DOM для единого выпадающего меню, элементов переключателей, индикатора шепота и фрагментов разделённой метки).
Можно ли скрыть параметр «Включить голосование за посты», если выбранный тип категории не Ideas или в настройках категории не включена функция голосования за посты? : ))
Так было всегда: плагин голосования за посты работает на всём сайте, а не ограничен отдельными категориями. Настройки на уровне категорий касаются лишь установки значений по умолчанию, а не ограничения использования плагина.
Мы находимся в переходном состоянии с плагином голосования за посты… Думаю, нам нужно будет продумать миграцию, чтобы не нарушить более широкое использование плагина перед ограничением его применения для конкретных категорий, просто потому, что тип «идеи» — это довольно новая концепция.
Хорошая новость в том, что у нас уже есть хуки, позволяющие реализовать это в компоненте темы… это работает в инициализаторе, чтобы показывать переключатель только в категории «Идеи»:
Здравствуйте, @Moin, спасибо, что обратили на это наше внимание.
Я не смог воспроизвести проблему на своей стороне с использованием Chromium, Firefox или Safari, и, к сожалению, прикрепленное видео у меня не воспроизводится.
Чтобы помочь нам диагностировать и отследить эту проблему, могли бы вы предоставить немного больше деталей?
Операционная система: (например, Android, iOS, Windows, macOS, Linux)
Браузер и версия: (например, Chrome 125, Safari 17)
Версия Discourse: Вы можете найти её в своей панели администратора или следуя этому руководству на Meta.
Один из вариантов, который вы можете попробовать прямо сейчас:
Проверьте поведение в безопасном режиме, добавив /safe-mode в конец URL вашего сайта (например, https://discourse.example.com/safe-mode).
Если проблема исчезнет: Скорее всего, конфликт вызывает одно из пользовательских изменений на вашем сайте (плагины, темы или компоненты).
Если проблема сохранится: Это ошибка в ядре, и предоставленные вами выше данные о браузере/устройстве помогут нам точно определить и исправить её.
Спасибо за ваше терпение, мы ценим это, и, пожалуйста, сообщите, если у вас возникнут вопросы по информации, которую я поделился здесь.
Разве вы не считаете немного нелепым объяснять мне подробности о безопасном режиме и как найти версию моего Discourse?
Как видно из видео выше (я загрузил его снова — не уверен, почему оно сегодня не работало), я включил безопасный режим.
Текущая версия — 2a08d5d (она была другой, когда я писал отчет). Я могу воспроизвести проблему и здесь — я просто выбрал свой форум, потому что у администраторов больше опций, поэтому скрытое меню было лучше видно. На Meta оно едва заметно. Чаще всего кажется, что кнопка вообще не работает.
Я обновлю Discourse с этим исправлением и сообщу, когда изменения будут объединены. *Обновление: изменения объединены, исправление появится в вашем следующем развёртывании версии d82dc7c или новее.
Небольшое замечание: поскольку редактирование последнего сообщения больше не поднимает тему, редактирование не работает как эффективное средство уведомления. Один из ваших коллег как-то сказал, что лучше просто создавать отдельные сообщения с обновлениями. Интересно, что вы сами часто этого не делаете.