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

Change subject: Replace IframeTransport callbacks with OOJS events
......................................................................


Replace IframeTransport callbacks with OOJS events

Bug: T77124
Change-Id: Ic6d9f9dc4098c28de2d0e79af6ca91929d239bf2
---
M UploadWizard.php
M resources/mw.ApiUploadHandler.js
M resources/mw.IframeTransport.js
3 files changed, 97 insertions(+), 95 deletions(-)

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



diff --git a/UploadWizard.php b/UploadWizard.php
index 1f5dc63..0b49595 100644
--- a/UploadWizard.php
+++ b/UploadWizard.php
@@ -103,6 +103,9 @@
 
 $wgResourceModules['ext.uploadWizard.iFrameTransport'] = array(
        'scripts' => 'mw.IframeTransport.js',
+       'dependencies' => array(
+               'oojs',
+       ),
 ) + $uploadWizardModuleInfo;
 
 $wgResourceModules['ext.uploadWizard.apiUploadHandler'] = array(
diff --git a/resources/mw.ApiUploadHandler.js b/resources/mw.ApiUploadHandler.js
index f35816f..d0e42c6 100644
--- a/resources/mw.ApiUploadHandler.js
+++ b/resources/mw.ApiUploadHandler.js
@@ -24,16 +24,12 @@
                this.configureForm();
 
                this.transport = new mw.IframeTransport(
-                       this.$form,
-                       function ( fraction ) {
-                               handler.upload.setTransportProgress( fraction );
-                       },
-
-                       function ( result ) {
-                               handler.upload.setTransported( result );
-                       }
-               );
-
+                       this.$form
+               ).on( 'progress', function ( fraction ) {
+                       handler.upload.setTransportProgress( fraction );
+               } ).on( 'transported', function ( result ) {
+                       handler.upload.setTransported( result );
+               } );
        };
 
        mw.ApiUploadHandler.prototype = {
diff --git a/resources/mw.IframeTransport.js b/resources/mw.IframeTransport.js
index 858e2bc..a2cb1f1 100644
--- a/resources/mw.IframeTransport.js
+++ b/resources/mw.IframeTransport.js
@@ -1,17 +1,20 @@
-( function ( mw, $ ) {
+( function ( mw, $, oo ) {
+       var ITP;
+
        /**
+        * @class mw.IframeTransport
         * Represents a "transport" for files to upload; in this case an iframe.
         * XXX dubious whether this is really separated from 
"ApiUploadHandler", which does a lot of form config.
-        *
         * The iframe is made to be the target of a form so that the existing 
page does not reload, even though it's a POST.
-        * @param form  jQuery selector for HTML form
-        * @param progressCb    callback to execute when we've started. (does 
not do float here because iframes can't
-        *                                              monitor fractional 
progress).
-        * @param transportedCb callback to execute when we've finished the 
upload
+        * @mixins OO.EventEmitter
+        * @constructor
+        * @param {jQuery} $form HTML form with the upload data.
         */
-       mw.IframeTransport = function ( $form, progressCb, transportedCb ) {
+       mw.IframeTransport = function ( $form ) {
                var iframe,
                        transport = this;
+
+               oo.EventEmitter.call( this );
 
                function setupFormCallback() {
                        transport.configureForm();
@@ -23,8 +26,6 @@
                }
 
                this.$form = $form;
-               this.progressCb = progressCb;
-               this.transportedCb = transportedCb;
                this.setUpStatus = $.Deferred();
 
                this.iframeId = 'f_' + ( $( 'iframe' ).length + 1 );
@@ -57,82 +58,84 @@
                $( 'body' ).append( this.$iframe );
        };
 
-       mw.IframeTransport.prototype = {
-               /**
-                * Accessor function
-                * @return {jQuery.Deferred}
-                */
-               getSetUpStatus: function () {
-                       return this.setUpStatus;
-               },
+       oo.mixinClass( mw.IframeTransport, oo.EventEmitter );
 
-               /**
-                * Configure a form with a File Input so that it submits to the 
iframe
-                * Ensure callback on completion of upload
-                */
-               configureForm: function () {
-                       var transport = this;
+       ITP = mw.IframeTransport.prototype;
 
-                       // Set the form target to the iframe
-                       this.$form.prop( 'target', this.iframeId );
-
-                       // attach an additional handler to the form, so, when 
submitted, it starts showing the progress
-                       // XXX this is lame .. there should be a generic way to 
indicate busy status...
-                       this.$form.submit( function () {
-                               return true;
-                       } );
-
-                       // Set up the completion callback
-                       this.$iframe.load( function () {
-                               transport.progressCb( 1.0 );
-                               transport.processIframeResult( this );
-                       } );
-               },
-
-               /**
-                * Process the result of the form submission, returned to an 
iframe.
-                * This is the iframe's onload event.
-                *
-                * @param {Element} iframe iframe to extract result from
-                */
-               processIframeResult: function ( iframe ) {
-                       var response, json,
-                               doc = iframe.contentDocument || 
frames[iframe.id].document;
-
-                       // Fix for Opera 9.26
-                       if ( doc.readyState && doc.readyState !== 'complete' ) {
-                               return;
-                       }
-
-                       // Fix for Opera 9.64
-                       if ( doc.body && doc.body.innerHTML === 'false' ) {
-                               return;
-                       }
-
-                       if ( doc.XMLDocument ) {
-                               // The response is a document property in IE
-                               response = doc.XMLDocument;
-                       } else if ( doc.body ) {
-                               // Get the json string
-                               // We're actually searching through an HTML doc 
here --
-                               // according to mdale we need to do this
-                               // because IE does not load JSON properly in an 
iframe
-                               json = $( doc.body ).find( 'pre' ).text();
-
-                               // check that the JSON is not an XML error 
message
-                               // (this happens when user aborts upload, we 
get the API docs in XML wrapped in HTML)
-                               if ( json && json.substring(0, 5) !== '<?xml' ) 
{
-                                       response = $.parseJSON( json );
-                               } else {
-                                       response = {};
-                               }
-                       } else {
-                               // Response is a xml document
-                               response = doc;
-                       }
-
-                       // Process the API result
-                       this.transportedCb( response );
-               }
+       /**
+        * Accessor function
+        * @return {jQuery.Deferred}
+        */
+       ITP.getSetUpStatus = function () {
+               return this.setUpStatus;
        };
-}( mediaWiki, jQuery ) );
+
+       /**
+        * Configure a form with a File Input so that it submits to the iframe
+        * Ensure callback on completion of upload
+        */
+       ITP.configureForm = function () {
+               var transport = this;
+
+               // Set the form target to the iframe
+               this.$form.prop( 'target', this.iframeId );
+
+               // attach an additional handler to the form, so, when 
submitted, it starts showing the progress
+               // XXX this is lame .. there should be a generic way to 
indicate busy status...
+               this.$form.submit( function () {
+                       return true;
+               } );
+
+               // Set up the completion callback
+               this.$iframe.load( function () {
+                       transport.emit( 'progress', 1.0 );
+                       transport.processIframeResult( this );
+               } );
+       };
+
+       /**
+        * Process the result of the form submission, returned to an iframe.
+        * This is the iframe's onload event.
+        *
+        * @param {Element} iframe iframe to extract result from
+        */
+       ITP.processIframeResult = function ( iframe ) {
+               var response, json,
+                       doc = iframe.contentDocument || 
frames[iframe.id].document;
+
+               // Fix for Opera 9.26
+               if ( doc.readyState && doc.readyState !== 'complete' ) {
+                       return;
+               }
+
+               // Fix for Opera 9.64
+               if ( doc.body && doc.body.innerHTML === 'false' ) {
+                       return;
+               }
+
+               if ( doc.XMLDocument ) {
+                       // The response is a document property in IE
+                       response = doc.XMLDocument;
+               } else if ( doc.body ) {
+                       // Get the json string
+                       // We're actually searching through an HTML doc here --
+                       // according to mdale we need to do this
+                       // because IE does not load JSON properly in an iframe
+                       json = $( doc.body ).find( 'pre' ).text();
+
+                       // check that the JSON is not an XML error message
+                       // (this happens when user aborts upload, we get the 
API docs in XML wrapped in HTML)
+                       if ( json && json.substring(0, 5) !== '<?xml' ) {
+                               response = $.parseJSON( json );
+                       } else {
+                               response = {};
+                       }
+               } else {
+                       // Response is a xml document
+                       response = doc;
+               }
+
+               // Process the API result
+               this.emit( 'transported', response );
+       };
+}( mediaWiki, jQuery, OO ) );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ic6d9f9dc4098c28de2d0e79af6ca91929d239bf2
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/UploadWizard
Gerrit-Branch: master
Gerrit-Owner: MarkTraceur <mtrac...@member.fsf.org>
Gerrit-Reviewer: Gilles <gdu...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

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

Reply via email to