Changeset View
Changeset View
Standalone View
Standalone View
src/infrastructure/diff/view/PHUIDiffInlineCommentDetailView.php
Show First 20 Lines • Show All 421 Lines • ▼ Show 20 Lines | public function render() { | ||||
$snippet = id(new PhutilUTF8StringTruncator()) | $snippet = id(new PhutilUTF8StringTruncator()) | ||||
->setMaximumGlyphs(96) | ->setMaximumGlyphs(96) | ||||
->truncateString($inline->getContent()); | ->truncateString($inline->getContent()); | ||||
$metadata['snippet'] = pht('%s: %s', $author, $snippet); | $metadata['snippet'] = pht('%s: %s', $author, $snippet); | ||||
$metadata['menuItems'] = $menu_items; | $metadata['menuItems'] = $menu_items; | ||||
$suggestion_content = $this->newSuggestionView($inline); | |||||
$inline_content = phutil_tag( | |||||
'div', | |||||
array( | |||||
'class' => 'phabricator-remarkup', | |||||
), | |||||
$content); | |||||
$markup = javelin_tag( | $markup = javelin_tag( | ||||
'div', | 'div', | ||||
array( | array( | ||||
'class' => $classes, | 'class' => $classes, | ||||
'sigil' => $sigil, | 'sigil' => $sigil, | ||||
'meta' => $metadata, | 'meta' => $metadata, | ||||
), | ), | ||||
array( | array( | ||||
javelin_tag( | javelin_tag( | ||||
'div', | 'div', | ||||
array( | array( | ||||
'class' => 'differential-inline-comment-head grouped', | 'class' => 'differential-inline-comment-head grouped', | ||||
'sigil' => 'differential-inline-header', | 'sigil' => 'differential-inline-header', | ||||
), | ), | ||||
array( | array( | ||||
$group_left, | $group_left, | ||||
$group_right, | $group_right, | ||||
)), | )), | ||||
phutil_tag_div( | phutil_tag( | ||||
'differential-inline-comment-content', | 'div', | ||||
phutil_tag_div('phabricator-remarkup', $content)), | array( | ||||
'class' => 'differential-inline-comment-content', | |||||
), | |||||
array( | |||||
$suggestion_content, | |||||
$inline_content, | |||||
)), | |||||
)); | )); | ||||
$summary = phutil_tag( | $summary = phutil_tag( | ||||
'div', | 'div', | ||||
array( | array( | ||||
'class' => 'differential-inline-summary', | 'class' => 'differential-inline-summary', | ||||
), | ), | ||||
array( | array( | ||||
Show All 27 Lines | private function canHide() { | ||||
if (!$inline->supportsHiding()) { | if (!$inline->supportsHiding()) { | ||||
return false; | return false; | ||||
} | } | ||||
return true; | return true; | ||||
} | } | ||||
private function newSuggestionView(PhabricatorInlineComment $inline) { | |||||
$content_state = $inline->getContentState(); | |||||
if (!$content_state->getContentHasSuggestion()) { | |||||
return null; | |||||
} | |||||
$context = $inline->getInlineContext(); | |||||
if (!$context) { | |||||
return null; | |||||
} | |||||
$head_lines = $context->getHeadLines(); | |||||
$head_lines = implode('', $head_lines); | |||||
$tail_lines = $context->getTailLines(); | |||||
$tail_lines = implode('', $tail_lines); | |||||
$old_lines = $context->getBodyLines(); | |||||
$old_lines = implode('', $old_lines); | |||||
$old_lines = $head_lines.$old_lines.$tail_lines; | |||||
if (strlen($old_lines) && !preg_match('/\n\z/', $old_lines)) { | |||||
$old_lines .= "\n"; | |||||
} | |||||
$new_lines = $content_state->getContentSuggestionText(); | |||||
$new_lines = $head_lines.$new_lines.$tail_lines; | |||||
if (strlen($new_lines) && !preg_match('/\n\z/', $new_lines)) { | |||||
$new_lines .= "\n"; | |||||
} | |||||
if ($old_lines === $new_lines) { | |||||
return null; | |||||
} | |||||
$raw_diff = id(new PhabricatorDifferenceEngine()) | |||||
->generateRawDiffFromFileContent($old_lines, $new_lines); | |||||
$raw_diff = phutil_split_lines($raw_diff); | |||||
$raw_diff = array_slice($raw_diff, 3); | |||||
$raw_diff = implode('', $raw_diff); | |||||
$view = phutil_tag( | |||||
'div', | |||||
array( | |||||
'class' => 'inline-suggestion-view PhabricatorMonospaced', | |||||
), | |||||
$raw_diff); | |||||
return $view; | |||||
} | |||||
} | } |