Rename inline comment views to "PHUIDiff" and give them a base class
Summary: Ref T2009. These classes are "Differential" now, but are used elsewhere in diff infrastructure (e.g., Diffusion). - Rename them to "PHUIDiff". - Move them to "src/infrastructure/". - Give them a base class. Test Plan: Interacted with inlines in unified and side-by-side views. Reviewers: btrahan Subscribers: epriestley Maniphest Tasks: T2009 Differential Revision: https://secure.phabricator.com/D11996
This commit is contained in:
@@ -196,7 +196,7 @@ abstract class PhabricatorInlineCommentController
|
||||
$request = $this->getRequest();
|
||||
$user = $request->getUser();
|
||||
|
||||
$edit_dialog = id(new DifferentialInlineCommentEditView())
|
||||
$edit_dialog = id(new PHUIDiffInlineCommentEditView())
|
||||
->setUser($user)
|
||||
->setSubmitURI($request->getRequestURI())
|
||||
->setOnRight($this->getIsOnRight())
|
||||
@@ -233,7 +233,7 @@ abstract class PhabricatorInlineCommentController
|
||||
|
||||
$handles = $this->loadViewerHandles($phids);
|
||||
|
||||
$view = id(new DifferentialInlineCommentView())
|
||||
$view = id(new PHUIDiffInlineCommentDetailView())
|
||||
->setInlineComment($inline)
|
||||
->setOnRight($on_right)
|
||||
->setBuildScaffolding(true)
|
||||
|
||||
@@ -26,7 +26,7 @@ abstract class PhabricatorInlineCommentPreviewController
|
||||
|
||||
$views = array();
|
||||
foreach ($inlines as $inline) {
|
||||
$view = new DifferentialInlineCommentView();
|
||||
$view = new PHUIDiffInlineCommentDetailView();
|
||||
$view->setInlineComment($inline);
|
||||
$view->setMarkupEngine($engine);
|
||||
$view->setHandles($handles);
|
||||
|
||||
293
src/infrastructure/diff/view/PHUIDiffInlineCommentDetailView.php
Normal file
293
src/infrastructure/diff/view/PHUIDiffInlineCommentDetailView.php
Normal file
@@ -0,0 +1,293 @@
|
||||
<?php
|
||||
|
||||
final class PHUIDiffInlineCommentDetailView
|
||||
extends PHUIDiffInlineCommentView {
|
||||
|
||||
private $inlineComment;
|
||||
private $onRight;
|
||||
private $buildScaffolding;
|
||||
private $handles;
|
||||
private $markupEngine;
|
||||
private $editable;
|
||||
private $preview;
|
||||
private $allowReply;
|
||||
private $renderer;
|
||||
|
||||
public function setInlineComment(PhabricatorInlineCommentInterface $comment) {
|
||||
$this->inlineComment = $comment;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setOnRight($on_right) {
|
||||
$this->onRight = $on_right;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setBuildScaffolding($scaffold) {
|
||||
$this->buildScaffolding = $scaffold;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setHandles(array $handles) {
|
||||
assert_instances_of($handles, 'PhabricatorObjectHandle');
|
||||
$this->handles = $handles;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setMarkupEngine(PhabricatorMarkupEngine $engine) {
|
||||
$this->markupEngine = $engine;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setEditable($editable) {
|
||||
$this->editable = $editable;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setPreview($preview) {
|
||||
$this->preview = $preview;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setAllowReply($allow_reply) {
|
||||
$this->allowReply = $allow_reply;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setRenderer($renderer) {
|
||||
$this->renderer = $renderer;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getRenderer() {
|
||||
return $this->renderer;
|
||||
}
|
||||
|
||||
public function render() {
|
||||
|
||||
$inline = $this->inlineComment;
|
||||
|
||||
$start = $inline->getLineNumber();
|
||||
$length = $inline->getLineLength();
|
||||
if ($length) {
|
||||
$end = $start + $length;
|
||||
$line = 'Lines '.number_format($start).'-'.number_format($end);
|
||||
} else {
|
||||
$line = 'Line '.number_format($start);
|
||||
}
|
||||
|
||||
$metadata = array(
|
||||
'id' => $inline->getID(),
|
||||
'number' => $inline->getLineNumber(),
|
||||
'length' => $inline->getLineLength(),
|
||||
'on_right' => $this->onRight,
|
||||
'original' => $inline->getContent(),
|
||||
);
|
||||
|
||||
$sigil = 'differential-inline-comment';
|
||||
if ($this->preview) {
|
||||
$sigil = $sigil.' differential-inline-comment-preview';
|
||||
}
|
||||
|
||||
$content = $inline->getContent();
|
||||
$handles = $this->handles;
|
||||
|
||||
$links = array();
|
||||
|
||||
$is_synthetic = false;
|
||||
if ($inline->getSyntheticAuthor()) {
|
||||
$is_synthetic = true;
|
||||
}
|
||||
|
||||
$is_draft = false;
|
||||
if ($inline->isDraft() && !$is_synthetic) {
|
||||
$links[] = pht('Not Submitted Yet');
|
||||
$is_draft = true;
|
||||
}
|
||||
|
||||
if (!$this->preview) {
|
||||
$links[] = javelin_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => '#',
|
||||
'mustcapture' => true,
|
||||
'sigil' => 'differential-inline-prev',
|
||||
),
|
||||
pht('Previous'));
|
||||
|
||||
$links[] = javelin_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => '#',
|
||||
'mustcapture' => true,
|
||||
'sigil' => 'differential-inline-next',
|
||||
),
|
||||
pht('Next'));
|
||||
|
||||
if ($this->allowReply) {
|
||||
|
||||
if (!$is_synthetic) {
|
||||
|
||||
// NOTE: No product reason why you can't reply to these, but the reply
|
||||
// mechanism currently sends the inline comment ID to the server, not
|
||||
// file/line information, and synthetic comments don't have an inline
|
||||
// comment ID.
|
||||
|
||||
$links[] = javelin_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => '#',
|
||||
'mustcapture' => true,
|
||||
'sigil' => 'differential-inline-reply',
|
||||
),
|
||||
pht('Reply'));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
$anchor_name = 'inline-'.$inline->getID();
|
||||
|
||||
if ($this->editable && !$this->preview) {
|
||||
$links[] = javelin_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => '#',
|
||||
'mustcapture' => true,
|
||||
'sigil' => 'differential-inline-edit',
|
||||
),
|
||||
pht('Edit'));
|
||||
$links[] = javelin_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => '#',
|
||||
'mustcapture' => true,
|
||||
'sigil' => 'differential-inline-delete',
|
||||
),
|
||||
pht('Delete'));
|
||||
} else if ($this->preview) {
|
||||
$links[] = javelin_tag(
|
||||
'a',
|
||||
array(
|
||||
'meta' => array(
|
||||
'anchor' => $anchor_name,
|
||||
),
|
||||
'sigil' => 'differential-inline-preview-jump',
|
||||
),
|
||||
pht('Not Visible'));
|
||||
$links[] = javelin_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => '#',
|
||||
'mustcapture' => true,
|
||||
'sigil' => 'differential-inline-delete',
|
||||
),
|
||||
pht('Delete'));
|
||||
}
|
||||
|
||||
if ($links) {
|
||||
$links = phutil_tag(
|
||||
'span',
|
||||
array('class' => 'differential-inline-comment-links'),
|
||||
phutil_implode_html(" \xC2\xB7 ", $links));
|
||||
} else {
|
||||
$links = null;
|
||||
}
|
||||
|
||||
$content = $this->markupEngine->getOutput(
|
||||
$inline,
|
||||
PhabricatorInlineCommentInterface::MARKUP_FIELD_BODY);
|
||||
|
||||
if ($this->preview) {
|
||||
$anchor = null;
|
||||
} else {
|
||||
$anchor = phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'name' => $anchor_name,
|
||||
'id' => $anchor_name,
|
||||
'class' => 'differential-inline-comment-anchor',
|
||||
),
|
||||
'');
|
||||
}
|
||||
|
||||
$classes = array(
|
||||
'differential-inline-comment',
|
||||
);
|
||||
if ($is_draft) {
|
||||
$classes[] = 'differential-inline-comment-unsaved-draft';
|
||||
}
|
||||
if ($is_synthetic) {
|
||||
$classes[] = 'differential-inline-comment-synthetic';
|
||||
}
|
||||
$classes = implode(' ', $classes);
|
||||
|
||||
if ($is_synthetic) {
|
||||
$author = $inline->getSyntheticAuthor();
|
||||
} else {
|
||||
$author = $handles[$inline->getAuthorPHID()]->getName();
|
||||
}
|
||||
|
||||
$line = phutil_tag(
|
||||
'span',
|
||||
array('class' => 'differential-inline-comment-line'),
|
||||
$line);
|
||||
|
||||
$markup = javelin_tag(
|
||||
'div',
|
||||
array(
|
||||
'class' => $classes,
|
||||
'sigil' => $sigil,
|
||||
'meta' => $metadata,
|
||||
),
|
||||
array(
|
||||
phutil_tag_div('differential-inline-comment-head', array(
|
||||
$anchor,
|
||||
$links,
|
||||
' ',
|
||||
$line,
|
||||
' ',
|
||||
$author,
|
||||
)),
|
||||
phutil_tag_div(
|
||||
'differential-inline-comment-content',
|
||||
phutil_tag_div('phabricator-remarkup', $content)),
|
||||
));
|
||||
|
||||
return $this->scaffoldMarkup($markup);
|
||||
}
|
||||
|
||||
private function scaffoldMarkup($markup) {
|
||||
if (!$this->buildScaffolding) {
|
||||
return $markup;
|
||||
}
|
||||
|
||||
if ($this->renderer == '1up') {
|
||||
$cells = array(
|
||||
phutil_tag('th', array()),
|
||||
phutil_tag('th', array()),
|
||||
phutil_tag(
|
||||
'td',
|
||||
array('colspan' => 3, 'class' => 'right3'),
|
||||
$markup),
|
||||
);
|
||||
} else {
|
||||
$left_markup = !$this->onRight ? $markup : '';
|
||||
$right_markup = $this->onRight ? $markup : '';
|
||||
|
||||
$cells = array(
|
||||
phutil_tag('th', array()),
|
||||
phutil_tag('td', array('class' => 'left'), $left_markup),
|
||||
phutil_tag('th', array()),
|
||||
phutil_tag(
|
||||
'td',
|
||||
array('colspan' => 3, 'class' => 'right3'),
|
||||
$right_markup),
|
||||
);
|
||||
}
|
||||
|
||||
$row = phutil_tag('tr', array(), $cells);
|
||||
return phutil_tag('table', array(), $row);
|
||||
}
|
||||
|
||||
}
|
||||
171
src/infrastructure/diff/view/PHUIDiffInlineCommentEditView.php
Normal file
171
src/infrastructure/diff/view/PHUIDiffInlineCommentEditView.php
Normal file
@@ -0,0 +1,171 @@
|
||||
<?php
|
||||
|
||||
final class PHUIDiffInlineCommentEditView
|
||||
extends PHUIDiffInlineCommentView {
|
||||
|
||||
private $inputs = array();
|
||||
private $uri;
|
||||
private $title;
|
||||
private $onRight;
|
||||
private $number;
|
||||
private $length;
|
||||
private $renderer;
|
||||
|
||||
public function setRenderer($renderer) {
|
||||
$this->renderer = $renderer;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getRenderer() {
|
||||
return $this->renderer;
|
||||
}
|
||||
|
||||
public function addHiddenInput($key, $value) {
|
||||
$this->inputs[] = array($key, $value);
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setSubmitURI($uri) {
|
||||
$this->uri = $uri;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setTitle($title) {
|
||||
$this->title = $title;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setOnRight($on_right) {
|
||||
$this->onRight = $on_right;
|
||||
$this->addHiddenInput('on_right', $on_right);
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setNumber($number) {
|
||||
$this->number = $number;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function setLength($length) {
|
||||
$this->length = $length;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function render() {
|
||||
if (!$this->uri) {
|
||||
throw new Exception('Call setSubmitURI() before render()!');
|
||||
}
|
||||
if (!$this->user) {
|
||||
throw new Exception('Call setUser() before render()!');
|
||||
}
|
||||
|
||||
$content = phabricator_form(
|
||||
$this->user,
|
||||
array(
|
||||
'action' => $this->uri,
|
||||
'method' => 'POST',
|
||||
'sigil' => 'inline-edit-form',
|
||||
),
|
||||
array(
|
||||
$this->renderInputs(),
|
||||
$this->renderBody(),
|
||||
));
|
||||
|
||||
if ($this->renderer == '1up') {
|
||||
$cells = array(
|
||||
phutil_tag('th', array()),
|
||||
phutil_tag('th', array()),
|
||||
phutil_tag(
|
||||
'td',
|
||||
array('colspan' => 3, 'class' => 'right3'),
|
||||
$content),
|
||||
);
|
||||
} else {
|
||||
$cells = array(
|
||||
phutil_tag('th', array()),
|
||||
phutil_tag(
|
||||
'td',
|
||||
array('class' => 'left'),
|
||||
$this->onRight ? null : $content),
|
||||
phutil_tag('th', array()),
|
||||
phutil_tag(
|
||||
'td',
|
||||
array('colspan' => 3, 'class' => 'right3'),
|
||||
$this->onRight ? $content : null),
|
||||
);
|
||||
}
|
||||
|
||||
$row = phutil_tag('tr', array('class' => 'inline-comment-splint'), $cells);
|
||||
return phutil_tag('table', array(), $row);
|
||||
}
|
||||
|
||||
private function renderInputs() {
|
||||
$out = array();
|
||||
foreach ($this->inputs as $input) {
|
||||
list($name, $value) = $input;
|
||||
$out[] = phutil_tag(
|
||||
'input',
|
||||
array(
|
||||
'type' => 'hidden',
|
||||
'name' => $name,
|
||||
'value' => $value,
|
||||
));
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
||||
private function renderBody() {
|
||||
$buttons = array();
|
||||
|
||||
$buttons[] = phutil_tag('button', array(), pht('Ready'));
|
||||
$buttons[] = javelin_tag(
|
||||
'button',
|
||||
array(
|
||||
'sigil' => 'inline-edit-cancel',
|
||||
'class' => 'grey',
|
||||
),
|
||||
pht('Cancel'));
|
||||
|
||||
$title = phutil_tag(
|
||||
'div',
|
||||
array(
|
||||
'class' => 'differential-inline-comment-edit-title',
|
||||
),
|
||||
$this->title);
|
||||
|
||||
$body = phutil_tag(
|
||||
'div',
|
||||
array(
|
||||
'class' => 'differential-inline-comment-edit-body',
|
||||
),
|
||||
$this->renderChildren());
|
||||
|
||||
$edit = phutil_tag(
|
||||
'div',
|
||||
array(
|
||||
'class' => 'differential-inline-comment-edit-buttons',
|
||||
),
|
||||
array(
|
||||
$buttons,
|
||||
phutil_tag('div', array('style' => 'clear: both'), ''),
|
||||
));
|
||||
|
||||
return javelin_tag(
|
||||
'div',
|
||||
array(
|
||||
'class' => 'differential-inline-comment-edit',
|
||||
'sigil' => 'differential-inline-comment',
|
||||
'meta' => array(
|
||||
'on_right' => $this->onRight,
|
||||
'number' => $this->number,
|
||||
'length' => $this->length,
|
||||
),
|
||||
),
|
||||
array(
|
||||
$title,
|
||||
$body,
|
||||
$edit,
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
|
||||
abstract class PHUIDiffInlineCommentView extends AphrontView {}
|
||||
Reference in New Issue
Block a user