@@ -71,111 +71,111 @@ $.widget( "ui.menu", {
7171
7272 this . refresh ( ) ;
7373
74- this . element . attr ( "tabIndex" , 0 ) . bind ( "keydown.menu" , function ( event ) {
75- if ( self . options . disabled ) {
76- return ;
77- }
78- switch ( event . keyCode ) {
79- case $ . ui . keyCode . PAGE_UP :
80- self . previousPage ( event ) ;
81- event . preventDefault ( ) ;
82- event . stopImmediatePropagation ( ) ;
83- break ;
84- case $ . ui . keyCode . PAGE_DOWN :
85- self . nextPage ( event ) ;
86- event . preventDefault ( ) ;
87- event . stopImmediatePropagation ( ) ;
88- break ;
89- case $ . ui . keyCode . HOME :
90- self . _move ( "first" , "first" , event ) ;
91- event . preventDefault ( ) ;
92- event . stopImmediatePropagation ( ) ;
93- break ;
94- case $ . ui . keyCode . END :
95- self . _move ( "last" , "last" , event ) ;
96- event . preventDefault ( ) ;
97- event . stopImmediatePropagation ( ) ;
98- break ;
99- case $ . ui . keyCode . UP :
100- self . previous ( event ) ;
101- event . preventDefault ( ) ;
102- event . stopImmediatePropagation ( ) ;
103- break ;
104- case $ . ui . keyCode . DOWN :
105- self . next ( event ) ;
106- event . preventDefault ( ) ;
107- event . stopImmediatePropagation ( ) ;
108- break ;
109- case $ . ui . keyCode . LEFT :
110- if ( self . collapse ( event ) ) {
74+ this . element . attr ( "tabIndex" , 0 ) ;
75+ this . _bind ( {
76+ "keydown" : function ( event ) {
77+ switch ( event . keyCode ) {
78+ case $ . ui . keyCode . PAGE_UP :
79+ self . previousPage ( event ) ;
80+ event . preventDefault ( ) ;
11181 event . stopImmediatePropagation ( ) ;
112- }
113- event . preventDefault ( ) ;
114- break ;
115- case $ . ui . keyCode . RIGHT :
116- if ( self . expand ( event ) ) {
82+ break ;
83+ case $ . ui . keyCode . PAGE_DOWN :
84+ self . nextPage ( event ) ;
85+ event . preventDefault ( ) ;
11786 event . stopImmediatePropagation ( ) ;
118- }
119- event . preventDefault ( ) ;
120- break ;
121- case $ . ui . keyCode . ENTER :
122- if ( self . active . children ( "a[aria-haspopup='true']" ) . length ) {
123- if ( self . expand ( event ) ) {
124- event . stopImmediatePropagation ( ) ;
125- }
126- }
127- else {
128- self . select ( event ) ;
87+ break ;
88+ case $ . ui . keyCode . HOME :
89+ self . _move ( "first" , "first" , event ) ;
90+ event . preventDefault ( ) ;
12991 event . stopImmediatePropagation ( ) ;
130- }
131- event . preventDefault ( ) ;
132- break ;
133- case $ . ui . keyCode . ESCAPE :
134- if ( self . collapse ( event ) ) {
92+ break ;
93+ case $ . ui . keyCode . END :
94+ self . _move ( "last" , "last" , event ) ;
95+ event . preventDefault ( ) ;
13596 event . stopImmediatePropagation ( ) ;
136- }
137- event . preventDefault ( ) ;
138- break ;
139- default :
140- event . stopPropagation ( ) ;
141- clearTimeout ( self . filterTimer ) ;
142- var match ,
143- prev = self . previousFilter || "" ,
144- character = String . fromCharCode ( event . keyCode ) ,
145- skip = false ;
146-
147- if ( character == prev ) {
148- skip = true ;
149- } else {
150- character = prev + character ;
151- }
152- function escape ( value ) {
153- return value . replace ( / [ - [ \] { } ( ) * + ? . , \\ ^ $ | # \s ] / g , "\\$&" ) ;
154- }
155- match = self . activeMenu . children ( ".ui-menu-item" ) . filter ( function ( ) {
156- return new RegExp ( "^" + escape ( character ) , "i" )
157- . test ( $ ( this ) . children ( "a" ) . text ( ) ) ;
158- } ) ;
159- match = skip && match . index ( self . active . next ( ) ) != - 1 ? self . active . nextAll ( ".ui-menu-item" ) : match ;
160- if ( ! match . length ) {
161- character = String . fromCharCode ( event . keyCode ) ;
162- match = self . activeMenu . children ( ".ui-menu-item" ) . filter ( function ( ) {
97+ break ;
98+ case $ . ui . keyCode . UP :
99+ self . previous ( event ) ;
100+ event . preventDefault ( ) ;
101+ event . stopImmediatePropagation ( ) ;
102+ break ;
103+ case $ . ui . keyCode . DOWN :
104+ self . next ( event ) ;
105+ event . preventDefault ( ) ;
106+ event . stopImmediatePropagation ( ) ;
107+ break ;
108+ case $ . ui . keyCode . LEFT :
109+ if ( self . collapse ( event ) ) {
110+ event . stopImmediatePropagation ( ) ;
111+ }
112+ event . preventDefault ( ) ;
113+ break ;
114+ case $ . ui . keyCode . RIGHT :
115+ if ( self . expand ( event ) ) {
116+ event . stopImmediatePropagation ( ) ;
117+ }
118+ event . preventDefault ( ) ;
119+ break ;
120+ case $ . ui . keyCode . ENTER :
121+ if ( self . active . children ( "a[aria-haspopup='true']" ) . length ) {
122+ if ( self . expand ( event ) ) {
123+ event . stopImmediatePropagation ( ) ;
124+ }
125+ }
126+ else {
127+ self . select ( event ) ;
128+ event . stopImmediatePropagation ( ) ;
129+ }
130+ event . preventDefault ( ) ;
131+ break ;
132+ case $ . ui . keyCode . ESCAPE :
133+ if ( self . collapse ( event ) ) {
134+ event . stopImmediatePropagation ( ) ;
135+ }
136+ event . preventDefault ( ) ;
137+ break ;
138+ default :
139+ event . stopPropagation ( ) ;
140+ clearTimeout ( self . filterTimer ) ;
141+ var match ,
142+ prev = self . previousFilter || "" ,
143+ character = String . fromCharCode ( event . keyCode ) ,
144+ skip = false ;
145+
146+ if ( character == prev ) {
147+ skip = true ;
148+ } else {
149+ character = prev + character ;
150+ }
151+ function escape ( value ) {
152+ return value . replace ( / [ - [ \] { } ( ) * + ? . , \\ ^ $ | # \s ] / g , "\\$&" ) ;
153+ }
154+ match = self . activeMenu . children ( ".ui-menu-item" ) . filter ( function ( ) {
163155 return new RegExp ( "^" + escape ( character ) , "i" )
164156 . test ( $ ( this ) . children ( "a" ) . text ( ) ) ;
165157 } ) ;
166- }
167- if ( match . length ) {
168- self . focus ( event , match ) ;
169- if ( match . length > 1 ) {
170- self . previousFilter = character ;
171- self . filterTimer = setTimeout ( function ( ) {
158+ match = skip && match . index ( self . active . next ( ) ) != - 1 ? self . active . nextAll ( ".ui-menu-item" ) : match ;
159+ if ( ! match . length ) {
160+ character = String . fromCharCode ( event . keyCode ) ;
161+ match = self . activeMenu . children ( ".ui-menu-item" ) . filter ( function ( ) {
162+ return new RegExp ( "^" + escape ( character ) , "i" )
163+ . test ( $ ( this ) . children ( "a" ) . text ( ) ) ;
164+ } ) ;
165+ }
166+ if ( match . length ) {
167+ self . focus ( event , match ) ;
168+ if ( match . length > 1 ) {
169+ self . previousFilter = character ;
170+ self . filterTimer = setTimeout ( function ( ) {
171+ delete self . previousFilter ;
172+ } , 1000 ) ;
173+ } else {
172174 delete self . previousFilter ;
173- } , 1000 ) ;
175+ }
174176 } else {
175177 delete self . previousFilter ;
176178 }
177- } else {
178- delete self . previousFilter ;
179179 }
180180 }
181181 } ) ;
0 commit comments