Esanders has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/260688

Change subject: APIResultsProvider: Refactoring resetting of queue.
......................................................................

APIResultsProvider: Refactoring resetting of queue.

Change-Id: I463753574c6677f056566534f82ba6fb1d7ecc7d
---
M src/dm/ve.dm.APIResultsProvider.js
M src/dm/ve.dm.APIResultsQueue.js
M tests/dm/ve.dm.APIResultsQueue.test.js
3 files changed, 33 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/VisualEditor/VisualEditor 
refs/changes/88/260688/1

diff --git a/src/dm/ve.dm.APIResultsProvider.js 
b/src/dm/ve.dm.APIResultsProvider.js
index cff9549..b3aba86 100644
--- a/src/dm/ve.dm.APIResultsProvider.js
+++ b/src/dm/ve.dm.APIResultsProvider.js
@@ -120,14 +120,21 @@
        // Asymmetrically compare (params is subset of this.userParams)
        if ( !ve.compare( params, this.userParams, true ) ) {
                this.userParams = $.extend( {}, this.userParams, params );
-               // Reset offset
-               this.setOffset( 0 );
-               // Reset depleted status
-               this.toggleDepleted( false );
+               this.reset();
        }
 };
 
 /**
+ * Reset the provider
+ */
+ve.dm.APIResultsProvider.prototype.reset = function () {
+       // Reset offset
+       this.setOffset( 0 );
+       // Reset depleted status
+       this.toggleDepleted( false );
+};
+
+/**
  * Get fetch limit or 'page' size. This is the number
  * of results per request.
  *
diff --git a/src/dm/ve.dm.APIResultsQueue.js b/src/dm/ve.dm.APIResultsQueue.js
index ef0ac0d..2a94431 100644
--- a/src/dm/ve.dm.APIResultsQueue.js
+++ b/src/dm/ve.dm.APIResultsQueue.js
@@ -124,6 +124,7 @@
 ve.dm.APIResultsQueue.prototype.setParams = function ( params ) {
        var i, len;
        if ( !ve.compare( params, this.params, true ) ) {
+               this.reset();
                this.params = ve.extendObject( this.params, params );
                // Reset queue
                this.queue = [];
@@ -139,6 +140,23 @@
 };
 
 /**
+ * Reset the queue and all its providers
+ */
+ve.dm.APIResultsQueue.prototype.reset = function () {
+       var i, len;
+       // Reset queue
+       this.queue = [];
+       // Reset promises
+       for ( i = 0, len = this.providerPromises.length; i < len; i++ ) {
+               this.providerPromises[ i ].abort();
+       }
+       // Change queries
+       for ( i = 0, len = this.providers.length; i < len; i++ ) {
+               this.providers[ i ].reset();
+       }
+};
+
+/**
  * Get the data parameters sent to the API
  *
  * @return {Object} params API search parameters
diff --git a/tests/dm/ve.dm.APIResultsQueue.test.js 
b/tests/dm/ve.dm.APIResultsQueue.test.js
index c206ca6..33aea5f 100644
--- a/tests/dm/ve.dm.APIResultsQueue.test.js
+++ b/tests/dm/ve.dm.APIResultsQueue.test.js
@@ -51,11 +51,11 @@
 };
 
 EmptyResourceProvider.prototype.getResults = function () {
-       var me = this,
+       var provider = this,
                deferred = $.Deferred(),
                timer = setTimeout(
                        function () {
-                               me.toggleDepleted( true );
+                               provider.toggleDepleted( true );
                                // Always resolve with empty value
                                deferred.resolve( [] );
                        },
@@ -66,12 +66,12 @@
 
 SingleResultResourceProvider.prototype.getResults = function ( howMany ) {
        var timer,
-               me = this,
+               provider = this,
                deferred = $.Deferred();
 
        timer = setTimeout(
                function () {
-                       me.toggleDepleted( howMany > 1 );
+                       provider.toggleDepleted( howMany > 1 );
                        // Always resolve with one value
                        deferred.resolve( [ 'one result (' + ( itemCounter++ + 
1 ) + ')' ] );
                },

-- 
To view, visit https://gerrit.wikimedia.org/r/260688
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I463753574c6677f056566534f82ba6fb1d7ecc7d
Gerrit-PatchSet: 1
Gerrit-Project: VisualEditor/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to