--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wp/wp-includes/class-wp-block-type.php Mon Oct 14 18:28:13 2019 +0200
@@ -0,0 +1,216 @@
+<?php
+/**
+ * Blocks API: WP_Block_Type class
+ *
+ * @package WordPress
+ * @subpackage Blocks
+ * @since 5.0.0
+ */
+
+/**
+ * Core class representing a block type.
+ *
+ * @since 5.0.0
+ *
+ * @see register_block_type()
+ */
+class WP_Block_Type {
+ /**
+ * Block type key.
+ *
+ * @since 5.0.0
+ * @var string
+ */
+ public $name;
+
+ /**
+ * Block type render callback.
+ *
+ * @since 5.0.0
+ * @var callable
+ */
+ public $render_callback;
+
+ /**
+ * Block type attributes property schemas.
+ *
+ * @since 5.0.0
+ * @var array
+ */
+ public $attributes;
+
+ /**
+ * Block type editor script handle.
+ *
+ * @since 5.0.0
+ * @var string
+ */
+ public $editor_script;
+
+ /**
+ * Block type front end script handle.
+ *
+ * @since 5.0.0
+ * @var string
+ */
+ public $script;
+
+ /**
+ * Block type editor style handle.
+ *
+ * @since 5.0.0
+ * @var string
+ */
+ public $editor_style;
+
+ /**
+ * Block type front end style handle.
+ *
+ * @since 5.0.0
+ * @var string
+ */
+ public $style;
+
+ /**
+ * Constructor.
+ *
+ * Will populate object properties from the provided arguments.
+ *
+ * @since 5.0.0
+ *
+ * @see register_block_type()
+ *
+ * @param string $block_type Block type name including namespace.
+ * @param array|string $args Optional. Array or string of arguments for registering a block type.
+ * Default empty array.
+ */
+ public function __construct( $block_type, $args = array() ) {
+ $this->name = $block_type;
+
+ $this->set_props( $args );
+ }
+
+ /**
+ * Renders the block type output for given attributes.
+ *
+ * @since 5.0.0
+ *
+ * @param array $attributes Optional. Block attributes. Default empty array.
+ * @param string $content Optional. Block content. Default empty string.
+ * @return string Rendered block type output.
+ */
+ public function render( $attributes = array(), $content = '' ) {
+ if ( ! $this->is_dynamic() ) {
+ return '';
+ }
+
+ $attributes = $this->prepare_attributes_for_render( $attributes );
+
+ return (string) call_user_func( $this->render_callback, $attributes, $content );
+ }
+
+ /**
+ * Returns true if the block type is dynamic, or false otherwise. A dynamic
+ * block is one which defers its rendering to occur on-demand at runtime.
+ *
+ * @since 5.0.0
+ *
+ * @return boolean Whether block type is dynamic.
+ */
+ public function is_dynamic() {
+ return is_callable( $this->render_callback );
+ }
+
+ /**
+ * Validates attributes against the current block schema, populating
+ * defaulted and missing values.
+ *
+ * @since 5.0.0
+ *
+ * @param array $attributes Original block attributes.
+ * @return array Prepared block attributes.
+ */
+ public function prepare_attributes_for_render( $attributes ) {
+ // If there are no attribute definitions for the block type, skip
+ // processing and return vebatim.
+ if ( ! isset( $this->attributes ) ) {
+ return $attributes;
+ }
+
+ foreach ( $attributes as $attribute_name => $value ) {
+ // If the attribute is not defined by the block type, it cannot be
+ // validated.
+ if ( ! isset( $this->attributes[ $attribute_name ] ) ) {
+ continue;
+ }
+
+ $schema = $this->attributes[ $attribute_name ];
+
+ // Validate value by JSON schema. An invalid value should revert to
+ // its default, if one exists. This occurs by virtue of the missing
+ // attributes loop immediately following. If there is not a default
+ // assigned, the attribute value should remain unset.
+ $is_valid = rest_validate_value_from_schema( $value, $schema );
+ if ( is_wp_error( $is_valid ) ) {
+ unset( $attributes[ $attribute_name ] );
+ }
+ }
+
+ // Populate values of any missing attributes for which the block type
+ // defines a default.
+ $missing_schema_attributes = array_diff_key( $this->attributes, $attributes );
+ foreach ( $missing_schema_attributes as $attribute_name => $schema ) {
+ if ( isset( $schema['default'] ) ) {
+ $attributes[ $attribute_name ] = $schema['default'];
+ }
+ }
+
+ return $attributes;
+ }
+
+ /**
+ * Sets block type properties.
+ *
+ * @since 5.0.0
+ *
+ * @param array|string $args Array or string of arguments for registering a block type.
+ */
+ public function set_props( $args ) {
+ $args = wp_parse_args(
+ $args,
+ array(
+ 'render_callback' => null,
+ )
+ );
+
+ $args['name'] = $this->name;
+
+ foreach ( $args as $property_name => $property_value ) {
+ $this->$property_name = $property_value;
+ }
+ }
+
+ /**
+ * Get all available block attributes including possible layout attribute from Columns block.
+ *
+ * @since 5.0.0
+ *
+ * @return array Array of attributes.
+ */
+ public function get_attributes() {
+ return is_array( $this->attributes ) ?
+ array_merge(
+ $this->attributes,
+ array(
+ 'layout' => array(
+ 'type' => 'string',
+ ),
+ )
+ ) :
+ array(
+ 'layout' => array(
+ 'type' => 'string',
+ ),
+ );
+ }
+}