From 1f3372f52c0aab437926f2904efb00bbb0d63a96 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Wed, 9 Jan 2019 17:52:24 +0000 Subject: [PATCH] Switch to using kramdown for markdown formatting Fixes #2103 --- Gemfile | 2 +- Gemfile.lock | 4 ++-- config/locales/en.yml | 2 +- lib/rich_text.rb | 26 ++++++++------------------ 4 files changed, 12 insertions(+), 22 deletions(-) diff --git a/Gemfile b/Gemfile index f75921f12..3cf075045 100644 --- a/Gemfile +++ b/Gemfile @@ -77,7 +77,7 @@ gem "omniauth-openid" gem "omniauth-windowslive" # Markdown formatting support -gem "redcarpet" +gem "kramdown" # For status transitions of Issues gem "aasm" diff --git a/Gemfile.lock b/Gemfile.lock index 2aba9c21b..3b70d157a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -161,6 +161,7 @@ GEM jsonify (< 0.4.0) jwt (2.1.0) kgio (2.11.2) + kramdown (1.17.0) libv8 (3.16.14.19) libxml-ruby (3.1.0) listen (3.1.5) @@ -303,7 +304,6 @@ GEM ffi (~> 1.0) record_tag_helper (1.0.0) actionview (~> 5.x) - redcarpet (3.4.0) ref (2.0.0) request_store (1.4.1) rack (>= 1.4) @@ -412,6 +412,7 @@ DEPENDENCIES json jsonify-rails kgio + kramdown libxml-ruby (>= 2.0.5) listen logstasher @@ -438,7 +439,6 @@ DEPENDENCIES rails-controller-testing rails-i18n (~> 4.0.0) record_tag_helper - redcarpet rinku (>= 1.2.2) rotp rubocop diff --git a/config/locales/en.yml b/config/locales/en.yml index e87e8f8ee..bbcba0f2c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1626,7 +1626,7 @@ en: edit: Edit preview: Preview markdown_help: - title_html: Parsed with Markdown + title_html: Parsed with kramdown headings: Headings heading: Heading subheading: Subheading diff --git a/lib/rich_text.rb b/lib/rich_text.rb index d0539b2b0..5b0faae2b 100644 --- a/lib/rich_text.rb +++ b/lib/rich_text.rb @@ -55,11 +55,15 @@ module RichText SimpleFormat.new.simple_format(text) end - def linkify(text) + def sanitize(text) + Sanitize.clean(text, Sanitize::Config::OSM).html_safe + end + + def linkify(text, mode = :urls) if text.html_safe? - Rinku.auto_link(text, :urls, tag_builder.tag_options(:rel => "nofollow")).html_safe + Rinku.auto_link(text, mode, tag_builder.tag_options(:rel => "nofollow")).html_safe else - Rinku.auto_link(text, :urls, tag_builder.tag_options(:rel => "nofollow")) + Rinku.auto_link(text, mode, tag_builder.tag_options(:rel => "nofollow")) end end end @@ -72,30 +76,16 @@ module RichText def to_text to_s end - - private - - def sanitize(text) - Sanitize.clean(text, Sanitize::Config::OSM).html_safe - end end class Markdown < Base def to_html - Markdown.html_parser.render(self).html_safe + linkify(sanitize(Kramdown::Document.new(self).to_html), :all) end def to_text to_s end - - def self.html_renderer - @html_renderer ||= Redcarpet::Render::XHTML.new(:filter_html => true, :safe_links_only => true, :link_attributes => { :rel => "nofollow" }) - end - - def self.html_parser - @html_parser ||= Redcarpet::Markdown.new(html_renderer, :no_intra_emphasis => true, :autolink => true, :space_after_headers => true) - end end class Text < Base -- 2.43.2