summaryrefslogtreecommitdiff
path: root/lib/gitlab/kroki.rb
blob: 8c5652fb766e3bbd5219eb029d7c3af1141af0a4 (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
# frozen_string_literal: true

require 'asciidoctor/extensions/asciidoctor_kroki/extension'

module Gitlab
  # Helper methods for Kroki
  module Kroki
    BLOCKDIAG_FORMATS = %w[
        blockdiag
        seqdiag
        actdiag
        nwdiag
        packetdiag
        rackdiag
      ].freeze
    # Diagrams that require a companion container are disabled for now
    DIAGRAMS_FORMATS = ::AsciidoctorExtensions::Kroki::SUPPORTED_DIAGRAM_NAMES
                           .reject { |diagram_type| diagram_type == 'mermaid' || diagram_type == 'bpmn' || BLOCKDIAG_FORMATS.include?(diagram_type) }
    DIAGRAMS_FORMATS_WO_PLANTUML = DIAGRAMS_FORMATS
                                        .reject { |diagram_type| diagram_type == 'plantuml' }

    # Get the list of diagram formats that are currently enabled
    #
    # Returns an Array of diagram formats.
    # If Kroki is not enabled, returns an empty Array.
    def self.formats(current_settings)
      return [] unless current_settings.kroki_enabled

      # If PlantUML is enabled, PlantUML diagrams will be processed by the PlantUML server.
      # In other words, the PlantUML server has precedence over Kroki since both can process PlantUML diagrams.
      if current_settings.plantuml_enabled
        DIAGRAMS_FORMATS_WO_PLANTUML
      else
        DIAGRAMS_FORMATS
      end
    end
  end
end