From 13473c9f7ac70d4126f967924ad8920a7dbc511d Mon Sep 17 00:00:00 2001 From: "Amir E. Aharoni" Date: Thu, 3 Jan 2013 09:33:44 +0200 Subject: [PATCH] Render every region only once Fixes bug https://bugzilla.wikimedia.org/show_bug.cgi?id=43568 --- src/jquery.uls.lcd.js | 7 ++++--- src/jquery.uls.regionfilter.js | 21 +++++++++++---------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/jquery.uls.lcd.js b/src/jquery.uls.lcd.js index eff660e..b6f2e15 100644 --- a/src/jquery.uls.lcd.js +++ b/src/jquery.uls.lcd.js @@ -268,7 +268,8 @@ // The region section need to be in sync with the map filter. lcd.$element.scroll( function () { - var $ulsLanguageList = $( this ), + var inview, inviewRegion, + $ulsLanguageList = $( this ), scrollTop = $ulsLanguageList.position().top, scrollBottom = $ulsLanguageList.height(); @@ -278,7 +279,7 @@ } } // The region section need to be in sync with the map filter. - var inviewRegion = 'WW'; + inviewRegion = 'WW'; lcd.$element.find( 'div.uls-lcd-region-section' ).each( function () { var $lcdRegionSection = $( this ), top = $lcdRegionSection.position().top, @@ -292,7 +293,7 @@ } } ); - var inview = $.uls.data.regiongroups[inviewRegion]; + inview = $.uls.data.regiongroups[inviewRegion]; $( '.regionselector' ).removeClass( 'active' ); $( '#uls-region-' + inview ).addClass( 'active' ); } ); diff --git a/src/jquery.uls.regionfilter.js b/src/jquery.uls.regionfilter.js index b245f69..b0c8732 100644 --- a/src/jquery.uls.regionfilter.js +++ b/src/jquery.uls.regionfilter.js @@ -110,21 +110,22 @@ }, next: function () { - if ( !this.$element.hasClass( 'active') ) { + var regionSelector = this; + + if ( !this.$element.hasClass( 'active' ) ) { return true; } - var regionSelector = this; // Do not respond to all scroll end events, but only after a short interval delay( function () { - var regiongroup = regionSelector.$element.data( 'regiongroup' ); - var nextRegiongroup = regiongroup + 1; + var nextRegionGroupNumber = regionSelector.$element.data( 'regiongroup' ) + 1, + $nextRegion = $( '#uls-region-' + nextRegionGroupNumber ), + nextRegionSelector = $nextRegion.length && $nextRegion.data( 'regionselector' ); - var $nextRegion = $( '#uls-region-' + nextRegiongroup ); - var next = $nextRegion.length && $nextRegion.data( 'regionselector' ); - - if ( next ) { - next.show(); + // If cache is defined, then it is already rendered and there's no need + // to re-render it. + if ( nextRegionSelector && nextRegionSelector.cache === null ) { + nextRegionSelector.show(); } }, 100 ); @@ -133,7 +134,7 @@ listen: function () { this.$element.on( 'click', $.proxy( this.click, this ) ); - this.options.$target.$element.bind( 'scrollend', $.proxy( this.next, this) ); + this.options.$target.$element.bind( 'scrollend', $.proxy( this.next, this ) ); }, click: function ( e ) {