diff --git a/UniversalLanguageSelector.hooks.php b/UniversalLanguageSelector.hooks.php index 1aa0adcf..c8e2822a 100644 --- a/UniversalLanguageSelector.hooks.php +++ b/UniversalLanguageSelector.hooks.php @@ -295,10 +295,20 @@ class UniversalLanguageSelectorHooks { } public static function onGetPreferences( $user, &$preferences ) { + // The detailed preferences for different layouts. + // Saved as JSON and modifiable through the ULS screens. $preferences['uls-preferences'] = array( 'type' => 'api', ); + // A checkbox in the general MediaWiki preferences screen + // to enable or disable IME in ULS + $preferences['uls-ime-enable'] = array( + 'type' => 'toggle', + 'label-message' => 'uls-ime-enable-preferences-label', + 'section' => 'editing/advancedediting', // under 'Advanced options' section of 'Editing' tab + ); + return true; } diff --git a/UniversalLanguageSelector.i18n.php b/UniversalLanguageSelector.i18n.php index caa33800..e4a640d0 100644 --- a/UniversalLanguageSelector.i18n.php +++ b/UniversalLanguageSelector.i18n.php @@ -30,6 +30,7 @@ $messages['en'] = array( 'uls-desc' => 'Gives the user several ways to select a language and to adjust language settings', 'uls-plang-title-languages' => 'Languages', + 'uls-ime-enable-preferences-label' => 'Enable input methods', ); /** Message documentation (Message documentation) @@ -42,6 +43,10 @@ $messages['qqq'] = array( 'uls-plang-title-languages' => 'A title for the are in the sidebar in which the interlanguage links are supposed to appear. This title is shown when there are no interlanguage links there, but an icon that enables the ULS is shown. {{Identical|Language}}', + 'uls-ime-enable-preferences-label' => 'A label for a user preference.', + + 'uls-select-content-language' => 'Main heading in the language selector popup. +{{Identical|Select language}}', ); /** Arabic (العربية) diff --git a/UniversalLanguageSelector.php b/UniversalLanguageSelector.php index c68047b5..b63222e5 100644 --- a/UniversalLanguageSelector.php +++ b/UniversalLanguageSelector.php @@ -137,6 +137,7 @@ $wgHooks['UserGetLanguageObject'][] = 'UniversalLanguageSelectorHooks::getLangua $wgHooks['SkinTemplateOutputPageBeforeExec'][] = 'UniversalLanguageSelectorHooks::onSkinTemplateOutputPageBeforeExec'; $wgDefaultUserOptions['uls-preferences'] = ''; +$wgDefaultUserOptions['uls-ime-enable'] = 1; $wgHooks['GetPreferences'][] = 'UniversalLanguageSelectorHooks::onGetPreferences'; $wgExtensionFunctions[] = function() { diff --git a/resources/js/ext.uls.preferences.js b/resources/js/ext.uls.preferences.js index 33404383..d60bd301 100644 --- a/resources/js/ext.uls.preferences.js +++ b/resources/js/ext.uls.preferences.js @@ -104,6 +104,7 @@ ULSPreferences = function () { this.preferenceName = 'uls-preferences'; + this.imeEnablePreferenceName = 'uls-ime-enable', this.username = mw.user.getName(); this.isAnon = mw.user.isAnon(); this.preferences = null; @@ -115,13 +116,30 @@ * Initialize */ init: function () { + var options, + ulsImeEnable = mw.user.options.get( this.imeEnablePreferenceName ); + if ( this.isAnon ) { this.preferences = $.jStorage.get( this.preferenceName ); } else { - var options = mw.user.options.get( this.preferenceName ); + options = mw.user.options.get( this.preferenceName ); this.preferences = $.parseJSON( options ); + } + this.preferences = this.preferences || {}; + + if ( this.preferences.ime === undefined ) { + this.preferences.ime = {}; + } + + if ( ulsImeEnable === undefined ) { + this.preferences.ime.enable = mw.config.get( 'wgULSIMEEnabled' ); + } else if ( ulsImeEnable === 1 || ulsImeEnable === '1' ) { + this.preferences.ime.enable = true; + } else { + this.preferences.ime.enable = false; + } }, /** @@ -151,22 +169,45 @@ save: function ( callback ) { var ulsPreferences = this; + callback = callback || $.noop; if ( this.isAnon ) { // Anonymous user. Save preferences in local storage $.jStorage.set( this.preferenceName, this.preferences ); callback.call( this, true ); } else { + var successFunction, failFunction; + + successFunction = function () { + callback.call( this, true ); + }; + failFunction = function () { + callback.call( this, false ); + }; + // Logged in user. Use MW APIs to change preferences saveOptionsWithToken( { action: 'options', optionname: ulsPreferences.preferenceName, optionvalue: $.toJSON( ulsPreferences.preferences ) - }, function () { - callback.call( this, true ); - }, function () { - callback.call( this, false ); - } ); + }, + successFunction, + failFunction + ); + + if ( ulsPreferences.preferences.ime !== undefined && + ulsPreferences.preferences.ime.enable !== undefined + ) { + // Logged in user. Use MW APIs to change preferences + saveOptionsWithToken( { + action: 'options', + optionname: ulsPreferences.imeEnablePreferenceName, + optionvalue: ulsPreferences.preferences.ime.enable ? '1' : '' + }, + successFunction, + failFunction + ); + } } } };