Cross-language language name search

Implementation of Also Written As language name
search algorithm.
See http://etherpad.wikimedia.org/l10n-uls-language-search

Change-Id: Iff84408c531b650a44d031b63d5c823737cceafc
This commit is contained in:
Santhosh Thottingal
2012-07-24 15:43:56 +05:30
parent fb11c720b5
commit 08c14dafa4
9 changed files with 319 additions and 19 deletions

View File

@@ -96,7 +96,8 @@
that.$languageFilter.languagefilter( {
$target: $lcd, //$( 'ul.uls-language-filter-result' ),
languages: that.languages
languages: that.languages,
searchAPI: that.options.searchAPI
} );
// Create region selectors, one per region
@@ -174,7 +175,8 @@
$.fn.uls.defaults = {
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
};
$.fn.uls.Constructor = ULS;

View File

@@ -26,7 +26,8 @@
setlang : language
} );
window.location.href = uri.toString();
}
},
searchAPI: mw.util.wikiScript( 'api' ) + "?action=languagesearch"
} );
} );
} )( jQuery );

View File

@@ -59,14 +59,27 @@
}
}
}
// Also do a search to search API
if( this.options.searchAPI && query){
this.searchAPI( query );
}
},
render: function( langCode ) {
searchAPI: function( query ) {
var that = this;
$.get( that.options.searchAPI, { search: query }, function( result ) {
$.each( result['languagesearch'], function( code, name ) {
that.render( code, name );
} );
} );
},
render: function( langCode, languageName ) {
var $target = this.options.$target;
if ( !$target ) {
return;
}
$target.append( langCode );
$target.append( langCode, null, languageName );
},
escapeRegex: function( value ) {
@@ -110,7 +123,8 @@
$.fn.languagefilter.defaults = {
$target: null, // Where to append the results
languages: null, // Languages as code:name format. Default values come from data.languages.
clickhandler: null
clickhandler: null,
searchAPI: null
};
$.fn.languagefilter.Constructor = LanguageFilter;

View File

@@ -31,27 +31,39 @@
LanguageCategoryDisplay.prototype = {
constructor: LanguageCategoryDisplay,
append: function( langCode, regionCode ) {
append: function( langCode, regionCode, languageName ) {
var that = this;
this.addToRegion( langCode, regionCode );
this.addToRegion( langCode, regionCode, languageName );
},
/**
* Check whether a language code is already displayed or not.
* @param langCode
* @return boolean
*/
exists: function( langCode ) {
return this.$element.find( 'li' ).filter(function() {
return $(this).data('code') === langCode;
} ).length > 0;
},
/**
* Add the language to a region.
* If the region parameter is given , add to that region alone
* Otherwise to all regions that this language belongs.
* @param langCode
* @param region
* @param region Optional region
* @param languageName Optional languageName
*/
addToRegion: function( langCode, region ) {
var that = this,
language = that.options.languages[langCode];
var langName = $.uls.data.autonym( langCode )
|| that.options.languages[langCode]
|| langCode;
var regions = [];
addToRegion: function( langCode, region, languageName) {
var that = this;
if ( that.exists( langCode ) ) {
return;
}
var language = $.uls.data.languages[langCode],
langName = languageName
|| $.uls.data.autonym( langCode )
|| that.options.languages[langCode]
|| langCode,
regions = [];
if ( region ) {
regions.push( region );
} else {