PluginProbe
Gutenberg / 22.9.0
Gutenberg v22.9.0
23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 12.6.0 7.4.0 All 402 releases
gutenberg / build / scripts / block-library / avatar.php

avatar.php in Gutenberg 22.9.0, at build/scripts/block-library/avatar.php

167 lines 5.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Server-side rendering of the `core/avatar` block.
4 *
5 * @package WordPress
6 */
7
8 /**
9 * Renders the `core/avatar` block on the server.
10 *
11 * @since 6.0.0
12 *
13 * @param array $attributes Block attributes.
14 * @param string $content Block default content.
15 * @param WP_Block $block Block instance.
16 * @return string Return the avatar.
17 */
18 function gutenberg_render_block_core_avatar( $attributes, $content, $block ) {
19 $size = $attributes['size'] ?? 96;
20 $wrapper_attributes = get_block_wrapper_attributes();
21 $border_attributes = gutenberg_get_block_core_avatar_border_attributes( $attributes );
22
23 // Class gets passed through `esc_attr` via `get_avatar`.
24 $image_classes = ! empty( $border_attributes['class'] )
25 ? "wp-block-avatar__image {$border_attributes['class']}"
26 : 'wp-block-avatar__image';
27
28 // Unlike class, `get_avatar` doesn't filter the styles via `esc_attr`.
29 // The style engine does pass the border styles through
30 // `safecss_filter_attr` however.
31 $image_styles = ! empty( $border_attributes['style'] )
32 ? sprintf( ' style="%s"', esc_attr( $border_attributes['style'] ) )
33 : '';
34
35 if ( ! isset( $block->context['commentId'] ) ) {
36 if ( isset( $attributes['userId'] ) ) {
37 $author_id = $attributes['userId'];
38 } elseif ( isset( $block->context['postId'] ) ) {
39 $author_id = get_post_field( 'post_author', $block->context['postId'] );
40 } else {
41 $author_id = get_query_var( 'author' );
42 }
43
44 if ( empty( $author_id ) ) {
45 return '';
46 }
47
48 $author_name = get_the_author_meta( 'display_name', $author_id );
49 // translators: %s: Author name.
50 $alt = sprintf( __( '%s Avatar' ), $author_name );
51 $avatar_block = get_avatar(
52 $author_id,
53 $size,
54 '',
55 $alt,
56 array(
57 'extra_attr' => $image_styles,
58 'class' => $image_classes,
59 )
60 );
61 if ( isset( $attributes['isLink'] ) && $attributes['isLink'] ) {
62 $label = '';
63 if ( '_blank' === $attributes['linkTarget'] ) {
64 // translators: %s is the Author name.
65 $label = 'aria-label="' . esc_attr( sprintf( __( '(%s author archive, opens in a new tab)' ), $author_name ) ) . '"';
66 }
67 // translators: 1: Author archive link. 2: Link target. %3$s Aria label. %4$s Avatar image.
68 $avatar_block = sprintf( '<a href="%1$s" target="%2$s" %3$s class="wp-block-avatar__link">%4$s</a>', esc_url( get_author_posts_url( $author_id ) ), esc_attr( $attributes['linkTarget'] ), $label, $avatar_block );
69 }
70 return sprintf( '<div %1s>%2s</div>', $wrapper_attributes, $avatar_block );
71 }
72 $comment = get_comment( $block->context['commentId'] );
73 if ( ! $comment ) {
74 return '';
75 }
76 /* translators: %s: Author name. */
77 $alt = sprintf( __( '%s Avatar' ), $comment->comment_author );
78 $avatar_block = get_avatar(
79 $comment,
80 $size,
81 '',
82 $alt,
83 array(
84 'extra_attr' => $image_styles,
85 'class' => $image_classes,
86 )
87 );
88 if ( isset( $attributes['isLink'] ) && $attributes['isLink'] && isset( $comment->comment_author_url ) && '' !== $comment->comment_author_url ) {
89 $label = '';
90 if ( '_blank' === $attributes['linkTarget'] ) {
91 // translators: %s: Comment author name.
92 $label = 'aria-label="' . esc_attr( sprintf( __( '(%s website link, opens in a new tab)' ), $comment->comment_author ) ) . '"';
93 }
94 $avatar_block = sprintf( '<a href="%1$s" target="%2$s" %3$s class="wp-block-avatar__link">%4$s</a>', esc_url( $comment->comment_author_url ), esc_attr( $attributes['linkTarget'] ), $label, $avatar_block );
95 }
96 return sprintf( '<div %1s>%2s</div>', $wrapper_attributes, $avatar_block );
97 }
98
99 /**
100 * Generates class names and styles to apply the border support styles for
101 * the Avatar block.
102 *
103 * @since 6.3.0
104 *
105 * @param array $attributes The block attributes.
106 * @return array The border-related classnames and styles for the block.
107 */
108 function gutenberg_get_block_core_avatar_border_attributes( $attributes ) {
109 $border_styles = array();
110 $sides = array( 'top', 'right', 'bottom', 'left' );
111
112 // Border radius.
113 if ( isset( $attributes['style']['border']['radius'] ) ) {
114 $border_styles['radius'] = $attributes['style']['border']['radius'];
115 }
116
117 // Border style.
118 if ( isset( $attributes['style']['border']['style'] ) ) {
119 $border_styles['style'] = $attributes['style']['border']['style'];
120 }
121
122 // Border width.
123 if ( isset( $attributes['style']['border']['width'] ) ) {
124 $border_styles['width'] = $attributes['style']['border']['width'];
125 }
126
127 // Border color.
128 $preset_color = array_key_exists( 'borderColor', $attributes ) ? "var:preset|color|{$attributes['borderColor']}" : null;
129 $custom_color = $attributes['style']['border']['color'] ?? null;
130 $border_styles['color'] = $preset_color ? $preset_color : $custom_color;
131
132 // Individual border styles e.g. top, left etc.
133 foreach ( $sides as $side ) {
134 $border = $attributes['style']['border'][ $side ] ?? null;
135 $border_styles[ $side ] = array(
136 'color' => $border['color'] ?? null,
137 'style' => $border['style'] ?? null,
138 'width' => $border['width'] ?? null,
139 );
140 }
141
142 $styles = gutenberg_style_engine_get_styles( array( 'border' => $border_styles ) );
143 $attributes = array();
144 if ( ! empty( $styles['classnames'] ) ) {
145 $attributes['class'] = $styles['classnames'];
146 }
147 if ( ! empty( $styles['css'] ) ) {
148 $attributes['style'] = $styles['css'];
149 }
150 return $attributes;
151 }
152
153 /**
154 * Registers the `core/avatar` block on the server.
155 *
156 * @since 6.0.0
157 */
158 function gutenberg_register_block_core_avatar() {
159 register_block_type_from_metadata(
160 __DIR__ . '/avatar',
161 array(
162 'render_callback' => 'gutenberg_render_block_core_avatar',
163 )
164 );
165 }
166 add_action( 'init', 'gutenberg_register_block_core_avatar', 20 );
167