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

Commit a05b9c1

Browse files
stryjuwesleycho
authored andcommitted
fix(modal): skipping ESC handling for form inputs
BREAKING CHANGE: Allow the user to hit `esc` inside an element in a modal and not exit the modal if the event has been `defaultPrevented` Closes #3551 Fixes #2544
1 parent 1ecd82c commit a05b9c1

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

package.json

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
"version": "0.13.3-SNAPSHOT",
55
"homepage": "http://angular-ui.github.io/bootstrap/",
66
"dependencies": {},
7+
"scripts":{
8+
"test": "grunt"
9+
},
710
"repository": {
811
"type": "git",
912
"url": "https://github.com/angular-ui/bootstrap.git"

src/modal/modal.js

+4
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,10 @@ angular.module('ui.bootstrap.modal', [])
339339
}
340340

341341
$document.bind('keydown', function (evt) {
342+
if (evt.isDefaultPrevented()) {
343+
return evt;
344+
}
345+
342346
var modal = openedWindows.top();
343347
if (modal && modal.value.keyboard) {
344348
switch (evt.which){

src/modal/test/modal.spec.js

+24
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,30 @@ describe('$modal', function () {
243243
expect($document).toHaveModalsOpen(0);
244244
});
245245

246+
it('should not close on ESC if event.preventDefault() was issued', function () {
247+
var modal = open({template: '<div><button>x</button></div>' });
248+
expect($document).toHaveModalsOpen(1);
249+
250+
var button = angular.element('button').on('keydown', preventKeyDown);
251+
252+
triggerKeyDown(button, 27);
253+
$rootScope.$digest();
254+
255+
expect($document).toHaveModalsOpen(1);
256+
257+
button.off('keydown', preventKeyDown);
258+
259+
triggerKeyDown(button, 27);
260+
$animate.triggerCallbacks();
261+
$rootScope.$digest();
262+
263+
expect($document).toHaveModalsOpen(0);
264+
265+
function preventKeyDown(evt) {
266+
evt.preventDefault();
267+
}
268+
});
269+
246270
it('should support closing on backdrop click', function () {
247271

248272
var modal = open({template: '<div>Content</div>'});

0 commit comments

Comments
 (0)