aboutsummaryrefslogtreecommitdiffhomepage
path: root/docs/layouts/shortcodes/code-toggle.html
blob: 3b151669fdfef28dc9419c358b48e666017dee31 (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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
{{- /*
Renders syntax-highlighted configuration data in JSON, TOML, and YAML formats.

@param {string} [config] The section of site.Data.docs.config to render.
@param {bool} [copy=true] If true, display a copy to clipboard button.
@param {string} [file] The file name to display above the rendered code.
@param {bool} [fm=false] If true, render the code as front matter.
@param {bool} [skipHeader=false] If false, omit top level key(s) when rendering a section of site.Data.docs.config.

@returns {template.HTML}
*/}}

{{- /* Initialize. */}}
{{- $config := "" }}
{{- $copy := true }}
{{- $file := "" }}
{{- $fm := false }}
{{- $skipHeader := false }}

{{- /* Get parameters. */}}
{{- $config = .Get "config" }}
{{- $file = .Get "file" }}
{{- if in (slice "false" false 0) (.Get "copy") }}
  {{- $copy = false }}
{{- else if in (slice "true" true 1) (.Get "copy")}}
  {{- $copy = true }}
{{- end }}
{{- if in (slice "false" false 0) (.Get "fm") }}
  {{- $fm = false }}
{{- else if in (slice "true" true 1) (.Get "fm")}}
  {{- $fm = true }}
{{- end }}
{{- if in (slice "false" false 0) (.Get "skipHeader") }}
  {{- $skipHeader = false }}
{{- else if in (slice "true" true 1) (.Get "skipHeader")}}
  {{- $skipHeader = true }}
{{- end }}

{{- /* Define constants. */}}
{{- $delimiters := dict "toml" "+++" "yaml" "---" }}
{{- $langs := slice "yaml" "toml" "json" }}
{{- $placeHolder := "#-hugo-placeholder-#" }}

{{- /* Render. */}}
{{- $code := "" }}
{{- with $config }}
  {{- $file = $file | default "hugo" }}
  {{- $sections := (split . ".") }}
  {{- $configSection := index $.Site.Data.docs.config $sections }}
  {{- $code = dict $sections $configSection }}
  {{- if $skipHeader }}
    {{- $code = $configSection }}
  {{- end }}
{{- else }}
  {{- $code = $.Inner }}
{{- end }}
<div class="code relative" {{ with $file }}id="{{ . | urlize }}"{{ end }}>
  <div class="code-nav flex flex-nowrap items-stretch">
    {{- with $file }}
      <div class="san-serif f6 dib lh-solid pl2 pv2 mr2">
        {{ . }}{{ if not $fm }}.{{ end }}
      </div>
    {{- end }}
    {{- range $langs }}
      <button data-toggle-tab="{{ . }}" class="tab-button {{ cond (eq . "yaml") "active" "" }} ba san-serif f6 dib lh-solid ph2 pv2">
        {{ . }}
      </button>
      &nbsp;
    {{- end }}
  </div>
  <div class="tab-content">
    {{- range $langs }}
      <div data-pane="{{ . }}" class="code-copy-content nt3 tab-pane {{ cond (eq . "yaml") "active" "" }}">
        {{- $hCode := $code | transform.Remarshal . }}
        {{- if and $fm (in (slice "toml" "yaml") .) }}
          {{- $hCode = printf "%s\n%s\n%s" $placeHolder $hCode $placeHolder }}
        {{- end }}
        {{- $hCode = $hCode | replaceRE `\n+` "\n" }}
        {{ highlight $hCode . "" | replaceRE $placeHolder (index $delimiters .) | safeHTML }}
      </div>
      {{- if $copy }}
        <button class="needs-js copy copy-toggle bg-accent-color-dark f6 absolute top-0 right-0 lh-solid hover-bg-primary-color-dark bn white ph3 pv2" title="Copy this code to your clipboard." data-clipboard-action="copy" aria-label="copy button"></button>
        {{- /* Functionality located within filesaver.js The copy here is located in the css with .copy class so it can be replaced with JS on success */}}
      {{- end }}
    {{- end }}
  </div>
</div>