From 1dcb533b421e85e937773fc16045f4e7f4f24629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Fri, 27 Oct 2017 12:12:49 +0300 Subject: [PATCH 1/4] Fix "srpski" not finding results in Wikipedia compact links See also https://phabricator.wikimedia.org/T178996 --- src/jquery.uls.languagefilter.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/jquery.uls.languagefilter.js b/src/jquery.uls.languagefilter.js index 8b2cc5b..ed79ed5 100644 --- a/src/jquery.uls.languagefilter.js +++ b/src/jquery.uls.languagefilter.js @@ -209,6 +209,8 @@ search: query }, function ( result ) { $.each( result.languagesearch, function ( code, name ) { + var target; + if ( languageFilter.resultCount === 0 ) { // Autofill the first result. languageFilter.autofill( code, name ); @@ -219,6 +221,14 @@ ) { languageFilter.resultCount++; } + + // Try to hide issues caused by inconsistent language codes + target = $.uls.data.isRedirect( code ); + if ( languageFilter.options.languages[ target ] && + languageFilter.render( target ) + ) { + languageFilter.resultCount++; + } } ); languageFilter.resultHandler( query ); From 9fba3ab728af0a682e55be7fa89efb46ae00f1c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Tue, 6 Feb 2018 16:35:39 +0200 Subject: [PATCH 2/4] Fix my broken merge conflict result --- src/jquery.uls.languagefilter.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/jquery.uls.languagefilter.js b/src/jquery.uls.languagefilter.js index 702ac41..afcb754 100644 --- a/src/jquery.uls.languagefilter.js +++ b/src/jquery.uls.languagefilter.js @@ -208,6 +208,8 @@ results = []; $.each( result.languagesearch, function ( code, name ) { + var target; + if ( this.options.languages[ code ] ) { autofillLabel = autofillLabel || name; results.push( code ); @@ -220,6 +222,8 @@ autofillLabel = autofillLabel || name; results.push( target ); } + }.bind( this ) ); + return $.Deferred().resolve( query, results, autofillLabel ); }.bind( this ) ); }, From 0352b3df0daddc54b66db0a8266918e0ed3ebf67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Wed, 7 Feb 2018 15:24:15 +0200 Subject: [PATCH 3/4] Fix to avoid displaying duplicate results caused by redirects --- src/jquery.uls.languagefilter.js | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/jquery.uls.languagefilter.js b/src/jquery.uls.languagefilter.js index afcb754..1b5b0a3 100644 --- a/src/jquery.uls.languagefilter.js +++ b/src/jquery.uls.languagefilter.js @@ -207,20 +207,31 @@ var autofillLabel, results = []; - $.each( result.languagesearch, function ( code, name ) { - var target; + $.each( result.languagesearch, function ( apiCode, name ) { + var code, + redirect = $.uls.data.isRedirect( apiCode ); - if ( this.options.languages[ code ] ) { - autofillLabel = autofillLabel || name; - results.push( code ); + if ( this.options.languages[ apiCode ] ) { + code = apiCode; + } else if ( redirect && this.options.languages[ redirect ] ) { + // Language tags are messy. Try to make sure we handle + // them gracefully with regards to redirects. + code = redirect; + } else { return; } - // Try to hide issues caused by inconsistent language codes - target = $.uls.data.isRedirect( code ); - if ( target && this.options.languages[ target ] ) { + // 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( target ); + results.push( code ); } }.bind( this ) ); From eccd0e194531d559d12f70328f96f45a4222ad4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 8 Feb 2018 15:26:15 +0200 Subject: [PATCH 4/4] Change code structure a bit per code review comments --- src/jquery.uls.languagefilter.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/jquery.uls.languagefilter.js b/src/jquery.uls.languagefilter.js index 1b5b0a3..4b474d0 100644 --- a/src/jquery.uls.languagefilter.js +++ b/src/jquery.uls.languagefilter.js @@ -208,17 +208,16 @@ results = []; $.each( result.languagesearch, function ( apiCode, name ) { - var code, - redirect = $.uls.data.isRedirect( apiCode ); + var code, redirect; if ( this.options.languages[ apiCode ] ) { code = apiCode; - } else if ( redirect && this.options.languages[ redirect ] ) { - // Language tags are messy. Try to make sure we handle - // them gracefully with regards to redirects. - code = redirect; } else { - return; + redirect = $.uls.data.isRedirect( apiCode ); + if ( !redirect || !this.options.languages[ redirect ] ) { + return; + } + code = redirect; } // Because of the redirect checking above, we might get duplicates.