Merge "(bug 39535) Fix the creation of language buttons"
This commit is contained in:
@@ -138,39 +138,69 @@
|
|||||||
* Prepare the UI language selector
|
* Prepare the UI language selector
|
||||||
*/
|
*/
|
||||||
prepareLanguages: function () {
|
prepareLanguages: function () {
|
||||||
var that = this;
|
var displaySettings = this,
|
||||||
var $languages = this.$template.find( 'div.uls-ui-languages' );
|
$languages = this.$template.find( 'div.uls-ui-languages' ),
|
||||||
|
suggestedLanguages = this.frequentLanguageList()
|
||||||
|
// Common world languages, for the case that there are
|
||||||
|
// too few suggested languages
|
||||||
|
.concat( ['en', 'zh', 'fr'] ),
|
||||||
|
|
||||||
|
// Content language is always on the first button
|
||||||
|
languagesForButtons = [this.contentLanguage],
|
||||||
|
SUGGESTED_LANGUAGES_NUMBER = 3;
|
||||||
|
|
||||||
|
// This is needed when drawing the panel for the second time
|
||||||
|
// after selecting a different language
|
||||||
$languages.empty();
|
$languages.empty();
|
||||||
var previousLanguages = this.frequentLanguageList();
|
|
||||||
var languages = [this.uiLanguage];
|
// UI language must always be present
|
||||||
for ( var lang in previousLanguages ) {
|
if ( this.uiLanguage !== this.contentLanguage ) {
|
||||||
if ( previousLanguages[lang] === this.uiLanguage ) {
|
languagesForButtons.push( this.uiLanguage );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( var lang in suggestedLanguages ) {
|
||||||
|
// Skip already found languages
|
||||||
|
if ( $.inArray( suggestedLanguages[lang], languagesForButtons ) > -1 ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
languages.push( previousLanguages[lang] );
|
|
||||||
|
languagesForButtons.push( suggestedLanguages[lang] );
|
||||||
|
|
||||||
|
// No need to add more languages than buttons
|
||||||
|
if ( languagesForButtons.length === SUGGESTED_LANGUAGES_NUMBER ) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function buttonHandler( button ) {
|
function buttonHandler( button ) {
|
||||||
return function () {
|
return function () {
|
||||||
that.uiLanguage = button.data( "language" ) || that.uiLanguage;
|
displaySettings.uiLanguage = button.data( "language" ) || displaySettings.uiLanguage;
|
||||||
$( "div.uls-ui-languages button.button" ).removeClass( "down" );
|
$( "div.uls-ui-languages button.button" ).removeClass( "down" );
|
||||||
button.addClass( "down" );
|
button.addClass( "down" );
|
||||||
that.prepareUIFonts();
|
displaySettings.prepareUIFonts();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( var i = 0; i < 3; i++ ) {
|
// Add the buttons for the most likely languages
|
||||||
var language = languages[i];
|
for ( var i = 0; i < SUGGESTED_LANGUAGES_NUMBER; i++ ) {
|
||||||
var $button = $( '<button>' )
|
var language = languagesForButtons[i],
|
||||||
|
$button = $( '<button>' )
|
||||||
.addClass( 'button uls-language-button' )
|
.addClass( 'button uls-language-button' )
|
||||||
.text( $.uls.data.getAutonym( language ) );
|
.text( $.uls.data.getAutonym( language ) )
|
||||||
|
.prop({
|
||||||
|
lang: language,
|
||||||
|
dir: $.uls.data.getDir( language )
|
||||||
|
});
|
||||||
|
|
||||||
if ( language === this.uiLanguage ) {
|
if ( language === this.uiLanguage ) {
|
||||||
$button.addClass( 'down' );
|
$button.addClass( 'down' );
|
||||||
}
|
}
|
||||||
|
|
||||||
$button.data( 'language', language );
|
$button.data( 'language', language );
|
||||||
$languages.append( $button );
|
$languages.append( $button );
|
||||||
$button.on( 'click', buttonHandler( $button ) );
|
$button.on( 'click', buttonHandler( $button ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
this.prepareMoreLanguages();
|
this.prepareMoreLanguages();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user