diff --git a/UniversalLanguageSelector.hooks.php b/UniversalLanguageSelector.hooks.php index 5d661d17..1e2a2548 100644 --- a/UniversalLanguageSelector.hooks.php +++ b/UniversalLanguageSelector.hooks.php @@ -240,4 +240,12 @@ class UniversalLanguageSelectorHooks { return true; } + + public static function onGetPreferences( $user, &$preferences ) { + $preferences['uls-preferences'] = array( + 'type' => 'api', + ); + + return true; + } } diff --git a/UniversalLanguageSelector.php b/UniversalLanguageSelector.php index 5982b117..d51b1238 100644 --- a/UniversalLanguageSelector.php +++ b/UniversalLanguageSelector.php @@ -71,14 +71,14 @@ $wgULSLanguageDetection = true; /** * Enable language selection. If language selection is disabled, the classes * and RL modules are registered for the use of other extensions, but no - * language selection toolbar is shown, and it will not be possible to change + * language selection toolbar is shown, and it will not be possible to change * the interface language using a cookie. */ $wgULSEnable = true; /** * Enable ULS language selection for anonymous users. Equivalent to $wgULSEnable - * except that it only applies to anonymous users. Setting this to false will + * except that it only applies to anonymous users. Setting this to false will * avoid breaking Squid caches (see bug 41451). */ $wgULSEnableAnon = true; @@ -101,6 +101,9 @@ $wgHooks['MakeGlobalVariablesScript'][] = 'UniversalLanguageSelectorHooks::addVa $wgAPIModules['languagesearch'] = 'ApiLanguageSearch'; $wgHooks['UserGetLanguageObject'][] = 'UniversalLanguageSelectorHooks::getLanguage'; +$wgDefaultUserOptions['uls-preferences'] = ''; +$wgHooks['GetPreferences'][] = 'UniversalLanguageSelectorHooks::onGetPreferences'; + $wgResourceModules['ext.uls.init'] = array( 'scripts' => 'resources/js/ext.uls.init.js', 'styles' => 'resources/css/ext.uls.css', diff --git a/resources/js/ext.uls.preferences.js b/resources/js/ext.uls.preferences.js index e7f2f0ae..8f7f0769 100644 --- a/resources/js/ext.uls.preferences.js +++ b/resources/js/ext.uls.preferences.js @@ -68,7 +68,9 @@ * @param callback */ save: function ( callback ) { - var that = this, api; + var ulsPreferences = this, + api; + callback = callback || $.noop; if ( this.isAnon ) { // Anonymous user- Save preferences in local storage @@ -77,20 +79,21 @@ } else { // Logged in user. Use MW apis to change preferences api = new mw.Api(); + api.post( { action: 'tokens', type: 'options' } ).done( function ( tokenresult ) { var token = tokenresult.tokens.optionstoken; + api.post( { action: 'options', - change: 'hideminor=1', - optionname: that.preferenceName, - optionvalue: $.toJSON( that.preferences ), + optionname: ulsPreferences.preferenceName, + optionvalue: $.toJSON( ulsPreferences.preferences ), token: token - } ).done( function () { + } ).done( function ( data ) { callback.call( this, true ); - } ).fail( function () { + } ).fail( function ( data ) { callback.call( this, false ); } ); } ).fail( function () {