lib/PublicInbox/Feed.pm | 19 +++++++++++-------- lib/PublicInbox/View.pm | 10 +++++++++- diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm index 1fa38bf111749af663790bc86d8143b57d8bd486..791d198aecbb3e67bfd68df11da65cdc591225ae 100644 --- a/lib/PublicInbox/Feed.pm +++ b/lib/PublicInbox/Feed.pm @@ -87,30 +87,33 @@ } @_; }); # except we sort top-level messages reverse chronologically - my $state = [ time, {}, $first ]; + my $state = [ time, {}, $first, 0 ]; for (sort { (eval { $b->message->header('X-PI-Date') } || 0) <=> (eval { $a->message->header('X-PI-Date') } || 0) } $th->rootset) { dump_msg($_, 0, \$html, $state); } - $state = undef; Email::Address->purge_cache; - my $footer = nav_footer($args->{cgi}, $first, $last, $feed_opts); - my $list_footer = $args->{footer}; - $footer .= "\n" . $list_footer if ($footer && $list_footer); - $footer = "
" . PRE_WRAP . "$footer" if $footer; + my $footer = nav_footer($args->{cgi}, $last, $feed_opts, $state); + if ($footer) { + my $list_footer = $args->{footer}; + $footer .= "\n" . $list_footer if $list_footer; + $footer = "
" . PRE_WRAP . "$footer"; + } $html . "$footer"; } # private subs sub nav_footer { - my ($cgi, $first, $last, $feed_opts) = @_; + my ($cgi, $last, $feed_opts, $state) = @_; $cgi or return ''; my $old_r = $cgi->param('r'); my $head = ' '; my $next = ' '; + my $first = $state->[2]; + my $anchor = $state->[3]; if ($last) { $next = qq!next!; @@ -121,7 +124,7 @@ $head = qq!head!; } my $atom = "{atomurl}\">atom"; my $permalink = "permalink"; - "$next $head $atom $permalink"; + "page: $next $head $atom $permalink"; } sub each_recent_blob { diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm index b3797d39ae06a6ea4747d7bd0f15b3a462b770a0..ce63f7d47aa8ab9716d7c3d08ca0bbcdd3344233 100644 --- a/lib/PublicInbox/View.pm +++ b/lib/PublicInbox/View.pm @@ -45,6 +45,8 @@ # this is already inside a
 sub index_entry {
 	my ($class, $mime, $level, $state) = @_;
 	my ($now, $seen, $first) = @$state;
+	my $midx = $state->[3]++;
+	my ($prev, $next) = ($midx - 1, $midx + 1);
 	my $rv = '';
 	my $part_nr = 0;
 	my $enc_msg = enc_for($mime->header("Content-Type"));
@@ -75,7 +77,13 @@ 		$fmt = '%m/%d';
 	}
 	$ts = POSIX::strftime($fmt, gmtime($ts));
 
-	$rv .= "$pfx$subj $from - $ts\n\n";
+	$rv .= "$pfx" .
+		"" .
+		"$subj $from - $ts\n" .
+		"$pfxnext";
+
+	$rv .= " prev" if $prev >= 0;
+	$rv .= "\n";
 
 	my $irp = $header_obj->header_raw('In-Reply-To');
 	my ($anchor_idx, $anchor);