about summary refs log tree commit homepage
path: root/lib/PublicInbox
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-06-05 21:24:17 +0000
committerEric Wong <e@80x24.org>2016-06-05 21:39:27 +0000
commit1365e185d817cdc2de04968c37f597d92226a13b (patch)
tree9b3785bc759e561804ae65b06217478c3e7a2bf0 /lib/PublicInbox
parente1d60f92dffc9830618aa0b49f3f829e99cb5353 (diff)
downloadpublic-inbox-1365e185d817cdc2de04968c37f597d92226a13b.tar.gz
This should reduce link following for replies and improve
visibility.  This should also reduce cache overhead/footprint
for crawlers.
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r--lib/PublicInbox/View.pm43
-rw-r--r--lib/PublicInbox/WWW.pm23
2 files changed, 22 insertions, 44 deletions
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index ed405301..2b40bcdd 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -20,7 +20,8 @@ use constant INDENT => '  ';
 use constant TCHILD => '` ';
 sub th_pfx ($) { $_[0] == 0 ? '' : TCHILD };
 
-# public functions:
+# public functions: (unstable)
+# TODO: stream this, since threading is expensive but also oh-so-important
 sub msg_html {
         my ($ctx, $mime, $footer) = @_;
         $footer = defined($footer) ? "\n$footer" : '';
@@ -28,36 +29,25 @@ sub msg_html {
         headers_to_html_header($hdr, $ctx) .
                 multipart_text_as_html($mime, '') .
                 '</pre><hr /><pre>' .
-                html_footer($hdr, 1, $ctx, 'R/') .
-                $footer .
-                '</pre></body></html>';
+                html_footer($hdr, 1, $ctx) .
+                '</pre>' . msg_reply($ctx, $hdr) .
+                '<hr /><pre>'.  $footer . '</pre></body></html>';
 }
 
-# /$INBOX/$MESSAGE_ID/R/
+# /$INBOX/$MESSAGE_ID/#R
 sub msg_reply {
-        my ($ctx, $hdr, $footer) = @_;
-        my $s = $hdr->header('Subject');
-        $s = '(no subject)' if (!defined $s) || ($s eq '');
-        my $f = $hdr->header('From');
-        $f = '' unless defined $f;
-        my $mid = $hdr->header_raw('Message-ID');
-        $mid = PublicInbox::Hval->new_msgid($mid);
-        my $t = ascii_html($s);
+        my ($ctx, $hdr) = @_;
         my $se_url =
          'https://kernel.org/pub/software/scm/git/docs/git-send-email.html';
 
         my ($arg, $link) = mailto_arg_link($hdr);
         push @$arg, '/path/to/YOUR_REPLY';
 
-        "<html><head><title>replying to \"$t\"</title></head><body><pre>" .
-        "replying to message:\n\n" .
-        "Subject: <b>$t</b>\n" .
-        "From: ". ascii_html($f) .
-        "\nDate: " .  ascii_html($hdr->header('Date')) .
-        "\nMessage-ID: &lt;" . $mid->as_html . "&gt;\n\n" .
-        "There are multiple ways to reply:\n\n" .
+        "<hr /><pre\nid=R>".
+        "You may reply publically to <a\nhref=#t>this message</a> via email\n".
+        "using any one of the following methods:\n\n" .
         "* Save the following mbox file, import it into your mail client,\n" .
-        "  and reply-to-all from there: <a\nhref=../raw>mbox</a>\n\n" .
+        "  and reply-to-all from there: <a\nhref=raw>mbox</a>\n\n" .
         "* Reply to all the recipients using the <b>--to</b>, <b>--cc</b>,\n" .
         "  and <b>--in-reply-to</b> switches of git-send-email(1):\n\n" .
         "\tgit send-email \\\n\t\t" .
@@ -66,9 +56,7 @@ sub msg_reply {
         "* If your mail client supports setting the <b>In-Reply-To</b>" .
         " header\n  via mailto: links, try the " .
         qq(<a\nhref="$link">mailto: link</a>\n) .
-        "\nFor context, the original <a\nhref=../>message</a> or " .
-        qq(<a\nhref="../t/#u">thread</a>) .
-        '</pre><hr /><pre>' . $footer .  '</pre></body></html>';
+        '</pre>';
 }
 
 sub in_reply_to {
@@ -123,7 +111,7 @@ sub index_entry {
 
         # scan through all parts, looking for displayable text
         msg_iter($mime, sub { index_walk($fh, $mhref, $_[0]) });
-        $rv = "\n" . html_footer($hdr, 0, $ctx, "$path$href/R/");
+        $rv = "\n" . html_footer($hdr, 0, $ctx, "$path$href/#R");
 
         if (defined $irt) {
                 unless (defined $parent_anchor) {
@@ -501,8 +489,9 @@ sub html_footer {
         } else {
                 $irt = '';
         }
-
-        $irt . qq(<a\nhref="$rhref">reply</a>) . $idx;
+        $rhref ||= '#R';
+        $irt .= qq(<a\nhref="$rhref">reply</a>);
+        $irt .= $idx;
 }
 
 sub linkify_ref_nosrch {
diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm
index d26b69c0..5fa4e380 100644
--- a/lib/PublicInbox/WWW.pm
+++ b/lib/PublicInbox/WWW.pm
@@ -22,7 +22,7 @@ require PublicInbox::Git;
 use PublicInbox::GitHTTPBackend;
 our $INBOX_RE = qr!\A/([\w\.\-]+)!;
 our $MID_RE = qr!([^/]+)!;
-our $END_RE = qr!(T/|t/|R/|t\.mbox(?:\.gz)?|t\.atom|raw|)!;
+our $END_RE = qr!(T/|t/|t\.mbox(?:\.gz)?|t\.atom|raw|)!;
 our $ATTACH_RE = qr!(\d[\.\d]*)-([[:alnum:]][\w\.-]+[[:alnum:]])!i;
 
 sub new {
@@ -88,11 +88,15 @@ sub call {
                 invalid_inbox_mid($self, $ctx, $1, $2) ||
                         get_attach($ctx, $idx, $fn);
         # in case people leave off the trailing slash:
-        } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/(T|t|R)\z!o) {
+        } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/(T|t)\z!o) {
                 my ($inbox, $mid, $suffix) = ($1, $2, $3);
                 $suffix .= $suffix =~ /\A[tT]\z/ ? '/#u' : '/';
                 r301($ctx, $inbox, $mid, $suffix);
 
+        } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/R/?\z!o) {
+                my ($inbox, $mid) = ($1, $2);
+                r301($ctx, $inbox, $mid, '#R');
+
         } elsif ($path_info =~ m!$INBOX_RE/$MID_RE/f/?\z!o) {
                 r301($ctx, $1, $2);
 
@@ -227,19 +231,6 @@ sub get_mid_html {
           [ PublicInbox::View::msg_html($ctx, $mime, $foot) ] ];
 }
 
-# /$INBOX/$MESSAGE_ID/R/                   -> HTML content (fullquotes)
-sub get_reply_html {
-        my ($ctx) = @_;
-        my $x = mid2blob($ctx) or return r404($ctx);
-
-        require PublicInbox::View;
-        my $foot = footer($ctx);
-        require Email::MIME;
-        my $hdr = Email::MIME->new($x)->header_obj;
-        [ 200, [ 'Content-Type' => 'text/html; charset=UTF-8' ],
-          [ PublicInbox::View::msg_reply($ctx, $hdr, $foot)] ];
-}
-
 # /$INBOX/$MESSAGE_ID/t/
 sub get_thread {
         my ($ctx, $flat) = @_;
@@ -427,8 +418,6 @@ sub msg_page {
 
         # legacy, but no redirect for compatibility:
         'f/' eq $e and return get_mid_html($ctx);
-
-        'R/' eq $e and return get_reply_html($ctx);
         r404($ctx);
 }