From 4340dd3eeb6fdda83b729c16cba29239b8ed9f43 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 27 Aug 2015 13:09:01 -0700 Subject: Decouple Gitlab::Markdown from the GitlabMarkdownHelper This module is now the sole source of knowledge for *how* we render Markdown (and GFM). --- app/helpers/gitlab_markdown_helper.rb | 34 ++++++++++------------------------ 1 file changed, 10 insertions(+), 24 deletions(-) (limited to 'app') diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index 114730eb948..b7fec9fc1d9 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -1,7 +1,6 @@ require 'nokogiri' module GitlabMarkdownHelper - include Gitlab::Markdown include PreferencesHelper # Use this in places where you would normally use link_to(gfm(...), ...). @@ -22,7 +21,7 @@ module GitlabMarkdownHelper escape_once(body) end - gfm_body = gfm(escaped_body, {}, html_options) + gfm_body = Gitlab::Markdown.gfm(escaped_body, project: @project, current_user: current_user) fragment = Nokogiri::XML::DocumentFragment.parse(gfm_body) if fragment.children.size == 1 && fragment.children[0].name == 'a' @@ -42,29 +41,16 @@ module GitlabMarkdownHelper fragment.to_html.html_safe end - MARKDOWN_OPTIONS = { - no_intra_emphasis: true, - tables: true, - fenced_code_blocks: true, - strikethrough: true, - lax_spacing: true, - space_after_headers: true, - superscript: true, - footnotes: true - }.freeze - - def markdown(text, options={}) - unless @markdown && options == @options - @options = options - - # see https://github.com/vmg/redcarpet#darling-i-packed-you-a-couple-renderers-for-lunch - rend = Redcarpet::Render::GitlabHTML.new(self, options) - - # see https://github.com/vmg/redcarpet#and-its-like-really-simple-to-use - @markdown = Redcarpet::Markdown.new(rend, MARKDOWN_OPTIONS) - end + def markdown(text, context = {}) + context.merge!( + current_user: current_user, + project: @project, + project_wiki: @project_wiki, + ref: @ref, + requested_path: @path + ) - @markdown.render(text).html_safe + Gitlab::Markdown.render(text, context) end def asciidoc(text) -- cgit v1.2.1 From a4e4fde3e68a5c27e0424bdbe0dbd87d33a9e020 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 27 Aug 2015 14:28:45 -0700 Subject: Restore the forwarded HTML options in link_to_gfm --- app/helpers/gitlab_markdown_helper.rb | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'app') diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index b7fec9fc1d9..924e6cb1979 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -38,6 +38,11 @@ module GitlabMarkdownHelper end end + # Add any custom CSS classes to the GFM-generated reference links + if html_options[:class] + fragment.css('a.gfm').add_class(html_options[:class]) + end + fragment.to_html.html_safe end -- cgit v1.2.1 From 62117becb9212e3df296be2babc77cd5ac6194d2 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 27 Aug 2015 15:36:56 -0700 Subject: Add a temporary `gfm` helper that just delegates to `markdown` Some views are still calling `gfm` directly. We'll need to update them to instead call `markdown` with a `pipeline: ...` argument. --- app/helpers/gitlab_markdown_helper.rb | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'app') diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index 924e6cb1979..d7843a70c72 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -58,6 +58,12 @@ module GitlabMarkdownHelper Gitlab::Markdown.render(text, context) end + # TODO (rspeicher): Remove all usages of this helper and just call `markdown` + # with a custom pipeline depending on the content being rendered + def gfm(text, options = {}) + markdown(text, options) + end + def asciidoc(text) Gitlab::Asciidoc.render(text, { commit: @commit, -- cgit v1.2.1 From 7816b223603ee52cc7b0c40f1f1f36a4b752c477 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Mon, 31 Aug 2015 16:16:03 -0400 Subject: Fix context options in `markdown` helper We need to send `path`, not `requested_path`. --- app/helpers/gitlab_markdown_helper.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'app') diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index d7843a70c72..4ccdeff353d 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -48,11 +48,11 @@ module GitlabMarkdownHelper def markdown(text, context = {}) context.merge!( - current_user: current_user, - project: @project, - project_wiki: @project_wiki, - ref: @ref, - requested_path: @path + current_user: current_user, + path: @path, + project: @project, + project_wiki: @project_wiki, + ref: @ref, ) Gitlab::Markdown.render(text, context) -- cgit v1.2.1 From 90ab92621f81cfe5347a979c73aef692a23c43cc Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Mon, 31 Aug 2015 16:16:26 -0400 Subject: Make `gfm` delegate to `Gitlab::Markdown.gfm` instead of `markdown` Some usages of the `gfm` helper depend on the text not being rendered as standard Markdown. Ugh. --- app/helpers/gitlab_markdown_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app') diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index 4ccdeff353d..225caca1f42 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -61,7 +61,7 @@ module GitlabMarkdownHelper # TODO (rspeicher): Remove all usages of this helper and just call `markdown` # with a custom pipeline depending on the content being rendered def gfm(text, options = {}) - markdown(text, options) + Gitlab::Markdown.gfm(text, options) end def asciidoc(text) -- cgit v1.2.1 From 2930041886fb616bd98ba31627d0ce53e0f7603a Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Mon, 31 Aug 2015 18:09:18 -0400 Subject: Make sure the `gfm` helper passes the required options This adds some duplication, but this helper is temporary. --- app/helpers/gitlab_markdown_helper.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index 225caca1f42..b742419fbfe 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -52,7 +52,7 @@ module GitlabMarkdownHelper path: @path, project: @project, project_wiki: @project_wiki, - ref: @ref, + ref: @ref ) Gitlab::Markdown.render(text, context) @@ -61,6 +61,14 @@ module GitlabMarkdownHelper # TODO (rspeicher): Remove all usages of this helper and just call `markdown` # with a custom pipeline depending on the content being rendered def gfm(text, options = {}) + options.merge!( + current_user: current_user, + path: @path, + project: @project, + project_wiki: @project_wiki, + ref: @ref + ) + Gitlab::Markdown.gfm(text, options) end -- cgit v1.2.1 From 1bcfe4d2ff4d1eaf872c5ce1e3514f8cb539c42b Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Tue, 1 Sep 2015 13:37:05 -0400 Subject: Remove PreferencesHelper include from GitlabMarkdownHelper --- app/helpers/gitlab_markdown_helper.rb | 2 -- 1 file changed, 2 deletions(-) (limited to 'app') diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb index b742419fbfe..1ebfd92f119 100644 --- a/app/helpers/gitlab_markdown_helper.rb +++ b/app/helpers/gitlab_markdown_helper.rb @@ -1,8 +1,6 @@ require 'nokogiri' module GitlabMarkdownHelper - include PreferencesHelper - # Use this in places where you would normally use link_to(gfm(...), ...). # # It solves a problem occurring with nested links (i.e. -- cgit v1.2.1