lib/PublicInbox/View.pm | 42 +++++++++++++++++++++++++++++-------------
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index f47ecba0ae27b8eb364f5842ea113774a32f78aa..054b358003b95edf1c77e49f0004a46d80b1740e 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -636,21 +636,35 @@ my $irt = '';
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 @@ delete $ctx->{cur};
$$dst .= "$d".
"$attr [this message]\n";
return;
+ } else {
+ $ctx->{prev_msg} = $mid;
}
} else {
$ctx->{next_msg} ||= $mid;