mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-19 12:00:55 +01:00
Improve inline mail snippet rendering, possibly fixing Airmail?
Summary: Ref T10694. General improvements: - Remove leading empty lines from context snippets. - Remove trailing empty lines from context snippets. - If we removed everything, render a note. - Try using `style` instead of `<pre>`? My thinking is that maybe Airmail has weird default rules for `<pre>`, since that's the biggest / most obvious thing that's different about this element to me. Test Plan: Viewed normal comments locally, faked a comment on an empty line in the middle of a lot of other empty lines. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10694 Differential Revision: https://secure.phabricator.com/D15864
This commit is contained in:
parent
371051ff37
commit
412fc34557
2 changed files with 53 additions and 10 deletions
|
@ -376,13 +376,15 @@ final class DifferentialInlineCommentMailView
|
|||
if ($is_html) {
|
||||
$style = array(
|
||||
'font: 11px/15px "Menlo", "Consolas", "Monaco", monospace;',
|
||||
'white-space: pre-wrap;',
|
||||
'clear: both;',
|
||||
'padding: 4px 0;',
|
||||
'margin: 0;',
|
||||
);
|
||||
|
||||
$style = implode(' ', $style);
|
||||
$patch = phutil_tag(
|
||||
'pre',
|
||||
'div',
|
||||
array(
|
||||
'style' => $style,
|
||||
),
|
||||
|
|
|
@ -50,6 +50,7 @@ final class DifferentialChangesetOneUpMailRenderer
|
|||
|
||||
protected function renderPrimitives(array $primitives, $rows) {
|
||||
$out = array();
|
||||
|
||||
foreach ($primitives as $k => $p) {
|
||||
$type = $p['type'];
|
||||
switch ($type) {
|
||||
|
@ -73,26 +74,66 @@ final class DifferentialChangesetOneUpMailRenderer
|
|||
}
|
||||
}
|
||||
|
||||
$style = "padding: 0 8px; margin: 0 4px; {$style}";
|
||||
|
||||
$out[] = phutil_tag(
|
||||
'div',
|
||||
array(
|
||||
$out[] = array(
|
||||
'style' => $style,
|
||||
),
|
||||
$p['render']);
|
||||
'render' => $p['render'],
|
||||
'text' => (string)$p['render'],
|
||||
);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Remove all leading and trailing empty lines, since these just look kind
|
||||
// of weird in mail.
|
||||
foreach ($out as $key => $line) {
|
||||
if (!strlen(trim($line['text']))) {
|
||||
unset($out[$key]);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$keys = array_reverse(array_keys($out));
|
||||
foreach ($keys as $key) {
|
||||
$line = $out[$key];
|
||||
if (!strlen(trim($line['text']))) {
|
||||
unset($out[$key]);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If the user has commented on an empty line in the middle of a bunch of
|
||||
// other empty lines, emit an explicit marker instead of just rendering
|
||||
// nothing.
|
||||
if (!$out) {
|
||||
$out[] = array(
|
||||
'style' => 'color: #888888;',
|
||||
'render' => pht('(Empty.)'),
|
||||
);
|
||||
}
|
||||
|
||||
$render = array();
|
||||
foreach ($out as $line) {
|
||||
$style = $line['style'];
|
||||
$style = "padding: 0 8px; margin: 0 4px; {$style}";
|
||||
|
||||
$render[] = phutil_tag(
|
||||
'div',
|
||||
array(
|
||||
'style' => $style,
|
||||
),
|
||||
$line['render']);
|
||||
}
|
||||
|
||||
$style_map = id(new PhabricatorDefaultSyntaxStyle())
|
||||
->getRemarkupStyleMap();
|
||||
|
||||
$styled_body = id(new PhutilPygmentizeParser())
|
||||
->setMap($style_map)
|
||||
->parse((string)hsprintf('%s', $out));
|
||||
->parse((string)hsprintf('%s', $render));
|
||||
|
||||
return phutil_safe_html($styled_body);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue