Prevent conflict b/w search field and its dropdown
Stop the global search form's default "action" from fighting with dropdown items when using the keyboard to navigate the dropdown. `e.preventDefault()` is now called on the enter key when a dropdown item is already selected. Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
parent
4e963fed42
commit
f3c55164d2
|
@ -63,6 +63,7 @@ v 8.13.0 (unreleased)
|
||||||
- Replace bootstrap caret with fontawesome caret (ClemMakesApps)
|
- Replace bootstrap caret with fontawesome caret (ClemMakesApps)
|
||||||
- Fix unnecessary escaping of reserved HTML characters in milestone title. !6533
|
- Fix unnecessary escaping of reserved HTML characters in milestone title. !6533
|
||||||
- Add organization field to user profile
|
- Add organization field to user profile
|
||||||
|
- Fix enter key when navigating search site search dropdown. !6643 (Brennan Roberts)
|
||||||
- Fix deploy status responsiveness error !6633
|
- Fix deploy status responsiveness error !6633
|
||||||
- Fix resolved discussion display in side-by-side diff view !6575
|
- Fix resolved discussion display in side-by-side diff view !6575
|
||||||
- Optimize GitHub importing for speed and memory
|
- Optimize GitHub importing for speed and memory
|
||||||
|
|
|
@ -738,6 +738,7 @@
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (currentKeyCode === 13 && currentIndex !== -1) {
|
if (currentKeyCode === 13 && currentIndex !== -1) {
|
||||||
|
e.preventDefault();
|
||||||
_this.selectRowAtIndex();
|
_this.selectRowAtIndex();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
/*= require lib/utils/common_utils */
|
/*= require lib/utils/common_utils */
|
||||||
/*= require lib/utils/type_utility */
|
/*= require lib/utils/type_utility */
|
||||||
/*= require fuzzaldrin-plus */
|
/*= require fuzzaldrin-plus */
|
||||||
|
/*= require turbolinks */
|
||||||
|
/*= require jquery.turbolinks */
|
||||||
|
|
||||||
(function() {
|
(function() {
|
||||||
var addBodyAttributes, assertLinks, dashboardIssuesPath, dashboardMRsPath, groupIssuesPath, groupMRsPath, groupName, mockDashboardOptions, mockGroupOptions, mockProjectOptions, projectIssuesPath, projectMRsPath, projectName, userId, widget;
|
var addBodyAttributes, assertLinks, dashboardIssuesPath, dashboardMRsPath, groupIssuesPath, groupMRsPath, groupName, mockDashboardOptions, mockGroupOptions, mockProjectOptions, projectIssuesPath, projectMRsPath, projectName, userId, widget;
|
||||||
|
@ -138,7 +140,7 @@
|
||||||
list = widget.wrap.find('.dropdown-menu').find('ul');
|
list = widget.wrap.find('.dropdown-menu').find('ul');
|
||||||
return assertLinks(list, projectIssuesPath, projectMRsPath);
|
return assertLinks(list, projectIssuesPath, projectMRsPath);
|
||||||
});
|
});
|
||||||
return it('should not show category related menu if there is text in the input', function() {
|
it('should not show category related menu if there is text in the input', function() {
|
||||||
var link, list;
|
var link, list;
|
||||||
addBodyAttributes('project');
|
addBodyAttributes('project');
|
||||||
mockProjectOptions();
|
mockProjectOptions();
|
||||||
|
@ -148,6 +150,23 @@
|
||||||
link = "a[href='" + projectIssuesPath + "/?assignee_id=" + userId + "']";
|
link = "a[href='" + projectIssuesPath + "/?assignee_id=" + userId + "']";
|
||||||
return expect(list.find(link).length).toBe(0);
|
return expect(list.find(link).length).toBe(0);
|
||||||
});
|
});
|
||||||
|
return it('should not submit the search form when selecting an autocomplete row with the keyboard', function() {
|
||||||
|
var ENTER = 13;
|
||||||
|
var DOWN = 40;
|
||||||
|
addBodyAttributes();
|
||||||
|
mockDashboardOptions(true);
|
||||||
|
var submitSpy = spyOnEvent('form', 'submit');
|
||||||
|
widget.searchInput.focus();
|
||||||
|
widget.wrap.trigger($.Event('keydown', { which: DOWN }));
|
||||||
|
var enterKeyEvent = $.Event('keydown', { which: ENTER });
|
||||||
|
widget.searchInput.trigger(enterKeyEvent);
|
||||||
|
// This does not currently catch failing behavior. For security reasons,
|
||||||
|
// browsers will not trigger default behavior (form submit, in this
|
||||||
|
// example) on JavaScript-created keypresses.
|
||||||
|
expect(submitSpy).not.toHaveBeenTriggered();
|
||||||
|
// Does a worse job at capturing the intent of the test, but works.
|
||||||
|
expect(enterKeyEvent.isDefaultPrevented()).toBe(true);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
}).call(this);
|
}).call(this);
|
||||||
|
|
Loading…
Reference in New Issue