{{- $showvisitedlinks := .Site.Params.showVisitedLinks }} <aside id="R-sidebar" class="default-animation{{ if $showvisitedlinks }} showVisitedLinks{{ end }}"> {{- $currentNode := . }} <div id="R-header-topbar" class="default-animation"></div> <div id="R-header-wrapper" class="default-animation"> <div id="R-header" class="default-animation"> {{ partial "logo.html" . }} </div>{{ partial "search.html" . }} </div> <div id="R-homelinks" class="default-animation{{ if not .Site.Params.disableLandingPageButton }} homelinks{{ end }}"> {{- if not .Site.Params.disableLandingPageButton }} {{- if (ne .Site.Params.landingPageURL nil) }} {{- warnf "UNSUPPORTED usage of 'landingPageURL' config parameter found, remove it and optionally overwrite the `logo.html` partial to provide a link if it should not point to the project's home page; see https://mcshelby.github.io/hugo-theme-relearn/introduction/releasenotes/4/#4-2-0" }} {{- end }} <ul> <li><a class="padding" href="{{ partial "permalink.gotmpl" (dict "to" .Site.Home) }}">{{ .Site.Params.landingPageName | default `<i class="fa-fw fas fa-home"></i> Home` | safeHTML }}</a></li> </ul> {{- end }} <hr class="padding"> </div> <div id="R-content-wrapper" class="highlightable"> {{- $menuconfigs := .Params.sidebarmenus | default site.Params.sidebarmenus | default (slice (dict "type" "page" "identifier" "home") (dict "type" "menu" "identifier" "shortcuts") ) }} {{- range $menuconfigs }} {{- $config := . }} {{- if eq $config.type "page" }} {{- partial "partials/inline/page-tree" (dict "currentnode" $currentNode "config" $config "showvisitedlinks" $showvisitedlinks) }} {{- else if eq $config.type "menu" }} {{- partial "partials/inline/menu-tree" (dict "currentnode" $currentNode "config" $config "showvisitedlinks" $showvisitedlinks) }} {{- else }} {{- warnf "WARNING: unknown menu type '%s' found in parameter 'sidebarmenus' for menu '%s'; use either 'page' or 'menu'" $config.type $config.identifier }} {{- end }} {{- end }} {{- $siteLanguages := .Site.Languages }} {{- $showlangswitch := and hugo.IsMultilingual (not .Site.Params.disableLanguageSwitchingButton) (gt (int (len $siteLanguages)) 1) }} {{- $themevariants := partialCached "_relearn/themeVariants.gotmpl" . }} {{- $showvariantswitch := gt (int (len $themevariants)) 1 }} {{- $footer := partial "menu-footer.html" . }} {{- $showfooter := not (eq 0 (int (len ($footer | plainify)))) }} <div class="padding footermargin footerLangSwitch footerVariantSwitch footerVisitedLinks footerFooter{{if $showlangswitch}} showLangSwitch{{end}}{{if $showvariantswitch}} showVariantSwitch{{end}}{{if $showvisitedlinks}} showVisitedLinks{{end}}{{if $showfooter}} showFooter{{end}}"></div> <div id="R-menu-footer"> <hr class="padding default-animation footerLangSwitch footerVariantSwitch footerVisitedLinks footerFooter{{if $showlangswitch}} showLangSwitch{{end}}{{if $showvariantswitch}} showVariantSwitch{{end}}{{if $showvisitedlinks}} showVisitedLinks{{end}}{{if $showfooter}} showFooter{{end}}"> <div id="R-prefooter" class="footerLangSwitch footerVariantSwitch footerVisitedLinks{{if $showlangswitch}} showLangSwitch{{end}}{{if $showvariantswitch}} showVariantSwitch{{end}}{{if $showvisitedlinks}} showVisitedLinks{{end}}"> <ul> <li id="R-select-language-container" class="footerLangSwitch{{if $showlangswitch}} showLangSwitch{{end}}"> <div class="padding menu-control"> <i class="fa-fw fas fa-language"></i> <span> </span> <div class="control-style"> <label class="a11y-only" for="R-select-language">{{ T "Language" }}</label> <select id="R-select-language" onchange="location = this.querySelector( this.value ).dataset.url;"> {{- $page := .Page }} {{- $pageLang := .Page.Language.Lang }} {{- range .Page.AllTranslations }} <option id="R-select-language-{{ .Language.Lang }}" value="#R-select-language-{{ .Language.Lang }}" data-url="{{ partial "permalink.gotmpl" (dict "to" .) }}" lang="{{ .Language.LanguageCode }}"{{ if eq $pageLang .Language.Lang }} selected{{ end }}>{{ .Language.LanguageName }}</option> {{- end }} </select> </div> <div class="clear"></div> </div> </li> <li id="R-select-variant-container" class="footerVariantSwitch{{if $showvariantswitch}} showVariantSwitch{{end}}"> <div class="padding menu-control"> <i class="fa-fw fas fa-paint-brush"></i> <span> </span> <div class="control-style"> <label class="a11y-only" for="R-select-variant">{{ T "Theme" }}</label> <select id="R-select-variant" onchange="window.variants && variants.changeVariant( this.value );"> {{- $firstvariant := true }} {{- range $themevariants }} {{- $themevariant := . }} <option id="R-select-variant-{{ $themevariant.identifier }}" value="{{ $themevariant.identifier }}"{{- if $firstvariant }} selected{{ end }}>{{ $themevariant.name }}</option> {{- $firstvariant = false }} {{- end }} </select> </div> <div class="clear"></div> </div> <script>window.variants && variants.markSelectedVariant();</script> </li> <li class="footerVisitedLinks{{if $showvisitedlinks}} showVisitedLinks{{end}}"> <div class="padding menu-control"> <i class="fa-fw fas fa-history"></i> <span> </span> <div class="control-style"> <button onclick="clearHistory();">{{ T "Clear-History" }}</button> </div> <div class="clear"></div> </div> </li> </ul> </div> <div id="R-footer" class="footerFooter{{if $showfooter}} showFooter{{end}}"> {{- $footer }} </div> </div> </div> </aside> {{- define "partials/inline/page-tree" }} {{- $currentNode := .currentnode }} {{- $config := .config }} {{- $showvisitedlinks := .showvisitedlinks }} <div id="R-shortcutmenu-{{ $config.identifier }}" class="R-sidebarmenu"> {{- with site.Home.GetPage ($config.pageRef | default "") }} {{- $entry := . }} {{- $entries := partialCached "_relearn/pages.gotmpl" (dict "page" $entry) $entry.Path }} {{- $title := "" }} {{- if not ($config.disableTitle | default true) }} {{ $title = $entry.Params.menuTitle | default (T (print $config.identifier "-menuTitle")) }} {{- end }} {{- with $title }} <div class="nav-title padding">{{ . }}</div> {{- end }} {{- $classes := "space " }} {{- if ($config.main | default true) }} {{- $classes = "enlarge morespace " }} {{- end }} <ul class="{{ $classes }}collapsible-menu"> {{- $defaultAlwaysopen := site.Params.alwaysopen | default false }} {{- range $entries }} {{- $isSubSelf := eq . $currentNode }} {{- $isSubAncestor := and (not $isSubSelf) (.IsAncestor $currentNode) }} {{- $isSubHidden := or (.Params.hidden) (eq .Title "") }} {{- $isSubCollapsible := .Params.collapsibleMenu | default site.Params.collapsibleMenu }} {{- if or $isSubSelf $isSubAncestor }} {{- partial "partials/inline/page-walker" (dict "sect" . "currentnode" $currentNode "showvisitedlinks" $showvisitedlinks "alwaysopen" $defaultAlwaysopen "isSelf" $isSubSelf "isAncestor" $isSubAncestor "isHidden" $isSubHidden) }} {{- else if and (not $isSubHidden) (or $isSubCollapsible (not $entry.RelPermalink) (eq $entry $currentNode) ($entry.IsAncestor $currentNode)) }} {{- $id := md5 .Path }} {{- partialCached "partials/inline/page-walker" (dict "sect" . "currentnode" $currentNode "showvisitedlinks" $showvisitedlinks "alwaysopen" $defaultAlwaysopen "isSelf" $isSubSelf "isAncestor" $isSubAncestor "isHidden" $isSubHidden) $id }} {{- end }} {{- end }} </ul> </div> {{- else }} {{- warnf "WARNING: page '%s' not found for sidebar menu '%s'" ($config.pageRef | default "") $config.identifier }} {{- end }} {{- end }} {{- define "partials/inline/page-walker" }} {{- $currentNode := .currentnode }} {{- $showvisitedlinks := .showvisitedlinks }} {{- $alwaysopen := .alwaysopen }} {{- $isSelf := .isSelf }} {{- $isAncestor := .isAncestor }} {{- $isHidden := .isHidden }} {{- with .sect }} {{- $isActive := $isSelf }} {{- $entry := . }} {{- $entries := partialCached "_relearn/pages.gotmpl" (dict "page" .) .Path }} {{- $hasVisibleChildren := false }} {{- range $entries }} {{- $isSubSelf := eq . $currentNode }} {{- $isSubAncestor := and (not $isSubSelf) (.IsAncestor $currentNode) }} {{- $isSubHidden := or (.Params.hidden) (eq .Title "") }} {{- if or $isSubAncestor $isSubSelf (not $isSubHidden) }} {{- $hasVisibleChildren = true }} {{- break }} {{- end }} {{- end }} {{- $title := partial "title.gotmpl" (dict "page" . "linkTitle" true) }} {{- $url := partial "permalink.gotmpl" (dict "to" .) }} {{- $isCrosslink := false }} {{- $target := "" }} {{- if .Params.menuPageRef }} {{- with site.Home.GetPage (.Params.menuPageRef) }} {{- $url = partial "permalink.gotmpl" (dict "to" .) }} {{- $isCrosslink = true }} {{- end }} {{- else if .Params.menuUrl }} {{- $url = .Params.menuUrl }} {{- $isCrosslink = true }} {{- $u := urls.Parse $url }} {{- if $u.IsAbs }} {{- $target = "_blank" }} {{- if isset site.Params "externallinktarget" }} {{- $target = site.Params.externalLinkTarget }} {{- end }} {{- end }} {{- end }} {{- $pre := partial "menu-pre.html" . }} {{- $post := partial "menu-post.html" . }} {{- if and $hasVisibleChildren (not $isCrosslink) }} {{- $isCollapsible := .Params.collapsibleMenu | default site.Params.collapsibleMenu }} {{- $currentAlwaysopen := .Params.alwaysopen | default $alwaysopen }} {{- if and (not $url) (not $isCollapsible) }} {{- $currentAlwaysopen = true }} {{- end }} {{- $entryId := md5 .Path }} {{- $isOpen := or $currentAlwaysopen $isSelf $isAncestor }} <li class="{{if $isActive }}active {{end}}{{if (or $isSelf $isAncestor) }}parent {{end}}{{if $isHidden }}hidden {{end}}{{if not $url }}headless {{end}}{{if $currentAlwaysopen}}alwaysopen {{end}}" data-nav-id="{{ $url }}"> {{- if $isCollapsible }}<input type="checkbox" id="R-section-{{ $entryId }}" aria-controls="R-subsections-{{ $entryId }}"{{ if $isOpen }} checked{{ end }}><label for="R-section-{{ $entryId }}"><i class="fa-fw fas fa-chevron-down"></i><i class="fa-fw fas fa-chevron-right"></i><span class="a11y-only">{{ T "Submenu" $title }}</span></label>{{ end }} {{- if $url }}<a class="padding" href="{{ $url }}"{{ if gt (len $target) 0 }} target="{{ $target }}"{{ end }}>{{ else }}<span class="padding">{{ end }} {{- $pre }}{{ $title }}{{ $post }} {{- if $url }}{{ if $showvisitedlinks }}<i class="fa-fw fas fa-check read-icon"></i>{{ end }}</a>{{ else }}</span>{{ end }}<ul id="R-subsections-{{ $entryId }}" class="collapsible-menu"> {{- $defaultAlwaysopen := site.Params.alwaysopen | default true }} {{- range $entries }} {{- $isSubSelf := eq . $currentNode }} {{- $isSubAncestor := and (not $isSubSelf) (.IsAncestor $currentNode) }} {{- $isSubHidden := or (.Params.hidden) (eq .Title "") }} {{- $isSubCollapsible := .Params.collapsibleMenu | default site.Params.collapsibleMenu }} {{- if or $isSubSelf $isSubAncestor }} {{- partial "partials/inline/page-walker" (dict "sect" . "currentnode" $currentNode "showvisitedlinks" $showvisitedlinks "alwaysopen" $defaultAlwaysopen "isSelf" $isSubSelf "isAncestor" $isSubAncestor "isHidden" $isSubHidden) }} {{- else if and (not $isSubHidden) (or $isSubCollapsible (not $entry.RelPermalink) (eq $entry $currentNode) ($entry.IsAncestor $currentNode)) }} {{- $id := md5 .Path }} {{- partialCached "partials/inline/page-walker" (dict "sect" . "currentnode" $currentNode "showvisitedlinks" $showvisitedlinks "alwaysopen" $defaultAlwaysopen "isSelf" $isSubSelf "isAncestor" $isSubAncestor "isHidden" $isSubHidden) $id }} {{- end }} {{- end }}</ul></li> {{- else if $url }} <li class="{{if $isActive }}active {{end}}{{if $isHidden }}hidden {{end}}{{if not $url }}headless {{end}}{{if $isCrosslink }}crosslink {{end}}" data-nav-id="{{ $url }}"> {{- if $url }}<a class="padding" href="{{ $url }}"{{ if gt (len $target) 0 }} target="{{ $target }}"{{ end }}>{{ else }}<span class="padding">{{ end }} {{- $pre }}{{ $title }}{{ $post }} {{- if $url }}{{ if $showvisitedlinks }}<i class="fa-fw fas fa-check read-icon"></i>{{ end }}</a>{{ else }}</span>{{ end }}</li> {{- end }} {{- end }} {{- end }} {{- define "partials/inline/menu-tree" }} {{- $currentNode := .currentnode }} {{- $config := .config }} {{- $showvisitedlinks := .showvisitedlinks }} {{- with index site.Menus $config.identifier }} <div id="R-shortcutmenu-{{ $config.identifier }}" class="R-sidebarmenu"> {{- $entry := "" }} {{- $entries := . }} {{- if eq (len $entries) 1 }} {{- with index $entries 0 }} {{- if not (partial "menupermalink.gotmpl" .) }} {{- /* because in Hugo menus can not have parameter but menu entries can, we can flag a single top level menu entry as a container; this container entry carrys just meta information and parameter, uses its children to build the "real" menu, and has no own `url` or `pageRef` */}} {{- $entry = . }} {{- $entries = .Children }} {{- end }} {{- end }} {{- end }} {{- $title := "" }} {{- if not ($config.disableTitle | default false) }} {{- if $entry }} {{- $title = partial "menutitle.gotmpl" $entry }} {{- else if eq $config.identifier "shortcuts" }} {{- if not site.Params.DisableShortcutsTitle }} {{- $title = T (print $config.identifier "-menuTitle") }} {{- end }} {{- else }} {{- $title = T (print $config.identifier "-menuTitle") }} {{- end }} {{- end }} {{- with $title }} <div class="nav-title padding">{{ . }}</div> {{- end }} {{- $classes := "space " }} {{- if ($config.main | default false) }} {{- $classes = "enlarge morespace " }} {{- end }} <ul class="{{ $classes }}collapsible-menu"> {{- $root := or $entry site }} {{- $defaultAlwaysopen := site.Params.alwaysopen | default false }} {{- range $entries }} {{- $isSubSelf := eq .Page $currentNode }} {{- $isSubAncestor := and (not $isSubSelf) ($currentNode.HasMenuCurrent .Menu .) }} {{- $isSubHidden := or (.Params.hidden) (eq (partial "menutitle.gotmpl" .) "") }} {{- $isSubCollapsible := .Params.collapsibleMenu | default $root.Params.collapsibleMenu | default site.Params.collapsibleMenu }} {{- if or $isSubSelf $isSubAncestor }} {{- partial "partials/inline/menu-walker" (dict "menu" . "currentnode" $currentNode "showvisitedlinks" $showvisitedlinks "alwaysopen" $defaultAlwaysopen "isSelf" $isSubSelf "isAncestor" $isSubAncestor "isHidden" $isSubHidden "root" $root) }} {{- else if and (not $isSubHidden) (or $isSubCollapsible (not (partial "menupermalink.gotmpl" $entry)) (and $entry (eq $entry.Page $currentNode)) (and $entry ($currentNode.HasMenuCurrent $entry.Menu $entry))) }} {{- $id := md5 (print .) }} {{- partialCached "partials/inline/menu-walker" (dict "menu" . "currentnode" $currentNode "showvisitedlinks" $showvisitedlinks "alwaysopen" $defaultAlwaysopen "isSelf" $isSubSelf "isAncestor" $isSubAncestor "isHidden" $isSubHidden "root" $root) $id }} {{- end }} {{- end }} </ul> </div> {{- else }} {{ if ne $config.identifier "shortcuts" }} {{- warnf "WARNING: menu '%s' not found for sidebar menu '%s'" $config.identifier $config.identifier }} {{- end }} {{- end }} {{- end }} {{- define "partials/inline/menu-walker" }} {{- $currentNode := .currentnode }} {{- $showvisitedlinks := .showvisitedlinks }} {{- $alwaysopen := .alwaysopen }} {{- $isSelf := .isSelf }} {{- $isAncestor := .isAncestor }} {{- $isHidden := .isHidden }} {{- $root := .root }} {{- with .menu }} {{- $isActive := $isSelf }} {{- $entry := . }} {{- $entries := .Children }} {{- $hasVisibleChildren := false }} {{- range $entries }} {{- $isSubSelf := eq .Page $currentNode }} {{- $isSubAncestor := and (not $isSubSelf) ($currentNode.HasMenuCurrent .Menu .) }} {{- $isSubHidden := or (.Params.hidden) (eq (partial "menutitle.gotmpl" .) "") }} {{- if or $isSubAncestor $isSubSelf (not $isSubHidden) }} {{- $hasVisibleChildren = true }} {{- break }} {{- end }} {{- end }} {{- $title := partial "menutitle.gotmpl" . }} {{- $url := partial "menupermalink.gotmpl" . }} {{- $target := "" }} {{- $u := urls.Parse $url }} {{- if $u.IsAbs }} {{- $target = "_blank" }} {{- if isset site.Params "externallinktarget" }} {{- $target = site.Params.externalLinkTarget }} {{- end }} {{- end }} {{- $pre := .Pre }} {{- $post := .Post }} {{- with .Page }} {{- $pre = or $pre (partial "menu-pre.html" .) }} {{- $post = or $post (partial "menu-post.html" .) }} {{- end }} {{- if $hasVisibleChildren }} {{- $isCollapsible := .Params.collapsibleMenu | default $root.Params.collapsibleMenu | default site.Params.collapsibleMenu }} {{- $currentAlwaysopen := .Params.alwaysopen | default $root.Params.alwaysopen | default $alwaysopen }} {{- if and (not $url) (not $isCollapsible) }} {{- $currentAlwaysopen = true }} {{- end }} {{- $entryId := md5 (print .) }} {{- $isOpen := or $currentAlwaysopen $isSelf $isAncestor }} <li class="{{if $isActive }}active {{end}}{{if (or $isSelf $isAncestor) }}parent {{end}}{{if $isHidden }}hidden {{end}}{{if not $url }}headless {{end}}{{if $currentAlwaysopen}}alwaysopen {{end}}" data-nav-id="{{ $url }}"> {{- if $isCollapsible }}<input type="checkbox" id="R-section-{{ $entryId }}" aria-controls="R-subsections-{{ $entryId }}"{{ if $isOpen }} checked{{ end }}><label for="R-section-{{ $entryId }}"><i class="fa-fw fas fa-chevron-down"></i><i class="fa-fw fas fa-chevron-right"></i><span class="a11y-only">{{ T "Submenu" $title }}</span></label>{{ end }} {{- if $url }}<a class="padding" href="{{ $url }}"{{ if gt (len $target) 0 }} target="{{ $target }}"{{ end }}>{{ else }}<span class="padding">{{ end }} {{- $pre }}{{ $title }}{{ $post }} {{- if $url }}{{ if $showvisitedlinks }}<i class="fa-fw fas fa-check read-icon"></i>{{ end }}</a>{{ else }}</span>{{ end }}<ul id="R-subsections-{{ $entryId }}" class="collapsible-menu"> {{- $defaultAlwaysopen := site.Params.alwaysopen | default true }} {{- range $entries }} {{- $isSubSelf := eq .Page $currentNode }} {{- $isSubAncestor := and (not $isSubSelf) ($currentNode.HasMenuCurrent .Menu .) }} {{- $isSubHidden := or (.Params.hidden) (eq (partial "menutitle.gotmpl" .) "") }} {{- $isSubCollapsible := .Params.collapsibleMenu | default $root.Params.collapsibleMenu | default site.Params.collapsibleMenu }} {{- if or $isSubSelf $isSubAncestor }} {{- partial "partials/inline/menu-walker" (dict "menu" . "currentnode" $currentNode "showvisitedlinks" $showvisitedlinks "alwaysopen" $defaultAlwaysopen "isSelf" $isSubSelf "isAncestor" $isSubAncestor "isHidden" $isSubHidden "root" $root) }} {{- else if and (not $isSubHidden) (or $isSubCollapsible (not (partial "menupermalink.gotmpl" $entry)) (eq $entry.Page $currentNode) ($currentNode.HasMenuCurrent $entry.Menu $entry)) }} {{- $id := md5 (print .) }} {{- partialCached "partials/inline/menu-walker" (dict "menu" . "currentnode" $currentNode "showvisitedlinks" $showvisitedlinks "alwaysopen" $defaultAlwaysopen "isSelf" $isSubSelf "isAncestor" $isSubAncestor "isHidden" $isSubHidden "root" $root) $id }} {{- end }} {{- end }}</ul></li> {{- else if $url }} <li class="{{if $isActive }}active {{end}}{{if $isHidden }}hidden {{end}}{{if not $url }}headless {{end}}" data-nav-id="{{ $url }}"> {{- if $url }}<a class="padding" href="{{ $url }}"{{ if gt (len $target) 0 }} target="{{ $target }}"{{ end }}>{{ else }}<span class="padding">{{ end }} {{- $pre }}{{ $title }}{{ $post }} {{- if $url }}{{ if $showvisitedlinks }}<i class="fa-fw fas fa-check read-icon"></i>{{ end }}</a>{{ else }}</span>{{ end }}</li> {{- end }} {{- end }} {{- end }}