Use this in places where you would normally use link_to(gfm(…), …).
It solves a problem occurring with nested links (i.e. “<a>outer text <a>gfm ref</a> more outer text</a>”). This will not be interpreted as intended. Browsers will parse something like “<a>outer text </a><a>gfm ref</a> more outer text” (notice the last part is not linked any more). #link_to_gfm corrects that. It wraps all parts to explicitly produce the correct linking behavior (i.e. “<a>outer text </a><a>gfm ref</a><a> more outer text</a>”).
# File app/helpers/gitlab_markdown_helper.rb, line 13 def link_to_gfm(body, url, html_options = {}) return "" if body.blank? gfm_body = gfm(escape_once(body), html_options) gfm_body.gsub!(%r{<a.*?>.*?</a>}) do |match| "</a>#{match}#{link_to("", url, html_options)[0..-5]}" # "</a>".length +1 end link_to(gfm_body.html_safe, url, html_options) end
# File app/helpers/gitlab_markdown_helper.rb, line 25 def markdown(text) unless @markdown gitlab_renderer = Redcarpet::Render::GitlabHTML.new(self, # see https://github.com/vmg/redcarpet#darling-i-packed-you-a-couple-renderers-for-lunch- filter_html: true, with_toc_data: true, hard_wrap: true) @markdown = Redcarpet::Markdown.new(gitlab_renderer, # see https://github.com/vmg/redcarpet#and-its-like-really-simple-to-use no_intra_emphasis: true, tables: true, fenced_code_blocks: true, autolink: true, strikethrough: true, lax_html_blocks: true, space_after_headers: true, superscript: true) end @markdown.render(text).html_safe end