Skip to content

Commit 9d9a42a

Browse files
frequentGabriel Schulhof
authored and
Gabriel Schulhof
committed
Panel: Panel classes set on wrong page
Closes jquery-archivegh-6920 Fixes jquery-archivegh-6650
1 parent d734c6b commit 9d9a42a

File tree

3 files changed

+85
-3
lines changed

3 files changed

+85
-3
lines changed

js/widgets/panel.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ $.widget( "mobile.panel", {
5050
$.extend( this, {
5151
_closeLink: el.find( ":jqmData(rel='close')" ),
5252
_parentPage: ( parentPage.length > 0 ) ? parentPage : false,
53+
_openedPage: null,
5354
_page: this._getPage,
5455
_panelInner: this._getPanelInner(),
5556
_fixedToolbars: this._getFixedToolbars
@@ -98,7 +99,7 @@ $.widget( "mobile.panel", {
9899
},
99100

100101
_getPage: function() {
101-
var page = this._parentPage ? this._parentPage : $( "." + $.mobile.activePageClass );
102+
var page = this._openedPage || this._parentPage || $( "." + $.mobile.activePageClass );
102103

103104
return page;
104105
},
@@ -357,6 +358,8 @@ $.widget( "mobile.panel", {
357358
self._bindFixListener();
358359

359360
self._trigger( "open" );
361+
362+
self._openedPage = self._page();
360363
};
361364

362365
self._trigger( "beforeopen" );
@@ -422,6 +425,8 @@ $.widget( "mobile.panel", {
422425
self._page().jqmRemoveData( "panel" );
423426

424427
self._trigger( "close" );
428+
429+
self._openedPage = null;
425430
};
426431

427432
self._trigger( "beforeclose" );

tests/unit/panel/index.html

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,25 @@ <h1 id="demo-links">Panels</h1>
9898
<a href="#panel-test-non-default-theme">Open Panel</a>
9999
<a href="#panel-test-with-close">Open Panel</a>
100100
<a href="#panel-test-id-change">Open Panel</a>
101+
<a href="#panel-test-external">Open Panel</a>
101102
</div>
102103
</div>
103104
<div data-nstest-role="page" id="page2"></div>
104-
<div id="external-panel-test"></div>
105+
<div id="external-panel-getWrapper-test"></div>
106+
107+
<div data-nstest-role="page" id="multipage">
108+
<div data-nstest-role="header">
109+
<h1>Multipage</h1>
110+
</div>
111+
<div data-nstest-role="content">
112+
<p>Contents of a page.</p>
113+
</div>
114+
</div>
115+
116+
<div data-nstest-role="panel" id="panel-test-external">
117+
<a href="#multipage">Multipage</a>
118+
<a href="#" data-nstest-rel="back">Back</a>
119+
</div>
120+
105121
</body>
106122
</html>

tests/unit/panel/panel_core.js

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@
450450
});
451451
asyncTest( "external panel should call panel once on create and on page changes", function(){
452452
expect( 5 );
453-
var testPanel = $( "#external-panel-test" );
453+
var testPanel = $( "#external-panel-getWrapper-test" );
454454

455455
testPanel.panel();
456456
ok( count === 1, "getWrapper only called once durring create" );
@@ -478,4 +478,65 @@
478478
});
479479
});
480480

481+
asyncTest( "external panel: test classes during A>B>A transition", function() {
482+
expect( 16 );
483+
484+
var $panel = $( "#panel-test-external" ).panel(),
485+
$firstPage = $( ":jqmData(role='page')" ).first(),
486+
$secondPage = $( ":jqmData(role='page')" ).last(),
487+
$openButton = $firstPage.find( "a[href='\\#panel-test-external']" ),
488+
$link = $panel.find( "a[href='\\#multipage']" ),
489+
$back = $panel.find( "a[data-nstest-rel='back']" );
490+
491+
$panel.one( "panelopen", function( event ) {
492+
493+
ok( !$panel.hasClass( defaults.classes.panelClosed ), "closed class removed" );
494+
ok( $panel.hasClass( defaults.classes.panelOpen ), "open class added" );
495+
ok( $firstPage.data("nstestPanel") === "open", "open flag set on first page" );
496+
equal( $firstPage.find(".ui-panel-wrapper").length, 1, "wrapper exists." );
497+
498+
$link.trigger( "click" );
499+
500+
}).one( "panelclose", function( event ) {
501+
502+
ok( $panel.hasClass( defaults.classes.panelClosed ), "closed class removed" );
503+
ok( !$panel.hasClass( defaults.classes.panelOpen ), "open class added" );
504+
ok( $firstPage.data("nstestPanel") === undefined, "no open flag on first" );
505+
506+
$panel.trigger( "continue" );
507+
508+
}).one( "continue", function( event ) {
509+
510+
setTimeout(function() {
511+
$panel.panel( "open" );
512+
513+
ok( !$panel.hasClass( defaults.classes.panelClosed ), "closed class removed" );
514+
ok( $panel.hasClass( defaults.classes.panelOpen ), "open class added" );
515+
ok( $secondPage.data("nstestPanel") === "open", "open flag set on 2nd page" );
516+
equal( $secondPage.find(".ui-panel-wrapper").length, 1, "wrapper exists." );
517+
518+
$back.trigger( "click" );
519+
520+
},500);
521+
522+
}).panel( "open" );
523+
524+
$back.one( "click", function( event ) {
525+
526+
ok( $firstPage.data("nstestPanel") === undefined,
527+
"no open flag on first page on backwards transition" );
528+
equal( $firstPage.find(".ui-panel-wrapper").length, 1, "wrapper exists." );
529+
530+
setTimeout(function() {
531+
$panel.panel( "open" );
532+
533+
ok( $firstPage.data("nstestPanel") === "open", "open flag set on first page" );
534+
ok( !$panel.hasClass( defaults.classes.panelClosed ), "closed class removed" );
535+
ok( $panel.hasClass( defaults.classes.panelOpen ), "open class added" );
536+
537+
start();
538+
},500);
539+
});
540+
});
541+
481542
}( jQuery ));

0 commit comments

Comments
 (0)