about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2015-08-20 02:30:27 +0000
committerEric Wong <e@80x24.org>2015-08-20 02:31:33 +0000
commit09b1fc82d53228212805b7e26aa1d4bf381cecd6 (patch)
tree5f429ede50ba985561314ae2ef37440dafd79a1d /lib
parent7245596edd0167791e7324c2d34b7fd340a4557c (diff)
downloadpublic-inbox-09b1fc82d53228212805b7e26aa1d4bf381cecd6.tar.gz
This is more space efficient since we don't need to place padding
bytes in front of every line.  While this unfortunately does not
render well on lynx; w3m, links, elinks can all render tables
sanely.

Tables are also superior for long lines which require wrapping
inside <pre> containers.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/Feed.pm7
-rw-r--r--lib/PublicInbox/View.pm43
2 files changed, 21 insertions, 29 deletions
diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm
index 0b7ef7f8..8bfd19e7 100644
--- a/lib/PublicInbox/Feed.pm
+++ b/lib/PublicInbox/Feed.pm
@@ -12,7 +12,6 @@ use PublicInbox::View;
 use constant {
         DATEFMT => '%Y-%m-%dT%H:%M:%SZ', # atom standard
         MAX_PER_PAGE => 25, # this needs to be tunable
-        PRE_WRAP => "<pre\nstyle=\"white-space:pre-wrap\">",
 };
 
 # main function
@@ -60,7 +59,7 @@ sub generate_html_index {
         my $html = "<html><head><title>$title</title>" .
                 '<link rel="alternate" title="Atom feed"' . "\nhref=\"" .
                 $feed_opts->{atomurl} . "\"\ntype=\"application/atom+xml\"/>" .
-                '</head><body>' . PRE_WRAP;
+                '</head><body>';
 
         my $state;
         my $git = PublicInbox::GitCatFile->new($ctx->{git_dir});
@@ -80,9 +79,9 @@ sub generate_html_index {
         if ($footer) {
                 my $list_footer = $ctx->{footer};
                 $footer .= "\n" . $list_footer if $list_footer;
-                $footer = "<hr />" . PRE_WRAP . "$footer</pre>";
+                $footer = "<hr /><pre>$footer</pre>";
         }
-        $html . "</pre>$footer</body></html>";
+        $html .= "$footer</body></html>";
 }
 
 # private subs
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 4a8e54aa..800c1a2e 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -33,8 +33,9 @@ sub msg_html {
         }
         headers_to_html_header($mime, $full_pfx, $srch) .
                 multipart_text_as_html($mime, $full_pfx) .
-                '</pre><hr />' . PRE_WRAP .
-                html_footer($mime, 1, $full_pfx, $srch) . $footer .
+                '</pre><hr /><pre>' .
+                html_footer($mime, 1, $full_pfx, $srch) .
+                $footer .
                 '</pre></body></html>';
 }
 
