diff options
Diffstat (limited to 'plugins/jetpack/modules/videopress/js/videopress-uploader.js')
-rw-r--r-- | plugins/jetpack/modules/videopress/js/videopress-uploader.js | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/plugins/jetpack/modules/videopress/js/videopress-uploader.js b/plugins/jetpack/modules/videopress/js/videopress-uploader.js new file mode 100644 index 00000000..de5f9a67 --- /dev/null +++ b/plugins/jetpack/modules/videopress/js/videopress-uploader.js @@ -0,0 +1,157 @@ +/* globals plupload, pluploadL10n, error */ +window.wp = window.wp || {}; + +( function( wp ) { + var VideoPress = { + originalOptions: {}, + + /** + * This is the standard uploader response handler. + */ + handleStandardResponse: function( response, file ) { + if ( ! _.isObject( response ) || _.isUndefined( response.success ) ) { + return error( pluploadL10n.default_error, null, file ); + } else if ( ! response.success ) { + return error( response.data && response.data.message, response.data, file ); + } + + return response; + }, + + /** + * Handle response from the WPCOM Rest API. + */ + handleRestApiResponse: function( response, file ) { + if ( response.media.length !== 1 ) { + return error( pluploadL10n.default_error, null, file ); + } + + var media = response.media[ 0 ], + mimeParts = media.mime_type.split( '/' ), + data = { + alt: '', + author: media.author_ID || 0, + authorName: '', + caption: '', + compat: { item: '', meta: '' }, + date: media.date || '', + dateFormatted: media.date || '', + description: media.description || '', + editLink: '', + filename: media.file || '', + filesizeHumanReadable: '', + filesizeInBytes: '', + height: media.height, + icon: media.icon || '', + id: media.ID || '', + link: media.URL || '', + menuOrder: 0, + meta: false, + mime: media.mime_type || '', + modified: 0, + name: '', + nonces: { update: '', delete: '', edit: '' }, + orientation: '', + sizes: undefined, + status: '', + subtype: mimeParts[ 1 ] || '', + title: media.title || '', + type: mimeParts[ 0 ] || '', + uploadedTo: 1, + uploadedToLink: '', + uploadedToTitle: '', + url: media.URL || '', + width: media.width, + success: '', + videopress: { + guid: media.videopress_guid || null, + processing_done: media.videopress_processing_done || false, + }, + }; + + response.data = data; + + return response; + }, + + /** + * Make sure that all of the original variables have been reset, so the uploader + * doesn't try to go to VideoPress again next time. + * + * @param up + */ + resetToOriginalOptions: function( up ) { + if ( typeof VideoPress.originalOptions.url !== 'undefined' ) { + up.setOption( 'url', VideoPress.originalOptions.url ); + delete VideoPress.originalOptions.url; + } + + if ( typeof VideoPress.originalOptions.multipart_params !== 'undefined' ) { + up.setOption( 'multipart_params', VideoPress.originalOptions.multipart_params ); + delete VideoPress.originalOptions.multipart_params; + } + + if ( typeof VideoPress.originalOptions.file_data_name !== 'undefined' ) { + up.setOption( 'file_data_name', VideoPress.originalOptions.file_data_name ); + delete VideoPress.originalOptions.file_data_name; + } + }, + }; + + if ( typeof wp.Uploader !== 'undefined' ) { + var media = wp.media; + + /** + * A plupload code specifically for videopress failures. + * + * @type {string} + */ + plupload.VIDEOPRESS_TOKEN_FAILURE = 'VP_TOKEN_FAILURE'; + + /** + * Adds a filter that checks all files to see if they are videopress files and if they are + * it will download extra metadata for them. + */ + plupload.addFileFilter( 'videopress_check_uploads', function( maxSize, file, cb ) { + var mimeParts = file.type.split( '/' ); + var self = this; + + if ( mimeParts[ 0 ] === 'video' ) { + media + .ajax( 'videopress-get-upload-token', { async: false, data: { filename: file.name } } ) + .done( function( response ) { + file.videopress = response; + cb( true ); + } ) + .fail( function( response ) { + self.trigger( 'Error', { + code: plupload.VIDEOPRESS_TOKEN_FAILURE, + message: plupload.translate( + 'Could not get the VideoPress token needed for uploading' + ), + file: file, + response: response, + } ); + cb( false ); + } ); + } else { + // Handles the normal max_file_size functionality. + var undef; + + // Invalid file size + if ( file.size !== undef && maxSize && file.size > maxSize ) { + this.trigger( 'Error', { + code: plupload.FILE_SIZE_ERROR, + message: plupload.translate( 'File size error.' ), + file: file, + } ); + cb( false ); + } else { + cb( true ); + } + } + } ); + } + + wp.VideoPress = VideoPress; +} )( window.wp ); |