diff options
author | Eric Wong <e@80x24.org> | 2016-07-07 03:03:38 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-07-07 03:07:22 +0000 |
commit | 070f24660dffd35c4cf7151eb994e17029562894 (patch) | |
tree | 27e5aaa2c2df27fbc7d644bce100264d60942a7f /lib | |
parent | 25a450051f1761d19ba46f1625c4c5aa030c607b (diff) | |
download | public-inbox-070f24660dffd35c4cf7151eb994e17029562894.tar.gz |
This is closer to the behavior of thread-aware MUAs.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/PublicInbox/View.pm | 42 |
1 files changed, 29 insertions, 13 deletions
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 = "<a\nhref=\"$upfx$p/\"\nrel=prev>parent</a> "; - } 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 = "<a\nhref=\"$upfx$n/\"\nrel=next>next</a>"; } - if ($next) { - my $n = PublicInbox::Hval->new_msgid($next)->as_href; - $irt .= "<a\nhref=\"$upfx$n/\"\nrel=next>next</a> "; - } 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 = "<a\nhref=\"$upfx$prev/\"\n" . + 'rel=prev>prev parent</a>'; + $parent = ''; + } else { + $prev = "<a\nhref=\"$upfx$prev/\"\n" . + 'rel=prev>prev</a>'; + $parent = " <a\nhref=\"$u\">parent</a>" if $u; + } + } elsif ($u) { # unlikely + $parent = " <a\nhref=\"$u\"\nrel=prev>parent</a>"; + } + $irt = "$next $prev$parent "; } else { $irt = ''; } @@ -744,6 +758,8 @@ sub _skel_header { $$dst .= "<b>$d<a\nid=r\nhref=\"#t\">". "$attr [this message]</a></b>\n"; return; + } else { + $ctx->{prev_msg} = $mid; } } else { $ctx->{next_msg} ||= $mid; |