Adrian Lang has uploaded a new change for review.
https://gerrit.wikimedia.org/r/141955
Change subject: Inject wikibase.dataTypes into
wikibase.serialization.EntityUnserializer.propertyExpert
......................................................................
Inject wikibase.dataTypes into
wikibase.serialization.EntityUnserializer.propertyExpert
Change-Id: I50270776fdfc338bf20044a7c9cebd995d86b598
---
M lib/resources/Resources.php
M lib/resources/wikibase.RepoApi/wikibase.AbstractedRepoApi.js
M lib/resources/wikibase.compileEntityStoreFromMwConfig.js
M lib/resources/wikibase.serialization/serialization.EntityUnserializer.js
M
lib/resources/wikibase.serialization/serialization.EntityUnserializer.propertyExpert.js
M repo/resources/Resources.php
M repo/resources/wikibase.ui.initEntity.js
7 files changed, 56 insertions(+), 14 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/55/141955/1
diff --git a/lib/resources/Resources.php b/lib/resources/Resources.php
index 6c317ae..1bb208d 100644
--- a/lib/resources/Resources.php
+++ b/lib/resources/Resources.php
@@ -106,7 +106,7 @@
'util.inherit',
'wikibase.serialization',
'wikibase.datamodel',
- 'wikibase.dataTypes',
+ 'dataTypes.DataTypeStore',
)
),
@@ -160,6 +160,7 @@
'dependencies' => array(
'jquery.json',
'wikibase',
+ 'wikibase.dataTypes',
'wikibase.serialization',
'wikibase.serialization.entities',
'wikibase.store.FetchedContent',
@@ -174,6 +175,7 @@
),
'dependencies' => array(
'wikibase.datamodel',
+ 'wikibase.dataTypes',
'wikibase.serialization.entities',
'wikibase.RepoApi',
)
diff --git a/lib/resources/wikibase.RepoApi/wikibase.AbstractedRepoApi.js
b/lib/resources/wikibase.RepoApi/wikibase.AbstractedRepoApi.js
index 3b26db0..13c4bc1 100644
--- a/lib/resources/wikibase.RepoApi/wikibase.AbstractedRepoApi.js
+++ b/lib/resources/wikibase.RepoApi/wikibase.AbstractedRepoApi.js
@@ -117,7 +117,10 @@
this._repoApi.getEntities( ids, props, languages, sort,
dir ),
function( result ) {
var entities = {},
- unserializer = ( new
wb.serialization.SerializerFactory() ).newUnserializerFor( wb.Entity );
+ unserializer = ( new
wb.serialization.SerializerFactory() ).newUnserializerFor(
+ wb.Entity,
+ wb.dataTypes
+ );
$.each( result.entities, function( id,
entityData ) {
if( entityData.missing === '' ) {
diff --git a/lib/resources/wikibase.compileEntityStoreFromMwConfig.js
b/lib/resources/wikibase.compileEntityStoreFromMwConfig.js
index 50894ed..ce0d749 100644
--- a/lib/resources/wikibase.compileEntityStoreFromMwConfig.js
+++ b/lib/resources/wikibase.compileEntityStoreFromMwConfig.js
@@ -69,7 +69,7 @@
function getUnserialize() {
if( !unserialize ) {
var factory = new wb.serialization.SerializerFactory(),
- entityUnserializer =
factory.newUnserializerFor( wb.Entity );
+ entityUnserializer =
factory.newUnserializerFor( wb.Entity, wb.dataTypes );
// Unserializer for fetched content whose content is a
wb.Entity:
var fetchedEntityUnserializer =
factory.newUnserializerFor(
diff --git
a/lib/resources/wikibase.serialization/serialization.EntityUnserializer.js
b/lib/resources/wikibase.serialization/serialization.EntityUnserializer.js
index 50231af..ef904c5 100644
--- a/lib/resources/wikibase.serialization/serialization.EntityUnserializer.js
+++ b/lib/resources/wikibase.serialization/serialization.EntityUnserializer.js
@@ -9,10 +9,10 @@
PARENT = MODULE.Unserializer;
/**
- * Unserializers for specific entity types.
- * @type wb.serialization.Unserializer
+ * Constructors for Unserializers for specific entity types.
+ * @type function Constructors for wb.serialization.Unserializer
*/
- var typeSpecificUnserializers = {};
+ var TypeSpecificUnserializers = {};
/**
* Helper for unserializing multilingual value.
@@ -64,8 +64,34 @@
* @constructor
* @extends wb.Unserializer
* @since 0.4
+ *
+ * @param {dataTypes.DataTypeStore} dataTypeStore
*/
- var SELF = MODULE.EntityUnserializer = util.inherit(
'WbEntityUnserializer', PARENT, {
+ var constructor = function( dataTypeStore ) {
+ this._typeSpecificUnserializers = {};
+ this._dataTypeStore = dataTypeStore;
+ };
+
+ var SELF = MODULE.EntityUnserializer = util.inherit(
'WbEntityUnserializer', PARENT, constructor, {
+ /**
+ * @type {dataTypes.DataTypeStore}
+ */
+ _dataTypeStore: null,
+
+ /**
+ * @type {object}
+ */
+ _typeSpecificUnserializers: null,
+
+ _getTypeSpecificUnserializer: function( entityType ) {
+ if( !this._typeSpecificUnserializers[ entityType ] &&
+ TypeSpecificUnserializers[ entityType ]
) {
+ this._typeSpecificUnserializers[ entityType ] =
+ new TypeSpecificUnserializers[
entityType ]( this._dataTypeStore );
+ }
+ return this._typeSpecificUnserializers[ entityType ];
+ },
+
/**
* @see wb.serialization.Unserializer.unserialize
*
@@ -73,7 +99,7 @@
*/
unserialize: function( serialization ) {
var entityType = serialization.type,
- typeSpecificUnserializer =
typeSpecificUnserializers[ entityType ];
+ typeSpecificUnserializer =
this._getTypeSpecificUnserializer( entityType );
if( !entityType || typeof entityType !== 'string' ) {
throw new Error( 'Can not determine type of
Entity from serialized object' );
@@ -123,9 +149,7 @@
* wb.serialization.Unserializer.
*/
SELF.registerTypeSpecificExpert = function( entityType,
TypeSpecificUnserializer ) {
- // for performance, we just create one instance of that
unserializer and change its
- // options whenever we will use it
- typeSpecificUnserializers[ entityType ] = new
TypeSpecificUnserializer();
+ TypeSpecificUnserializers[ entityType ] =
TypeSpecificUnserializer;
};
}( wikibase, util, jQuery ) );
diff --git
a/lib/resources/wikibase.serialization/serialization.EntityUnserializer.propertyExpert.js
b/lib/resources/wikibase.serialization/serialization.EntityUnserializer.propertyExpert.js
index 995a854..716136e 100644
---
a/lib/resources/wikibase.serialization/serialization.EntityUnserializer.propertyExpert.js
+++
b/lib/resources/wikibase.serialization/serialization.EntityUnserializer.propertyExpert.js
@@ -14,10 +14,22 @@
* @constructor
* @extends wb.Unserializer
* @since 0.4
+ *
+ * @param {dataTypes.DataTypeStore} dataTypeStore
*/
+ var constructor = function( dataTypeStore ) {
+ this._dataTypeStore = dataTypeStore;
+ };
+
var PropertyUnserializationExpert =
- util.inherit( 'WbEntityUnserializerPropertyExpert', PARENT,
+ util.inherit( 'WbEntityUnserializerPropertyExpert', PARENT,
constructor,
{
+
+ /**
+ * @type {dataTypes.DataTypeStore}
+ */
+ _dataTypeStore: null,
+
/**
* @see wb.serialization.Unserializer.unserialize
*
@@ -30,7 +42,7 @@
}
return {
- datatype: dataTypeStore.getDataType(
serialization.datatype )
+ datatype: this._dataTypeStore.getDataType(
dataTypeId )
};
}
} );
diff --git a/repo/resources/Resources.php b/repo/resources/Resources.php
index c580dd2..35b65d12f 100644
--- a/repo/resources/Resources.php
+++ b/repo/resources/Resources.php
@@ -57,6 +57,7 @@
'jquery.json',
'wikibase',
'wikibase.datamodel',
+ 'wikibase.dataTypes',
'wikibase.serialization',
'wikibase.serialization.entities',
),
diff --git a/repo/resources/wikibase.ui.initEntity.js
b/repo/resources/wikibase.ui.initEntity.js
index da41a34..e456926 100644
--- a/repo/resources/wikibase.ui.initEntity.js
+++ b/repo/resources/wikibase.ui.initEntity.js
@@ -17,7 +17,7 @@
var entityJSON = $.evalJSON( mw.config.get( 'wbEntity' ) ),
unserializerFactory = new
wb.serialization.SerializerFactory(),
- entityUnserializer =
unserializerFactory.newUnserializerFor( wb.Entity );
+ entityUnserializer =
unserializerFactory.newUnserializerFor( wb.Entity, wb.dataTypes );
wb.entity = entityUnserializer.unserialize( entityJSON );
entityJSON = null;
--
To view, visit https://gerrit.wikimedia.org/r/141955
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I50270776fdfc338bf20044a7c9cebd995d86b598
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