2013-02-06 44 views
9

Tôi muốn thêm một đánh dấu đơn giản vào nhận xét của người dùng.đánh dấu tùy chỉnh trong mục nhập của người dùng

Khi người dùng gửi nhận xét này:

Tôi chỉ có [thẻ: Black Lotus] người đàn ông. POW!

Tôi muốn nó được hiển thị như thế này:

Tôi chỉ có Black Lotus con người. POW!

nhưng với đánh dấu html thêm:

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

1) Tôi nhìn Redcarpet nhưng không thể tìm ra cách để thêm [card:...] markdown với nó.

2) hoặc tôi chỉ nên chạy regexp và thay thế nội dung trước khi lưu nó vào DB và sau đó sanitize(ActionView::Helpers::SanitizeHelper)span thẻ trước khi hiển thị nhận xét?

Trả lời

9

Trả lời câu hỏi của riêng tôi:

Xác định trình kết xuất tùy chỉnh và ghi đè phương thức normal_text thực hiện công việc.

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 

và sau đó bạn có thể gọi nó như thế này:

def markdown(text) 
    renderer = HTMLwithCards.new(hard_wrap: true, filter_html: true) 
    Redcarpet::Markdown.new(renderer).render(text).html_safe 
end 
+0

AFAIK bạn cần phải sử dụng 'preprocess' thay vì' normal_text', vì vậy tôi chỉnh sửa này. Nếu bạn biết cái gì tôi đang thiếu, xin vui lòng sửa chữa sửa chữa của tôi. – iconoclast

+0

@iconoclast Sẽ không sử dụng 'tiền xử lý' theo cách này yêu cầu bạn phải tắt 'filter_html'? Tôi nghĩ rằng một giải pháp sử dụng 'normal_text' hoặc' postprocess' sẽ là cách để đi đến đây, tùy thuộc vào việc bạn quan tâm nếu cú ​​pháp của bạn làm rối tung các khối mã –

Các vấn đề liên quan