It's important to keep HTML source readable to folks who prefer
to read raw HTML. This should improve readability of the HTML
source by keeping line length in check without wasting bytes.
use constant {
DATEFMT => '%Y-%m-%dT%H:%M:%SZ', # atom standard
MAX_PER_PAGE => 25, # this needs to be tunable
use constant {
DATEFMT => '%Y-%m-%dT%H:%M:%SZ', # atom standard
MAX_PER_PAGE => 25, # this needs to be tunable
- PRE_WRAP => '<pre style="white-space:pre-wrap">',
+ PRE_WRAP => "<pre\nstyle=\"white-space:pre-wrap\">",
my $th = PublicInbox::Thread->new(@messages);
$th->thread;
my $html = "<html><head><title>$title</title>" .
my $th = PublicInbox::Thread->new(@messages);
$th->thread;
my $html = "<html><head><title>$title</title>" .
- '<link rel="alternate" title="Atom feed" href="' .
- $feed_opts->{atomurl} . '" type="application/atom+xml"/>' .
+ '<link rel="alternate" title="Atom feed"' . "\nhref=\"" .
+ $feed_opts->{atomurl} . "\"\ntype=\"application/atom+xml\"/>" .
'</head><body>' . PRE_WRAP;
# sort child messages in chronological order
'</head><body>' . PRE_WRAP;
# sort child messages in chronological order
# TODO: make these constants tunable
use constant MAX_INLINE_QUOTED => 12; # half an 80x24 terminal
use constant MAX_TRUNC_LEN => 72;
# TODO: make these constants tunable
use constant MAX_INLINE_QUOTED => 12; # half an 80x24 terminal
use constant MAX_TRUNC_LEN => 72;
-use constant PRE_WRAP => '<pre style="white-space:pre-wrap">';
+use constant PRE_WRAP => "<pre\nstyle=\"white-space:pre-wrap\">";
*ascii_html = *PublicInbox::Hval::ascii_html;
*ascii_html = *PublicInbox::Hval::ascii_html;
}
$ts = POSIX::strftime($fmt, gmtime($ts));
}
$ts = POSIX::strftime($fmt, gmtime($ts));
- $rv .= "$pfx<a name=\"$name\"><b>$subj</b> $from - $ts</a>\n\n";
+ $rv .= "$pfx<a\nname=\"$name\"><b>$subj</b> $from - $ts</a>\n\n";
my $irp = $header_obj->header_raw('In-Reply-To');
my ($anchor_idx, $anchor);
my $irp = $header_obj->header_raw('In-Reply-To');
my ($anchor_idx, $anchor);
}
} while (@sum && length($cur) < MAX_TRUNC_LEN);
$cur =~ s/ \z/ .../;
}
} while (@sum && length($cur) < MAX_TRUNC_LEN);
$cur =~ s/ \z/ .../;
- "> <<a href=\"${full_pfx}#q${part_nr}_" . $n++ .
+ "> <<a\nhref=\"${full_pfx}#q${part_nr}_" . $n++ .
"\">$cur<\/a>>\n";
} else {
$cur;
"\">$cur<\/a>>\n";
} else {
$cur;
my $cur = $1;
my @lines = split(/\n/, $cur);
if (@lines > MAX_INLINE_QUOTED) {
my $cur = $1;
my @lines = split(/\n/, $cur);
if (@lines > MAX_INLINE_QUOTED) {
- "<a name=q${part_nr}_" . $n++ . ">$cur</a>";
+ "<a\nname=q${part_nr}_" . $n++ . ">$cur</a>";
$rv .= 'Message-ID: <' . $mid->as_html . '> ';
my $href = $mid->as_href;
$href = "../m/$href" unless $full_pfx;
$rv .= 'Message-ID: <' . $mid->as_html . '> ';
my $href = $mid->as_href;
$href = "../m/$href" unless $full_pfx;
- $rv .= "(<a href=\"$href.txt\">original</a>)\n";
+ $rv .= "(<a\nhref=\"$href.txt\">original</a>)\n";
}
my $irp = $header_obj->header_raw('In-Reply-To');
}
my $irp = $header_obj->header_raw('In-Reply-To');
my $html = $v->as_html;
my $href = $v->as_href;
$rv .= "In-Reply-To: <";
my $html = $v->as_html;
my $href = $v->as_href;
$rv .= "In-Reply-To: <";
- $rv .= "<a href=\"$href.html\">$html</a>>\n";
+ $rv .= "<a\nhref=\"$href.html\">$html</a>>\n";
}
my $refs = $header_obj->header_raw('References');
}
my $refs = $header_obj->header_raw('References');
my $v = PublicInbox::Hval->new_msgid($_);
my $html = $v->as_html;
my $href = $v->as_href;
my $v = PublicInbox::Hval->new_msgid($_);
my $html = $v->as_html;
my $href = $v->as_href;
- "<<a href=\"$href.html\">$html</a>>";
+ "<<a\nhref=\"$href.html\">$html</a>>";
if ($nurls == 0) {
$urls = '($GIT_DIR/cloneurl missing)';
} elsif ($nurls == 1) {
if ($nurls == 0) {
$urls = '($GIT_DIR/cloneurl missing)';
} elsif ($nurls == 1) {
- $urls = 'git URL for <a href="' . SSOMA_URL .
+ $urls = "git URL for <a\nhref=\"" . SSOMA_URL .
'">ssoma</a>: ' . $urls[0];
} else {
'">ssoma</a>: ' . $urls[0];
} else {
- $urls = 'git URLs for <a href="' . SSOMA_URL .
+ $urls = "git URLs for <a\nhref=\"" . SSOMA_URL .
"\">ssoma</a>:\n" . join("\n", map { "\t$_" } @urls);
}
"\">ssoma</a>:\n" . join("\n", map { "\t$_" } @urls);
}
$addr = $addr->[0]; # first address is primary
}
$addr = $addr->[0]; # first address is primary
}
- $addr = "<a href=\"mailto:$addr\">$addr</a>";
+ $addr = "<a\nhref=\"mailto:$addr\">$addr</a>";
$desc = $desc;
join("\n",
'- ' . $desc,
$desc = $desc;
join("\n",
'- ' . $desc,
- 'A <a href="' . PI_URL . '">public-inbox</a>, ' .
+ "A <a\nhref=\"" . PI_URL . '">public-inbox</a>, ' .
'anybody may post in plain-text (not HTML):',
$addr,
$urls
'anybody may post in plain-text (not HTML):',
$addr,
$urls
my $res = $cb->(GET($pfx . '/atom.xml'));
is(200, $res->code, 'success response received for atom');
like($res->content,
my $res = $cb->(GET($pfx . '/atom.xml'));
is(200, $res->code, 'success response received for atom');
like($res->content,
- qr!link href="\Q$pfx\E/m/blah%40example\.com\.html"!,
+ qr!link\s+href="\Q$pfx\E/m/blah%40example\.com\.html"!s,
'atom feed generated correct URL');
});
}
'atom feed generated correct URL');
});
}
my $html = PublicInbox::View->msg_html($s);
# ghetto tests
my $html = PublicInbox::View->msg_html($s);
# ghetto tests
- like($html, qr!<a href="\.\./m/hello%40!s, "MID link present");
+ like($html, qr!<a\nhref="\.\./m/hello%40!s, "MID link present");
like($html, qr/hello world\b/, "body present");
like($html, qr/> keep this inline/, "short quoted text is inline");
like($html, qr/hello world\b/, "body present");
like($html, qr/> keep this inline/, "short quoted text is inline");
- like($html, qr/<a name=[^>]+>> Long and wordy/,
+ like($html, qr/<a\nname=[^>]+>> Long and wordy/,
"long quoted text is anchored");
# short page
my $pfx = "http://example.com/test/f";
my $short = PublicInbox::View->msg_html($s, $pfx);
"long quoted text is anchored");
# short page
my $pfx = "http://example.com/test/f";
my $short = PublicInbox::View->msg_html($s, $pfx);
- like($short, qr!<a href="hello%40!s, "MID link present");
+ like($short, qr!<a\nhref="hello%40!s, "MID link present");
like($short, qr/\n> keep this inline/,
"short quoted text is inline");
like($short, qr/\n> keep this inline/,
"short quoted text is inline");
- like($short, qr/<a href="\Q$pfx\E#[^>]+>Long and wordy/,
+ 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");
}
"long quoted text is made into a link");
ok(length($short) < length($html), "short page is shorter");
}