<div class="menu">
    <ul>
        {{- $displayedNode := . }}
        {{- template "menu-loop" dict "currentnode" .Site.Home "displayednode" $displayedNode }}
    </ul>
</div>

<!-- Template -->
{{- define "menu-loop" }}
    {{- $currentNode := .currentnode }}
    {{- $displayedNode := .displayednode }}
    {{- with .currentnode}}
        {{- $numberOfPages := (add (len .Pages) (len .Sections)) }}
        <li>
            <a class="{{- if .IsAncestor $displayedNode }} ancestor{{- end }}
                {{- if eq .RelPermalink $displayedNode.RelPermalink}} active{{- end }}
                {{- if .IsSection}} section{{- end }}" href="{{- .RelPermalink }}">
                {{- if .LinkTitle }}
                    {{- .LinkTitle }}
                {{- else }}
                    {{- $noparent := .File.Dir }}
                    {{- if .Parent.File }}
                        {{- $noparent = replace .File.Dir .Parent.File.Dir "" }}
                    {{- end }}
                    {{- replaceRE "/" "-" $noparent }}{{- .File.TranslationBaseName }}
                {{- end }}
            </a>
            {{- if (or (.IsDescendant $displayedNode) (.IsAncestor $displayedNode) (.InSection $displayedNode)) }}
                <ul class="{{- if .IsAncestor $displayedNode}} ancestor{{- end }}
                    {{- if ne $numberOfPages 0 }} parent{{- end }}">
                    {{- $subElements := dict }}
                    {{- range (where .Site.Pages ".Params.unlisted" "!=" "true") }}
                        {{- if and (eq .Parent $currentNode) (.IsDescendant $currentNode) }}
                            {{- $subElements = merge $subElements (dict (string .) . ) }}
                        {{- end }}
                    {{- end }}
                    {{- range $subElements }}
                        {{- template "menu-loop" dict "currentnode" . "displayednode" $displayedNode }}
                    {{- end }}
                </ul>
            {{- end }}
        </li>
    {{- end }}
{{- end }}
