PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3
Jetpack – WP Security, Backup, Speed, & Growth v16.3
16.3 16.3-beta 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 All 508 releases
← All changes | extensions/blocks/rating-star/rating-meta.php +130 -0 16.2-beta → 16.3 View file →
@@ -1,0 +1,130 @@
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 +}