mirrored from git://develop.git.wordpress.org/
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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. git-svn-id: https://develop.svn.wordpress.org/trunk@57375 602fd350-edb4-49c9-b593-d223f7449a82
- Loading branch information
Showing
5 changed files
with
169 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
<?php | ||
/** | ||
* Tests for Block Bindings API helper functions. | ||
* | ||
* @package WordPress | ||
* @subpackage Blocks | ||
* @since 6.5.0 | ||
* | ||
* @group blocks | ||
* @group block-bindings | ||
*/ | ||
class Tests_Block_Bindings_Register extends WP_UnitTestCase { | ||
|
||
const TEST_SOURCE_NAME = 'test/source'; | ||
const TEST_SOURCE_PROPERTIES = array( | ||
'label' => 'Test source', | ||
); | ||
|
||
/** | ||
* Tear down after each test. | ||
* | ||
* @since 6.5.0 | ||
*/ | ||
public function tear_down() { | ||
foreach ( get_all_registered_block_bindings_sources() as $source_name => $source_properties ) { | ||
if ( str_starts_with( $source_name, 'test/' ) ) { | ||
unregister_block_bindings_source( $source_name ); | ||
} | ||
unregister_block_bindings_source( $source_name ); | ||
} | ||
|
||
parent::tear_down(); | ||
} | ||
|
||
/** | ||
* Should find all registered sources. | ||
* | ||
* @ticket 60282 | ||
* | ||
* @covers ::register_block_bindings_source | ||
* @covers ::get_all_registered_block_bindings_sources | ||
*/ | ||
public function test_get_all_registered() { | ||
$source_one_name = 'test/source-one'; | ||
$source_one_properties = self::TEST_SOURCE_PROPERTIES; | ||
register_block_bindings_source( $source_one_name, $source_one_properties ); | ||
|
||
$source_two_name = 'test/source-two'; | ||
$source_two_properties = self::TEST_SOURCE_PROPERTIES; | ||
register_block_bindings_source( $source_two_name, $source_two_properties ); | ||
|
||
$source_three_name = 'test/source-three'; | ||
$source_three_properties = self::TEST_SOURCE_PROPERTIES; | ||
register_block_bindings_source( $source_three_name, $source_three_properties ); | ||
|
||
$expected = array( | ||
$source_one_name => array_merge( array( 'name' => $source_one_name ), $source_one_properties ), | ||
$source_two_name => array_merge( array( 'name' => $source_two_name ), $source_two_properties ), | ||
$source_three_name => array_merge( array( 'name' => $source_three_name ), $source_three_properties ), | ||
); | ||
|
||
$registered = get_all_registered_block_bindings_sources(); | ||
$this->assertSame( $expected, $registered ); | ||
} | ||
|
||
/** | ||
* Should unregister existing block binding source. | ||
* | ||
* @ticket 60282 | ||
* | ||
* @covers ::register_block_bindings_source | ||
* @covers ::unregister_block_bindings_source | ||
*/ | ||
public function test_unregister_block_source() { | ||
register_block_bindings_source( self::TEST_SOURCE_NAME, self::TEST_SOURCE_PROPERTIES ); | ||
|
||
$result = unregister_block_bindings_source( self::TEST_SOURCE_NAME ); | ||
$this->assertSame( | ||
array_merge( | ||
array( 'name' => self::TEST_SOURCE_NAME ), | ||
self::TEST_SOURCE_PROPERTIES | ||
), | ||
$result | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters