Нема описа

gutenberg-video-upload.js 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /* globals wp, lodash */
  2. wp.apiFetch.use( function ( options, next ) {
  3. var path = options.path;
  4. var method = options.method;
  5. var body = options.body;
  6. var file = body ? body.get( 'file' ) : null;
  7. // Override only requests to the WP REST API media endpoint uploading new videos.
  8. if ( ! path || path.indexOf( '/wp/v2/media' ) === -1 ) {
  9. return next( options );
  10. }
  11. if ( ! method || 'post' !== method.toLowerCase() ) {
  12. return next( options );
  13. }
  14. if ( ! file || file.type.indexOf( 'video/' ) !== 0 ) {
  15. return next( options );
  16. }
  17. // Get upload token.
  18. wp.media
  19. .ajax( 'videopress-get-upload-token', { async: false, data: { filename: file.name } } )
  20. .done( function ( response ) {
  21. // Set auth header with upload token.
  22. var headers = options.headers || {};
  23. headers.Authorization =
  24. 'X_UPLOAD_TOKEN token="' +
  25. response.upload_token +
  26. '" blog_id="' +
  27. response.upload_blog_id +
  28. '"';
  29. options.headers = headers;
  30. // Replace upload URL.
  31. delete options.path;
  32. options.url = response.upload_action_url;
  33. // Handle CORS.
  34. options.credentials = 'omit';
  35. // Set data in expected param by WP.com media endpoint.
  36. body.set( 'media[]', file );
  37. body.delete( 'file' );
  38. options.body = body;
  39. } );
  40. var result = next( options );
  41. return new Promise( function ( resolve, reject ) {
  42. result
  43. .then( function ( data ) {
  44. var wpcomMediaObject = lodash.get( data, 'media[0]' );
  45. var id = lodash.get( wpcomMediaObject, 'ID' );
  46. var gutenbergMediaObject = wp.apiFetch( {
  47. path: '/wp/v2/media/' + id,
  48. } );
  49. resolve( gutenbergMediaObject );
  50. } )
  51. .catch( function () {
  52. reject();
  53. } );
  54. } );
  55. } );