about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-07-07 03:03:38 +0000
committerEric Wong <e@80x24.org>2016-07-07 03:07:22 +0000
commit070f24660dffd35c4cf7151eb994e17029562894 (patch)
tree27e5aaa2c2df27fbc7d644bce100264d60942a7f /lib
parent25a450051f1761d19ba46f1625c4c5aa030c607b (diff)
downloadpublic-inbox-070f24660dffd35c4cf7151eb994e17029562894.tar.gz
This is closer to the behavior of thread-aware MUAs.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/View.pm42
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;