Skip to content

Commit

Permalink
Extract markdown helper logic to a class
Browse files Browse the repository at this point in the history
This way it'll be easier for other Consul installations to overwrite
parts of the code, like the default options.
  • Loading branch information
javierm authored and karim-semmoud committed Jun 29, 2023
1 parent 7912020 commit af618ea
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 24 deletions.
21 changes: 1 addition & 20 deletions app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,26 +11,7 @@ def rtl?(locale = I18n.locale)
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)
Expand Down
6 changes: 2 additions & 4 deletions app/models/legislation/draft_version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
48 changes: 48 additions & 0 deletions lib/markdown_converter.rb
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit af618ea

Please sign in to comment.