mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-10 00:42:41 +01:00
Allow cancelled inlines, edits, and replies to be undone to get the text back again
Summary: Ref T12616. The ability to do {nav Edit > Cancel > Undo} to get your text back on inlines got dropped during the conversion. Restore it. Test Plan: Created, replied, and edited inlines, typed text, then cancelled. Was able to undo. Also undid normal deletion. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12616 Differential Revision: https://secure.phabricator.com/D17916
This commit is contained in:
parent
2aa146ffac
commit
772afc5ed8
3 changed files with 69 additions and 30 deletions
|
@ -12,8 +12,8 @@ return array(
|
||||||
'core.pkg.css' => 'ee5f28cd',
|
'core.pkg.css' => 'ee5f28cd',
|
||||||
'core.pkg.js' => '8c5f913d',
|
'core.pkg.js' => '8c5f913d',
|
||||||
'darkconsole.pkg.js' => '1f9a31bc',
|
'darkconsole.pkg.js' => '1f9a31bc',
|
||||||
'differential.pkg.css' => '7b1c772c',
|
'differential.pkg.css' => '4ff77743',
|
||||||
'differential.pkg.js' => 'f1b636fb',
|
'differential.pkg.js' => '85543704',
|
||||||
'diffusion.pkg.css' => 'b93d9b8c',
|
'diffusion.pkg.css' => 'b93d9b8c',
|
||||||
'diffusion.pkg.js' => '84c8f8fd',
|
'diffusion.pkg.js' => '84c8f8fd',
|
||||||
'favicon.ico' => '30672e08',
|
'favicon.ico' => '30672e08',
|
||||||
|
@ -66,7 +66,7 @@ return array(
|
||||||
'rsrc/css/application/differential/add-comment.css' => 'c47f8c40',
|
'rsrc/css/application/differential/add-comment.css' => 'c47f8c40',
|
||||||
'rsrc/css/application/differential/changeset-view.css' => '69a3c268',
|
'rsrc/css/application/differential/changeset-view.css' => '69a3c268',
|
||||||
'rsrc/css/application/differential/core.css' => '5b7b8ff4',
|
'rsrc/css/application/differential/core.css' => '5b7b8ff4',
|
||||||
'rsrc/css/application/differential/phui-inline-comment.css' => 'e0a2b52e',
|
'rsrc/css/application/differential/phui-inline-comment.css' => 'ffd1a542',
|
||||||
'rsrc/css/application/differential/revision-comment.css' => '14b8565a',
|
'rsrc/css/application/differential/revision-comment.css' => '14b8565a',
|
||||||
'rsrc/css/application/differential/revision-history.css' => '0e8eb855',
|
'rsrc/css/application/differential/revision-history.css' => '0e8eb855',
|
||||||
'rsrc/css/application/differential/revision-list.css' => 'f3c47d33',
|
'rsrc/css/application/differential/revision-list.css' => 'f3c47d33',
|
||||||
|
@ -392,7 +392,7 @@ return array(
|
||||||
'rsrc/js/application/dashboard/behavior-dashboard-tab-panel.js' => 'd4eecc63',
|
'rsrc/js/application/dashboard/behavior-dashboard-tab-panel.js' => 'd4eecc63',
|
||||||
'rsrc/js/application/diff/DiffChangeset.js' => 'c5742feb',
|
'rsrc/js/application/diff/DiffChangeset.js' => 'c5742feb',
|
||||||
'rsrc/js/application/diff/DiffChangesetList.js' => 'f1101e6e',
|
'rsrc/js/application/diff/DiffChangesetList.js' => 'f1101e6e',
|
||||||
'rsrc/js/application/diff/DiffInline.js' => 'bdf6b568',
|
'rsrc/js/application/diff/DiffInline.js' => 'a81c29d4',
|
||||||
'rsrc/js/application/diff/behavior-preview-link.js' => '051c7832',
|
'rsrc/js/application/diff/behavior-preview-link.js' => '051c7832',
|
||||||
'rsrc/js/application/differential/behavior-comment-preview.js' => 'b064af76',
|
'rsrc/js/application/differential/behavior-comment-preview.js' => 'b064af76',
|
||||||
'rsrc/js/application/differential/behavior-diff-radios.js' => 'e1ff79b1',
|
'rsrc/js/application/differential/behavior-diff-radios.js' => 'e1ff79b1',
|
||||||
|
@ -781,7 +781,7 @@ return array(
|
||||||
'phabricator-dashboard-css' => 'fe5b1869',
|
'phabricator-dashboard-css' => 'fe5b1869',
|
||||||
'phabricator-diff-changeset' => 'c5742feb',
|
'phabricator-diff-changeset' => 'c5742feb',
|
||||||
'phabricator-diff-changeset-list' => 'f1101e6e',
|
'phabricator-diff-changeset-list' => 'f1101e6e',
|
||||||
'phabricator-diff-inline' => 'bdf6b568',
|
'phabricator-diff-inline' => 'a81c29d4',
|
||||||
'phabricator-drag-and-drop-file-upload' => '58dea2fa',
|
'phabricator-drag-and-drop-file-upload' => '58dea2fa',
|
||||||
'phabricator-draggable-list' => 'bea6e7f4',
|
'phabricator-draggable-list' => 'bea6e7f4',
|
||||||
'phabricator-fatal-config-template-css' => '8f18fa41',
|
'phabricator-fatal-config-template-css' => '8f18fa41',
|
||||||
|
@ -864,7 +864,7 @@ return array(
|
||||||
'phui-image-mask-css' => 'a8498f9c',
|
'phui-image-mask-css' => 'a8498f9c',
|
||||||
'phui-info-panel-css' => '27ea50a1',
|
'phui-info-panel-css' => '27ea50a1',
|
||||||
'phui-info-view-css' => '6e217679',
|
'phui-info-view-css' => '6e217679',
|
||||||
'phui-inline-comment-view-css' => 'e0a2b52e',
|
'phui-inline-comment-view-css' => 'ffd1a542',
|
||||||
'phui-invisible-character-view-css' => '6993d9f0',
|
'phui-invisible-character-view-css' => '6993d9f0',
|
||||||
'phui-lightbox-css' => '0a035e40',
|
'phui-lightbox-css' => '0a035e40',
|
||||||
'phui-list-view-css' => '12eb8ce6',
|
'phui-list-view-css' => '12eb8ce6',
|
||||||
|
@ -1718,6 +1718,9 @@ return array(
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
),
|
),
|
||||||
|
'a81c29d4' => array(
|
||||||
|
'javelin-dom',
|
||||||
|
),
|
||||||
'a8beebea' => array(
|
'a8beebea' => array(
|
||||||
'phui-oi-list-view-css',
|
'phui-oi-list-view-css',
|
||||||
),
|
),
|
||||||
|
@ -1872,9 +1875,6 @@ return array(
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
'javelin-request',
|
'javelin-request',
|
||||||
),
|
),
|
||||||
'bdf6b568' => array(
|
|
||||||
'javelin-dom',
|
|
||||||
),
|
|
||||||
'bea6e7f4' => array(
|
'bea6e7f4' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
|
|
|
@ -318,11 +318,10 @@
|
||||||
|
|
||||||
.differential-inline-undo {
|
.differential-inline-undo {
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
margin: 8px 12px;
|
margin: 4px 12px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background: {$sh-yellowbackground};
|
background: {$sh-yellowbackground};
|
||||||
border: 1px solid {$sh-yellowborder};
|
border: 1px solid {$sh-yellowborder};
|
||||||
margin: 4px 0;
|
|
||||||
color: {$darkgreytext};
|
color: {$darkgreytext};
|
||||||
font: {$basefont};
|
font: {$basefont};
|
||||||
font-size: {$normalfontsize};
|
font-size: {$normalfontsize};
|
||||||
|
@ -396,7 +395,6 @@
|
||||||
background: {$lightgreybackground};
|
background: {$lightgreybackground};
|
||||||
padding: 2px 16px;
|
padding: 2px 16px;
|
||||||
color: {$lightgreytext};
|
color: {$lightgreytext};
|
||||||
font-size: {$smallerfontsize};
|
|
||||||
display: none;
|
display: none;
|
||||||
font: {$basefont};
|
font: {$basefont};
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|
|
@ -25,6 +25,7 @@ JX.install('DiffInline', {
|
||||||
_isNewFile: null,
|
_isNewFile: null,
|
||||||
_undoRow: null,
|
_undoRow: null,
|
||||||
_replyToCommentPHID: null,
|
_replyToCommentPHID: null,
|
||||||
|
_originalText: null,
|
||||||
|
|
||||||
_isDeleted: false,
|
_isDeleted: false,
|
||||||
_isInvisible: false,
|
_isInvisible: false,
|
||||||
|
@ -57,6 +58,7 @@ JX.install('DiffInline', {
|
||||||
|
|
||||||
this._number = data.number;
|
this._number = data.number;
|
||||||
this._length = data.length;
|
this._length = data.length;
|
||||||
|
this._originalText = data.original;
|
||||||
this._isNewFile =
|
this._isNewFile =
|
||||||
(this.getDisplaySide() == 'right') ||
|
(this.getDisplaySide() == 'right') ||
|
||||||
(data.left != data.right);
|
(data.left != data.right);
|
||||||
|
@ -165,6 +167,8 @@ JX.install('DiffInline', {
|
||||||
this._phid = null;
|
this._phid = null;
|
||||||
this._hidden = false;
|
this._hidden = false;
|
||||||
|
|
||||||
|
this._originalText = null;
|
||||||
|
|
||||||
return row;
|
return row;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -231,10 +235,10 @@ JX.install('DiffInline', {
|
||||||
this._didUpdate();
|
this._didUpdate();
|
||||||
},
|
},
|
||||||
|
|
||||||
create: function() {
|
create: function(text) {
|
||||||
var uri = this._getInlineURI();
|
var uri = this._getInlineURI();
|
||||||
var handler = JX.bind(this, this._oncreateresponse);
|
var handler = JX.bind(this, this._oncreateresponse);
|
||||||
var data = this._newRequestData('new');
|
var data = this._newRequestData('new', text);
|
||||||
|
|
||||||
this.setLoading(true);
|
this.setLoading(true);
|
||||||
|
|
||||||
|
@ -248,10 +252,10 @@ JX.install('DiffInline', {
|
||||||
return changeset.newInlineReply(this);
|
return changeset.newInlineReply(this);
|
||||||
},
|
},
|
||||||
|
|
||||||
edit: function() {
|
edit: function(text) {
|
||||||
var uri = this._getInlineURI();
|
var uri = this._getInlineURI();
|
||||||
var handler = JX.bind(this, this._oneditresponse);
|
var handler = JX.bind(this, this._oneditresponse);
|
||||||
var data = this._newRequestData('edit');
|
var data = this._newRequestData('edit', text || null);
|
||||||
|
|
||||||
this.setLoading(true);
|
this.setLoading(true);
|
||||||
|
|
||||||
|
@ -336,7 +340,7 @@ JX.install('DiffInline', {
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
_newRequestData: function(operation) {
|
_newRequestData: function(operation, text) {
|
||||||
return {
|
return {
|
||||||
op: operation,
|
op: operation,
|
||||||
id: this._id,
|
id: this._id,
|
||||||
|
@ -347,6 +351,7 @@ JX.install('DiffInline', {
|
||||||
is_new: this.isNewFile(),
|
is_new: this.isNewFile(),
|
||||||
changesetID: this.getChangesetID(),
|
changesetID: this.getChangesetID(),
|
||||||
replyToCommentPHID: this.getReplyToCommentPHID() || '',
|
replyToCommentPHID: this.getReplyToCommentPHID() || '',
|
||||||
|
text: text || ''
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -366,7 +371,7 @@ JX.install('DiffInline', {
|
||||||
},
|
},
|
||||||
|
|
||||||
_ondeleteresponse: function() {
|
_ondeleteresponse: function() {
|
||||||
this._drawUndoRows();
|
this._drawUndeleteRows();
|
||||||
|
|
||||||
this.setLoading(false);
|
this.setLoading(false);
|
||||||
this.setDeleted(true);
|
this.setDeleted(true);
|
||||||
|
@ -374,7 +379,15 @@ JX.install('DiffInline', {
|
||||||
this._didUpdate();
|
this._didUpdate();
|
||||||
},
|
},
|
||||||
|
|
||||||
_drawUndoRows: function() {
|
_drawUndeleteRows: function() {
|
||||||
|
return this._drawUndoRows('undelete', this._row);
|
||||||
|
},
|
||||||
|
|
||||||
|
_drawUneditRows: function(text) {
|
||||||
|
return this._drawUndoRows('unedit', null, text);
|
||||||
|
},
|
||||||
|
|
||||||
|
_drawUndoRows: function(mode, cursor, text) {
|
||||||
var templates = this.getChangeset().getUndoTemplates();
|
var templates = this.getChangeset().getUndoTemplates();
|
||||||
|
|
||||||
var template;
|
var template;
|
||||||
|
@ -385,14 +398,14 @@ JX.install('DiffInline', {
|
||||||
}
|
}
|
||||||
template = JX.$H(template).getNode();
|
template = JX.$H(template).getNode();
|
||||||
|
|
||||||
this._undoRow = this._drawRows(template, this._row, 'undo');
|
this._undoRow = this._drawRows(template, cursor, mode, text);
|
||||||
},
|
},
|
||||||
|
|
||||||
_drawEditRows: function(rows) {
|
_drawEditRows: function(rows) {
|
||||||
return this._drawRows(rows, null, 'edit');
|
return this._drawRows(rows, null, 'edit');
|
||||||
},
|
},
|
||||||
|
|
||||||
_drawRows: function(rows, cursor, type) {
|
_drawRows: function(rows, cursor, type, text) {
|
||||||
var first_row = JX.DOM.scry(rows, 'tr')[0];
|
var first_row = JX.DOM.scry(rows, 'tr')[0];
|
||||||
var first_meta;
|
var first_meta;
|
||||||
var row = first_row;
|
var row = first_row;
|
||||||
|
@ -410,6 +423,7 @@ JX.install('DiffInline', {
|
||||||
var row_meta = {
|
var row_meta = {
|
||||||
node: row,
|
node: row,
|
||||||
type: type,
|
type: type,
|
||||||
|
text: text || null,
|
||||||
listeners: []
|
listeners: []
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -476,16 +490,26 @@ JX.install('DiffInline', {
|
||||||
|
|
||||||
this._removeRow(row);
|
this._removeRow(row);
|
||||||
|
|
||||||
var uri = this._getInlineURI();
|
if (row.type == 'undelete') {
|
||||||
var data = this._newRequestData('undelete');
|
var uri = this._getInlineURI();
|
||||||
var handler = JX.bind(this, this._onundelete);
|
var data = this._newRequestData('undelete');
|
||||||
|
var handler = JX.bind(this, this._onundelete);
|
||||||
|
|
||||||
this.setDeleted(false);
|
this.setDeleted(false);
|
||||||
this.setLoading(true);
|
this.setLoading(true);
|
||||||
|
|
||||||
new JX.Request(uri, handler)
|
new JX.Request(uri, handler)
|
||||||
.setData(data)
|
.setData(data)
|
||||||
.send();
|
.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (row.type == 'unedit') {
|
||||||
|
if (this.getID()) {
|
||||||
|
this.edit(row.text);
|
||||||
|
} else {
|
||||||
|
this.create(row.text);
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
_onundelete: function() {
|
_onundelete: function() {
|
||||||
|
@ -496,13 +520,30 @@ JX.install('DiffInline', {
|
||||||
_oncancel: function(row, e) {
|
_oncancel: function(row, e) {
|
||||||
e.kill();
|
e.kill();
|
||||||
|
|
||||||
// TODO: Capture edited text and offer "undo".
|
var text = this._readText(row.node);
|
||||||
|
if (text && text.length && (text != this._originalText)) {
|
||||||
|
this._drawUneditRows(text);
|
||||||
|
}
|
||||||
|
|
||||||
this._removeRow(row);
|
this._removeRow(row);
|
||||||
|
|
||||||
this.setInvisible(false);
|
this.setInvisible(false);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_readText: function(row) {
|
||||||
|
var textarea;
|
||||||
|
try {
|
||||||
|
textarea = JX.DOM.find(
|
||||||
|
row,
|
||||||
|
'textarea',
|
||||||
|
'differential-inline-comment-edit-textarea');
|
||||||
|
} catch (ex) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return textarea.value;
|
||||||
|
},
|
||||||
|
|
||||||
_onsubmitresponse: function(row, response) {
|
_onsubmitresponse: function(row, response) {
|
||||||
this._removeRow(row);
|
this._removeRow(row);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue