-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfrontend.php
More file actions
81 lines (73 loc) · 2.33 KB
/
Copy pathfrontend.php
File metadata and controls
81 lines (73 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
/**
* Render block contents on frontend.
*
* @package Rave\InitiativeTracker
* @author R A Van Epps <rave@ravanepps.com>
* @since 2.0.0
*/
namespace Rave\InitiativeTracker;
/**
* Render initiative tracker block on frontend.
*
* @author R A Van Epps <rave@ravanepps.com>
* @since 1.0.0
*
* @param array $attributes Block attributes.
* @return string Block HTML to render.
*/
function render_block( array $attributes ) : string {
$id = $attributes['id'];
$players = $attributes['players'] ?? [];
$npcs = $attributes['npcs'] ?? [];
$class = 'wp-block-rave-initiative-tracker';
$characters = array_merge( $players, $npcs );
usort( $characters, function( $char1, $char2 ) {
$compare = strnatcmp( $char1['initiative'], $char2['initiative'] );
$compare *= -1; // Invert order.
if ( 0 !== $compare ) {
return $compare;
}
return strnatcmp( $char1['name'], $char2['name'] );
} );
ob_start();
?>
<div
class="<?php echo esc_attr( $class ); ?>"
data-id="<?php echo esc_attr( $id ); ?>"
data-players="<?php echo esc_attr( wp_json_encode( $players ) ); ?>"
data-npcs="<?php echo esc_attr( wp_json_encode( $npcs ) ); ?>"
data-post_id="<?php echo esc_attr( get_the_ID() ); ?>"
>
<?php if ( count( $characters ) > 0 ) : ?>
<div class="characters">
<div class="character-list">
<h2><?php esc_html_e( 'Characters', 'initiative-tracker' ); ?></h2>
<ul>
<?php
array_map( function( $character, $index ) {
$name = $character['name'] ?? '';
$player = $character['player'] ?? '';
$initiative = $character['initiative'] ?: 0;
?>
<li class="character <?php echo esc_attr( 0 === $index ? 'current' : '' ); ?>">
<span class="name"><?php echo esc_html( $name ); ?></span>
<?php if ( ! empty( $player ) ) : ?>
<span class="player"><?php echo esc_html( "( {$player} )" ); ?></span>
<?php endif; ?>
<span class="initiative"><?php echo esc_html( " — {$initiative}" ); ?></span>
</li>
<?php
}, $characters, array_keys( $characters ) );
?>
</ul>
<button type="button" class="next-character">
<?php esc_html_e( '» Next Character', 'initiative-tracker' ); ?>
</button>
</div>
</div>
<?php endif; ?>
</div>
<?php
return ob_get_clean();
}