1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
# frozen_string_literal: true
module PreviewMarkdown
extend ActiveSupport::Concern
def preview_markdown
result = PreviewMarkdownService.new(
container: resource_parent,
current_user: current_user,
params: markdown_service_params
).execute
render json: {
body: view_context.markdown(result[:text], markdown_context_params),
references: {
users: result[:users],
suggestions: SuggestionSerializer.new.represent_diff(result[:suggestions]),
commands: view_context.markdown(result[:commands])
}
}
end
private
def resource_parent
@project
end
def projects_filter_params
{
issuable_reference_expansion_enabled: true,
suggestions_filter_enabled: params[:preview_suggestions].present?
}
end
def timeline_events_filter_params
{
issuable_reference_expansion_enabled: true,
pipeline: :'incident_management/timeline_event'
}
end
def markdown_service_params
params
end
def markdown_context_params
case controller_name
when 'wikis' then { pipeline: :wiki, wiki: wiki, page_slug: params[:id] }
when 'snippets' then { skip_project_check: true }
when 'groups' then { group: group, issuable_reference_expansion_enabled: true }
when 'projects' then projects_filter_params
when 'timeline_events' then timeline_events_filter_params
when 'organizations' then { pipeline: :description }
else {}
end.merge(
requested_path: params[:path],
ref: params[:ref],
# Disable comments in markdown for IE browsers because comments in IE
# could allow script execution.
allow_comments: !browser.ie?
)
end
end
|