wp/wp-includes/block-supports/generated-classname.php
changeset 18 be944660c56a
child 21 48c4eec2b7e6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wp/wp-includes/block-supports/generated-classname.php	Wed Sep 21 18:19:35 2022 +0200
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Generated classname block support flag.
+ *
+ * @package WordPress
+ * @since 5.6.0
+ */
+
+/**
+ * Get the generated classname from a given block name.
+ *
+ * @since 5.6.0
+ *
+ * @access private
+ *
+ * @param  string $block_name Block Name.
+ * @return string Generated classname.
+ */
+function wp_get_block_default_classname( $block_name ) {
+	// Generated HTML classes for blocks follow the `wp-block-{name}` nomenclature.
+	// Blocks provided by WordPress drop the prefixes 'core/' or 'core-' (historically used in 'core-embed/').
+	$classname = 'wp-block-' . preg_replace(
+		'/^core-/',
+		'',
+		str_replace( '/', '-', $block_name )
+	);
+
+	/**
+	 * Filters the default block className for server rendered blocks.
+	 *
+	 * @since 5.6.0
+	 *
+	 * @param string     $class_name The current applied classname.
+	 * @param string     $block_name The block name.
+	 */
+	$classname = apply_filters( 'block_default_classname', $classname, $block_name );
+
+	return $classname;
+}
+
+/**
+ * Add the generated classnames to the output.
+ *
+ * @since 5.6.0
+ *
+ * @access private
+ *
+ * @param  WP_Block_Type $block_type       Block Type.
+ *
+ * @return array Block CSS classes and inline styles.
+ */
+function wp_apply_generated_classname_support( $block_type ) {
+	$attributes                      = array();
+	$has_generated_classname_support = block_has_support( $block_type, array( 'className' ), true );
+	if ( $has_generated_classname_support ) {
+		$block_classname = wp_get_block_default_classname( $block_type->name );
+
+		if ( $block_classname ) {
+			$attributes['class'] = $block_classname;
+		}
+	}
+
+	return $attributes;
+}
+
+// Register the block support.
+WP_Block_Supports::get_instance()->register(
+	'generated-classname',
+	array(
+		'apply' => 'wp_apply_generated_classname_support',
+	)
+);