Как настроить фильтр Haml: markdown для использования Redcarpet с параметрами?

Я использую Rails 3.2.11, Haml 4.0 и Redcarpet 2.2.2.

Я хотел бы настроить фильтр Haml :markdown для использования Redcarpet с with_toc_data: true. В ApplicationHelper я попытался определить:

def markdown(text)
  markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(with_toc_data: true))
  raw markdown.render(text.to_s)
end

Хотя содержимое в :markdown отображается, но без данных TOC. Как изменить способ анализа :markdown?


person silvenon    schedule 05.04.2013    source источник


Ответы (1)


В настоящее время нет способа передать параметры механизмам фильтрации в Haml. Лучшее решение на данный момент, вероятно, состоит в том, чтобы заменить существующий фильтр :markdown новым с нужными параметрами.

Попробуйте добавить что-то вроде этого в инициализатор:

module Haml::Filters

  remove_filter("Markdown") #remove the existing Markdown filter

  module Markdown

    include Haml::Filters::Base

    def render(text)
      Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(with_toc_data: true)).render(text)
    end

  end
end
person matt    schedule 05.04.2013
comment
Это должно было сработать, autolink: true работает, а with_toc_data: true нет. Я подниму вопрос на Redcarpet, чтобы узнать, действительно ли существует проблема. - person silvenon; 07.04.2013
comment
Ок, with_toc_data это вариант создания рендереров, я не туда вставил. На самом деле это правильный ответ. Что теперь? Я отмечаю это как правильное, даже если оно технически не работает (моя вина), или вы меня поправляете, что оно должно быть Redcarpet::Markdown.new(Redcarpet::Render::HTML.new(with_toc_data: true)).render(text), тогда я его одобряю? - person silvenon; 07.04.2013
comment
@matija Я обновил ответ. Я просто сам изучал это, а затем вернулся, чтобы обновить его, и увидел ваш второй комментарий. - person matt; 07.04.2013
comment
@matija, вам, вероятно, тоже следует обновить свой вопрос, чтобы будущие посетители не смущались. - person matt; 07.04.2013