Editor: Add Block Bindings API helpers

It is part of the sync from the Gutenberg plugin that introduces the registry for block binding sources required for the new Block Bindings API: WordPress/gutenberg#54536.

See #60282.
Follow-up [57373].
Props czapla, artemiosans, santosguillamot, sc0ttkclark, lgladdy, talldanwp, swissspidy, youknowriad, fabiankaegy, mukesh27.


Built from https://develop.svn.wordpress.org/trunk@57375


git-svn-id: http://core.svn.wordpress.org/trunk@56881 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
gziolo 2024-01-29 13:08:16 +00:00
parent b3958d342b
commit 81bb2d56e7
4 changed files with 83 additions and 17 deletions

View File

@ -0,0 +1,66 @@
<?php
/**
* Block Bindings API
*
* Contains functions for managing block bindings in WordPress.
*
* @package WordPress
* @subpackage Block Bindings
* @since 6.5.0
*/
/**
* Registers a new block bindings source.
*
* Sources are used to override block's original attributes with a value
* coming from the source. Once a source is registered, it can be used by a
* block by setting its `metadata.bindings` attribute to a value that refers
* to the source.
*
* @since 6.5.0
*
* @param string $source_name The name of the source.
* @param array $source_properties {
* The array of arguments that are used to register a source.
*
* @type string $label The label of the source.
* @type callback $get_value_callback A callback executed when the source is processed during block rendering.
* The callback should have the following signature:
*
* `function ($source_args, $block_instance,$attribute_name): mixed`
* - @param array $source_args Array containing source arguments
* used to look up the override value,
* i.e. {"key": "foo"}.
* - @param WP_Block $block_instance The block instance.
* - @param string $attribute_name The name of an attribute .
* The callback has a mixed return type; it may return a string to override
* the block's original value, null, false to remove an attribute, etc.
* }
* @return array|false Source when the registration was successful, or `false` on failure.
*/
function register_block_bindings_source( $source_name, array $source_properties ) {
return WP_Block_Bindings_Registry::get_instance()->register( $source_name, $source_properties );
}
/**
* Unregisters a block bindings source.
*
* @since 6.5.0
*
* @param string $source_name Block bindings source name including namespace.
* @return array|false The unregistred block bindings source on success and `false` otherwise.
*/
function unregister_block_bindings_source( $source_name ) {
return WP_Block_Bindings_Registry::get_instance()->unregister( $source_name );
}
/**
* Retrieves the list of all registered block bindings sources.
*
* @since 6.5.0
*
* @return array The array of registered block bindings sources.
*/
function get_all_registered_block_bindings_sources() {
return WP_Block_Bindings_Registry::get_instance()->get_all_registered();
}

View File

