summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorDouwe Maan <douwe@selenight.nl>2017-04-21 10:17:19 -0500
committerToon Claes <toon@gitlab.com>2017-04-27 13:22:17 +0200
commit4f2d6b3e21911ab29ae18dff1be909d94f3127ed (patch)
treeea7186401f4b0fa02970c55f788b1dabeb2a247a /app
parent05e0f504530a162d4bcb886adf504c12cffd5934 (diff)
downloadgitlab-ce-4f2d6b3e21911ab29ae18dff1be909d94f3127ed.tar.gz
Refactor MarkupHelper
Diffstat (limited to 'app')
-rw-r--r--app/helpers/markup_helper.rb116
-rw-r--r--app/models/repository.rb2
-rw-r--r--app/views/projects/_readme.html.haml2
-rw-r--r--app/views/projects/blob/_markup.html.haml2
-rw-r--r--app/views/projects/blob/preview.html.haml2
-rw-r--r--app/views/projects/tree/_readme.html.haml2
-rw-r--r--app/views/search/results/_snippet_blob.html.haml2
-rw-r--r--app/views/shared/snippets/_blob.html.haml2
8 files changed, 55 insertions, 75 deletions
diff --git a/app/helpers/markup_helper.rb b/app/helpers/markup_helper.rb
index c39b630aec6..95036ccf57d 100644
--- a/app/helpers/markup_helper.rb
+++ b/app/helpers/markup_helper.rb
@@ -59,18 +59,22 @@ module MarkupHelper
fragment.to_html.html_safe
end
- def markdown(text, context = {})
- html = markdown_render(text, context)
+ # Return the first line of +text+, up to +max_chars+, after parsing the line
+ # as Markdown. HTML tags in the parsed output are not counted toward the
+ # +max_chars+ limit. If the length limit falls within a tag's contents, then
+ # the tag contents are truncated without removing the closing tag.
+ def first_line_in_markdown(text, max_chars = nil, options = {})
+ md = markdown(text, options).strip
- markup_postprocess(html, context)
+ truncate_visible(md, max_chars || md.length) if md.present?
end
- def markdown_render(text, context = {})
+ def markdown(text, context = {})
return "" unless text.present?
context[:project] ||= @project
-
- Banzai.render(text, context)
+ html = context.delete(:rendered) || markdown_unsafe(text, context)
+ banzai_postprocess(html, context)
end
def markdown_field(object, field)
@@ -81,85 +85,59 @@ module MarkupHelper
banzai_postprocess(html, object.banzai_render_context(field))
end
- def asciidoc_render(text)
- Gitlab::Asciidoc.render(
- text,
- project: @project,
- current_user: (current_user if defined?(current_user)),
-
- # RelativeLinkFilter
- project_wiki: @project_wiki,
- requested_path: @path,
- ref: @ref,
- commit: @commit
- )
- end
-
- def other_markup_render(file_name, text)
- Gitlab::OtherMarkup.render(
- file_name,
- text,
- project: @project,
- current_user: (current_user if defined?(current_user)),
-
- # RelativeLinkFilter
- project_wiki: @project_wiki,
- requested_path: @path,
- ref: @ref,
- commit: @commit
- )
- end
-
- def markup_postprocess(html, context = {})
- return "" unless html.present?
-
+ def markup(file_name, text, context = {})
context[:project] ||= @project
-
+ html = context.delete(:rendered) || markup_unsafe(file_name, text, context)
banzai_postprocess(html, context)
end
- # Return the first line of +text+, up to +max_chars+, after parsing the line
- # as Markdown. HTML tags in the parsed output are not counted toward the
- # +max_chars+ limit. If the length limit falls within a tag's contents, then
- # the tag contents are truncated without removing the closing tag.
- def first_line_in_markdown(text, max_chars = nil, options = {})
- md = markdown(text, options).strip
+ def render_wiki_content(wiki_page)
+ text = wiki_page.content
+ return "" unless text.present?
- truncate_visible(md, max_chars || md.length) if md.present?
- end
+ context = { pipeline: :wiki, project: @project, project_wiki: @project_wiki, page_slug: wiki_page.slug }
- def render_wiki_content(wiki_page)
- context = { pipeline: :wiki, project_wiki: @project_wiki, page_slug: wiki_page.slug }
- case wiki_page.format
- when :markdown
- html = markdown_render(wiki_page.content, context)
- when :asciidoc
- html = asciidoc_render(wiki_page.content)
- else
- return wiki_page.formatted_content.html_safe
- end
- markup_postprocess(html, context)
- end
+ html =
+ case wiki_page.format
+ when :markdown
+ markdown_unsafe(text, context)
+ when :asciidoc
+ asciidoc_unsafe(text)
+ else
+ wiki_page.formatted_content.html_safe
+ end
- def render_markup(file_name, file_content)
- html = markup_render(file_name, file_content)
- markup_postprocess(html)
+ banzai_postprocess(html, context)
end
- def markup_render(file_name, file_content)
+ def markup_unsafe(file_name, text, context = {})
+ return "" unless text.present?
+
if gitlab_markdown?(file_name)
- Hamlit::RailsHelpers.preserve(markdown_render(file_content))
+ Hamlit::RailsHelpers.preserve(markdown_unsafe(text, context))
elsif asciidoc?(file_name)
- asciidoc_render(file_content)
+ asciidoc_unsafe(text)
elsif plain?(file_name)
content_tag :pre, class: 'plain-readme' do
- file_content
+ text
end
else
- other_markup_render(file_name, file_content)
+ other_markup_unsafe(file_name, text)
end
rescue RuntimeError
- simple_format(file_content)
+ simple_format(text)
+ end
+
+ def markdown_unsafe(text, context = {})
+ Banzai.render(text, context)
+ end
+
+ def asciidoc_unsafe(text)
+ Gitlab::Asciidoc.render(text)
+ end
+
+ def other_markup_unsafe(file_name, text)
+ Gitlab::OtherMarkup.render(file_name, text)
end
# Returns the text necessary to reference `entity` across projects
@@ -249,6 +227,8 @@ module MarkupHelper
# Calls Banzai.post_process with some common context options
def banzai_postprocess(html, context = {})
+ return "" unless html.present?
+
context.merge!(
current_user: (current_user if defined?(current_user)),
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 328e817cc3f..d12c7d4eb27 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -530,7 +530,7 @@ class Repository
end
def rendered_readme
- markup_render(readme.name, readme.data) if readme
+ markup_unsafe(readme.name, readme.data, project: project) if readme
end
cache_method :rendered_readme
diff --git a/app/views/projects/_readme.html.haml b/app/views/projects/_readme.html.haml
index b4615e084e0..c0d12cbc66e 100644
--- a/app/views/projects/_readme.html.haml
+++ b/app/views/projects/_readme.html.haml
@@ -4,7 +4,7 @@
- if can?(current_user, :push_code, @project)
= link_to icon('pencil'), namespace_project_edit_blob_path(@project.namespace, @project, tree_join(@repository.root_ref, readme.name)), class: 'light edit-project-readme'
.file-content.wiki
- = markup_postprocess(@repository.rendered_readme)
+ = markup(readme.name, readme.data, rendered: @repository.rendered_readme)
- else
.row-content-block.second-block.center
%h3.page-title
diff --git a/app/views/projects/blob/_markup.html.haml b/app/views/projects/blob/_markup.html.haml
index 4ee4b03ff04..0090f7a11df 100644
--- a/app/views/projects/blob/_markup.html.haml
+++ b/app/views/projects/blob/_markup.html.haml
@@ -1,4 +1,4 @@
- blob.load_all_data!(@repository)
.file-content.wiki
- = render_markup(blob.name, blob.data)
+ = markup(blob.name, blob.data)
diff --git a/app/views/projects/blob/preview.html.haml b/app/views/projects/blob/preview.html.haml
index 5cafb644b40..fb46ccc7933 100644
--- a/app/views/projects/blob/preview.html.haml
+++ b/app/views/projects/blob/preview.html.haml
@@ -6,7 +6,7 @@
= markdown(@content)
- elsif markup?(@blob.name)
.file-content.wiki
- = raw render_markup(@blob.name, @content)
+ = raw markup(@blob.name, @content)
- else
.file-content.code.js-syntax-highlight
- unless @diff_lines.empty?
diff --git a/app/views/projects/tree/_readme.html.haml b/app/views/projects/tree/_readme.html.haml
index 30df6fd50d0..01599060844 100644
--- a/app/views/projects/tree/_readme.html.haml
+++ b/app/views/projects/tree/_readme.html.haml
@@ -5,4 +5,4 @@
%strong
= readme.name
.file-content.wiki
- = render_markup(readme.name, readme.data)
+ = markup(readme.name, readme.data)
diff --git a/app/views/search/results/_snippet_blob.html.haml b/app/views/search/results/_snippet_blob.html.haml
index f84be600df8..f2fe5742c12 100644
--- a/app/views/search/results/_snippet_blob.html.haml
+++ b/app/views/search/results/_snippet_blob.html.haml
@@ -21,7 +21,7 @@
.file-content.wiki
- snippet_chunks.each do |chunk|
- unless chunk[:data].empty?
- = render_markup(snippet.file_name, chunk[:data])
+ = markup(snippet.file_name, chunk[:data])
- else
.file-content.code
.nothing-here-block Empty file
diff --git a/app/views/shared/snippets/_blob.html.haml b/app/views/shared/snippets/_blob.html.haml
index 74f71e6cbd1..895c3f1e99d 100644
--- a/app/views/shared/snippets/_blob.html.haml
+++ b/app/views/shared/snippets/_blob.html.haml
@@ -24,6 +24,6 @@
- if gitlab_markdown?(@snippet.file_name)
= preserve(markdown_field(@snippet, :content))
- else
- = render_markup(@snippet.file_name, @snippet.content)
+ = markup(@snippet.file_name, @snippet.content)
- else
= render 'shared/file_highlight', blob: @snippet