PluginProbe
Gutenberg / trunk
Gutenberg vtrunk
24.1.0 24.0.0 23.9.1 23.9.0 23.8.0 23.7.2 23.7.1 23.7.0 23.6.1 23.6.2 23.6.0 23.5.3 23.5.2 23.5.1 23.5.0 23.4.0 23.3.2 23.3.1 23.3.0 23.2.0 23.2.1 23.2.2 23.1.1 23.1.0 23.0.1 All 404 releases
← All changes | build/scripts/block-library/navigation.php +34 -16 23.8.0 → trunk View file →
@@ -278,10 +278,16 @@
278 278 $is_list_open = false;
279 279
280 280 foreach ( $inner_blocks as $inner_block ) {
281 281 $inner_block_markup = static::get_markup_for_inner_block( $inner_block );
282 - $p = new WP_HTML_Tag_Processor( $inner_block_markup );
283 - $is_list_item = $p->next_tag( 'LI' );
282 + // Skip hidden blocks (e.g. hidden via block visibility) that render
283 + // as an empty string. Without this check, empty markup is mistaken
284 + // for a non-list-item and incorrectly closes the open <ul>.
285 + if ( '' === $inner_block_markup ) {
286 + continue;
287 + }
288 + $p = new WP_HTML_Tag_Processor( $inner_block_markup );
289 + $is_list_item = $p->next_tag( 'LI' );
284 290
285 291 if ( $is_list_item && ! $is_list_open ) {
286 292 $is_list_open = true;
287 293 $inner_blocks_html .= sprintf(
@@ -410,9 +416,9 @@
410 416 *
411 417 * @since 6.5.0
412 418 *
413 419 * @param string $overlay_template_part_id The overlay template part ID in format "theme//slug".
414 - * @param array $attributes The block attributes.
420 + * @param array $attributes The block attributes.
415 421 * @return WP_Block_List Returns the inner blocks for the overlay template part.
416 422 */
417 423 private static function get_overlay_blocks_from_template_part( $overlay_template_part_id, $attributes ) {
418 424 if ( empty( $overlay_template_part_id ) || ! is_string( $overlay_template_part_id ) ) {
@@ -511,9 +517,9 @@
511 517 *
512 518 * @since 6.5.0
513 519 *
514 520 * @param array $attributes The block attributes.
515 - * @param WP_Block $block The parsed block.
521 + * @param WP_Block $block The parsed block.
516 522 * @return WP_Block_List Returns the inner blocks for the navigation block.
517 523 */
518 524 private static function get_inner_blocks( $attributes, $block ) {
519 525 $inner_blocks = $block->inner_blocks;
@@ -733,10 +739,10 @@
733 739 * Get the responsive container markup
734 740 *
735 741 * @since 6.5.0
736 742 *
737 - * @param array $attributes The block attributes.
738 - * @param WP_Block_List $inner_blocks The list of inner blocks.
743 + * @param array $attributes The block attributes.
744 + * @param WP_Block_List $inner_blocks The list of inner blocks.
739 745 * @param string $inner_blocks_html The markup for the inner blocks.
740 746 * @return string Returns the container markup.
741 747 */
742 748 private static function get_responsive_container_markup( $attributes, $inner_blocks, $inner_blocks_html ) {
@@ -825,8 +831,16 @@
825 831 ';
826 832 $responsive_container_content_directives = '
827 833 data-wp-watch="callbacks.focusFirstElement"
828 834 ';
835 +
836 + // The default overlay displays every submenu it contains; a custom overlay
837 + // opts out through the `disable-default-overlay` class on this container.
838 + // Submenus inherit this flag to tell the two apart, derived from the same
839 + // value as that class so the markup and the styles cannot disagree.
840 + if ( $has_custom_overlay ) {
841 + $responsive_container_directives .= ' ' . wp_interactivity_data_wp_context( array( 'hasCustomOverlay' => true ) );
842 + }
829 843 }
830 844
831 845 // Don't apply overlay inline styles if using a custom overlay template part.
832 846 // The custom overlay is responsible for its own styling.
@@ -885,10 +899,10 @@
885 899 * Get the wrapper attributes
886 900 *
887 901 * @since 6.5.0
888 902 *
889 - * @param array $attributes The block attributes.
890 - * @param WP_Block_List $inner_blocks A list of inner blocks.
903 + * @param array $attributes The block attributes.
904 + * @param WP_Block_List $inner_blocks A list of inner blocks.
891 905 * @return string Returns the navigation block markup.
892 906 */
893 907 private static function get_nav_attributes( $attributes, $inner_blocks ) {
894 908 $is_interactive = static::is_interactive( $attributes, $inner_blocks );
@@ -972,9 +986,9 @@
972 986 * Returns the markup for the navigation block.
973 987 *
974 988 * @since 6.5.0
975 989 *
976 - * @param array $attributes The block attributes.
990 + * @param array $attributes The block attributes.
977 991 * @param WP_Block_List $inner_blocks The list of inner blocks.
978 992 * @return string Returns the navigation wrapper markup.
979 993 */
980 994 private static function get_inner_block_markup( $attributes, $inner_blocks ) {
@@ -1041,8 +1055,12 @@
1041 1055 }
1042 1056
1043 1057 unset( $attributes['rgbTextColor'], $attributes['rgbBackgroundColor'] );
1044 1058
1059 + // Submenu detection is memoized while a navigation block renders. Reset it so
1060 + // the result of a previously rendered navigation block is not reused for this one.
1061 + static::$has_submenus = false;
1062 +
1045 1063 $inner_blocks = static::get_inner_blocks( $attributes, $block );
1046 1064 // Prevent navigation blocks referencing themselves from rendering.
1047 1065 if ( gutenberg_block_core_navigation_block_tree_has_block_type(
1048 1066 $inner_blocks,
@@ -1779,14 +1797,14 @@
1779 1797 * @since 5.9.0
1780 1798 *
1781 1799 * @deprecated 6.3.0 Use WP_Navigation_Fallback::parse_blocks_from_menu_items() instead.
1782 1800 *
1783 - * @param array $menu_items An array of menu items that represent
1784 - * an individual level of a menu.
1785 - * @param array $menu_items_by_parent_id An array keyed by the id of the
1786 - * parent menu where each element is an
1787 - * array of menu items that belong to
1788 - * that parent.
1801 + * @param array $menu_items An array of menu items that represent
1802 + * an individual level of a menu.
1803 + * @param array $menu_items_by_parent_id An array keyed by the id of the
1804 + * parent menu where each element is an
1805 + * array of menu items that belong to
1806 + * that parent.
1789 1807 * @return array An array of parsed block data.
1790 1808 */
1791 1809 function gutenberg_block_core_navigation_parse_blocks_from_menu_items( $menu_items, $menu_items_by_parent_id ) {
1792 1810
@@ -1884,9 +1902,9 @@
1884 1902 * @since 6.2.0
1885 1903 *
1886 1904 * @deprecated 6.3.0 Use WP_Navigation_Fallback::get_classic_menu_fallback_blocks() instead.
1887 1905 *
1888 - * @param object $classic_nav_menu WP_Term The classic navigation object to convert.
1906 + * @param object $classic_nav_menu WP_Term The classic navigation object to convert.
1889 1907 * @return array the normalized parsed blocks.
1890 1908 */
1891 1909 function gutenberg_block_core_navigation_get_classic_menu_fallback_blocks( $classic_nav_menu ) {
1892 1910