PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.3.1
Presto Player v4.3.1
4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / inc / Services / Blocks / PopupTriggerService.php
presto-player / inc / Services / Blocks Last commit date
PopupTriggerService.php 10 months ago VimeoBlockService.php 1 year ago YoutubeBlockService.php 1 year ago
PopupTriggerService.php
95 lines
1 <?php
2 /**
3 * Popup Trigger Service.
4 *
5 * @package PrestoPlayer\Services\Blocks
6 */
7
8 namespace PrestoPlayer\Services\Blocks;
9
10 /**
11 * Service to extend core/button blocks with popup trigger functionality.
12 */
13 class PopupTriggerService {
14 /**
15 * Register the service.
16 */
17 public function register() {
18 add_filter( 'render_block_core/button', array( $this, 'render_button_with_popup_directives' ), 10, 2 );
19 add_filter( 'register_block_type_args', array( $this, 'add_popup_trigger_attribute' ), 10, 2 );
20 }
21
22 /**
23 * Add popup directives to core/button blocks that have the popup trigger attribute set.
24 *
25 * @param string $block_content The block content.
26 * @param array $block The block data.
27 * @return string The modified block content.
28 */
29 public function render_button_with_popup_directives( $block_content, $block ) {
30 // Check if this button has the popup trigger attribute set to true.
31 $popup_trigger = $block['attrs']['prestoPopupTrigger'] ?? false;
32 if ( ! $popup_trigger ) {
33 return $block_content;
34 }
35
36 // Add the popup directives to the button content since it's a button trigger.
37 return $this->add_popup_directives_to_button( $block_content );
38 }
39
40 /**
41 * Add popup trigger attribute to core/button blocks.
42 *
43 * @param array $args Block type registration arguments.
44 * @param string $block_type Block type name.
45 * @return array Modified block type arguments.
46 */
47 public function add_popup_trigger_attribute( $args, $block_type ) {
48
49 // Only modify core/button blocks.
50 if ( 'core/button' !== $block_type ) {
51 return $args;
52 }
53
54 // Add the popup trigger attribute.
55 $args['attributes']['prestoPopupTrigger'] = array(
56 'type' => 'boolean',
57 'default' => false,
58 );
59
60 return $args;
61 }
62
63 /**
64 * Add popup directives to button content using WP_HTML_Tag_Processor.
65 * Uses the same directives as PopupTriggerBlock.
66 *
67 * @param string $content The button content.
68 * @return string The modified content with popup directives.
69 */
70 private function add_popup_directives_to_button( $content ) {
71 if ( empty( $content ) ) {
72 return $content;
73 }
74
75 $processor = new \WP_HTML_Tag_Processor( $content );
76
77 // Find the anchor tag within the button.
78 if ( $processor->next_tag( array( 'tag_name' => 'a' ) ) ) {
79 // Add the same popup directives as PopupTriggerBlock.
80 $processor->set_attribute( 'data-wp-on--click', 'actions.showPopup' );
81 $processor->set_attribute( 'data-wp-init', 'callbacks.initTriggerButton' );
82 $processor->set_attribute( 'tabindex', '0' );
83 $processor->set_attribute( 'data-wp-on--keydown', 'actions.handleKeydown' );
84 $processor->set_attribute( 'aria-label', __( 'Open Presto Popup dialog', 'presto-player' ) );
85 $processor->set_attribute( 'aria-haspopup', 'dialog' );
86 $processor->set_attribute( 'data-wp-bind--aria-expanded', 'state.overlayEnabled' );
87 $processor->set_attribute( 'data-wp-on-document--keydown', 'callbacks.handleKeydown' );
88
89 return $processor->get_updated_html();
90 }
91
92 return $content;
93 }
94 }
95