diff --git a/lib/jquery.uls/css/jquery.uls.css b/lib/jquery.uls/css/jquery.uls.css index 5c1e9ca6..6af44a57 100644 --- a/lib/jquery.uls/css/jquery.uls.css +++ b/lib/jquery.uls/css/jquery.uls.css @@ -1,9 +1,6 @@ .uls-trigger { - /* @embed */ background: url('../images/icon-language.png') no-repeat left center; /* @embed */ - background-image: -webkit-linear-gradient(transparent, transparent), url('../images/icon-language.svg'); - /* @embed */ background-image: linear-gradient(transparent, transparent), url('../images/icon-language.svg'); padding-left: 30px; } @@ -69,7 +66,6 @@ .uls-search-label { background: url('../images/search.png') no-repeat center center; - background-image: -webkit-linear-gradient(transparent, transparent), url('../images/search.svg'); /* @embed */ background-image: linear-gradient(transparent, transparent), url('../images/search.svg'); background-size: 20px; @@ -115,7 +111,6 @@ .uls-languagefilter-clear { background: url('../images/clear.png') no-repeat left center; - background-image: -webkit-linear-gradient(transparent, transparent), url('../images/clear.svg'); /* @embed */ background-image: linear-gradient(transparent, transparent), url('../images/clear.svg'); background-size: 15px; diff --git a/lib/jquery.uls/i18n/af.json b/lib/jquery.uls/i18n/af.json index 2b9d83d4..36a24def 100644 --- a/lib/jquery.uls/i18n/af.json +++ b/lib/jquery.uls/i18n/af.json @@ -18,8 +18,8 @@ "uls-region-PA": "Stille Oseaan", "uls-region-all": "Alle tale", "uls-no-results-found": "Geen resultate gevind nie", - "uls-common-languages": "Voorgestelde Tale", + "uls-common-languages": "Voorgestelde tale", "uls-no-results-suggestion-title": "U mag geïnteresseerd wees in:", - "uls-search-help": "Soektogte kan volgende taalnaam, skripnaam, ISO-kode, of volgens streek geskied.", + "uls-search-help": "Soek gerus volgens taalnaam, skrifnaam of ISO-kode, of blaai volgens streek.", "uls-search-placeholder": "Soek na ’n taal" } diff --git a/lib/jquery.uls/i18n/anp.json b/lib/jquery.uls/i18n/anp.json index 0a61cc07..95d5ee5d 100644 --- a/lib/jquery.uls/i18n/anp.json +++ b/lib/jquery.uls/i18n/anp.json @@ -12,9 +12,10 @@ "uls-region-AS": "एशिया", "uls-region-ME": "मध्य पूर्व", "uls-region-PA": "प्रशांत", + "uls-region-all": "सब्भे भाषा", "uls-no-results-found": "कोय परिणाम नै मिललै", - "uls-common-languages": "आम भाषा सीनी", + "uls-common-languages": "आम भाषा सिनी", "uls-no-results-suggestion-title": "आपन॑ लेली संभवतः उपयोगी:", "uls-search-help": "आपन॑ भाषा केरऽ नाम , स्क्रिप्ट केरऽ नाम , भाषा केरऽ आईएसओ कोड सं॑ खोज॑ सकै छहो या आपन॑ क्षेत्र के नाम सं॑ ब्राउज़ कर॑ सकै छहऽ.", - "uls-search-placeholder": "भाषा खोज" + "uls-search-placeholder": "भाषा लेली खोजऽ" } diff --git a/lib/jquery.uls/i18n/ckb.json b/lib/jquery.uls/i18n/ckb.json index 695ac35e..fa8e23bb 100644 --- a/lib/jquery.uls/i18n/ckb.json +++ b/lib/jquery.uls/i18n/ckb.json @@ -3,7 +3,8 @@ "authors": [ "Calak", "Asoxor", - "Lost Whispers" + "Lost Whispers", + "Épine" ] }, "uls-region-WW": "لە گشت جیھاندا", diff --git a/lib/jquery.uls/i18n/hoc.json b/lib/jquery.uls/i18n/hoc.json index db58388d..cdbfa72a 100644 --- a/lib/jquery.uls/i18n/hoc.json +++ b/lib/jquery.uls/i18n/hoc.json @@ -10,7 +10,12 @@ "uls-region-AF": "𑢡𑣘𑣗𑣜𑣂𑣌𑣁", "uls-region-EU": "𑢥𑣃𑣜𑣉𑣉𑣘", "uls-region-AS": "𑢨𑣈𑣞𑣂𑣅𑣁", + "uls-region-ME": "𑢵𑣚𑣁-𑣕𑣃𑣜 𑣞𑣄", + "uls-region-PA": "𑢸𑣈𑣞𑣂𑣘𑣂𑣌", "uls-region-all": "𑢾𑣗𑣈𑣓 𑣎𑣈𑣋𑣁𑣜 𑣌𑣉", "uls-no-results-found": "𑢮𑣁𑣓𑣄 𑣌𑣁 𑣓𑣖 𑣎𑣓𑣁", + "uls-common-languages": "𑢨𑣒𑣄 𑣎𑣈𑣋𑣁𑣜 𑣌𑣉", + "uls-no-results-suggestion-title": "𑢳𑣈𑣓𑣁 𑣌𑣉 𑣏𑣂 𑣗𑣈𑣓 𑣓𑣖 𑣕𑣓𑣁:", + "uls-search-help": "𑢮𑣈𑣋𑣁𑣜 𑣓𑣃𑣕𑣃𑣖 𑣕𑣈, 𑣏𑣂𑣕𑣂 𑣓𑣃𑣕𑣃𑣖 𑣕𑣈, 𑣎𑣈𑣋𑣁𑣜 𑣜𑣈𑣅𑣄 ISO 𑣌𑣉𑣉𑣑 𑣕𑣈 𑣌𑣁𑣜𑣈 𑣕𑣅𑣑 𑣓𑣃𑣕𑣃𑣖 𑣕𑣈 𑣉𑣉 𑣓𑣖-𑣓𑣈𑣚 𑣔𑣆𑣅𑣉𑣄𑣁.", "uls-search-placeholder": "𑢶𑣂𑣈𑣑 𑣎𑣈𑣋𑣁𑣓 𑣓𑣈𑣚-𑣓𑣖𑣈" } diff --git a/lib/jquery.uls/src/jquery.uls.languagefilter.js b/lib/jquery.uls/src/jquery.uls.languagefilter.js index 8b2cc5bd..a3c31ff1 100644 --- a/lib/jquery.uls/src/jquery.uls.languagefilter.js +++ b/lib/jquery.uls/src/jquery.uls.languagefilter.js @@ -167,76 +167,69 @@ }, search: function () { - var langCode, scriptGroup, langNum, languagesInScript, - languages = $.uls.data.getLanguagesByScriptGroup( this.options.languages ), - query = $.trim( this.$element.val() ); + var languages = Object.keys( this.options.languages ), + results = [], + query = $.trim( this.$element.val() ).toLowerCase(); - this.resultCount = 0; - for ( scriptGroup in languages ) { - languagesInScript = languages[ scriptGroup ]; - languagesInScript.sort( $.uls.data.sortByAutonym ); - for ( langNum = 0; langNum < languagesInScript.length; langNum++ ) { - langCode = languagesInScript[ langNum ]; - if ( query === '' || this.filter( langCode, query ) ) { - if ( this.resultCount === 0 ) { - // Autofill the first result. - this.autofill( langCode ); - } - - if ( query.toLowerCase() === langCode ) { - this.selectedLanguage = langCode; - } - - if ( this.render( langCode ) ) { - this.resultCount++; - } - } - } + if ( query === '' ) { + languages.map( this.render.bind( this ) ); + this.resultHandler( query, languages ); + return; } - // Also do a search by search API - if ( !this.resultCount && this.options.searchAPI && query ) { - this.searchAPI( query ); + // Local search results + results = languages.filter( function ( langCode ) { + return this.filter( langCode, query ); + }.bind( this ) ); + + // Use the searchAPI if available, assuming that it has superior search results. + if ( this.options.searchAPI ) { + this.searchAPI( query ) + .done( this.resultHandler.bind( this ) ) + .fail( this.resultHandler.bind( this, query, results, undefined ) ); } else { - this.resultHandler( query ); + this.resultHandler( query, results ); } }, searchAPI: function ( query ) { - var languageFilter = this; + return $.get( this.options.searchAPI, { search: query } ).then( function ( result ) { + var autofillLabel, + results = []; - $.get( languageFilter.options.searchAPI, { - search: query - }, function ( result ) { $.each( result.languagesearch, function ( code, name ) { - if ( languageFilter.resultCount === 0 ) { - // Autofill the first result. - languageFilter.autofill( code, name ); + if ( this.options.languages[ code ] ) { + autofillLabel = autofillLabel || name; + results.push( code ); } + }.bind( this ) ); - if ( languageFilter.options.languages[ code ] && - languageFilter.render( code ) - ) { - languageFilter.resultCount++; - } - } ); + return $.Deferred().resolve( query, results, autofillLabel ); - languageFilter.resultHandler( query ); - } ); + }.bind( this ) ); }, /** * Handler method to be called once search is over. * Based on search result triggers resultsfound or noresults events - * @param query string + * @param {string} query + * @param {number} resultCount + * @param {string} [autofillLabel] */ - resultHandler: function ( query ) { - if ( this.resultCount === 0 ) { + resultHandler: function ( query, results, autofillLabel ) { + if ( results.length === 0 ) { this.$suggestion.val( '' ); this.$element.trigger( 'noresults.uls', query ); - } else { - this.$element.trigger( 'resultsfound.uls', [ query, this.resultCount ] ); + return; } + + if ( query ) { + this.selectedLanguage = results[ 0 ]; + this.autofill( results[ 0 ], autofillLabel ); + } + + results.map( this.render.bind( this ) ); + this.$element.trigger( 'resultsfound.uls', [ query, results.length ] ); }, autofill: function ( langCode, languageName ) { @@ -251,7 +244,6 @@ return; } - this.selectedLanguage = langCode; languageName = languageName || this.options.languages[ langCode ]; if ( !languageName ) { @@ -281,6 +273,7 @@ }, render: function ( langCode ) { + // This is actually instance of LanguageCategoryDisplay and not jQuery! var $target = this.options.$target; if ( !$target ) {