@@ -14,6 +14,7 @@ $.widget("ui.menubar", {
14
14
_create : function ( ) {
15
15
var self = this ;
16
16
var items = this . items = this . element . children ( "button, a" ) ;
17
+ items . slice ( 1 ) . attr ( "tabIndex" , - 1 ) ;
17
18
var o = this . options ;
18
19
19
20
this . element . addClass ( 'ui-menubar ui-widget-header ui-helper-clearfix' ) ;
@@ -32,19 +33,16 @@ $.widget("ui.menubar", {
32
33
event . stopPropagation ( ) ;
33
34
switch ( event . keyCode ) {
34
35
case $ . ui . keyCode . LEFT :
35
- self . left ( event ) ;
36
+ self . _left ( event ) ;
36
37
event . preventDefault ( ) ;
37
38
break ;
38
39
case $ . ui . keyCode . RIGHT :
39
- self . right ( event ) ;
40
+ self . _right ( event ) ;
40
41
event . preventDefault ( ) ;
41
42
break ;
42
43
} ;
43
44
} ) . blur ( function ( ) {
44
- $ ( this ) . hide ( ) . prev ( ) . removeClass ( "ui-state-active" ) . removeAttr ( "tabIndex" ) ;
45
- self . timer = setTimeout ( function ( ) {
46
- self . open = false ;
47
- } , 13 ) ;
45
+ self . _close ( ) ;
48
46
} ) ;
49
47
} ) ;
50
48
items . each ( function ( ) {
@@ -64,11 +62,20 @@ $.widget("ui.menubar", {
64
62
} )
65
63
. bind ( "keydown" , function ( event ) {
66
64
switch ( event . keyCode ) {
65
+ case $ . ui . keyCode . SPACE :
67
66
case $ . ui . keyCode . UP :
68
67
case $ . ui . keyCode . DOWN :
69
68
self . _open ( event , $ ( this ) . next ( ) ) ;
70
69
event . preventDefault ( ) ;
71
70
break ;
71
+ case $ . ui . keyCode . LEFT :
72
+ self . _prev ( event , $ ( this ) ) ;
73
+ event . preventDefault ( ) ;
74
+ break ;
75
+ case $ . ui . keyCode . RIGHT :
76
+ self . _next ( event , $ ( this ) ) ;
77
+ event . preventDefault ( ) ;
78
+ break ;
72
79
}
73
80
} )
74
81
. addClass ( "ui-button ui-widget ui-button-text-only ui-menubar-link" )
@@ -86,7 +93,7 @@ $.widget("ui.menubar", {
86
93
} ) ;
87
94
self . _bind ( document , {
88
95
click : function ( event ) {
89
- ! $ ( event . target ) . closest ( ".ui-menubar" ) . length && self . _close ( ) ;
96
+ self . open && ! $ ( event . target ) . closest ( ".ui-menubar" ) . length && self . _close ( ) ;
90
97
}
91
98
} )
92
99
self . _bind ( {
@@ -103,12 +110,18 @@ $.widget("ui.menubar", {
103
110
} ,
104
111
105
112
_close : function ( ) {
106
- this . items . next ( "ul" ) . hide ( ) ;
107
- this . items . removeClass ( "ui-state-active" ) . removeAttr ( "tabIndex" ) ;
108
- this . open = false ;
113
+ this . active . menu ( "closeAll" ) . hide ( ) ;
114
+ this . active . prev ( ) . removeClass ( "ui-state-active" ) . removeAttr ( "tabIndex" ) ;
115
+ this . active = null ;
116
+ var self = this ;
117
+ // delay for the next focus event to see it as still "open"
118
+ self . timer = setTimeout ( function ( ) {
119
+ self . open = false ;
120
+ } , 13 ) ;
109
121
} ,
110
122
111
123
_open : function ( event , menu ) {
124
+ // TODO refactor with _close
112
125
if ( this . active ) {
113
126
this . active . menu ( "closeAll" ) . hide ( ) ;
114
127
this . active . prev ( ) . removeClass ( "ui-state-active" ) . removeAttr ( "tabIndex" ) ;
@@ -124,7 +137,27 @@ $.widget("ui.menubar", {
124
137
} ) . focus ( ) ;
125
138
} ,
126
139
127
- left : function ( event ) {
140
+ _prev : function ( event , button ) {
141
+ button . attr ( "tabIndex" , - 1 ) ;
142
+ var prev = button . prevAll ( ".ui-button" ) . eq ( 0 ) ;
143
+ if ( prev . length ) {
144
+ prev . removeAttr ( "tabIndex" ) [ 0 ] . focus ( ) ;
145
+ } else {
146
+ this . element . children ( ".ui-button:last" ) . removeAttr ( "tabIndex" ) [ 0 ] . focus ( ) ;
147
+ }
148
+ } ,
149
+
150
+ _next : function ( event , button ) {
151
+ button . attr ( "tabIndex" , - 1 ) ;
152
+ var next = button . nextAll ( ".ui-button" ) . eq ( 0 ) ;
153
+ if ( next . length ) {
154
+ next . removeAttr ( "tabIndex" ) [ 0 ] . focus ( ) ;
155
+ } else {
156
+ this . element . children ( ".ui-button:first" ) . removeAttr ( "tabIndex" ) [ 0 ] . focus ( ) ;
157
+ }
158
+ } ,
159
+
160
+ _left : function ( event ) {
128
161
var prev = this . active . prevAll ( ".ui-menu" ) . eq ( 0 ) ;
129
162
if ( prev . length ) {
130
163
this . _open ( event , prev ) ;
@@ -133,7 +166,7 @@ $.widget("ui.menubar", {
133
166
}
134
167
} ,
135
168
136
- right : function ( event ) {
169
+ _right : function ( event ) {
137
170
var next = this . active . nextAll ( ".ui-menu" ) . eq ( 0 ) ;
138
171
if ( next . length ) {
139
172
this . _open ( event , next ) ;
0 commit comments