@@ -37,6 +37,7 @@ $.widget( "mobile.panel", {
3737 _panelID : null ,
3838 _closeLink : null ,
3939 _parentPage : null ,
40+ _page : null ,
4041 _overlayTheme : null ,
4142 _modal : null ,
4243 _panelInner : null ,
@@ -52,6 +53,7 @@ $.widget( "mobile.panel", {
5253 _panelID : $el . attr ( "id" ) ,
5354 _closeLink : $el . find ( ":jqmData(rel='close')" ) ,
5455 _parentPage : ( parentPage . length > 0 ) ? parentPage : false ,
56+ _page : this . _getPage ,
5557 _overlayTheme : this . _getOverlayTheme ,
5658 _panelInner : this . _getPanelInner ( ) ,
5759 _wrapper : this . _getWrapper ,
@@ -106,12 +108,18 @@ $.widget( "mobile.panel", {
106108 . appendTo ( target ) ;
107109 } ,
108110
111+ _getPage : function ( ) {
112+ var page = this . _parentPage ? this . _parentPage : $ ( ".ui-page-active" ) ;
113+
114+ return page ;
115+ } ,
116+
109117 _getWrapper : function ( ) {
110- var $wrapper = $ ( ".ui-page-active" ) . find ( "." + this . options . classes . pageWrapper ) ,
118+ var $wrapper = this . _page ( ) . find ( "." + this . options . classes . pageWrapper ) ,
111119 animateClass = ( $ . support . cssTransform3d && ! ! this . options . animate ) ? " " + this . options . classes . animate : "" ;
112120
113121 if ( $wrapper . length === 0 ) {
114- $wrapper = $ ( ".ui-page-active" ) . children ( ".ui-header:not(:jqmData(position='fixed')), .ui-content:not(:jqmData(role='popup')), .ui-footer:not(:jqmData(position='fixed'))" )
122+ $wrapper = this . _page ( ) . children ( ".ui-header:not(:jqmData(position='fixed')), .ui-content:not(:jqmData(role='popup')), .ui-footer:not(:jqmData(position='fixed'))" )
115123 . wrapAll ( "<div class='" + this . options . classes . pageWrapper + animateClass + "' /></div>" )
116124 . parent ( ) ;
117125 }
@@ -121,7 +129,7 @@ $.widget( "mobile.panel", {
121129
122130 _getFixedToolbars : function ( ) {
123131 var $extFixedToolbars = $ ( "body" ) . children ( ".ui-header:jqmData(position='fixed'), .ui-footer:jqmData(position='fixed')" ) ,
124- $intFixedToolbars = $ ( ".ui-page-active" ) . find ( ".ui-header:jqmData(position='fixed'), .ui-footer:jqmData(position='fixed')" ) ,
132+ $intFixedToolbars = this . _page ( ) . find ( ".ui-header:jqmData(position='fixed'), .ui-footer:jqmData(position='fixed')" ) ,
125133 $fixedToolbars = $extFixedToolbars . add ( $intFixedToolbars ) . addClass ( this . options . classes . pageFixedToolbar ) ;
126134
127135 return $fixedToolbars ;
@@ -255,18 +263,27 @@ $.widget( "mobile.panel", {
255263 self . close ( ) ;
256264 }
257265 } )
258- // Clean up open panels after page hide
259- . on ( "pagehide" , ":jqmData(role='page')" , function ( /* e */ ) {
260- if ( self . _open ) {
261- self . close ( true ) ;
262- }
263- } )
264266 // On escape, close? might need to have a target check too...
265267 . on ( "keyup.panel" , ":jqmData(role='page')" , function ( e ) {
266268 if ( e . keyCode === 27 && self . _open ) {
267269 self . close ( ) ;
268270 }
269271 } ) ;
272+
273+ // Clean up open panels after page hide
274+ if ( self . _parentPage ) {
275+ $ . mobile . document . on ( "pagehide" , ":jqmData(role='page')" , function ( ) {
276+ if ( self . _open ) {
277+ self . close ( true ) ;
278+ }
279+ } )
280+ } else {
281+ $ . mobile . document . on ( "pagebeforehide" , ":jqmData(role='page')" , function ( ) {
282+ if ( self . _open ) {
283+ self . close ( true ) ;
284+ }
285+ } )
286+ }
270287 } ,
271288
272289 // state storage of open or closed
@@ -280,22 +297,22 @@ $.widget( "mobile.panel", {
280297 o = self . options ,
281298
282299 _openPanel = function ( ) {
283- $ ( ".ui-page-active" ) . off ( "panelclose" ) ;
284- $ ( ".ui-page-active" ) . jqmData ( "panel" , "open" ) ;
300+ self . _page ( ) . off ( "panelclose" ) ;
301+ self . _page ( ) . jqmData ( "panel" , "open" ) ;
285302
286303 if ( $ . support . cssTransform3d && ! ! o . animate && o . display !== "overlay" ) {
287304 self . _wrapper ( ) . addClass ( o . classes . animate ) ;
288305 self . _fixedToolbars ( ) . addClass ( o . classes . animate ) ;
289306 }
290307
291308 if ( ! immediate && $ . support . cssTransform3d && ! ! o . animate ) {
292- $ . mobile . pageContainer . on ( self . _transitionEndEvents , complete ) ;
309+ $ . mobile . document . on ( self . _transitionEndEvents , complete ) ;
293310 } else {
294311 setTimeout ( complete , 0 ) ;
295312 }
296313
297314 if ( o . theme && o . display !== "overlay" ) {
298- $ ( ".ui-page-active" ) . page ( "removeContainerBackground" ) ;
315+ self . _page ( ) . page ( "removeContainerBackground" ) ;
299316 $ . mobile . pageContainer . addClass ( o . classes . pageContainer + " ui-overlay-" + o . theme ) ;
300317 }
301318
@@ -318,7 +335,7 @@ $.widget( "mobile.panel", {
318335 }
319336 } ,
320337 complete = function ( ) {
321- $ . mobile . pageContainer . off ( self . _transitionEndEvents , complete ) ;
338+ $ . mobile . document . off ( self . _transitionEndEvents , complete ) ;
322339
323340 self . _bindFixListener ( ) ;
324341
@@ -331,8 +348,8 @@ $.widget( "mobile.panel", {
331348
332349 self . _trigger ( "beforeopen" ) ;
333350
334- if ( $ ( ".ui-page-active" ) . jqmData ( "panel" ) === "open" ) {
335- $ ( ".ui-page-active" ) . on ( "panelclose" , function ( ) {
351+ if ( self . _page ( ) . jqmData ( "panel" ) === "open" ) {
352+ self . _page ( ) . on ( "panelclose" , function ( ) {
336353 _openPanel ( ) ;
337354 } ) ;
338355 } else {
@@ -350,7 +367,7 @@ $.widget( "mobile.panel", {
350367
351368 _closePanel = function ( ) {
352369 if ( ! immediate && $ . support . cssTransform3d && ! ! o . animate ) {
353- $ . mobile . pageContainer . on ( self . _transitionEndEvents , complete ) ;
370+ $ . mobile . document . on ( self . _transitionEndEvents , complete ) ;
354371 } else {
355372 setTimeout ( complete , 0 ) ;
356373 }
@@ -368,12 +385,12 @@ $.widget( "mobile.panel", {
368385 } ,
369386 complete = function ( ) {
370387 if ( o . theme && o . display !== "overlay" ) {
371- $ ( ".ui-page-active" ) . page ( "removeContainerBackground" ) ;
388+ self . _page ( ) . page ( "removeContainerBackground" ) ;
372389 $ . mobile . pageContainer . removeClass ( o . classes . pageContainer ) ;
373390 $ . mobile . pageContainer . addClass ( self . _overlayTheme ) ;
374391 }
375392
376- $ . mobile . pageContainer . off ( self . _transitionEndEvents , complete ) ;
393+ $ . mobile . document . off ( self . _transitionEndEvents , complete ) ;
377394
378395 self . element . addClass ( o . classes . panelClosed ) ;
379396
@@ -389,13 +406,15 @@ $.widget( "mobile.panel", {
389406 self . _unbindFixListener ( ) ;
390407 $ . mobile . resetActivePageHeight ( ) ;
391408
392- $ ( ".ui-page-active" ) . jqmRemoveData ( "panel" ) ;
409+ self . _page ( ) . jqmRemoveData ( "panel" ) ;
410+
393411 self . _trigger ( "close" ) ;
394412 } ;
395413
396414 if ( this . element . closest ( ".ui-page-active" ) . length < 0 ) {
397415 immediate = true ;
398416 }
417+
399418 self . _trigger ( "beforeclose" ) ;
400419
401420 _closePanel ( ) ;
@@ -419,7 +438,7 @@ $.widget( "mobile.panel", {
419438 this . _wrapper ( ) . children ( ) . unwrap ( ) ;
420439 }
421440
422- $ ( ".ui-page-active" ) . find ( "a" ) . unbind ( "panelopen panelclose" ) ;
441+ this . _page ( ) . find ( "a" ) . unbind ( "panelopen panelclose" ) ;
423442
424443 if ( this . _open ) {
425444 $ . mobile . resetActivePageHeight ( ) ;
@@ -440,13 +459,13 @@ $.widget( "mobile.panel", {
440459 }
441460
442461 if ( this . _open && o . theme && o . display !== "overlay" ) {
443- $ ( ".ui-page-active" ) . page ( "removeContainerBackground" ) ;
462+ this . _page ( ) . page ( "removeContainerBackground" ) ;
444463 $ . mobile . pageContainer . removeClass ( o . classes . pageContainer ) ;
445464 $ . mobile . pageContainer . addClass ( this . _overlayTheme ) ;
446465 }
447466
448467 if ( this . _open ) {
449- $ ( ".ui-page-active" ) . jqmRemoveData ( "panel" ) ;
468+ this . _page ( ) . jqmRemoveData ( "panel" ) ;
450469 }
451470
452471 this . _panelInner . children ( ) . unwrap ( ) ;
@@ -468,7 +487,7 @@ $.widget( "mobile.panel", {
468487 this . element
469488 . off ( this . _transitionEndEvents )
470489 . removeClass ( [ this . options . classes . panelUnfixed , this . options . classes . panelClosed , this . options . classes . panelOpen ] . join ( " " ) ) ;
471- $ . mobile . pageContainer . off ( this . _transitionEndEvents ) ;
490+ $ . mobile . document . off ( this . _transitionEndEvents ) ;
472491 }
473492} ) ;
474493
0 commit comments