diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/PublicInbox/View.pm | 43 | ||||
-rw-r--r-- | lib/PublicInbox/WWW.pm | 23 |
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: <" . $mid->as_html . ">\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); } |