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
|
end
|
||||||
|
|
||||||
def markdown(text, **render_options)
|
def markdown(text, **render_options)
|
||||||
return text if text.blank?
|
MarkdownConverter.new(text, **render_options).render
|
||||||
|
|
||||||
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))
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def wysiwyg(text)
|
def wysiwyg(text)
|
||||||
|
|||||||
@@ -22,13 +22,11 @@ class Legislation::DraftVersion < ApplicationRecord
|
|||||||
scope :published, -> { where(status: "published").order("id DESC") }
|
scope :published, -> { where(status: "published").order("id DESC") }
|
||||||
|
|
||||||
def body_html
|
def body_html
|
||||||
ApplicationController.helpers.markdown(body, with_toc_data: true)
|
MarkdownConverter.new(body, with_toc_data: true).render
|
||||||
end
|
end
|
||||||
|
|
||||||
def toc_html
|
def toc_html
|
||||||
renderer = Redcarpet::Render::HTML_TOC.new(with_toc_data: true)
|
MarkdownConverter.new(body).render_toc
|
||||||
|
|
||||||
Redcarpet::Markdown.new(renderer).render(body)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def display_title
|
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