@@ -19,7 +19,7 @@ export default Component.extend({
19
19
return this . isDropdownOpen ? 'true' : 'false' ;
20
20
} ) ,
21
21
22
- navbar : service ( ) , //TODO also do we need this too?
22
+ navbar : service ( ) ,
23
23
24
24
actions : {
25
25
triggerDropdown ( ) {
@@ -29,11 +29,16 @@ export default Component.extend({
29
29
// once it's open, let's make sure it can do some things
30
30
schedule ( 'afterRender' , this , function ( ) {
31
31
32
-
33
32
// move focus to the first item in the dropdown
34
33
let dropdownList = this . element . querySelector ( '.navbar-dropdown-list' ) ;
35
34
this . handleFirstElementFocus ( ) ;
36
35
36
+ dropdownList . addEventListener ( 'click' , event => {
37
+ if ( this . isDropdownOpen ) {
38
+ this . handleBlur ( ) ;
39
+ }
40
+ } ) ;
41
+
37
42
// add event listeners for keyboard events
38
43
dropdownList . addEventListener ( 'keydown' , event => {
39
44
@@ -42,7 +47,7 @@ export default Component.extend({
42
47
this . closeDropdown ( ) ;
43
48
this . returnFocus ( ) ;
44
49
45
- // if focus leaves the open dropdown, close it (without trying to otherwise control focus)
50
+ // if focus leaves the open dropdown via keypress , close it (without trying to otherwise control focus)
46
51
} else if ( this . isDropdownOpen ) {
47
52
this . handleBlur ( ) ;
48
53
@@ -60,8 +65,21 @@ export default Component.extend({
60
65
this . set ( 'isDropdownOpen' , false ) ;
61
66
} ,
62
67
68
+ handleBlur ( ) {
69
+ next ( this , function ( ) {
70
+ let subItems = Array . from ( this . element . querySelectorAll ( '.navbar-dropdown-list li' ) ) ;
71
+ let focused = subItems . find ( item => document . activeElement === item . querySelector ( 'a' ) ) ;
72
+ console . log ( focused ) ;
73
+
74
+ //if the dropdown isn't focused, close it
75
+ if ( ! focused ) {
76
+ this . closeDropdown ( ) ;
77
+ }
78
+ } ) ;
79
+ } ,
80
+
63
81
handleFirstElementFocus ( ) {
64
- // Identify / set focus on the first item in the dropdown list automatically
82
+ // Identify the first item in the dropdown list & set focus on it
65
83
let firstFocusable = this . element . querySelector ( '.navbar-dropdown-list li:first-of-type a' ) ;
66
84
firstFocusable . focus ( ) ;
67
85
} ,
@@ -74,19 +92,8 @@ export default Component.extend({
74
92
} ) ;
75
93
} ,
76
94
77
- handleBlur ( ) {
78
- next ( this , function ( ) {
79
- let subItems = Array . from ( this . element . querySelectorAll ( '.navbar-dropdown-list li' ) ) ;
80
- let focused = subItems . find ( item => document . activeElement === item . querySelector ( 'a' ) ) ;
81
-
82
- if ( ! focused ) {
83
- this . set ( 'isDropdownOpen' , false ) ;
84
- }
85
- } ) ;
86
- } ,
87
-
88
- willDestroyElement ( ) {
95
+ willDestroy ( ) {
89
96
document . removeEventListener ( 'keydown' , this . triggerDropdown ) ;
97
+ document . removeEventListener ( 'click' , this . triggerDropdown ) ;
90
98
}
91
-
92
99
} ) ;
0 commit comments