Как заставить Redcarpet дополнительно фильтровать теги HTML?
Я хотел бы добавить в белый список некоторые теги HTML, например <kbd></kbd>
так что я могу показать симпатичный значок клавиатуры для всех сочетаний клавиш. Как я могу это сделать?
Фрагмент кода ниже - это функция, которую я сейчас использую для преобразования строки 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
1 ответ
Решение
Использование 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)