96 lines
4.7 KiB
HTML
96 lines
4.7 KiB
HTML
{{- $navWidth := "hx:max-w-[90rem]" -}}
|
|
{{- with .Site.Params.navbar.width -}}
|
|
{{ if eq . "normal" -}}
|
|
{{ $navWidth = "hx:max-w-screen-xl" -}}
|
|
{{ else if eq . "full" -}}
|
|
{{ $navWidth = "max-w-full" -}}
|
|
{{ end -}}
|
|
{{- end -}}
|
|
|
|
{{- $page := . -}}
|
|
{{- $iconHeight := 24 -}}
|
|
|
|
<div id="hextra-nav-wrapper" class="hextra-nav-container hx:sticky hx:top-0 hx:z-20 hx:w-full hx:bg-transparent hx:print:hidden" style="transition:transform 0.3s ease">
|
|
<div
|
|
class="hextra-nav-container-blur hx:pointer-events-none hx:absolute hx:z-[-1] hx:h-full hx:w-full hx:bg-white hx:dark:bg-dark hx:shadow-[0_2px_4px_rgba(0,0,0,.02),0_1px_0_rgba(0,0,0,.06)] hx:contrast-more:shadow-[0_0_0_1px_#000] hx:dark:shadow-[0_-1px_0_rgba(255,255,255,.1)_inset] hx:contrast-more:dark:shadow-[0_0_0_1px_#fff]"
|
|
></div>
|
|
|
|
<nav class="hextra-max-navbar-width hx:mx-auto hx:flex hx:items-center hx:justify-end hx:gap-1 hx:md:gap-2 hx:h-[var(--hextra-navbar-height)] hx:px-6">
|
|
{{ partial "navbar-title.html" . }}
|
|
|
|
{{- $currentPage := . -}}
|
|
{{- range .Site.Menus.main -}}
|
|
{{- if eq .Params.type "search" -}}
|
|
{{- partial "search.html" (dict "icon" .Params.icon) -}}
|
|
{{- else -}}
|
|
{{- $link := .URL -}}
|
|
{{- $external := strings.HasPrefix $link "http" -}}
|
|
{{- with .PageRef -}}
|
|
{{- if hasPrefix . "/" -}}
|
|
{{- $link = relLangURL (strings.TrimPrefix "/" .) -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- if eq .Params.type "link" -}}
|
|
{{- partial "navbar-link.html" (dict "currentPage" $currentPage "link" $link "external" $external "item" . "icon" .Params.icon) -}}
|
|
{{- else if eq .Params.type "theme-toggle" -}}
|
|
{{- partial "theme-toggle.html" (dict "iconHeight" $iconHeight "hideLabel" (not .Params.label) "iconHeight" $iconHeight "location" "top" "class" "hx:p-1 hx:md:p-2") -}}
|
|
{{- else if eq .Params.type "language-switch" -}}
|
|
{{- partial "language-switch" (dict "context" $page "grow" false "hideLabel" (not .Params.label) "iconName" (.Params.icon | default "translate") "iconHeight" $iconHeight "location" "top" "class" "hx:p-1 hx:md:p-2") -}}
|
|
{{- else if .Params.icon -}}
|
|
{{- /* Display icon menu item */ -}}
|
|
{{- if not $link -}}{{ warnf "Icon menu item '%s' has no URL" .Name }}{{- end -}}
|
|
{{- $rel := cond (eq .Params.icon "mastodon") "noreferrer me" "noreferrer" }}
|
|
<a class="hx:p-1 hx:md:p-2 hx:text-current" {{ if $external }}target="_blank" rel="{{ $rel }}"{{ end }} href="{{ $link }}" title="{{ or (T .Identifier) .Name | safeHTML }}">
|
|
{{- partial "utils/icon.html" (dict "name" .Params.icon "attributes" (printf "height=%d" $iconHeight)) -}}
|
|
<span class="hx:sr-only">{{ or (T .Identifier) .Name | safeHTML }}</span>
|
|
</a>
|
|
{{- else -}}
|
|
{{- partial "navbar-link.html" (dict "currentPage" $currentPage "link" $link "external" $external "item" .) -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{/* Quick links - only on non-homepage, separated from menu by spacer */}}
|
|
{{- with .Site.Params.quickLinks -}}
|
|
{{- if not $.IsHome -}}
|
|
<div style="flex-grow:1"></div>
|
|
<div class="hx:flex hx:items-center hx:text-sm hx:text-gray-500 hx:dark:text-gray-400" style="gap:1.25rem;padding-right:0.5rem;padding-top:0.5rem;padding-bottom:0.5rem">
|
|
{{- range . -}}
|
|
{{- $qlink := .url -}}
|
|
{{- $qexternal := hasPrefix $qlink "http" -}}
|
|
<a
|
|
href="{{ $qlink }}"
|
|
class="hx:whitespace-nowrap hx:hover:text-gray-900 hx:dark:hover:text-gray-100 hx:transition-colors"
|
|
{{ if $qexternal }}target="_blank" rel="noreferrer"{{ end }}
|
|
>{{ .name }}</a>
|
|
{{- end -}}
|
|
</div>
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
<button type="button" aria-label="{{ (T "menu") | default "Menu" }}" aria-expanded="false" class="hextra-hamburger-menu hx:cursor-pointer hx:-mr-1 hx:rounded-sm hx:p-1 hx:active:bg-gray-400/20 hx:md:hidden hx:hextra-focus-visible-inset">
|
|
{{- partial "utils/icon.html" (dict "name" "hamburger-menu" "attributes" (printf "height=%d" $iconHeight)) -}}
|
|
</button>
|
|
</nav>
|
|
</div>
|
|
<script>
|
|
(function(){
|
|
var nav = document.getElementById('hextra-nav-wrapper');
|
|
if(!nav) return;
|
|
var lastScroll = 0;
|
|
var threshold = 10;
|
|
window.addEventListener('scroll', function(){
|
|
var st = window.pageYOffset || document.documentElement.scrollTop;
|
|
if(st <= 0){ nav.style.transform = 'translateY(0)'; return; }
|
|
if(Math.abs(st - lastScroll) < threshold) return;
|
|
if(st > lastScroll && st > 300){
|
|
nav.style.transform = 'translateY(-100%)';
|
|
} else {
|
|
nav.style.transform = 'translateY(0)';
|
|
}
|
|
lastScroll = st;
|
|
}, {passive:true});
|
|
})();
|
|
</script>
|