site/layouts/shortcodes/blocks/tabs.html (50 lines of code) (raw):

{{- .Page.Scratch.Add "tabset-counter" 1 -}} {{- $tab_set_id := .Get "name" | default (printf "tabset-%s-%d" (.Page.RelPermalink) (.Page.Scratch.Get "tabset-counter") ) | anchorize -}} {{- $tabs := .Scratch.Get "tabs" -}} {{- if .Inner -}}{{- /* We don't use the inner content, but Hugo will complain if we don't reference it. */ -}}{{- end -}} <ul class="nav nav-tabs" id="{{ $tab_set_id }}" role="tablist"> {{- range $i, $e := $tabs -}} {{- $id := printf "%s-%d" $tab_set_id $i -}} {{- if (eq $i 0) -}} <li class="nav-item"><a data-toggle="tab" class="nav-link active" href="#{{ $id }}" role="tab" aria-controls="{{ $id }}" aria-selected="true">{{- trim .name " " -}}</a></li> {{ else }} <li class="nav-item"><a data-toggle="tab" class="nav-link" href="#{{ $id }}" role="tab" aria-controls="{{ $id }}">{{- trim .name " " -}}</a></li> {{- end -}} {{- end -}} </ul> <div class="tab-content" id="{{ $tab_set_id }}"> {{- range $i, $e := $tabs -}} {{- $id := printf "%s-%d" $tab_set_id $i -}} {{- if (eq $i 0) -}} <div id="{{ $id }}" class="tab-pane show active" role="tabpanel" aria-labelledby="{{ $id }}"> {{ else }} <div id="{{ $id }}" class="tab-pane" role="tabpanel" aria-labelledby="{{ $id }}"> {{ end }} <p> {{- with .content -}} {{- . -}} {{- else -}} {{- if eq $.Page.BundleType "leaf" -}} {{- /* find the file somewhere inside the bundle. Note the use of double asterisk */ -}} {{- with $.Page.Resources.GetMatch (printf "**%s*" .include) -}} {{- if ne .ResourceType "page" -}} {{- /* Assume it is a file that needs code highlighting. */ -}} {{- $codelang := $e.codelang | default ( path.Ext .Name | strings.TrimPrefix ".") -}} {{- highlight .Content $codelang "" -}} {{- else -}} {{- .Content -}} {{- end -}} {{- end -}} {{- else -}} {{- $path := path.Join $.Page.File.Dir .include -}} {{- $page := site.GetPage "page" $path -}} {{- with $page -}} {{- .Content -}} {{- else -}} {{- errorf "[%s] tabs include not found for path %q" site.Language.Lang $path -}} {{- end -}} {{- end -}} {{- end -}} </div> {{- end -}} </div>