mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-23 05:50:55 +01:00
Restore the Differential "edit" and "reply" keyboard shortcuts
Summary: Ref T12616. This makes "edit" and "reply" work again. Test Plan: Used "e" and "r" to edit and reply. Also used them in bogus ways and got useful UI feedback. Reviewers: chad Reviewed By: chad Maniphest Tasks: T12616 Differential Revision: https://secure.phabricator.com/D17895
This commit is contained in:
parent
588a66c04d
commit
2fb1edfeb1
5 changed files with 119 additions and 26 deletions
|
@ -13,7 +13,7 @@ return array(
|
||||||
'core.pkg.js' => '2ff7879f',
|
'core.pkg.js' => '2ff7879f',
|
||||||
'darkconsole.pkg.js' => '1f9a31bc',
|
'darkconsole.pkg.js' => '1f9a31bc',
|
||||||
'differential.pkg.css' => '58712637',
|
'differential.pkg.css' => '58712637',
|
||||||
'differential.pkg.js' => 'e6129b80',
|
'differential.pkg.js' => '5ee318c2',
|
||||||
'diffusion.pkg.css' => 'b93d9b8c',
|
'diffusion.pkg.css' => 'b93d9b8c',
|
||||||
'diffusion.pkg.js' => '84c8f8fd',
|
'diffusion.pkg.js' => '84c8f8fd',
|
||||||
'favicon.ico' => '30672e08',
|
'favicon.ico' => '30672e08',
|
||||||
|
@ -390,9 +390,9 @@ return array(
|
||||||
'rsrc/js/application/dashboard/behavior-dashboard-move-panels.js' => '408bf173',
|
'rsrc/js/application/dashboard/behavior-dashboard-move-panels.js' => '408bf173',
|
||||||
'rsrc/js/application/dashboard/behavior-dashboard-query-panel-select.js' => '453c5375',
|
'rsrc/js/application/dashboard/behavior-dashboard-query-panel-select.js' => '453c5375',
|
||||||
'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' => '3d4b3c5e',
|
'rsrc/js/application/diff/DiffChangeset.js' => 'f7100923',
|
||||||
'rsrc/js/application/diff/DiffChangesetList.js' => 'e2c315d9',
|
'rsrc/js/application/diff/DiffChangesetList.js' => 'f10fd7a3',
|
||||||
'rsrc/js/application/diff/DiffInline.js' => '98c12b2f',
|
'rsrc/js/application/diff/DiffInline.js' => '00db3c3a',
|
||||||
'rsrc/js/application/diff/behavior-preview-link.js' => '051c7832',
|
'rsrc/js/application/diff/behavior-preview-link.js' => '051c7832',
|
||||||
'rsrc/js/application/differential/behavior-comment-jump.js' => '4fdb476d',
|
'rsrc/js/application/differential/behavior-comment-jump.js' => '4fdb476d',
|
||||||
'rsrc/js/application/differential/behavior-comment-preview.js' => 'b064af76',
|
'rsrc/js/application/differential/behavior-comment-preview.js' => 'b064af76',
|
||||||
|
@ -781,9 +781,9 @@ return array(
|
||||||
'phabricator-darklog' => 'c8e1ffe3',
|
'phabricator-darklog' => 'c8e1ffe3',
|
||||||
'phabricator-darkmessage' => 'c48cccdd',
|
'phabricator-darkmessage' => 'c48cccdd',
|
||||||
'phabricator-dashboard-css' => 'fe5b1869',
|
'phabricator-dashboard-css' => 'fe5b1869',
|
||||||
'phabricator-diff-changeset' => '3d4b3c5e',
|
'phabricator-diff-changeset' => 'f7100923',
|
||||||
'phabricator-diff-changeset-list' => 'e2c315d9',
|
'phabricator-diff-changeset-list' => 'f10fd7a3',
|
||||||
'phabricator-diff-inline' => '98c12b2f',
|
'phabricator-diff-inline' => '00db3c3a',
|
||||||
'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',
|
||||||
|
@ -918,6 +918,9 @@ return array(
|
||||||
'unhandled-exception-css' => '4c96257a',
|
'unhandled-exception-css' => '4c96257a',
|
||||||
),
|
),
|
||||||
'requires' => array(
|
'requires' => array(
|
||||||
|
'00db3c3a' => array(
|
||||||
|
'javelin-dom',
|
||||||
|
),
|
||||||
'013ffff9' => array(
|
'013ffff9' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
|
@ -1158,17 +1161,6 @@ return array(
|
||||||
'javelin-util',
|
'javelin-util',
|
||||||
'javelin-uri',
|
'javelin-uri',
|
||||||
),
|
),
|
||||||
'3d4b3c5e' => array(
|
|
||||||
'javelin-dom',
|
|
||||||
'javelin-util',
|
|
||||||
'javelin-stratcom',
|
|
||||||
'javelin-install',
|
|
||||||
'javelin-workflow',
|
|
||||||
'javelin-router',
|
|
||||||
'javelin-behavior-device',
|
|
||||||
'javelin-vector',
|
|
||||||
'phabricator-diff-inline',
|
|
||||||
),
|
|
||||||
'3dbf94d5' => array(
|
'3dbf94d5' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
|
@ -1666,9 +1658,6 @@ return array(
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
'javelin-reactor-dom',
|
'javelin-reactor-dom',
|
||||||
),
|
),
|
||||||
'98c12b2f' => array(
|
|
||||||
'javelin-dom',
|
|
||||||
),
|
|
||||||
'9a6dd75c' => array(
|
'9a6dd75c' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
|
@ -2108,9 +2097,6 @@ return array(
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
'javelin-dom',
|
'javelin-dom',
|
||||||
),
|
),
|
||||||
'e2c315d9' => array(
|
|
||||||
'javelin-install',
|
|
||||||
),
|
|
||||||
'e2e0a072' => array(
|
'e2e0a072' => array(
|
||||||
'javelin-behavior',
|
'javelin-behavior',
|
||||||
'javelin-stratcom',
|
'javelin-stratcom',
|
||||||
|
@ -2181,6 +2167,9 @@ return array(
|
||||||
'javelin-workflow',
|
'javelin-workflow',
|
||||||
'javelin-json',
|
'javelin-json',
|
||||||
),
|
),
|
||||||
|
'f10fd7a3' => array(
|
||||||
|
'javelin-install',
|
||||||
|
),
|
||||||
'f12cbc9f' => array(
|
'f12cbc9f' => array(
|
||||||
'phui-oi-list-view-css',
|
'phui-oi-list-view-css',
|
||||||
),
|
),
|
||||||
|
@ -2199,6 +2188,17 @@ return array(
|
||||||
'phuix-icon-view',
|
'phuix-icon-view',
|
||||||
'phabricator-prefab',
|
'phabricator-prefab',
|
||||||
),
|
),
|
||||||
|
'f7100923' => array(
|
||||||
|
'javelin-dom',
|
||||||
|
'javelin-util',
|
||||||
|
'javelin-stratcom',
|
||||||
|
'javelin-install',
|
||||||
|
'javelin-workflow',
|
||||||
|
'javelin-router',
|
||||||
|
'javelin-behavior-device',
|
||||||
|
'javelin-vector',
|
||||||
|
'phabricator-diff-inline',
|
||||||
|
),
|
||||||
'f7fc67ec' => array(
|
'f7fc67ec' => array(
|
||||||
'javelin-install',
|
'javelin-install',
|
||||||
'javelin-typeahead',
|
'javelin-typeahead',
|
||||||
|
|
|
@ -244,6 +244,14 @@ final class DifferentialChangesetListView extends AphrontView {
|
||||||
pht('Jump to previous inline comment.'),
|
pht('Jump to previous inline comment.'),
|
||||||
'Jump to the table of contents.' =>
|
'Jump to the table of contents.' =>
|
||||||
pht('Jump to the table of contents.'),
|
pht('Jump to the table of contents.'),
|
||||||
|
'Reply to selected inline comment.' =>
|
||||||
|
pht('Reply to selected inline comment.'),
|
||||||
|
'Edit selected inline comment.' =>
|
||||||
|
pht('Edit selected inline comment.'),
|
||||||
|
'You must select a comment to reply to.' =>
|
||||||
|
pht('You must select a comment to reply to.'),
|
||||||
|
'You must select a comment to edit.' =>
|
||||||
|
pht('You must select a comment to edit.'),
|
||||||
),
|
),
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
|
@ -367,10 +367,19 @@ JX.install('DiffChangeset', {
|
||||||
|
|
||||||
if (block.type == 'comment') {
|
if (block.type == 'comment') {
|
||||||
for (var jj = 0; jj < block.items.length; jj++) {
|
for (var jj = 0; jj < block.items.length; jj++) {
|
||||||
|
var inline = this.getInlineForRow(block.items[jj]);
|
||||||
|
|
||||||
|
// If this inline has been collapsed, don't select it with the
|
||||||
|
// keyboard cursor.
|
||||||
|
if (inline.isHidden()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
items.push({
|
items.push({
|
||||||
type: block.type,
|
type: block.type,
|
||||||
changeset: this,
|
changeset: this,
|
||||||
target: block.items[jj],
|
target: block.items[jj],
|
||||||
|
inline: inline,
|
||||||
nodes: {
|
nodes: {
|
||||||
begin: block.items[jj],
|
begin: block.items[jj],
|
||||||
end: block.items[jj]
|
end: block.items[jj]
|
||||||
|
|
|
@ -98,6 +98,12 @@ JX.install('DiffChangesetList', {
|
||||||
|
|
||||||
label = pht('Jump to the table of contents.');
|
label = pht('Jump to the table of contents.');
|
||||||
this._installKey('t', label, this._ontoc);
|
this._installKey('t', label, this._ontoc);
|
||||||
|
|
||||||
|
label = pht('Reply to selected inline comment.');
|
||||||
|
this._installKey('r', label, this._onreply);
|
||||||
|
|
||||||
|
label = pht('Edit selected inline comment.');
|
||||||
|
this._installKey('e', label, this._onedit);
|
||||||
},
|
},
|
||||||
|
|
||||||
isAsleep: function() {
|
isAsleep: function() {
|
||||||
|
@ -185,6 +191,52 @@ JX.install('DiffChangesetList', {
|
||||||
manager.scrollTo(toc);
|
manager.scrollTo(toc);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_onreply: function(manager) {
|
||||||
|
var cursor = this._cursorItem;
|
||||||
|
|
||||||
|
if (cursor) {
|
||||||
|
if (cursor.type == 'comment') {
|
||||||
|
var inline = cursor.inline;
|
||||||
|
if (inline.canReply()) {
|
||||||
|
manager.focusOn(null);
|
||||||
|
|
||||||
|
inline.reply();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var pht = this.getTranslations();
|
||||||
|
this._warnUser(pht('You must select a comment to reply to.'));
|
||||||
|
},
|
||||||
|
|
||||||
|
_onedit: function(manager) {
|
||||||
|
var cursor = this._cursorItem;
|
||||||
|
|
||||||
|
if (cursor) {
|
||||||
|
if (cursor.type == 'comment') {
|
||||||
|
var inline = cursor.inline;
|
||||||
|
if (inline.canEdit()) {
|
||||||
|
manager.focusOn(null);
|
||||||
|
|
||||||
|
inline.edit();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var pht = this.getTranslations();
|
||||||
|
this._warnUser(pht('You must select a comment to edit.'));
|
||||||
|
},
|
||||||
|
|
||||||
|
_warnUser: function(message) {
|
||||||
|
new JX.Notification()
|
||||||
|
.setContent(message)
|
||||||
|
.alterClassName('jx-notification-alert', true)
|
||||||
|
.setDuration(1000)
|
||||||
|
.show();
|
||||||
|
},
|
||||||
|
|
||||||
_onjumpkey: function(delta, filter, manager) {
|
_onjumpkey: function(delta, filter, manager) {
|
||||||
var state = this._getSelectionState();
|
var state = this._getSelectionState();
|
||||||
|
|
||||||
|
@ -534,8 +586,7 @@ JX.install('DiffChangesetList', {
|
||||||
},
|
},
|
||||||
|
|
||||||
_onaction: function(action, e) {
|
_onaction: function(action, e) {
|
||||||
// TODO: This can become a kill once things fully switch over..
|
e.kill();
|
||||||
e.prevent();
|
|
||||||
|
|
||||||
var inline = this._getInlineForEvent(e);
|
var inline = this._getInlineForEvent(e);
|
||||||
var is_ref = false;
|
var is_ref = false;
|
||||||
|
|
|
@ -114,6 +114,27 @@ JX.install('DiffInline', {
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
canReply: function() {
|
||||||
|
if (!this._hasAction('reply')) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
canEdit: function() {
|
||||||
|
if (!this._hasAction('edit')) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
_hasAction: function(action) {
|
||||||
|
var nodes = JX.DOM.scry(this._row, 'a', 'differential-inline-' + action);
|
||||||
|
return (nodes.length > 0);
|
||||||
|
},
|
||||||
|
|
||||||
_newRow: function() {
|
_newRow: function() {
|
||||||
var attributes = {
|
var attributes = {
|
||||||
sigil: 'inline-row'
|
sigil: 'inline-row'
|
||||||
|
@ -151,6 +172,10 @@ JX.install('DiffInline', {
|
||||||
.start();
|
.start();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
isHidden: function() {
|
||||||
|
return this._hidden;
|
||||||
|
},
|
||||||
|
|
||||||
toggleDone: function() {
|
toggleDone: function() {
|
||||||
var uri = this._getInlineURI();
|
var uri = this._getInlineURI();
|
||||||
var data = {
|
var data = {
|
||||||
|
|
Loading…
Reference in a new issue