mirror of
https://github.com/WordPress/WordPress.git
synced 2024-12-23 17:48:01 +01:00
b23d47efe7
Integrates the directives processing into the WP_Block class. It removes the overhead of running additional hooks when rendering blocks and simplifies the way we detect whether the directive processing should run on an interactive region of the produced final HTML for the blocks. Introduces `interactivity_process_directives` filter to offer a way to opt out from directives processing. It's needed in Gutenberg: https://github.com/WordPress/gutenberg/pull/62095. Props gziolo, cbravobernal. Fixes #61185. Built from https://develop.svn.wordpress.org/trunk@58234 git-svn-id: http://core.svn.wordpress.org/trunk@57697 1a063a9b-81f0-0310-95a4-ce76da25c4cd
106 lines
3.7 KiB
PHP
106 lines
3.7 KiB
PHP
<?php
|
|
/**
|
|
* Interactivity API: Functions and hooks
|
|
*
|
|
* @package WordPress
|
|
* @subpackage Interactivity API
|
|
* @since 6.5.0
|
|
*/
|
|
|
|
/**
|
|
* Retrieves the main WP_Interactivity_API instance.
|
|
*
|
|
* It provides access to the WP_Interactivity_API instance, creating one if it
|
|
* doesn't exist yet.
|
|
*
|
|
* @since 6.5.0
|
|
*
|
|
* @global WP_Interactivity_API $wp_interactivity
|
|
*
|
|
* @return WP_Interactivity_API The main WP_Interactivity_API instance.
|
|
*/
|
|
function wp_interactivity(): WP_Interactivity_API {
|
|
global $wp_interactivity;
|
|
if ( ! ( $wp_interactivity instanceof WP_Interactivity_API ) ) {
|
|
$wp_interactivity = new WP_Interactivity_API();
|
|
}
|
|
return $wp_interactivity;
|
|
}
|
|
|
|
/**
|
|
* Processes the interactivity directives contained within the HTML content
|
|
* and updates the markup accordingly.
|
|
*
|
|
* @since 6.5.0
|
|
*
|
|
* @param string $html The HTML content to process.
|
|
* @return string The processed HTML content. It returns the original content when the HTML contains unbalanced tags.
|
|
*/
|
|
function wp_interactivity_process_directives( string $html ): string {
|
|
return wp_interactivity()->process_directives( $html );
|
|
}
|
|
|
|
/**
|
|
* Gets and/or sets the initial state of an Interactivity API store for a
|
|
* given namespace.
|
|
*
|
|
* If state for that store namespace already exists, it merges the new
|
|
* provided state with the existing one.
|
|
*
|
|
* @since 6.5.0
|
|
*
|
|
* @param string $store_namespace The unique store namespace identifier.
|
|
* @param array $state Optional. The array that will be merged with the existing state for the specified
|
|
* store namespace.
|
|
* @return array The state for the specified store namespace. This will be the updated state if a $state argument was
|
|
* provided.
|
|
*/
|
|
function wp_interactivity_state( string $store_namespace, array $state = array() ): array {
|
|
return wp_interactivity()->state( $store_namespace, $state );
|
|
}
|
|
|
|
/**
|
|
* Gets and/or sets the configuration of the Interactivity API for a given
|
|
* store namespace.
|
|
*
|
|
* If configuration for that store namespace exists, it merges the new
|
|
* provided configuration with the existing one.
|
|
*
|
|
* @since 6.5.0
|
|
*
|
|
* @param string $store_namespace The unique store namespace identifier.
|
|
* @param array $config Optional. The array that will be merged with the existing configuration for the
|
|
* specified store namespace.
|
|
* @return array The configuration for the specified store namespace. This will be the updated configuration if a
|
|
* $config argument was provided.
|
|
*/
|
|
function wp_interactivity_config( string $store_namespace, array $config = array() ): array {
|
|
return wp_interactivity()->config( $store_namespace, $config );
|
|
}
|
|
|
|
/**
|
|
* Generates a `data-wp-context` directive attribute by encoding a context
|
|
* array.
|
|
*
|
|
* This helper function simplifies the creation of `data-wp-context` directives
|
|
* by providing a way to pass an array of data, which encodes into a JSON string
|
|
* safe for direct use as a HTML attribute value.
|
|
*
|
|
* Example:
|
|
*
|
|
* <div <?php echo wp_interactivity_data_wp_context( array( 'isOpen' => true, 'count' => 0 ) ); ?>>
|
|
*
|
|
* @since 6.5.0
|
|
*
|
|
* @param array $context The array of context data to encode.
|
|
* @param string $store_namespace Optional. The unique store namespace identifier.
|
|
* @return string A complete `data-wp-context` directive with a JSON encoded value representing the context array and
|
|
* the store namespace if specified.
|
|
*/
|
|
function wp_interactivity_data_wp_context( array $context, string $store_namespace = '' ): string {
|
|
return 'data-wp-context=\'' .
|
|
( $store_namespace ? $store_namespace . '::' : '' ) .
|
|
( empty( $context ) ? '{}' : wp_json_encode( $context, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP ) ) .
|
|
'\'';
|
|
}
|