4

레일즈 4.1에서 Redcarpet's Markdown parser을 사용하고 있습니다. 직원들이 어떤 형식으로 메시지를 쓸 수 있습니다. YouTube 동영상을 퍼갈 수 있기를 바랍니다. 아마 같은 :Redcarpet for Rails와 함께 Markdown에 YouTube 동영상을 퍼가려면 어떻게해야하나요?

Hey, *check out* my video: [VMD-z2Xni8U](youtube) 

그 것 출력 :

이봐, 체크 아웃 내 비디오 : <iframe width="560" height="315" src="//www.youtube.com/embed/VMD-z2Xni8U" frameborder="0" allowfullscreen></iframe>

Redcarpet의 마크 다운 파서 내에서이 작업을 수행 할 수있는 방법이 있습니까? 나는 어떤 종류의 커스텀 파서를 써야만한다고 생각하니? 방법이 있다면, 이것을하는 적절한 방법은 무엇입니까? 이 작업을 수행하는 표준 Markdown 방법이 있습니까?

답변

7

가장 간단한 해결책은 다음과 같습니다. 내 Markdown에 http://youtube/VMD-z2Xni8U을 사용하여 YouTube 동영상을 퍼가 려합니다. 그런 다음 Redcarpet에서 자동 연결을 허용하여 자동 연결합니다.

# /app/helpers/application_helper.rb 
module ApplicationHelper 
    require './lib/helpers/markdown_renderer_with_special_links' 
    def markdown(content) 
    @markdown ||= Redcarpet::Markdown.new(MarkdownRendererWithSpecialLinks, autolink: true, space_after_headers: true, fenced_code_blocks: true) 
    @markdown.render(content).html_safe 
    end 
end 
: 인하 콘텐츠를 표시 할 때

# /lib/helpers/markdown_renderer_with_special_links.rb 
class MarkdownRendererWithSpecialLinks < Redcarpet::Render::HTML 
    def autolink(link, link_type) 
    case link_type 
     when :url then url_link(link) 
     when :email then email_link(link) 
    end 
    end 
    def url_link(link) 
    case link 
     when /^http:\/\/youtube/ then youtube_link(link) 
     else normal_link(link) 
    end 
    end 
    def youtube_link(link) 
    parameters_start = link.index('?') 
    video_id = link[15..(parameters_start ? parameters_start-1 : -1)] 
    "<iframe width=\"560\" height=\"315\" src=\"//www.youtube.com/embed/#{video_id}?rel=0\" frameborder=\"0\" allowfullscreen></iframe>" 
    end 
    def normal_link(link) 
    "<a href=\"#{link}\">#{link}</a>" 
    end 
    def email_link(email) 
    "<a href=\"mailto:#{email}\">#{email}</a>" 
    end 
end 

I이어서 markdown 어떤 관점에서 사용하는 방법 또는 제어를 만들

관련 문제