aboutsummaryrefslogtreecommitdiff
path: root/app/helpers/application_helper.rb
blob: 2b6e109aabfdb8c5fc9ac452315fa71708a504e2 (plain)
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
module ApplicationHelper
  def current_agency
    current_user.agencies.where(agent: current_agent).first
  end
  %w(observer editor maintainer leader).each do |role|
    define_method :"current_user_#{role}?" do
      current_agency.send(:"#{role}?")
    end
  end

  # Markdown helper
  # Always use all extensions. Additional parser and render options may be
  # passed as a second argument.
  #
  # @param markdown (String) a string to parse as Markdown source
  # @param options (String or Array) an optional parser/renderer option
  # @return String HTML-formatted from Mardkown source
  def m(markdown, options = nil)
    tag.div(
      CommonMarker.render_doc(
        markdown.to_s,
        options.to_a + default_commonmarker_options,
        default_commonmarker_extensions
      ).to_html.html_safe, class: 'markdown')
  end

  private

  # CommonMarker extensions
  # See https://github.com/gjtorikian/commonmarker#extensions
  def default_commonmarker_extensions
    [
      :table,
      :tasklist,
      :strikethrough,
      :autolink,
      :tagfilter
    ]
  end

  # CommonMarker options
  # See https://github.com/gjtorikian/commonmarker#options
  def default_commonmarker_options
    [
      #:HARDBREAKS, # only seems to work with render_html, but then all others
                    # only work with render_doc
      :FOOTNOTES,
      :SMART,
      :STRIKETHROUGH_DOUBLE_TILDE,
      :VALIDATE_UTF8
    ]
  end
end