Skip to content
This repository was archived by the owner on Oct 8, 2021. It is now read-only.

Commit 8629ef5

Browse files
Panel: Make sure we select the page on which the panel is shown. Fixes #6254.
1 parent 12847f2 commit 8629ef5

File tree

1 file changed

+43
-24
lines changed

1 file changed

+43
-24
lines changed

js/widgets/panel.js

Lines changed: 43 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)