@@ -51,7 +52,6 @@ sub index_entry {
         my ($srch, $seen, $first_commit) = @$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"));
         my $subj = $mime->header('Subject');
@@ -69,15 +69,9 @@ sub index_entry {
 
         $from = PublicInbox::Hval->new_oneline($from)->as_html;
         $subj = PublicInbox::Hval->new_oneline($subj)->as_html;
-        my $pfx = ('  ' x $level);
         my $root_anchor = $seen->{root_anchor};
-        my $path;
         my $more = 'permalink';
-        if ($root_anchor) {
-                $path = '../';
-        } else {
-                $path = '';
-        }
+        my $path = $root_anchor ? '../' : '';
         my $href = $mid->as_href;
         my $irt = $header_obj->header_raw('In-Reply-To');
         my ($anchor_idx, $anchor, $t_anchor);
@@ -88,7 +82,6 @@ sub index_entry {
         } else {
                 $t_anchor = '';
         }
-
         if (defined $srch) {
                 $subj = "<a\nhref=\"${path}t/$href.html#u\">$subj</a>";
         }
@@ -103,7 +96,12 @@ sub index_entry {
         my $fmt = '%Y-%m-%d %H:%M';
         $ts = POSIX::strftime($fmt, gmtime($ts));
 
-        $rv .= "$pfx<b\nid=\"$id\">$subj</b>\n$pfx";
+        my $rv = "<table\nsummary=l$level><tr>";
+        if ($level) {
+                $rv .= '<td><pre>' . ('  ' x $level) . '</pre></td>';
+        }
+        $rv .= '<td>' . PRE_WRAP;
+        $rv .= "<b\nid=\"$id\">$subj</b>\n";
         $rv .= "- by $from @ $ts UTC - ";
         $rv .= "<a\nid=\"s$midx\"\nhref=\"#s$next\">next</a>";
         if ($prev >= 0) {
@@ -115,13 +113,12 @@ sub index_entry {
         my $fhref = "${path}f/$href.html";
         # scan through all parts, looking for displayable text
         $mime->walk_parts(sub {
-                $rv .= index_walk($_[0], $pfx, $enc_msg, $part_nr, $fhref,
-                                  \$more);
+                $rv .= index_walk($_[0], $enc_msg, $part_nr, $fhref, \$more);
                 $part_nr++;
         });
         $mime->body_set('');
 
-        $rv .= "\n$pfx<a\nhref=\"$mhref\">$more</a> ";
+        $rv .= "\n<a\nhref=\"$mhref\">$more</a> ";
         my $txt = "${path}m/$href.txt";
         $rv .= "<a\nhref=\"$txt\">raw</a> ";
         $rv .= html_footer($mime, 0);
@@ -141,7 +138,7 @@ sub index_entry {
                        "threadlink</a>";
         }
 
-        $rv . "\n\n";
+        $rv .= '</pre></td></tr></table>';
 }
 
 sub thread_html {
@@ -168,7 +165,7 @@ sub thread_html {
         }
         $next .= "</a>, back to <a\nhref=\"../\">index</a>\n";
 
-        $rv .= "</pre><hr />" . PRE_WRAP . $next . $foot . "</pre>";
+        $rv .= "<hr />" . PRE_WRAP . $next . $foot . "</pre>";
 }
 
 sub subject_path_html {
@@ -188,13 +185,13 @@ sub subject_path_html {
         my $final_anchor = $state->[3];
         my $next = "<a\nid=\"s$final_anchor\">end of thread</a>\n";
 
-        $rv .= "</pre><hr />" . PRE_WRAP . $next . $foot . "</pre>";
+        $rv .= "<hr />" . PRE_WRAP . $next . $foot . "</pre>";
 }
 
 # only private functions below.
 
 sub index_walk {
-        my ($part, $pfx, $enc_msg, $part_nr, $fhref, $more) = @_;
+        my ($part, $enc_msg, $part_nr, $fhref, $more) = @_;
         my $rv = '';
         return $rv if $part->subparts; # walk_parts already recurses
         my $ct = $part->content_type;
@@ -207,7 +204,7 @@ sub index_walk {
         if ($part_nr > 0) {
                 my $fn = $part->filename;
                 defined($fn) or $fn = "part #" . ($part_nr + 1);
-                $rv .= $pfx . add_filename_line($enc->decode($fn));
+                $rv .= add_filename_line($enc->decode($fn));
         }
 
         my $s = add_text_body_short($enc, $part, $part_nr, $fhref);
@@ -224,9 +221,6 @@ sub index_walk {
         $s =~ s/\s+\z//s;
 
         if (length $s) {
-                # add prefix:
-                $s =~ s/^/$pfx/sgm;
-
                 # kill per-line trailing whitespace
                 $s =~ s/[ \t]+$//sgm;
 
@@ -549,8 +543,7 @@ sub thread_html_head {
         my ($mime) = @_;
         my $s = PublicInbox::Hval->new_oneline($mime->header('Subject'));
         $s = $s->as_html;
-        "<html><head><title>$s</title></head><body>" . PRE_WRAP
-
+        "<html><head><title>$s</title></head><body>";
 }
 
 sub thread_entry {