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