@@ -21,6 +21,20 @@ if (J2S.isResourceLoaded("swingjs/jquery/j2sMenu.js", true))return;
2121
2222if ( ! jQuery . ui . menu )
2323try {
24+
25+ var delayMe = function ( element , f , ms ) {
26+ var id = element . _delay ( f , ms ) ;
27+ System . out . println ( [ ms , id , f ] ) ;
28+ return id ;
29+ } ;
30+
31+ var clearMe = function ( id ) {
32+ System . out . println ( "j2sm clear " + id )
33+ return clearTimeout ( id ) ;
34+ } ;
35+
36+
37+
2438 ( function ( e , t ) { var n = ! 1 ; e . widget ( "ui.menu" , {
2539 version :"1.9.2" ,
2640 defaultElement :"<ul>" ,
5165// BH 12/20/2018 adds persistence for JMenu clicks
5266
5367if ( this . active && this . active [ 0 ] . attributes . name && this . active [ 0 ] . attributes . name . value == "javax.swing.JMenu" ) {
54- clearTimeout ( this . timer ) ;
68+ clearMe ( this . timer ) ;
5569return
5670}
5771
5872var r = e ( t . target ) . closest ( ".ui-menu-item" ) ;
5973
60- ! n && r . not ( ".ui-state-disabled" ) . length && ( n = ! 0 , this . select ( t ) , r . has ( ".ui-menu" ) . length ?this . expand ( t ) :this . element . is ( ":focus" ) || ( this . element . trigger ( "focus" , [ ! 0 ] ) , this . active && this . active . parents ( ".ui-menu" ) . length === 1 && clearTimeout ( this . timer ) ) )
74+ ! n && r . not ( ".ui-state-disabled" ) . length && ( n = ! 0 , this . select ( t ) , r . has ( ".ui-menu" ) . length ?this . expand ( t ) :this . element . is ( ":focus" ) || ( this . element . trigger ( "focus" , [ ! 0 ] ) , this . active && this . active . parents ( ".ui-menu" ) . length === 1 && clearMe ( this . timer ) ) )
6175
6276; $ ( ".ui-menu" ) . hide ( ) ;
6377
@@ -77,7 +91,8 @@ var r=e(t.target).closest(".ui-menu-item");
7791 mouseleave :"collapseAll" ,
7892 "mouseleave .ui-menu" : "collapseAll" ,
7993 focus :function ( e , t ) { var n = this . active || this . element . children ( ".ui-menu-item" ) . eq ( 0 ) ; t || this . focus ( e , n ) } ,
80- blur :function ( t ) { this . _delay ( function ( ) { e . contains ( this . element [ 0 ] , this . document [ 0 ] . activeElement ) || this . collapseAll ( t ) } ) } ,
94+ blur :function ( t ) {
95+ delayMe ( this , function ( ) { e . contains ( this . element [ 0 ] , this . document [ 0 ] . activeElement ) || this . collapseAll ( t ) } ) } ,
8196 keydown :"_keydown"
8297 } ) ,
8398 this . refresh ( ) ,
@@ -94,7 +109,8 @@ var r=e(t.target).closest(".ui-menu-item");
94109 . children ( "a" ) . removeUniqueId ( ) . removeClass ( "ui-corner-all ui-state-hover" )
95110 . removeAttr ( "tabIndex" ) . removeAttr ( "role" ) . removeAttr ( "aria-haspopup" ) . children ( ) . each ( function ( ) { var t = e ( this ) ; t . data ( "ui-menu-submenu-carat" ) && t . remove ( ) } ) , this . element . find ( ".ui-menu-divider" ) . removeClass ( "ui-menu-divider ui-widget-content" )
96111 } ,
97- _keydown :function ( t ) { function a ( e ) { return e . replace ( / [ \- \[ \] { } ( ) * + ? . , \\ \^ $ | # \s ] / g, "\\$&" ) } var n , r , i , s , o , u = ! 0 ; switch ( t . keyCode ) { case e . ui . keyCode . PAGE_UP :this . previousPage ( t ) ; break ; case e . ui . keyCode . PAGE_DOWN :this . nextPage ( t ) ; break ; case e . ui . keyCode . HOME :this . _move ( "first" , "first" , t ) ; break ; case e . ui . keyCode . END :this . _move ( "last" , "last" , t ) ; break ; case e . ui . keyCode . UP :this . previous ( t ) ; break ; case e . ui . keyCode . DOWN :this . next ( t ) ; break ; case e . ui . keyCode . LEFT :this . collapse ( t ) ; break ; case e . ui . keyCode . RIGHT :this . active && ! this . active . is ( ".ui-state-disabled" ) && this . expand ( t ) ; break ; case e . ui . keyCode . ENTER :case e . ui . keyCode . SPACE :this . _activate ( t ) ; break ; case e . ui . keyCode . ESCAPE :this . collapse ( t ) ; break ; default :u = ! 1 , r = this . previousFilter || "" , i = String . fromCharCode ( t . keyCode ) , s = ! 1 , clearTimeout ( this . filterTimer ) , i === r ?s = ! 0 :i = r + i , o = new RegExp ( "^" + a ( i ) , "i" ) , n = this . activeMenu . children ( ".ui-menu-item" ) . filter ( function ( ) { return o . test ( e ( this ) . children ( "a" ) . text ( ) ) } ) , n = s && n . index ( this . active . next ( ) ) !== - 1 ?this . active . nextAll ( ".ui-menu-item" ) :n , n . length || ( i = String . fromCharCode ( t . keyCode ) , o = new RegExp ( "^" + a ( i ) , "i" ) , n = this . activeMenu . children ( ".ui-menu-item" ) . filter ( function ( ) { return o . test ( e ( this ) . children ( "a" ) . text ( ) ) } ) ) , n . length ?( this . focus ( t , n ) , n . length > 1 ?( this . previousFilter = i , this . filterTimer = this . _delay ( function ( ) { delete this . previousFilter } , 1e3 ) ) :delete this . previousFilter ) :delete this . previousFilter } u && t . preventDefault ( ) } ,
112+ _keydown :function ( t ) { function a ( e ) { return e . replace ( / [ \- \[ \] { } ( ) * + ? . , \\ \^ $ | # \s ] / g, "\\$&" ) } var n , r , i , s , o , u = ! 0 ; switch ( t . keyCode ) { case e . ui . keyCode . PAGE_UP :this . previousPage ( t ) ; break ; case e . ui . keyCode . PAGE_DOWN :this . nextPage ( t ) ; break ; case e . ui . keyCode . HOME :this . _move ( "first" , "first" , t ) ; break ; case e . ui . keyCode . END :this . _move ( "last" , "last" , t ) ; break ; case e . ui . keyCode . UP :this . previous ( t ) ; break ; case e . ui . keyCode . DOWN :this . next ( t ) ; break ; case e . ui . keyCode . LEFT :this . collapse ( t ) ; break ; case e . ui . keyCode . RIGHT :this . active && ! this . active . is ( ".ui-state-disabled" ) && this . expand ( t ) ; break ; case e . ui . keyCode . ENTER :case e . ui . keyCode . SPACE :this . _activate ( t ) ; break ; case e . ui . keyCode . ESCAPE :this . collapse ( t ) ; break ; default :u = ! 1 , r = this . previousFilter || "" , i = String . fromCharCode ( t . keyCode ) , s = ! 1 , clearMe ( this . filterTimer ) , i === r ?s = ! 0 :i = r + i , o = new RegExp ( "^" + a ( i ) , "i" ) , n = this . activeMenu . children ( ".ui-menu-item" ) . filter ( function ( ) { return o . test ( e ( this ) . children ( "a" ) . text ( ) ) } ) , n = s && n . index ( this . active . next ( ) ) !== - 1 ?this . active . nextAll ( ".ui-menu-item" ) :n , n . length || ( i = String . fromCharCode ( t . keyCode ) , o = new RegExp ( "^" + a ( i ) , "i" ) , n = this . activeMenu . children ( ".ui-menu-item" ) . filter ( function ( ) { return o . test ( e ( this ) . children ( "a" ) . text ( ) ) } ) ) , n . length ?( this . focus ( t , n ) , n . length > 1 ?( this . previousFilter = i ,
113+ this . filterTimer = delayMe ( function ( ) { delete this . previousFilter } , 1e3 ) ) :delete this . previousFilter ) :delete this . previousFilter } u && t . preventDefault ( ) } ,
98114 _activate :function ( e ) { this . active . is ( ".ui-state-disabled" ) || ( this . active . children ( "a[aria-haspopup='true']" ) . length ?this . expand ( e ) :this . select ( e ) ) } ,
99115 refresh :function ( ) {
100116 var t , n = this . options . icons . submenu , role = this . options . role ,
@@ -117,7 +133,7 @@ var r=e(t.target).closest(".ui-menu-item");
117133 r . attr ( "id" ) ) ,
118134 this . active . parent ( ) . closest ( ".ui-menu-item" ) . children ( "a:first" ) . addClass ( "ui-state-active" ) ,
119135 e && e . type === "keydown" ?this . _close ( ) :
120- this . timer = this . _delay ( function ( ) { this . _close ( ) } , this . delay ) ,
136+ this . timer = delayMe ( this , function ( ) { this . _close ( ) } , this . delay ) ,
121137n = t . children ( ".ui-menu" ) , n . length && / ^ m o u s e / . test ( e . type )
122138&& this . _startOpening ( n ) , this . activeMenu = t . parent ( ) ,
123139this . _trigger ( "focus" , e , { item :t } ) } ,
@@ -129,15 +145,18 @@ this._trigger("focus",e,{item:t})},
129145 }
130146
131147
132- t || clearTimeout ( this . timer ) ; if ( ! this . active ) return ;
148+ t || clearMe ( this . timer ) ; if ( ! this . active ) return ;
133149
134150 this . active
135151 //.children("a")
136- . removeClass ( "ui-state-focus" ) , this . active = null , this . _trigger ( "blur" , e , { item :this . active } ) } ,
137- _startOpening :function ( e ) { clearTimeout ( this . timer ) ; if ( e . attr ( "aria-hidden" ) !== "true" ) return ; this . timer = this . _delay ( function ( ) { this . _close ( ) , this . _open ( e ) } , this . delay ) } ,
138- _open :function ( t ) { var n = e . extend ( { of :this . active } , this . options . position ) ; clearTimeout ( this . timer ) , this . element . find ( ".ui-menu" ) . not ( t . parents ( ".ui-menu" ) ) . hide ( ) . attr ( "aria-hidden" , "true" ) , t . show ( ) . removeAttr ( "aria-hidden" ) . attr ( "aria-expanded" , "true" ) . position ( n ) } ,
152+ . removeClass ( "ui-state-focus" ) , this . active = null , this . _trigger ( "blur" , e , { item :this . active } )
153+ } ,
154+ _startOpening :function ( e ) { clearMe ( this . timer ) ; if ( e . attr ( "aria-hidden" ) !== "true" ) return ;
155+ this . timer = delayMe ( this , function ( ) { this . _close ( ) , this . _open ( e ) } , this . delay ) } ,
156+ _open :function ( t ) { var n = e . extend ( { of :this . active } , this . options . position ) ; clearMe ( this . timer ) , this . element . find ( ".ui-menu" ) . not ( t . parents ( ".ui-menu" ) ) . hide ( ) . attr ( "aria-hidden" , "true" ) , t . show ( ) . removeAttr ( "aria-hidden" ) . attr ( "aria-expanded" , "true" ) . position ( n ) } ,
139157 collapseAll :function ( t , n ) {
140- clearTimeout ( this . timer ) , this . timer = this . _delay (
158+ clearMe ( this . timer ) ,
159+ this . timer = delayMe ( this ,
141160 function ( ) {
142161 var r = n ?this . element :e ( t && t . target ) . closest ( this . element . find ( ".ui-menu" ) ) ;
143162 r . length || ( r = this . element ) ,
@@ -163,7 +182,8 @@ e.find(".ui-menu")
163182 collapse :function ( e ) { var t = this . active && this . active . parent ( ) . closest ( ".ui-menu-item" , this . element ) ; t && t . length && ( this . _close ( ) ,
164183 this . focus ( e , t ) )
165184 } ,
166- expand :function ( e ) { var t = this . active && this . active . children ( ".ui-menu " ) . children ( ".ui-menu-item" ) . first ( ) ; t && t . length && ( this . _open ( t . parent ( ) ) , this . _delay ( function ( ) { this . focus ( e , t ) } ) ) } ,
185+ expand :function ( e ) { var t = this . active && this . active . children ( ".ui-menu " ) . children ( ".ui-menu-item" ) . first ( ) ; t && t . length && ( this . _open ( t . parent ( ) ) ,
186+ delayMe ( this , function ( ) { this . focus ( e , t ) } ) ) } ,
167187 next :function ( e ) { this . _move ( "next" , "first" , e ) } ,
168188 previous :function ( e ) { this . _move ( "prev" , "last" , e ) } ,
169189 isFirstItem :function ( ) { return this . active && ! this . active . prevAll ( ".ui-menu-item" ) . length } ,
0 commit comments