File "blocks.php"

Full Path: /home/pumpbmko/public_html/wp-content/plugins/gutenberg/lib/experimental/blocks.php
File size: 3.95 KB
MIME-type: text/x-php
Charset: utf-8

<?php
/**
 * Temporary compatibility shims for block APIs present in Gutenberg.
 *
 * @package gutenberg
 */

if ( ! function_exists( 'wp_enqueue_block_view_script' ) ) {
	/**
	 * Enqueues a frontend script for a specific block.
	 *
	 * Scripts enqueued using this function will only get printed
	 * when the block gets rendered on the frontend.
	 *
	 * @since 6.2.0
	 *
	 * @param string $block_name The block name, including namespace.
	 * @param array  $args       An array of arguments [handle,src,deps,ver,media,textdomain].
	 *
	 * @return void
	 */
	function wp_enqueue_block_view_script( $block_name, $args ) {
		$args = wp_parse_args(
			$args,
			array(
				'handle'     => '',
				'src'        => '',
				'deps'       => array(),
				'ver'        => false,
				'in_footer'  => false,

				// Additional args to allow translations for the script's textdomain.
				'textdomain' => '',
			)
		);

		/**
		 * Callback function to register and enqueue scripts.
		 *
		 * @param string $content When the callback is used for the render_block filter,
		 *                        the content needs to be returned so the function parameter
		 *                        is to ensure the content exists.
		 * @return string Block content.
		 */
		$callback = static function ( $content, $block ) use ( $args, $block_name ) {

			// Sanity check.
			if ( empty( $block['blockName'] ) || $block_name !== $block['blockName'] ) {
				return $content;
			}

			// Register the stylesheet.
			if ( ! empty( $args['src'] ) ) {
				wp_register_script( $args['handle'], $args['src'], $args['deps'], $args['ver'], $args['in_footer'] );
			}

			// Enqueue the stylesheet.
			wp_enqueue_script( $args['handle'] );

			// If a textdomain is defined, use it to set the script translations.
			if ( ! empty( $args['textdomain'] ) && in_array( 'wp-i18n', $args['deps'], true ) ) {
				wp_set_script_translations( $args['handle'], $args['textdomain'], $args['domainpath'] );
			}

			return $content;
		};

		/*
		 * The filter's callback here is an anonymous function because
		 * using a named function in this case is not possible.
		 *
		 * The function cannot be unhooked, however, users are still able
		 * to dequeue the script registered/enqueued by the callback
		 * which is why in this case, using an anonymous function
		 * was deemed acceptable.
		 */
		add_filter( 'render_block', $callback, 10, 2 );
	}
}

/*
 * WP_Block_Styles_Registry was marked as `final` in core so it cannot be
 * updated via Gutenberg to allow registration of a style across multiple
 * block types as well as with an optional style object. This function will
 * support the desired functionality until the styles registry can be updated
 * in core.
 */
if ( ! function_exists( 'gutenberg_register_block_style' ) ) {
	/**
	 * Registers a new block style for one or more block types.
	 *
	 * @param string|array $block_name       Block type name including namespace or array of namespaced block type names.
	 * @param array        $style_properties Array containing the properties of the style name, label,
	 *                                       style_handle (name of the stylesheet to be enqueued),
	 *                                       inline_style (string containing the CSS to be added),
	 *                                       style_data (theme.json-like object to generate CSS from).
	 *
	 * @return bool True if all block styles were registered with success and false otherwise.
	 */
	function gutenberg_register_block_style( $block_name, $style_properties ) {
		if ( ! is_string( $block_name ) && ! is_array( $block_name ) ) {
			_doing_it_wrong(
				__METHOD__,
				__( 'Block name must be a string or array.', 'gutenberg' ),
				'6.6.0'
			);

			return false;
		}

		$block_names = is_string( $block_name ) ? array( $block_name ) : $block_name;
		$result      = true;

		foreach ( $block_names as $name ) {
			if ( ! WP_Block_Styles_Registry::get_instance()->register( $name, $style_properties ) ) {
				$result = false;
			}
		}

		return $result;
	}
}