2013-02-06 3 views
9

사용자 주석에 간단한 부호 사용을 추가하고 싶습니다.사용자 입력시 사용자 정의 값 하한값

사용자가이 댓글 제출하면 :

난 그냥있어 [카드 : 블랙 로터스] 사람. 포로!

나는 다음과 같이 표시하고 싶습니다 :

난 그냥 블랙 로터스 남자를 얻었다. 포로!

하지만 별도의 HTML 마크 업는 :

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

1) 나는 Redcarpet 보았다 만에 [card:...] 인하를 추가하는 방법을 알아낼 수 없습니다.

2) 아니면 그냥 regexp를 실행하고 내용을 DB에 저장하기 전에 바꿔서 sanitize(ActionView::Helpers::SanitizeHelper)span 태그 앞에 코멘트를 표시해야합니까?

답변

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 
+0

사용할 필요가 AFAIK는'대신 normal_text', 그래서이 편집을하고있어'의 preprocess'. 제가 누락 된 것을 알고 있다면 제 정정을 바로 잡으십시오. – iconoclast

+0

@iconoclast'preprocess'를 이런 식으로 사용하지 않으면'filter_html'가 꺼져 있어야합니까? 나는 'normal_text' 또는'postprocess'를 사용하는 해결책이 여기에있는 길일 것이라고 생각합니다. 구문이 코드 블록을 엉망으로 만드는 경우 –