Make WordPress Core

Changeset 56634


Ignore:
Timestamp:
09/20/2023 04:47:44 PM (3 years ago)
Author:
Bernhard Reiter
Message:

Blocks: Revert implementation of block insertion functions.

In [56618], three functions (insert_inner_block, prepend_inner_block, and append_inner_block) were introduced. They were meant to be used for insertion of hooked blocks; however, it was discovered that the original idea wouldn't work for sibling insertion. Instead, a different approach will be taken (see #59412), and these functions are no longer needed and can thus be removed.

Reverts [56618].
See #59412, #59385, #59313.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/blocks.php

    r56620 r56634  
    762762
    763763/**
    764  * Insert a parsed block into a parent block's inner blocks.
    765  *
    766  * Given a parsed block, a block index, and a chunk index, insert another parsed block
    767  * into the parent block at the given indices.
    768  *
    769  * Note that the this mutates the parent block by inserting into the parent's `innerBlocks`
    770  * array, and by updating the parent's `innerContent` array accordingly.
    771  *
    772  * @since 6.4.0
    773  *
    774  * @param array $parent_block   The parent block.
    775  * @param int   $block_index    The index specifying the insertion position among the parent block's inner blocks.
    776  * @param int   $chunk_index    The index specifying the insertion position among the parent block's inner content chunks.
    777  * @param array $inserted_block The block to insert.
    778  * @return void
    779  */
    780 function insert_inner_block( &$parent_block, $block_index, $chunk_index, $inserted_block ) {
    781         array_splice( $parent_block['innerBlocks'], $block_index, 0, array( $inserted_block ) );
    782 
    783         /*
    784          * Since WP_Block::render() iterates over `inner_content` (rather than `inner_blocks`)
    785          * when rendering blocks, we also need to insert a value (`null`, to mark a block
    786          * location) into that array.
    787          */
    788         array_splice( $parent_block['innerContent'], $chunk_index, 0, array( null ) );
    789 }
    790 
    791 /**
    792  * Prepend a parsed block to a parent block's inner blocks.
    793  *
    794  * Given a parsed block, prepend another parsed block to the parent block's inner blocks.
    795  *
    796  * Note that the this mutates the parent block by inserting into the parent's `innerBlocks`
    797  * array, and by updating the parent's `innerContent` array accordingly.
    798  *
    799  * @since 6.4.0
    800  *
    801  * @param array  $parent_block   The parent block.
    802  * @param array  $inserted_block The block to insert.
    803  * @return void
    804  */
    805 function prepend_inner_block( &$parent_block, $inserted_block ) {
    806         $chunk_index = 0;
    807         for ( $index = 0; $index < count( $parent_block['innerContent'] ); $index++ ) {
    808                 if ( is_null( $parent_block['innerContent'][ $index ] ) ) {
    809                         $chunk_index = $index;
    810                         break;
    811                 }
    812         }
    813         insert_inner_block( $parent_block, 0, $chunk_index, $inserted_block );
    814 }
    815 
    816 /**
    817  * Append a parsed block to a parent block's inner blocks.
    818  *
    819  * Given a parsed block, append another parsed block to the parent block's inner blocks.
    820  *
    821  * Note that the this mutates the parent block by inserting into the parent's `innerBlocks`
    822  * array, and by updating the parent's `innerContent` array accordingly.
    823  *
    824  * @since 6.4.0
    825  *
    826  * @param array  $parent_block   The parent block.
    827  * @param array  $inserted_block The block to insert.
    828  * @return void
    829  */
    830 function append_inner_block( &$parent_block, $inserted_block ) {
    831         $chunk_index = count( $parent_block['innerContent'] );
    832         for ( $index = count( $parent_block['innerContent'] ); $index > 0; $index-- ) {
    833                 if ( is_null( $parent_block['innerContent'][ $index - 1 ] ) ) {
    834                         $chunk_index = $index;
    835                         break;
    836                 }
    837         }
    838         insert_inner_block( $parent_block, count( $parent_block['innerBlocks'] ), $chunk_index, $inserted_block );
    839 }
    840 
    841 /**
    842764 * Given an array of attributes, returns a string in the serialized attributes
    843765 * format prepared for post content.
  • trunk/tests/phpunit/tests/blocks/blockHooks.php

    r56618 r56634  
    1818         */
    1919        public function tear_down() {
    20                 $registry    = WP_Block_Type_Registry::get_instance();
    21                 $block_names = array(
    22                         'tests/injected-one',
    23                         'tests/injected-two',
    24                 );
    25                 foreach ( $block_names as $block_name ) {
     20                $registry = WP_Block_Type_Registry::get_instance();
     21
     22                foreach ( array( 'tests/my-block', 'tests/my-container-block' ) as $block_name ) {
    2623                        if ( $registry->is_registered( $block_name ) ) {
    2724                                $registry->unregister( $block_name );
     
    10198                );
    10299        }
    103 
    104         /**
    105          * @ticket 59385
    106          *
    107          * @covers ::insert_inner_block
    108          *
    109          * @dataProvider data_insert_inner_block
    110          *
    111          * @param string $block_index     Block index to insert the block at.
    112          * @param string $expected_markup Expected markup after the block is inserted.
    113          */
    114         public function test_insert_inner_block( $block_index, $expected_markup ) {
    115                 $original_markup = <<<HTML
    116 <!-- wp:tests/group {"layout":{"type":"constrained"}} -->
    117         <div class="wp-block-group">
    118                 <!-- wp:paragraph -->
    119                         <p>Foo</p>
    120                 <!-- /wp:paragraph -->
    121         </div>
    122 <!-- /wp:tests/group -->
    123 HTML;
    124 
    125                 $inserted_block = array(
    126                         'blockName'    => 'tests/hooked-block',
    127                         'attrs'        => array(),
    128                         'innerBlocks'  => array(),
    129                         'innerHTML'    => '',
    130                         'innerContent' => array(),
    131                 );
    132 
    133                 $expected = parse_blocks( $expected_markup )[0];
    134                 $block    = parse_blocks( $original_markup )[0];
    135                 insert_inner_block( $block, $block_index, 1, $inserted_block );
    136                 $this->assertSame( $expected, $block );
    137         }
    138 
    139         /**
    140          * Data provider.
    141          *
    142          * @return array[]
    143          */
    144         public function data_insert_inner_block() {
    145                 $expected_before_markup = <<<HTML
    146 <!-- wp:tests/group {"layout":{"type":"constrained"}} -->
    147         <div class="wp-block-group">
    148                 <!-- wp:tests/hooked-block /--><!-- wp:paragraph -->
    149                         <p>Foo</p>
    150                 <!-- /wp:paragraph -->
    151         </div>
    152 <!-- /wp:tests/group -->
    153 HTML;
    154 
    155                 $expected_after_markup = <<<HTML
    156 <!-- wp:tests/group {"layout":{"type":"constrained"}} -->
    157         <div class="wp-block-group">
    158                 <!-- wp:paragraph -->
    159                         <p>Foo</p>
    160                 <!-- /wp:paragraph --><!-- wp:tests/hooked-block /-->
    161         </div>
    162 <!-- /wp:tests/group -->
    163 HTML;
    164 
    165                 return array(
    166                         'insert before given block' => array(
    167                                 'block_index'     => 0,
    168                                 'expected_markup' => $expected_before_markup,
    169                         ),
    170                         'insert after given block'  => array(
    171                                 'block_index'     => 1,
    172                                 'expected_markup' => $expected_after_markup,
    173                         ),
    174                 );
    175         }
    176 
    177         /**
    178          * @ticket 59385
    179          *
    180          * @covers ::prepend_inner_block
    181          */
    182         public function test_prepend_inner_block() {
    183                 $original_markup = <<<HTML
    184 <!-- wp:tests/group {"layout":{"type":"constrained"}} -->
    185         <div class="wp-block-group">
    186                 <!-- wp:paragraph -->
    187                         <p>Foo</p>
    188                 <!-- /wp:paragraph -->
    189         </div>
    190 <!-- /wp:tests/group -->
    191 HTML;
    192 
    193                 $inserted_block = array(
    194                         'blockName'    => 'tests/hooked-block',
    195                         'attrs'        => array(),
    196                         'innerBlocks'  => array(),
    197                         'innerHTML'    => '',
    198                         'innerContent' => array(),
    199                 );
    200 
    201                 $expected_markup = <<<HTML
    202 <!-- wp:tests/group {"layout":{"type":"constrained"}} -->
    203         <div class="wp-block-group">
    204                 <!-- wp:tests/hooked-block /--><!-- wp:paragraph -->
    205                         <p>Foo</p>
    206                 <!-- /wp:paragraph -->
    207         </div>
    208 <!-- /wp:tests/group -->
    209 HTML;
    210 
    211                 $expected = parse_blocks( $expected_markup )[0];
    212                 $block    = parse_blocks( $original_markup )[0];
    213                 prepend_inner_block( $block, $inserted_block );
    214                 $this->assertSame( $expected, $block );
    215         }
    216 
    217         /**
    218          * @ticket 59385
    219          *
    220          * @covers ::append_inner_block
    221          */
    222         public function test_append_inner_block() {
    223                 $original_markup = <<<HTML
    224 <!-- wp:tests/group {"layout":{"type":"constrained"}} -->
    225         <div class="wp-block-group">
    226                 <!-- wp:paragraph -->
    227                         <p>Foo</p>
    228                 <!-- /wp:paragraph -->
    229         </div>
    230 <!-- /wp:tests/group -->
    231 HTML;
    232 
    233                 $inserted_block = array(
    234                         'blockName'    => 'tests/hooked-block',
    235                         'attrs'        => array(),
    236                         'innerBlocks'  => array(),
    237                         'innerHTML'    => '',
    238                         'innerContent' => array(),
    239                 );
    240 
    241                 $expected_markup = <<<HTML
    242 <!-- wp:tests/group {"layout":{"type":"constrained"}} -->
    243         <div class="wp-block-group">
    244                 <!-- wp:paragraph -->
    245                         <p>Foo</p>
    246                 <!-- /wp:paragraph --><!-- wp:tests/hooked-block /-->
    247         </div>
    248 <!-- /wp:tests/group -->
    249 HTML;
    250 
    251                 $expected = parse_blocks( $expected_markup )[0];
    252                 $block    = parse_blocks( $original_markup )[0];
    253                 append_inner_block( $block, $inserted_block );
    254                 $this->assertSame( $expected, $block );
    255         }
    256100}
Note: See TracChangeset for help on using the changeset viewer.