Krinkle has uploaded a new change for review.

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

Change subject: mediawiki.messagePoster: Minor code and docs clean up
......................................................................

mediawiki.messagePoster: Minor code and docs clean up

* Improve and simpify various descriptions.

* Consistently use the imperative mood for the first line of
  method descriptions.

* create(): Refactor to be more stable and resilient.
  - Move variable declarations to inside the Deferred handler to avoid
    fragile code where data is transferred between different promise callbacks.
  - Remove check for 'result.query.pageids'. If it doesn't exist then neither
    does 'result.query' and it would throw either way.
  - Simplify check by asserting [0] directly instead of computing the length.
    Matches the actual code below.
  - Rename local variable 'errorCode' to match documentation of second param
    being 'error'. 'errorCode' is the first parameter passed to reject().
  - Outdent body and change to pattern of error-first returning.
  - Rename unexposed classname to be plain without MW prefix.

Change-Id: If642e94942abcbf7e5aa373fbd83a30d9202f24a
---
M resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js
1 file changed, 46 insertions(+), 51 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/04/260704/1

diff --git 
a/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js 
b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js
index 69655a6..68fb2aa 100644
--- a/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js
+++ b/resources/src/mediawiki.messagePoster/mediawiki.messagePoster.factory.js
@@ -1,52 +1,54 @@
-/*global OO*/
+/*global OO */
 ( function ( mw, $ ) {
        /**
-        * This is a factory for MessagePoster objects, which allows a 
pluggable to way to script leaving a
-        * talk page message.
+        * Factory for MessagePoster objects. This provides a pluggable to way 
to script the action
+        * of adding a message to someone's talk page.
         *
         * @class mw.messagePoster.factory
         * @singleton
         */
-       function MwMessagePosterFactory() {
+       function MessagePosterFactory() {
                this.contentModelToClass = {};
        }
 
-       OO.initClass( MwMessagePosterFactory );
+       OO.initClass( MessagePosterFactory );
 
        // Note: This registration scheme is currently not compatible with LQT, 
since that doesn't
-       // have its own content model, just islqttalkpage.  LQT pages will be 
passed to the wikitext
+       // have its own content model, just islqttalkpage. LQT pages will be 
passed to the wikitext
        // MessagePoster.
        /**
-        * Registers a MessagePoster subclass for a given content model.
+        * Register a MessagePoster subclass for a given content model.
         *
         * @param {string} contentModel Content model of pages this 
MessagePoster can post to
-        * @param {Function} messagePosterConstructor Constructor for 
MessagePoster
+        * @param {Function} constructor Constructor of a MessagePoster subclass
         */
-       MwMessagePosterFactory.prototype.register = function ( contentModel, 
messagePosterConstructor ) {
+       MessagePosterFactory.prototype.register = function ( contentModel, 
constructor ) {
                if ( this.contentModelToClass[ contentModel ] !== undefined ) {
-                       throw new Error( 'The content model \'' + contentModel 
+ '\' is already registered.' );
+                       throw new Error( 'Content model "' + contentModel + '" 
is already registered' );
                }
 
-               this.contentModelToClass[ contentModel ] = 
messagePosterConstructor;
+               this.contentModelToClass[ contentModel ] = constructor;
        };
 
        /**
-        * Unregisters a given content model
-        * This is exposed for testing and should not normally be needed.
+        * Unregister a given content model.
+        * This is exposed for testing and should not normally be used.
         *
         * @param {string} contentModel Content model to unregister
         */
-       MwMessagePosterFactory.prototype.unregister = function ( contentModel ) 
{
+       MessagePosterFactory.prototype.unregister = function ( contentModel ) {
                delete this.contentModelToClass[ contentModel ];
        };
 
        /**
-        * Creates a MessagePoster, given a title.  A promise for this is 
returned.
-        * This works by determining the content model, then loading the 
corresponding
-        * module (which will register the MessagePoster class), and finally 
constructing it.
+        * Create a MessagePoster for given a title.
         *
-        * This does not require the message and should be called as soon as 
possible, so it does the
-        * API and ResourceLoader requests in the background.
+        * A promise for this is returned. It works by determining the content 
model, then loading
+        * the corresponding module (which registers the MessagePoster class), 
and finally constructing
+        * an object for the given title.
+        *
+        * This does not require the message and should be called as soon as 
possible, so that the
+        * API and ResourceLoader requests run in the background.
         *
         * @param {mw.Title} title Title that will be posted to
         * @param {string} [apiUrl] api.php URL if the title is on another wiki
@@ -57,61 +59,54 @@
         *   - error Error explanation
         *   - details Further error details
         */
-       MwMessagePosterFactory.prototype.create = function ( title, apiUrl ) {
-               var pageId, page, contentModel, moduleName, api,
-                       factory = this;
-
-               if ( apiUrl ) {
-                       api = new mw.ForeignApi( apiUrl );
-               } else {
-                       api = new mw.Api();
-               }
+       MessagePosterFactory.prototype.create = function ( title, apiUrl ) {
+               var factory = this,
+                       api = apiUrl ? new mw.ForeignApi( apiUrl ) : new 
mw.Api();
 
                return api.get( {
                        action: 'query',
                        prop: 'info',
                        indexpageids: true,
                        titles: title.getPrefixedDb()
-               } ).then( function ( result ) {
-                       if ( result.query.pageids && 
result.query.pageids.length > 0 ) {
-                               pageId = result.query.pageids[ 0 ];
-                               page = result.query.pages[ pageId ];
-
-                               contentModel = page.contentmodel;
-                               moduleName = 'mediawiki.messagePoster.' + 
contentModel;
-                               return mw.loader.using( moduleName ).then( 
function () {
-                                       return factory.createForContentModel(
-                                               contentModel,
-                                               title,
-                                               api
-                                       );
-                               }, function () {
-                                       return $.Deferred().reject( 
'failed-to-load-module', 'Failed to load the \'' + moduleName + '\' module' );
-                               } );
-                       } else {
+               } ).then( function ( data ) {
+                       var pageId, page, contentModel, moduleName;
+                       if ( !data.query.pageids[ 0 ] ) {
                                return $.Deferred().reject( 
'unexpected-response', 'Unexpected API response' );
                        }
-               }, function ( errorCode, details ) {
-                       return $.Deferred().reject( 
'content-model-query-failed', errorCode, details );
-               } ).promise();
+                       pageId = data.query.pageids[ 0 ];
+                       page = data.query.pages[ pageId ];
+
+                       contentModel = page.contentmodel;
+                       moduleName = 'mediawiki.messagePoster.' + contentModel;
+                       return mw.loader.using( moduleName ).then( function () {
+                               return factory.createForContentModel(
+                                       contentModel,
+                                       title,
+                                       api
+                               );
+                       }, function () {
+                               return $.Deferred().reject( 
'failed-to-load-module', 'Failed to load "' + moduleName + '"' );
+                       } );
+               }, function ( error, details ) {
+                       return $.Deferred().reject( 
'content-model-query-failed', error, details );
+               } );
        };
 
        /**
         * Creates a MessagePoster instance, given a title and content model
         *
         * @private
-        *
         * @param {string} contentModel Content model of title
         * @param {mw.Title} title Title being posted to
         * @param {mw.Api} api mw.Api instance that the instance should use
         * @return {mw.messagePoster.MessagePoster}
         *
         */
-       MwMessagePosterFactory.prototype.createForContentModel = function ( 
contentModel, title, api ) {
+       MessagePosterFactory.prototype.createForContentModel = function ( 
contentModel, title, api ) {
                return new this.contentModelToClass[ contentModel ]( title, api 
);
        };
 
        mw.messagePoster = {
-               factory: new MwMessagePosterFactory()
+               factory: new MessagePosterFactory()
        };
 }( mediaWiki, jQuery ) );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: If642e94942abcbf7e5aa373fbd83a30d9202f24a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Krinkle <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to