Block Editor: Update WordPress Packages.
The following package versions were changed: @wordpress/a11y: 2.6.0 -> 2.7.0 @wordpress/annotations: 1.10.0 -> 1.11.0 @wordpress/api-fetch: 3.9.0 -> 3.10.0 @wordpress/autop: 2.5.1 -> 2.6.0 @wordpress/blob: 2.6.0 -> 2.7.0 @wordpress/block-directory: 1.3.0 -> 1.4.0 @wordpress/block-editor: 3.5.0 -> 3.6.0 @wordpress/block-library: 2.12.0 -> 2.13.0 @wordpress/block-serialization-default-parser: 3.4.1 -> 3.5.0 @wordpress/blocks: 6.10.0 -> 6.11.0 @wordpress/components: 9.0.0 -> 9.1.0 @wordpress/compose: 3.10.0 -> 3.11.0 @wordpress/core-data: 2.10.0 -> 2.11.0 @wordpress/custom-templated-path-webpack-plugin: 1.5.0 -> 1.6.0 @wordpress/data: 4.12.0 -> 4.13.0 @wordpress/data-controls: 1.6.0 -> 1.7.0 @wordpress/date: 3.7.0 -> 3.8.0 @wordpress/dependency-extraction-webpack-plugin: 2.1.0 -> 2.2.0 @wordpress/deprecated: 2.6.1 -> 2.7.0 @wordpress/dom: 2.7.0 -> 2.8.0 @wordpress/dom-ready: 2.6.0 -> 2.7.0 @wordpress/e2e-test-utils: 4.1.0 -> 4.2.0 @wordpress/edit-post: 3.11.0 -> 3.12.0 @wordpress/editor: 9.10.0 -> 9.11.0 @wordpress/element: 2.10.0 -> 2.11.0 @wordpress/escape-html: 1.6.0 -> 1.7.0 @wordpress/format-library: 1.12.0 -> 1.13.0 @wordpress/hooks: 2.6.0 -> 2.7.0 @wordpress/html-entities: 2.5.0 -> 2.6.0 @wordpress/i18n: 3.8.0 -> 3.9.0 @wordpress/is-shallow-equal: 1.7.0 -> 1.8.0 @wordpress/keyboard-shortcuts: 0.2.0 -> 1.0.0 @wordpress/keycodes: 2.8.0 -> 2.9.0 @wordpress/library-export-default-webpack-plugin: 1.5.0 -> 1.6.0 @wordpress/list-reusable-blocks: 1.11.0 -> 1.12.0 @wordpress/media-utils: 1.5.0 -> 1.6.0 @wordpress/notices: 1.11.0 -> 1.12.0 @wordpress/nux: 3.10.0 -> 3.11.0 @wordpress/plugins: 2.10.0 -> 2.11.0 @wordpress/priority-queue: 1.4.0 -> 1.5.0 @wordpress/redux-routine: 3.6.2 -> 3.7.0 @wordpress/rich-text: 3.10.0 -> 3.11.0 @wordpress/scripts: 6.2.0 -> 7.0.0 @wordpress/server-side-render: 1.6.0 -> 1.7.0 @wordpress/shortcode: 2.5.0 -> 2.6.0 @wordpress/token-list: 1.8.0 -> 1.9.0 @wordpress/url: 2.9.0 -> 2.10.0 @wordpress/viewport: 2.11.0 -> 2.12.0 @wordpress/wordcount: 2.6.2 -> 2.7.0 Added these new packages: @wordpress/warning @wordpress/primitives @wordpress/icons Re-added keyboard-shortcuts to script loader removed by mistake on revision 47198. Props gziolo, itsjonq, youknowriad, mcsf, andraganescu. Fixes #49358. Built from https://develop.svn.wordpress.org/trunk@47199 git-svn-id: http://core.svn.wordpress.org/trunk@46999 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
@@ -13,12 +13,12 @@
|
||||
* @return array Colors CSS classes and inline styles.
|
||||
*/
|
||||
function build_css_colors( $attributes ) {
|
||||
// CSS classes.
|
||||
$colors = array(
|
||||
'css_classes' => array(),
|
||||
'inline_styles' => '',
|
||||
);
|
||||
|
||||
// Text color.
|
||||
$has_named_text_color = array_key_exists( 'textColor', $attributes );
|
||||
$has_custom_text_color = array_key_exists( 'customTextColor', $attributes );
|
||||
|
||||
@@ -33,7 +33,25 @@ function build_css_colors( $attributes ) {
|
||||
$colors['css_classes'][] = sprintf( 'has-%s-color', $attributes['textColor'] );
|
||||
} elseif ( $has_custom_text_color ) {
|
||||
// Add the custom color inline style.
|
||||
$colors['inline_styles'] = sprintf( 'color: %s;', $attributes['customTextColor'] );
|
||||
$colors['inline_styles'] .= sprintf( 'color: %s;', $attributes['customTextColor'] );
|
||||
}
|
||||
|
||||
// Background color.
|
||||
$has_named_background_color = array_key_exists( 'backgroundColor', $attributes );
|
||||
$has_custom_background_color = array_key_exists( 'customBackgroundColor', $attributes );
|
||||
|
||||
// If has background color.
|
||||
if ( $has_custom_background_color || $has_named_background_color ) {
|
||||
// Add has-background-color class.
|
||||
$colors['css_classes'][] = 'has-background-color';
|
||||
}
|
||||
|
||||
if ( $has_named_background_color ) {
|
||||
// Add the background-color class.
|
||||
$colors['css_classes'][] = sprintf( 'has-%s-background-color', $attributes['backgroundColor'] );
|
||||
} elseif ( $has_custom_background_color ) {
|
||||
// Add the custom background-color inline style.
|
||||
$colors['inline_styles'] .= sprintf( 'background-color: %s;', $attributes['customBackgroundColor'] );
|
||||
}
|
||||
|
||||
return $colors;
|
||||
@@ -67,16 +85,61 @@ function build_css_font_sizes( $attributes ) {
|
||||
return $font_sizes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively filters out links with no labels to build a clean navigation block structure.
|
||||
*
|
||||
* @param array $blocks Navigation link inner blocks from the Navigation block.
|
||||
* @return array Blocks that had valid labels
|
||||
*/
|
||||
function gutenberg_remove_empty_navigation_links_recursive( $blocks ) {
|
||||
$blocks = array_filter(
|
||||
$blocks,
|
||||
function( $block ) {
|
||||
return ! empty( $block['attrs']['label'] );
|
||||
}
|
||||
);
|
||||
|
||||
if ( ! empty( $blocks ) ) {
|
||||
foreach ( $blocks as $key => $block ) {
|
||||
if ( ! empty( $block['innerBlocks'] ) ) {
|
||||
$blocks[ $key ]['innerBlocks'] = gutenberg_remove_empty_navigation_links_recursive( $block['innerBlocks'] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $blocks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the top-level submenu SVG chevron icon.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
function render_submenu_icon() {
|
||||
return '<svg width="18" height="18" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" role="img" aria-hidden="true" focusable="false"><polygon points="9,13.5 14.7,7.9 13.2,6.5 9,10.7 4.8,6.5 3.3,7.9 "></polygon></svg>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the `core/navigation` block on server.
|
||||
*
|
||||
* @param array $attributes The block attributes.
|
||||
* @param array $content The saved content.
|
||||
* @param array $block The parsed block.
|
||||
*
|
||||
* @return string Returns the post content with the legacy widget added.
|
||||
*/
|
||||
function render_block_navigation( $attributes, $content, $block ) {
|
||||
function render_block_navigation( $content, $block ) {
|
||||
|
||||
if ( 'core/navigation' !== $block['blockName'] ) {
|
||||
return $content;
|
||||
}
|
||||
|
||||
$attributes = $block['attrs'];
|
||||
$block['innerBlocks'] = gutenberg_remove_empty_navigation_links_recursive( $block['innerBlocks'] );
|
||||
|
||||
if ( empty( $block['innerBlocks'] ) ) {
|
||||
return '';
|
||||
}
|
||||
|
||||
$colors = build_css_colors( $attributes );
|
||||
$font_sizes = build_css_font_sizes( $attributes );
|
||||
$classes = array_merge(
|
||||
@@ -96,20 +159,22 @@ function render_block_navigation( $attributes, $content, $block ) {
|
||||
'<nav %1$s %2$s>%3$s</nav>',
|
||||
$class_attribute,
|
||||
$style_attribute,
|
||||
build_navigation_html( $block, $colors, $font_sizes )
|
||||
build_navigation_html( $attributes, $block, $colors, $font_sizes, true )
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Walks the inner block structure and returns an HTML list for it.
|
||||
*
|
||||
* @param array $block The block.
|
||||
* @param array $colors Contains inline styles and CSS classes to apply to navigation item.
|
||||
* @param array $font_sizes Contains inline styles and CSS classes to apply to navigation item.
|
||||
* @param array $attributes The Navigation block attributes.
|
||||
* @param array $block The NavigationItem block.
|
||||
* @param array $colors Contains inline styles and CSS classes to apply to navigation item.
|
||||
* @param array $font_sizes Contains inline styles and CSS classes to apply to navigation item.
|
||||
* @param bool $is_level_zero True whether is main menu (level zero). Otherwise, False.
|
||||
*
|
||||
* @return string Returns an HTML list from innerBlocks.
|
||||
*/
|
||||
function build_navigation_html( $block, $colors, $font_sizes ) {
|
||||
function build_navigation_html( $attributes, $block, $colors, $font_sizes, $is_level_zero = true ) {
|
||||
$html = '';
|
||||
$classes = array_merge(
|
||||
$colors['css_classes'],
|
||||
@@ -122,9 +187,14 @@ function build_navigation_html( $block, $colors, $font_sizes ) {
|
||||
: '';
|
||||
|
||||
foreach ( (array) $block['innerBlocks'] as $key => $block ) {
|
||||
$has_submenu = count( (array) $block['innerBlocks'] ) > 0;
|
||||
|
||||
$html .= '<li class="wp-block-navigation-link">' .
|
||||
'<a' . $class_attribute . $style_attribute;
|
||||
$html .= '<li class="wp-block-navigation-link' . ( $has_submenu ? ' has-submenu' : '' ) . '">' .
|
||||
'<a';
|
||||
|
||||
if ( $is_level_zero ) {
|
||||
$html .= $class_attribute . $style_attribute;
|
||||
}
|
||||
|
||||
// Start appending HTML attributes to anchor tag.
|
||||
if ( isset( $block['attrs']['url'] ) ) {
|
||||
@@ -140,15 +210,44 @@ function build_navigation_html( $block, $colors, $font_sizes ) {
|
||||
// End appending HTML attributes to anchor tag.
|
||||
|
||||
// Start anchor tag content.
|
||||
$html .= '>';
|
||||
$html .= '>' .
|
||||
// Wrap title with span to isolate it from submenu icon.
|
||||
'<span class="wp-block-navigation-link__label">';
|
||||
|
||||
if ( isset( $block['attrs']['label'] ) ) {
|
||||
$html .= esc_html( $block['attrs']['label'] );
|
||||
$html .= wp_kses(
|
||||
$block['attrs']['label'],
|
||||
array(
|
||||
'code' => array(),
|
||||
'em' => array(),
|
||||
'img' => array(
|
||||
'scale' => array(),
|
||||
'class' => array(),
|
||||
'style' => array(),
|
||||
'src' => array(),
|
||||
'alt' => array(),
|
||||
),
|
||||
's' => array(),
|
||||
'span' => array(
|
||||
'style' => array(),
|
||||
),
|
||||
'strong' => array(),
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
$html .= '</span>';
|
||||
|
||||
// Append submenu icon to top-level item.
|
||||
if ( ! empty( $attributes['showSubmenuIcon'] ) && $is_level_zero && $has_submenu ) {
|
||||
$html .= '<span class="wp-block-navigation-link__submenu-icon">' . render_submenu_icon() . '</span>';
|
||||
}
|
||||
|
||||
$html .= '</a>';
|
||||
// End anchor tag content.
|
||||
|
||||
if ( count( (array) $block['innerBlocks'] ) > 0 ) {
|
||||
$html .= build_navigation_html( $block, $colors, $font_sizes );
|
||||
if ( $has_submenu ) {
|
||||
$html .= build_navigation_html( $attributes, $block, $colors, $font_sizes, false );
|
||||
}
|
||||
|
||||
$html .= '</li>';
|
||||
@@ -167,29 +266,38 @@ function register_block_core_navigation() {
|
||||
register_block_type(
|
||||
'core/navigation',
|
||||
array(
|
||||
'attributes' => array(
|
||||
'className' => array(
|
||||
'attributes' => array(
|
||||
'className' => array(
|
||||
'type' => 'string',
|
||||
),
|
||||
'textColor' => array(
|
||||
'textColor' => array(
|
||||
'type' => 'string',
|
||||
),
|
||||
'customTextColor' => array(
|
||||
'customTextColor' => array(
|
||||
'type' => 'string',
|
||||
),
|
||||
'fontSize' => array(
|
||||
'backgroundColor' => array(
|
||||
'type' => 'string',
|
||||
),
|
||||
'customFontSize' => array(
|
||||
'customBackgroundColor' => array(
|
||||
'type' => 'string',
|
||||
),
|
||||
'fontSize' => array(
|
||||
'type' => 'string',
|
||||
),
|
||||
'customFontSize' => array(
|
||||
'type' => 'number',
|
||||
),
|
||||
'itemsJustification' => array(
|
||||
'itemsJustification' => array(
|
||||
'type' => 'string',
|
||||
),
|
||||
'showSubmenuIcon' => array(
|
||||
'type' => 'boolean',
|
||||
'default' => false,
|
||||
),
|
||||
),
|
||||
|
||||
'render_callback' => 'render_block_navigation',
|
||||
)
|
||||
);
|
||||
}
|
||||
add_action( 'init', 'register_block_core_navigation' );
|
||||
add_filter( 'render_block', 'render_block_navigation', 10, 2 );
|
||||
|
||||
@@ -21,16 +21,15 @@ function render_block_core_shortcode( $attributes, $content ) {
|
||||
* Registers the `core/shortcode` block on server.
|
||||
*/
|
||||
function register_block_core_shortcode() {
|
||||
$path = __DIR__ . '/shortcode/block.json';
|
||||
$metadata = json_decode( file_get_contents( $path ), true );
|
||||
register_block_type(
|
||||
'core/shortcode',
|
||||
array(
|
||||
'attributes' => array(
|
||||
'text' => array(
|
||||
'type' => 'string',
|
||||
'source' => 'html',
|
||||
),
|
||||
),
|
||||
'render_callback' => 'render_block_core_shortcode',
|
||||
$metadata['name'],
|
||||
array_merge(
|
||||
$metadata,
|
||||
array(
|
||||
'render_callback' => 'render_block_core_shortcode',
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
10
wp-includes/blocks/shortcode/block.json
Normal file
10
wp-includes/blocks/shortcode/block.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "core/shortcode",
|
||||
"category": "widgets",
|
||||
"attributes": {
|
||||
"text": {
|
||||
"type": "string",
|
||||
"source": "html"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user