PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.0
Jetpack – WP Security, Backup, Speed, & Growth v16.0
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 14.1.1 14.2.2 14.3.1 All 501 releases
jetpack / modules / theme-tools / responsive-videos.php
responsive-videos.php
197 lines 6.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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