From: Eric Wong Date: Thu, 7 Jul 2016 03:03:38 +0000 (+0000) Subject: view: per-message view links to real previous sibling X-Git-Tag: v1.0.0~295 X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=commitdiff_plain;h=070f24660dffd35c4cf7151eb994e17029562894 view: per-message view links to real previous sibling This is closer to the behavior of thread-aware MUAs. --- diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index f47ecba0..054b3580 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -636,21 +636,35 @@ sub html_footer { if ($idx && $srch) { $idx .= "\n"; thread_skel(\$idx, $ctx, $hdr, $tpfx); - my $p = $ctx->{parent_msg}; - my $next = $ctx->{next_msg}; - if ($p) { - $p = PublicInbox::Hval->new_msgid($p); - $p = $p->as_href; - $irt = "parent "; - } else { - $irt = ' ' x length('parent '); + my ($next, $prev); + my $parent = ' '; + $next = $prev = ' '; + + if (my $n = $ctx->{next_msg}) { + $n = PublicInbox::Hval->new_msgid($n)->as_href; + $next = "next"; } - if ($next) { - my $n = PublicInbox::Hval->new_msgid($next)->as_href; - $irt .= "next "; - } else { - $irt .= ' ' x length('next '); + my $u; + my $par = $ctx->{parent_msg}; + if ($par) { + $u = PublicInbox::Hval->new_msgid($par)->as_href; + $u = "$upfx$u/"; } + if (my $p = $ctx->{prev_msg}) { + $prev = PublicInbox::Hval->new_msgid($p)->as_href; + if ($p && $par && $p eq $par) { + $prev = "prev parent'; + $parent = ''; + } else { + $prev = "prev'; + $parent = " parent" if $u; + } + } elsif ($u) { # unlikely + $parent = " parent"; + } + $irt = "$next $prev$parent "; } else { $irt = ''; } @@ -744,6 +758,8 @@ sub _skel_header { $$dst .= "$d". "$attr [this message]\n"; return; + } else { + $ctx->{prev_msg} = $mid; } } else { $ctx->{next_msg} ||= $mid;