Sort languages by script in the initial view

* Added new utility functions to return all languages by script group.
* Used that function to sort languages initially.
* Added tests.

Change-Id: I405cb73e6af13f59c307da5a7f2269049ecba698
This commit is contained in:
Amir E. Aharoni
2012-07-03 16:39:35 +03:00
parent 5625f6eb70
commit 31e483a19e
3 changed files with 38 additions and 8 deletions

View File

@@ -32,6 +32,20 @@
return $.uls.data.autonyms[language]; return $.uls.data.autonyms[language];
}; };
/**
* Returns an array of all region codes.
* @return array
*/
$.uls.data.allRegions = function() {
var allRegions = [];
for( var region in $.uls.data.regiongroups ) {
allRegions.push( region );
}
return allRegions;
};
/** /**
* Returns all languages written in script. * Returns all languages written in script.
* @param script string * @param script string
@@ -131,6 +145,15 @@
return $.uls.data.languagesByScriptGroupInRegions( [ region ] ); return $.uls.data.languagesByScriptGroupInRegions( [ region ] );
}; };
/**
* Returns an associative array of all languages,
* grouped by script group.
* @return associative array
*/
$.uls.data.allLanguagesByScriptGroup = function() {
return $.uls.data.languagesByScriptGroupInRegions( $.uls.data.allRegions() );
};
/** /**
* Returns an associative array of languages in several regions, * Returns an associative array of languages in several regions,
* grouped by script group. * grouped by script group.

View File

@@ -35,14 +35,16 @@
var languages = this.options.languages; var languages = this.options.languages;
var query = this.$element.val(); var query = this.$element.val();
$.each( languages, function ( langCode, name ) { var allLanguages = $.uls.data.allLanguagesByScriptGroup();
if ( query === "" ) { for ( var scriptGroup in allLanguages ) {
for ( var langNum = 0; langNum < allLanguages[scriptGroup].length; langNum++ ) {
var langCode = allLanguages[scriptGroup][langNum];
if ( languages[langCode] !== undefined && ( query === "" || that.filter( langCode, query ) ) )
{
that.render( langCode ); that.render( langCode );
} }
else if ( that.filter( langCode, query ) ) {
that.render( langCode );
} }
} ) ; }
}, },
render: function( langCode ) { render: function( langCode ) {

View File

@@ -33,7 +33,7 @@ test( "-- Initial check", function() {
} ); } );
test( "-- $.uls.data testing", function() { test( "-- $.uls.data testing", function() {
expect( 15 ); expect( 17 );
// 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.
@@ -83,6 +83,11 @@ test( "-- $.uls.data testing", function() {
var languagesByScriptGroupInEMEA = $.uls.data.languagesByScriptGroupInRegions( $.uls.data.regionsInGroup( 2 ) ); var languagesByScriptGroupInEMEA = $.uls.data.languagesByScriptGroupInRegions( $.uls.data.regionsInGroup( 2 ) );
deepEqual( languagesByScriptGroupInEMEA['WestCaucasian'], ['hy', 'ka', 'xmf'], 'Correct languages in WestCaucasian script group selected' ); deepEqual( languagesByScriptGroupInEMEA['WestCaucasian'], ['hy', 'ka', 'xmf'], 'Correct languages in WestCaucasian script group selected' );
var allLanguagesByScriptGroup = $.uls.data.allLanguagesByScriptGroup();
strictEqual( allLanguagesByScriptGroup['Greek'], ['el', 'grc', 'pnt'], 'All languages in the Greek script found' );
deepEqual( $.uls.data.allRegions(), ['NA', 'LA', 'SA', 'ME', 'AF', 'EU', 'AS', 'AU', 'PA', 'WW'], 'All regions found' );
} ); } );
}() ); }() );