Class: AdminSuite::MarkdownRenderer::HtmlRenderer
- Inherits:
-
Redcarpet::Render::HTML
- Object
- Redcarpet::Render::HTML
- AdminSuite::MarkdownRenderer::HtmlRenderer
- Includes:
- Rouge::Plugins::Redcarpet
- Defined in:
- lib/admin_suite/markdown_renderer.rb
Instance Attribute Summary collapse
-
#toc_items ⇒ Object
readonly
Returns the value of attribute toc_items.
Instance Method Summary collapse
- #block_code(code, language) ⇒ Object
- #header(text, header_level) ⇒ Object
-
#initialize(extensions = {}) ⇒ HtmlRenderer
constructor
A new instance of HtmlRenderer.
- #table(header, body) ⇒ Object
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_items ⇒ Object (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 |