@ -10,7 +10,7 @@
*/
/**
* Core class used for interacting with block binding sources.
* Core class used for interacting with block bindings sources.
*
* @since 6.5.0
*/
@ -20,7 +20,6 @@ final class WP_Block_Bindings_Registry {
* Holds the registered block bindings sources, keyed by source identifier.
*
* @since 6.5.0
*
* @var array
*/
private $sources = array();
@ -34,7 +33,7 @@ final class WP_Block_Bindings_Registry {
private static $instance = null;
/**
* Registers a new block binding source.
* Registers a new block bindings source.
*
* Sources are used to override block's original attributes with a value
* coming from the source. Once a source is registered, it can be used by a
@ -66,7 +65,7 @@ final class WP_Block_Bindings_Registry {
if ( ! is_string( $source_name ) ) {
_doing_it_wrong(
__METHOD__,
__( 'Block binding source name must be a string.' ),
__( 'Block bindings source name must be a string.' ),
'6.5.0'
);
return false;
@ -75,7 +74,7 @@ final class WP_Block_Bindings_Registry {
if ( preg_match( '/[A-Z]+/', $source_name ) ) {
_doing_it_wrong(
__METHOD__,
__( 'Block binding source names must not contain uppercase characters.' ),
__( 'Block bindings source names must not contain uppercase characters.' ),
'6.5.0'
);
return false;
@ -85,7 +84,7 @@ final class WP_Block_Bindings_Registry {
if ( ! preg_match( $name_matcher, $source_name ) ) {
_doing_it_wrong(
__METHOD__,
__( 'Block binding source names must contain a namespace prefix. Example: my-plugin/my-custom-source' ),
__( 'Block bindings source names must contain a namespace prefix. Example: my-plugin/my-custom-source' ),
'6.5.0'
);
return false;
@ -94,8 +93,8 @@ final class WP_Block_Bindings_Registry {
if ( $this->is_registered( $source_name ) ) {
_doing_it_wrong(
__METHOD__,
/* translators: %s: Block binding source name. */
sprintf( __( 'Block binding source "%s" already registered.' ), $source_name ),
/* translators: %s: Block bindings source name. */
sprintf( __( 'Block bindings source "%s" already registered.' ), $source_name ),
'6.5.0'
);
return false;
@ -112,18 +111,18 @@ final class WP_Block_Bindings_Registry {
}
/**
* Unregisters a block binding source.
* Unregisters a block bindings source.
*
* @since 6.5.0
*
* @param string $source_name Block binding source name including namespace.
* @return array|false The unregistred block binding source on success and `false` otherwise.
* @param string $source_name Block bindings source name including namespace.
* @return array|false The unregistred block bindings source on success and `false` otherwise.
*/
public function unregister( $source_name ) {
if ( ! $this->is_registered( $source_name ) ) {
_doing_it_wrong(
__METHOD__,
/* translators: %s: Block binding source name. */
/* translators: %s: Block bindings source name. */
sprintf( __( 'Block binding "%s" not found.' ), $source_name ),
'6.5.0'
);
@ -153,7 +152,7 @@ final class WP_Block_Bindings_Registry {
* @since 6.5.0
*
* @param string $source_name The name of the source.
* @return array|null The registered block binding source, or `null` if it is not registered.
* @return array|null The registered block bindings source, or `null` if it is not registered.
*/
public function get_registered( $source_name ) {
if ( ! $this->is_registered( $source_name ) ) {
@ -164,12 +163,12 @@ final class WP_Block_Bindings_Registry {
}
/**
* Checks if a block binding source is registered.
* Checks if a block bindings source is registered.
*
* @since 6.5.0
*
* @param string $source_name The name of the source.
* @return bool `true` if the block binding source is registered, `false` otherwise.
* @return bool `true` if the block bindings source is registered, `false` otherwise.
*/
public function is_registered( $source_name ) {
return isset( $this->sources[ $source_name ] );

View File

@ -16,7 +16,7 @@
*
* @global string $wp_version
*/
$wp_version = '6.5-alpha-57374';
$wp_version = '6.5-alpha-57375';
/**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.

View File

@ -329,8 +329,8 @@ require ABSPATH . WPINC . '/sitemaps/class-wp-sitemaps-stylesheet.php';
require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-posts.php';
require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-taxonomies.php';
require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-users.php';
require ABSPATH . WPINC . '/class-wp-block-editor-context.php';
require ABSPATH . WPINC . '/class-wp-block-bindings-registry.php';
require ABSPATH . WPINC . '/class-wp-block-editor-context.php';
require ABSPATH . WPINC . '/class-wp-block-type.php';
require ABSPATH . WPINC . '/class-wp-block-pattern-categories-registry.php';
require ABSPATH . WPINC . '/class-wp-block-patterns-registry.php';
@ -343,6 +343,7 @@ require ABSPATH . WPINC . '/class-wp-block-parser-frame.php';
require ABSPATH . WPINC . '/class-wp-block-parser.php';
require ABSPATH . WPINC . '/class-wp-classic-to-block-menu-converter.php';
require ABSPATH . WPINC . '/class-wp-navigation-fallback.php';
require ABSPATH . WPINC . '/block-bindings.php';
require ABSPATH . WPINC . '/blocks.php';
require ABSPATH . WPINC . '/blocks/index.php';
require ABSPATH . WPINC . '/block-editor.php';