summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/jetpack/extensions/blocks/videopress/editor.js')
-rw-r--r--plugins/jetpack/extensions/blocks/videopress/editor.js119
1 files changed, 119 insertions, 0 deletions
diff --git a/plugins/jetpack/extensions/blocks/videopress/editor.js b/plugins/jetpack/extensions/blocks/videopress/editor.js
new file mode 100644
index 00000000..0cb7f476
--- /dev/null
+++ b/plugins/jetpack/extensions/blocks/videopress/editor.js
@@ -0,0 +1,119 @@
+/**
+ * External dependencies
+ */
+import { createBlobURL } from '@wordpress/blob';
+import { createBlock } from '@wordpress/blocks';
+import { mediaUpload } from '@wordpress/editor';
+import { addFilter } from '@wordpress/hooks';
+import { every } from 'lodash';
+
+/**
+ * Internal dependencies
+ */
+import withVideoPressEdit from './edit';
+import withVideoPressSave from './save';
+import getJetpackExtensionAvailability from '../../shared/get-jetpack-extension-availability';
+
+const addVideoPressSupport = ( settings, name ) => {
+ if ( 'core/video' !== name ) {
+ return settings;
+ }
+
+ const { available, unavailableReason } = getJetpackExtensionAvailability( 'videopress' );
+
+ // We customize the video block even if VideoPress it not available so we can support videos that were uploaded to
+ // VideoPress if it was available in the past (i.e. before a plan downgrade).
+ if ( available || [ 'missing_plan', 'missing_module' ].includes( unavailableReason ) ) {
+ return {
+ ...settings,
+
+ attributes: {
+ autoplay: {
+ type: 'boolean',
+ },
+ caption: {
+ type: 'string',
+ source: 'html',
+ selector: 'figcaption',
+ },
+ controls: {
+ type: 'boolean',
+ default: true,
+ },
+ guid: {
+ type: 'string',
+ },
+ id: {
+ type: 'number',
+ },
+ loop: {
+ type: 'boolean',
+ },
+ muted: {
+ type: 'boolean',
+ },
+ poster: {
+ type: 'string',
+ },
+ preload: {
+ type: 'string',
+ default: 'metadata',
+ },
+ src: {
+ type: 'string',
+ },
+ },
+
+ transforms: {
+ ...settings.transforms,
+ from: [
+ {
+ type: 'files',
+ isMatch: files => every( files, file => file.type.indexOf( 'video/' ) === 0 ),
+ // We define a higher priority (lower number) than the default of 10. This ensures that this
+ // transformation prevails over the core video block default transformations.
+ priority: 9,
+ transform: ( files, onChange ) => {
+ const blocks = [];
+ files.forEach( file => {
+ const block = createBlock( 'core/video', {
+ src: createBlobURL( file ),
+ } );
+ mediaUpload( {
+ filesList: [ file ],
+ onFileChange: ( [ { id, url } ] ) => {
+ onChange( block.clientId, { id, src: url } );
+ },
+ allowedTypes: [ 'video' ],
+ } );
+ blocks.push( block );
+ } );
+ return blocks;
+ },
+ },
+ ],
+ },
+
+ supports: {
+ ...settings.supports,
+ reusable: false,
+ },
+
+ edit: withVideoPressEdit( settings.edit ),
+
+ save: withVideoPressSave( settings.save ),
+
+ deprecated: [
+ {
+ attributes: settings.attributes,
+ save: settings.save,
+ isEligible: attrs => ! attrs.guid,
+ },
+ ],
+ };
+ }
+
+ return settings;
+};
+
+addFilter( 'blocks.registerBlockType', 'jetpack/videopress', addVideoPressSupport );