Skip to content
This repository was archived by the owner on May 29, 2019. It is now read-only.

Commit 1417c54

Browse files
committed
feat(dropdownToggle): add support for escape key
Closes #1558
1 parent ae31079 commit 1417c54

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

src/dropdownToggle/dropdownToggle.js

+8
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ angular.module('ui.bootstrap.dropdownToggle', [])
1010
this.open = function( dropdownScope ) {
1111
if ( !openScope ) {
1212
$document.bind('click', closeDropdown);
13+
$document.bind('keydown', escapeKeyBind);
1314
}
1415

1516
if ( openScope && openScope !== dropdownScope ) {
@@ -23,6 +24,7 @@ angular.module('ui.bootstrap.dropdownToggle', [])
2324
if ( openScope === dropdownScope ) {
2425
openScope = null;
2526
$document.unbind('click', closeDropdown);
27+
$document.unbind('keydown', escapeKeyBind);
2628
}
2729
};
2830

@@ -31,6 +33,12 @@ angular.module('ui.bootstrap.dropdownToggle', [])
3133
openScope.isOpen = false;
3234
});
3335
};
36+
37+
var escapeKeyBind = function( evt ) {
38+
if ( evt.which === 27 ) {
39+
closeDropdown();
40+
}
41+
};
3442
}])
3543

3644
.controller('DropdownController', ['$scope', '$attrs', 'dropdownConfig', 'dropdownService', function($scope, $attrs, dropdownConfig, dropdownService) {

src/dropdownToggle/test/dropdownToggle.spec.js

+18
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ describe('dropdownToggle', function() {
1414
elm.find('a').click();
1515
};
1616

17+
var triggerKeyDown = function (element, keyCode) {
18+
var e = $.Event('keydown');
19+
e.which = keyCode;
20+
element.trigger(e);
21+
};
22+
1723
describe('basic', function() {
1824
function dropdown() {
1925
return $compile('<li class="dropdown"><a dropdown-toggle></a><ul><li>Hello</li></ul></li>')($rootScope);
@@ -38,6 +44,18 @@ describe('dropdownToggle', function() {
3844
expect(element.hasClass('open')).toBe(false);
3945
});
4046

47+
it('should close on escape key', function() {
48+
clickDropdownToggle();
49+
triggerKeyDown($document, 27);
50+
expect(element.hasClass('open')).toBe(false);
51+
});
52+
53+
it('should not close on backspace key', function() {
54+
clickDropdownToggle();
55+
triggerKeyDown($document, 8);
56+
expect(element.hasClass('open')).toBe(true);
57+
});
58+
4159
it('should close on $location change', function() {
4260
clickDropdownToggle();
4361
expect(element.hasClass('open')).toBe(true);

0 commit comments

Comments
 (0)