mediawiki.special.preferences: Use mw.storage.session for sessionStorage
authorTimo Tijhof <krinklemail@gmail.com>
Mon, 27 Feb 2017 22:07:48 +0000 (14:07 -0800)
committerKrinkle <krinklemail@gmail.com>
Mon, 27 Feb 2017 23:05:46 +0000 (23:05 +0000)
Consistent access pattern.

Change-Id: Icc2591159a88eb5f80c601b22219c06df15f2347

resources/src/mediawiki.special/mediawiki.special.preferences.js

index 163e85d..0fa6610 100644 (file)
@@ -3,7 +3,7 @@
  */
 ( function ( mw, $ ) {
        $( function () {
-               var $preftoc, $preferences, $fieldsets, labelFunc,
+               var $preftoc, $preferences, $fieldsets, labelFunc, previousTab,
                        $tzSelect, $tzTextbox, $localtimeHolder, servertime, allowCloseWindow,
                        convertmessagebox = require( 'mediawiki.notification.convertmessagebox' );
 
                        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( previousTab );
                }
 
+               $( '#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]' ),