PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.6.2
Jetpack – WP Security, Backup, Speed, & Growth v13.6.2
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 / extensions / blocks / slideshow / slideshow.php
jetpack / extensions / blocks / slideshow Last commit date
slideshow.php 2 years ago
slideshow.php
226 lines
1 <?php
2 /**
3 * Slideshow Block.
4 *
5 * @since 7.1.0
6 *
7 * @package automattic/jetpack
8 */
9
10 namespace Automattic\Jetpack\Extensions\Slideshow;
11
12 use Automattic\Jetpack\Blocks;
13 use Jetpack_Gutenberg;
14
15 /**
16 * Registers the block for use in Gutenberg
17 * This is done via an action so that we can disable
18 * registration if we need to.
19 */
20 function register_block() {
21 Blocks::jetpack_register_block(
22 __DIR__,
23 array( 'render_callback' => __NAMESPACE__ . '\load_assets' )
24 );
25 }
26 add_action( 'init', __NAMESPACE__ . '\register_block' );
27
28 /**
29 * Slideshow block registration/dependency declaration.
30 *
31 * @param array $attr Array containing the slideshow block attributes.
32 * @param string $content String containing the slideshow block content.
33 *
34 * @return string
35 */
36 function load_assets( $attr, $content ) {
37 Jetpack_Gutenberg::load_assets_as_required( __DIR__ );
38 if ( Blocks::is_amp_request() ) {
39 return render_amp( $attr );
40 }
41 return $content;
42 }
43
44 /**
45 * Render slideshow block for AMP
46 *
47 * @param array $attr Array containing the slideshow block attributes.
48 *
49 * @return string
50 */
51 function render_amp( $attr ) {
52 if ( empty( $attr['ids'] ) ) {
53 return '';
54 }
55
56 static $wp_block_jetpack_slideshow_id = 0;
57 ++$wp_block_jetpack_slideshow_id;
58
59 $ids = $attr['ids'];
60 $autoplay = empty( $attr['autoplay'] ) ? false : true;
61 $extras = array(
62 'wp-amp-block',
63 $autoplay ? 'wp-block-jetpack-slideshow__autoplay' : null,
64 $autoplay ? 'wp-block-jetpack-slideshow__autoplay-playing' : null,
65 );
66 $classes = Blocks::classes( Blocks::get_block_feature( __DIR__ ), $attr, $extras );
67
68 return sprintf(
69 '<div class="%1$s" id="wp-block-jetpack-slideshow__%2$d"><div class="wp-block-jetpack-slideshow_container swiper-container">%3$s%4$s%5$s</div></div>',
70 esc_attr( $classes ),
71 absint( $wp_block_jetpack_slideshow_id ),
72 amp_carousel( $attr, $wp_block_jetpack_slideshow_id ),
73 $autoplay ? autoplay_ui( $wp_block_jetpack_slideshow_id ) : '',
74 render_paginator( $ids, $wp_block_jetpack_slideshow_id )
75 );
76 }
77
78 /**
79 * Generate amp-carousel markup
80 *
81 * @param array $attr Array of block attributes.
82 * @param int $block_ordinal The ordinal number of the block, used in unique ID.
83 *
84 * @return string amp-carousel markup.
85 */
86 function amp_carousel( $attr, $block_ordinal ) {
87 $ids = empty( $attr['ids'] ) ? array() : $attr['ids'];
88 $first_image = wp_get_attachment_metadata( $ids[0] );
89 $delay = empty( $attr['delay'] ) ? 3 : absint( $attr['delay'] );
90 $autoplay = empty( $attr['autoplay'] ) ? false : $attr['autoplay'];
91 $width = empty( $first_image['width'] ) ? 800 : $first_image['width'];
92 $height = empty( $first_image['height'] ) ? 600 : $first_image['height'];
93 return sprintf(
94 '<amp-carousel width="%1$d" height="%2$d" layout="responsive" type="slides" data-next-button-aria-label="%3$s" data-prev-button-aria-label="%4$s" controls loop %5$s id="wp-block-jetpack-slideshow__amp-carousel__%6$s" on="slideChange:wp-block-jetpack-slideshow__amp-pagination__%6$s.toggle(index=event.index, value=true)">%7$s</amp-carousel>',
95 esc_attr( $width ),
96 esc_attr( $height ),
97 esc_attr__( 'Next Slide', 'jetpack' ),
98 esc_attr__( 'Previous Slide', 'jetpack' ),
99 $autoplay ? 'autoplay delay=' . esc_attr( $delay * 1000 ) : '',
100 absint( $block_ordinal ),
101 implode( '', slides( $ids, $width, $height ) )
102 );
103 }
104
105 /**
106 * Generate array of slides markup
107 *
108 * @param array $ids Array of image ids.
109 * @param int $width Width of the container.
110 * @param int $height Height of the container.
111 *
112 * @return array Array of slides markup.
113 */
114 function slides( $ids = array(), $width = 400, $height = 300 ) {
115 return array_map(
116 function ( $id ) use ( $width, $height ) {
117 $caption = wp_get_attachment_caption( $id );
118 $figcaption = $caption ? sprintf(
119 '<figcaption class="wp-block-jetpack-slideshow_caption gallery-caption">%s</figcaption>',
120 wp_kses_post( $caption )
121 ) : '';
122 $image = wp_get_attachment_image(
123 $id,
124 array( $width, $height ),
125 false,
126 array(
127 'class' => 'wp-block-jetpack-slideshow_image',
128 'object-fit' => 'contain',
129 )
130 );
131 return sprintf(
132 '<div class="wp-block-jetpack-slideshow_slide"><figure>%s%s</figure></div>',
133 $image,
134 $figcaption
135 );
136 },
137 $ids
138 );
139 }
140
141 /**
142 * Render blocks paginator section
143 *
144 * @param array $ids Array of image ids.
145 * @param int $block_ordinal The ordinal number of the block, used in unique ID.
146 *
147 * @return array Array of bullets markup.
148 */
149 function render_paginator( $ids = array(), $block_ordinal = 0 ) {
150 $total = count( $ids );
151
152 if ( $total < 6 ) {
153 return bullets( $ids, $block_ordinal );
154 }
155
156 return sprintf(
157 '<div class="swiper-pagination-simple">%s / %s</div>',
158 absint( $block_ordinal ),
159 absint( $total )
160 );
161 }
162
163 /**
164 * Generate array of bullets markup
165 *
166 * @param array $ids Array of image ids.
167 * @param int $block_ordinal The ordinal number of the block, used in unique ID.
168 *
169 * @return array Array of bullets markup.
170 */
171 function bullets( $ids = array(), $block_ordinal = 0 ) {
172 $buttons = array_map(
173 function ( $index ) {
174 $aria_label = sprintf(
175 /* translators: %d: Slide number. */
176 __( 'Go to slide %d', 'jetpack' ),
177 absint( $index + 1 )
178 );
179 return sprintf(
180 '<button option="%d" class="swiper-pagination-bullet" tabindex="0" role="button" aria-label="%s" %s></button>',
181 absint( $index ),
182 esc_attr( $aria_label ),
183 0 === $index ? 'selected' : ''
184 );
185 },
186 array_keys( $ids )
187 );
188
189 return sprintf(
190 '<amp-selector id="wp-block-jetpack-slideshow__amp-pagination__%1$d" class="wp-block-jetpack-slideshow_pagination swiper-pagination swiper-pagination-custom amp-pagination" on="select:wp-block-jetpack-slideshow__amp-carousel__%1$d.goToSlide(index=event.targetOption)" layout="container">%2$s</amp-selector>',
191 absint( $block_ordinal ),
192 implode( '', $buttons )
193 );
194 }
195
196 /**
197 * Generate autoplay play/pause UI.
198 *
199 * @param int $block_ordinal The ordinal number of the block, used in unique ID.
200 *
201 * @return string Autoplay UI markup.
202 */
203 function autoplay_ui( $block_ordinal = 0 ) {
204 $block_id = sprintf(
205 'wp-block-jetpack-slideshow__%d',
206 absint( $block_ordinal )
207 );
208 $amp_carousel_id = sprintf(
209 'wp-block-jetpack-slideshow__amp-carousel__%d',
210 absint( $block_ordinal )
211 );
212 $autoplay_pause = sprintf(
213 '<a aria-label="%s" class="wp-block-jetpack-slideshow_button-pause" role="button" on="tap:%s.toggleAutoplay(toggleOn=false),%s.toggleClass(class=wp-block-jetpack-slideshow__autoplay-playing,force=false)"></a>',
214 esc_attr__( 'Pause Slideshow', 'jetpack' ),
215 esc_attr( $amp_carousel_id ),
216 esc_attr( $block_id )
217 );
218 $autoplay_play = sprintf(
219 '<a aria-label="%s" class="wp-block-jetpack-slideshow_button-play" role="button" on="tap:%s.toggleAutoplay(toggleOn=true),%s.toggleClass(class=wp-block-jetpack-slideshow__autoplay-playing,force=true)"></a>',
220 esc_attr__( 'Play Slideshow', 'jetpack' ),
221 esc_attr( $amp_carousel_id ),
222 esc_attr( $block_id )
223 );
224 return $autoplay_pause . $autoplay_play;
225 }
226