Skip to content

Commit 36fccdd

Browse files
committed
Tabs: Fixed cookie implementation. Fixes #7144 - Tabs: Deprecate cookie option.
1 parent a205c2c commit 36fccdd

File tree

2 files changed

+59
-66
lines changed

2 files changed

+59
-66
lines changed

tests/unit/tabs/tabs_deprecated.js

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
(function( $ ) {
22

3-
module("tabs (deprecated): core");
3+
module( "tabs (deprecated): core" );
44

55
test( "panel ids", function() {
66
expect( 2 );
@@ -112,39 +112,39 @@ test( "tabTemplate + panelTemplate", function() {
112112
ok( element.find( "#new" ).hasClass( "customPanel" ), "panel custom class" );
113113
});
114114

115-
test('cookie', function() {
116-
expect(6);
115+
test( "cookie", function() {
116+
expect( 6 );
117117

118-
el = $('#tabs1');
119-
var cookieName = 'tabs_test', cookieObj = { name: cookieName };
120-
$.cookie(cookieName, null); // blank state
121-
var cookie = function() {
122-
return parseInt($.cookie(cookieName), 10);
123-
};
118+
var element = $( "#tabs1" ),
119+
cookieName = "tabs_test",
120+
cookieObj = { name: cookieName };
121+
$.cookie( cookieName, null );
122+
function cookie() {
123+
return parseInt( $.cookie( cookieName ), 10 );
124+
}
124125

125-
el.tabs({ cookie: cookieObj });
126-
equals(cookie(), 0, 'initial cookie value');
126+
element.tabs({ cookie: cookieObj });
127+
equals( cookie(), 0, "initial cookie value" );
127128

128-
el.tabs('destroy');
129-
el.tabs({ active: 1, cookie: cookieObj });
130-
equals(cookie(), 1, 'initial cookie value, from active property');
131-
132-
el.tabs('option', 'active', 2);
133-
equals(cookie(), 2, 'cookie value updated after activating');
129+
element.tabs( "destroy" );
130+
element.tabs({ active: 1, cookie: cookieObj });
131+
equals( cookie(), 1, "initial cookie value, from active property" );
134132

135-
el.tabs('destroy');
136-
$.cookie(cookieName, 1);
137-
el.tabs({ cookie: cookieObj });
138-
equals(cookie(), 1, 'initial cookie value, from existing cookie');
133+
element.tabs( "option", "active", 2 );
134+
equals( cookie(), 2, "cookie value updated after activating" );
139135

140-
el.tabs('destroy');
141-
el.tabs({ cookie: cookieObj, collapsible: true });
142-
el.tabs('option', 'active', false);
143-
equals(cookie(), -1, 'cookie value for all tabs unselected');
136+
element.tabs( "destroy" );
137+
$.cookie( cookieName, 1 );
138+
element.tabs({ cookie: cookieObj });
139+
equals( cookie(), 1, "initial cookie value, from existing cookie" );
144140

145-
el.tabs('destroy');
146-
ok($.cookie(cookieName) === null, 'erase cookie after destroy');
141+
element.tabs( "destroy" );
142+
element.tabs({ cookie: cookieObj, collapsible: true });
143+
element.tabs( "option", "active", false );
144+
equals( cookie(), -1, "cookie value for all tabs unselected" );
147145

146+
element.tabs( "destroy" );
147+
ok( $.cookie( cookieName ) === null, "erase cookie after destroy" );
148148
});
149149

150150
asyncTest( "spinner", function() {

ui/jquery.ui.tabs.js

Lines changed: 32 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,57 +1003,50 @@ if ( $.uiBackCompat !== false ) {
10031003
}( jQuery, jQuery.ui.tabs.prototype ) );
10041004

10051005
// cookie option
1006-
(function( $, prototype ) {
1007-
$.extend( prototype.options, {
1006+
$.widget( "ui.tabs", $.ui.tabs, {
1007+
options: {
10081008
cookie: null // e.g. { expires: 7, path: '/', domain: 'jquery.com', secure: true }
1009-
});
1010-
1011-
var _create = prototype._create,
1012-
_refresh = prototype._refresh,
1013-
_eventHandler = prototype._eventHandler,
1014-
_destroy = prototype._destroy;
1015-
1016-
prototype._create = function() {
1017-
var o = this.options;
1018-
if ( o.active === undefined ) {
1019-
if ( typeof o.active !== "number" && o.cookie ) {
1020-
o.active = parseInt( this._cookie(), 10 );
1009+
},
1010+
_create: function() {
1011+
var options = this.options,
1012+
active;
1013+
if ( options.active == null && options.cookie ) {
1014+
active = parseInt( this._cookie(), 10 );
1015+
if ( active === -1 ) {
1016+
active = false;
10211017
}
1018+
options.active = active;
10221019
}
1023-
_create.call( this );
1024-
};
1025-
1026-
prototype._cookie = function() {
1027-
var cookie = this.cookie ||
1028-
( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() );
1029-
return $.cookie.apply( null, [ cookie ].concat( $.makeArray( arguments ) ) );
1030-
};
1031-
1032-
prototype._refresh = function() {
1033-
_refresh.call( this );
1034-
1035-
// set or update cookie after init and add/remove respectively
1020+
this._super( "_create" );
1021+
},
1022+
_cookie: function( active ) {
1023+
var cookie = [ this.cookie ||
1024+
( this.cookie = this.options.cookie.name || "ui-tabs-" + getNextListId() ) ];
1025+
if ( arguments.length ) {
1026+
cookie.push( active === false ? -1 : active );
1027+
cookie.push( this.options.cookie );
1028+
}
1029+
return $.cookie.apply( null, cookie );
1030+
},
1031+
_refresh: function() {
1032+
this._super( "_refresh" );
10361033
if ( this.options.cookie ) {
10371034
this._cookie( this.options.active, this.options.cookie );
10381035
}
1039-
};
1040-
1041-
prototype._eventHandler = function( event ) {
1042-
_eventHandler.apply( this, arguments );
1043-
1036+
},
1037+
_eventHandler: function( event ) {
1038+
this._superApply( "_eventHandler", arguments );
10441039
if ( this.options.cookie ) {
10451040
this._cookie( this.options.active, this.options.cookie );
10461041
}
1047-
};
1048-
1049-
prototype._destroy = function() {
1050-
_destroy.call( this );
1051-
1042+
},
1043+
_destroy: function() {
1044+
this._super( "_destroy" );
10521045
if ( this.options.cookie ) {
10531046
this._cookie( null, this.options.cookie );
10541047
}
1055-
};
1056-
}( jQuery, jQuery.ui.tabs.prototype ) );
1048+
}
1049+
});
10571050
}
10581051

10591052
})( jQuery );

0 commit comments

Comments
 (0)