Add sortByScriptGroupAndAutonym

A step to resolving downstream bug:
https://phabricator.wikimedia.org/T189090
This commit is contained in:
Amire80
2018-05-22 14:29:22 +03:00
committed by Niklas Laxström
parent 3956e2b7f2
commit 30ee731727
2 changed files with 51 additions and 16 deletions

View File

@@ -141,22 +141,28 @@ function getScriptGroupOfLanguage( language ) {
/**
* Get the given list of languages grouped by script.
* @param {string[]} languages Array of language codes
* @return {Object} Array of languages indexed by script codes
* @param {string[]|Object} languages Array of language codes or associative array of autonyms indexed by language code
* @return {Object} Associative array of languages indexed by script groups
*/
function getLanguagesByScriptGroup( languages ) {
var languagesByScriptGroup = {},
language, resolvedRedirect, langScriptGroup;
for ( language in languages ) {
resolvedRedirect = isRedirect( language ) || language;
langScriptGroup = getScriptGroupOfLanguage( resolvedRedirect );
if ( !languagesByScriptGroup[ langScriptGroup ] ) {
languagesByScriptGroup[ langScriptGroup ] = [];
}
languagesByScriptGroup[ langScriptGroup ].push( language );
}
return languagesByScriptGroup;
}
function getLanguagesByScriptGroup( languages ) {
var languagesByScriptGroup = {},
languagesList, language, languageIndex, resolvedRedirect, langScriptGroup;
languagesList = Array.isArray( languages )
? languages
: Object.keys( languages );
for ( languageIndex = 0; languageIndex < languagesList.length; languageIndex++ ) {
language = languagesList[ languageIndex ];
resolvedRedirect = isRedirect( language ) || language;
langScriptGroup = getScriptGroupOfLanguage( resolvedRedirect );
if ( !languagesByScriptGroup[ langScriptGroup ] ) {
languagesByScriptGroup[ langScriptGroup ] = [];
}
languagesByScriptGroup[ langScriptGroup ].push( language );
}
return languagesByScriptGroup;
}
/**
* Returns an associative array of languages in several regions,
@@ -195,6 +201,27 @@ function getLanguagesByScriptGroupInRegion( region ) {
return getLanguagesByScriptGroupInRegions( [ region ] );
}
/**
* Get the given list of languages grouped by script.
* @param {string[], Object} languages Array of language codes or associative array of autonyms indexed by language code
* @return {string[]} Array of language codes
*/
function sortByScriptGroupAndAutonym( languages ) {
var groupedLanguages, scriptGroups, i,
sortedByAutonym = [],
allLanguages = [];
groupedLanguages = getLanguagesByScriptGroup( languages );
scriptGroups = Object.keys( groupedLanguages ).sort();
for ( i = 0; i < scriptGroups.length; i++ ) {
sortedByAutonym = groupedLanguages[ scriptGroups[i] ].sort( sortByAutonym )
allLanguages = allLanguages.concat( sortedByAutonym );
}
return allLanguages;
}
/**
* A callback for sorting languages by autonym.
* Can be used as an argument to a sort function.
@@ -269,5 +296,6 @@ module.exports = {
isKnown,
isRedirect,
isRtl,
sortByScriptGroupAndAutonym,
sortByAutonym
};