From fbb55dfe6fdf05f59ed618ef853b463f4da0e830 Mon Sep 17 00:00:00 2001 From: Santhosh Thottingal Date: Tue, 21 Aug 2012 17:06:41 +0530 Subject: [PATCH] Cache the region filter results Change-Id: Ia303774d3c1171f3e8c1b3f7ca8b102c79e68300 --- lib/jquery.uls/src/jquery.uls.regionfilter.js | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/lib/jquery.uls/src/jquery.uls.regionfilter.js b/lib/jquery.uls/src/jquery.uls.regionfilter.js index 80747bb5..576b4a87 100644 --- a/lib/jquery.uls/src/jquery.uls.regionfilter.js +++ b/lib/jquery.uls/src/jquery.uls.regionfilter.js @@ -33,6 +33,7 @@ this.options = $.extend( {}, $.fn.regionselector.defaults, options ); this.$element.addClass( 'regionselector' ); this.regions = []; + this.cache= null; this.regionGroup = this.$element.data( 'regiongroup' ); this.init(); this.listen(); @@ -57,6 +58,7 @@ region = this.regions[i]; if ( $.inArray( region, langRegions ) >= 0 ) { this.render( langCode, region ); + this.cache[langCode] = region; return; } } @@ -69,15 +71,28 @@ // if there is a region group, make it active. this.$element.addClass( 'active' ); } - // Re-populate the list of languages this.options.$target.empty(); - var languagesByScriptGroup = $.uls.data.languagesByScriptGroup( this.options.languages ); - for ( var scriptGroup in languagesByScriptGroup ) { - var languages = languagesByScriptGroup[scriptGroup]; - languages.sort( $.uls.data.sortByAutonym ); - for ( var i = 0; i < languages.length; i++ ) { - this.test( languages[i] ); + + if ( this.cache ) { + // If the result cache is present, render the results from there. + var result = null; + for ( result in this.cache ) { + this.render( result, this.cache[result] ); + } + } else { + this.cache = {}; + // Get the languages grouped by script group + var languagesByScriptGroup = $.uls.data.languagesByScriptGroup( this.options.languages ); + for ( var scriptGroup in languagesByScriptGroup ) { + // Get the languages for the script group + var languages = languagesByScriptGroup[scriptGroup]; + // Sort it based on autonym + languages.sort( $.uls.data.sortByAutonym ); + for ( var i = 0; i < languages.length; i++ ) { + // Check whether it belongs to the region + this.test( languages[i] ); + } } }