jenkins-bot has submitted this change and it was merged.

Change subject: Code cleanups related to deferreds and promises
......................................................................


Code cleanups related to deferreds and promises

* Don't use new with $.Deferred()
* Simplified code where possible with then() and postWithToken().
* No need to call .promise() after .then().
* Fixed some incorrect documentation.

Change-Id: Ifd39d7e3063681363961e3a6125d6ce99b6f6e74
---
M resources/js/ext.translate.base.js
M resources/js/ext.translate.editor.helpers.js
M resources/js/ext.translate.groupselector.js
M resources/js/ext.translate.special.pagemigration.js
M resources/js/ext.translate.special.pagepreparation.js
M resources/js/ext.translate.storage.js
M resources/js/ext.translate.workflowselector.js
M resources/js/jquery.ajaxdispatcher.js
8 files changed, 40 insertions(+), 64 deletions(-)

Approvals:
  Krinkle: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/resources/js/ext.translate.base.js 
b/resources/js/ext.translate.base.js
index 4d409f7..76c8e7d 100644
--- a/resources/js/ext.translate.base.js
+++ b/resources/js/ext.translate.base.js
@@ -53,8 +53,7 @@
                 * @return {jQuery.Promise} Object containing the requested 
properties on success.
                 */
                getMessageGroup: function ( id, props ) {
-                       var params,
-                               deferred = new $.Deferred();
+                       var params;
 
                        if ( $.isArray( props ) ) {
                                props = props.join( '|' );
@@ -71,14 +70,9 @@
                                mgroot: id
                        };
 
-                       new mw.Api()
-                               .get( params )
-                               .done( function ( result ) {
-                                       deferred.resolve( 
result.query.messagegroups[0] );
-                               } )
-                               .fail( deferred.reject );
-
-                       return deferred.promise();
+                       return (new mw.Api()).get( params ).then( function ( 
result ) {
+                               return result.query.messagegroups[0];
+                       } );
                },
 
                /**
diff --git a/resources/js/ext.translate.editor.helpers.js 
b/resources/js/ext.translate.editor.helpers.js
index 9c08552..6a0587d 100644
--- a/resources/js/ext.translate.editor.helpers.js
+++ b/resources/js/ext.translate.editor.helpers.js
@@ -53,10 +53,9 @@
                saveDocumentation: function () {
                        var translateEditor = this,
                                api = new mw.Api(),
-                               deferred = new $.Deferred(),
                                newDocumentation = 
translateEditor.$editor.find( '.tux-textarea-documentation' ).val();
 
-                       deferred = api.postWithToken( 'edit', {
+                       return api.postWithToken( 'edit', {
                                action: 'edit',
                                title: translateEditor.message.title
                                        .replace( /\/[a-z\-]+$/, '/' + 
mw.config.get( 'wgTranslateDocumentationLanguageCode' ) ),
@@ -85,7 +84,6 @@
                                mw.notify( 'Error saving message documentation' 
);
                                mw.log( 'Error saving documentation', 
errorCode, results );
                        } );
-                       return deferred.promise();
                },
 
                /**
diff --git a/resources/js/ext.translate.groupselector.js 
b/resources/js/ext.translate.groupselector.js
index ab8fbbb..4dfd86f 100644
--- a/resources/js/ext.translate.groupselector.js
+++ b/resources/js/ext.translate.groupselector.js
@@ -393,7 +393,7 @@
                /**
                 * Load message groups and relevant properties using the API.
                 *
-                * @return {jQuery.promise}
+                * @return {jQuery.Promise}
                 */
                loadGroups: function () {
                        if ( groupsLoader !== undefined ) {
@@ -422,7 +422,7 @@
                /**
                 * Returns list of recently used message groups by the user.
                 *
-                * @return {jQuery.promise}
+                * @return {jQuery.Promise}
                 */
                loadRecentGroups: function () {
                        if ( recentGroupsLoader !== undefined ) {
diff --git a/resources/js/ext.translate.special.pagemigration.js 
b/resources/js/ext.translate.special.pagemigration.js
index 7b72bae..3e9d2ce 100644
--- a/resources/js/ext.translate.special.pagemigration.js
+++ b/resources/js/ext.translate.special.pagemigration.js
@@ -12,15 +12,14 @@
        function createTranslationPage( i, content ) {
 
                return function () {
-                       var api = new mw.Api(),
-                       identifier, title, summary,
-                       deferred = new $.Deferred();
+                       var identifier, title, summary,
+                               api = new mw.Api();
 
                        identifier = sourceUnits[i].identifier;
                        title = 'Translations:' + pageName + '/' + identifier + 
'/' + langCode;
                        summary = $( '#pm-summary' ).val();
 
-                       deferred = api.postWithToken( 'edit', {
+                       return api.postWithToken( 'edit', {
                                action: 'edit',
                                format: 'json',
                                watchlist: 'nochange',
@@ -28,7 +27,6 @@
                                text: content,
                                summary: summary,
                        } );
-                       return deferred.promise();
                };
        }
 
@@ -59,17 +57,17 @@
                        if ( typeof obj === undefined ) {
                                // obj was not initialized
                                errorBox.text( mw.msg( 
'pm-page-does-not-exist', pageTitle ) ).show( 'fast' );
-                               return new $.Deferred().reject();
+                               return $.Deferred().reject();
                        }
                        if ( obj.revisions === undefined ) {
                                // the case of /en subpage where first edit is 
by FuzzyBot
                                errorBox.text( mw.msg( 
'pm-old-translations-missing', pageTitle ) ).show( 'fast' );
-                               return new $.Deferred().reject();
+                               return $.Deferred().reject();
                        }
                        pageContent = obj.revisions[0]['*'];
                        oldTranslationUnits = pageContent.split( '\n\n' );
                        return oldTranslationUnits;
-               } ).promise();
+               } );
        }
 
        /**
@@ -101,12 +99,12 @@
                        // Page does not exist if missing field is present
                        if ( obj.missing === '' ) {
                                errorBox.text( mw.msg( 
'pm-page-does-not-exist', pageTitle ) ).show( 'fast' );
-                               return new $.Deferred().reject();
+                               return $.Deferred().reject();
                        }
                        // Page exists, but no edit by FuzzyBot
                        if ( obj.revisions === undefined ) {
                                errorBox.text( mw.msg( 
'pm-old-translations-missing', pageTitle ) ).show( 'fast' );
-                               return new $.Deferred().reject();
+                               return $.Deferred().reject();
                        } else {
                                // FB over here refers to FuzzyBot
                                timestampFB = obj.revisions[0].timestamp;
@@ -116,7 +114,7 @@
                                mw.log( 'New Timestamp: ' + timestampOld );
                                return timestampOld;
                        }
-               } ).promise();
+               } );
        }
 
        /**
@@ -124,7 +122,7 @@
         * @param {string} pageName
         * return {jQuery.Promise}
         * return {Function} return.done
-        * return {Array} return.done.data Array of sUnit Objects
+        * return {Object[]} return.done.data Array of sUnit Objects
         */
        function getSourceUnits( pageName ) {
                var api = new mw.Api();
@@ -148,7 +146,7 @@
                                sourceUnits.push( sUnit );
                        }
                        return sourceUnits;
-               } ).promise();
+               } );
        }
 
        /**
diff --git a/resources/js/ext.translate.special.pagepreparation.js 
b/resources/js/ext.translate.special.pagepreparation.js
index 58d96cd..4b0f900 100644
--- a/resources/js/ext.translate.special.pagepreparation.js
+++ b/resources/js/ext.translate.special.pagepreparation.js
@@ -5,7 +5,7 @@
         * Save the page with a given page name and given content to the wiki.
         * @param {string} pageName Page title
         * @param {string} pageContent Content of the page to be saved
-        * @return {jQuery.promise}
+        * @return {jQuery.Promise}
         */
        function savePage( pageName, pageContent ) {
                var api = new mw.Api();
@@ -23,7 +23,7 @@
         * Get the diff between the current revision and the prepared page 
content
         * @param {string} pageName Page title
         * @param {string} pageContent Content of the page to be saved
-        * @return {jQuery.promise}
+        * @return {jQuery.Promise}
         * @return {Function} return.done
         * @return {string} return.done.data
         */
@@ -45,7 +45,7 @@
                        }
                        diff = obj.revisions[0].diff['*'];
                        return diff;
