mirror of
https://github.com/gethinode/hinode.git
synced 2025-10-13 21:13:21 +00:00
110 lines
4.8 KiB
HTML
110 lines
4.8 KiB
HTML
<!--
|
|
Source: https://github.com/twbs/bootstrap/blob/main/site/layouts/shortcodes/scss-docs.html
|
|
|
|
Capture a code snippet from a `toml` or `scss` input file. The shortcode scans for named markers in a local file:
|
|
- For `.toml` files, use `# toml-docs-start` and `# toml-docs-end` followed by the snippet name
|
|
- For `.scss` files, use `// scss-docs-start` and `// scss-docs-end` followed by the snippet name
|
|
|
|
The snippet between the two markers is then rendered using syntax highlighting. The shortcode supports the
|
|
following named arguments:
|
|
|
|
"name" Name of the code snippet, used to identify the relevant section of the input file.
|
|
"file" Path of the input file. The path is relative to the `basePath` defined in the `docs` section of the
|
|
site's parameters. If the file starts with `./`, the path of the repository is used as base path instead.
|
|
"show" If unset, shows the panel with the code snippet in collapsed state. By default, the panel is
|
|
expanded.
|
|
"full" If unset, shows the filename only. By default, the full relative path is shown.
|
|
"id" Optional id of the collapse panel, defaults to "docs-collapse-n" with a sequential number n
|
|
starting at 1.
|
|
"class" Optional class argument of the tab control.
|
|
-->
|
|
|
|
{{- $name := .Get "name" | default "" -}}
|
|
{{- $basePath := .Site.Params.docs.basePath -}}
|
|
{{- $file := .Get "file" | default "" -}}
|
|
{{- if hasPrefix $file "./" -}}
|
|
{{- $file = path.Clean $file -}}
|
|
{{- else -}}
|
|
{{- $file = path.Join $basePath (path.Clean $file) -}}
|
|
{{- end -}}
|
|
{{- $extension := strings.TrimLeft "." (path.Ext $file) }}
|
|
{{- $capture_start := "" -}}
|
|
{{- $capture_end := "" -}}
|
|
|
|
{{- $id := printf "docs-collapse-%d" .Ordinal -}}
|
|
{{ with .Get "id" }}
|
|
{{ $id = . }}
|
|
{{ end }}
|
|
|
|
{{- $supportedExtensions := slice "js" "scss" "toml" -}}
|
|
{{- if in $supportedExtensions $extension -}}
|
|
{{- if eq $extension "toml" }}
|
|
{{- $capture_start = printf "# toml-docs-start %s" $name -}}
|
|
{{- $capture_end = printf "# toml-docs-end %s" $name -}}
|
|
{{- else -}}
|
|
{{- $capture_start = printf "// %s-docs-start %s" $extension $name -}}
|
|
{{- $capture_end = printf "// %s-docs-end %s" $extension $name -}}
|
|
{{- end -}}
|
|
{{- else -}}
|
|
{{- errorf "File format not supported (line %s): %s" .Position $file -}}
|
|
{{- end -}}
|
|
|
|
{{ $supportedFlags := slice "true" "false" -}}
|
|
{{ $showParam := "true" -}}
|
|
{{ $show := true -}}
|
|
{{ with .Get "show" }}{{ $showParam = . }}{{ end -}}
|
|
{{ if in $supportedFlags $showParam -}}
|
|
{{ if eq $showParam "true" }}{{ $show = true }}{{ else }}{{ $show = false }}{{ end -}}
|
|
{{ else -}}
|
|
{{ errorf "Invalid value for param 'show': %s" $showParam -}}
|
|
{{ end -}}
|
|
|
|
{{ $fullParam := "true" -}}
|
|
{{ $full := true -}}
|
|
{{ with .Get "full" }}{{ $fullParam = . }}{{ end -}}
|
|
{{ if in $supportedFlags $fullParam -}}
|
|
{{ if eq $fullParam "true" }}{{ $full = true }}{{ else }}{{ $full = false }}{{ end -}}
|
|
{{ else -}}
|
|
{{ errorf "Invalid value for param 'full': %s" $fullParam -}}
|
|
{{ end -}}
|
|
|
|
{{- $class := .Get "class" | default "" -}}
|
|
|
|
{{- /* If any parameters are missing, print an error and exit */ -}}
|
|
{{- if or (not $name) (not $file) -}}
|
|
{{- errorf "%s: %q: Missing required parameters! Got: name=%q file=%q!" .Position .Name $name $file -}}
|
|
{{- else -}}
|
|
{{- /* Force-check if the file exists */ -}}
|
|
{{ $tmp := os.Stat $file }}
|
|
|
|
{{- $regex := printf `%s((?:.|\n)*)%s` $capture_start $capture_end -}}
|
|
{{- $match := findRE $regex (readFile $file) -}}
|
|
{{- $match = index $match 0 -}}
|
|
|
|
{{- if not $match -}}
|
|
{{- errorf "%s: %q: Got no matches for name=%q in file=%q!" .Position .Name $name $file -}}
|
|
{{- end -}}
|
|
|
|
{{- $match = replace $match $capture_start "" -}}
|
|
{{- $match = replace $match $capture_end "" -}}
|
|
|
|
<ul class="nav nav-tabs{{ with $class }} {{ . }}{{ end }}">
|
|
<li class="nav-item">
|
|
<a class="nav-link active font-monospace"
|
|
href="#body-{{ $id }}"
|
|
aria-current="page"
|
|
data-bs-toggle="collapse"
|
|
data-bs-target=".multi-{{ $id }}"
|
|
aria-expanded="false"
|
|
aria-controls="body-{{ $id }} footer-{{ $id }}">
|
|
<small>{{ if $full }}{{ strings.TrimPrefix "/" (strings.TrimPrefix $basePath $file) }}{{ else }}{{ path.Base $file }}{{ end }}</small>
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
<div class="border-start border-end border-bottom mb-3">
|
|
<div class="collapse multi-{{ $id }}{{ if $show }} show{{ end }} syntax-highlight" id="body-{{ $id }}">
|
|
{{- highlight (trim $match "\r\n") $extension "" -}}
|
|
</div>
|
|
<div class="collapse multi-{{ $id }}{{ if not $show }} show{{ end }} p-3" id="footer-{{ $id }}"><i>...</i></div>
|
|
</div>
|
|
{{- end -}} |