Handle Esc key in reply dialog manually
As a component of allowing arbitrary CCs, we must allow for the Esc key to be pressed to clear autocomplete suggestions. The default behavior of gr-overlay is to close when Esc is pressed. This change supplies a property to the reply dialog gr-overlay to prevent automatically closing on Esc, and fires the cancel event manually. Feature: Issue 5832 Change-Id: Iff4d8ea49dace83bb76d0e678ffc548c101658d1
This commit is contained in:
@@ -485,6 +485,7 @@ limitations under the License.
|
|||||||
<gr-overlay id="replyOverlay"
|
<gr-overlay id="replyOverlay"
|
||||||
class="scrollable"
|
class="scrollable"
|
||||||
no-cancel-on-outside-click
|
no-cancel-on-outside-click
|
||||||
|
no-cancel-on-esc-key
|
||||||
on-iron-overlay-opened="_handleReplyOverlayOpen"
|
on-iron-overlay-opened="_handleReplyOverlayOpen"
|
||||||
with-backdrop>
|
with-backdrop>
|
||||||
<gr-reply-dialog id="replyDialog"
|
<gr-reply-dialog id="replyDialog"
|
||||||
|
@@ -14,10 +14,11 @@ See the License for the specific language governing permissions and
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<link rel="import" href="../../../behaviors/keyboard-shortcut-behavior/keyboard-shortcut-behavior.html">
|
||||||
|
<link rel="import" href="../../../behaviors/rest-client-behavior.html">
|
||||||
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
||||||
<link rel="import" href="../../../bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html">
|
<link rel="import" href="../../../bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html">
|
||||||
<link rel="import" href="../../../bower_components/iron-selector/iron-selector.html">
|
<link rel="import" href="../../../bower_components/iron-selector/iron-selector.html">
|
||||||
<link rel="import" href="../../../behaviors/rest-client-behavior.html">
|
|
||||||
<link rel="import" href="../../shared/gr-account-chip/gr-account-chip.html">
|
<link rel="import" href="../../shared/gr-account-chip/gr-account-chip.html">
|
||||||
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
||||||
<link rel="import" href="../../shared/gr-formatted-text/gr-formatted-text.html">
|
<link rel="import" href="../../shared/gr-formatted-text/gr-formatted-text.html">
|
||||||
|
@@ -116,9 +116,14 @@
|
|||||||
FocusTarget: FocusTarget,
|
FocusTarget: FocusTarget,
|
||||||
|
|
||||||
behaviors: [
|
behaviors: [
|
||||||
|
Gerrit.KeyboardShortcutBehavior,
|
||||||
Gerrit.RESTClientBehavior,
|
Gerrit.RESTClientBehavior,
|
||||||
],
|
],
|
||||||
|
|
||||||
|
keyBindings: {
|
||||||
|
'esc': '_handleEscKey',
|
||||||
|
},
|
||||||
|
|
||||||
observers: [
|
observers: [
|
||||||
'_changeUpdated(change.reviewers.*, change.owner, serverConfig)',
|
'_changeUpdated(change.reviewers.*, change.owner, serverConfig)',
|
||||||
'_ccsChanged(_ccs.splices)',
|
'_ccsChanged(_ccs.splices)',
|
||||||
@@ -162,6 +167,10 @@
|
|||||||
selectorEl.selectIndex(selectorEl.indexOf(item));
|
selectorEl.selectIndex(selectorEl.indexOf(item));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_handleEscKey: function(e) {
|
||||||
|
this.cancel();
|
||||||
|
},
|
||||||
|
|
||||||
_ccsChanged: function(splices) {
|
_ccsChanged: function(splices) {
|
||||||
if (splices && splices.indexSplices) {
|
if (splices && splices.indexSplices) {
|
||||||
this._processReviewerChange(splices.indexSplices, ReviewerTypes.CC);
|
this._processReviewerChange(splices.indexSplices, ReviewerTypes.CC);
|
||||||
@@ -522,6 +531,10 @@
|
|||||||
|
|
||||||
_cancelTapHandler: function(e) {
|
_cancelTapHandler: function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
this.cancel();
|
||||||
|
},
|
||||||
|
|
||||||
|
cancel: function() {
|
||||||
this.fire('cancel', null, {bubbles: false});
|
this.fire('cancel', null, {bubbles: false});
|
||||||
this._purgeReviewersPendingRemove(true);
|
this._purgeReviewersPendingRemove(true);
|
||||||
this._rebuildReviewerArrays(this.change.reviewers, this._owner,
|
this._rebuildReviewerArrays(this.change.reviewers, this._owner,
|
||||||
|
@@ -684,5 +684,14 @@ limitations under the License.
|
|||||||
done();
|
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);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
Reference in New Issue
Block a user