Class: JekyllMermaidPrebuild::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll-mermaid-prebuild/generator.rb

Overview

SVG generation and caching

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ Generator

Initialize generator with configuration

Parameters:



13
14
15
# File 'lib/jekyll-mermaid-prebuild/generator.rb', line 13

def initialize(config)
  @config = config
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



8
9
10
# File 'lib/jekyll-mermaid-prebuild/generator.rb', line 8

def config
  @config
end

Instance Method Details

#build_figure_html(svg_url, dark_url: nil) ⇒ String

Build figure HTML for a diagram

Parameters:

  • svg_url (String)

    URL to the light (or only) SVG file

  • dark_url (String, nil) (defaults to: nil)

    when set (auto mode), second link + CSS toggle for prefers-color-scheme

Returns:

  • (String)

    HTML figure element



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/jekyll-mermaid-prebuild/generator.rb', line 46

def build_figure_html(svg_url, dark_url: nil)
  if dark_url
    return <<~HTML
      <figure class="mermaid-diagram">
      <style>
      .mermaid-diagram__light { display: inline; }
      .mermaid-diagram__dark { display: none; }
      @media (prefers-color-scheme: dark) {
        .mermaid-diagram__light { display: none; }
        .mermaid-diagram__dark { display: inline; }
      }
      </style>
      <a class="mermaid-diagram__light" href="#{svg_url}"><img src="#{svg_url}" alt="Mermaid Diagram"></a>
      <a class="mermaid-diagram__dark" href="#{dark_url}"><img src="#{dark_url}" alt="Mermaid Diagram"></a>
      </figure>
    HTML
  end

  <<~HTML
    <figure class="mermaid-diagram">
    <a href="#{svg_url}"><img src="#{svg_url}" alt="Mermaid Diagram"></a>
    </figure>
  HTML
end

#build_svg_url(cache_key) ⇒ String

Build SVG URL from cache key (stem, e.g. digest or digest-dark)

Parameters:

  • cache_key (String)

    the cache stem

Returns:

  • (String)

    URL path to SVG



37
38
39
# File 'lib/jekyll-mermaid-prebuild/generator.rb', line 37

def build_svg_url(cache_key)
  "/#{@config.output_dir}/#{cache_key}.svg"
end

#generate(mermaid_source, cache_key) ⇒ Hash{String => String}?

Generate SVG from mermaid source (with caching)

Parameters:

  • mermaid_source (String)

    mermaid diagram definition

  • cache_key (String)

    digest for caching

Returns:

  • (Hash{String => String}, nil)

    stem (cache filename without .svg) => absolute cache path, or nil on failure



22
23
24
25
26
27
28
29
30
31
# File 'lib/jekyll-mermaid-prebuild/generator.rb', line 22

def generate(mermaid_source, cache_key)
  case @config.prefers_color_scheme
  when :light
    generate_one(mermaid_source, cache_key, theme: :default)
  when :dark
    generate_one(mermaid_source, cache_key, theme: :dark)
  when :auto
    generate_auto(mermaid_source, cache_key)
  end
end