summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/UploadWizard/resources/handlers/mw.ApiUploadFormDataHandler.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/UploadWizard/resources/handlers/mw.ApiUploadFormDataHandler.js')
-rw-r--r--www/wiki/extensions/UploadWizard/resources/handlers/mw.ApiUploadFormDataHandler.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/www/wiki/extensions/UploadWizard/resources/handlers/mw.ApiUploadFormDataHandler.js b/www/wiki/extensions/UploadWizard/resources/handlers/mw.ApiUploadFormDataHandler.js
new file mode 100644
index 00000000..1d60a6d8
--- /dev/null
+++ b/www/wiki/extensions/UploadWizard/resources/handlers/mw.ApiUploadFormDataHandler.js
@@ -0,0 +1,70 @@
+( function ( mw, OO ) {
+ /**
+ * Represents an object which configures an html5 FormData object to upload.
+ * Large files are uploaded in chunks.
+ *
+ * @param {mw.UploadWizardUpload} upload
+ * @param {mw.Api} api
+ */
+ mw.ApiUploadFormDataHandler = function ( upload, api ) {
+ mw.ApiUploadHandler.call( this, upload, api );
+
+ this.formData = {
+ action: 'upload',
+ stash: 1,
+ format: 'json'
+ };
+
+ this.transport = new mw.FormDataTransport(
+ this.api,
+ this.formData
+ ).on( 'update-stage', function ( stage ) {
+ upload.ui.setStatus( 'mwe-upwiz-' + stage );
+ } );
+ };
+
+ OO.inheritClass( mw.ApiUploadFormDataHandler, mw.ApiUploadHandler );
+
+ mw.ApiUploadFormDataHandler.prototype.abort = function () {
+ this.transport.abort();
+ };
+
+ /**
+ * @return {jQuery.Promise}
+ */
+ mw.ApiUploadFormDataHandler.prototype.submit = function () {
+ var handler = this;
+
+ return this.configureEditToken().then( function () {
+ handler.beginTime = ( new Date() ).getTime();
+ handler.upload.ui.setStatus( 'mwe-upwiz-transport-started' );
+ handler.upload.ui.showTransportProgress();
+
+ return handler.transport.upload( handler.upload.file, handler.upload.title.getMainText() )
+ .progress( function ( fraction ) {
+ if ( handler.upload.state === 'aborted' ) {
+ handler.abort();
+ return;
+ }
+
+ if ( fraction !== null ) {
+ handler.upload.setTransportProgress( fraction );
+ }
+ } );
+ } );
+ };
+
+ /**
+ * Obtain a fresh edit token.
+ * If successful, store token and call a callback.
+ *
+ * @return {jQuery.Promise}
+ */
+ mw.ApiUploadFormDataHandler.prototype.configureEditToken = function () {
+ var handler = this;
+
+ return this.api.getEditToken().then( function ( token ) {
+ handler.formData.token = token;
+ } );
+ };
+}( mediaWiki, OO ) );