-               } ).promise();
+               } );
        }
 
        /**
@@ -127,7 +127,7 @@
        /**
         * Fetch all the aliases for a given namespace on the wiki.
         * @param {integer} namespaceId
-        * @return {jQuery.promise}
+        * @return {jQuery.Promise}
         * @return {Function} return.done
         * @return {Array} return.done.data
         */
@@ -146,19 +146,17 @@
                                }
                        }
                        return aliases;
-               } ).promise();
+               } );
        }
 
        /**
         * Add translate tags around only translatable content for files and 
keep everything else
         * as a part of the page template.
         * @param {string} pageContent
-        * @return {string}
+        * @return {jQuery.Promise}
         */
        function doFiles( pageContent ) {
-               var deferred = new $.Deferred();
-
-               $.when( getNamespaceAliases( 6 ) ).then( function ( aliases ) {
+               getNamespaceAliases( 6 ).then( function ( aliases ) {
                        var aliasList, captionFilesRegex, fileRegex;
 
                        aliases.push( 'file' );
@@ -178,9 +176,8 @@
                        fileRegex = new RegExp( '/\\[\\[((' + aliasList + 
')[^\\|]*?)\\]\\]', 'gi' );
                        pageContent = pageContent.replace( fileRegex, 
'\n</translate>[[$1]]\n<translate>' );
 
-                       deferred.resolve( pageContent );
+                       return pageContent;
                } );
-               return deferred.promise();
        }
 
        /**
@@ -233,7 +230,7 @@
                                obj = data.query.pages[page];
                        }
                        return obj.revisions[0]['*'];
-               } ).promise();
+               } );
        }
 
        /**
diff --git a/resources/js/ext.translate.storage.js 
b/resources/js/ext.translate.storage.js
index 4e7427b..698eb66 100644
--- a/resources/js/ext.translate.storage.js
+++ b/resources/js/ext.translate.storage.js
@@ -21,7 +21,7 @@
                 * @return {jQuery.Promise}
                 */
                save: function ( title, translation ) {
-                       var deferred = (new mw.Api()).postWithToken( 'edit', {
+                       return (new mw.Api()).postWithToken( 'edit', {
                                action: 'edit',
                                title: title,
                                text: translation,
@@ -30,8 +30,6 @@
                                // When undefined, the parameter is not 
included in the request
                                assert: mw.user.isAnon() ? undefined : 'user'
                        } );
-
-                       return deferred.promise();
                }
        };
 
diff --git a/resources/js/ext.translate.workflowselector.js 
b/resources/js/ext.translate.workflowselector.js
index 5911ce0..4ddd555 100644
--- a/resources/js/ext.translate.workflowselector.js
+++ b/resources/js/ext.translate.workflowselector.js
@@ -55,28 +55,19 @@
                 * @return {jQuery.Promise}
                 */
                changeState: function ( state ) {
-                       var instance = this,
-                               tokenCall, deferred;
+                       var token, params,
+                               api = new mw.Api();
 
-                       deferred = new $.Deferred();
-                       tokenCall = new mw.Api().get( { action: 'tokens', type: 
'groupreview' } );
+                       params = {
+                               action: 'groupreview',
+                               group: this.groupId,
+                               language: this.language,
+                               state: state,
+                               format: 'json'
+                       };
+                       token = mw.config.get( 'wgTranslateSupportsCsrfToken' ) 
? 'csrf' : 'groupreview';
 
-                       tokenCall.fail( deferred.reject );
-                       tokenCall.done( function ( result ) {
-                               var params = {
-                                       action: 'groupreview',
-                                       group: instance.groupId,
-                                       language: instance.language,
-                                       state: state,
-                                       token: result.tokens.groupreviewtoken,
-                                       format: 'json'
-                               };
-                               new mw.Api().post( params )
-                                       .done( deferred.resolve )
-                                       .fail( deferred.reject );
-                       } );
-
-                       return deferred.promise();
+                       return api.postWithToken( token, params );
                },
 
                /**
diff --git a/resources/js/jquery.ajaxdispatcher.js 
b/resources/js/jquery.ajaxdispatcher.js
index 76b69dc..a49a158 100644
--- a/resources/js/jquery.ajaxdispatcher.js
+++ b/resources/js/jquery.ajaxdispatcher.js
@@ -7,7 +7,7 @@
         * @author Niklas Laxström, 2014
         *
         * @param {callable[]} list List of callbacks returning promises.
-        * @return {jQuery.promise}
+        * @return {jQuery.Promise}
         */
        function ajaxDispatcher( list, maxRetries ) {
                maxRetries = maxRetries || 0;

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ifd39d7e3063681363961e3a6125d6ce99b6f6e74
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/Translate
Gerrit-Branch: master
Gerrit-Owner: Nikerabbit <[email protected]>
Gerrit-Reviewer: Krinkle <[email protected]>
Gerrit-Reviewer: Nikerabbit <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to