Adrian Lang has uploaded a new change for review.

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

Change subject: Move JavaScript serialization to own component
......................................................................

Move JavaScript serialization to own component

Change-Id: Ideea6750a56b9a8d16de9d8b93999525d0c1c69a
---
M composer.json
M lib/resources/Resources.php
D lib/resources/wikibase.serialization/serialization.EntityUnserializer.js
D 
lib/resources/wikibase.serialization/serialization.EntityUnserializer.propertyExpert.js
D lib/resources/wikibase.serialization/serialization.Serializer.js
D lib/resources/wikibase.serialization/serialization.SerializerFactory.js
D lib/resources/wikibase.serialization/serialization.Unserializer.js
D lib/resources/wikibase.serialization/serialization.js
8 files changed, 1 insertion(+), 486 deletions(-)


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

diff --git a/composer.json b/composer.json
index 3df78c5..cc6d18f 100644
--- a/composer.json
+++ b/composer.json
@@ -38,6 +38,7 @@
                "wikibase/data-model": "~0.8.1",
                "wikibase/data-model-javascript": "~0.2.0",
                "wikibase/internal-serialization": "~1.1",
+               "wikibase/serialization-javascript": "~1.0.0",
 
                "diff/diff": "~1.0",
                "wikibase/easyrdf_lite": "~0.8.1"
diff --git a/lib/resources/Resources.php b/lib/resources/Resources.php
index 80f0f68..c1834fe 100644
--- a/lib/resources/Resources.php
+++ b/lib/resources/Resources.php
@@ -84,31 +84,6 @@
                        'datatypesconfigvarname' => 'wbDataTypes',
                ),
 
