1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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 );
|