-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Block API: Block Context: Filter content, prepare attributes at rende…
…r, pass block to render (#21925) * Block API: WP_Block: Run filter on rendered content * Block API: WP_Block: Prepare attributes for render at render * Block API: WP_Block: Pass block as third argument of render_callback * Block API: WP_Block: Use magic method for lazy attributes initialization * Block API: Implement iterable WP_Block_List * Block API: Unskip block context test * Block Library: Post Title: Document function attributes * Block API: WP_Block_List: Format constructor to prepare defaults * Block API: WP_Block_List: Replace reference of initialized block * Block API: WP_Block_List: Implement Countable * Block API: WP_Block_List: Add unit tests for array access, iterable * Block API: WP_Block: Add test case for render_block filtering Include inner blocks as a noted previous regression * Docs: Restore documentation for block context PHP API * Block API: WP_Block: Remove unnecessary isset * Framework: Fix formatting for multi-line comment * Framework: Include postType context server-side * Framework: Improve postType comment grammar Co-authored-by: Enrique Piqueras <[email protected]> * Framework: PHPCS formatting Co-authored-by: Enrique Piqueras <[email protected]>
- Loading branch information
Showing
10 changed files
with
472 additions
and
64 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
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,189 @@ | ||
<?php | ||
/** | ||
* Blocks API: WP_Block_List class | ||
* | ||
* @package Gutenberg | ||
*/ | ||
|
||
/** | ||
* Class representing a list of block instances. | ||
*/ | ||
class WP_Block_List implements Iterator, ArrayAccess, Countable { | ||
|
||
/** | ||
* Original array of parsed block data. | ||
* | ||
* @var array|WP_Block[] | ||
* @access protected | ||
*/ | ||
protected $blocks; | ||
|
||
/** | ||
* All available context of the current hierarchy. | ||
* | ||
* @var array | ||
* @access protected | ||
*/ | ||
protected $available_context; | ||
|
||
/** | ||
* Block type registry to use in constructing block instances. | ||
* | ||
* @var WP_Block_Type_Registry | ||
* @access protected | ||
*/ | ||
protected $registry; | ||
|
||
/** | ||
* Constructor. | ||
* | ||
* Populates object properties from the provided block instance argument. | ||
* | ||
* @param array|WP_Block[] $blocks Array of parsed block data, or block instances. | ||
* @param array $available_context Optional array of ancestry context values. | ||
* @param WP_Block_Type_Registry $registry Optional block type registry. | ||
*/ | ||
public function __construct( $blocks, $available_context = array(), $registry = null ) { | ||
if ( is_null( $registry ) ) { | ||
$registry = WP_Block_Type_Registry::get_instance(); | ||
} | ||
|
||
$this->blocks = $blocks; | ||
$this->available_context = $available_context; | ||
$this->registry = $registry; | ||
} | ||
|
||
/* | ||
* ArrayAccess interface methods. | ||
*/ | ||
|
||
/** | ||
* Returns true if a block exists by the specified block index, or false | ||
* otherwise. | ||
* | ||
* @link https://www.php.net/manual/en/arrayaccess.offsetexists.php | ||
* | ||
* @param string $index Index of block to check. | ||
* | ||
* @return bool Whether block exists. | ||
*/ | ||
public function offsetExists( $index ) { | ||
return isset( $this->blocks[ $index ] ); | ||
} | ||
|
||
/** | ||
* Returns the value by the specified block index. | ||
* | ||
* @link https://www.php.net/manual/en/arrayaccess.offsetget.php | ||
* | ||
* @param string $index Index of block value to retrieve. | ||
* | ||
* @return mixed|null Block value if exists, or null. | ||
*/ | ||
public function offsetGet( $index ) { | ||
$block = $this->blocks[ $index ]; | ||
|
||
if ( isset( $block ) && is_array( $block ) ) { | ||
$block = new WP_Block( $block, $this->available_context, $this->registry ); | ||
$this->blocks[ $index ] = $block; | ||
} | ||
|
||
return $block; | ||
} | ||
|
||
/** | ||
* Assign a block value by the specified block index. | ||
* | ||
* @link https://www.php.net/manual/en/arrayaccess.offsetset.php | ||
* | ||
* @param string $index Index of block value to set. | ||
* @param mixed $value Block value. | ||
*/ | ||
public function offsetSet( $index, $value ) { | ||
if ( is_null( $index ) ) { | ||
$this->blocks[] = $value; | ||
} else { | ||
$this->blocks[ $index ] = $value; | ||
} | ||
} | ||
|
||
/** | ||
* Unset a block. | ||
* | ||
* @link https://www.php.net/manual/en/arrayaccess.offsetunset.php | ||
* | ||
* @param string $index Index of block value to unset. | ||
*/ | ||
public function offsetUnset( $index ) { | ||
unset( $this->blocks[ $index ] ); | ||
} | ||
|
||
/* | ||
* Iterator interface methods. | ||
*/ | ||
|
||
/** | ||
* Rewinds back to the first element of the Iterator. | ||
* | ||
* @link https://www.php.net/manual/en/iterator.rewind.php | ||
*/ | ||
public function rewind() { | ||
reset( $this->blocks ); | ||
} | ||
|
||
/** | ||
* Returns the current element of the block list. | ||
* | ||
* @link https://www.php.net/manual/en/iterator.current.php | ||
* | ||
* @return mixed Current element. | ||
*/ | ||
public function current() { | ||
return $this->offsetGet( $this->key() ); | ||
} | ||
|
||
/** | ||
* Returns the key of the current element of the block list. | ||
* | ||
* @link https://www.php.net/manual/en/iterator.key.php | ||
* | ||
* @return mixed Key of the current element. | ||
*/ | ||
public function key() { | ||
return key( $this->blocks ); | ||
} | ||
|
||
/** | ||
* Moves the current position of the block list to the next element. | ||
* | ||
* @link https://www.php.net/manual/en/iterator.next.php | ||
*/ | ||
public function next() { | ||
next( $this->blocks ); | ||
} | ||
|
||
/** | ||
* Checks if current position is valid. | ||
* | ||
* @link https://www.php.net/manual/en/iterator.valid.php | ||
*/ | ||
public function valid() { | ||
return null !== key( $this->blocks ); | ||
} | ||
|
||
/* | ||
* Countable interface methods. | ||
*/ | ||
|
||
/** | ||
* Returns the count of blocks in the list. | ||
* | ||
* @link https://www.php.net/manual/en/countable.count.php | ||
* | ||
* @return int Block count. | ||
*/ | ||
public function count() { | ||
return count( $this->blocks ); | ||
} | ||
|
||
} |
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
Oops, something went wrong.