diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.js b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.js index 45f750c45b..e42a806b6a 100644 --- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.js +++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.js @@ -492,6 +492,10 @@ if (this.shouldSuppressKeyboardShortcut(e) || this.modifierPressed(e)) { return; } + // Use native handling if an anchor is selected. @see Issue 5754 + if (e.detail && e.detail.keyboardEvent && e.detail.keyboardEvent.target && + e.detail.keyboardEvent.target.tagName === 'A') { return; } + e.preventDefault(); if (this._showInlineDiffs) { this._openCursorFile(); diff --git a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.html b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.html index c37acf6db5..fb227dd347 100644 --- a/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.html +++ b/polygerrit-ui/app/elements/change/gr-file-list/gr-file-list_test.html @@ -357,6 +357,44 @@ limitations under the License. element.diffs[index].path); } }); + + test('_handleEnterKey navigates', function() { + sandbox.stub(element, 'shouldSuppressKeyboardShortcut').returns(false); + sandbox.stub(element, 'modifierPressed').returns(false); + var expandStub = sandbox.stub(element, '_openCursorFile'); + var navStub = sandbox.stub(element, '_openSelectedFile'); + var e = new CustomEvent('fake-keyboard-event'); + sinon.stub(e, 'preventDefault'); + element._showInlineDiffs = false; + element._handleEnterKey(e); + assert.isTrue(e.preventDefault.called); + assert.isTrue(navStub.called); + assert.isFalse(expandStub.called); + }); + + test('_handleEnterKey expands', function() { + sandbox.stub(element, 'shouldSuppressKeyboardShortcut').returns(false); + sandbox.stub(element, 'modifierPressed').returns(false); + var expandStub = sandbox.stub(element, '_openCursorFile'); + var navStub = sandbox.stub(element, '_openSelectedFile'); + var e = new CustomEvent('fake-keyboard-event'); + sinon.stub(e, 'preventDefault'); + element._showInlineDiffs = true; + element._handleEnterKey(e); + assert.isTrue(e.preventDefault.called); + assert.isFalse(navStub.called); + assert.isTrue(expandStub.called); + }); + + test('_handleEnterKey noop when anchor focused', function() { + sandbox.stub(element, 'shouldSuppressKeyboardShortcut').returns(false); + sandbox.stub(element, 'modifierPressed').returns(false); + var e = new CustomEvent('fake-keyboard-event', + {detail: {keyboardEvent: {target: document.createElement('a')}}}); + sinon.stub(e, 'preventDefault'); + element._handleEnterKey(e); + assert.isFalse(e.preventDefault.called); + }); }); test('comment filtering', function() {