diff --git a/app/helpers/markdown_helper.rb b/app/helpers/markdown_helper.rb index 6d80f255..ef634209 100644 --- a/app/helpers/markdown_helper.rb +++ b/app/helpers/markdown_helper.rb @@ -1,36 +1,42 @@ -module MarkdownHelper +# frozen_string_literal: true +module MarkdownHelper def markdown(content) - md = Redcarpet::Markdown.new(FlavoredMarkdown, MARKDOWN_OPTS) - Sanitize.fragment(md.render(content), EVIL_TAGS).html_safe + renderer = FlavoredMarkdown.new(**MARKDOWN_RENDERER_OPTS) + md = Redcarpet::Markdown.new(renderer, **MARKDOWN_OPTS) + # As the string has been sanitized we can mark it as HTML safe + Sanitize.fragment(md.render(content), EVIL_TAGS).strip.html_safe # rubocop:disable Rails/OutputSafety end def strip_markdown(content) - md = Redcarpet::Markdown.new(Redcarpet::Render::StripDown, MARKDOWN_OPTS) + renderer = Redcarpet::Render::StripDown.new + md = Redcarpet::Markdown.new(renderer, **MARKDOWN_OPTS) CGI.unescape_html(Sanitize.fragment(CGI.escape_html(md.render(content)), EVIL_TAGS)).strip end def twitter_markdown(content) - md = Redcarpet::Markdown.new(TwitteredMarkdown, MARKDOWN_OPTS) + renderer = TwitteredMarkdown.new + md = Redcarpet::Markdown.new(renderer, **MARKDOWN_OPTS) CGI.unescape_html(Sanitize.fragment(CGI.escape_html(md.render(content)), EVIL_TAGS)).strip end def question_markdown(content) - md = Redcarpet::Markdown.new(QuestionMarkdown.new, MARKDOWN_OPTS) - Sanitize.fragment(md.render(content), EVIL_TAGS).html_safe + renderer = QuestionMarkdown.new + md = Redcarpet::Markdown.new(renderer, **MARKDOWN_OPTS) + # As the string has been sanitized we can mark it as HTML safe + Sanitize.fragment(md.render(content), EVIL_TAGS).strip.html_safe # rubocop:disable Rails/OutputSafety end def raw_markdown(content) - md = Redcarpet::Markdown.new(Redcarpet::Render::HTML, RAW_MARKDOWN_OPTS) + renderer = Redcarpet::Render::HTML.new(**MARKDOWN_RENDERER_OPTS) + md = Redcarpet::Markdown.new(renderer, **MARKDOWN_OPTS) raw md.render content end def get_markdown(path, relative_to = Rails.root) - begin - File.read relative_to.join(path) - rescue Errno::ENOENT - "# Error reading #{relative_to.join(path)}" - end + File.read relative_to.join(path) + rescue Errno::ENOENT + "# Error reading #{relative_to.join(path)}" end def markdown_io(path, relative_to = Rails.root) diff --git a/app/services/flavored_markdown.rb b/app/services/flavored_markdown.rb index a6ecde56..26ee6af6 100644 --- a/app/services/flavored_markdown.rb +++ b/app/services/flavored_markdown.rb @@ -18,10 +18,6 @@ class FlavoredMarkdown < Redcarpet::Render::HTML paragraph text end - def paragraph(text) - "
#{text}
" - end - def raw_html(raw_html) Rack::Utils.escape_html raw_html end diff --git a/app/services/question_markdown.rb b/app/services/question_markdown.rb index 6ae585ea..6a251641 100644 --- a/app/services/question_markdown.rb +++ b/app/services/question_markdown.rb @@ -6,9 +6,7 @@ class QuestionMarkdown < Redcarpet::Render::StripDown include Rails.application.routes.url_helpers include SharedMarkers - def paragraph(text) - "#{text}
" - end + def paragraph(text) = "#{text.gsub("\n", '
')}
%{app_name} uses Markdown for formatting
-A blank line starts a new paragraph
*italic text*
for italic text
**bold text**
for bold text
[link](https://example.com)
for link
I'm <h1>a test</h1>
") end + + it "should turn line breaks intoSome
\ntext
https://example.com/example.質問
") end + + it "should turn line breaks intoSome
\ntext