PluginProbe
Gutenberg / 22.3.0
Gutenberg v22.3.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 / lib / experimental / blocks.php

blocks.php in Gutenberg 22.3.0, at lib/experimental/blocks.php

139 lines 4.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Temporary compatibility shims for block APIs present in Gutenberg.
4 *
5 * @package gutenberg
6 */
7
8 if ( ! function_exists( 'wp_enqueue_block_view_script' ) ) {
9 /**
10 * Enqueues a frontend script for a specific block.
11 *
12 * Scripts enqueued using this function will only get printed
13 * when the block gets rendered on the frontend.
14 *
15 * @since 6.2.0
16 *
17 * @param string $block_name The block name, including namespace.
18 * @param array $args An array of arguments [handle,src,deps,ver,media,textdomain].
19 *
20 * @return void
21 */
22 function wp_enqueue_block_view_script( $block_name, $args ) {
23 $args = wp_parse_args(
24 $args,
25 array(
26 'handle' => '',
27 'src' => '',
28 'deps' => array(),
29 'ver' => false,
30 'in_footer' => false,
31
32 // Additional args to allow translations for the script's textdomain.
33 'textdomain' => '',
34 )
35 );
36
37 /**
38 * Callback function to register and enqueue scripts.
39 *
40 * @param string $content When the callback is used for the render_block filter,
41 * the content needs to be returned so the function parameter
42 * is to ensure the content exists.
43 * @return string Block content.
44 */
45 $callback = static function ( $content, $block ) use ( $args, $block_name ) {
46
47 // Sanity check.
48 if ( empty( $block['blockName'] ) || $block_name !== $block['blockName'] ) {
49 return $content;
50 }
51
52 // Register the stylesheet.
53 if ( ! empty( $args['src'] ) ) {
54 wp_register_script( $args['handle'], $args['src'], $args['deps'], $args['ver'], $args['in_footer'] );
55 }
56
57 // Enqueue the stylesheet.
58 wp_enqueue_script( $args['handle'] );
59
60 // If a textdomain is defined, use it to set the script translations.
61 if ( ! empty( $args['textdomain'] ) && in_array( 'wp-i18n', $args['deps'], true ) ) {
62 wp_set_script_translations( $args['handle'], $args['textdomain'], $args['domainpath'] );
63 }
64
65 return $content;
66 };
67
68 /*
69 * The filter's callback here is an anonymous function because
70 * using a named function in this case is not possible.
71 *
72 * The function cannot be unhooked, however, users are still able
73 * to dequeue the script registered/enqueued by the callback
74 * which is why in this case, using an anonymous function
75 * was deemed acceptable.
76 */
77 add_filter( 'render_block', $callback, 10, 2 );
78 }
79 }
80
81 /**
82 * Registers a new block style for one or more block types.
83 *
84 * WP_Block_Styles_Registry was marked as `final` in core so it cannot be
85 * updated via Gutenberg to allow registration of a style across multiple
86 * block types as well as with an optional style object. This function will
87 * support the desired functionality until the styles registry can be updated
88 * in core.
89 *
90 * @param string|array $block_name Block type name including namespace or array of namespaced block type names.
91 * @param array $style_properties Array containing the properties of the style name, label,
92 * style_handle (name of the stylesheet to be enqueued),
93 * inline_style (string containing the CSS to be added),
94 * style_data (theme.json-like object to generate CSS from).
95 *
96 * @return bool True if all block styles were registered with success and false otherwise.
97 */
98 function gutenberg_register_block_style( $block_name, $style_properties ) {
99 if ( ! is_string( $block_name ) && ! is_array( $block_name ) ) {
100 _doing_it_wrong(
101 __METHOD__,
102 __( 'Block name must be a string or array.', 'gutenberg' ),
103 '6.6.0'
104 );
105
106 return false;
107 }
108
109 $block_names = is_string( $block_name ) ? array( $block_name ) : $block_name;
110 $result = true;
111
112 foreach ( $block_names as $name ) {
113 if ( ! WP_Block_Styles_Registry::get_instance()->register( $name, $style_properties ) ) {
114 $result = false;
115 }
116 }
117
118 return $result;
119 }
120
121 /**
122 * Additional data to expose to the view script module in the Form block.
123 */
124 function gutenberg_block_core_form_view_script_module( $data ) {
125 if ( ! gutenberg_is_experiment_enabled( 'gutenberg-form-blocks' ) ) {
126 return $data;
127 }
128
129 $data['nonce'] = wp_create_nonce( 'wp-block-form' );
130 $data['ajaxUrl'] = admin_url( 'admin-ajax.php' );
131 $data['action'] = 'wp_block_form_email_submit';
132
133 return $data;
134 }
135 add_filter(
136 'script_module_data_@wordpress/block-library/form/view',
137 'gutenberg_block_core_form_view_script_module'
138 );
139