2016-10-27 7 views
0

Я хотел бы добавить белый список некоторых тегов HTML, например <kbd></kbd>, чтобы я мог показать симпатичную иконку клавиатуры для всех сочетаний клавиш. Как я могу это сделать?Как сделать Redcarpet необязательным фильтром HTML-тегов?

Ниже приведен фрагмент кода, который я использовал для преобразования строки Markdown в 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 

ответ

0

Используйте sanitize и собственный пользовательский класс скруббер.

Этот класс может работать в том же файле, что и ваш класс контроллера.

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

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

Затем используйте, что при вызове render:

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

Я не 'sanitize' может использоваться внутри контроллера. Я получил «sanitize» не определена ошибка. После Google немного я обнаружил, что 'sanitize' является помощником ActionView http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html –

+0

@LiXinyang Так оно и есть. Положите вызов в свое мнение. – ArtOfCode