rray( $value ) && ( isset( $value['units'] ) || isset( $value['is_linked'] ) ) ) { if ( is_array( $selector ) ) { foreach ( $selector as $key => $selector_item ) { jet_menu_dynmic_css()->add_dimensions_css( array( 'selector' => sprintf( '%1$s %2$s', $_wrapper, $selector_item ), 'rule' => $data['rule'], 'values' => $value, 'important' => $data['important'], ) ); } } else { jet_menu_dynmic_css()->add_dimensions_css( array( 'selector' => sprintf( '%1$s %2$s', $_wrapper, $selector ), 'rule' => $data['rule'], 'values' => $value, 'important' => $data['important'], ) ); } continue; } $important = ( true === $data['important'] ) ? ' !important' : ''; if ( is_array( $selector ) ) { foreach ( $selector as $key => $selector_item ) { jet_menu()->dynamic_css_manager->add_style( sprintf( '%1$s %2$s', $_wrapper, $selector_item ), array( $data['rule'] => sprintf( $data['value'], esc_attr( $value ) ) . $important, ) ); } } else { if ( is_array( $value ) ) { $value = ''; } jet_menu()->dynamic_css_manager->add_style( sprintf( '%1$s %2$s', $_wrapper, $selector ), array( $data['rule'] => sprintf( $data['value'], esc_attr( $value ) ) . $important, ) ); } } // Items Styles $items_map = array( 'first' => array( 'top-left' => 'top', 'bottom-left' => 'left', ), 'last' => array( 'top-right' => 'right', 'bottom-right' => 'bottom', ), ); $wrapper = empty( $wrapper ) ? '.jet-menu' : $wrapper; foreach ( $items_map as $item => $data ) { $parent_radius = jet_menu()->settings_manager->options_manager->get_option( 'jet-menu-mega-border-radius' ); if ( ! $parent_radius ) { continue; } $is_enabled = jet_menu()->settings_manager->options_manager->get_option( 'jet-menu-inherit-' . $item . '-radius' ); if ( 'true' !== $is_enabled ) { continue; } $styles = array(); foreach ( $data as $rule => $val ) { if ( ! $parent_radius ) { continue; } $styles[ 'border-' . $rule . '-radius' ] = $parent_radius[ $val ] . $parent_radius['units']; } if ( ! empty( $styles ) ) { $selector = '%1$s > .jet-menu-item:%2$s-child > .top-level-link'; if ( 'last' === $item ) { $selectors = array( '%1$s > .jet-regular-item.jet-has-roll-up:nth-last-child(2) .top-level-link', '%1$s > .jet-regular-item.jet-no-roll-up:nth-last-child(1) .top-level-link', '%1$s > .jet-responsive-menu-available-items:last-child .top-level-link', ); $selector = join( ',', $selectors ); } jet_menu()->dynamic_css_manager->add_style( sprintf( $selector, $wrapper, $item ), $styles ); } } // Extra Styles $max_width = jet_menu()->settings_manager->options_manager->get_option( 'jet-menu-item-max-width', 0 ); if ( 0 !== absint( $max_width ) ) { jet_menu()->dynamic_css_manager->add_style( sprintf( '%1$s > .jet-menu-item', $wrapper ), array( 'max-width' => absint( $max_width ) . '%', ) ); } $menu_align = jet_menu()->settings_manager->options_manager->get_option( 'jet-menu-container-alignment' ); if ( 'stretch' === $menu_align ) { jet_menu()->dynamic_css_manager->add_style( sprintf( '%1$s > .jet-menu-item', $wrapper ), array( 'flex-grow' => 1, ) ); jet_menu()->dynamic_css_manager->add_style( sprintf( '%1$s > .jet-menu-item > a', $wrapper ), array( 'justify-content' => 'center', ) ); } // Mobile Styles $divider_enabled = jet_menu()->settings_manager->options_manager->get_option( 'jet-mobile-items-divider-enabled', false ); if ( filter_var( $divider_enabled, FILTER_VALIDATE_BOOLEAN ) ) { $divider_color = jet_menu()->settings_manager->options_manager->get_option( 'jet-mobile-items-divider-color', '#3a3a3a' ); $divider_width = jet_menu()->settings_manager->options_manager->get_option( 'jet-mobile-items-divider-width', '1' ); jet_menu()->dynamic_css_manager->add_style( '.jet-mobile-menu-single .jet-mobile-menu__item', array( 'border-bottom-style' => 'solid', 'border-bottom-width' => sprintf( '%spx', $divider_width ), 'border-bottom-color' => $divider_color, ) ); } $item_icon_enabled = jet_menu()->settings_manager->options_manager->get_option( 'jet-mobile-items-icon-enabled', 'true' ); if ( filter_var( $item_icon_enabled, FILTER_VALIDATE_BOOLEAN ) ) { $item_icon_ver_position = jet_menu()->settings_manager->options_manager->get_option( 'jet-mobile-items-icon-ver-position', 'center' ); switch ( $item_icon_ver_position ) { case 'top': $ver_position = 'flex-start'; break; case 'center': $ver_position = 'center'; break; case 'bottom': $ver_position = 'flex-end'; break; default: $ver_position = 'center'; break; } jet_menu()->dynamic_css_manager->add_style( '.jet-mobile-menu-single .jet-menu-icon', array( '-webkit-align-self' => $ver_position, 'align-self' => $ver_position, ) ); } $item_badge_enabled = jet_menu()->settings_manager->options_manager->get_option( 'jet-mobile-items-badge-enabled', 'true' ); if ( filter_var( $item_badge_enabled, FILTER_VALIDATE_BOOLEAN ) ) { $item_badge_ver_position = jet_menu()->settings_manager->options_manager->get_option( 'jet-mobile-items-badge-ver-position', 'center' ); switch ( $item_badge_ver_position ) { case 'top': $ver_position = 'flex-start'; break; case 'center': $ver_position = 'center'; break; case 'bottom': $ver_position = 'flex-end'; break; default: $ver_position = 'center'; break; } jet_menu()->dynamic_css_manager->add_style( '.jet-mobile-menu-single .jet-menu-badge', array( '-webkit-align-self' => $ver_position, 'align-self' => $ver_position, ) ); } } /** * Add font-related styles. */ public function add_fonts_styles( $preset = '' ) { $preset = ( ! empty( $preset ) ) ? $preset : ''; $fonts_options = apply_filters( 'jet-menu/menu-css/fonts', array( 'jet-top-menu' => '.jet-menu .jet-menu-item .top-level-link', 'jet-top-menu-desc' => '.jet-menu .jet-menu-item-desc.top-level-desc', 'jet-sub-menu' => '.jet-menu .jet-menu-item .sub-level-link', 'jet-sub-menu-desc' => '.jet-menu .jet-menu-item-desc.sub-level-desc', 'jet-menu-top-badge' => '.jet-menu .jet-menu-item .top-level-link .jet-menu-badge__inner', 'jet-menu-sub-badge' => '.jet-menu .jet-menu-item .sub-level-link .jet-menu-badge__inner', 'jet-menu-mobile-toggle-text' => '.jet-mobile-menu-single .jet-mobile-menu__toggle .jet-mobile-menu__toggle-text', 'jet-menu-mobile-back-text' => '.jet-mobile-menu-single .jet-mobile-menu__container .jet-mobile-menu__back span', 'jet-menu-mobile-breadcrumbs-text' => '.jet-mobile-menu-single .jet-mobile-menu__container .breadcrumb-label', 'jet-mobile-items-label' => '.jet-mobile-menu-single .jet-mobile-menu__item .mobile-link .jet-menu-label', 'jet-mobile-items-desc' => '.jet-mobile-menu-single .jet-mobile-menu__item .mobile-link .jet-menu-desc', 'jet-mobile-items-badge' => '.jet-mobile-menu-single .jet-mobile-menu__item .mobile-link .jet-menu-badge__inner', ) ); foreach ( $fonts_options as $font => $selector ) { jet_menu_dynmic_css()->add_single_font_styles( $font, $preset . $selector ); } } /** * Add backgound styles. */ public function add_backgrounds( $preset = '' ) { $preset = ( ! empty( $preset ) ) ? $preset : ''; $bg_options = apply_filters( 'jet-menu/menu-css/backgrounds', array( 'jet-menu-container' => '.jet-menu', 'jet-menu-item' => '.jet-menu .jet-menu-item .top-level-link', 'jet-menu-item-hover' => '.jet-menu .jet-menu-item:hover > .top-level-link', 'jet-menu-item-active' => '.jet-menu .jet-menu-item.jet-current-menu-item .top-level-link', 'jet-menu-top-badge-bg' => '.jet-menu .jet-menu-item .top-level-link .jet-menu-badge__inner', 'jet-menu-sub-badge-bg' => '.jet-menu .jet-menu-item .sub-level-link .jet-menu-badge__inner', 'jet-menu-sub-panel-simple' => '.jet-menu ul.jet-sub-menu', 'jet-menu-sub-panel-mega' => '.jet-menu div.jet-sub-mega-menu', 'jet-menu-sub' => '.jet-menu li.jet-sub-menu-item .sub-level-link', 'jet-menu-sub-hover' => '.jet-menu li.jet-sub-menu-item:hover > .sub-level-link', 'jet-menu-sub-active' => '.jet-menu li.jet-sub-menu-item.jet-current-menu-item .sub-level-link', ) ); foreach ( $bg_options as $option => $selector ) { jet_menu_dynmic_css()->add_single_bg_styles( $option, $preset . $selector ); } } /** * Add border styles. */ public function add_borders( $preset = '' ) { $preset = ( ! empty( $preset ) ) ? $preset : ''; $options = apply_filters( 'jet-menu/menu-css/borders', array( 'jet-menu-container' => '.jet-menu', 'jet-menu-item' => '.jet-menu .jet-menu-item .top-level-link', 'jet-menu-first-item' => '.jet-menu > .jet-regular-item:first-child .top-level-link', 'jet-menu-last-item' => array( '.jet-menu > .jet-regular-item.jet-has-roll-up:nth-last-child(2) .top-level-link', '.jet-menu > .jet-regular-item.jet-no-roll-up:nth-last-child(1) .top-level-link', '.jet-menu > .jet-responsive-menu-available-items:last-child .top-level-link', ), 'jet-menu-item-hover' => '.jet-menu .jet-menu-item:hover > .top-level-link', 'jet-menu-first-item-hover' => '.jet-menu > .jet-regular-item:first-child:hover > .top-level-link', 'jet-menu-last-item-hover' => array( '.jet-menu > .jet-regular-item.jet-has-roll-up:nth-last-child(2):hover .top-level-link', '.jet-menu > .jet-regular-item.jet-no-roll-up:nth-last-child(1):hover .top-level-link', '.jet-menu > .jet-responsive-menu-available-items:last-child:hover .top-level-link', ), 'jet-menu-item-active' => '.jet-menu .jet-menu-item.jet-current-menu-item .top-level-link', 'jet-menu-first-item-active' => '.jet-menu > .jet-regular-item:first-child.jet-current-menu-item .top-level-link', 'jet-menu-last-item-active' => array( '.jet-menu > .jet-regular-item.jet-current-menu-item.jet-has-roll-up:nth-last-child(2) .top-level-link', '.jet-menu > .jet-regular-item.jet-current-menu-item.jet-no-roll-up:nth-last-child(1) .top-level-link', '.jet-menu > .jet-responsive-menu-available-items.jet-current-menu-item:last-child .top-level-link', ), 'jet-menu-top-badge' => '.jet-menu .jet-menu-item .top-level-link .jet-menu-badge__inner', 'jet-menu-sub-badge' => '.jet-menu .jet-menu-item .sub-level-link .jet-menu-badge__inner', 'jet-menu-sub-panel-simple' => '.jet-menu ul.jet-sub-menu', 'jet-menu-sub-panel-mega' => '.jet-menu div.jet-sub-mega-menu', 'jet-menu-sub' => '.jet-menu li.jet-sub-menu-item .sub-level-link', 'jet-menu-sub-hover' => '.jet-menu li.jet-sub-menu-item:hover > .sub-level-link', 'jet-menu-sub-active' => '.jet-menu li.jet-sub-menu-item.jet-current-menu-item .sub-level-link', 'jet-menu-sub-first' => '.jet-menu .jet-sub-menu > li.jet-sub-menu-item:first-child > .sub-level-link', 'jet-menu-sub-first-hover' => '.jet-menu .jet-sub-menu > li.jet-sub-menu-item:first-child:hover > .sub-level-link', 'jet-menu-sub-first-active' => '.jet-menu .jet-sub-menu > li.jet-sub-menu-item.jet-current-menu-item:first-child > .sub-level-link', 'jet-menu-sub-last' => '.jet-menu .jet-sub-menu > li.jet-sub-menu-item:last-child > .sub-level-link', 'jet-menu-sub-last-hover' => '.jet-menu .jet-sub-menu > li.jet-sub-menu-item:last-child:hover > .sub-level-link', 'jet-menu-sub-last-active' => '.jet-menu .jet-sub-menu > li.jet-sub-menu-item.jet-current-menu-item:last-child > .sub-level-link', 'jet-menu-mobile-container' => '.jet-mobile-menu-single .jet-mobile-menu__container-inner', 'jet-menu-mobile-toggle' => '.jet-mobile-menu-single .jet-mobile-menu__toggle', ) ); foreach ( $options as $option => $selector ) { if ( is_array( $selector ) ) { $final_selector = ''; $delimiter = ''; foreach ( $selector as $part ) { $final_selector .= sprintf( '%3$s%1$s %2$s', $preset, $part, $delimiter ); $delimiter = ', '; } } else { $final_selector = $preset . $selector; } jet_menu_dynmic_css()->add_single_border_styles( $option, $final_selector ); } } /** * Add shadows styles. */ public function add_shadows( $preset = '' ) { $preset = ( ! empty( $preset ) ) ? $preset : ''; $options = apply_filters( 'jet-menu/menu-css/shadows', array( 'jet-menu-container' => '.jet-menu ', 'jet-menu-item' => '.jet-menu .jet-menu-item .top-level-link', 'jet-menu-item-hover' => '.jet-menu .jet-menu-item:hover > .top-level-link', 'jet-menu-item-active' => '.jet-menu .jet-menu-item.jet-current-menu-item .top-level-link', 'jet-menu-top-badge' => '.jet-menu .jet-menu-item .top-level-link .jet-menu-badge__inner', 'jet-menu-sub-badge' => '.jet-menu .jet-menu-item .sub-level-link .jet-menu-badge__inner', 'jet-menu-sub-panel-simple' => '.jet-menu ul.jet-sub-menu', 'jet-menu-sub-panel-mega' => '.jet-menu div.jet-sub-mega-menu', 'jet-menu-sub' => '.jet-menu li.jet-sub-menu-item .sub-level-link', 'jet-menu-sub-hover' => '.jet-menu li.jet-sub-menu-item:hover > .sub-level-link', 'jet-menu-sub-active' => '.jet-menu li.jet-sub-menu-item.jet-current-menu-item .sub-level-link', 'jet-menu-mobile-container' => '.jet-mobile-menu-single .jet-mobile-menu__container', 'jet-menu-mobile-toggle' => '.jet-mobile-menu-single .jet-mobile-menu__toggle', ) ); foreach ( $options as $option => $selector ) { jet_menu_dynmic_css()->add_single_shadow_styles( $option, $preset . $selector ); } } /** * Process position styles */ public function add_positions( $preset = '' ) { $preset = ( ! empty( $preset ) ) ? $preset : ''; $options = apply_filters( 'jet-menu/menu-css/positions', array( 'jet-menu-top-icon-%s-position' => '.jet-menu .jet-menu-item .top-level-link .jet-menu-icon', 'jet-menu-sub-icon-%s-position' => '.jet-menu .jet-menu-item .sub-level-link .jet-menu-icon', 'jet-menu-top-badge-%s-position' => '.jet-menu .jet-menu-item .top-level-link .jet-menu-badge', 'jet-menu-sub-badge-%s-position' => '.jet-menu .jet-menu-item .sub-level-link .jet-menu-badge', 'jet-menu-top-arrow-%s-position' => '.jet-menu .jet-menu-item .top-level-link .jet-dropdown-arrow', 'jet-menu-sub-arrow-%s-position' => '.jet-menu .jet-menu-item .sub-level-link .jet-dropdown-arrow', ) ); foreach ( $options as $option => $selector ) { jet_menu_dynmic_css()->add_single_position( $option, $preset . $selector ); } } /** * [buildItemsTree description] * @param array &$items [description] * @param integer $parentId [description] * @return [type] [description] */ public function buildItemsTree( array &$items, $parentId = false ) { $branch = []; foreach ( $items as &$item ) { if ( $item['itemParent'] === $parentId ) { $children = $this->buildItemsTree( $items, $item['id'] ); if ( $children && !$item['megaTemplateId'] ) { $item['children'] = $children; } $branch[ $item['id'] ] = $item; unset( $item ); } } return $branch; } /** * [get_menu_items_object_data description] * @param boolean $menu_id [description] * @return [type] [description] */ public function get_menu_items_object_data( $menu_id = false ) { if ( ! $menu_id ) { return false; } $menu = wp_get_nav_menu_object( $menu_id ); $menu_items = wp_get_nav_menu_items( $menu ); if ( ! $menu_items ) { return false; } return $menu_items; } /** * Get menu ID for current location * * @param [type] $location [description] * @return [type] [description] */ public function get_menu_id( $location = null ) { $locations = get_nav_menu_locations(); return isset( $locations[ $location ] ) ? $locations[ $location ] : false; } /** * [add_menu_advanced_styles description] * @param boolean $menu_id [description] */ public function add_menu_advanced_styles( $menu_id = false ) { if ( ! $menu_id ) { return false; } $menu_items = $this->get_menu_items_object_data( $menu_id ); if ( ! $menu_items ) { return false; } foreach ( $menu_items as $key => $item ) { jet_menu_tools()->add_menu_css( $item->ID, '.jet-menu-item-' . $item->ID ); } } /** * Constructor for the class */ public function __construct() { $this->load_files(); add_filter( 'body_class', array( $this, 'modify_body_class' ) ); add_action( 'jet-menu/blank-page/after-content', array( $this, 'set_menu_canvas_bg' ) ); add_filter( 'walker_nav_menu_start_el', array( $this, 'fix_double_desc' ), 0, 4 ); add_filter( 'wp_nav_menu_args', array( $this, 'set_menu_args' ), 99999 ); add_filter( 'pre_wp_nav_menu', array( $this, 'modify_pre_wp_nav_menu' ), 10, 2 ); } }