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

Commit 6938b3b

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

File tree

1 file changed

+69
-15
lines changed

1 file changed

+69
-15
lines changed

test/ngAria/ariaSpec.js

+69-15
Original file line numberDiff line numberDiff line change
@@ -974,36 +974,90 @@ describe('$aria', function() {
974974
}
975975
);
976976

977-
it('should not prevent default keyboard action if the target element has editable content',
977+
fit('should not prevent default keyboard action if the target element has editable content',
978978
function() {
979+
// Note:
980+
// `contenteditable` is an enumarated (not a boolean) attribute (see
981+
// https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contenteditable).
982+
// We need to check the following conditions:
983+
// - No attribute.
984+
// - Value: ""
985+
// - Value: "true"
986+
// - Value: "false"
987+
988+
function eventFor(keyCode) {
989+
return {bubbles: true, cancelable: true, keyCode: keyCode};
990+
}
991+
979992
compileElement(
980993
'<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>' +
994+
// No attribute.
995+
'<div id="no-attribute">' +
996+
'<div ng-click="onClick($event)"></div>' +
997+
'<ul ng-click="onClick($event)"><li></li></ul>' +
998+
'</div>' +
999+
1000+
// Value: ""
1001+
'<div id="value-empty">' +
1002+
'<div ng-click="onClick($event)" contenteditable=""></div>' +
1003+
'<ul ng-click="onClick($event)"><li contenteditable=""></li></ul>' +
1004+
'</div>' +
1005+
1006+
// Value: "true"
1007+
'<div id="value-true">' +
1008+
'<div ng-click="onClick($event)" contenteditable="true"></div>' +
1009+
'<ul ng-click="onClick($event)"><li contenteditable="true"></li></ul>' +
1010+
'</div>' +
1011+
1012+
// Value: "false"
1013+
'<div id="value-false">' +
1014+
'<div ng-click="onClick($event)" contenteditable="false"></div>' +
1015+
'<ul ng-click="onClick($event)"><li contenteditable="false"></li></ul>' +
1016+
'</div>' +
9831017
'</section>');
9841018

985-
var divElement = element.find('div');
986-
var ulElement = element.find('ul');
987-
var liElement = element.find('li');
1019+
var containers = element.children();
1020+
var container;
1021+
1022+
// Attach to DOM, because... <--- TODO
1023+
document.body.appendChild(element[0]);
9881024

9891025
// Using `browserTrigger()`, because it supports event bubbling.
9901026

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});
1027+
// No attribute | Elements are not editable.
1028+
container = containers.eq(0);
1029+
browserTrigger(container.find('div'), 'keydown', eventFor(13));
1030+
browserTrigger(container.find('ul'), 'keydown', eventFor(32));
1031+
browserTrigger(container.find('li'), 'keydown', eventFor(13));
9951032

9961033
expect(clickEvents).toEqual(['div(true)', 'ul(true)', 'li(true)']);
9971034

1035+
// Value: "" | Elements are editable.
9981036
clickEvents = [];
999-
scope.$apply('edit = true');
1037+
container = containers.eq(1);
1038+
browserTrigger(container.find('div'), 'keydown', eventFor(32));
1039+
browserTrigger(container.find('ul'), 'keydown', eventFor(13));
1040+
browserTrigger(container.find('li'), 'keydown', eventFor(32));
1041+
1042+
expect(clickEvents).toEqual(['div(false)', 'ul(true)', 'li(false)']);
10001043

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});
1044+
// Value: "true" | Elements are editable.
1045+
clickEvents = [];
1046+
container = containers.eq(2);
1047+
browserTrigger(container.find('div'), 'keydown', eventFor(13));
1048+
browserTrigger(container.find('ul'), 'keydown', eventFor(32));
1049+
browserTrigger(container.find('li'), 'keydown', eventFor(13));
10051050

10061051
expect(clickEvents).toEqual(['div(false)', 'ul(true)', 'li(false)']);
1052+
1053+
// Value: "false" | Elements are not editable.
1054+
clickEvents = [];
1055+
container = containers.eq(3);
1056+
browserTrigger(container.find('div'), 'keydown', eventFor(32));
1057+
browserTrigger(container.find('ul'), 'keydown', eventFor(13));
1058+
browserTrigger(container.find('li'), 'keydown', eventFor(32));
1059+
1060+
expect(clickEvents).toEqual(['div(true)', 'ul(true)', 'li(true)']);
10071061
}
10081062
);
10091063

0 commit comments

Comments
 (0)