aboutsummaryrefslogtreecommitdiff
path: root/app/helpers/application_helper.rb
blob: c3c9b127e785ba344c0d04b096a98bbd96b6a179 (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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# SPDX-FileCopyrightText: 2020 IN COMMON Collective <collective@incommon.cc>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

module ApplicationHelper
  # Set CSS classes on body tag
  def body_classes(*args)
    classes = args || []
    classes << controller_name
    classes << action_name
    ' class="'.html_safe << classes.join(' ') << '"'.html_safe
  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

  # Link to current application version
  def version_link
    version = begin
                IO.read('.app-version')&.strip
              rescue
                'HEAD'
              end

    link_to(version, INCOMMON.repo_url(version), title: 'Read source code')
  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