-               'wikibase.serialization' => $moduleTemplate + array(
-                       'scripts' => array(
-                               'wikibase.serialization/serialization.js',
-                               
'wikibase.serialization/serialization.Serializer.js',
-                               
'wikibase.serialization/serialization.Unserializer.js',
-                               
'wikibase.serialization/serialization.SerializerFactory.js',
-                       ),
-                       'dependencies' => array(
-                               'util.inherit',
-                               'wikibase',
-                       )
-               ),
-
-               'wikibase.serialization.entities' => $moduleTemplate + array(
-                       'scripts' => array(
-                               
'wikibase.serialization/serialization.EntityUnserializer.js',
-                               
'wikibase.serialization/serialization.EntityUnserializer.propertyExpert.js',
-                       ),
-                       'dependencies' => array(
-                               'util.inherit',
-                               'wikibase.serialization',
-                               'wikibase.datamodel',
-                       )
-               ),
-
                'wikibase.store' => $moduleTemplate + array(
                        'scripts' => array(
                                'wikibase.store/store.js'
diff --git 
a/lib/resources/wikibase.serialization/serialization.EntityUnserializer.js 
b/lib/resources/wikibase.serialization/serialization.EntityUnserializer.js
deleted file mode 100644
index 50231af..0000000
--- a/lib/resources/wikibase.serialization/serialization.EntityUnserializer.js
+++ /dev/null
@@ -1,131 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author Daniel Werner < daniel.wer...@wikimedia.de >
- */
-( function( wb, util, $ ) {
-       'use strict';
-
-       var MODULE = wb.serialization,
-               PARENT = MODULE.Unserializer;
-
-       /**
-        * Unserializers for specific entity types.
-        * @type wb.serialization.Unserializer
-        */
-       var typeSpecificUnserializers = {};
-
-       /**
-        * Helper for unserializing multilingual value.
-        *
-        * @param {Object} serialization
-        * @return {Object} Map with language codes as fields
-        */
-       function unserializeMultilingualValue( serialization ) {
-               if( !serialization ) {
-                       return {};
-               }
-               var unserialized = {};
-
-               for( var lang in serialization ) {
-                       unserialized[ lang ] = serialization[ lang ].value;
-               }
-               return unserialized;
-       }
-
-       /**
-        * Helper for unserializing an Entity's claims.
-        *
-        * TODO: we should probably have a ClaimList which then has its own 
unserializer.
-        *
-        * @param {Object} serialization
-        * @return wb.Claim[]
-        */
-       function unserializeClaims( serialization ) {
-               var claims = [];
-
-               // get claims:
-               for( var propId in serialization || {} ) {
-                       var claimsPerProp = serialization[ propId ];
-
-                       for( var i in claimsPerProp ) {
-                               var serializedClaim = claimsPerProp[ i ],
-                                       // TODO: use ClaimUnserializer here 
after it got implemented
-                                       claim = wb.Claim.newFromJSON( 
serializedClaim );
-
-                               claims.push( claim );
-                       }
-               }
-               return claims;
-       }
-
-       /**
-        * Unserializer for Property entities.
-        *
-        * @constructor
-        * @extends wb.Unserializer
-        * @since 0.4
-        */
-       var SELF = MODULE.EntityUnserializer = util.inherit( 
'WbEntityUnserializer', PARENT, {
-               /**
-                * @see wb.serialization.Unserializer.unserialize
-                *
-                * @return wb.Entity
-                */
-               unserialize: function( serialization ) {
-                       var entityType = serialization.type,
-                               typeSpecificUnserializer = 
typeSpecificUnserializers[ entityType ];
-
-                       if( !entityType || typeof entityType !== 'string' ) {
-                               throw new Error( 'Can not determine type of 
Entity from serialized object' );
-                       }
-
-                       // create map with data which is the same for all types 
of entities:
-                       var entityMapData = {
-                               type: entityType,
-                               id: serialization.id,
-                               title: serialization.title,
-                               label: unserializeMultilingualValue( 
serialization.labels ),
-                               description: unserializeMultilingualValue( 
serialization.descriptions ),
-                               aliases: unserializeMultilingualValue( 
serialization.aliases ),
-                               claims: unserializeClaims( serialization.claims 
)
-                       };
-
-                       // extend map with data which is specific to the entity 
type if there is handling for
-                       // the entity type we are dealing with:
-                       if( typeSpecificUnserializer ) {
-                               typeSpecificUnserializer.setOptions( 
this._options );
-                               var typeSpecificData = 
typeSpecificUnserializer.unserialize( serialization );
-
-                               // merge type specific data with ordinary data
-                               $.extend( entityMapData, typeSpecificData );
-                       }
-
-                       return wb.Entity.newFromMap(
-                               entityMapData
-                       );
-               }
-       } );
-
-       // register in SerializationFactory for wb.Entity unserialization 
handling:
-       MODULE.SerializerFactory.registerUnserializer( SELF, wb.Entity );
-
-       /**
-        * Allows to register advanced unserialization logic for a certain type 
of Entity. Takes the
-        * type the additional handling is required for and a Unserializer 
object which has the job to
-        * return the type specific map data as Object. The Object keys should 
contain the data which
-        * is different for the handled type of entity compared to other entity 
types. The keys should
-        * be what wb.Entity.newFromMap requires to create a new Entity of the 
specific type.
-        *
-        * @since 0.4
-        *
-        * @param {string} entityType
-        * @param {Function} TypeSpecificUnserializer Constructor which 
inherits from
-        *        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();
-       };
-
-}( wikibase, util, jQuery ) );
diff --git 
a/lib/resources/wikibase.serialization/serialization.EntityUnserializer.propertyExpert.js
 
b/lib/resources/wikibase.serialization/serialization.EntityUnserializer.propertyExpert.js
deleted file mode 100644
index 387ce23..0000000
--- 
a/lib/resources/wikibase.serialization/serialization.EntityUnserializer.propertyExpert.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author Daniel Werner < daniel.wer...@wikimedia.de >
- */
-( function( wb, util ) {
-       'use strict';
-
-       var MODULE = wb.serialization,
-               PARENT = MODULE.Unserializer;
-
-       /**
-        * Unserializer for parts of a Property Entity that are specific to 
Properties.
-        *
-        * @constructor
-        * @extends wb.Unserializer
-        * @since 0.4
-        */
-       var PropertyUnserializationExpert =
-               util.inherit( 'WbEntityUnserializerPropertyExpert', PARENT,
-       {
-               /**
-                * @see wb.serialization.Unserializer.unserialize
-                *
-                * @return Object
-                */
-               unserialize: function( serialization ) {
-                       var dataTypeId = serialization.datatype;
-                       if( !dataTypeId ) {
-                               throw new Error( 'Property Entity unserializer 
expects a "datatype" field' );
-                       }
-
-                       return {
-                               datatype: dataTypeId
-                       };
-               }
-       } );
-
-       // register to EntityUnserializer:
-       MODULE.EntityUnserializer.registerTypeSpecificExpert(
-               wb.Property.TYPE,
-               PropertyUnserializationExpert
-       );
-
-}( wikibase, util ) );
diff --git a/lib/resources/wikibase.serialization/serialization.Serializer.js 
b/lib/resources/wikibase.serialization/serialization.Serializer.js
deleted file mode 100644
index e6a40c1..0000000
--- a/lib/resources/wikibase.serialization/serialization.Serializer.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author Daniel Werner < daniel.wer...@wikimedia.de >
- */
-( function( wb, util, $ ) {
-       'use strict';
-
-       var MODULE = wb.serialization;
-
-       /**
-        * Base for serializers.
-        *
-        * @param {Object} options
-        *
-        * @constructor
-        * @abstract
-        * @since 0.4
-        */
-       var SELF = MODULE.Serializer = function WbSerializer( options ) {
-               if( options ) {
-                       this.setOptions( options );
-               } else {
-                       this._options = {};
-               }
-       };
-
-       $.extend( SELF.prototype, {
-               /**
-                * @type Object
-                */
-               _options: null,
-
-               /**
-                * Returns the serialized form of some object.
-                *
-                * @since 0.4
-                *
-                * @param {Object} object
-                */
-               serialize: util.abstractFunction,
-
-               /**
-                * Sets the serializer's options without just keeping a 
reference to the given object.
-                *
-                * @since 0.4
-                *
-                * @param options
-                */
-               setOptions: function( options ) {
-                       this._options = $.extend( {}, options );
-               },
-
-               /**
-                * Returns the serializer's options. Changing the returned 
object will have no affect on the
-                * serializer's actual options until they are set via 
setOptions.
-                *
-                * @since 0.4
-                *
-                * @return Object
-                */
-               getOptions: function() {
-                       return $.extend( {}, this._options );
-               }
-       } );
-
-}( wikibase, util, jQuery ) );
diff --git 
a/lib/resources/wikibase.serialization/serialization.SerializerFactory.js 
b/lib/resources/wikibase.serialization/serialization.SerializerFactory.js
deleted file mode 100644
index c702cdd..0000000
--- a/lib/resources/wikibase.serialization/serialization.SerializerFactory.js
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author Daniel Werner < daniel.wer...@wikimedia.de >
- */
-( function( wb, $ ) {
-       'use strict';
-
-       var MODULE = wb.serialization;
-
-       /**
-        * Factory for creating serializers and unserializers suitable for 
certain objects, e.g. of the
-        * Wikibase data model.
-        *
-        * @constructor
-        * @since 0.4
-        */
-       var SELF = MODULE.SerializerFactory = function SerializerFactory() {};
-
-       /**
-        * Array of arrays where the inner arrays holds two constructors. The 
first one the constructor
-        * a serializer's output should be the instance of and the second one 
the actual serializer.
-        * @type Array[]
-        */
-       var serializers = [];
-
-       /**
-        * Array of arrays where the inner arrays holds two constructors. The 
first one the constructor
-        * a unserializer's output should be the instance of and the second one 
the actual unserializer.
-        * @type Array[]
-        */
-       var unserializers = [];
-
-       /**
-        * Helper for building a new function for registering a factory member.
-        *
-        * @param {Array} store The factory's store.
-        * @param {Function} type Constructor newly registered factory members 
have to be instances of.
-        * @return Function
-        */
-       function buildRegisterFn( store, type ) {
-               return function( FactoryMember, constructor ) {
-                       if( !$.isFunction( constructor ) ) {
-                               throw new Error( 'No constructor (function) 
given' );
-                       }
-                       if( !( ( new FactoryMember() ) instanceof type ) ) {
-                               throw new Error( 'Given serializer is not an 
implementation of wb.serialization.Serializer' );
-                       }
-
-                       store.push( [
-                               constructor,
-                               FactoryMember
-                       ] );
-               };
-       }
-
-       /**
-        * Helper for building a new function for finding the right factory 
member and creating a new
-        * instance of it.
-        *
-        * @param {Array} store The factory's store.
-        * @param {string} storeSubject The subject of the store, used in error 
message descriptions.
-        * @return Function
-        */
-       function buildLookupFn( store, storeSubject ) {
-               return function( constructor, options ) {
-                       if( !$.isFunction( constructor ) ) {
-                               throw new Error( 'No proper constructor has 
been provided for choosing a ' + storeSubject );
-                       }
-
-                       // find constructor matching the given one and create 
new instance of factory member
-                       // responsible for handling instances of that given 
constructor:
-                       for( var i in store ) {
-                               if( store[i][0] === constructor ) {
-                                       return new store[i][1]( options );
-                               }
-                       }
-                       throw new Error( 'No suitable ' + storeSubject + ' has 
been registered' );
-               };
-       }
-
-       $.extend( SELF.prototype, {
-               /**
-                * Returns a new serializer object suitable for a given object 
or for a given constructor's
-                * instances.
-                *
-                * @since 0.4
-                *
-                * @param {Object|Function} object
-                * @param {Object} options
-                * @return wb.serialization.Serializer
-                */
-               newSerializerFor: ( function() {
-                       // default lookup function as used by 
'newUnserializerFor'
-                       var lookupFn = buildLookupFn( unserializers, 
'Unserializer' );
-
-                       // build a function which will do the normal lookup but 
also allow for giving objects
-                       // as first parameter. In that case we have to get the 
object's constructor.
-                       return function( object, options ) {
-                               if( !object ) {
-                                       throw new Error( 'Constructor or object 
expected' );
-                               }
-                               var constructorOfSerialized = $.isFunction( 
object ) ? object : object.constructor;
-                               return lookupFn( constructorOfSerialized, 
options );
-                       };
-               }() ),
-
-               /**
-                * Returns a new unserializer object suitable for unserializing 
some data into an instance
-                * of the given constructor.
-                *
-                * @since 0.4
-                *
-                * @param {Function} constructor
-                * @param {Object} options
-                * @return wb.serialization.Unserializer
-                */
-               newUnserializerFor: buildLookupFn( unserializers, 
'Unserializer' )
-       } );
-
-       /**
-        * Registers a serializer for objects of a certain given constructor.
-        *
-        * @since 0.4
-        *
-        * @param {wb.serialization.Serializer} serializer
-        * @param {Function} constructor
-        */
-       SELF.registerSerializer = buildRegisterFn( serializers, 
MODULE.Serializer );
-
-       /**
-        * Registers a unserializer for objects of a certain given constructor.
-        *
-        * @since 0.4
-        *
-        * @param {wb.serialization.Unserializer} unserializer
-        * @param {Function} constructor
-        */
-       SELF.registerUnserializer = buildRegisterFn( unserializers, 
MODULE.Unserializer );
-
-}( wikibase, jQuery ) );
diff --git a/lib/resources/wikibase.serialization/serialization.Unserializer.js 
b/lib/resources/wikibase.serialization/serialization.Unserializer.js
deleted file mode 100644
index abddc83..0000000
--- a/lib/resources/wikibase.serialization/serialization.Unserializer.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author Daniel Werner < daniel.wer...@wikimedia.de >
- */
-( function( wb, util, $ ) {
-       'use strict';
-
-       var MODULE = wb.serialization;
-
-       /**
-        * Base for unserializers.
-        *
-        * @param {Object} [options]
-        *
-        * @constructor
-        * @abstract
-        * @since 0.4
-        */
-       var SELF = MODULE.Unserializer = function WbUnserializer( options ) {
-               if( options ) {
-                       this.setOptions( options );
-               } else {
-                       this._options = {};
-               }
-       };
-
-       $.extend( SELF.prototype, {
-               /**
-                * @type Object
-                */
-               _options: null,
-
-               /**
-                * Constructs the original object from the provided 
serialization.
-                *
-                * @since 0.4
-                *
-                * @param {Object} serialization
-                */
-               unserialize: util.abstractFunction,
-
-               /**
-                * Sets the unserializer's options without just keeping a 
reference to the given object.
-                *
-                * @since 0.4
-                *
-                * @param options
-                */
-               setOptions: function( options ) {
-                       this._options = $.extend( {}, options );
-               },
-
-               /**
-                * Returns the unserializer's options. Changing the returned 
object will have no affect on the
-                * unserializer's actual options until they are set via 
setOptions.
-                *
-                * @since 0.4
-                *
-                * @return Object
-                */
-               getOptions: function() {
-                       return $.extend( {}, this._options );
-               }
-       } );
-
-}( wikibase, util, jQuery ) );
diff --git a/lib/resources/wikibase.serialization/serialization.js 
b/lib/resources/wikibase.serialization/serialization.js
deleted file mode 100644
index 455e2c6..0000000
--- a/lib/resources/wikibase.serialization/serialization.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * @licence GNU GPL v2+
- * @author Daniel Werner < daniel.wer...@wikimedia.de >
- */
-( function( wb ) {
-       'use strict';
-
-       /**
-        * Module space holding serialization/unserialization related 
constructors.
-        * @type Object
-        */
-       wb.serialization = {};
-
-}( wikibase ) );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ideea6750a56b9a8d16de9d8b93999525d0c1c69a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Lang <adrian.l...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to