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