/
githubmirror
/
hugo
Обзор
Документация
Войти
/
githubmirror
/
hugo
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
docs/layouts/_shortcodes/code-toggle.html
119 строк
4 KB
Bjørn Erik Pedersen
Merge commit 'c23d97904fd31ef745bece57133aa1b9275ec20c'
21 май 2026, 13:22
21 май 2026, 13:22
5f01b06
Код
Авторство
О чём код?
{{/* Renders syntax-highlighted configuration data in JSON, TOML, and YAML formats. @param {string} [config] The section of hugo.Data.docs.config to render. @param {bool} [copy=false] Whether to display a copy-to-clipboard button. @param {string} [dataKey] The section of hugo.Data.docs to render. @param {string} [file] The file name to display above the rendered code. @param {bool} [fm=false] Whether to render the code as front matter. @param {bool} [skipHeader=false] Whether to omit top level key(s) when rendering a section of hugo.Data.docs.config. @example {{< code-toggle file=hugo config=build />}} @example {{< code-toggle file=content/example.md fm="true" }} title='Example' draft='false {{< /code-toggle }} */}} {{- /* Initialize. */}} {{- $config := "" }} {{- $copy := false }} {{- $dataKey := "" }} {{- $file := "" }} {{- $fm := false }} {{- $skipHeader := false }} {{- /* Get parameters. */}} {{- $config = .Get "config" }} {{- $dataKey = .Get "dataKey" }} {{- $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 := "" }} {{- if $config }} {{- $file = $file | default "hugo" }} {{- $sections := (split $config ".") }} {{- $configSection := index hugo.Data.docs.config $sections }} {{- $code = dict $sections $configSection }} {{- if $skipHeader }} {{- $code = $configSection }} {{- end }} {{- else if $dataKey }} {{- $file = $file | default $dataKey }} {{- $sections := (split $dataKey ".") }} {{- $code = index hugo.Data.docs $sections }} {{- else }} {{- $code = $.Inner }} {{- end }} <div x-data class="shortcode-code not-prose relative p-0 mt-6 mb-8"> {{- if $copy }} <svg class="absolute right-4 top-12 z-30 text-blue-600 hover:text-blue-500 cursor-pointer w-6 h-6" @click="$copy($refs[$store.nav.userSettings.settings.configFileType])"> <use href="#icon--copy"></use> </svg> {{- end }} <nav class="relative flex" aria-label="Tabs"> {{- with $file }} <div class="select-none flex-none text-sm px-2 content-center border-b border-gray-300 dark:border-gray-700" aria-label="Filename"> {{ . }}{{ if not $fm }}.{{ end }} </div> {{- end }} {{- range $i, $lang := $langs }} {{- $isLast := eq (add $i 1) (len $langs) }} <button x-on:click="$store.nav.userSettings.settings.configFileType = '{{ index $langs $i }}'" aria-label="{{ printf `Toggle %s` . }}" class="px-3 py-2 font-semibold text-black dark:text-slate-200 border-l border-t {{ if $isLast }} border-r {{ end }} border-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 dark:border-gray-700 cursor-pointer relative min-w-0 flex-1 overflow-hidden text-sm no-underline text-center focus:z-10 overflow-x-auto" :class="$store.nav.userSettings.settings.configFileType === '{{ index $langs $i }}' ? 'border-b-0 bg-light dark:bg-dark' : 'border-b'"> <span class="select-none"> {{ . }} </span> </button> {{- end }} </nav> {{- if $code }} {{- range $i, $lang := $langs }} <div class="max-h-96 overflow-y-auto border-l border-b border-r border-gray-300 dark:border-gray-700" x-ref="{{ $lang }}" x-cloak x-transition:enter.opacity.duration.300ms x-show="$store.nav.userSettings.settings.configFileType === '{{ index $langs $i }}'"> {{- $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> {{- end }} {{- end }} </div>