我想为用户评论添加一个简单的markdown。

当用户提交此评论时:

我刚认识[card:Black Lotus]人。战俘!

我希望这样显示:

我刚得到黑莲花男人。战俘!

但带有额外的html标记:
I just got <span class="preview" data-card="/cards/card.id">Black Lotus</span> man. POW!
1)我查看了Redcarpet,但不知道如何向其添加[card:...] markdown。

2)还是我应该先运行regexp并替换内容,然后再将其保存到DB,然后在显示注释之前先将sanitize(ActionView::Helpers::SanitizeHelper) span标记保存?

最佳答案

回答我自己的问题:

定义自定义渲染器并覆盖normal_text方法即可完成工作。

class HTMLwithCards < Redcarpet::Render::HTML
  def preprocess(full_document)
    full_document.gsub(/\[card:(.*)\]/) do
      card = Card.find_by_name($1)
      if card
        "<span class='preview' data-card='/cards/#{card.id}'>#{$1}</span>"
      else
        $1
      end
    end
  end
end

然后您可以这样称呼它:
def markdown(text)
  renderer = HTMLwithCards.new(hard_wrap: true, filter_html: true)
  Redcarpet::Markdown.new(renderer).render(text).html_safe
end

关于ruby-on-rails - 用户输入中的自定义 Markdown ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14741197/

10-13 02:09