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:
parent
b3958d342b
commit
81bb2d56e7
|
@ -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();
|
||||||
|
}
|
|
@ -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
|
* @since 6.5.0
|
||||||
*/
|
*/
|
||||||
|
@ -20,7 +20,6 @@ final class WP_Block_Bindings_Registry {
|
||||||
* Holds the registered block bindings sources, keyed by source identifier.
|
* Holds the registered block bindings sources, keyed by source identifier.
|
||||||
*
|
*
|
||||||
* @since 6.5.0
|
* @since 6.5.0
|
||||||
*
|
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
private $sources = array();
|
private $sources = array();
|
||||||
|
@ -34,7 +33,7 @@ final class WP_Block_Bindings_Registry {
|
||||||
private static $instance = null;
|
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
|
* 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
|
* 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 ) ) {
|
if ( ! is_string( $source_name ) ) {
|
||||||
_doing_it_wrong(
|
_doing_it_wrong(
|
||||||
__METHOD__,
|
__METHOD__,
|
||||||
__( 'Block binding source name must be a string.' ),
|
__( 'Block bindings source name must be a string.' ),
|
||||||
'6.5.0'
|
'6.5.0'
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
|
@ -75,7 +74,7 @@ final class WP_Block_Bindings_Registry {
|
||||||
if ( preg_match( '/[A-Z]+/', $source_name ) ) {
|
if ( preg_match( '/[A-Z]+/', $source_name ) ) {
|
||||||
_doing_it_wrong(
|
_doing_it_wrong(
|
||||||
__METHOD__,
|
__METHOD__,
|
||||||
__( 'Block binding source names must not contain uppercase characters.' ),
|
__( 'Block bindings source names must not contain uppercase characters.' ),
|
||||||
'6.5.0'
|
'6.5.0'
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
|
@ -85,7 +84,7 @@ final class WP_Block_Bindings_Registry {
|
||||||
if ( ! preg_match( $name_matcher, $source_name ) ) {
|
if ( ! preg_match( $name_matcher, $source_name ) ) {
|
||||||
_doing_it_wrong(
|
_doing_it_wrong(
|
||||||
__METHOD__,
|
__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'
|
'6.5.0'
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
|
@ -94,8 +93,8 @@ final class WP_Block_Bindings_Registry {
|
||||||
if ( $this->is_registered( $source_name ) ) {
|
if ( $this->is_registered( $source_name ) ) {
|
||||||
_doing_it_wrong(
|
_doing_it_wrong(
|
||||||
__METHOD__,
|
__METHOD__,
|
||||||
/* translators: %s: Block binding source name. */
|
/* translators: %s: Block bindings source name. */
|
||||||
sprintf( __( 'Block binding source "%s" already registered.' ), $source_name ),
|
sprintf( __( 'Block bindings source "%s" already registered.' ), $source_name ),
|
||||||
'6.5.0'
|
'6.5.0'
|
||||||
);
|
);
|
||||||
return false;
|
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
|
* @since 6.5.0
|
||||||
*
|
*
|
||||||
* @param string $source_name Block binding source name including namespace.
|
* @param string $source_name Block bindings source name including namespace.
|
||||||
* @return array|false The unregistred block binding source on success and `false` otherwise.
|
* @return array|false The unregistred block bindings source on success and `false` otherwise.
|
||||||
*/
|
*/
|
||||||
public function unregister( $source_name ) {
|
public function unregister( $source_name ) {
|
||||||
if ( ! $this->is_registered( $source_name ) ) {
|
if ( ! $this->is_registered( $source_name ) ) {
|
||||||
_doing_it_wrong(
|
_doing_it_wrong(
|
||||||
__METHOD__,
|
__METHOD__,
|
||||||
/* translators: %s: Block binding source name. */
|
/* translators: %s: Block bindings source name. */
|
||||||
sprintf( __( 'Block binding "%s" not found.' ), $source_name ),
|
sprintf( __( 'Block binding "%s" not found.' ), $source_name ),
|
||||||
'6.5.0'
|
'6.5.0'
|
||||||
);
|
);
|
||||||
|
@ -153,7 +152,7 @@ final class WP_Block_Bindings_Registry {
|
||||||
* @since 6.5.0
|
* @since 6.5.0
|
||||||
*
|
*
|
||||||
* @param string $source_name The name of the source.
|
* @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 ) {
|
public function get_registered( $source_name ) {
|
||||||
if ( ! $this->is_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
|
* @since 6.5.0
|
||||||
*
|
*
|
||||||
* @param string $source_name The name of the source.
|
* @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 ) {
|
public function is_registered( $source_name ) {
|
||||||
return isset( $this->sources[ $source_name ] );
|
return isset( $this->sources[ $source_name ] );
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
*
|
*
|
||||||
* @global string $wp_version
|
* @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.
|
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.
|
||||||
|
|
|
@ -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-posts.php';
|
||||||
require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-taxonomies.php';
|
require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-taxonomies.php';
|
||||||
require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-users.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-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-type.php';
|
||||||
require ABSPATH . WPINC . '/class-wp-block-pattern-categories-registry.php';
|
require ABSPATH . WPINC . '/class-wp-block-pattern-categories-registry.php';
|
||||||
require ABSPATH . WPINC . '/class-wp-block-patterns-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-block-parser.php';
|
||||||
require ABSPATH . WPINC . '/class-wp-classic-to-block-menu-converter.php';
|
require ABSPATH . WPINC . '/class-wp-classic-to-block-menu-converter.php';
|
||||||
require ABSPATH . WPINC . '/class-wp-navigation-fallback.php';
|
require ABSPATH . WPINC . '/class-wp-navigation-fallback.php';
|
||||||
|
require ABSPATH . WPINC . '/block-bindings.php';
|
||||||
require ABSPATH . WPINC . '/blocks.php';
|
require ABSPATH . WPINC . '/blocks.php';
|
||||||
require ABSPATH . WPINC . '/blocks/index.php';
|
require ABSPATH . WPINC . '/blocks/index.php';
|
||||||
require ABSPATH . WPINC . '/block-editor.php';
|
require ABSPATH . WPINC . '/block-editor.php';
|
||||||
|
|
Loading…
Reference in New Issue