module Middleman::PageToc::Helpers

Public Instance Methods

render_toc(page=nil, options = {}) click to toggle source
# File lib/middleman-page-toc/extension.rb, line 12
      def render_toc(page=nil, options = {})
        unless config.markdown_engine == :redcarpet && config.markdown[:with_toc_data]
          return "render_toc: use redcarpet as markdown_engin with markdown_option of :with_toc_data"
        end
        
        page ||= current_page
        default_options = {
          use_collapsing: true,
          expand: false,
          button_caption: 'ToC',
          target_id: 'toc_content'
        }
        options.reverse_merge! default_options

        target_id = options[:target_id]
        use_collapsing = options[:use_collapsing]
  
        if use_collapsing
          if options[:expand] == true || page.data.show_toc == true
            collapse_in = 'in'
          end
        else
          collapse_in = 'in'
        end
#        collapse_in = (use_collapsing && (options[:expand] == true || page.data.show_toc == true)) ? 'in' : ''
        button_caption = options[:button_caption]

        content_tag(:div, :class=>'toc') do
          ar = []

          if use_collapsing
            ar << content_tag(:button, button_caption, :type=>'button', :class=>'btn btn-default btn-sm toc_button', 'data-toggle'=> 'collapse', 'data-target'=>"##{target_id}")
          end
          ar << content_tag(:div, :id=>target_id, :class=>"toc_content collapse #{collapse_in}") do
            markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML_TOC)

            content = File.read(page.source_file)
            yaml_regex = /\A(---\s*\n.*?\n?)^((---|\.\.\.)\s*$\n?)/m
            if content =~ yaml_regex
              content.sub!(yaml_regex, '')
            end
            markdown.render(content)
          end
          ar.join.html_safe
          end
      end