ruby on rails-用户输入中的自定义标记



我想在用户评论中添加一个简单的标记。

当用户提交此评论时:

我刚刚得到[卡:黑莲花]人。战俘

我希望它像这样显示:

我刚刚抓到黑莲花人。战俘

但带有额外的html标记:

I just got <span class="preview" data-card="/cards/card.id">Black Lotus</span> man. POW!

1) 我看了红毯,但不知道如何添加[card:...]标记。

2) 还是应该在将内容保存到DB之前运行regexp并替换内容,然后在显示注释之前使用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

相关内容

  • 没有找到相关文章

最新更新