Files
HugoBlox-kit/layouts/partials/book_menu.html
T
George Cushen 0b9cbc4150 feat: add Book layout
Similar to the Docs layout but much easier to use.

Add `type: book` to a page's front matter and place Markdown files within a folder hierarchy to automatically create the book sidebar navigation.

Introduces {{< list_children >}} shortcode for listing children of a book chapter.
2020-07-25 01:47:37 +01:00

84 lines
3.0 KiB
HTML

{{ define "book-menu" }}
{{- $first := false -}}
{{- $current_node := .current_node -}}
{{- $order_by := .order_by -}}
{{ $icon := "" }}
{{ with .sect }}
{{ if .IsSection}}
{{- $first = eq $current_node.FirstSection . -}}
{{- safeHTML $current_node.FirstSection.Params.pre_nav -}}
{{/* Get section icon. */}}
{{ $pack := or .Params.icon_pack "fas" }}
{{ $pack_prefix := $pack }}
{{ if in (slice "fab" "fas" "far" "fal") $pack }}
{{ $pack_prefix = "fa" }}
{{ end }}
{{ with .Params.icon }}
{{- if eq $pack "emoji" -}}
{{- . | emojify -}}
{{- else if eq $pack "custom" -}}
{{- $svg_icon := resources.Get (printf "images/icon-pack/%s.svg" .) -}}
{{- if $svg_icon -}}
{{ $icon = printf "<img src=\"%s\" alt=\"%s\" class=\"svg-icon svg-baseline pr-1\">" $svg_icon.RelPermalink . }}
{{- end -}}
{{- else -}}
{{ $icon = printf "<i class=\"%s %s-%s pr-1\"></i>" $pack $pack_prefix . }}
{{- end -}}
{{ end }}
{{ if $first }}
<ul class="nav docs-sidenav">
<li class="{{ if and .File $current_node.File | and (eq .File.UniqueID $current_node.File.UniqueID) }}active{{ end }}"><a href="{{ .RelPermalink }}">{{ safeHTML $icon }}{{ .LinkTitle | default .Title }}</a></li>
{{else}}
<div class="docs-toc-item">
<a class="docs-toc-link {{ if and .File $current_node.File | and (eq .File.UniqueID $current_node.File.UniqueID) }} active{{ end }}" href="{{ .RelPermalink }}">{{ safeHTML $icon }}{{ .LinkTitle | default .Title }}</a>
{{end}}
{{- $page_count := (add (len .Pages) (len .Sections)) -}}
{{ if ne $page_count 0 }}
{{ if not $first }}
<ul class="nav docs-sidenav">
{{end}}
{{- .Scratch.Set "pages" .Pages -}}
{{- if .Sections -}}
{{- .Scratch.Set "pages" (.Pages | union .Sections) -}}
{{- end -}}
{{- $pages := (.Scratch.Get "pages") -}}
{{- if eq $order_by "title" -}}
{{- range $pages.ByTitle -}}
{{ template "book-menu" dict "sect" . "current_node" $current_node "order_by" $order_by }}
{{- end -}}
{{- else if eq $order_by "title_desc" -}}
{{- range $pages.ByTitle.Reverse -}}
{{ template "book-menu" dict "sect" . "current_node" $current_node "order_by" $order_by }}
{{- end -}}
{{- else -}}
{{- range $pages.ByWeight -}}
{{ template "book-menu" dict "sect" . "current_node" $current_node "order_by" $order_by }}
{{- end -}}
{{- end}}
{{ if not $first }}
</ul>
{{end}}
{{end}}
{{ if not $first }}
</div>
{{else}}
</ul>
{{end}}
{{- else -}}
{{- if not .Params.Hidden -}}
<li class="{{ if and .File $current_node.File | and (eq .File.UniqueID $current_node.File.UniqueID) }}active{{ end }}"><a href="{{ .RelPermalink }}">{{ safeHTML $icon }}{{ .LinkTitle | default .Title }}</a></li>
{{- end -}}
{{ end -}}
{{- end -}}
{{/* End define. */}}
{{ end -}}