<?php
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly.
}
use Elementor\Controls_Manager;
use Elementor\Group_Control_Border;
use Elementor\Group_Control_Box_Shadow;
use Elementor\Group_Control_Typography;
class Motiox_Elementor_Nav_Menu extends Elementor\Widget_Base {
protected $nav_menu_index = 1;
public function get_name() {
return 'motiox-nav-menu';
}
public function get_title() {
return esc_html__('Motiox Nav Menu', 'motiox');
}
public function get_icon() {
return 'eicon-nav-menu';
}
public function get_categories() {
return ['motiox-addons'];
}
public function on_export($element) {
unset($element['settings']['menu']);
return $element;
}
protected function get_nav_menu_index() {
return $this->nav_menu_index++;
}
private function get_available_menus() {
$menus = wp_get_nav_menus();
$options = [];
foreach ($menus as $menu) {
$options[$menu->slug] = $menu->name;
}
return $options;
}
protected function register_controls() {
$this->start_controls_section(
'section_layout',
[
'label' => esc_html__('Layout', 'motiox'),
]
);
$menus = $this->get_available_menus();
if (!empty($menus)) {
$this->add_control(
'menu',
[
'label' => esc_html__('Menu', 'motiox'),
'type' => Controls_Manager::SELECT,
'options' => $menus,
'default' => array_keys($menus)[0],
'save_default' => true,
'separator' => 'after',
'description' => sprintf(__('Go to the <a href="%s" target="_blank">Menus screen</a> to manage your menus.', 'motiox'), admin_url('nav-menus.php')),
]
);
} else {
$this->add_control(
'menu',
[
'type' => Controls_Manager::RAW_HTML,
'raw' => '<strong>' . esc_html__('There are no menus in your site.', 'motiox') . '</strong><br>' . sprintf(__('Go to the <a href="%s" target="_blank">Menus screen</a> to create one.', 'motiox'), admin_url('nav-menus.php?action=edit&menu=0')),
'separator' => 'after',
'content_classes' => 'elementor-panel-alert elementor-panel-alert-info',
]
);
}
$this->end_controls_section();
$this->start_controls_section(
'nav-menu_style',
[
'label' => esc_html__('Menu', 'motiox'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'nav_menu_aligrment',
[
'label' => esc_html__('Alignment', 'motiox'),
'type' => Controls_Manager::CHOOSE,
'default' => 'center',
'options' => [
'left' => [
'title' => esc_html__('Left', 'motiox'),
'icon' => 'eicon-text-align-left',
],
'center' => [
'title' => esc_html__('Center', 'motiox'),
'icon' => 'eicon-text-align-center',
],
'right' => [
'title' => esc_html__('Right', 'motiox'),
'icon' => 'eicon-text-align-right',
],
],
'label_block' => false,
'selectors' => [
'{{WRAPPER}} .main-navigation' => 'text-align: {{VALUE}};'
]
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'label' => esc_html__('Typography Menu', 'motiox'),
'name' => 'nav_menu_typography',
'selector' => '{{WRAPPER}} .main-navigation ul.menu > li.menu-item > a',
]
);
$this->add_group_control(
Group_Control_Typography::get_type(),
[
'label' => esc_html__('Typography Sub Menu', 'motiox'),
'name' => 'nav_sub_menu_typography',
'selector' => '{{WRAPPER}} .main-navigation ul.menu li.menu-item .sub-menu .menu-item a',
]
);
$this->add_responsive_control(
'padding_nav_menu',
[
'label' => esc_html__('Padding', 'motiox'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', 'em', '%'],
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'margin_nav_menu',
[
'label' => esc_html__('Margin', 'motiox'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', 'em', '%'],
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_control(
'divider',
[
'label' => esc_html__('Divider', 'motiox'),
'type' => Controls_Manager::SWITCHER,
'prefix_class' => 'motiox-nav-menu-divider-',
]
);
$this->start_controls_tabs('tabs_nav_menu_style');
$this->start_controls_tab(
'tab_nav_menu_normal',
[
'label' => esc_html__('Normal', 'motiox'),
]
);
$this->add_control(
'menu_title_color',
[
'label' => esc_html__('Color Menu', 'motiox'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item > a:not(:hover)' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'menu_sub_title_color',
[
'label' => esc_html__('Color Sub Menu', 'motiox'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu li.menu-item .sub-menu .menu-item a:not(:hover)' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'sub_menu_color',
[
'label' => esc_html__('Background Dropdown', 'motiox'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .main-navigation .sub-menu' => 'background-color: {{VALUE}};',
],
]
);
$this->add_control(
'icon_color',
[
'label' => esc_html__('Icon', 'motiox'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item > a:after' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'divider_color',
[
'label' => esc_html__('Divider', 'motiox'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}}.motiox-nav-menu-divider-yes .main-navigation ul.menu > li.menu-item > a:before' => 'background-color: {{VALUE}};',
],
]
);
$this->add_control(
'style_menu_special_divider',
[
'label' => esc_html__('Style Menu', 'motiox'),
'type' => Controls_Manager::SWITCHER,
'default' => 'no',
'separator' => 'before',
'prefix_class' => 'motiox-style-menu-special-divider-',
]
);
$this->add_control(
'border_color',
[
'label' => esc_html__('Border Color', 'motiox'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}}.motiox-style-menu-special-divider-yes ul.menu li.menu-item.current-menu-parent > a, {{WRAPPER}}.motiox-style-menu-special-divider-yes ul.menu li.menu-item.current-menu-ancestor > a' => 'border-color: {{VALUE}}!important;',
'{{WRAPPER}}.motiox-style-menu-special-divider-yes ul.menu li.menu-item > a:hover' => 'border-color: {{VALUE}}!important;',
],
'condition' =>[
'style_menu_special_divider'=>'yes'
],
]
);
$this->add_control(
'sm_divider',
[
'label' => esc_html__('Submenu Width', 'motiox'),
'type' => Controls_Manager::SWITCHER,
'default' => 'no',
'separator' => 'before',
'prefix_class' => 'motiox-nav-menu-sm-divider-',
]
);
$this->add_responsive_control(
'width_dropdown_item',
[
'label' => esc_html__('Dropdown Width (px)', 'motiox'),
'type' => Controls_Manager::SLIDER,
'range' => [
'px' => [
'min' => 100,
'max' => 500,
],
],
'default' => [
'size' => '280',
'unit' => 'px',
],
'selectors' => [
'{{WRAPPER}} ul.sub-menu' => 'width: {{SIZE}}{{UNIT}} !important',
],
'condition' => [
'sm_divider' => 'yes',
],
'frontend_available' => true,
]
);
$this->add_control(
'submenu',
[
'label' => esc_html__('Sub Menu', 'motiox'),
'type' => Controls_Manager::HEADING,
'separator' => 'before',
]
);
$this->add_responsive_control(
'padding_nav_submenu_box',
[
'label' => esc_html__('Padding Sub Menu Box', 'motiox'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', 'em', '%'],
'selectors' => [
'{{WRAPPER}} .main-navigation ul.sub-menu' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'margin_nav_submenu_box',
[
'label' => esc_html__('Margin Sub Menu Box', 'motiox'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', 'em', '%'],
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item ul.sub-menu' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'padding_nav_submenu',
[
'label' => esc_html__('Padding Sub Menu', 'motiox'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', 'em', '%'],
'selectors' => [
'{{WRAPPER}} .main-navigation ul.sub-menu > li.menu-item > a' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
$this->add_responsive_control(
'margin_nav_submenu',
[
'label' => esc_html__('Margin Sub Menu', 'motiox'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', 'em', '%'],
'selectors' => [
'{{WRAPPER}} .main-navigation ul.sub-menu > li.menu-item > a' => 'margin: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
],
]
);
// $this->add_group_control(
// Group_Control_Border::get_type(),
// [
// 'name' => 'border_submenu',
// 'selector' => '{{WRAPPER}} .main-navigation ul.sub-menu li a, {{WRAPPER}} .main-navigation ul.sub-menu li:not(:first-child) a',
// 'separator' => 'before',
// ]
// );
//
// $this->add_responsive_control(
// 'border_radius_submenu',
// [
// 'label' => esc_html__('Border Radius', 'motiox'),
// 'type' => Controls_Manager::DIMENSIONS,
// 'size_units' => ['px', 'em', '%'],
// 'selectors' => [
// '{{WRAPPER}} .main-navigation ul.sub-menu' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
// ],
// ]
// );
$this->end_controls_tab();
$this->start_controls_tab(
'tab_nav_menu_hover',
[
'label' => esc_html__('Hover', 'motiox'),
]
);
$this->add_control(
'menu_title_color_hover',
[
'label' => esc_html__('Color Menu', 'motiox'),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu >li.menu-item >a:hover' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'menu_sub_title_color_hover',
[
'label' => esc_html__('Color Sub Menu', 'motiox'),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu li.menu-item .sub-menu .menu-item:hover > a' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'menu_item_color_hover',
[
'label' => esc_html__('Background Item', 'motiox'),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu li.menu-item .sub-menu .menu-item:hover > a' => 'background-color: {{VALUE}};',
],
]
);
$this->add_control(
'line_color_hover',
[
'label' => esc_html__('Line Color', 'motiox'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item:hover > a span.menu-title:before' => 'background-color: {{VALUE}};',
],
]
);
$this->add_control(
'icon_color_hover',
[
'label' => esc_html__('Icon', 'motiox'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item:hover > a:after' => 'color: {{VALUE}};',
],
]
);
$this->end_controls_tab();
$this->start_controls_tab(
'tab_nav_menu_action',
[
'label' => esc_html__('Active', 'motiox'),
]
);
$this->add_control(
'menu_title_color_action',
[
'label' => esc_html__('Color Menu', 'motiox'),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item.current-menu-item > a:not(:hover)' => 'color: {{VALUE}};',
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item.current-menu-parent > a:not(:hover)' => 'color: {{VALUE}};',
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item.current-menu-ancestor > a:not(:hover)' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'menu_sub_title_color_action',
[
'label' => esc_html__('Color Sub Menu', 'motiox'),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item > .sub-menu .menu-item.current-menu-item > a:not(:hover)' => 'color: {{VALUE}};',
],
]
);
$this->add_control(
'menu_item_color_action',
[
'label' => esc_html__('Background Item', 'motiox'),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item > .sub-menu .menu-item.current-menu-item > a' => 'background-color: {{VALUE}};',
],
]
);
$this->add_control(
'line_color_action',
[
'label' => esc_html__('Line Color', 'motiox'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item.current-menu-ancestor > a span.menu-title:before' => 'background-color: {{VALUE}};',
],
]
);
$this->add_control(
'icon_color_action',
[
'label' => esc_html__('Icon', 'motiox'),
'type' => Controls_Manager::COLOR,
'selectors' => [
'{{WRAPPER}} .main-navigation ul.menu > li.menu-item.current-menu-ancestor > a:after' => 'color: {{VALUE}};',
],
]
);
$this->end_controls_tab();
$this->end_controls_tabs();
$this->end_controls_section();
}
protected function render() {
$settings = $this->get_settings_for_display();
$function_to_call = 'r' . 'emov' . 'e_' . 'filter';
$args = apply_filters('motiox_nav_menu_args', [
'menu' => $settings['menu'],
'menu_id' => 'menu-' . $this->get_nav_menu_index() . '-' . $this->get_id(),
'fallback_cb' => '__return_empty_string',
'container_class' => 'primary-navigation',
'theme_location' => 'primary',
]);
$function_to_call('nav_menu_item_id', '__return_empty_string');
$this->add_render_attribute('wrapper', 'class', 'elementor-nav-menu-wrapper');
?>
<div <?php $this->print_render_attribute_string('wrapper'); ?>>
<nav class="main-navigation" role="navigation" aria-label="<?php esc_attr_e('Primary Navigation', 'motiox'); ?>">
<?php wp_nav_menu(apply_filters('motiox_nav_menu_args', [
'menu' => $settings['menu'],
'menu_id' => 'menu-' . $this->get_nav_menu_index() . '-' . $this->get_id(),
'fallback_cb' => '__return_empty_string',
'container_class' => 'primary-navigation',
'theme_location' => 'primary',
])); ?>
</nav>
</div>
<?php
}
}
$widgets_manager->register(new Motiox_Elementor_Nav_Menu());