Thiemo Mättig (WMDE) has uploaded a new change for review.

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

Change subject: Refactor entity search caching
......................................................................

Refactor entity search caching

The cache is not meant to cache results for different search terms,
but to cache previous pages when you click the "more" button.

Change-Id: I68d30da040894c553012286468d74c4a27ad7138
---
M view/resources/jquery/wikibase/jquery.wikibase.entityselector.js
1 file changed, 22 insertions(+), 25 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/65/297365/1

diff --git a/view/resources/jquery/wikibase/jquery.wikibase.entityselector.js 
b/view/resources/jquery/wikibase/jquery.wikibase.entityselector.js
index 509efa5..f7ba671 100644
--- a/view/resources/jquery/wikibase/jquery.wikibase.entityselector.js
+++ b/view/resources/jquery/wikibase/jquery.wikibase.entityselector.js
@@ -172,7 +172,6 @@
        _search: function( event ) {
                var self = this;
 
-               this._cache = {};
                this._select( null );
 
                clearTimeout( this._searching );
@@ -214,17 +213,25 @@
         * @param {string} term
         * @return {Object}
         */
-       _getData: function( term ) {
-               return {
+       _getSearchApiParameters: function( term ) {
+               var data = {
                        action: 'wbsearchentities',
                        search: term,
                        format: 'json',
                        language: this.options.language,
                        uselang: this.options.language,
-                       type: this.options.type,
-                       'continue': this._cache[term] && 
this._cache[term].nextSuggestionOffset
-                       ? this._cache[term].nextSuggestionOffset : 0
+                       type: this.options.type
                };
+
+               if ( this._cache.term === term && 
this._cache.nextSuggestionOffset ) {
+                       data.continue = this._cache.nextSuggestionOffset;
+               }
+
+               if ( this.options.limit ) {
+                       data.limit = this.options.limit;
+               }
+
+               return data;
        },
 
        /**
@@ -239,20 +246,13 @@
                var self = this;
 
                return function( term ) {
-                       var deferred = $.Deferred(),
-                               data = self._getData( term );
-
-                       if ( self.options.limit ) {
-                               $.extend( data, {
-                                       limit: self.options.limit
-                               } );
-                       }
+                       var deferred = $.Deferred();
 
                        $.ajax( {
                                url: self.options.url,
                                timeout: self.options.timeout,
                                dataType: 'json',
-                               data: data
+                               data: self._getSearchApiParameters( term )
                        } )
                        .done( function( response ) {
                                deferred.resolve(
@@ -358,10 +358,7 @@
                customItems.unshift( new $.ui.ooMenu.CustomItem(
                        this.options.messages.more,
                        function() {
-                               var cached = self._cache[self._term];
-                               return cached
-                                       && cached.nextSuggestionOffset
-                                       && cached.nextSuggestionOffset > 
cached.suggestions.length - 1;
+                               return self._cache.term === self._term && 
self._cache.nextSuggestionOffset;
                        },
                        function() {
                                self.search( $.Event( 'programmatic' ) );
@@ -393,18 +390,18 @@
                .then( function( suggestions, searchTerm, nextSuggestionOffset 
) {
                        var deferred = $.Deferred();
 
-                       if ( self._cache[searchTerm] && 
self._cache[searchTerm].nextSuggestionOffset ) {
-                               self._cache[searchTerm].suggestions = 
self._cache[searchTerm].suggestions.concat( suggestions );
-                               self._cache[searchTerm].nextSuggestionOffset = 
nextSuggestionOffset;
+                       if ( self._cache.term === searchTerm && 
self._cache.nextSuggestionOffset ) {
+                               self._cache.suggestions = 
self._cache.suggestions.concat( suggestions );
+                               self._cache.nextSuggestionOffset = 
nextSuggestionOffset;
                        } else {
-                               self._cache = {};
-                               self._cache[searchTerm] = {
+                               self._cache = {
+                                       term: searchTerm,
                                        suggestions: suggestions,
                                        nextSuggestionOffset: 
nextSuggestionOffset
                                };
                        }
 
-                       deferred.resolve( self._cache[searchTerm].suggestions, 
searchTerm );
+                       deferred.resolve( self._cache.suggestions, searchTerm );
                        return deferred.promise();
                } );
        },

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I68d30da040894c553012286468d74c4a27ad7138
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Thiemo Mättig (WMDE) <[email protected]>

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

Reply via email to