diff options
-rw-r--r-- | app/lib/formatter.rb | 58 |
1 files changed, 31 insertions, 27 deletions
diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb index ccebf4353..78a0e9f25 100644 --- a/app/lib/formatter.rb +++ b/app/lib/formatter.rb @@ -70,33 +70,7 @@ class Formatter end def format_markdown(html) - extensions = { - autolink: true, - no_intra_emphasis: true, - fenced_code_blocks: true, - disable_indented_code_blocks: true, - strikethrough: true, - lax_spacing: true, - space_after_headers: true, - superscript: true, - underline: true, - highlight: true, - footnotes: false, - } - - renderer = HTMLRenderer.new({ - filter_html: false, - escape_html: false, - no_images: true, - no_styles: true, - safe_links_only: true, - hard_wrap: true, - link_attributes: { target: '_blank', rel: 'nofollow noopener' }, - }) - - markdown = Redcarpet::Markdown.new(renderer, extensions) - - html = reformat(markdown.render(html)) + html = reformat(markdown_formatter.render(html)) html.delete("\r").delete("\n") end @@ -160,6 +134,36 @@ class Formatter private + def markdown_formatter + return @markdown_formatter if defined?(@markdown_formatter) + + extensions = { + autolink: true, + no_intra_emphasis: true, + fenced_code_blocks: true, + disable_indented_code_blocks: true, + strikethrough: true, + lax_spacing: true, + space_after_headers: true, + superscript: true, + underline: true, + highlight: true, + footnotes: false, + } + + renderer = HTMLRenderer.new({ + filter_html: false, + escape_html: false, + no_images: true, + no_styles: true, + safe_links_only: true, + hard_wrap: true, + link_attributes: { target: '_blank', rel: 'nofollow noopener' }, + }) + + @markdown_formatter = Redcarpet::Markdown.new(renderer, extensions) + end + def html_entities @html_entities ||= HTMLEntities.new end |