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