2013-02-06 33 views
9

Kullanıcı yorumlarına basit bir işaretleme eklemek istiyorum.özel işaretleme

kullanıcı şu yorumu gönderdiğinde:

Sadece var [kart: Siyah Lotus] adamı. Esir!

Ben böyle teşhir olmak istiyorum:

Sadece Siyah Lotus adam var. Esir!

ama ekstra html biçimlendirme ile:

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

1) Ben Redcarpet baktım ama buna [card:...] fiyat indirimlerini eklemek anlamaya olamaz.

2) ya da regexp'i çalıştırmalı ve içeriği DB'ye kaydetmeden önce değiştirmeli ve bir yorum görüntülemeden önce sanitize(ActionView::Helpers::SanitizeHelper)span etiketini mi kullanmalıyım?

cevap

9

Kendi sorumu yanıtlayan:

tanımlanması özel oluşturucusunu ve yöntemi normal_text üzerine yazarak bir işi yapar.

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 

ve sonra böyle diyebilirsin:

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

Kullanmak gerek AFAIK 'yerine normal_text', bu yüzden bu düzenleme ediyorum' arasında preprocess'. Kaybettiğim bir şey biliyorsanız, lütfen düzeltmemi düzeltin. – iconoclast

+0

@iconoclast 'preprocess' kullanamazsınız bu şekilde' filter_html' kapalı olmasını ister misiniz? Sözdiziminizin kod bloklarını karıştırıp karıştırmamasına bağlı olarak, 'normal_text' veya' postprocess' kullanarak bir çözümün işe yarayacağını düşünüyorum. –