Я хочу ограничить некоторые возможности Markdown для первого сообщения темы, которое генерируется моим плагином.
Это можно легко реализовать на стороне клиента, обратившись к атрибуту topicFirstPost модели композитора. Однако на стороне сервера в файлах lib/pretty_text.rb и model/post.rb я обнаружил, что в метод cook передаётся только topic_id. Я мог бы проверить атрибут posts_count темы, но это не сработает при повторной обработке (rebaking).
Возможно, мне не стоит использовать какое-либо состояние в процессе markdown-it?
Другой способ — сгенерировать плейсхолдер с помощью Markdown, затем вручную обновить предпросмотр и отслеживать события пост-обработки на стороне сервера, но это может потребовать дополнительной работы.
Если возможно, я бы предпочёл первый вариант. Спасибо за любые предложения.
Представьте, что плагин добавляет некоторые пользовательские теги BBCode или оборачивает любой текст в пользовательский HTML-тег для последующего использования, например, для его стилизации. Я не хочу, чтобы это применялось за пределами первого сообщения (или на основе других условий), так как мне это не нужно и это может вызвать побочные эффекты.
Также я, возможно, нашел возможное решение на стороне сервера. Оно оборачивает метод cook модели Post. Я еще не тестировал его.
class ::Post
# оборачиваем оригинальный метод cook, чтобы добавить опцию features
# см. метод markdown в lib/pretty_text.rb
alias_method :original_cook, :cook
def cook(raw, opts = {})
features = {
'feature-name': is_first_post?
}
if opts.has_key?(:features)
opts[:features].merge!(features)
else
opts[:features] = features
end
original_cook(raw, opts)
end
end