Fix Bug 39535 Recent languages in languages settings

* Refactor the code for frequent languages and introduce
  mw.uls.getFrequentLanguageList
* Use it for showing previous languages in language settings
* Show the frequent/common language list in the language selector
  opened from display settings.

Change-Id: Ic0f8ea6b9e9ba137b22649e8425fce8014ad456c
This commit is contained in:
Santhosh Thottingal
2012-09-03 11:16:41 +05:30
committed by Niklas Laxström
parent c3201d95a7
commit 472cb8ba55
3 changed files with 29 additions and 24 deletions

View File

@@ -141,9 +141,6 @@
// Pick only the first elements, because we don't have room for more // Pick only the first elements, because we don't have room for more
var that = this, var that = this,
quickList = this.options.quickList; quickList = this.options.quickList;
quickList = $.grep( quickList, function( langCode, index ) {
return that.options.languages[langCode];
} );
quickList = quickList.slice( 0, 16 ); quickList = quickList.slice( 0, 16 );
quickList.sort( $.uls.data.sortByAutonym ); quickList.sort( $.uls.data.sortByAutonym );
var $quickListsection = $( '<div>' ).addClass( 'twelve columns uls-lcd-region-section' ).prop( 'id', 'uls-lcd-quicklist' ); var $quickListsection = $( '<div>' ).addClass( 'twelve columns uls-lcd-region-section' ).prop( 'id', 'uls-lcd-quicklist' );

View File

@@ -103,7 +103,7 @@
var that = this; var that = this;
var $languages = this.$template.find( 'div.uls-ui-languages' ); var $languages = this.$template.find( 'div.uls-ui-languages' );
$languages.empty(); $languages.empty();
var previousLanguages = this.previousLanguages(); var previousLanguages = this.frequentLanguageList();
var languages = [this.uiLanguage]; var languages = [this.uiLanguage];
for ( var lang in previousLanguages ) { for ( var lang in previousLanguages ) {
if ( previousLanguages[lang] === this.uiLanguage ) { if ( previousLanguages[lang] === this.uiLanguage ) {
@@ -169,6 +169,9 @@
that.$parent.show(); that.$parent.show();
that.prepareUIFonts(); that.prepareUIFonts();
that.prepareLanguages(); that.prepareLanguages();
},
quickList: function() {
return mw.uls.getFrequentLanguageList();
} }
} ); } );
@@ -181,9 +184,8 @@
* Get previous languages * Get previous languages
* @returns {Array} * @returns {Array}
*/ */
previousLanguages: function () { frequentLanguageList: function () {
// FIXME return mw.uls.getFrequentLanguageList();
return [ $.cookie( 'uls-previous-language' ) || 'he', 'hi', 'ml', 'ta'];
}, },
/** /**

View File

@@ -63,6 +63,28 @@
return mw.config.get( "wgULSAcceptLanguageList" ); return mw.config.get( "wgULSAcceptLanguageList" );
}; };
mw.uls.getFrequentLanguageList = function() {
var unique = [],
list = [ mw.config.get( 'wgUserLanguage' ),
mw.config.get( 'wgContentLanguage' ),
mw.uls.getBrowserLanguage() ]
.concat( mw.uls.getPreviousLanguages() )
.concat( mw.uls.getAcceptLanguageList() );
if ( window.GEO ) {
list = list.concat( $.uls.data.languagesInTerritory( window.GEO.country_code ) );
}
$.each( list, function( i, v ) {
if ( $.inArray( v, unique ) === -1 ) {
unique.push( v );
}
} );
// Filter out unknown and unsupported languages
unique = $.grep( unique, function( langCode, index ) {
return $.fn.uls.defaults.languages[langCode];
} );
return unique;
};
$( document ).ready( function() { $( document ).ready( function() {
var $ulsTrigger = $( '.uls-trigger' ), var $ulsTrigger = $( '.uls-trigger' ),
previousLanguages = mw.uls.getPreviousLanguages() || [], previousLanguages = mw.uls.getPreviousLanguages() || [],
@@ -106,23 +128,7 @@
languages: mw.config.get( 'wgULSLanguages' ), languages: mw.config.get( 'wgULSLanguages' ),
searchAPI: mw.util.wikiScript( 'api' ) + "?action=languagesearch", searchAPI: mw.util.wikiScript( 'api' ) + "?action=languagesearch",
quickList: function() { quickList: function() {
var unique = [], return mw.uls.getFrequentLanguageList();
list = [
mw.config.get( 'wgUserLanguage' ),
mw.config.get( 'wgContentLanguage' ),
mw.uls.getBrowserLanguage()
]
.concat( mw.uls.getPreviousLanguages() )
.concat( mw.uls.getAcceptLanguageList() );
if ( window.GEO ) {
list = list.concat( $.uls.data.languagesInTerritory( window.GEO.country_code ) );
}
$.each( list, function ( i, v ) {
if ( $.inArray( v, unique ) === -1 ) {
unique.push( v );
}
} );
return unique;
} }
} ); } );