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

Reply via email to