PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.9.5
Jetpack – WP Security, Backup, Speed, & Growth v12.9.5
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 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 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 / modules / theme-tools / responsive-videos.php
jetpack / modules / theme-tools Last commit date
compat 2 years ago content-options 2 years ago js 6 years ago responsive-videos 3 years ago site-logo 3 years ago social-menu 2 years ago content-options.php 4 years ago devicepx.php 5 years ago featured-content.php 3 years ago infinite-scroll.php 4 years ago random-redirect.php 3 years ago responsive-videos.php 2 years ago site-breadcrumbs.php 3 years ago site-logo.php 4 years ago social-links.php 3 years ago social-menu.php 4 years ago
responsive-videos.php
176 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 if ( class_exists( 'Jetpack_AMP_Support' ) && Jetpack_AMP_Support::is_amp_request() ) {
54 return $html;
55 }
56
57 // The customizer video widget wraps videos with a class of wp-video
58 // mejs as of 4.9 apparently resizes videos too which causes issues
59 // skip the video if it is wrapped in wp-video.
60 $video_widget_wrapper = 'class="wp-video"';
61
62 $mejs_wrapped = strpos( $html, $video_widget_wrapper );
63
64 // If this is a video widget wrapped by mejs, return the html.
65 if ( false !== $mejs_wrapped ) {
66 return $html;
67 }
68
69 Assets::register_script(
70 'jetpack-responsive-videos',
71 '_inc/build/theme-tools/responsive-videos/responsive-videos.min.js',
72 JETPACK__PLUGIN_FILE,
73 array(
74 'in_footer' => true,
75 'enqueue' => true,
76 'textdomain' => 'jetpack',
77 'css_path' => '_inc/build/theme-tools/responsive-videos/responsive-videos.css',
78 )
79 );
80
81 return '<div class="jetpack-video-wrapper">' . $html . '</div>';
82 }
83
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 }
96
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 }
101
102 $jetpack_video_wrapper = '<div class="jetpack-video-wrapper">';
103
104 $already_wrapped = strpos( $html, $jetpack_video_wrapper );
105
106 // If the oEmbed has already been wrapped, return the html.
107 if ( false !== $already_wrapped ) {
108 return $html;
109 }
110
111 /**
112 * The oEmbed video providers.
113 *
114 * An allowed list of oEmbed video provider Regex patterns to check against before wrapping the output.
115 *
116 * @module theme-tools
117 *
118 * @since 3.8.0
119 *
120 * @param array $video_patterns oEmbed video provider Regex patterns.
121 */
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 );
139
140 // Merge patterns to run in a single preg_match call.
141 $video_patterns = '(' . implode( '|', $video_patterns ) . ')';
142
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 );
148 }
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 str_contains( $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 }
176