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