From 8b3d77dae1c2b61952e5006e3218f81be0d06f8b Mon Sep 17 00:00:00 2001 From: Santhosh Thottingal Date: Mon, 4 Apr 2016 16:29:25 +0530 Subject: [PATCH] Support language codes that are redirects Addressing issue #207 Such language codes were not listed in ULS language list. Root cause was $.uls.data.getLanguagesByScriptGroup was returning a map of script groups, which contained only resolved language codes. And later in append method of jquery.uls.lcd.js, there is a check if that language code is part of languages list passed as option to uls() call. This test fails and the language code does not get added to display. Change-Id: Iec914a9694a46eef5750ef3af7346d66e052ab77 --- src/jquery.uls.data.utils.js | 11 ++++------- src/jquery.uls.lcd.js | 4 ++-- test/jquery.uls.test.js | 4 ++-- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/jquery.uls.data.utils.js b/src/jquery.uls.data.utils.js index 7ff7711..8836edc 100644 --- a/src/jquery.uls.data.utils.js +++ b/src/jquery.uls.data.utils.js @@ -245,21 +245,18 @@ */ $.uls.data.getLanguagesByScriptGroup = function ( languages ) { var languagesByScriptGroup = {}, - language, codeToAdd, langScriptGroup; + language, resolvedRedirect, langScriptGroup; for ( language in languages ) { - codeToAdd = $.uls.data.isRedirect( language ) || language; + resolvedRedirect = $.uls.data.isRedirect( language ) || language; - langScriptGroup = $.uls.data.getScriptGroupOfLanguage( codeToAdd ); + langScriptGroup = $.uls.data.getScriptGroupOfLanguage( resolvedRedirect ); if ( !languagesByScriptGroup[langScriptGroup] ) { languagesByScriptGroup[langScriptGroup] = []; } - // Prevent duplicate adding of redirects - if ( $.inArray( codeToAdd, languagesByScriptGroup[langScriptGroup] ) === -1 ) { - languagesByScriptGroup[langScriptGroup].push( codeToAdd ); - } + languagesByScriptGroup[langScriptGroup].push( language ); } return languagesByScriptGroup; diff --git a/src/jquery.uls.lcd.js b/src/jquery.uls.lcd.js index b52dcee..8ac7874 100644 --- a/src/jquery.uls.lcd.js +++ b/src/jquery.uls.lcd.js @@ -66,13 +66,13 @@ * Adds language to the language list. * @param {string} langCode * @param {string} [regionCode] - * @return {bool} Whether the language was added. + * @return {boolean} Whether the language was added. */ append: function ( langCode, regionCode ) { var lcd = this, i, regions; - if ( !this.options.languages[ langCode ] ) { + if ( !$.uls.data.languages[ langCode ] ) { // Language is unknown or not in the list of languages for this context. return false; } diff --git a/test/jquery.uls.test.js b/test/jquery.uls.test.js index 313cfff..587bcc7 100644 --- a/test/jquery.uls.test.js +++ b/test/jquery.uls.test.js @@ -227,8 +227,8 @@ 'vro': 'Võro' // Target after alias }; groupedLanguages = { - Latin: [ 'en', 'vro', 'sr-latn' ], - Cyrillic: [ 'ru', 'sr-cyrl' ] + Latin: [ 'en', 'fiu-vro', 'sr-latn', 'sr-el', 'vro' ], + Cyrillic: [ 'ru', 'sr', 'sr-cyrl' ] }; assert.deepEqual( $.uls.data.getLanguagesByScriptGroup( languagesToGroup ), groupedLanguages,