PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.8.3
Jetpack – WP Security, Backup, Speed, & Growth v12.8.3
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 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 / editor-media-view.php
jetpack / modules / videopress Last commit date
css 3 years ago js 3 years ago class-videopress-attachment-metadata.php 4 years ago class.jetpack-videopress.php 4 years ago class.videopress-cli.php 3 years ago class.videopress-edit-attachment.php 3 years ago class.videopress-gutenberg.php 3 years ago class.videopress-options.php 2 years ago class.videopress-player.php 3 years ago class.videopress-scheduler.php 4 years ago class.videopress-video.php 4 years ago class.videopress-xmlrpc.php 2 years ago editor-media-view.php 3 years ago shortcode.php 2 years ago videopress-admin-rtl.css 4 years ago videopress-admin-rtl.min.css 4 years ago videopress-admin.css 4 years ago videopress-admin.min.css 4 years ago
editor-media-view.php
232 lines
1 <?php
2 /**
3 * VideoPress admin media-view functions.
4 *
5 * @package automattic/jetpack
6 */
7
8 use Automattic\Jetpack\Assets;
9
10 /**
11 * WordPress Shortcode Editor View JS Code
12 */
13 function videopress_handle_editor_view_js() {
14 $content_width = Jetpack::get_content_width();
15 $current_screen = get_current_screen();
16 if ( ! isset( $current_screen->id ) || $current_screen->base !== 'post' ) {
17 return;
18 }
19
20 add_action( 'admin_print_footer_scripts', 'videopress_editor_view_js_templates' );
21
22 wp_enqueue_style(
23 'videopress-editor-ui',
24 plugins_url( 'css/editor.css', __FILE__ ),
25 array(),
26 JETPACK__VERSION
27 );
28 wp_enqueue_script(
29 'videopress-editor-view',
30 Assets::get_file_url_for_environment(
31 '_inc/build/videopress/js/editor-view.min.js',
32 'modules/videopress/js/editor-view.js'
33 ),
34 array( 'wp-util', 'jquery' ),
35 JETPACK__VERSION,
36 true
37 );
38 wp_localize_script(
39 'videopress-editor-view',
40 'vpEditorView',
41 array(
42 'home_url_host' => wp_parse_url( home_url(), PHP_URL_HOST ),
43 'min_content_width' => VIDEOPRESS_MIN_WIDTH,
44 'content_width' => $content_width ? (int) $content_width : VIDEOPRESS_DEFAULT_WIDTH,
45 'modal_labels' => array(
46 'title' => esc_html__( 'VideoPress Shortcode', 'jetpack' ),
47 'guid' => esc_html__( 'Video ID', 'jetpack' ),
48 'w' => esc_html__( 'Video Width', 'jetpack' ),
49 'w_unit' => esc_html__( 'pixels', 'jetpack' ),
50 /* Translators: example of usage of this is "Start Video After 10 seconds" */
51 'at' => esc_html__( 'Start Video After', 'jetpack' ),
52 'at_unit' => esc_html__( 'seconds', 'jetpack' ),
53 'hd' => esc_html__( 'High definition on by default', 'jetpack' ),
54 'permalink' => esc_html__( 'Link the video title to its URL on VideoPress.com', 'jetpack' ),
55 'autoplay' => esc_html__( 'Autoplay video on page load', 'jetpack' ),
56 'loop' => esc_html__( 'Loop video playback', 'jetpack' ),
57 'freedom' => esc_html__( 'Use only Open Source codecs (may degrade performance)', 'jetpack' ),
58 'flashonly' => esc_html__( 'Use legacy Flash Player (not recommended)', 'jetpack' ),
59 ),
60 )
61 );
62
63 add_editor_style( plugins_url( 'css/videopress-editor-style.css', __FILE__ ) );
64 }
65 add_action( 'admin_notices', 'videopress_handle_editor_view_js' );
66
67 /**
68 * WordPress Editor Views
69 */
70 function videopress_editor_view_js_templates() {
71 /**
72 * This template uses the following parameters, and displays the video as an iframe:
73 * - data.guid // The guid of the video.
74 * - data.width // The width of the iframe.
75 * - data.height // The height of the iframe.
76 * - data.urlargs // Arguments serialized into a get string.
77 *
78 * In addition, the calling script will need to ensure that the following
79 * JS file is added to the header of the editor iframe:
80 * - https://s0.wp.com/wp-content/plugins/video/assets/js/next/videopress-iframe.js
81 */
82 ?>
83 <script type="text/html" id="tmpl-videopress_iframe_vnext">
84 <div class="tmpl-videopress_iframe_next" style="max-height:{{ data.height }}px;">
85 <div class="videopress-editor-wrapper" style="padding-top:{{ data.ratio }}%;">
86 <iframe style="display: block; max-width: 100%; max-height: 100%;" width="{{ data.width }}" height="{{ data.height }}" src="https://videopress.com/embed/{{ data.guid }}?{{ data.urlargs }}" frameborder='0' allowfullscreen></iframe>
87 </div>
88 </div>
89 </script>
90 <?php
91 }
92
93 /*************************************************\
94 | This is the chunk that handles overriding core |
95 | media stuff so VideoPress can display natively. |
96 \*/
97
98 /**
99 * Media Grid:
100 * Filter out any videopress video posters that we've downloaded,
101 * so that they don't seem to display twice.
102 *
103 * @param array $args Query variables.
104 * @deprecated 11.4
105 */
106 function videopress_ajax_query_attachments_args( $args ) {
107 _deprecated_function( __METHOD__, 'jetpack-11.4' );
108 return Automattic\Jetpack\VideoPress\Attachment_Handler::ajax_query_attachments_args( $args );
109 }
110
111 /**
112 * Media List:
113 * Do the same as `videopress_ajax_query_attachments_args()` but for the list view.
114 *
115 * @param array $query WP_Query instance.
116 * @deprecated 11.4
117 */
118 function videopress_media_list_table_query( $query ) {
119 _deprecated_function( __METHOD__, 'jetpack-11.4' );
120 return Automattic\Jetpack\VideoPress\Attachment_Handler::media_list_table_query( $query );
121 }
122
123 /**
124 * Make sure that any Video that has a VideoPress GUID passes that data back.
125 *
126 * @param WP_Post $post Attachment object.
127 * @deprecated 11.4
128 */
129 function videopress_prepare_attachment_for_js( $post ) {
130 _deprecated_function( __METHOD__, 'jetpack-11.4' );
131 return Automattic\Jetpack\VideoPress\Attachment_Handler::prepare_attachment_for_js( $post );
132 }
133
134 /**
135 * Wherever the Media Modal is deployed, also deploy our overrides.
136 */
137 function add_videopress_media_overrides() {
138 add_action( 'admin_print_footer_scripts', 'videopress_override_media_templates', 11 );
139 }
140 add_action( 'wp_enqueue_media', 'add_videopress_media_overrides' );
141
142 /**
143 * Our video overrides!
144 *
145 * We have a template for the iframe to get injected.
146 */
147 function videopress_override_media_templates() {
148 ?>
149 <script type="text/html" id="tmpl-videopress_iframe_vnext">
150 <iframe class="videopress-iframe" style="display: block; max-width: 100%; max-height: 100%;" width="{{ data.width }}" height="{{ data.height }}" src="https://videopress.com/embed/{{ data.guid }}?{{ data.urlargs }}" frameborder='0' allowfullscreen></iframe>
151 </script>
152 <script>
153 (function( media ){
154 // This handles the media library modal attachment details display.
155 if ( 'undefined' !== typeof media.view.Attachment.Details.TwoColumn ) {
156 var TwoColumn = media.view.Attachment.Details.TwoColumn,
157 old_render = TwoColumn.prototype.render,
158 vp_template = wp.template('videopress_iframe_vnext');
159
160 TwoColumn.prototype.render = function() {
161 // Have the original renderer run first.
162 old_render.apply( this, arguments );
163
164 // Now our stuff!
165 if ( 'video' === this.model.get('type') ) {
166 if ( this.model.get('videopress_guid') ) {
167 this.$('.attachment-media-view .thumbnail-video').html( vp_template( {
168 guid : this.model.get('videopress_guid'),
169 width : this.model.get('width') > 0 ? this.model.get('width') : '100%',
170 height : this.model.get('height') > 0 ? this.model.get('height') : '100%'
171 }));
172 }
173 }
174 };
175 } else { /* console.log( 'media.view.Attachment.Details.TwoColumn undefined' ); */ }
176
177 // This handles the recreating of the core video shortcode when editing the mce embed.
178 if ( 'undefined' !== typeof media.video ) {
179 media.video.defaults.videopress_guid = '';
180
181 // For some reason, even though we're not currently changing anything, the following proxy
182 // function is necessary to include the above default `videopress_guid` param. ¯\_(ツ)_/¯
183 var old_video_shortcode = media.video.shortcode;
184 media.video.shortcode = function( model ) {
185 // model.videopress_guid = 'FOOBAR';
186 return old_video_shortcode( model );
187 };
188 } else { /* console.log( 'media.video undefined' ); */ }
189
190 // override the media modal in order to extend the escape method to unload the player on hide
191 var BaseMediaModal = wp.media.view.Modal;
192
193 wp.media.view.Modal = BaseMediaModal.extend( {
194 escape: function () {
195 BaseMediaModal.prototype.escape.apply( this );
196 var playerIframes = document.getElementsByClassName( "videopress-iframe" );
197 if ( playerIframes.length && playerIframes[0].parentElement ) {
198 playerIframes[0].parentElement.removeChild( playerIframes[0] );
199 }
200 }
201 } );
202 })( wp.media );
203 </script>
204 <?php
205 }
206
207 /**
208 * Properly inject VideoPress data into Core shortcodes, and
209 * generate videopress shortcodes for purely remote videos.
210 *
211 * @param string $html HTML markup for a media item sent to the editor.
212 * @param int $id Attachment ID.
213 * @param array $attachment Attachment metadata.
214 */
215 function videopress_media_send_to_editor( $html, $id, $attachment ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable
216 $videopress_guid = get_post_meta( $id, 'videopress_guid', true );
217 if ( $videopress_guid && videopress_is_valid_guid( $videopress_guid ) ) {
218 if ( '[video ' === substr( $html, 0, 7 ) ) {
219 $html = sprintf( '[videopress %1$s]', esc_attr( $videopress_guid ) );
220
221 } elseif ( '<a href=' === substr( $html, 0, 8 ) ) {
222 // We got here because `wp_attachment_is()` returned false for
223 // video, because there isn't a local copy of the file.
224 $html = sprintf( '[videopress %1$s]', esc_attr( $videopress_guid ) );
225 }
226 } elseif ( videopress_is_attachment_without_guid( $id ) ) {
227 $html = sprintf( '[videopress postid=%d]', $id );
228 }
229 return $html;
230 }
231 add_filter( 'media_send_to_editor', 'videopress_media_send_to_editor', 10, 3 );
232