From 31e483a19e07943a0cdfc8b293c5108288ecd460 Mon Sep 17 00:00:00 2001 From: "Amir E. Aharoni" Date: Tue, 3 Jul 2012 16:39:35 +0300 Subject: [PATCH] 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 --- resources/ext.uls.data.utils.js | 23 +++++++++++++++++++++++ resources/ext.uls.languagefilter.js | 16 +++++++++------- tests/qunit/ext.uls.tests.js | 7 ++++++- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/resources/ext.uls.data.utils.js b/resources/ext.uls.data.utils.js index 05cb7fb7..176bc659 100644 --- a/resources/ext.uls.data.utils.js +++ b/resources/ext.uls.data.utils.js @@ -32,6 +32,20 @@ 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. * @param script string @@ -131,6 +145,15 @@ 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, * grouped by script group. diff --git a/resources/ext.uls.languagefilter.js b/resources/ext.uls.languagefilter.js index c529e19e..ad2291c3 100644 --- a/resources/ext.uls.languagefilter.js +++ b/resources/ext.uls.languagefilter.js @@ -35,14 +35,16 @@ var languages = this.options.languages; var query = this.$element.val(); - $.each( languages, function ( langCode, name ) { - if ( query === "" ) { - that.render( langCode ); + var allLanguages = $.uls.data.allLanguagesByScriptGroup(); + 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 ); + } } - else if ( that.filter( langCode, query ) ) { - that.render( langCode ); - } - } ) ; + } }, render: function( langCode ) { diff --git a/tests/qunit/ext.uls.tests.js b/tests/qunit/ext.uls.tests.js index bbb0b845..40adaac7 100644 --- a/tests/qunit/ext.uls.tests.js +++ b/tests/qunit/ext.uls.tests.js @@ -33,7 +33,7 @@ test( "-- Initial check", 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' // 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 ) ); 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' ); } ); }() );