From 3b11bb9e367a0ee7251b19adbb78d027c625fa3d Mon Sep 17 00:00:00 2001 From: Andrew Nacin Date: Sat, 29 Mar 2014 09:08:16 +0000 Subject: [PATCH] Theme Installer: Avoid race condition during pagination. props matveb. see #27055. git-svn-id: https://develop.svn.wordpress.org/trunk@27845 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/js/theme.js | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/wp-admin/js/theme.js b/src/wp-admin/js/theme.js index 147b1c4ee1..f2fdf0d84f 100644 --- a/src/wp-admin/js/theme.js +++ b/src/wp-admin/js/theme.js @@ -269,6 +269,9 @@ themes.Collection = Backbone.Collection.extend({ self.add( data.themes ); self.trigger( 'query:success' ); + // We are done loading themes for now. + self.loadingThemes = false; + }).fail( function() { self.trigger( 'query:fail' ); }); @@ -331,7 +334,10 @@ themes.Collection = Backbone.Collection.extend({ } } }); - } + }, + + // Static status controller for when we are loading themes. + loadingThemes: false }); // This is the view that controls each theme item @@ -1148,7 +1154,17 @@ themes.view.Installer = themes.view.Appearance.extend({ // Bump `collection.currentQuery.page` and request more themes if we hit the end of the page. this.listenTo( this, 'theme:end', function() { + + // Make sure we are not already loading + if ( self.collection.loadingThemes ) { + return; + } + + // Set loadingThemes to true and bump page instance of currentQuery. + self.collection.loadingThemes = true; self.collection.currentQuery.page++; + + // Use currentQuery.page to build the themes request. _.extend( self.collection.currentQuery.request, { page: self.collection.currentQuery.page } ); self.collection.query( self.collection.currentQuery.request ); });