Como limitar alguns recursos de markdown para o primeiro post?

Quero limitar alguns recursos do markdown para o primeiro post do tópico, que é do meu plugin.

Isso poderia ser facilmente implementado no lado do cliente acessando o atributo topicFirstPost do modelo do composer. No entanto, no lado do servidor, em lib/pretty_text.rb e model/post.rb, descobri que apenas o topic_id é passado para o método cook. Eu poderia possivelmente verificar o atributo posts_count do tópico, mas isso não funcionaria ao refazer.

Talvez eu não deva usar nenhum estado no processo do markdown-it?

Outra maneira de conseguir isso é gerar um placeholder usando markdown, depois atualizar a prévia manualmente e ouvir alguns eventos de pós-processamento do cook no lado do servidor, mas isso pode exigir algum trabalho adicional.

Eu preferiria a primeira maneira, se possível. Obrigado por quaisquer sugestões.

Não faço ideia, mas o que você faz com HTML? É permitido, até mesmo o Markdown seria limitado, certo?

Você escreveu um plugin que gera texto que você não quer que seja renderizado?

Você pode dizer mais sobre o que está tentando fazer?

@Jagster @pfaffman
Por favor, imagine que o plugin adiciona algumas tags BBCode personalizadas ou envolve qualquer texto com uma tag HTML personalizada para uso posterior, como para decorá-lo. Não quero que isso tenha efeito fora da primeira postagem (ou com base em outras condições), pois não preciso disso e isso pode causar alguns efeitos colaterais.

Além disso, posso ter encontrado uma solução possível no lado do servidor. Ele envolve o método cook do modelo Post. Ainda não testei.

class ::Post
  # envolve o método cook original para adicionar opção de recursos
  # veja o método markdown em 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
4 curtidas