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:
committed by
karim-semmoud
parent
79120209da
commit
af618eaa45
@@ -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)
|
||||
|
||||
@@ -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
48
lib/markdown_converter.rb
Normal 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
|
||||
Reference in New Issue
Block a user