Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
0.00% |
0 / 71 |
|
0.00% |
0 / 2 |
CRAP | n/a |
0 / 0 |
|
| Automattic\Jetpack\Jetpack_Mu_Wpcom\Wpcom_Legacy_FSE\render_navigation_menu_block | |
0.00% |
0 / 58 |
|
0.00% |
0 / 1 |
156 | |||
| Automattic\Jetpack\Jetpack_Mu_Wpcom\Wpcom_Legacy_FSE\get_fallback_navigation_menu | |
0.00% |
0 / 13 |
|
0.00% |
0 / 1 |
2 | |||
| 1 | <?php |
| 2 | /** |
| 3 | * Render navigation menu block file. |
| 4 | * |
| 5 | * @package automattic/jetpack-mu-wpcom |
| 6 | */ |
| 7 | |
| 8 | namespace Automattic\Jetpack\Jetpack_Mu_Wpcom\Wpcom_Legacy_FSE; |
| 9 | |
| 10 | use Automattic\Jetpack\Jetpack_Mu_Wpcom\Common; |
| 11 | |
| 12 | /** |
| 13 | * Render the navigation menu. |
| 14 | * |
| 15 | * @param array $attributes Block attributes. |
| 16 | * @return string |
| 17 | */ |
| 18 | function render_navigation_menu_block( $attributes ) { |
| 19 | Common\wpcom_record_tracks_event( 'wpcom_legacy_fse_render_block', array( 'block_name' => 'a8c/navigation-menu' ) ); |
| 20 | |
| 21 | $styles = ''; |
| 22 | |
| 23 | $container_class = 'menu-primary-container'; |
| 24 | $toggle_class = 'button'; |
| 25 | if ( isset( $attributes['className'] ) ) { |
| 26 | $container_class .= ' ' . $attributes['className']; |
| 27 | $toggle_class .= ' ' . $attributes['className']; |
| 28 | } |
| 29 | |
| 30 | $align = ' alignwide'; |
| 31 | if ( isset( $attributes['align'] ) ) { |
| 32 | $align = empty( $attributes['align'] ) ? '' : ' align' . $attributes['align']; |
| 33 | } |
| 34 | $class = $align; |
| 35 | |
| 36 | if ( isset( $attributes['textAlign'] ) ) { |
| 37 | $class .= ' has-text-align-' . $attributes['textAlign']; |
| 38 | } else { |
| 39 | $class .= ' has-text-align-center'; |
| 40 | } |
| 41 | |
| 42 | if ( isset( $attributes['textColor'] ) ) { |
| 43 | $class .= ' has-text-color'; |
| 44 | $class .= ' has-' . $attributes['textColor'] . '-color'; |
| 45 | } elseif ( isset( $attributes['customTextColor'] ) ) { |
| 46 | $class .= ' has-text-color'; |
| 47 | $styles .= ' color: ' . $attributes['customTextColor'] . ';'; |
| 48 | } |
| 49 | |
| 50 | if ( isset( $attributes['backgroundColor'] ) ) { |
| 51 | $class .= ' has-background'; |
| 52 | $class .= ' has-' . $attributes['backgroundColor'] . '-background-color'; |
| 53 | } elseif ( isset( $attributes['customBackgroundColor'] ) ) { |
| 54 | $class .= ' has-background'; |
| 55 | $styles .= ' background-color: ' . $attributes['customBackgroundColor'] . ';'; |
| 56 | } |
| 57 | |
| 58 | if ( isset( $attributes['customFontSize'] ) ) { |
| 59 | $styles .= ' font-size: ' . $attributes['customFontSize'] . 'px;'; |
| 60 | } elseif ( isset( $attributes['fontSize'] ) ) { |
| 61 | $class .= ' has-' . $attributes['fontSize'] . '-font-size'; |
| 62 | } else { |
| 63 | $class .= ' has-small-font-size'; |
| 64 | } |
| 65 | |
| 66 | $container_class .= $class; |
| 67 | $toggle_class .= $class; |
| 68 | |
| 69 | $menu = wp_nav_menu( |
| 70 | array( |
| 71 | 'echo' => false, |
| 72 | 'fallback_cb' => 'get_fallback_navigation_menu', |
| 73 | 'items_wrap' => '<ul id="%1$s" class="%2$s" aria-label="submenu">%3$s</ul>', |
| 74 | 'menu_class' => 'main-menu footer-menu', |
| 75 | 'theme_location' => 'menu-1', |
| 76 | 'container' => '', |
| 77 | ) |
| 78 | ); |
| 79 | |
| 80 | ob_start(); |
| 81 | // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped |
| 82 | ?> |
| 83 | <nav class="main-navigation wp-block-a8c-navigation-menu<?php echo esc_attr( $align ); ?>"> |
| 84 | <input type="checkbox" role="button" aria-haspopup="true" id="toggle" class="hide-visually"> |
| 85 | <label for="toggle" id="toggle-menu" class="<?php echo esc_attr( $toggle_class ); ?>" style="<?php echo esc_attr( $styles ); ?>"> |
| 86 | <?php esc_html_e( 'Menu', 'jetpack-mu-wpcom' ); ?> |
| 87 | <span class="dropdown-icon open">+</span> |
| 88 | <span class="dropdown-icon close">×</span> |
| 89 | <span class="hide-visually expanded-text"><?php esc_html_e( 'expanded', 'jetpack-mu-wpcom' ); ?></span> |
| 90 | <span class="hide-visually collapsed-text"><?php esc_html_e( 'collapsed', 'jetpack-mu-wpcom' ); ?></span> |
| 91 | </label> |
| 92 | <div class="<?php echo esc_attr( $container_class ); ?>" style="<?php echo esc_attr( $styles ); ?>"> |
| 93 | <?php echo $menu ? $menu : get_fallback_navigation_menu(); ?> |
| 94 | </div> |
| 95 | </nav> |
| 96 | <!-- #site-navigation --> |
| 97 | <?php |
| 98 | // phpcs:enable WordPress.Security.EscapeOutput.OutputNotEscaped |
| 99 | return ob_get_clean(); |
| 100 | } |
| 101 | |
| 102 | /** |
| 103 | * Render a list of all site pages as a fallback |
| 104 | * for when a menu does not exist. |
| 105 | * |
| 106 | * @return string |
| 107 | */ |
| 108 | function get_fallback_navigation_menu() { |
| 109 | $menu = wp_page_menu( |
| 110 | array( |
| 111 | 'after' => false, |
| 112 | 'before' => false, |
| 113 | 'container' => 'ul', |
| 114 | 'echo' => false, |
| 115 | 'menu_class' => 'main-menu footer-menu', |
| 116 | 'sort_column' => 'menu_order, post_date', |
| 117 | ) |
| 118 | ); |
| 119 | |
| 120 | /** |
| 121 | * Filter the fallback page menu to use the same |
| 122 | * CSS class structure as a regularly built menu |
| 123 | * so we don't have to duplicate CSS selectors everywhere. |
| 124 | */ |
| 125 | $original_classes = array( 'children', 'page_item_has_sub-menu' ); |
| 126 | $replacement_classes = array( 'sub-menu', 'menu-item-has-children' ); |
| 127 | |
| 128 | return str_replace( $original_classes, $replacement_classes, $menu ); |
| 129 | } |