Привет,
Я был бы очень рад, если бы кто-то мог помочь мне понять, как работает процесс постобработки. Особенно меня интересует эта часть:
Почему постобработка происходит уже после того, как пост был «приготовлен»?
Возможно, мы могли бы пройти по шагам того, что потребовалось бы сделать для добавления такой функции, как oneboxes или «цитаты конкретных пользователей», если бы их ещё не существовало. Я наткнулся на Prettytext discourse/app/assets/javascripts/pretty-text at f9608c0af5f7b1109117a5aba979acb00c28cf9a · discourse/discourse · GitHub
который обрабатывает преобразование в markdown и из markdown, а также рендеринг окна предпросмотра. Также я нашёл функцию rebake в модели поста на бэкенде:
которая вызывает метод cook класса PostAnalyzer:
эта функция выполняет преобразование markdown с помощью JavaScript на бэкенде:
Моя мысль была в том, что так сделано для уменьшения дублирования кода, но затем я обнаружил
CookedPostProcessor
на который я ссылался в начале. Похоже, что часть обработки выполняется только в JavaScript, в то время как другая часть выполняется и в JavaScript, и в Ruby в рамках CookedPostProcessor. Подводя итог: 1. Вам нужны правила преобразования в markdown и из markdown (похоже, это только в JavaScript). 2. Вам нужен код для создания HTML (часть в JavaScript, но также и часть в Ruby). Меня интересует, почему пункт (2) выполняется частично в JavaScript, а частично в Ruby. Можете ли вы привести пример? Также я был бы очень рад, если бы вы могли исправить неверные предположения, которые я сделал в этом сообщении.
Огромное спасибо!
Spirobel
Для начала откройте вкладку Network в консоли JavaScript, чтобы увидеть, какие данные захватываются на фронтенде и передаются на сервер при создании поста. Это означает, что все данные, отправленные в Rails API, дополнительно обрабатываются Rails. Затем в таблице posts вы увидите столбцы raw и cooked, которые содержат необработанную и обработанную версии поста соответственно.
Хорошо, спасибо за ответ. Я думаю, что буду изучать это постепенно. Мне кажется, что мой подход «рассуждать об этом, исходя из первых принципов» не сработал, потому что это сложилось исторически.