diff --git a/lib/jquery.uls/src/jquery.uls.data.utils.js b/lib/jquery.uls/src/jquery.uls.data.utils.js index 4dcee07f..7d7d63fa 100644 --- a/lib/jquery.uls/src/jquery.uls.data.utils.js +++ b/lib/jquery.uls/src/jquery.uls.data.utils.js @@ -183,7 +183,7 @@ } for ( i = 0; i < regions.length; i++ ) { - if ( $.inArray( regions[ i ], $.uls.data.getRegions( language ) ) !== -1 ) { + if ( $.uls.data.getRegions( language ).indexOf( regions[ i ] ) !== -1 ) { scriptGroup = $.uls.data.getScriptGroupOfLanguage( language ); if ( languagesByScriptGroupInRegions[ scriptGroup ] === undefined ) { @@ -209,7 +209,7 @@ var scriptGroup; for ( scriptGroup in $.uls.data.scriptgroups ) { - if ( $.inArray( script, $.uls.data.scriptgroups[ scriptGroup ] ) !== -1 ) { + if ( $.uls.data.scriptgroups[ scriptGroup ].indexOf( script ) !== -1 ) { return scriptGroup; } } @@ -246,7 +246,7 @@ * @return {boolean} */ $.uls.data.isRtl = function ( language ) { - return $.inArray( $.uls.data.getScript( language ), $.uls.data.rtlscripts ) !== -1; + return $.uls.data.rtlscripts.indexOf( $.uls.data.getScript( language ) ) !== -1; }; /** diff --git a/lib/jquery.uls/src/jquery.uls.languagefilter.js b/lib/jquery.uls/src/jquery.uls.languagefilter.js index 2989199b..edaa0e70 100644 --- a/lib/jquery.uls/src/jquery.uls.languagefilter.js +++ b/lib/jquery.uls/src/jquery.uls.languagefilter.js @@ -192,15 +192,34 @@ var autofillLabel, results = []; - $.each( result.languagesearch, function ( code, name ) { - if ( this.options.languages[ code ] ) { + $.each( result.languagesearch, function ( apiCode, name ) { + var code, redirect; + + if ( this.options.languages[ apiCode ] ) { + code = apiCode; + } else { + redirect = $.uls.data.isRedirect( apiCode ); + if ( !redirect || !this.options.languages[ redirect ] ) { + return; + } + code = redirect; + } + + // Because of the redirect checking above, we might get duplicates. + // For example if API returns both `sr` and `sr-cyrl`, the former + // could get mapped to `sr-cyrl` and then we would have it twice. + // The exact cases when this happens of course depends on what is in + // options.languages, which might contain redirects such as `sr`. In + // this case we only show `sr` if no other variants are there. + // This also protects against broken search APIs returning duplicate + // results, although that is not happening in practice. + if ( results.indexOf( code ) === -1 ) { autofillLabel = autofillLabel || name; results.push( code ); } }.bind( this ) ); return $.Deferred().resolve( query, results, autofillLabel ); - }.bind( this ) ); },