diff --git a/Resources.php b/Resources.php index bcab4bde..d3ef436a 100644 --- a/Resources.php +++ b/Resources.php @@ -117,6 +117,10 @@ $wgResourceModules['ext.uls.interface'] = array( 'position' => 'top', ) + $resourcePaths; +// Anonymous users need 'jquery.jStorage' module for client side preference persistence. +$wgResourceModules['ext.uls.interface.anon'] = $wgResourceModules['ext.uls.interface']; +$wgResourceModules['ext.uls.interface.anon']['dependencies'][] = 'jquery.jStorage'; + $wgResourceModules['ext.uls.languagesettings'] = array( 'scripts' => 'resources/js/ext.uls.languagesettings.js', 'styles' => 'resources/css/ext.uls.languagesettings.css', @@ -134,7 +138,10 @@ $wgResourceModules['ext.uls.preferences'] = array( 'dependencies' => array( 'mediawiki.user', 'mediawiki.api', - 'jquery.jStorage', + 'jquery.json', + // This is quite a big module and only needed for anons. + // Loaded conditionally in ext.uls.interface(.anon). + //'jquery.jStorage', ), ) + $resourcePaths; diff --git a/UniversalLanguageSelector.hooks.php b/UniversalLanguageSelector.hooks.php index 8de93f25..fecb441e 100644 --- a/UniversalLanguageSelector.hooks.php +++ b/UniversalLanguageSelector.hooks.php @@ -67,7 +67,11 @@ class UniversalLanguageSelectorHooks { if ( self::isToolbarEnabled( $out->getUser() ) ) { // Enable UI language selection for the user. - $out->addModules( 'ext.uls.interface' ); + if ( $out->getUser()->isAnon() ) { + $out->addModules( 'ext.uls.interface.anon' ); + } else { + $out->addModules( 'ext.uls.interface' ); + } } return true; diff --git a/resources/js/ext.uls.preferences.js b/resources/js/ext.uls.preferences.js index f0cbb5fa..5edde741 100644 --- a/resources/js/ext.uls.preferences.js +++ b/resources/js/ext.uls.preferences.js @@ -115,13 +115,14 @@ * Initialize */ init: function () { + var options; + if ( this.isAnon ) { - this.preferences = $.jStorage.get( this.preferenceName ); + this.preferences = $.jStorage.get( this.preferenceName ) || {}; } else { - var options = mw.user.options.get( this.preferenceName ); - this.preferences = $.parseJSON( options ); + options = mw.user.options.get( this.preferenceName ); + this.preferences = $.parseJSON( options ) || {}; } - this.preferences = this.preferences || {}; }, /** @@ -157,7 +158,6 @@ $.jStorage.set( this.preferenceName, this.preferences ); callback.call( this, true ); } else { - // Logged in user. Use MW APIs to change preferences saveOptionsWithToken( { action: 'options',