diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:56:49 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 07:56:49 +0000 |
commit | a415c29efee45520ae252d2aa28f1083a521cd7b (patch) | |
tree | f4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-includes/class-wp-block-list.php | |
parent | Initial commit. (diff) | |
download | wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.tar.xz wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.zip |
Adding upstream version 6.4.3+dfsg1.upstream/6.4.3+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | wp-includes/class-wp-block-list.php | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/wp-includes/class-wp-block-list.php b/wp-includes/class-wp-block-list.php new file mode 100644 index 0000000..4e30f1c --- /dev/null +++ b/wp-includes/class-wp-block-list.php @@ -0,0 +1,213 @@ +<?php +/** + * Blocks API: WP_Block_List class + * + * @package WordPress + * @since 5.5.0 + */ + +/** + * Class representing a list of block instances. + * + * @since 5.5.0 + */ +#[AllowDynamicProperties] +class WP_Block_List implements Iterator, ArrayAccess, Countable { + + /** + * Original array of parsed block data, or block instances. + * + * @since 5.5.0 + * @var array[]|WP_Block[] + * @access protected + */ + protected $blocks; + + /** + * All available context of the current hierarchy. + * + * @since 5.5.0 + * @var array + * @access protected + */ + protected $available_context; + + /** + * Block type registry to use in constructing block instances. + * + * @since 5.5.0 + * @var WP_Block_Type_Registry + * @access protected + */ + protected $registry; + + /** + * Constructor. + * + * Populates object properties from the provided block instance argument. + * + * @since 5.5.0 + * + * @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 ( ! $registry instanceof WP_Block_Type_Registry ) { + $registry = WP_Block_Type_Registry::get_instance(); + } + + $this->blocks = $blocks; + $this->available_context = $available_context; + $this->registry = $registry; + } + + /** + * Returns true if a block exists by the specified block offset, or false + * otherwise. + * + * @since 5.5.0 + * + * @link https://www.php.net/manual/en/arrayaccess.offsetexists.php + * + * @param string $offset Offset of block to check for. + * @return bool Whether block exists. + */ + #[ReturnTypeWillChange] + public function offsetExists( $offset ) { + return isset( $this->blocks[ $offset ] ); + } + + /** + * Returns the value by the specified block offset. + * + * @since 5.5.0 + * + * @link https://www.php.net/manual/en/arrayaccess.offsetget.php + * + * @param string $offset Offset of block value to retrieve. + * @return mixed|null Block value if exists, or null. + */ + #[ReturnTypeWillChange] + public function offsetGet( $offset ) { + $block = $this->blocks[ $offset ]; + + if ( isset( $block ) && is_array( $block ) ) { + $block = new WP_Block( $block, $this->available_context, $this->registry ); + $this->blocks[ $offset ] = $block; + } + + return $block; + } + + /** + * Assign a block value by the specified block offset. + * + * @since 5.5.0 + * + * @link https://www.php.net/manual/en/arrayaccess.offsetset.php + * + * @param string $offset Offset of block value to set. + * @param mixed $value Block value. + */ + #[ReturnTypeWillChange] + public function offsetSet( $offset, $value ) { + if ( is_null( $offset ) ) { + $this->blocks[] = $value; + } else { + $this->blocks[ $offset ] = $value; + } + } + + /** + * Unset a block. + * + * @since 5.5.0 + * + * @link https://www.php.net/manual/en/arrayaccess.offsetunset.php + * + * @param string $offset Offset of block value to unset. + */ + #[ReturnTypeWillChange] + public function offsetUnset( $offset ) { + unset( $this->blocks[ $offset ] ); + } + + /** + * Rewinds back to the first element of the Iterator. + * + * @since 5.5.0 + * + * @link https://www.php.net/manual/en/iterator.rewind.php + */ + #[ReturnTypeWillChange] + public function rewind() { + reset( $this->blocks ); + } + + /** + * Returns the current element of the block list. + * + * @since 5.5.0 + * + * @link https://www.php.net/manual/en/iterator.current.php + * + * @return mixed Current element. + */ + #[ReturnTypeWillChange] + public function current() { + return $this->offsetGet( $this->key() ); + } + + /** + * Returns the key of the current element of the block list. + * + * @since 5.5.0 + * + * @link https://www.php.net/manual/en/iterator.key.php + * + * @return mixed Key of the current element. + */ + #[ReturnTypeWillChange] + public function key() { + return key( $this->blocks ); + } + + /** + * Moves the current position of the block list to the next element. + * + * @since 5.5.0 + * + * @link https://www.php.net/manual/en/iterator.next.php + */ + #[ReturnTypeWillChange] + public function next() { + next( $this->blocks ); + } + + /** + * Checks if current position is valid. + * + * @since 5.5.0 + * + * @link https://www.php.net/manual/en/iterator.valid.php + */ + #[ReturnTypeWillChange] + public function valid() { + return null !== key( $this->blocks ); + } + + /** + * Returns the count of blocks in the list. + * + * @since 5.5.0 + * + * @link https://www.php.net/manual/en/countable.count.php + * + * @return int Block count. + */ + #[ReturnTypeWillChange] + public function count() { + return count( $this->blocks ); + } +} |