*/
( function ( mw, $ ) {
$( function () {
- var $preftoc, $preferences, $fieldsets, labelFunc,
+ var $preftoc, $preferences, $fieldsets, labelFunc, previousTab,
$tzSelect, $tzTextbox, $localtimeHolder, servertime, allowCloseWindow,
convertmessagebox = require( 'mediawiki.notification.convertmessagebox' );
'aria-labelledby': labelFunc
} );
$fieldsets.not( '#mw-prefsection-personal' )
- .hide()
- .attr( 'aria-hidden', 'true' );
+ .hide()
+ .attr( 'aria-hidden', 'true' );
// T115692: The following is kept for backwards compatibility with older skins
$preferences.addClass( 'jsprefs' );
$tab.attr( {
tabIndex: 0,
'aria-selected': 'true'
- } )
- .focus()
+ } ).focus()
.parent().addClass( 'selected' );
$preferences.children( 'fieldset' ).hide().attr( 'aria-hidden', 'true' );
function detectHash() {
var hash = location.hash,
matchedElement, parentSection;
- if ( hash.match( /^#mw-prefsection-[\w\-]+/ ) ) {
+ if ( hash.match( /^#mw-prefsection-[\w-]+/ ) ) {
+ mw.storage.session.remove( 'mwpreferences-prevTab' );
switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
- } else if ( hash.match( /^#mw-[\w\-]+/ ) ) {
+ } else if ( hash.match( /^#mw-[\w-]+/ ) ) {
matchedElement = document.getElementById( hash.slice( 1 ) );
parentSection = $( matchedElement ).closest( '.prefsection' );
if ( parentSection.length ) {
+ mw.storage.session.remove( 'mwpreferences-prevTab' );
// Switch to proper tab and scroll to selected item.
switchPrefTab( parentSection.attr( 'id' ).replace( 'mw-prefsection-', '' ), 'noHash' );
matchedElement.scrollIntoView();
) {
$( window ).on( 'hashchange', function () {
var hash = location.hash;
- if ( hash.match( /^#mw-[\w\-]+/ ) ) {
+ if ( hash.match( /^#mw-[\w-]+/ ) ) {
detectHash();
} else if ( hash === '' ) {
switchPrefTab( 'personal', 'noHash' );
}
} )
- // Run the function immediately to select the proper tab on startup.
- .trigger( 'hashchange' );
+ // Run the function immediately to select the proper tab on startup.
+ .trigger( 'hashchange' );
// In older browsers we'll bind a click handler as fallback.
// We must not have onhashchange *and* the click handlers, otherwise
// the click handler calls switchPrefTab() which sets the hash value,
updateTimezoneSelection();
}
- // Preserve the tab after saving the preferences
- // Not using cookies, because their deletion results are inconsistent.
- // Not using jStorage due to its enormous size (for this feature)
- if ( window.sessionStorage ) {
- if ( sessionStorage.getItem( 'mediawikiPreferencesTab' ) !== null ) {
- switchPrefTab( sessionStorage.getItem( 'mediawikiPreferencesTab' ), 'noHash' );
- }
+ // Restore the active tab after saving the preferences
+ previousTab = mw.storage.session.get( 'mwpreferences-prevTab' );
+ if ( previousTab ) {
+ switchPrefTab( previousTab, 'noHash' );
// Deleting the key, the tab states should be reset until we press Save
- sessionStorage.removeItem( 'mediawikiPreferencesTab' );
-
- $( '#mw-prefs-form' ).submit( function () {
- var storageData = $( $preftoc ).find( 'li.selected a' ).attr( 'id' ).replace( 'preftab-', '' );
- sessionStorage.setItem( 'mediawikiPreferencesTab', storageData );
- } );
+ mw.storage.session.remove( 'mwpreferences-prevTab' );
}
+ $( '#mw-prefs-form' ).on( 'submit', function () {
+ var value = $( $preftoc ).find( 'li.selected a' ).attr( 'id' ).replace( 'preftab-', '' );
+ mw.storage.session.set( 'mwpreferences-prevTab', value );
+ } );
+
// Check if all of the form values are unchanged
function isPrefsChanged() {
var inputs = $( '#mw-prefs-form :input[name]' ),