From 2e364fdb2bd179a7a449e263cca7dd978fc7b594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Weber?= Date: Fri, 27 Aug 2021 14:11:29 +0200 Subject: [PATCH] arrow-nav: fix broken links on (and below) hidden pages #61 complete rewrite of logic --- layouts/partials/footer.html | 72 +++++++++++++++++++++--------------- static/css/theme.css | 1 + 2 files changed, 43 insertions(+), 30 deletions(-) diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html index e7b13ad7a3..d72f2e75b2 100644 --- a/layouts/partials/footer.html +++ b/layouts/partials/footer.html @@ -9,50 +9,62 @@ {{ $currentNode := . }} - {{ template "menu-nextprev" dict "menu" .Site.Home "currentnode" $currentNode }} + {{ $currentNode.Scratch.Set "selfFound" nil }} + {{ $currentNode.Scratch.Set "prevPage" nil }} + {{ $currentNode.Scratch.Set "nextPage" nil }} + {{ template "menu-nextprev" dict "menu" .Site.Home "currentnode" $currentNode "hidden" false }} {{ define "menu-nextprev" }} - {{$currentNode := .currentnode }} - {{ $hidden := or (.menu.Params.hidden) (eq .menu.Title "") }} + {{ $currentNode := .currentnode }} + {{ $isSelf := eq $currentNode.RelPermalink .menu.RelPermalink }} + {{ $isDescendant := and (not $isSelf) (.menu.IsDescendant $currentNode) }} + {{ $isAncestor := and (not $isSelf) (.menu.IsAncestor $currentNode) }} + {{ $isOther := and (not $isDescendant) (not $isSelf) (not $isAncestor) }} + + {{ if $isSelf }} + {{ $currentNode.Scratch.Set "selfFound" true }} + {{end}} + {{ $isSelfFound := eq ($currentNode.Scratch.Get "selfFound") true }} + {{ $isPreSelf := and (not $isSelfFound) (not $isSelf) }} + {{ $isPostSelf := and ($isSelfFound) (not $isSelf) }} + + {{ $page_hidden := or (.menu.Params.hidden) (eq .menu.Title "") }} + {{ $hidden := or (and $page_hidden (not $isAncestor) (not $isSelf) ) (and .hidden (or $isPreSelf $isPostSelf $isDescendant) ) }} + {{ if not $hidden }} - {{if hasPrefix $currentNode.RelPermalink .menu.RelPermalink }} - {{ $currentNode.Scratch.Set "NextPageOK" "OK" }} - {{ $currentNode.Scratch.Set "prevPage" ($currentNode.Scratch.Get "prevPageTmp") }} - {{else}} - {{if eq ($currentNode.Scratch.Get "NextPageOK") "OK"}} - {{ $currentNode.Scratch.Set "NextPageOK" nil }} - {{ $currentNode.Scratch.Set "nextPage" .menu }} - {{end}} + {{if and $isPreSelf (or $isOther $isAncestor ) }} + {{ $currentNode.Scratch.Set "prevPage" .menu }} + {{else if and $isPostSelf (or $isOther $isDescendant) (eq ($currentNode.Scratch.Get "nextPage") nil) }} + {{ $currentNode.Scratch.Set "nextPage" .menu }} {{end}} - {{ $currentNode.Scratch.Set "prevPageTmp" .menu }} + {{ end }} - {{ $currentNode.Scratch.Set "pages" .menu.Pages }} - {{ if .menu.IsHome}} - {{ $currentNode.Scratch.Set "pages" .menu.Sections }} - {{ else if .menu.Sections}} - {{ $currentNode.Scratch.Set "pages" (.menu.Pages | union .menu.Sections) }} + {{ $currentNode.Scratch.Set "pages" .menu.Pages }} + {{ if .menu.IsHome}} + {{ $currentNode.Scratch.Set "pages" .menu.Sections }} + {{ else if .menu.Sections}} + {{ $currentNode.Scratch.Set "pages" (.menu.Pages | union .menu.Sections) }} + {{end}} + {{ $pages := ($currentNode.Scratch.Get "pages") }} + + {{if eq .Site.Params.ordersectionsby "title"}} + {{ range $pages.ByTitle }} + {{ template "menu-nextprev" dict "menu" . "currentnode" $currentNode "hidden" $hidden }} + {{end}} + {{else}} + {{ range $pages.ByWeight }} + {{ template "menu-nextprev" dict "menu" . "currentnode" $currentNode "hidden" $hidden }} {{end}} - {{ $pages := ($currentNode.Scratch.Get "pages") }} - - {{if eq .Site.Params.ordersectionsby "title"}} - {{ range $pages.ByTitle }} - {{ template "menu-nextprev" dict "menu" . "currentnode" $currentNode }} - {{end}} - {{else}} - {{ range $pages.ByWeight }} - {{ template "menu-nextprev" dict "menu" . "currentnode" $currentNode }} - {{end}} - {{ end }} {{ end }} {{ end }} {{$showPrevNext := (and (not .Params.disableNextPrev) (not .Site.Params.disableNextPrev))}} {{if $showPrevNext}} {{with ($.Scratch.Get "prevPage")}} - + {{end}} {{with ($.Scratch.Get "nextPage")}} - + {{end}} {{end}} diff --git a/static/css/theme.css b/static/css/theme.css index 531a80805c..5034811d5c 100644 --- a/static/css/theme.css +++ b/static/css/theme.css @@ -375,6 +375,7 @@ textarea:focus, input[type="email"]:focus, input[type="number"]:focus, input[typ left: 0; } #body .nav.nav-next { + margin-right: 0px; right: 0; } #chapter {