Commit 5794d65a authored by Robert Speicher's avatar Robert Speicher

Add post_process method to Gitlab::Markdown

parent ca8d2253
......@@ -52,7 +52,8 @@ module GitlabMarkdownHelper
ref: @ref
)
Gitlab::Markdown.render(text, context)
html = Gitlab::Markdown.render(text, context)
Gitlab::Markdown.post_process(html, current_user)
end
# TODO (rspeicher): Remove all usages of this helper and just call `markdown`
......@@ -65,7 +66,8 @@ module GitlabMarkdownHelper
ref: @ref
)
Gitlab::Markdown.gfm(text, options)
html = Gitlab::Markdown.gfm(text, options)
Gitlab::Markdown.post_process(html, current_user)
end
def asciidoc(text)
......
......@@ -31,6 +31,24 @@ module Gitlab
renderer.render(markdown)
end
# Perform post-processing on an HTML String
#
# This method is used to perform state-dependent changes to a String of
# HTML, such as removing references that the current user doesn't have
# permission to make (`RedactorFilter`).
#
# html - String to process
# for_user - User state
#
# Returns an HTML-safe String
def self.post_process(html, for_user)
result = post_processor.call(html, current_user: for_user)
result[:output].
to_html.
html_safe
end
# Provide autoload paths for filters to prevent a circular dependency error
autoload :AutolinkFilter, 'gitlab/markdown/autolink_filter'
autoload :CommitRangeReferenceFilter, 'gitlab/markdown/commit_range_reference_filter'
......@@ -115,6 +133,10 @@ module Gitlab
end
end
def self.post_processor
@post_processor ||= HTML::Pipeline.new([Gitlab::Markdown::RedactorFilter])
end
def self.redcarpet_options
# https://github.com/vmg/redcarpet#and-its-like-really-simple-to-use
@redcarpet_options ||= {
......
......@@ -220,7 +220,7 @@ describe 'GitLab Markdown', feature: true do
end
end
# `markdown` calls these two methods
# Fake a `current_user` helper
def current_user
@feat.user
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment