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 / theme-tools / responsive-videos.php
jetpack / modules / theme-tools Last commit date
compat 1 month ago content-options 2 weeks ago js 5 years ago responsive-videos 1 year ago site-logo 7 months ago social-menu 1 month ago content-options.php 7 months ago featured-content.php 7 months ago responsive-videos.php 7 months ago site-breadcrumbs.php 1 year ago site-logo.php 7 months ago social-links.php 7 months ago social-menu.php 7 months ago
responsive-videos.php
197 lines
1 <?php
2 /**
3 * Theme Tools: Responsive videos enhancements.
4 *
5 * @package automattic/jetpack
6 */
7
8 use Automattic\Jetpack\Assets;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit( 0 );
12 }
13
14 if ( ! class_exists( '\Automattic\Jetpack\Classic_Theme_Helper\Main' ) ) {
15 /**
16 * Load the Responsive videos plugin
17 *
18 * @deprecated 13.7 Moved to Classic Theme Helper package.
19 */
20 function jetpack_responsive_videos_init() {
21 _deprecated_function( __FUNCTION__, 'jetpack-13.7' );
22
23 /* If the doesn't theme support 'jetpack-responsive-videos', don't continue */
24 if ( ! current_theme_supports( 'jetpack-responsive-videos' ) ) {
25 return;
26 }
27
28 /* If the theme does support 'jetpack-responsive-videos', wrap the videos */
29 add_filter( 'wp_video_shortcode', 'jetpack_responsive_videos_embed_html' );
30 add_filter( 'video_embed_html', 'jetpack_responsive_videos_embed_html' );
31
32 /* Only wrap oEmbeds if video */
33 add_filter( 'embed_oembed_html', 'jetpack_responsive_videos_maybe_wrap_oembed', 10, 2 );
34 add_filter( 'embed_handler_html', 'jetpack_responsive_videos_maybe_wrap_oembed', 10, 2 );
35
36 /* Wrap videos in Buddypress */
37 add_filter( 'bp_embed_oembed_html', 'jetpack_responsive_videos_embed_html' );
38
39 /* Wrap Slideshare shortcodes */
40 add_filter( 'jetpack_slideshare_shortcode', 'jetpack_responsive_videos_embed_html' );
41
42 // Remove the Jetpack Responsive video wrapper in embed blocks on sites that support core Responsive embeds.
43 if ( current_theme_supports( 'responsive-embeds' ) ) {
44 add_filter( 'render_block', 'jetpack_responsive_videos_remove_wrap_oembed', 10, 2 );
45 }
46 }
47 add_action( 'after_setup_theme', 'jetpack_responsive_videos_init', 99 );
48
49 /**
50 * Adds a wrapper to videos and enqueue script
51 *
52 * @deprecated 13.7 Moved to Classic Theme Helper package.
53 *
54 * @param string $html The video embed HTML.
55 * @return string
56 */
57 function jetpack_responsive_videos_embed_html( $html ) {
58 _deprecated_function( __FUNCTION__, 'jetpack-13.7' );
59
60 if ( empty( $html ) || ! is_string( $html ) ) {
61 return $html;
62 }
63
64 // Short-circuit for AMP responses, since custom scripts are not allowed in AMP and videos are naturally responsive.
65 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
66 return $html;
67 }
68
69 // The customizer video widget wraps videos with a class of wp-video
70 // mejs as of 4.9 apparently resizes videos too which causes issues
71 // skip the video if it is wrapped in wp-video.
72 $video_widget_wrapper = 'class="wp-video"';
73
74 $mejs_wrapped = strpos( $html, $video_widget_wrapper );
75
76 // If this is a video widget wrapped by mejs, return the html.
77 if ( false !== $mejs_wrapped ) {
78 return $html;
79 }
80
81 Assets::register_script(
82 'jetpack-responsive-videos',
83 '_inc/build/theme-tools/responsive-videos/responsive-videos.min.js',
84 JETPACK__PLUGIN_FILE,
85 array(
86 'in_footer' => true,
87 'enqueue' => true,
88 'textdomain' => 'jetpack',
89 'css_path' => '_inc/build/theme-tools/responsive-videos/responsive-videos.css',
90 )
91 );
92
93 return '<div class="jetpack-video-wrapper">' . $html . '</div>';
94 }
95
96 /**
97 * Check if oEmbed is a `$video_patterns` provider video before wrapping.
98 *
99 * @deprecated 13.7 Moved to Classic Theme Helper package.
100 *
101 * @param mixed $html The cached HTML result, stored in post meta.
102 * @param string $url he attempted embed URL.
103 *
104 * @return string
105 */
106 function jetpack_responsive_videos_maybe_wrap_oembed( $html, $url = null ) {
107 _deprecated_function( __FUNCTION__, 'jetpack-13.7' );
108
109 if ( empty( $html ) || ! is_string( $html ) || ! $url ) {
110 return $html;
111 }
112
113 // Short-circuit for AMP responses, since custom scripts are not allowed in AMP and videos are naturally responsive.
114 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
115 return $html;
116 }
117
118 $jetpack_video_wrapper = '<div class="jetpack-video-wrapper">';
119
120 $already_wrapped = strpos( $html, $jetpack_video_wrapper );
121
122 // If the oEmbed has already been wrapped, return the html.
123 if ( false !== $already_wrapped ) {
124 return $html;
125 }
126
127 /**
128 * The oEmbed video providers.
129 *
130 * An allowed list of oEmbed video provider Regex patterns to check against before wrapping the output.
131 *
132 * @module theme-tools
133 *
134 * @since 3.8.0
135 *
136 * @param array $video_patterns oEmbed video provider Regex patterns.
137 */
138 $video_patterns = apply_filters(
139 'jetpack_responsive_videos_oembed_videos',
140 array(
141 'https?://((m|www)\.)?youtube\.com/watch',
142 'https?://((m|www)\.)?youtube\.com/playlist',
143 'https?://youtu\.be/',
144 'https?://(.+\.)?vimeo\.com/',
145 'https?://(www\.)?dailymotion\.com/',
146 'https?://dai.ly/',
147 'https?://(www\.)?hulu\.com/watch/',
148 'https?://wordpress.tv/',
149 'https?://(www\.)?funnyordie\.com/videos/',
150 'https?://vine.co/v/',
151 'https?://(www\.)?collegehumor\.com/video/',
152 'https?://(www\.|embed\.)?ted\.com/talks/',
153 )
154 );
155
156 // Merge patterns to run in a single preg_match call.
157 $video_patterns = '(' . implode( '|', $video_patterns ) . ')';
158
159 $is_video = preg_match( $video_patterns, $url );
160
161 // If the oEmbed is a video, wrap it in the responsive wrapper.
162 if ( false === $already_wrapped && 1 === $is_video ) {
163 return jetpack_responsive_videos_embed_html( $html );
164 }
165
166 return $html;
167 }
168
169 /**
170 * Remove the Jetpack Responsive video wrapper in embed blocks.
171 *
172 * @since 7.0.0
173 *
174 * @deprecated 13.7 Moved to Classic Theme Helper package.
175 *
176 * @param string $block_content The block content about to be appended.
177 * @param array $block The full block, including name and attributes.
178 *
179 * @return string $block_content String of rendered HTML.
180 */
181 function jetpack_responsive_videos_remove_wrap_oembed( $block_content, $block ) {
182 _deprecated_function( __FUNCTION__, 'jetpack-13.7' );
183
184 if (
185 isset( $block['blockName'] )
186 && (
187 str_contains( $block['blockName'], 'core-embed' ) // pre-WP 5.6 embeds (multiple embed blocks starting with 'core-embed').
188 || 'core/embed' === $block['blockName'] // WP 5.6 embed block format (single embed block w/ block variations).
189 )
190 ) {
191 $block_content = preg_replace( '#<div class="jetpack-video-wrapper">(.*?)</div>#', '${1}', $block_content );
192 }
193
194 return $block_content;
195 }
196 }
197