mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-23 15:22:41 +01:00
Reduce code duplication for inline "Undo"
Summary: Ref T2009. This is another almost-identical copy of the row scaffolding, which has the same 1up/2up bugs as the 8 other copies of this code. Turn the "undo" element into an InlineCommentView so we can scaffold it. Then, scaffold it with the same code as everything else. Test Plan: Hit "Undo", swapped from 1up to 2up, hit "undo" again, swapped back, tried left/right, everything rendered with proper scaffolding. Reviewers: btrahan, chad Reviewed By: chad Subscribers: epriestley Maniphest Tasks: T2009 Differential Revision: https://secure.phabricator.com/D12019
This commit is contained in:
parent
355142fcbf
commit
56a9709008
11 changed files with 101 additions and 48 deletions
|
@ -1139,6 +1139,7 @@ phutil_register_library_map(array(
|
||||||
'PHUIDiffInlineCommentEditView' => 'infrastructure/diff/view/PHUIDiffInlineCommentEditView.php',
|
'PHUIDiffInlineCommentEditView' => 'infrastructure/diff/view/PHUIDiffInlineCommentEditView.php',
|
||||||
'PHUIDiffInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffInlineCommentRowScaffold.php',
|
'PHUIDiffInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffInlineCommentRowScaffold.php',
|
||||||
'PHUIDiffInlineCommentTableScaffold' => 'infrastructure/diff/view/PHUIDiffInlineCommentTableScaffold.php',
|
'PHUIDiffInlineCommentTableScaffold' => 'infrastructure/diff/view/PHUIDiffInlineCommentTableScaffold.php',
|
||||||
|
'PHUIDiffInlineCommentUndoView' => 'infrastructure/diff/view/PHUIDiffInlineCommentUndoView.php',
|
||||||
'PHUIDiffInlineCommentView' => 'infrastructure/diff/view/PHUIDiffInlineCommentView.php',
|
'PHUIDiffInlineCommentView' => 'infrastructure/diff/view/PHUIDiffInlineCommentView.php',
|
||||||
'PHUIDiffOneUpInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffOneUpInlineCommentRowScaffold.php',
|
'PHUIDiffOneUpInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffOneUpInlineCommentRowScaffold.php',
|
||||||
'PHUIDiffTwoUpInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffTwoUpInlineCommentRowScaffold.php',
|
'PHUIDiffTwoUpInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffTwoUpInlineCommentRowScaffold.php',
|
||||||
|
@ -4371,6 +4372,7 @@ phutil_register_library_map(array(
|
||||||
'PHUIDiffInlineCommentEditView' => 'PHUIDiffInlineCommentView',
|
'PHUIDiffInlineCommentEditView' => 'PHUIDiffInlineCommentView',
|
||||||
'PHUIDiffInlineCommentRowScaffold' => 'AphrontView',
|
'PHUIDiffInlineCommentRowScaffold' => 'AphrontView',
|
||||||
'PHUIDiffInlineCommentTableScaffold' => 'AphrontView',
|
'PHUIDiffInlineCommentTableScaffold' => 'AphrontView',
|
||||||
|
'PHUIDiffInlineCommentUndoView' => 'PHUIDiffInlineCommentView',
|
||||||
'PHUIDiffInlineCommentView' => 'AphrontView',
|
'PHUIDiffInlineCommentView' => 'AphrontView',
|
||||||
'PHUIDiffOneUpInlineCommentRowScaffold' => 'PHUIDiffInlineCommentRowScaffold',
|
'PHUIDiffOneUpInlineCommentRowScaffold' => 'PHUIDiffInlineCommentRowScaffold',
|
||||||
'PHUIDiffTwoUpInlineCommentRowScaffold' => 'PHUIDiffInlineCommentRowScaffold',
|
'PHUIDiffTwoUpInlineCommentRowScaffold' => 'PHUIDiffInlineCommentRowScaffold',
|
||||||
|
|
|
@ -217,7 +217,8 @@ final class DifferentialChangesetViewController extends DifferentialController {
|
||||||
|
|
||||||
return id(new PhabricatorChangesetResponse())
|
return id(new PhabricatorChangesetResponse())
|
||||||
->setRenderedChangeset($parser->renderChangeset())
|
->setRenderedChangeset($parser->renderChangeset())
|
||||||
->setCoverage($coverage);
|
->setCoverage($coverage)
|
||||||
|
->setUndoTemplates($parser->getRenderer()->renderUndoTemplates());
|
||||||
}
|
}
|
||||||
|
|
||||||
$diff = $changeset->getDiff();
|
$diff = $changeset->getDiff();
|
||||||
|
|
|
@ -600,4 +600,19 @@ abstract class DifferentialChangesetRenderer {
|
||||||
return array($old, $new);
|
return array($old, $new);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function renderUndoTemplates() {
|
||||||
|
$views = array(
|
||||||
|
'l' => id(new PHUIDiffInlineCommentUndoView())->setIsOnRight(false),
|
||||||
|
'r' => id(new PHUIDiffInlineCommentUndoView())->setIsOnRight(true),
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($views as $key => $view) {
|
||||||
|
$scaffold = $this->getRowScaffoldForInline($view);
|
||||||
|
$views[$key] = id(new PHUIDiffInlineCommentTableScaffold())
|
||||||
|
->addRowScaffold($scaffold);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $views;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -208,6 +208,9 @@ final class DifferentialChangesetDetailView extends AphrontView {
|
||||||
$icon = id(new PHUIIconView())
|
$icon = id(new PHUIIconView())
|
||||||
->setIconFont($display_icon);
|
->setIconFont($display_icon);
|
||||||
|
|
||||||
|
$renderer = DifferentialChangesetHTMLRenderer::getHTMLRendererByKey(
|
||||||
|
$this->getRenderer());
|
||||||
|
|
||||||
return javelin_tag(
|
return javelin_tag(
|
||||||
'div',
|
'div',
|
||||||
array(
|
array(
|
||||||
|
@ -224,6 +227,7 @@ final class DifferentialChangesetDetailView extends AphrontView {
|
||||||
'ref' => $this->getRenderingRef(),
|
'ref' => $this->getRenderingRef(),
|
||||||
'autoload' => $this->getAutoload(),
|
'autoload' => $this->getAutoload(),
|
||||||
'loaded' => $this->getLoaded(),
|
'loaded' => $this->getLoaded(),
|
||||||
|
'undoTemplates' => $renderer->renderUndoTemplates(),
|
||||||
),
|
),
|
||||||
'class' => $class,
|
'class' => $class,
|
||||||
'id' => $id,
|
'id' => $id,
|
||||||
|
@ -252,4 +256,5 @@ final class DifferentialChangesetDetailView extends AphrontView {
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,6 +123,7 @@ final class DifferentialChangesetListView extends AphrontView {
|
||||||
'collapsed' => pht('This file content has been collapsed.'),
|
'collapsed' => pht('This file content has been collapsed.'),
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
|
|
||||||
Javelin::initBehavior(
|
Javelin::initBehavior(
|
||||||
'differential-dropdown-menus',
|
'differential-dropdown-menus',
|
||||||
array(
|
array(
|
||||||
|
@ -230,11 +231,8 @@ final class DifferentialChangesetListView extends AphrontView {
|
||||||
$this->initBehavior('differential-comment-jump', array());
|
$this->initBehavior('differential-comment-jump', array());
|
||||||
|
|
||||||
if ($this->inlineURI) {
|
if ($this->inlineURI) {
|
||||||
$undo_templates = $this->renderUndoTemplates();
|
|
||||||
|
|
||||||
Javelin::initBehavior('differential-edit-inline-comments', array(
|
Javelin::initBehavior('differential-edit-inline-comments', array(
|
||||||
'uri' => $this->inlineURI,
|
'uri' => $this->inlineURI,
|
||||||
'undo_templates' => $undo_templates,
|
|
||||||
'stage' => 'differential-review-stage',
|
'stage' => 'differential-review-stage',
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -257,44 +255,6 @@ final class DifferentialChangesetListView extends AphrontView {
|
||||||
return $object_box;
|
return $object_box;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Render the "Undo" markup for the inline comment undo feature.
|
|
||||||
*/
|
|
||||||
private function renderUndoTemplates() {
|
|
||||||
$link = javelin_tag(
|
|
||||||
'a',
|
|
||||||
array(
|
|
||||||
'href' => '#',
|
|
||||||
'sigil' => 'differential-inline-comment-undo',
|
|
||||||
),
|
|
||||||
pht('Undo'));
|
|
||||||
|
|
||||||
$div = phutil_tag(
|
|
||||||
'div',
|
|
||||||
array(
|
|
||||||
'class' => 'differential-inline-undo',
|
|
||||||
),
|
|
||||||
array('Changes discarded. ', $link));
|
|
||||||
|
|
||||||
return array(
|
|
||||||
'l' => phutil_tag('table', array(),
|
|
||||||
phutil_tag('tr', array(), array(
|
|
||||||
phutil_tag('th', array()),
|
|
||||||
phutil_tag('td', array(), $div),
|
|
||||||
phutil_tag('th', array()),
|
|
||||||
phutil_tag('td', array('colspan' => 3)),
|
|
||||||
))),
|
|
||||||
|
|
||||||
'r' => phutil_tag('table', array(),
|
|
||||||
phutil_tag('tr', array(), array(
|
|
||||||
phutil_tag('th', array()),
|
|
||||||
phutil_tag('td', array()),
|
|
||||||
phutil_tag('th', array()),
|
|
||||||
phutil_tag('td', array('colspan' => 3), $div),
|
|
||||||
))),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function renderViewOptionsDropdown(
|
private function renderViewOptionsDropdown(
|
||||||
DifferentialChangesetDetailView $detail,
|
DifferentialChangesetDetailView $detail,
|
||||||
$ref,
|
$ref,
|
||||||
|
|
|
@ -130,6 +130,7 @@ final class DiffusionDiffController extends DiffusionController {
|
||||||
$parser->setMask($mask);
|
$parser->setMask($mask);
|
||||||
|
|
||||||
return id(new PhabricatorChangesetResponse())
|
return id(new PhabricatorChangesetResponse())
|
||||||
->setRenderedChangeset($parser->renderChangeset());
|
->setRenderedChangeset($parser->renderChangeset())
|
||||||
|
->setUndoTemplates($parser->getRenderer()->renderUndoTemplates());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ final class PhabricatorChangesetResponse extends AphrontProxyResponse {
|
||||||
|
|
||||||
private $renderedChangeset;
|
private $renderedChangeset;
|
||||||
private $coverage;
|
private $coverage;
|
||||||
|
private $undoTemplates;
|
||||||
|
|
||||||
public function setRenderedChangeset($rendered_changeset) {
|
public function setRenderedChangeset($rendered_changeset) {
|
||||||
$this->renderedChangeset = $rendered_changeset;
|
$this->renderedChangeset = $rendered_changeset;
|
||||||
|
@ -15,6 +16,11 @@ final class PhabricatorChangesetResponse extends AphrontProxyResponse {
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setUndoTemplates($undo_templates) {
|
||||||
|
$this->undoTemplates = $undo_templates;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
protected function buildProxy() {
|
protected function buildProxy() {
|
||||||
return new AphrontAjaxResponse();
|
return new AphrontAjaxResponse();
|
||||||
}
|
}
|
||||||
|
@ -28,6 +34,10 @@ final class PhabricatorChangesetResponse extends AphrontProxyResponse {
|
||||||
$content['coverage'] = $this->coverage;
|
$content['coverage'] = $this->coverage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->undoTemplates) {
|
||||||
|
$content['undoTemplates'] = $this->undoTemplates;
|
||||||
|
}
|
||||||
|
|
||||||
return $this->getProxy()->setContent($content);
|
return $this->getProxy()->setContent($content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render the "Undo" action to recover discarded inline comments.
|
||||||
|
*
|
||||||
|
* This extends @{class:PHUIDiffInlineCommentView} so it can use the same
|
||||||
|
* scaffolding code as other kinds of inline comments.
|
||||||
|
*/
|
||||||
|
final class PHUIDiffInlineCommentUndoView
|
||||||
|
extends PHUIDiffInlineCommentView {
|
||||||
|
|
||||||
|
private $isOnRight;
|
||||||
|
|
||||||
|
public function setIsOnRight($is_on_right) {
|
||||||
|
$this->isOnRight = $is_on_right;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIsOnRight() {
|
||||||
|
return $this->isOnRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render() {
|
||||||
|
$link = javelin_tag(
|
||||||
|
'a',
|
||||||
|
array(
|
||||||
|
'href' => '#',
|
||||||
|
'sigil' => 'differential-inline-comment-undo',
|
||||||
|
),
|
||||||
|
pht('Undo'));
|
||||||
|
|
||||||
|
return phutil_tag(
|
||||||
|
'div',
|
||||||
|
array(
|
||||||
|
'class' => 'differential-inline-undo',
|
||||||
|
),
|
||||||
|
array('Changes discarded. ', $link));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -379,10 +379,12 @@ td.cov-I {
|
||||||
.differential-inline-undo {
|
.differential-inline-undo {
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background: #ffeeaa;
|
background: {$lightyellow};
|
||||||
|
border: 1px solid {$yellow};
|
||||||
margin: 3px 0 1px;
|
margin: 3px 0 1px;
|
||||||
font: 12px;
|
color: {$darkgreytext};
|
||||||
color: 444444;
|
font: {$basefont};
|
||||||
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.differential-inline-undo a {
|
.differential-inline-undo a {
|
||||||
|
|
|
@ -38,6 +38,7 @@ JX.install('ChangesetViewManager', {
|
||||||
_renderer: null,
|
_renderer: null,
|
||||||
_highlight: null,
|
_highlight: null,
|
||||||
_encoding: null,
|
_encoding: null,
|
||||||
|
_undoTemplates: null,
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -193,6 +194,8 @@ JX.install('ChangesetViewManager', {
|
||||||
var root = target.parentNode;
|
var root = target.parentNode;
|
||||||
this._moveRows(table, root, target);
|
this._moveRows(table, root, target);
|
||||||
root.removeChild(target);
|
root.removeChild(target);
|
||||||
|
|
||||||
|
this._onchangesetresponse(response);
|
||||||
},
|
},
|
||||||
|
|
||||||
_moveRows: function(src, dst, before) {
|
_moveRows: function(src, dst, before) {
|
||||||
|
@ -256,6 +259,10 @@ JX.install('ChangesetViewManager', {
|
||||||
return (JX.Device.getDevice() == 'desktop') ? '2up' : '1up';
|
return (JX.Device.getDevice() == 'desktop') ? '2up' : '1up';
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getUndoTemplates: function() {
|
||||||
|
return this._undoTemplates;
|
||||||
|
},
|
||||||
|
|
||||||
setEncoding: function(encoding) {
|
setEncoding: function(encoding) {
|
||||||
this._encoding = encoding;
|
this._encoding = encoding;
|
||||||
return this;
|
return this;
|
||||||
|
@ -333,6 +340,12 @@ JX.install('ChangesetViewManager', {
|
||||||
this._stabilize = false;
|
this._stabilize = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this._onchangesetresponse(response);
|
||||||
|
},
|
||||||
|
|
||||||
|
_onchangesetresponse: function(response) {
|
||||||
|
// Code shared by autoload and context responses.
|
||||||
|
|
||||||
if (response.coverage) {
|
if (response.coverage) {
|
||||||
for (var k in response.coverage) {
|
for (var k in response.coverage) {
|
||||||
try {
|
try {
|
||||||
|
@ -342,6 +355,10 @@ JX.install('ChangesetViewManager', {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (response.undoTemplates) {
|
||||||
|
this._undoTemplates = response.undoTemplates;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_getContentFrame: function() {
|
_getContentFrame: function() {
|
||||||
|
|
|
@ -243,7 +243,7 @@ JX.behavior('differential-edit-inline-comments', function(config) {
|
||||||
var view = JX.ChangesetViewManager.getForNode(root);
|
var view = JX.ChangesetViewManager.getForNode(root);
|
||||||
|
|
||||||
editor = new JX.DifferentialInlineCommentEditor(config.uri)
|
editor = new JX.DifferentialInlineCommentEditor(config.uri)
|
||||||
.setTemplates(config.undo_templates)
|
.setTemplates(view.getUndoTemplates())
|
||||||
.setOperation('new')
|
.setOperation('new')
|
||||||
.setChangesetID(changeset)
|
.setChangesetID(changeset)
|
||||||
.setLineNumber(o)
|
.setLineNumber(o)
|
||||||
|
@ -335,7 +335,7 @@ JX.behavior('differential-edit-inline-comments', function(config) {
|
||||||
var view = JX.ChangesetViewManager.getForNode(changeset_root);
|
var view = JX.ChangesetViewManager.getForNode(changeset_root);
|
||||||
|
|
||||||
editor = new JX.DifferentialInlineCommentEditor(config.uri)
|
editor = new JX.DifferentialInlineCommentEditor(config.uri)
|
||||||
.setTemplates(config.undo_templates)
|
.setTemplates(view.getUndoTemplates())
|
||||||
.setOperation(op)
|
.setOperation(op)
|
||||||
.setID(data.id)
|
.setID(data.id)
|
||||||
.setChangesetID(data.changesetID)
|
.setChangesetID(data.changesetID)
|
||||||
|
|
Loading…
Reference in a new issue