PluginProbe
Gutenberg / 18.6.0
Gutenberg v18.6.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 18.6.0, at lib/experimental/blocks.php

123 lines 3.9 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 * WP_Block_Styles_Registry was marked as `final` in core so it cannot be
83 * updated via Gutenberg to allow registration of a style across multiple
84 * block types as well as with an optional style object. This function will
85 * support the desired functionality until the styles registry can be updated
86 * in core.
87 */
88 if ( ! function_exists( 'gutenberg_register_block_style' ) ) {
89 /**
90 * Registers a new block style for one or more block types.
91 *
92 * @param string|array $block_name Block type name including namespace or array of namespaced block type names.
93 * @param array $style_properties Array containing the properties of the style name, label,
94 * style_handle (name of the stylesheet to be enqueued),
95 * inline_style (string containing the CSS to be added),
96 * style_data (theme.json-like object to generate CSS from).
97 *
98 * @return bool True if all block styles were registered with success and false otherwise.
99 */
100 function gutenberg_register_block_style( $block_name, $style_properties ) {
101 if ( ! is_string( $block_name ) && ! is_array( $block_name ) ) {
102 _doing_it_wrong(
103 __METHOD__,
104 __( 'Block name must be a string or array.', 'gutenberg' ),
105 '6.6.0'
106 );
107
108 return false;
109 }
110
111 $block_names = is_string( $block_name ) ? array( $block_name ) : $block_name;
112 $result = true;
113
114 foreach ( $block_names as $name ) {
115 if ( ! WP_Block_Styles_Registry::get_instance()->register( $name, $style_properties ) ) {
116 $result = false;
117 }
118 }
119
120 return $result;
121 }
122 }
123