summaryrefslogtreecommitdiff
path: root/inc/builder/type/header/menu/class-astra-header-menu-component.php
diff options
context:
space:
mode:
Diffstat (limited to 'inc/builder/type/header/menu/class-astra-header-menu-component.php')
-rw-r--r--inc/builder/type/header/menu/class-astra-header-menu-component.php153
1 files changed, 153 insertions, 0 deletions
diff --git a/inc/builder/type/header/menu/class-astra-header-menu-component.php b/inc/builder/type/header/menu/class-astra-header-menu-component.php
new file mode 100644
index 0000000..5c565b6
--- /dev/null
+++ b/inc/builder/type/header/menu/class-astra-header-menu-component.php
@@ -0,0 +1,153 @@
+<?php
+/**
+ * Menu for Astra theme.
+ *
+ * @package astra-builder
+ * @author Astra
+ * @copyright Copyright (c) 2020, Astra
+ * @link https://wpastra.com/
+ * @since 3.0.0
+ */
+
+if ( ! defined( 'ABSPATH' ) ) {
+ exit; // Exit if accessed directly.
+}
+
+define( 'ASTRA_HEADER_MENU_DIR', ASTRA_THEME_DIR . 'inc/builder/type/header/menu' );
+define( 'ASTRA_HEADER_MENU_URI', ASTRA_THEME_URI . 'inc/builder/type/header/menu' );
+
+/**
+ * Heading Initial Setup
+ *
+ * @since 3.0.0
+ */
+class Astra_Header_Menu_Component {
+
+ /**
+ * Constructor function that initializes required actions and hooks
+ */
+ public function __construct() {
+ // @codingStandardsIgnoreStart WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound
+ require_once ASTRA_HEADER_MENU_DIR . '/class-astra-header-menu-component-loader.php';
+
+ // Include front end files.
+ if ( ! is_admin() ) {
+ require_once ASTRA_HEADER_MENU_DIR . '/dynamic-css/dynamic.css.php';
+ }
+ // @codingStandardsIgnoreEnd WPThemeReview.CoreFunctionality.FileInclude.FileIncludeFound
+ }
+
+ /**
+ * Secondary navigation markup
+ *
+ * @param int $index index.
+ */
+ public static function menu_markup( $index ) {
+
+ switch ( $index ) {
+ case 1:
+ $theme_location = 'primary';
+ break;
+ case 2:
+ $theme_location = 'secondary_menu';
+ break;
+ default:
+ $theme_location = 'menu_' . $index;
+ break;
+ }
+
+ $_prefix = 'menu' . $index;
+
+ $submenu_class = apply_filters( 'secondary_submenu_border_class', ' submenu-with-border' );
+ $stack_on_mobile_class = 'inline-on-mobile';
+
+ if ( astra_get_option( 'header-' . $_prefix . '-menu-stack-on-mobile' ) ) {
+ $stack_on_mobile_class = 'stack-on-mobile';
+ }
+
+ // Menu Animation.
+ $menu_animation = astra_get_option( 'header-menu' . $index . '-submenu-container-animation' );
+ if ( ! empty( $menu_animation ) ) {
+ $submenu_class .= ' astra-menu-animation-' . esc_attr( $menu_animation ) . ' ';
+ }
+
+ // Menu hover animation.
+ $menu_hover_animation = astra_get_option( 'header-' . $_prefix . '-menu-hover-animation' );
+ if ( '' !== $menu_hover_animation ) {
+ $submenu_class .= ' ast-menu-hover-style-' . esc_attr( $menu_hover_animation ) . ' ';
+ }
+
+ /**
+ * Filter the classes(array) for Menu (<ul>).
+ *
+ * @since 3.0.0
+ * @var Array
+ */
+ $menu_classes = apply_filters( 'astra_' . $theme_location . '_menu_classes', array( 'main-header-menu', 'ast-nav-menu', 'ast-flex', $submenu_class, $stack_on_mobile_class ) );
+
+ $items_wrap = '<nav ';
+ $items_wrap .= astra_attr(
+ 'site-navigation',
+ array(
+ 'id' => 'site-navigation',
+ 'class' => 'ast-flex-grow-1 navigation-accessibility site-header-focus-item',
+ 'aria-label' => esc_attr__( 'Site Navigation', 'astra' ),
+ )
+ );
+ $items_wrap .= '>';
+ $items_wrap .= '<div class="main-navigation ast-inline-flex">';
+ $items_wrap .= '<ul id="%1$s" class="%2$s">%3$s</ul>';
+ $items_wrap .= '</div>';
+ $items_wrap .= '</nav>';
+
+ // Fallback Menu if primary menu not set.
+ $fallback_menu_args = array(
+ 'theme_location' => $theme_location,
+ 'menu_id' => 'ast-hf-menu-' . $index,
+ 'menu_class' => 'main-navigation ast-inline-flex',
+ 'container' => 'div',
+ 'before' => '<ul class="' . esc_attr( implode( ' ', $menu_classes ) ) . '">',
+ 'after' => '</ul>',
+ 'walker' => new Astra_Walker_Page(),
+ );
+
+ // To add default alignment for navigation which can be added through any third party plugin.
+ // Do not add any CSS from theme except header alignment.
+ echo '<div ' . astra_attr( 'ast-main-header-bar-alignment' ) . '>';
+
+ if ( is_customize_preview() ) {
+ Astra_Builder_UI_Controller::render_customizer_edit_button();
+ }
+ if ( has_nav_menu( $theme_location ) ) {
+ wp_nav_menu(
+ array(
+ 'menu_id' => 'ast-hf-menu-' . $index,
+ 'menu_class' => esc_attr( implode( ' ', $menu_classes ) ),
+ 'container' => 'div',
+ 'container_class' => 'main-header-bar-navigation',
+ 'items_wrap' => $items_wrap,
+ 'theme_location' => $theme_location,
+ )
+ );
+ } else {
+ echo '<div class="main-header-bar-navigation ast-flex-1">';
+ echo '<nav ';
+ echo astra_attr(
+ 'site-navigation',
+ array(
+ 'id' => 'site-navigation',
+ )
+ );
+ echo ' class="ast-flex-grow-1 navigation-accessibility" aria-label="' . esc_attr__( 'Site Navigation', 'astra' ) . '">';
+ wp_page_menu( $fallback_menu_args );
+ echo '</nav>';
+ echo '</div>';
+ }
+ echo '</div>';
+ }
+}
+
+/**
+ * Kicking this off by creating an object.
+ */
+new Astra_Header_Menu_Component();