Class: AdminSuite::MarkdownRenderer::HtmlRenderer

Inherits:
Redcarpet::Render::HTML
  • Object
show all
Includes:
Rouge::Plugins::Redcarpet
Defined in:
lib/admin_suite/markdown_renderer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(extensions = {}) ⇒ HtmlRenderer

Returns a new instance of HtmlRenderer.



76
77
78
79
80
81
82
83
84
# File 'lib/admin_suite/markdown_renderer.rb', line 76

def initialize(extensions = {})
  super(extensions.merge(
    hard_wrap: true,
    link_attributes: { target: "_blank", rel: "noopener noreferrer" },
    with_toc_data: true
  ))
  @toc_items = []
  @heading_ids = Hash.new(0)
end

Instance Attribute Details

#toc_itemsObject (readonly)

Returns the value of attribute toc_items.



74
75
76
# File 'lib/admin_suite/markdown_renderer.rb', line 74

def toc_items
  @toc_items
end

Instance Method Details

#block_code(code, language) ⇒ Object



86
87
88
89
90
91
92
93
94
# File 'lib/admin_suite/markdown_renderer.rb', line 86

def block_code(code, language)
  language ||= "text"
  lexer = Rouge::Lexer.find_fancy(language, code) || Rouge::Lexers::PlainText.new
  formatter = Rouge::Formatters::HTML.new
  highlighted = formatter.format(lexer.lex(code))

  lang_label = language != "text" ? %(<span class="code-lang">#{language}</span>) : ""
  %(<div class="code-block">#{lang_label}<pre class="highlight #{language}"><code>#{highlighted}</code></pre></div>)
end

#header(text, header_level) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/admin_suite/markdown_renderer.rb', line 96

def header(text, header_level)
  base_slug = text.to_s.downcase.strip.gsub(/\s+/, "-").gsub(/[^\w-]/, "")
  base_slug = "section" if base_slug.blank?

  @heading_ids[base_slug] += 1
  slug = @heading_ids[base_slug] > 1 ? "#{base_slug}-#{@heading_ids[base_slug]}" : base_slug

  if header_level >= 2 && header_level <= 4
    @toc_items << { level: header_level, id: slug, text: text }
  end

  %(<h#{header_level} id="#{slug}">#{text}</h#{header_level}>\n)
end

#table(header, body) ⇒ Object



110
111
112
# File 'lib/admin_suite/markdown_renderer.rb', line 110

def table(header, body)
  %(<table class="admin-suite-doc-table"><thead>#{header}</thead><tbody>#{body}</tbody></table>\n)
end