Sha256: 85171bd4f3857683fd10b7b676c99ee98df1f87eb88ff7a22f899fa2aee2e462

Contents?: true

Size: 989 Bytes

Versions: 2

Compression:

Stored size: 989 Bytes

Contents

module Headmin
  class DocumentationRenderer < Redcarpet::Render::HTML
    def block_code(code, language)
      if language == "erbx"
        "<div class=\"card mb-3\"><div class=\"card-body\">#{render_code(code)}</div><div class=\"card-footer\"><pre><code class=\"h-syntax\">#{highlight_syntax(code, 'erb')}</code></pre></div></div>"
      else
        "<pre><code class=\"h-syntax\">#{highlight_syntax(code, language)}</code></pre></div>"
      end
    end

    def table(header, body)
      "<table class=\"table table-sm\">#{header}#{body}</table>"
    end

    private

    def highlight_syntax(code, language)
      formatter = Rouge::Formatters::HTML.new
      lexer = Rouge::Lexer.find(language)
      formatter.format(lexer.lex(code))
    end

    def render_code(code)
      ApplicationController.renderer.new(
        'action_dispatch.request.path_parameters' => {
          controller: 'main',
          action: 'index'
        }
      ).render(inline: code)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
headmin-0.3.2 app/models/headmin/documentation_renderer.rb
headmin-0.3.1 app/models/headmin/documentation_renderer.rb