Commit Diff


commit - 03d9df8019a7081a26755e6e39196f1951734bd5
commit + ebad21b17317dc400355f7e65de6110b4b26ce29
blob - 51dcd627a1c5af1f423f8667dc803b6e5e471f76
blob + 47f81e64eefcadb55d6c1b0a252ef9d63445f0da
--- mkindex
+++ mkindex
@@ -28,13 +28,18 @@ sub pagename {
 	return $i == 0 && "index.html" || "$i.html";
 }
 
+sub endfile {
+	say $pfh '</ul></div>';
+	close($pfh);
+}
+
 sub nextfile {
-	$entries = 0;
-	close($pfh) if defined $pfh;
+	endfile if defined $pfh;
 	$page += 1;
 	my $path = pagename($page);
 	open($pfh, '>', $path)
 	    or die "can't open $path: $!";
+	say $pfh "<div class='thread'><ul>";
 }
 
 sub nav {
@@ -127,46 +132,35 @@ sub endthread {
 	$last_level = 0;
 }
 
-sub entry_raw {
-	my ($fh, $sep, $mid, $level, $date, $from, $subj) = @_;
-	my $new_thread = $level == 0;
-
-	say $fh "</ul>\n</li>" x ($last_level - $level) if $last_level > $level;
-	say $fh "</ul>\n</div>$sep" if $threads_seen && $new_thread;
-
-	if ($new_thread) {
-		# don't break threads over multiple pages!
-		nextfile if $entries >= $entries_per_page && $fh != $tfh;
-
-		nextthread($mid, $subj);
-		say $fh "<div class='thread'>";
-	}
-
-	if ($last_level < $level) {
-		say $fh "<li>\n<ul>";
-	} elsif ($last_level == 0) {
-		say $fh "<ul class='mails'>";
-	}
-
+sub entry {
+	my ($fh, $type, $mid, $date, $from, $subj) = @_;
 	print $fh "<li id='$mid' class='mail'>";
 	print $fh "<p class='mail-meta'>";
 	print $fh "<time>$date</time> ";
 	print $fh "<span class='from'>$from</span>";
 	print $fh "<span class='colon'>:</span>";
-	if ($fh != $tfh && $level == 0) {
-		print $fh " (<a href='/thread/$mid.html'>thread</a>)";
-	}
 	print $fh "</p>";
 	print $fh "<p class='subject'>";
-	print $fh "<a href='/mail/$mid.html'>$subj</a>";
+	print $fh "<a href='/$type/$mid.html'>$subj</a>";
 	print $fh "</p>";
 	print $fh "</li>\n";
 }
 
-sub entry {
-	$entries++;
-	entry_raw($pfh, "<hr />", @_);
-	entry_raw($tfh, "", @_);
+sub thread_entry {
+	my ($fh, $mid, $level, $date, $from, $subj) = @_;
+
+	say $fh "</ul>\n</li>" x ($last_level - $level) if $last_level > $level;
+	say $fh "</ul>\n</div>" if $threads_seen && $level == 0;
+
+	say $fh "<div class='thread'>" if $level == 0;
+
+	if ($last_level < $level) {
+		say $fh "<li>\n<ul>";
+	} elsif ($last_level == 0) {
+		say $fh "<ul class='mails'>";
+	}
+
+	entry $fh, "mail", $mid, $date, $from, $subj;
 }
 
 unveil($outdir, "rwc") or die "unveil $outdir: $!";
@@ -175,7 +169,7 @@ unveil(".", "rwc") or die "unveil .: $!";
 # fattr is needed by move
 pledge("stdio rpath wpath cpath fattr") or die "pledge: $!";
 
-nextfile();
+nextfile;
 
 while (<>) {
 	chomp;
@@ -195,15 +189,22 @@ while (<>) {
 	$subj =~ s/\s+/ /g;
 	$subj =~ s/\s+$//g;
 
-	entry($mid, $level, $date, $from, $subj);
+	if ($level == 0) {
+		nextthread $mid, $subj;
+
+		$entries++;
+		if ($entries > $entries_per_page) {
+			nextfile;
+			$entries = 0;
+		}
+		entry $pfh, "thread", $mid, $date, $from, $subj;
+	}
+
+	thread_entry($tfh, $mid, $level, $date, $from, $subj);
 	$last_level = $level;
 	$threads_seen = 1;
 }
 
-if ($threads_seen) {
-	say $pfh "</ul></li>" x $last_level;
-	say $pfh "</ul></div>";
-	endthread();
-}
-
+endfile;
+endthread if $threads_seen;
 fixfiles();