PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-a.5
Jetpack – WP Security, Backup, Speed, & Growth v16.3-a.5
16.3-a.5 16.3-a.7 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 All 506 releases
jetpack / extensions / blocks / rating-star / rating-meta.php

rating-meta.php in Jetpack – WP Security, Backup, Speed, & Growth 16.3-a.5, at extensions/blocks/rating-star/rating-meta.php

131 lines 4.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Utilities for the rating block.
4 *
5 * @since 8.0.0
6 *
7 * @package automattic/jetpack
8 */
9
10 if ( ! function_exists( 'jetpack_rating_meta_get_symbol_low_fidelity' ) ) {
11 /**
12 * Returns the low fidelity symbol for the block.
13 *
14 * @return string
15 */
16 function jetpack_rating_meta_get_symbol_low_fidelity() {
17 return '<span aria-hidden="true">⭐</span>';
18 }
19 }
20
21 if ( ! function_exists( 'jetpack_rating_star_get_symbol_high_fidelity' ) ) {
22 /**
23 * Return the high fidelity symbol for the block.
24 *
25 * @param string $classname_whole Name of the whole symbol class.
26 * @param string $classname_half Name of the half symbol class.
27 * @param string $color Color of the block.
28 *
29 * @return string
30 */
31 function jetpack_rating_star_get_symbol_high_fidelity( $classname_whole, $classname_half, $color ) {
32 return <<<ELO
33 <span>
34 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
35 <path class="{$classname_whole}" fill="{$color}" stroke="{$color}" d="M12,17.3l6.2,3.7l-1.6-7L22,9.2l-7.2-0.6L12,2L9.2,8.6L2,9.2L7.5,14l-1.6,7L12,17.3z" />
36 </svg>
37 </span>
38 <span>
39 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
40 <path class="{$classname_half}" fill="{$color}" stroke="{$color}" d="M12,17.3l6.2,3.7l-1.6-7L22,9.2l-7.2-0.6L12,2L9.2,8.6L2,9.2L7.5,14l-1.6,7L12,17.3z" />
41 </svg>
42 </span>
43 ELO;
44 }
45 }
46
47 if ( ! function_exists( 'jetpack_rating_meta_get_symbol_high_fidelity' ) ) {
48 /**
49 * Returns the high fidelity symbol for the block.
50 *
51 * @param array $attributes Array containing the block attributes.
52 * @param integer $pos Value to render whole and half symbols.
53 * @return string
54 */
55 function jetpack_rating_meta_get_symbol_high_fidelity( $attributes, $pos ) {
56 $classname_whole = ( $attributes['rating'] >= ( $pos - 0.5 ) ) ? '' : 'is-rating-unfilled';
57 $classname_half = ( $attributes['rating'] >= $pos ) ? '' : 'is-rating-unfilled';
58 $color = empty( $attributes['color'] ) ? 'currentColor' : esc_attr( $attributes['color'] );
59
60 return jetpack_rating_star_get_symbol_high_fidelity( $classname_whole, $classname_half, $color );
61 }
62 }
63
64 if ( ! function_exists( 'jetpack_rating_get_schema_for_symbol' ) ) {
65 /**
66 * Returns an itemprop and content for rating symbols
67 *
68 * @param integer $position the position of the symbol.
69 * @param integer $max_rating the maximum symbol score.
70 *
71 * @return string
72 */
73 function jetpack_rating_get_schema_for_symbol( $position, $max_rating ) {
74 $schema = '';
75 if ( 1 === $position ) {
76 $schema = 'itemprop="worstRating" content="0.5"';
77 } elseif ( $max_rating === $position ) {
78 $schema = 'itemprop="bestRating" content="' . esc_attr( $max_rating ) . '"';
79 }
80 return $schema;
81 }
82 }
83
84 if ( ! function_exists( 'jetpack_rating_meta_get_symbols' ) ) {
85 /**
86 * Returns the symbol for the block.
87 *
88 * @param array $attributes Array containing the block attributes.
89 *
90 * @return string
91 */
92 function jetpack_rating_meta_get_symbols( $attributes ) {
93 // Output SVGs for high fidelity contexts, then color them according to rating.
94 // These are hidden by default, then unhid when CSS loads.
95 $symbols_hifi = array();
96 for ( $pos = 1; $pos <= $attributes['maxRating']; $pos++ ) {
97 $symbols_hifi[] = '<span style="display: none;" ' . jetpack_rating_get_schema_for_symbol( $pos, $attributes['maxRating'] ) . '>' . jetpack_rating_meta_get_symbol_high_fidelity( $attributes, $pos ) . '</span>';
98 }
99
100 // Output fallback symbols for low fidelity contexts, like AMP,
101 // where CSS is not loaded so the high-fidelity symbols won't be rendered.
102 $symbols_lofi = '';
103 for ( $i = 0; $i < $attributes['rating']; $i++ ) {
104 $symbols_lofi .= jetpack_rating_meta_get_symbol_low_fidelity();
105 }
106
107 return '<p>' . $symbols_lofi . '</p>' . implode( $symbols_hifi );
108 }
109 }
110
111 if ( ! function_exists( 'jetpack_rating_meta_render_block' ) ) {
112 /**
113 * Dynamic rendering of the block.
114 *
115 * @param array $attributes Array containing the block attributes.
116 *
117 * @return string
118 */
119 function jetpack_rating_meta_render_block( $attributes ) {
120 $classname = empty( $attributes['className'] ) ? '' : ' ' . $attributes['className'];
121 return sprintf(
122 '<div class="%1$s" style="text-align:%4$s" itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">%2$s%3$s</div>',
123 esc_attr( 'wp-block-jetpack-rating-' . $attributes['ratingStyle'] . $classname ),
124 jetpack_rating_meta_get_symbols( $attributes ),
125 // translators: %1$s is awarded rating score, %2$s is the best possible rating.
126 '<span itemprop="ratingValue" class="screen-reader-text" content="' . esc_attr( $attributes['rating'] ) . '">' . sprintf( __( 'Rating: %1$s out of %2$s.', 'jetpack' ), esc_attr( $attributes['rating'] ), esc_attr( $attributes['maxRating'] ) ) . '</span>',
127 ( isset( $attributes['align'] ) ) ? esc_attr( $attributes['align'] ) : ''
128 );
129 }
130 }
131