PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / videopress / js / editor-view.js
jetpack / modules / videopress / js Last commit date
editor-view.js 7 months ago gutenberg-video-upload.js 4 months ago media-video-widget-extensions.js 5 years ago videopress-add-resumable-upload-support.js 4 years ago videopress-plupload.js 7 months ago videopress-uploader.js 1 month ago
editor-view.js
292 lines
1 /* global tinyMCE, vpEditorView */
2 ( function ( $, wp, vpEditorView ) {
3 wp.mce = wp.mce || {};
4 if ( 'undefined' === typeof wp.mce.views ) {
5 return;
6 }
7 wp.mce.videopress_wp_view_renderer = {
8 shortcode_string: 'videopress',
9 shortcode_data: {},
10 defaults: {
11 w: '',
12 at: '',
13 permalink: true,
14 hd: false,
15 loop: false,
16 freedom: false,
17 autoplay: false,
18 flashonly: false,
19 },
20 coerce: wp.media.coerce,
21 template: wp.template( 'videopress_iframe_vnext' ),
22 getContent: function () {
23 var urlargs = 'for=' + encodeURIComponent( vpEditorView.home_url_host ),
24 named = this.shortcode.attrs.named,
25 options,
26 key,
27 width;
28
29 for ( key in named ) {
30 switch ( key ) {
31 case 'at':
32 if ( parseInt( named[ key ], 10 ) ) {
33 urlargs += '&' + key + '=' + parseInt( named[ key ], 10 );
34 } // Else omit, as it's the default.
35 break;
36 case 'permalink':
37 if ( 'false' === named[ key ] ) {
38 urlargs += '&' + key + '=0';
39 } // Else omit, as it's the default.
40 break;
41 case 'hd':
42 case 'loop':
43 case 'autoplay':
44 if ( 'true' === named[ key ] ) {
45 urlargs += '&' + key + '=1';
46 } // Else omit, as it's the default.
47 break;
48 default:
49 // Unknown parameters? Ditch it!
50 break;
51 }
52 }
53
54 options = {
55 width: vpEditorView.content_width,
56 height: vpEditorView.content_width * 0.5625,
57 guid: this.shortcode.attrs.numeric[ 0 ],
58 urlargs: urlargs,
59 };
60
61 if ( typeof named.w !== 'undefined' ) {
62 width = parseInt( named.w, 10 );
63 if ( width >= vpEditorView.min_content_width && width < vpEditorView.content_width ) {
64 options.width = width;
65 options.height = parseInt( width * 0.5625, 10 );
66 }
67 }
68
69 options.ratio = 100 * ( options.height / options.width );
70
71 return this.template( options );
72 },
73 edit: function ( data ) {
74 var shortcode_data = wp.shortcode.next( this.shortcode_string, data ),
75 named = shortcode_data.shortcode.attrs.named,
76 editor = tinyMCE.activeEditor,
77 renderer = this,
78 oldRenderFormItem = tinyMCE.ui.FormItem.prototype.renderHtml;
79
80 /**
81 * Override TextBox renderHtml to support html5 attrs.
82 * @link https://github.com/tinymce/tinymce/pull/2784
83 *
84 * @return {string}
85 */
86 tinyMCE.ui.TextBox.prototype.renderHtml = function () {
87 var self = this,
88 settings = self.settings,
89 element = document.createElement( settings.multiline ? 'textarea' : 'input' ),
90 extraAttrs = [
91 'rows',
92 'spellcheck',
93 'maxLength',
94 'size',
95 'readonly',
96 'min',
97 'max',
98 'step',
99 'list',
100 'pattern',
101 'placeholder',
102 'required',
103 'multiple',
104 ],
105 i,
106 key;
107
108 for ( i = 0; i < extraAttrs.length; i++ ) {
109 key = extraAttrs[ i ];
110 if ( typeof settings[ key ] !== 'undefined' ) {
111 element.setAttribute( key, settings[ key ] );
112 }
113 }
114
115 if ( settings.multiline ) {
116 element.innerText = self.state.get( 'value' );
117 } else {
118 element.setAttribute( 'type', settings.subtype ? settings.subtype : 'text' );
119 element.setAttribute( 'value', self.state.get( 'value' ) );
120 }
121
122 element.id = self._id;
123 element.className = self.classes;
124 element.setAttribute( 'hidefocus', 1 );
125 if ( self.disabled() ) {
126 element.disabled = true;
127 }
128
129 return element.outerHTML;
130 };
131
132 tinyMCE.ui.FormItem.prototype.renderHtml = function () {
133 for ( const [ key, value ] of Object.entries( vpEditorView.modal_labels ) ) {
134 if ( value === this.settings.items.text ) {
135 this.classes.add( 'videopress-field-' + key );
136 }
137 }
138
139 if (
140 [
141 vpEditorView.modal_labels.hd,
142 vpEditorView.modal_labels.permalink,
143 vpEditorView.modal_labels.autoplay,
144 vpEditorView.modal_labels.loop,
145 vpEditorView.modal_labels.freedom,
146 vpEditorView.modal_labels.flashonly,
147 ].includes( this.settings.items.text )
148 ) {
149 this.classes.add( 'videopress-checkbox' );
150 }
151 return oldRenderFormItem.call( this );
152 };
153
154 /**
155 * Populate the defaults.
156 */
157 for ( const [ key ] of Object.entries( this.defaults ) ) {
158 named[ key ] = this.coerce( named, key );
159 }
160
161 /**
162 * Declare the fields that will show in the popup when editing the shortcode.
163 */
164 editor.windowManager.open( {
165 title: vpEditorView.modal_labels.title,
166 id: 'videopress-shortcode-settings-modal',
167 width: 520,
168 height: 240,
169 body: [
170 {
171 type: 'textbox',
172 disabled: true,
173 name: 'guid',
174 label: vpEditorView.modal_labels.guid,
175 value: shortcode_data.shortcode.attrs.numeric[ 0 ],
176 },
177 {
178 type: 'textbox',
179 subtype: 'number',
180 min: vpEditorView.min_content_width, // The `min` may supported be in the future. https://github.com/tinymce/tinymce/pull/2784
181 name: 'w',
182 label: vpEditorView.modal_labels.w,
183 value: named.w,
184 },
185 {
186 type: 'textbox',
187 subtype: 'number',
188 min: 0, // The `min` may supported be in the future. https://github.com/tinymce/tinymce/pull/2784
189 name: 'at',
190 label: vpEditorView.modal_labels.at,
191 value: named.at,
192 },
193 {
194 type: 'checkbox',
195 name: 'hd',
196 label: vpEditorView.modal_labels.hd,
197 checked: named.hd,
198 },
199 {
200 type: 'checkbox',
201 name: 'permalink',
202 label: vpEditorView.modal_labels.permalink,
203 checked: named.permalink,
204 },
205 {
206 type: 'checkbox',
207 name: 'autoplay',
208 label: vpEditorView.modal_labels.autoplay,
209 checked: named.autoplay,
210 },
211 {
212 type: 'checkbox',
213 name: 'loop',
214 label: vpEditorView.modal_labels.loop,
215 checked: named.loop,
216 },
217 {
218 type: 'checkbox',
219 name: 'freedom',
220 label: vpEditorView.modal_labels.freedom,
221 checked: named.freedom,
222 },
223 {
224 type: 'checkbox',
225 name: 'flashonly',
226 label: vpEditorView.modal_labels.flashonly,
227 checked: named.flashonly,
228 },
229 ],
230 onsubmit: function ( e ) {
231 var args = {
232 tag: renderer.shortcode_string,
233 type: 'single',
234 attrs: {
235 named: Object.fromEntries(
236 Object.entries( e.data ).filter( ( [ k ] ) => k in renderer.defaults )
237 ),
238 numeric: [ e.data.guid ],
239 },
240 };
241
242 if ( '0' === args.attrs.named.at ) {
243 args.attrs.named.at = '';
244 }
245
246 for ( const [ key, value ] of Object.entries( renderer.defaults ) ) {
247 args.attrs.named[ key ] = renderer.coerce( args.attrs.named, key );
248
249 if ( value === args.attrs.named[ key ] ) {
250 delete args.attrs.named[ key ];
251 }
252 }
253
254 editor.insertContent( wp.shortcode.string( args ) );
255 },
256 onopen: function ( e ) {
257 var prefix = 'mce-videopress-field-';
258 for ( const value of [ 'w', 'at' ] ) {
259 e.target.$el
260 .find( '.' + prefix + value + ' .mce-container-body' )
261 .append(
262 '<span class="' +
263 prefix +
264 'unit ' +
265 prefix +
266 'unit-' +
267 value +
268 '">' +
269 vpEditorView.modal_labels[ value + '_unit' ]
270 );
271 }
272 $( 'body' ).addClass( 'modal-open' );
273 },
274 onclose: function () {
275 $( 'body' ).removeClass( 'modal-open' );
276 },
277 } );
278
279 // Set it back to its original renderer.
280 tinyMCE.ui.FormItem.prototype.renderHtml = oldRenderFormItem;
281 },
282 };
283
284 // Extend the videopress one to also handle `wpvideo` instances.
285 wp.mce.wpvideo_wp_view_renderer = Object.assign( {}, wp.mce.videopress_wp_view_renderer, {
286 shortcode_string: 'wpvideo',
287 } );
288
289 wp.mce.views.register( 'videopress', wp.mce.videopress_wp_view_renderer );
290 wp.mce.views.register( 'wpvideo', wp.mce.wpvideo_wp_view_renderer );
291 } )( jQuery, wp, vpEditorView );
292