9

ユーザーのコメントに簡単なマークダウンを追加したいと思います。

ユーザーがこのコメントを送信すると:

[カード:ブラックロータス]の男を手に入れた。捕虜!

次のような表示にしたいです。

ブラック・ロータスの男を手に入れました。捕虜!

ただし、余分な html マークアップがあります。

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

1) Redcarpetを見ましたが、マークダウンを追加する方法がわかりません[card:...]

2)または、DBに保存する前に正規表現を実行してコンテンツを置き換えsanitize(ActionView::Helpers::SanitizeHelper) span、コメントを表示する前にタグ付けする必要がありますか?

4

1 に答える 1

9

私自身の質問に答える:

カスタムレンダラーを定義し、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
于 2013-03-02T23:18:04.897 に答える