summaryrefslogtreecommitdiffstats
path: root/wp-includes/class-wp-block-list.php
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
commita415c29efee45520ae252d2aa28f1083a521cd7b (patch)
treef4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-includes/class-wp-block-list.php
parentInitial commit. (diff)
downloadwordpress-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 'wp-includes/class-wp-block-list.php')
-rw-r--r--wp-includes/class-wp-block-list.php213
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 );
+ }
+}