From: Eric Wong <e@80x24.org>
To: meta@public-inbox.org
Subject: [PATCH] www: stop generating /$MESSAGE_ID/f/ links
Date: Wed, 13 Apr 2016 03:04:11 +0000 [thread overview]
Message-ID: <20160413030411.1375-1-e@80x24.org> (raw)
Quote-folding can be detrimental as it fails to hide the
real problem of over-quoting.
Over-quoting wastes bandwidth and space for all readers, not
just WWW readers of the public-inbox. So hopefully removing
quote-folding support from the WWW interface can shame those
repliers into quoting only relevant portions of what they reply
to.
---
Documentation/design_www.txt | 4 +--
lib/PublicInbox/Feed.pm | 2 +-
lib/PublicInbox/View.pm | 75 ++++++++++----------------------------------
t/feed.t | 4 +--
t/view.t | 12 -------
5 files changed, 21 insertions(+), 76 deletions(-)
diff --git a/Documentation/design_www.txt b/Documentation/design_www.txt
index 1be4d18..980b2ea 100644
--- a/Documentation/design_www.txt
+++ b/Documentation/design_www.txt
@@ -11,13 +11,13 @@ URL naming
/$LISTNAME/$MESSAGE_ID/t.mbox.gz -> gzipped mbox of thread
### Stable endpoints
-/$LISTNAME/$MESSAGE_ID/ -> HTML content (short quotes)
+/$LISTNAME/$MESSAGE_ID/ -> HTML content
/$LISTNAME/$MESSAGE_ID -> 301 to /$LISTNAME/$MESSAGE_ID
/$LISTNAME/$MESSAGE_ID/raw -> raw mbox
-/$LISTNAME/$MESSAGE_ID/f/ -> HTML content (full quotes)
/$LISTNAME/$MESSAGE_ID/R/ -> HTML reply instructions
### Legacy endpoints (may be ambiguous given Message-IDs with similar suffixes)
+/$LISTNAME/$MESSAGE_ID/f/ -> HTML content
/$LISTNAME/m/$MESSAGE_ID/ -> 301 to /$LISTNAME/$MESSAGE_ID/
/$LISTNAME/m/$MESSAGE_ID.html -> 301 to /$LISTNAME/$MESSAGE_ID/
/$LISTNAME/m/$MESSAGE_ID.txt -> 301 to /$LISTNAME/$MESSAGE_ID/raw
diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm
index 54fa6e5..096bff9 100644
--- a/lib/PublicInbox/Feed.pm
+++ b/lib/PublicInbox/Feed.pm
@@ -316,7 +316,7 @@ sub add_to_feed {
defined $mid or return 0;
$mid = PublicInbox::Hval->new_msgid($mid);
my $href = $mid->as_href;
- my $content = PublicInbox::View->feed_entry($mime, "$midurl$href/f/");
+ my $content = PublicInbox::View->feed_entry($mime);
defined($content) or return 0;
$mime = undef;
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index 2f718b7..77b42b2 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -135,17 +135,11 @@ sub index_entry {
my $fh = $state->{fh};
$fh->write($rv .= "- $from @ $ts UTC (<a\nhref=\"$txt\">raw</a>)\n\n");
- my $fhref;
my $mhref = "${path}$href/";
- # show full message if it's our root message
- my $neq = $root_anchor ne $id;
- if ($neq || ($neq && $level != 0 && !$ctx->{flat})) {
- $fhref = "${path}$href/f/";
- }
# scan through all parts, looking for displayable text
$mime->walk_parts(sub {
- index_walk($fh, $_[0], $enc, \$part_nr, $fhref);
+ index_walk($fh, $_[0], $enc, \$part_nr);
});
$mime->body_set('');
$rv = "\n" . html_footer($hdr, 0, undef, $ctx, $mhref);
@@ -231,8 +225,8 @@ sub emit_thread_html {
}
sub index_walk {
- my ($fh, $part, $enc, $part_nr, $fhref) = @_;
- my $s = add_text_body($enc, $part, $part_nr, $fhref, 1);
+ my ($fh, $part, $enc, $part_nr) = @_;
+ my $s = add_text_body($enc, $part, $part_nr, 1);
return if $s eq '';
@@ -264,7 +258,7 @@ sub multipart_text_as_html {
# scan through all parts, looking for displayable text
$mime->walk_parts(sub {
my ($part) = @_;
- $part = add_text_body($enc, $part, \$part_nr, $full_pfx, 1);
+ $part = add_text_body($enc, $part, \$part_nr, 1);
$rv .= $part;
$rv .= "\n" if $part ne '';
});
@@ -283,55 +277,21 @@ sub add_filename_line {
}
sub flush_quote {
- my ($quot, $n, $part_nr, $full_pfx, $final, $do_anchor) = @_;
-
- # n.b.: do not use <blockquote> since it screws up alignment
- # w.r.t. unquoted text. Repliers may rely on pre-formatted
- # alignment to point out a certain word in quoted text.
- if ($full_pfx) {
- if (!$final && scalar(@$quot) <= MAX_INLINE_QUOTED) {
- # show quote inline
- my $l = PublicInbox::Linkify->new;
- my $rv = join('', map { $l->linkify_1($_) } @$quot);
- @$quot = ();
- $rv = ascii_html($rv);
- return $l->linkify_2($rv);
- }
+ my ($quot, $n, $part_nr, $final, $do_anchor) = @_;
- # show a short snippet of quoted text and link to full version:
- @$quot = map { s/^(?:>\s*)+//gm; $_ } @$quot;
- my $cur = join(' ', @$quot);
- @$quot = split(/\s+/, $cur);
- $cur = '';
- do {
- my $tmp = shift(@$quot);
- my $len = length($tmp) + length($cur);
- if ($len > MAX_TRUNC_LEN) {
- @$quot = ();
- } else {
- $cur .= $tmp . ' ';
- }
- } while (@$quot && length($cur) < MAX_TRUNC_LEN);
- @$quot = ();
- $cur =~ s/ \z/ .../s;
- $cur = ascii_html($cur);
- my $nr = ++$$n;
- "> [<a\nhref=\"$full_pfx#q${part_nr}_$nr\">$cur</a>]\n";
- } else {
- # show everything in the full version with anchor from
- # short version (see above)
- my $l = PublicInbox::Linkify->new;
- my $rv .= join('', map { $l->linkify_1($_) } @$quot);
- @$quot = ();
- $rv = ascii_html($rv);
- return $l->linkify_2($rv) unless $do_anchor;
- my $nr = ++$$n;
- "<a\nid=q${part_nr}_$nr></a>" . $l->linkify_2($rv);
- }
+ # show everything in the full version with anchor from
+ # short version (see above)
+ my $l = PublicInbox::Linkify->new;
+ my $rv .= join('', map { $l->linkify_1($_) } @$quot);
+ @$quot = ();
+ $rv = ascii_html($rv);
+ return $l->linkify_2($rv) unless $do_anchor;
+ my $nr = ++$$n;
+ qq(<a\nid="q${part_nr}_$nr"></a>) . $l->linkify_2($rv);
}
sub add_text_body {
- my ($enc_msg, $part, $part_nr, $full_pfx, $do_anchor) = @_;
+ my ($enc_msg, $part, $part_nr, $do_anchor) = @_;
return '' if $part->subparts;
my $ct = $part->content_type;
@@ -361,7 +321,7 @@ sub add_text_body {
# show the previously buffered quote inline
if (scalar @quot) {
$s .= flush_quote(\@quot, \$n, $$part_nr,
- $full_pfx, 0, $do_anchor);
+ 0, $do_anchor);
}
# regular line, OK
@@ -374,8 +334,7 @@ sub add_text_body {
}
}
if (scalar @quot) {
- $s .= flush_quote(\@quot, \$n, $$part_nr, $full_pfx, 1,
- $do_anchor);
+ $s .= flush_quote(\@quot, \$n, $$part_nr, 1, $do_anchor);
}
++$$part_nr;
diff --git a/t/feed.t b/t/feed.t
index 73b7d0b..2096b73 100644
--- a/t/feed.t
+++ b/t/feed.t
@@ -76,9 +76,7 @@ EOF
"id is set to default");
}
- unlike($feed, qr/drop me/, "long quoted text dropped");
- like($feed, qr!/\d%40example\.com/f/#q!,
- "/f/ url generated for long quoted text");
+ like($feed, qr/drop me/, "long quoted text kept");
like($feed, qr/inline me here/, "short quoted text kept");
like($feed, qr/keep me/, "unquoted text saved");
}
diff --git a/t/view.t b/t/view.t
index 568ab30..2da741a 100644
--- a/t/view.t
+++ b/t/view.t
@@ -49,18 +49,6 @@ EOF
like($html, qr/> keep this inline/, "short quoted text is inline");
like($html, qr/<a\nid=[^>]+><\/a>> Long and wordy/,
"long quoted text is anchored");
-
- # short page
- my $pfx = "../hello%40example.com/f/";
- $mime = Email::MIME->new($s);
- my $short = PublicInbox::View::msg_html(undef, $mime, $pfx);
- like($short, qr!<a\nhref="\.\./hello%40example\.com/f/!s,
- "MID link present");
- like($short, qr/\n> keep this inline/,
- "short quoted text is inline");
- like($short, qr/<a\nhref="\Q$pfx\E#[^>]+>Long and wordy/,
- "long quoted text is made into a link");
- ok(length($short) < length($html), "short page is shorter");
}
# multipart crap
--
EW
next reply other threads:[~2016-04-13 3:04 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-13 3:04 Eric Wong [this message]
2016-04-15 23:33 ` [PATCH 0/4] more quote-folding removal Eric Wong
2016-04-15 23:33 ` [PATCH 1/4] view: drop vestigial elements of quote folding Eric Wong
2016-04-15 23:33 ` [PATCH 2/4] doc: update design notes on WWW development Eric Wong
2016-04-15 23:33 ` [PATCH 3/4] www: redirect /$MESSAGE_ID/f/ endpoints Eric Wong
2016-04-15 23:33 ` [PATCH 4/4] view: thread skeleton tweaks Eric Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://public-inbox.org/README
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160413030411.1375-1-e@80x24.org \
--to=e@80x24.org \
--cc=meta@public-inbox.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).