/* 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 );