Introduce languages options to ULS

Default value of this option will be $.uls.data.autonyms().
It can be set to limit language selection to a set of languages.

Updated examples, used a config variable wgULSLanguages to set this.

Change-Id: Ia322cbdcdb14f08619d2e4df5b23e2702841d147
This commit is contained in:
Santhosh Thottingal
2012-08-11 20:32:40 +05:30
committed by Amir E. Aharoni
parent bce461b980
commit 8f7382b242
7 changed files with 35 additions and 9 deletions

View File

@@ -94,6 +94,16 @@ class UniversalLanguageSelectorHooks {
$code = RequestContext::sanitizeLangCode( $code ); $code = RequestContext::sanitizeLangCode( $code );
return true; return true;
} }
/**
* Hook: ResourceLoaderGetConfigVars
* @param $vars Array
* @return bool
*/
public static function addConfig( &$vars ) {
global $wgContLang;
$vars['wgULSLanguages'] = Language::fetchLanguageNames( $wgContLang->getCode() );
return true;
}
/** /**
* Add the template for the ULS to the body. * Add the template for the ULS to the body.
@@ -102,11 +112,8 @@ class UniversalLanguageSelectorHooks {
* TODO: hardcoded English * TODO: hardcoded English
*/ */
public static function addTemplate( &$data, $skin ) { public static function addTemplate( &$data, $skin ) {
global $wgContLang;
$languages = Language::fetchLanguageNames( $wgContLang->getCode() );
$languageData = htmlspecialchars( FormatJSON::encode( $languages ) );
$data .= " $data .= "
<div class='uls-menu' data-languages=\"" . $languageData . "\"> <div class='uls-menu'>
<div class='row'> <div class='row'>
<span class='icon-close'></span> <span class='icon-close'></span>
</div> </div>

View File

@@ -59,6 +59,7 @@ $wgHooks['BeforePageDisplay'][] = 'UniversalLanguageSelectorHooks::addModules';
$wgHooks['PersonalUrls'][] = 'UniversalLanguageSelectorHooks::addTrigger'; $wgHooks['PersonalUrls'][] = 'UniversalLanguageSelectorHooks::addTrigger';
$wgHooks['SkinAfterContent'][] = 'UniversalLanguageSelectorHooks::addTemplate'; $wgHooks['SkinAfterContent'][] = 'UniversalLanguageSelectorHooks::addTemplate';
$wgHooks['ResourceLoaderTestModules'][] = 'UniversalLanguageSelectorHooks::addTestModules'; $wgHooks['ResourceLoaderTestModules'][] = 'UniversalLanguageSelectorHooks::addTestModules';
$wgHooks['ResourceLoaderGetConfigVars'][] = 'UniversalLanguageSelectorHooks::addConfig';
$wgAPIModules['languagesearch'] = 'ApiLanguageSearch'; $wgAPIModules['languagesearch'] = 'ApiLanguageSearch';
$wgHooks['UserGetLanguageObject'][] = 'UniversalLanguageSelectorHooks::getLanguage'; $wgHooks['UserGetLanguageObject'][] = 'UniversalLanguageSelectorHooks::getLanguage';

File diff suppressed because one or more lines are too long

View File

@@ -24,7 +24,7 @@
this.$element = $( element ); this.$element = $( element );
this.options = $.extend( {}, $.fn.uls.defaults, options ); this.options = $.extend( {}, $.fn.uls.defaults, options );
this.$menu = $( this.options.menu ); this.$menu = $( this.options.menu );
this.languages = this.$menu.data( 'languages' ); this.languages = this.options.languages;
for ( var code in this.languages ) { for ( var code in this.languages ) {
if ( $.uls.data.languages[code] === undefined ) { if ( $.uls.data.languages[code] === undefined ) {
window.console && console.log && console.log( "ULS: Unknown language " + code + "." ); window.console && console.log && console.log( "ULS: Unknown language " + code + "." );
@@ -104,7 +104,7 @@
that.$menu.on('keypress', $.proxy(this.keypress, this) ) that.$menu.on('keypress', $.proxy(this.keypress, this) )
.on('keyup', $.proxy(this.keyup, this) ); .on('keyup', $.proxy(this.keyup, this) );
if ( $.browser.webkit || $.browser.msie ) { if ( $.browser.webkit || $.browser.msie ) {
this.$menu.on( 'keydown', $.proxy( this.keypress, this ) ) this.$menu.on( 'keydown', $.proxy( this.keypress, this ) );
} }
lcd = that.$resultsView.lcd( { lcd = that.$resultsView.lcd( {
@@ -208,7 +208,8 @@
$.fn.uls.defaults = { $.fn.uls.defaults = {
menu: '.uls-menu', menu: '.uls-menu',
onSelect: null, // Callback function to be called when a language is selected onSelect: null, // Callback function to be called when a language is selected
searchAPI: null // Language search API searchAPI: null, // Language search API
languages: $.uls.data.autonyms() // Languages to be used for ULS, default is all languages
}; };
$.fn.uls.Constructor = ULS; $.fn.uls.Constructor = ULS;

View File

@@ -47,6 +47,20 @@
return ( $.uls.data.languages[language] && $.uls.data.languages[language][2] ) || language; return ( $.uls.data.languages[language] && $.uls.data.languages[language][2] ) || language;
}; };
/**
* Returns all language codes and corresponding autonyms
* @return array
*/
$.uls.data.autonyms = function() {
var autonymsByCode = {};
for ( var language in $.uls.data.languages ) {
autonymsByCode[language] = $.uls.data.autonym( language );
}
return autonymsByCode;
};
/** /**
* Returns an array of all region codes. * Returns an array of all region codes.
* @return array * @return array

View File

@@ -66,6 +66,7 @@
onSelect: function( language ) { onSelect: function( language ) {
changeLanguage( language ); changeLanguage( language );
}, },
languages: mw.config.get( 'wgULSLanguages' ),
searchAPI: mw.util.wikiScript( 'api' ) + "?action=languagesearch" searchAPI: mw.util.wikiScript( 'api' ) + "?action=languagesearch"
} ); } );

View File

@@ -61,7 +61,9 @@ test( "-- Initial check", function() {
} ); } );
test( "-- $.uls.data testing", function() { test( "-- $.uls.data testing", function() {
expect( 20 ); expect( 21 );
strictEqual( $.uls.data.autonyms()['he'], 'עברית', 'Correct autonym is returned for Hebrew using autonyms().' );
// This test assumes that we don't want any scripts to be in the 'Other' // This test assumes that we don't want any scripts to be in the 'Other'
// group. Actually, this may become wrong some day. // group. Actually, this may become wrong some day.