summaryrefslogtreecommitdiffstats
path: root/docs/layouts/shortcodes
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2021-12-13 21:05:10 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2021-12-13 21:05:10 +0100
commit6183184b966dafda6e4863dc30de450a8bb1bacd (patch)
treed4038593adb6557e56de6921c757773058e959bf /docs/layouts/shortcodes
parenta037be774d567c6a29cc7f10c94c9f746ca6d2aa (diff)
parent45e6fdb315d113ba13e20a633ed0c67e3f25170d (diff)
Diffstat (limited to 'docs/layouts/shortcodes')
-rw-r--r--docs/layouts/shortcodes/code-toggle.html123
1 files changed, 95 insertions, 28 deletions
diff --git a/docs/layouts/shortcodes/code-toggle.html b/docs/layouts/shortcodes/code-toggle.html
index 6d4246052..113d85a1f 100644
--- a/docs/layouts/shortcodes/code-toggle.html
+++ b/docs/layouts/shortcodes/code-toggle.html
@@ -1,41 +1,108 @@
-{{ $file := .Get "file" }}
-{{ $code := "" }}
-{{ with .Get "config" }}
- {{ $file = $file | default "config" }}
- {{ $sections := (split . ".") }}
- {{ $configSection := index $.Site.Data.docs.config $sections }}
- {{ $code = dict $sections $configSection }}
- {{ if $.Get "skipHeader"}}
- {{ $code = $configSection }}
- {{ end }}
-{{ else }}
- {{ $code = $.Inner }}
-{{ end }}
-{{ $langs := (slice "yaml" "toml" "json") }}
-<div class="code relative" {{ with $file }}id="{{ . | urlize}}"{{ end }}>
+{{- /*
+Renders syntax-highlighted configuration data in JSON, TOML, and YAML formats.
+
+@param {string} config
+ Section of site.Data.docs.config to render.
+ Example: markup.highlight
+ Default: ""
+@param {bool} copy
+ Display a copy button.
+ Default: true
+@param {string} file
+ File name to display above the rendered code.
+ Default: ""
+@param {bool} fm
+ Does Inner represent front matter?
+ Default: false
+@param {string} Inner
+ Content between opening and closing shortcode tags.
+ Default: ""
+@param {bool} skipHeader
+ Omit top level key(s) when rendering a section of site.Data.docs.config.
+ Default: false
+@returns {template.HTML}
+*/ -}}
+
+{{- /* Initialize. */ -}}
+{{- $config := "" -}}
+{{- $copy := true -}}
+{{- $file := "" -}}
+{{- $fm := false -}}
+{{- $skipHeader := false -}}
+
+{{- /* Get parameters, defend against string booleans. */ -}}
+{{- if .Params -}}
+ {{- $config = .Get "config" -}}
+ {{- $file = .Get "file" -}}
+ {{- if (isset .Params "copy") -}}
+ {{- if in (slice true "true") (.Get "copy") -}}
+ {{- $copy = true -}}
+ {{- else -}}
+ {{- $copy = false -}}
+ {{- end -}}
+ {{- end -}}
+ {{- if (isset .Params "fm") -}}
+ {{- if in (slice true "true") (.Get "fm") -}}
+ {{- $fm = true -}}
+ {{- else -}}
+ {{- $fm = false -}}
+ {{- end -}}
+ {{- end -}}
+ {{- if (isset .Params "skipHeader") -}}
+ {{- if in (slice true "true") (.Get "skipHeader") -}}
+ {{- $skipHeader = true -}}
+ {{- else -}}
+ {{- $skipHeader = false -}}
+ {{- end -}}
+ {{- end -}}
+{{- end -}}
+
+{{- /* Define constants. */ -}}
+{{- $delimiters := dict "toml" "+++" "yaml" "---" -}}
+{{- $langs := slice "yaml" "toml" "json" -}}
+{{- $placeHolder := "#-hugo-placeholder-#" -}}
+
+{{- /* Render. */ -}}
+{{- $code := "" -}}
+{{- with $config -}}
+ {{- $file = $file | default "config" -}}
+ {{- $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 -}}
+ {{- 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">
+ {{- 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 }}
+ {{- end }}
</div>
<div class="tab-content">
- {{ range $langs }}
- <div data-pane="{{ . }}" class="code-copy-content nt3 tab-pane {{ cond (eq . "yaml") "active" ""}}">
- {{ highlight ($code | transform.Remarshal . | replaceRE `\n+` "\n" | safeHTML) . "" }}
+ {{- 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 ne ($.Get "copy") "false" }}
+ {{- 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 }}
+ {{- /* 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>