У нас возникла проблема с пользовательскими тегами событий и новым WYSIWYG-редактором ProseMirror: пользовательские поля, заполненные в форме события, отсутствуют в сгенерированной строке. С редактором Markdown всё работает как раньше.
Шаги для воспроизведения:
Включите плагин Discourse Calendar.
Добавьте одно пользовательское поле в конфигурацию плагина.
Откройте форму для создания нового сообщения.
Выберите редактор ProseMirror.
Создайте событие, указав значение для пользовательского поля (Опции > Создать событие).
Подтвердите создание события.
Переключитесь на редактор Markdown.
Что происходит
Пользовательское поле отсутствует в теге [event].
Ожидаемое поведение
Пользовательское поле должно присутствовать в теге [event].
Примечания
Если выполнить те же действия, но начать с редактора Markdown вместо ProseMirror, пользовательское поле будет присутствовать в теге [event].
Я немного исследовал, что происходило с toolbarEvent при проверке нового события: метод addText() в обоих случаях, похоже, получает правильную разметку:
Я не могу найти другой плагин с аналогичной функцией, поэтому сложно понять, в чём проблема.
При валидации формы вызывается this.args.model.toolbarEvent.addText() с правильным текстом.
Несколько console.log привели меня к text-manipulation.js#addText(), где вызывается this.convertFromMarkdown(text). Похоже, проблема именно здесь: здесь применяется своего рода схема, и она не содержит пользовательских полей.
Проблема возникает из-за расширения редактора discourse-calendar/assets/javascripts/discourse/pre-initializers/rich-editor-extension.js: список атрибутов, используемых функцией convertFromMarkdown(), определен в константе EVENT_ATTRIBUTES. Это работает, если добавить пользовательское поле в этот список.
В этом файле ничего не сказано о пользовательских полях; я не знаю, как дополнить эту константу всеми пользовательскими полями; расширение, похоже, регистрируется на очень раннем этапе процесса.
Буду рад любым предложениям, так как из-за этого плагин становится неработоспособным с новым редактором, который нельзя отключить, и мы застряли на версии Discourse 3.4.
Настраиваемые поля действительно не поддерживаются в богатом редакторе пока что. Мы изучим наилучший путь решения.
Это возможно — если вы администратор, вы можете установить SiteSettings.rich_editor = false через консоль, которая всё ещё доступна как крайняя мера в подобных случаях.