Make WordPress Core

Changeset 59130


Ignore:
Timestamp:
09/30/2024 04:16:44 PM (2 years ago)
Author:
czapla
Message:

Interactivity API: Move interactivity-router i18n strings to Script Module data.

Moves the 'loading' and 'loaded' i18n strings for the interactivity-router to the script module data via the script_module_data_@wordpress/interactivity-router filter.

Key changes:

  • Add the filter_script_module_interactivity_router_data() method, hooked into the script_module_data_@wordpress/interactivity-router filter, to set the i18n data with the 'loading' and 'loaded' messages.
  • Rename the print_router_loading_and_screen_reader_markup() method to print_router_markup() and remove the screen reader markup from it because it's no longer needed.
  • Deprecate the print_router_loading_and_screen_reader_markup() method.
  • Remove the loading and loaded strings from the core/router store state because they're no longer needed.
  • Initialize the core/router store with a minimal navigation object to prevent errors in the interactivity-router script module when the store is not properly initialized.
  • Update corresponding unit tests to reflect these changes.

This change ensures that the interactivity-router i18n messages are localized in a single place and removes the need to initialize them in the core/router store state.

Props jonsurrell, swissspidy, czapla, gziolo.
See #60647.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/interactivity-api/class-wp-interactivity-api.php

    r59098 r59130  
    201201
    202202        /**
     203         * Set client-side interactivity-router 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 Router script module.
     212         */
     213        public function filter_script_module_interactivity_router_data( array $data ): array {
     214                if ( ! isset( $data['i18n'] ) ) {
     215                        $data['i18n'] = array();
     216                }
     217                $data['i18n']['loading'] = __( 'Loading page, please wait.' );
     218                $data['i18n']['loaded']  = __( 'Page Loaded.' );
     219                return $data;
     220        }
     221
     222        /**
    203223         * Set client-side interactivity data.
    204224         *
     
    297317        public function add_hooks() {
    298318                add_filter( 'script_module_data_@wordpress/interactivity', array( $this, 'filter_script_module_interactivity_data' ) );
     319                add_filter( 'script_module_data_@wordpress/interactivity-router', array( $this, 'filter_script_module_interactivity_router_data' ) );
    299320        }
    300321
     
    974995
    975996        /**
    976          * Outputs the markup for the top loading indicator and the screen reader
    977          * notifications during client-side navigations.
     997         * Deprecated.
     998         *
     999         * @since 6.5.0
     1000         * @deprecated 6.7.0 Use {@see WP_Interactivity_API::print_router_markup} instead.
     1001         */
     1002        public function print_router_loading_and_screen_reader_markup() {
     1003                _deprecated_function( __METHOD__, '6.7.0', 'WP_Interactivity_API::print_router_markup' );
     1004
     1005                // Call the new method.
     1006                $this->print_router_markup();
     1007        }
     1008
     1009        /**
     1010         * Outputs markup for the @wordpress/interactivity-router script module.
    9781011         *
    9791012         * This method prints a div element representing a loading bar visible during
    980          * navigation, as well as an aria-live region that can be read by screen
    981          * readers to announce navigation status.
    982          *
    983          * @since 6.5.0
    984          */
    985         public function print_router_loading_and_screen_reader_markup() {
     1013         * navigation.
     1014         *
     1015         * @since 6.7.0
     1016         */
     1017        public function print_router_markup() {
    9861018                echo <<<HTML
    9871019                        <div
     
    9911023                                data-wp-class--finish-animation="state.navigation.hasFinished"
    9921024                        ></div>
    993                         <div
    994                                 class="screen-reader-text"
    995                                 aria-live="polite"
    996                                 data-wp-interactive="core/router"
    997                                 data-wp-text="state.navigation.message"
    998                         ></div>
    9991025HTML;
    10001026        }
     
    10171043                        $this->has_processed_router_region = true;
    10181044
    1019                         // Initialize the `core/router` store.
     1045                        /*
     1046                         * Initialize the `core/router` store.
     1047                         * If the store is not initialized like this with minimal
     1048                         * navigation object, the interactivity-router script module
     1049                         * errors.
     1050                         */
    10201051                        $this->state(
    10211052                                'core/router',
    10221053                                array(
    1023                                         'navigation' => array(
    1024                                                 'texts' => array(
    1025                                                         'loading' => __( 'Loading page, please wait.' ),
    1026                                                         'loaded'  => __( 'Page Loaded.' ),
    1027                                                 ),
    1028                                         ),
     1054                                        'navigation' => new stdClass(),
    10291055                                )
    10301056                        );
     
    10361062
    10371063                        // Adds the necessary markup to the footer.
    1038                         add_action( 'wp_footer', array( $this, 'print_router_loading_and_screen_reader_markup' ) );
     1064                        add_action( 'wp_footer', array( $this, 'print_router_markup' ) );
    10391065                }
    10401066        }
  • trunk/tests/phpunit/tests/interactivity-api/wpInteractivityAPI-wp-router-region.php

    r59098 r59130  
    103103         * @covers ::process_directives
    104104         */
    105         public function test_wp_router_region_adds_loading_bar_aria_live_region_only_once() {
     105        public function test_wp_router_region_adds_loading_bar_region_only_once() {
    106106                $html     = '
    107107                        <div data-wp-router-region="region A">Interactive region</div>
     
    126126                $this->assertTrue( $p->next_tag( $query ) );
    127127                $this->assertFalse( $p->next_tag( $query ) );
    128                 $query = array( 'class_name' => 'screen-reader-text' );
    129                 $p     = new WP_HTML_Tag_Processor( $footer );
    130                 $this->assertTrue( $p->next_tag( $query ) );
    131                 $this->assertFalse( $p->next_tag( $query ) );
    132128        }
    133129}
Note: See TracChangeset for help on using the changeset viewer.