Adrian Lang has uploaded a new change for review.

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

Change subject: Remove global state, the entity store caches results
......................................................................

Remove global state, the entity store caches results

Change-Id: Ia3f375872b7858aaf3fc9a3d18c5f6ea4c54e101
---
M lib/resources/jquery.wikibase/jquery.wikibase.badgeselector.js
1 file changed, 22 insertions(+), 23 deletions(-)


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

diff --git a/lib/resources/jquery.wikibase/jquery.wikibase.badgeselector.js 
b/lib/resources/jquery.wikibase/jquery.wikibase.badgeselector.js
index 1d06b7d..7431b97 100644
--- a/lib/resources/jquery.wikibase/jquery.wikibase.badgeselector.js
+++ b/lib/resources/jquery.wikibase/jquery.wikibase.badgeselector.js
@@ -14,12 +14,6 @@
 var $menu = null;
 
 /**
- * Cache for all badges that may be assigned.
- * @type {Object} Structure: {<{string} item id>: <{wikibase.datamodel.Item}>}
- */
-var badges = {};
-
-/**
  * Selector for toggling badges.
  * @since 0.5
  * @extends jQuery.ui.TemplatedWidget
@@ -200,9 +194,9 @@
                }
 
                this._fetchItems( this.options.value )
-               .done( function() {
+               .done( function( items ) {
                        for( var i = 0; i < self.options.value.length; i++ ) {
-                               self._addBadge( self.options.value[i] );
+                               self._addBadge( items[ self.options.value[i] ] 
);
                        }
                        deferred.resolve();
                } )
@@ -282,7 +276,7 @@
                this._fetchItems( $.map( this.options.badges, function( 
cssClasses, itemId ) {
                        return itemId;
                } ) )
-               .done( function() {
+               .done( function( badges ) {
                        $menu.empty();
 
                        $.each( self.options.badges, function( itemId, 
cssClasses ) {
@@ -339,14 +333,15 @@
 
                this.options.entityStore.getMultiple( itemIds )
                .done( function( items ) {
-                       var item;
+                       var item,
+                               itemsObj = {};
                        for( var i = 0; i < items.length; ++i ) {
                                if( items[i] ) {
                                        item = items[i].getContent();
-                                       badges[item.getId()] = item;
+                                       itemsObj[item.getId()] = item;
                                }
                        }
-                       deferred.resolve();
+                       deferred.resolve( itemsObj );
                } )
                .fail( function() {
                        // TODO: Have entityStore return a proper RepoApiError 
object.
@@ -363,17 +358,21 @@
         * @param {boolean} targetState
         */
        _toggleBadge: function( badgeId, targetState ) {
+               var self = this;
                if( targetState ) {
                        this.element.children( '.wb-badge-' + badgeId 
).remove();
                        if( !this.element.children( '.wb-badge' ).length ) {
                                this._addEmptyBadge();
                        }
-               } else {
-                       this._addBadge( badgeId );
-                       this._getEmptyBadge().remove();
-               }
 
-               this._trigger( 'change' );
+                       this._trigger( 'change' );
+               } else {
+                       this.options.entityStore.get( badgeId ).done( function( 
badgeItem ) {
+                               self._addBadge( badgeItem.getContent() );
+                               self._getEmptyBadge().remove();
+                               self._trigger( 'change' );
+                       } );
+               }
        },
 
        /**
@@ -396,11 +395,11 @@
        },
 
        /**
-        * @param {string} badgeId
+        * @param {wikibase.datamodel.Item} badgeItem
         */
-       _addBadge: function( badgeId ) {
-               var badgeItem = badges[badgeId],
-                       badgeLabelTerm = badgeItem && 
badgeItem.getFingerprint().getLabelFor(
+       _addBadge: function( badgeItem ) {
+               var badgeId = badgeItem.getId(),
+                       badgeLabelTerm = badgeItem.getFingerprint().getLabelFor(
                                this.options.languageCode
                        ),
                        badgeLabel = badgeLabelTerm && badgeLabelTerm.getText(),
@@ -481,9 +480,9 @@
                        // Since the widget might have been initialized on 
pre-existing DOM, badges need to be
                        // fetched to ensure their data is available for 
resetting:
                        this._fetchItems( this.options.value )
-                       .done( function() {
+                       .done( function( items ) {
                                for( var i = 0; i < self.options.value.length; 
i++ ) {
-                                       self._addBadge( self.options.value[i] );
+                                       self._addBadge( items[ 
self.options.value[i] ] );
                                }
                                self._trigger( 'afterstopediting', null, 
[dropValue] );
                        } );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia3f375872b7858aaf3fc9a3d18c5f6ea4c54e101
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Lang <[email protected]>

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

Reply via email to