Add post_process method to Gitlab::Markdown

This commit is contained in:
Robert Speicher 2015-09-01 18:16:56 -04:00
parent ca8d225307
commit 5794d65a07
3 changed files with 27 additions and 3 deletions

View File

@ -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)

View File

@ -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 ||= {

View File

@ -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