Aleksey Bekh-Ivanov (WMDE) has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/361449 )
Change subject: Refactor EntityInitializer to migrate to
"wikibase.entityPage.entityLoaded" hook
......................................................................
Refactor EntityInitializer to migrate to "wikibase.entityPage.entityLoaded" hook
Change-Id: I0d956fe38a3e5a0aa1629fd46e6a2266ef0a5c78
---
M repo/resources/wikibase.EntityInitializer.js
1 file changed, 71 insertions(+), 75 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/49/361449/1
diff --git a/repo/resources/wikibase.EntityInitializer.js
b/repo/resources/wikibase.EntityInitializer.js
index 480be53..51c3ed0 100644
--- a/repo/resources/wikibase.EntityInitializer.js
+++ b/repo/resources/wikibase.EntityInitializer.js
@@ -13,28 +13,35 @@
*
* @constructor
*
- * @param {string} configVarName
+ * @param {string} arg
*
* @throws {Error} if required parameter is not specified properly.
*/
- var EntityInitializer = wb.EntityInitializer = function ( configVarName
) {
- if ( typeof configVarName !== 'string' ) {
- throw new Error( 'Config variable name needs to be
specified' );
+ var EntityInitializer = wb.EntityInitializer = function ( arg ) {
+ var entityPromise;
+ if ( typeof arg === 'string' ) {
+ entityPromise = getFromConfig( arg );
+ } else if ( isThenable( arg ) ) {
+ throw new Error( "Not implemented" );
+ } else {
+ throw new Error(
+ 'Config variable name needs to be specified'
+ );
}
- this._configVarName = configVarName;
+
+ this._deserializedEntityPromise = entityPromise.then( function
( entity ) {
+ return getDeserializer().then( function (
entityDeserializer ) {
+ return entityDeserializer.deserialize( entity );
+ } );
+ } );
};
$.extend( EntityInitializer.prototype, {
- /**
- * Name of the mw.config variable featuring the serialized
entity.
- * @type {string}
- */
- _configVarName: null,
/**
- * @type {wikibase.datamodel.Entity|null}
+ * @type {jQuery.Promise} Promise for wikibase.datamodel.Entity
*/
- _value: null,
+ _deserializedEntityPromise: null,
/**
* Retrieves an entity from mw.config.
@@ -45,79 +52,68 @@
* No rejected parameters.
*/
getEntity: function () {
- var self = this,
- deferred = $.Deferred();
+ return this._deserializedEntityPromise;
+ }
+ } );
- if ( this._value ) {
- return deferred.resolve( this._value
).promise();
- }
+ function isThenable( arg ) {
+ return typeof arg === 'object' && typeof arg.then ===
'function';
+ }
- this._getFromConfig()
- .done( function ( value ) {
- self._value = value;
- deferred.resolve( self._value );
- } )
- .fail( $.proxy( deferred.reject, deferred ) );
-
- return deferred.promise();
- },
-
- /**
- * @return {Object} jQuery promise
- * Resolved parameters:
- * - {wikibase.datamodel.Entity}
- * No rejected parameters.
- */
- _getFromConfig: function () {
- var self = this,
- deferred = $.Deferred();
-
+ /**
+ * Get entity from config
+ * @param configVarName
+ * @return {jQuery.Promise}
+ * Resolved parameters:
+ * - {object} Entity object
+ * No rejected parameters.
+ */
+ function getFromConfig( configVarName ) {
+ return $.Deferred( function ( deferred ) {
mw.hook( 'wikipage.content' ).add( function () {
- var serializedEntity = mw.config.get(
self._configVarName );
+ var serializedEntity = mw.config.get(
configVarName );
if ( serializedEntity === null ) {
deferred.reject();
return;
}
- self._getDeserializer().done( function (
entityDeserializer ) {
- var entity =
entityDeserializer.deserialize( JSON.parse( serializedEntity ) );
- deferred.resolve( entity );
- } );
+ deferred.resolve( JSON.parse( serializedEntity
) );
+ } );
+ } ).promise();
+ }
+
+ /**
+ * @return {Object} jQuery promise
+ * Resolved parameters:
+ * - {wikibase.serialization.EntityDeserializer}
+ * No rejected parameters.
+ */
+ function getDeserializer() {
+ var entityDeserializer = new
wb.serialization.EntityDeserializer(),
+ deferred = $.Deferred();
+
+ var entityTypes = mw.config.get( 'wbEntityTypes' );
+ var modules = [];
+ var typeNames = [];
+ entityTypes.types.forEach( function ( type ) {
+ var deserializerFactoryFunction = entityTypes[
'deserializer-factory-functions' ][ type ];
+ if ( deserializerFactoryFunction ) {
+ modules.push( deserializerFactoryFunction );
+ typeNames.push( type );
+ }
+ } );
+ mw.loader.using( modules, function () {
+ modules.forEach( function ( module, index ) {
+ entityDeserializer.registerStrategy(
+ mw.loader.require( module )(),
+ typeNames[ index ]
+ );
} );
- return deferred.promise();
- },
-
- /**
- * @return {Object} jQuery promise
- * Resolved parameters:
- * - {wikibase.serialization.EntityDeserializer}
- * No rejected parameters.
- */
- _getDeserializer: function () {
- var entityDeserializer = new
wb.serialization.EntityDeserializer(),
- deferred = $.Deferred();
-
- var entityTypes = mw.config.get( 'wbEntityTypes' );
- var modules = [];
- var typeNames = [];
- entityTypes.types.forEach( function ( type ) {
- var deserializerFactoryFunction = entityTypes[
'deserializer-factory-functions' ][ type ];
- if ( deserializerFactoryFunction ) {
- modules.push(
deserializerFactoryFunction );
- typeNames.push( type );
- }
- } );
- mw.loader.using( modules, function () {
- modules.forEach( function ( module, index ) {
- entityDeserializer.registerStrategy(
mw.loader.require( module )(), typeNames[ index ] );
- } );
-
- deferred.resolve( entityDeserializer );
- } );
- return deferred.promise();
- }
- } );
+ deferred.resolve( entityDeserializer );
+ } );
+ return deferred.promise();
+ }
}( jQuery, mediaWiki, wikibase ) );
--
To view, visit https://gerrit.wikimedia.org/r/361449
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0d956fe38a3e5a0aa1629fd46e6a2266ef0a5c78
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aleksey Bekh-Ivanov (WMDE) <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits