From e06797ae541b8fcb65030531d854184e7ba2c70d Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 13 Apr 2016 03:04:11 +0000 Subject: www: stop generating /$MESSAGE_ID/f/ links 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 1be4d18e..980b2eab 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 54fa6e5d..096bff9d 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 2f718b70..77b42b20 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 (raw)\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
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; - "> [$cur]\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; - "" . $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() . $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 73b7d0bb..2096b73e 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 568ab303..2da741a8 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>> 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!