Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 628bd59

Browse files
committed
fixup! fix(aria/ngClick): check if element is contenteditable before blocking spacebar
1 parent 3f23fd9 commit 628bd59

File tree

1 file changed

+53
-20
lines changed

1 file changed

+53
-20
lines changed

test/ngAria/ariaSpec.js

+53-20
Original file line numberDiff line numberDiff line change
@@ -954,6 +954,59 @@ describe('$aria', function() {
954954
expect(clickEvents).toEqual(['div(true)', 'li(true)', 'div(true)', 'li(true)']);
955955
});
956956

957+
it('should trigger a click in browsers that provide `event.which` instead of `event.keyCode`',
958+
function() {
959+
compileElement(
960+
'<section>' +
961+
'<div ng-click="onClick($event)"></div>' +
962+
'<ul><li ng-click="onClick($event)"></li></ul>' +
963+
'</section>');
964+
965+
var divElement = element.find('div');
966+
var liElement = element.find('li');
967+
968+
divElement.triggerHandler({type: 'keydown', which: 13});
969+
liElement.triggerHandler({type: 'keydown', which: 13});
970+
divElement.triggerHandler({type: 'keydown', which: 32});
971+
liElement.triggerHandler({type: 'keydown', which: 32});
972+
973+
expect(clickEvents).toEqual(['div(true)', 'li(true)', 'div(true)', 'li(true)']);
974+
}
975+
);
976+
977+
it('should not prevent default keyboard action if the target element has editable content',
978+
function() {
979+
compileElement(
980+
'<section>' +
981+
'<div ng-click="onClick($event)" ng-attr-contenteditable="{{ edit }}"></div>' +
982+
'<ul ng-click="onClick($event)"><li ng-attr-contenteditable="{{ edit }}"></li></ul>' +
983+
'</section>');
984+
985+
var divElement = element.find('div');
986+
var ulElement = element.find('ul');
987+
var liElement = element.find('li');
988+
989+
// Using `browserTrigger()`, because it supports event bubbling.
990+
991+
// Element are not editable yet.
992+
browserTrigger(divElement, 'keydown', {bubbles: true, cancelable: true, keyCode: 13});
993+
browserTrigger(ulElement, 'keydown', {bubbles: true, cancelable: true, keyCode: 32});
994+
browserTrigger(liElement, 'keydown', {bubbles: true, cancelable: true, keyCode: 13});
995+
996+
expect(clickEvents).toEqual(['div(true)', 'ul(true)', 'li(true)']);
997+
998+
clickEvents = [];
999+
scope.$apply('edit = true');
1000+
1001+
// Element are now editable.
1002+
browserTrigger(divElement, 'keydown', {bubbles: true, cancelable: true, keyCode: 32});
1003+
browserTrigger(ulElement, 'keydown', {bubbles: true, cancelable: true, keyCode: 13});
1004+
browserTrigger(liElement, 'keydown', {bubbles: true, cancelable: true, keyCode: 32});
1005+
1006+
expect(clickEvents).toEqual(['div(false)', 'ul(true)', 'li(false)']);
1007+
}
1008+
);
1009+
9571010
they('should not prevent default keyboard action if an interactive $type element' +
9581011
'is nested inside ng-click', nodeBlackList, function(elementType) {
9591012
function createHTML(type) {
@@ -981,26 +1034,6 @@ describe('$aria', function() {
9811034
}
9821035
);
9831036

984-
it('should trigger a click in browsers that provide `event.which` instead of `event.keyCode`',
985-
function() {
986-
compileElement(
987-
'<section>' +
988-
'<div ng-click="onClick($event)"></div>' +
989-
'<ul><li ng-click="onClick($event)"></li></ul>' +
990-
'</section>');
991-
992-
var divElement = element.find('div');
993-
var liElement = element.find('li');
994-
995-
divElement.triggerHandler({type: 'keydown', which: 13});
996-
liElement.triggerHandler({type: 'keydown', which: 13});
997-
divElement.triggerHandler({type: 'keydown', which: 32});
998-
liElement.triggerHandler({type: 'keydown', which: 32});
999-
1000-
expect(clickEvents).toEqual(['div(true)', 'li(true)', 'div(true)', 'li(true)']);
1001-
}
1002-
);
1003-
10041037
they('should not bind to key events if there is existing `ng-$prop`',
10051038
['keydown', 'keypress', 'keyup'], function(eventName) {
10061039
scope.onKeyEvent = jasmine.createSpy('onKeyEvent');

0 commit comments

Comments
 (0)