Switch to using kramdown for markdown formatting

Fixes #2103
This commit is contained in:
Tom Hughes 2019-01-09 17:52:24 +00:00
parent 99b380765a
commit 1f3372f52c
4 changed files with 12 additions and 22 deletions

View file

@ -77,7 +77,7 @@ gem "omniauth-openid"
gem "omniauth-windowslive" gem "omniauth-windowslive"
# Markdown formatting support # Markdown formatting support
gem "redcarpet" gem "kramdown"
# For status transitions of Issues # For status transitions of Issues
gem "aasm" gem "aasm"

View file

@ -161,6 +161,7 @@ GEM
jsonify (< 0.4.0) jsonify (< 0.4.0)
jwt (2.1.0) jwt (2.1.0)
kgio (2.11.2) kgio (2.11.2)
kramdown (1.17.0)
libv8 (3.16.14.19) libv8 (3.16.14.19)
libxml-ruby (3.1.0) libxml-ruby (3.1.0)
listen (3.1.5) listen (3.1.5)
@ -303,7 +304,6 @@ GEM
ffi (~> 1.0) ffi (~> 1.0)
record_tag_helper (1.0.0) record_tag_helper (1.0.0)
actionview (~> 5.x) actionview (~> 5.x)
redcarpet (3.4.0)
ref (2.0.0) ref (2.0.0)
request_store (1.4.1) request_store (1.4.1)
rack (>= 1.4) rack (>= 1.4)
@ -412,6 +412,7 @@ DEPENDENCIES
json json
jsonify-rails jsonify-rails
kgio kgio
kramdown
libxml-ruby (>= 2.0.5) libxml-ruby (>= 2.0.5)
listen listen
logstasher logstasher
@ -438,7 +439,6 @@ DEPENDENCIES
rails-controller-testing rails-controller-testing
rails-i18n (~> 4.0.0) rails-i18n (~> 4.0.0)
record_tag_helper record_tag_helper
redcarpet
rinku (>= 1.2.2) rinku (>= 1.2.2)
rotp rotp
rubocop rubocop

View file

@ -1626,7 +1626,7 @@ en:
edit: Edit edit: Edit
preview: Preview preview: Preview
markdown_help: markdown_help:
title_html: Parsed with <a href="https://daringfireball.net/projects/markdown/">Markdown</a> title_html: Parsed with <a href="https://kramdown.gettalong.org/quickref.html">kramdown</a>
headings: Headings headings: Headings
heading: Heading heading: Heading
subheading: Subheading subheading: Subheading

View file

@ -55,11 +55,15 @@ module RichText
SimpleFormat.new.simple_format(text) SimpleFormat.new.simple_format(text)
end 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? 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 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 end
end end
@ -72,30 +76,16 @@ module RichText
def to_text def to_text
to_s to_s
end end
private
def sanitize(text)
Sanitize.clean(text, Sanitize::Config::OSM).html_safe
end
end end
class Markdown < Base class Markdown < Base
def to_html def to_html
Markdown.html_parser.render(self).html_safe linkify(sanitize(Kramdown::Document.new(self).to_html), :all)
end end
def to_text def to_text
to_s to_s
end 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 end
class Text < Base class Text < Base