Как ограничить некоторые возможности Markdown в первом сообщении?

Я хочу ограничить некоторые возможности Markdown для первого сообщения темы, которое генерируется моим плагином.

Это можно легко реализовать на стороне клиента, обратившись к атрибуту topicFirstPost модели композитора. Однако на стороне сервера в файлах lib/pretty_text.rb и model/post.rb я обнаружил, что в метод cook передаётся только topic_id. Я мог бы проверить атрибут posts_count темы, но это не сработает при повторной обработке (rebaking).

Возможно, мне не стоит использовать какое-либо состояние в процессе markdown-it?

Другой способ — сгенерировать плейсхолдер с помощью Markdown, затем вручную обновить предпросмотр и отслеживать события пост-обработки на стороне сервера, но это может потребовать дополнительной работы.

Если возможно, я бы предпочёл первый вариант. Спасибо за любые предложения.

У меня нет ни малейшего представления, но что вы делаете с HTML? Он разрешён, даже если Markdown будет ограничен, верно?

Вы написали плагин, который генерирует текст, который не должен рендериться?

Можете рассказать подробнее о том, что вы пытаетесь сделать?

@Jagster @pfaffman

Представьте, что плагин добавляет некоторые пользовательские теги 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