diff options
author | Scott González <scott.gonzalez@gmail.com> | 2013-09-17 10:18:43 -0400 |
---|---|---|
committer | Scott González <scott.gonzalez@gmail.com> | 2013-10-24 09:19:42 -0400 |
commit | ecd4f95a50349d3f8488cef5cf9501d9b94a6108 (patch) | |
tree | 0f88db0d61d307b0772b0133279f8b1ffbcd4526 /ui | |
parent | 604e0949e33ac53d07c707d1cd6934a73cc6e44b (diff) | |
download | jquery-ui-ecd4f95a50349d3f8488cef5cf9501d9b94a6108.tar.gz jquery-ui-ecd4f95a50349d3f8488cef5cf9501d9b94a6108.zip |
Tabs: Use .uniqueId() for panels and moved isLocal() into the widget prototype.
Diffstat (limited to 'ui')
-rw-r--r-- | ui/jquery.ui.tabs.js | 47 |
1 files changed, 22 insertions, 25 deletions
diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js index 4077c9ac5..06bf385e0 100644 --- a/ui/jquery.ui.tabs.js +++ b/ui/jquery.ui.tabs.js @@ -14,23 +14,6 @@ */ (function( $, undefined ) { -var tabId = 0, - rhash = /#.*$/; - -function getNextTabId() { - return ++tabId; -} - -function isLocal( anchor ) { - // support: IE7 - // IE7 doesn't normalize the href property when set via script (#9317) - anchor = anchor.cloneNode( false ); - - return anchor.hash.length > 1 && - decodeURIComponent( anchor.href.replace( rhash, "" ) ) === - decodeURIComponent( location.href.replace( rhash, "" ) ); -} - $.widget( "ui.tabs", { version: "@VERSION", delay: 300, @@ -49,6 +32,21 @@ $.widget( "ui.tabs", { load: null }, + _isLocal: (function() { + var rhash = /#.*$/; + + return function( anchor ) { + + // support: IE7 + // IE7 doesn't normalize the href property when set via script (#9317) + anchor = anchor.cloneNode( false ); + + return anchor.hash.length > 1 && + decodeURIComponent( anchor.href.replace( rhash, "" ) ) === + decodeURIComponent( location.href.replace( rhash, "" ) ); + }; + })(), + _create: function() { var that = this, options = this.options; @@ -296,10 +294,6 @@ $.widget( "ui.tabs", { } }, - _tabId: function( tab ) { - return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId(); - }, - _sanitizeSelector: function( hash ) { return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : ""; }, @@ -406,12 +400,15 @@ $.widget( "ui.tabs", { originalAriaControls = tab.attr( "aria-controls" ); // inline tab - if ( isLocal( anchor ) ) { + if ( that._isLocal( anchor ) ) { selector = anchor.hash; + panelId = selector.substring( 1 ); panel = that.element.find( that._sanitizeSelector( selector ) ); // remote tab } else { - panelId = that._tabId( tab ); + // If the tab doesn't already have aria-controls, + // generate an id by using a throw-away element + panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id; selector = "#" + panelId; panel = that.element.find( selector ); if ( !panel.length ) { @@ -428,7 +425,7 @@ $.widget( "ui.tabs", { tab.data( "ui-tabs-aria-controls", originalAriaControls ); } tab.attr({ - "aria-controls": selector.substring( 1 ), + "aria-controls": panelId, "aria-labelledby": anchorId }); panel.attr( "aria-labelledby", anchorId ); @@ -790,7 +787,7 @@ $.widget( "ui.tabs", { }; // not remote - if ( isLocal( anchor[ 0 ] ) ) { + if ( this._isLocal( anchor[ 0 ] ) ) { return; } |