Skip to content

Commit 3e6084b

Browse files
committed
[refactor] improve modal focus
1 parent 65e84f4 commit 3e6084b

File tree

2 files changed

+57
-26
lines changed

2 files changed

+57
-26
lines changed

‎src/js/menu.js‎

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,5 @@
11
varmenu=(function(){
22

3-
varbind={};
4-
5-
bind.focus={
6-
loop: function(event){
7-
varfirstElement=helper.e(".control-menu-layout");
8-
varlastElement=helper.e(".menu-close-tab");
9-
if(event.keyCode==9&&event.shiftKey){
10-
if(document.activeElement===firstElement){
11-
lastElement.focus();
12-
event.preventDefault();
13-
}
14-
}elseif(event.keyCode==9){
15-
if(document.activeElement===lastElement){
16-
firstElement.focus();
17-
event.preventDefault();
18-
}
19-
};
20-
},
21-
add: function(){
22-
window.addEventListener("keydown",bind.focus.loop,false);
23-
},
24-
remove: function(){
25-
window.removeEventListener("keydown",bind.focus.loop,false);
26-
}
27-
};
28-
293
varmod={};
304

315
mod.open=function(){
@@ -64,6 +38,32 @@ var menu = (function(){
6438
}
6539
};
6640

41+
varbind={};
42+
43+
bind.focus={
44+
loop: function(event){
45+
varfirstElement=helper.e(".control-menu-layout");
46+
varlastElement=helper.e(".menu-close-tab");
47+
if(event.keyCode==9&&event.shiftKey){
48+
if(document.activeElement===firstElement){
49+
lastElement.focus();
50+
event.preventDefault();
51+
}
52+
}elseif(event.keyCode==9){
53+
if(document.activeElement===lastElement){
54+
firstElement.focus();
55+
event.preventDefault();
56+
}
57+
};
58+
},
59+
add: function(){
60+
window.addEventListener("keydown",bind.focus.loop,false);
61+
},
62+
remove: function(){
63+
window.removeEventListener("keydown",bind.focus.loop,false);
64+
}
65+
};
66+
6767
render={};
6868

6969
render.panel=function(){
@@ -257,6 +257,7 @@ var menu = (function(){
257257
return{
258258
init: init,
259259
mod: mod,
260+
bind: bind,
260261
render: render,
261262
open: open,
262263
close: close,

‎src/js/modal.js‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,33 @@ var modal = (function(){
2020
});
2121
};
2222

23+
varbind={};
24+
25+
bind.focus={
26+
loop: function(event){
27+
varallElements=helper.e(".modal").querySelectorAll("[tabindex]");
28+
varfirstElement=allElements[0];
29+
varlastElement=allElements[allElements.length-1];
30+
if(event.keyCode==9&&event.shiftKey){
31+
if(document.activeElement===firstElement){
32+
lastElement.focus();
33+
event.preventDefault();
34+
}
35+
}elseif(event.keyCode==9){
36+
if(document.activeElement===lastElement){
37+
firstElement.focus();
38+
event.preventDefault();
39+
}
40+
};
41+
},
42+
add: function(){
43+
window.addEventListener("keydown",bind.focus.loop,false);
44+
},
45+
remove: function(){
46+
window.removeEventListener("keydown",bind.focus.loop,false);
47+
}
48+
};
49+
2350
varrender={};
2451

2552
render.toggle=function(override){
@@ -144,11 +171,13 @@ var modal = (function(){
144171
varopen=function(override){
145172
mod.open();
146173
render.open(override);
174+
bind.focus.add();
147175
};
148176

149177
varclose=function(){
150178
mod.close();
151179
render.close();
180+
bind.focus.remove();
152181
};
153182

154183
varinit=function(){
@@ -160,6 +189,7 @@ var modal = (function(){
160189
return{
161190
init: init,
162191
mod: mod,
192+
bind: bind,
163193
render: render,
164194
open: open,
165195
close: close

0 commit comments

Comments
(0)