# module GitlabMarkdownHelper

### Public Instance Methods

link_to_gfm(body, url, html_options = {}) click to toggle source

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

markdown(text) click to toggle source

    # 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