X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FView.pm;h=dcaee1aeaeca6c8fdb8c6c57e9011693c04421f8;hb=aa0e67e63e58e0ee4fc3918bde25b9c04d48954a;hp=fd1bd7e2add29f423398dc6b32b6093a820537ea;hpb=319f46708b844aeeb4bf6308dd19ee1c5066d2af;p=public-inbox.git
diff --git a/lib/PublicInbox/View.pm b/lib/PublicInbox/View.pm
index fd1bd7e2..dcaee1ae 100644
--- a/lib/PublicInbox/View.pm
+++ b/lib/PublicInbox/View.pm
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2019 all contributors
+# Copyright (C) 2014-2020 all contributors
# License: AGPL-3.0+
#
# Used for displaying the HTML web interface.
@@ -29,8 +29,9 @@ sub msg_page_i {
my $more = $ctx->{more};
if ($nr == 1) {
# $more cannot be true w/o $smsg being defined:
- my $upfx = $more ? '../'.mid_escape($ctx->{smsg}->mid).'/' : '';
- multipart_text_as_html(delete $ctx->{mime}, $upfx, $ctx);
+ $ctx->{mhref} = $more ? '../'.mid_escape($ctx->{smsg}->mid).'/'
+ : '';
+ multipart_text_as_html(delete $ctx->{mime}, $ctx);
${delete $ctx->{obuf}} .= '
';
} elsif ($more) {
++$ctx->{end_nr};
@@ -83,10 +84,10 @@ sub msg_page_more {
my $next = $ibx->over->next_by_mid($ctx->{mid}, \$id, \$prev);
$ctx->{more} = $next ? [ $id, $prev, $next ] : undef;
return '' unless $smsg;
- my $upfx = '../' . mid_escape($smsg->mid) . '/';
+ $ctx->{mhref} = '../' . mid_escape($smsg->mid) . '/';
my $mime = delete $smsg->{mime};
_msg_page_prepare_obuf($mime->header_obj, $ctx, $nr);
- multipart_text_as_html($mime, $upfx, $ctx);
+ multipart_text_as_html($mime, $ctx);
${delete $ctx->{obuf}} .= '
';
}
@@ -486,23 +487,19 @@ sub thread_html_i { # PublicInbox::WwwStream::getline callback
}
sub multipart_text_as_html {
- my (undef, $mhref, $ctx) = @_; # $mime = $_[0]
- $ctx->{mhref} = $mhref;
+ # ($mime, $ctx) = @_; # msg_iter will do "$_[0] = undef"
# scan through all parts, looking for displayable text
- msg_iter($_[0], \&add_text_body, $ctx, 1);
+ msg_iter($_[0], \&add_text_body, $_[1], 1);
}
sub flush_quote {
my ($s, $l, $quot) = @_;
- # show everything in the full version with anchor from
- # short version (see above)
- my $rv = $l->linkify_1($$quot);
+ my $rv = $l->to_html($$quot);
# we use a here to allow users to specify their own
# color for quoted text
- $rv = $l->linkify_2(ascii_html($rv));
$$quot = undef;
$$s .= qq() . $rv . ''
}
@@ -565,7 +562,7 @@ sub add_text_body { # callback for msg_iter
$idx[0] = $upfx . $idx[0] if $upfx ne '';
$ctx->{-apfx} = join('/', @idx);
$ctx->{-anchors} = {}; # attr => filename
- $ctx->{-diff} = $diff = [];
+ $diff = 1;
delete $ctx->{-long_path};
my $spfx;
if ($ibx->{-repo_objs}) {
@@ -598,18 +595,15 @@ sub add_text_body { # callback for msg_iter
attach_link($ctx, $ct, $p, $fn, $err);
$$rv .= "\n";
}
- my $l = PublicInbox::Linkify->new;
+ my $l = $ctx->{-linkify} //= PublicInbox::Linkify->new;
foreach my $cur (@sections) {
if ($cur =~ /\A>/) {
flush_quote($rv, $l, \$cur);
} elsif ($diff) {
- @$diff = split(/^/m, $cur);
- $cur = undef;
- flush_diff($rv, $ctx, $l);
+ flush_diff($rv, $ctx, \$cur);
} else {
# regular lines, OK
- $l->linkify_1($cur);
- $$rv .= $l->linkify_2(ascii_html($cur));
+ $$rv .= $l->to_html($cur);
$cur = undef;
}
}