2016-10-27 2 views
0

Je voudrais ajouter des balises HTML à la liste blanche, par exemple <kbd></kbd> afin que je puisse afficher une jolie icône de clavier pour tous les raccourcis clavier. Comment puis-je faire ceci?Comment faire pour que Redcarpet filtre facultativement les balises HTML?

L'extrait de code ci-dessous est la fonction que j'utilise actuellement pour convertir une chaîne Markdown en HTML.

def markdown_to_html(markdown_str) 
    options = { 
     filter_html: true, 
     link_attributes: { rel: 'nofollow', target: '_blank' }, 
     no_styles: true 
    } 

    extensions = { 
     autolink: true, 
     fenced_code_blocks: true, 
     footnotes: true, 
     highlight: true, 
     no_intra_emphasis: true, 
     quote: true, 
     space_after_headers: true, 
     strikethrough: true, 
     superscript: true, 
     tables: true 
    } 

    renderer = Redcarpet::Render::HTML.new(options) 
    markdown = Redcarpet::Markdown.new(renderer, extensions) 

    markdown.render(markdown_str).html_safe 
    end 

Répondre

0

Utilisez sanitize et votre propre classe d'épurateurs personnalisés.

Cette classe peut aller dans le même fichier que votre classe de contrôleur.

class MarkdownScrubber < Rails::Html::PermitScrubber 
    def initialize 
    super 
    self.tags = %w(kbd) 
    self.attributes = [] 
    end 

    def skip_node?(node) 
    node.text? 
    end 
end 

Ensuite, utilisez que lorsque vous appelez render:

renderer = Redcarpet::Render::HTML.new(options) 
markdown = Redcarpet::Markdown.new(renderer, extensions) 
sanitize(markdown.render(markdown_str), scrubber: MarkdownScrubber.new) 
+0

Je ne suis pas 'sanitize' peut être utilisé à l'intérieur de contrôleur. J'ai 'sanitize' n'est pas une erreur définie. Après Google un peu, j'ai trouvé que 'sanitize' est un assistant ActionView http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html –

+0

@LiXinyang Donc c'est. Mettez l'appel à votre vue, alors. – ArtOfCode