diff --git a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html index 48ea91ce7b..3959a33d22 100644 --- a/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html +++ b/polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.html @@ -485,6 +485,7 @@ limitations under the License. + + - diff --git a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.js b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.js index c7ef05c69e..77739abbcc 100644 --- a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.js +++ b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog.js @@ -116,9 +116,14 @@ FocusTarget: FocusTarget, behaviors: [ + Gerrit.KeyboardShortcutBehavior, Gerrit.RESTClientBehavior, ], + keyBindings: { + 'esc': '_handleEscKey', + }, + observers: [ '_changeUpdated(change.reviewers.*, change.owner, serverConfig)', '_ccsChanged(_ccs.splices)', @@ -162,6 +167,10 @@ selectorEl.selectIndex(selectorEl.indexOf(item)); }, + _handleEscKey: function(e) { + this.cancel(); + }, + _ccsChanged: function(splices) { if (splices && splices.indexSplices) { this._processReviewerChange(splices.indexSplices, ReviewerTypes.CC); @@ -522,6 +531,10 @@ _cancelTapHandler: function(e) { e.preventDefault(); + this.cancel(); + }, + + cancel: function() { this.fire('cancel', null, {bubbles: false}); this._purgeReviewersPendingRemove(true); this._rebuildReviewerArrays(this.change.reviewers, this._owner, diff --git a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.html b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.html index 6543e28221..8aa8dd89cc 100644 --- a/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.html +++ b/polygerrit-ui/app/elements/change/gr-reply-dialog/gr-reply-dialog_test.html @@ -684,5 +684,14 @@ limitations under the License. done(); }); }); + + test('emits cancel on esc key', function() { + var cancelHandler = sandbox.spy(); + element.addEventListener('cancel', cancelHandler); + MockInteractions.pressAndReleaseKeyOn(element, 27, null, 'esc'); + flushAsynchronousOperations(); + + assert.isTrue(cancelHandler.called); + }); });