Я создаю компонент темы и хочу изменить или украсить сообщения непосредственно перед их обработкой (cooking). Как можно получить доступ к необработанному тексту сообщения (для сообщения, которое вот-вот будет обработано и показано)?
Я прочитал «Руководство разработчика по темам Discourse» и узнал, что можно модифицировать обработанный текст с помощью методов pluginAPI: decorateCooked и decorateCookedElement, а также addPostTransformCallback, но не нашёл способа получить текст до его обработки.
Также я изучил контроллеры и компоненты, но безрезультатно.
Спасибо за ваш ответ! Но я не хочу сохранять изменения текста, я хочу изменить его после сохранения, но перед отображением (и перед обработкой).
Причина в том, что я хочу, чтобы оригинальный текст появлялся, если пользователь редактирует пост. Я подозреваю, что если бы я использовал composerBeforeSave, то изменённый текст появлялся бы при редактировании (?).
Если вы хотите реализовать это как тему, это будет ваш единственный вариант. Ввод пользователя (markdown) → обработка на стороне сервера на Ruby → (HTML) получение другими пользователями и возможное оформление. Это обещание будет вызвано перед нажатием кнопки «Сохранить» или «Ответить». Это не будет отображаться в черновиках, но вы правы: это появится, если вы отредактируете сообщение. Если вы хотите обойти это, вам нужно отменить изменения, которые вы вносите при сохранении, когда редактор открывается или переключается на отредактированное сообщение. Я мог бы рассказать подробнее, но вы также можете просто изучить код и провести собственные эксперименты.
Удачи!
РЕДАКТИРОВАНИЕ: Я только что подумал об этом. Теоретически вы также могли бы выполнять обработку на стороне клиента. Но я считаю, что это плохая идея из-за производительности и других причин. Или просто создайте плагин: (Superseded) Plugin Tutorial #1 - How to manipulate the text in the composer?