Extract markdown helper logic to a class

This way it'll be easier for other Consul installations to overwrite
parts of the code, like the default options.
This commit is contained in:
Javi Martín
2023-06-29 17:39:51 +02:00
committed by karim-semmoud
parent 79120209da
commit af618eaa45
3 changed files with 51 additions and 24 deletions

View File

@@ -11,26 +11,7 @@ module ApplicationHelper
end
def markdown(text, **render_options)
return text if text.blank?
default_render_options = {
filter_html: false,
hard_wrap: true,
link_attributes: { target: "_blank" }
}
renderer = Redcarpet::Render::HTML.new(default_render_options.merge(render_options))
extensions = {
autolink: true,
fenced_code_blocks: true,
lax_spacing: true,
no_intra_emphasis: true,
strikethrough: true,
superscript: true,
tables: true
}
AdminLegislationSanitizer.new.sanitize(Redcarpet::Markdown.new(renderer, extensions).render(text))
MarkdownConverter.new(text, **render_options).render
end
def wysiwyg(text)

View File

@@ -22,13 +22,11 @@ class Legislation::DraftVersion < ApplicationRecord
scope :published, -> { where(status: "published").order("id DESC") }
def body_html
ApplicationController.helpers.markdown(body, with_toc_data: true)
MarkdownConverter.new(body, with_toc_data: true).render
end
def toc_html
renderer = Redcarpet::Render::HTML_TOC.new(with_toc_data: true)
Redcarpet::Markdown.new(renderer).render(body)
MarkdownConverter.new(body).render_toc
end
def display_title

48
lib/markdown_converter.rb Normal file
View File

@@ -0,0 +1,48 @@
class MarkdownConverter
attr_reader :text, :render_options
def initialize(text, **render_options)
@text = text
@render_options = render_options
end
def render
return text if text.blank?
AdminLegislationSanitizer.new.sanitize(Redcarpet::Markdown.new(renderer, extensions).render(text))
end
def render_toc
Redcarpet::Markdown.new(toc_renderer).render(text)
end
private
def renderer
Redcarpet::Render::HTML.new(default_render_options.merge(render_options))
end
def toc_renderer
Redcarpet::Render::HTML_TOC.new(with_toc_data: true)
end
def default_render_options
{
filter_html: false,
hard_wrap: true,
link_attributes: { target: "_blank" }
}
end
def extensions
{
autolink: true,
fenced_code_blocks: true,
lax_spacing: true,
no_intra_emphasis: true,
strikethrough: true,
superscript: true,
tables: true
}
end
end