* [PATCH] view: inline message reply into message view
@ 2016-06-05 6:09 Eric Wong
0 siblings, 0 replies; 2+ messages in thread
From: Eric Wong @ 2016-06-05 6:09 UTC (permalink / raw)
To: spew
This should reduce link following for replies and improve
visibility. This should also reduce cache overhead/footprint
for crawlers.
---
lib/PublicInbox/View.pm | 32 +++++++++++++-------------------
lib/PublicInbox/WWW.pm | 23 ++++++-----------------
2 files changed, 19 insertions(+), 36 deletions(-)
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index ed40530..174268d 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -28,14 +28,14 @@ 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 ($ctx, $hdr) = @_;
my $s = $hdr->header('Subject');
$s = '(no subject)' if (!defined $s) || ($s eq '');
my $f = $hdr->header('From');
@@ -49,15 +49,10 @@ sub msg_reply {
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>".
+ "Reply via email 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 +61,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 +116,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 +494,9 @@ sub html_footer {
} else {
$irt = '';
}
-
- $irt . qq(<a\nhref="$rhref">reply</a>) . $idx;
+ $rhref ||= qq(<a\nhref=#R>reply</a>);
+ $irt .= $rhref;
+ $irt .= $idx;
}
sub linkify_ref_nosrch {
diff --git a/lib/PublicInbox/WWW.pm b/lib/PublicInbox/WWW.pm
index d26b69c..5fa4e38 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);
}
--
EW
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [PATCH] view: inline message reply into message view
@ 2016-06-05 21:24 Eric Wong
0 siblings, 0 replies; 2+ messages in thread
From: Eric Wong @ 2016-06-05 21:24 UTC (permalink / raw)
To: spew
This should reduce link following for replies and improve
visibility. This should also reduce cache overhead/footprint
for crawlers.
---
lib/PublicInbox/View.pm | 39 +++++++++++++--------------------------
lib/PublicInbox/WWW.pm | 23 ++++++-----------------
2 files changed, 19 insertions(+), 43 deletions(-)
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index ed40530..46a581b 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -28,36 +28,24 @@ 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 via email 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 +54,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 +109,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 +487,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 d26b69c..5fa4e38 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);
}
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-06-05 21:24 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-05 6:09 [PATCH] view: inline message reply into message view Eric Wong
-- strict thread matches above, loose matches on Subject: below --
2016-06-05 21:24 Eric Wong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).