RDiscount:generate_toc с Синатрой
Так что у меня есть настройка sinatra с Rdiscount для рендеринга файла уценки с макетом HAML. Это все работает, но я хочу, чтобы RDiscount генерировал оглавление на основе заголовков в моем файле haml. Я попытался установить его в конфигурации синатры.
set :markdown, :generate_toc => true
но это не похоже на работу.
Я также попытался сделать это, когда я рендерить уценку так:
markdown :PAGENAMEHERE, :layout => :'layouts/PAGENAMEHERE', :generate_toc => true
что тоже не работает.
Это вообще возможно? Если это так, что я делаю не так?
2 ответа
Хотя ответ @three мне очень помог, я хотел бы показать, возможно, более общее решение:
class MDWithTOC < ::Tilt::RDiscountTemplate
def flags
[:generate_toc]
end
end
Tilt.register MDWithTOC, 'md'
Здесь мы переопределяем метод flags обработчика шаблона RDiscount Tilt и регистрируем его как обработчик для md
формат.
Теперь вы можете использовать md
помощник, как всегда, и он будет генерировать оглавление.
Это должно работать:
get '/' do
text = File.read('README.md')
markdown = RDiscount.new(text, :generate_toc)
body = markdown.to_html
haml :home, :layout => true, :locals => {:body => body}
end
Вы создаете тело напрямую через RDiscount и включаете его в виде простого HTML-кода в макет HAML. Все, что мешало созданию токенов, должно работать таким образом. Я нашел решение через https://github.com/mjijackson/markdown/blob/master/app.rb