- Timestamp:
- 07/16/2024 09:42:38 AM (10 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/wp-includes/interactivity-api/class-wp-interactivity-api.php
r58327 r58729 193 193 * 194 194 * @since 6.5.0 195 * 196 * @deprecated 6.7.0 Client data passing is handled by the {@see "script_module_data_{$module_id}"} filter. 195 197 */ 196 198 public function print_client_interactivity_data() { 199 _deprecated_function( __METHOD__, '6.7.0' ); 200 } 201 202 /** 203 * Set client-side interactivity data. 204 * 205 * Once in the browser, the state will be parsed and used to hydrate the client-side 206 * interactivity stores and the configuration will be available using a `getConfig` utility. 207 * 208 * @since 6.7.0 209 * 210 * @param array $data Data to filter. 211 * @return array Data for the Interactivity API script module. 212 */ 213 public function filter_script_module_interactivity_data( array $data ): array { 197 214 if ( empty( $this->state_data ) && empty( $this->config_data ) ) { 198 return; 199 } 200 201 $interactivity_data = array(); 215 return $data; 216 } 202 217 203 218 $config = array(); … … 208 223 } 209 224 if ( ! empty( $config ) ) { 210 $ interactivity_data['config'] = $config;225 $data['config'] = $config; 211 226 } 212 227 … … 218 233 } 219 234 if ( ! empty( $state ) ) { 220 $interactivity_data['state'] = $state; 221 } 222 223 if ( ! empty( $interactivity_data ) ) { 224 /* 225 * This data will be printed as JSON inside a script tag like this: 226 * <script type="application/json"></script> 227 * 228 * A script tag must be closed by a sequence beginning with `</`. It's impossible to 229 * close a script tag without using `<`. We ensure that `<` is escaped and `/` can 230 * remain unescaped, so `</script>` will be printed as `\u003C/script\u00E3`. 231 * 232 * - JSON_HEX_TAG: All < and > are converted to \u003C and \u003E. 233 * - JSON_UNESCAPED_SLASHES: Don't escape /. 234 * 235 * If the page will use UTF-8 encoding, it's safe to print unescaped unicode: 236 * 237 * - JSON_UNESCAPED_UNICODE: Encode multibyte Unicode characters literally (instead of as `\uXXXX`). 238 * - JSON_UNESCAPED_LINE_TERMINATORS: The line terminators are kept unescaped when 239 * JSON_UNESCAPED_UNICODE is supplied. It uses the same behaviour as it was 240 * before PHP 7.1 without this constant. Available as of PHP 7.1.0. 241 * 242 * The JSON specification requires encoding in UTF-8, so if the generated HTML page 243 * is not encoded in UTF-8 then it's not safe to include those literals. They must 244 * be escaped to avoid encoding issues. 245 * 246 * @see https://www.rfc-editor.org/rfc/rfc8259.html for details on encoding requirements. 247 * @see https://www.php.net/manual/en/json.constants.php for details on these constants. 248 * @see https://html.spec.whatwg.org/#script-data-state for details on script tag parsing. 249 */ 250 $json_encode_flags = JSON_HEX_TAG | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_LINE_TERMINATORS; 251 if ( ! is_utf8_charset() ) { 252 $json_encode_flags = JSON_HEX_TAG | JSON_UNESCAPED_SLASHES; 253 } 254 255 wp_print_inline_script_tag( 256 wp_json_encode( 257 $interactivity_data, 258 $json_encode_flags 259 ), 260 array( 261 'type' => 'application/json', 262 'id' => 'wp-interactivity-data', 263 ) 264 ); 265 } 235 $data['state'] = $state; 236 } 237 238 return $data; 266 239 } 267 240 … … 330 303 * 331 304 * @since 6.5.0 305 * @since 6.7.0 Use the {@see "script_module_data_{$module_id}"} filter to pass client-side data. 332 306 */ 333 307 public function add_hooks() { 334 308 add_action( 'wp_enqueue_scripts', array( $this, 'register_script_modules' ) ); 335 add_action( 'wp_footer', array( $this, 'print_client_interactivity_data' ) );336 337 309 add_action( 'admin_enqueue_scripts', array( $this, 'register_script_modules' ) ); 338 add_action( 'admin_print_footer_scripts', array( $this, 'print_client_interactivity_data' ) ); 310 311 add_filter( 'script_module_data_@wordpress/interactivity', array( $this, 'filter_script_module_interactivity_data' ) ); 339 312 } 340 313
Note: See TracChangeset
for help on using the changeset viewer.