Here's how:
module ApplicationHelper
def markdown(text, *renderer)
case renderer[0]
when :authored
rndr = HTMLwithAlbino.new(:hard_wrap => true, :gh_blockcode => true,
:filter_html => false, :safe_links_only => true)
when :featured
rndr = HTMLwithAlbino.new(:hard_wrap => true, :gh_blockcode => true,
:filter_html => true, :safe_links_only => true)
else
rndr = HTMLwithAlbino.new(:hard_wrap => true, :gh_blockcode => true,
:filter_html => true, :no_images => true, :no_styles => true,
:safe_links_only => true)
end
redcarpet = Redcarpet::Markdown.new(rndr, :space_after_headers => true,
:fenced_code_blocks => true, :autolink => true, :no_intra_emphasis => true,
:strikethrough => true, :superscripts => true)
redcarpet.render(text).html_safe
end
end
# create a custom renderer that allows highlighting of code blocks
class HTMLwithAlbino < Redcarpet::Render::HTML
def block_code(code, language)
Albino.colorize(code, language)
end
end
Calling markdown without any arguments will assume publicly created content, hence, it filters out as much as possible; still doing Albino.colorize() instead of Albino.safe_colorize() as I haven't upgraded it yet.
I would personally prefer a more DRY version, where the
HTMLwithAlbinoinstance is created only once, since only the properties hash is changing:https://gist.github.com/1472055
Thanks Nico! I've gone with
You need to sign in, either via Twitter or Facebook to post a comment.