1956 lines
55 KiB
PHP
1956 lines
55 KiB
PHP
<?php
|
|
/**
|
|
* Option page Class
|
|
*/
|
|
|
|
// If class `Popups_Options_Page` doesn't exists yet.
|
|
if ( ! class_exists( 'Jet_Menu_Options_Page' ) ) {
|
|
|
|
/**
|
|
* Jet_Menu_Options_Page class.
|
|
*/
|
|
class Jet_Menu_Options_Page {
|
|
|
|
/**
|
|
* A reference to an instance of this class.
|
|
*
|
|
* @since 1.0.0
|
|
* @var object
|
|
*/
|
|
private static $instance = null;
|
|
|
|
/**
|
|
* Instance of the class Cherry_Interface_Builder.
|
|
*
|
|
* @since 1.0.0
|
|
* @var object
|
|
*/
|
|
private $builder = null;
|
|
|
|
/**
|
|
* HTML spinner.
|
|
*
|
|
* @since 1.0.0
|
|
* @var string
|
|
* @access private
|
|
*/
|
|
private $spinner = '<span class="loader-wrapper"><span class="loader"></span></span>';
|
|
|
|
/**
|
|
* Dashicons.
|
|
*
|
|
* @since 1.0.0
|
|
* @var string
|
|
* @access private
|
|
*/
|
|
private $button_icon = '<span class="dashicons dashicons-yes icon"></span>';
|
|
|
|
/**
|
|
* Fonts loader instance
|
|
*
|
|
* @var object
|
|
*/
|
|
protected $fonts_loader = null;
|
|
|
|
/**
|
|
* Default options
|
|
*
|
|
* @var array
|
|
*/
|
|
public $default_options = array(
|
|
'jet-menu-animation' => 'fade',
|
|
'jet-menu-mega-bg-type' => 'fill-color',
|
|
'jet-menu-mega-bg-color' => '#fff',
|
|
'jet-menu-mega-bg-color-opacity' => 100,
|
|
'jet-menu-mega-bg-image' => '',
|
|
'jet-menu-mega-padding' => array(
|
|
'units' => 'px',
|
|
'is_linked' => true,
|
|
'size' => array(
|
|
'top' => '10',
|
|
'right' => '10',
|
|
'bottom' => '10',
|
|
'left' => '10',
|
|
),
|
|
),
|
|
);
|
|
|
|
/**
|
|
* Options cache
|
|
*
|
|
* @var boolean
|
|
*/
|
|
private $options = false;
|
|
|
|
/**
|
|
* Slug DB option field.
|
|
*
|
|
* @since 1.0.0
|
|
* @var object
|
|
*/
|
|
private $options_slug = 'jet_menu_options';
|
|
|
|
/**
|
|
* Class constructor.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function __construct() {
|
|
|
|
$this->fonts_loader = jet_menu()->get_core()->init_module(
|
|
'cherry-google-fonts-loader',
|
|
array(
|
|
'prefix' => $this->options_slug,
|
|
'type' => 'option',
|
|
'single' => true,
|
|
'options' => array(
|
|
'main' => array(
|
|
'family' => 'jet-top-menu-font-family',
|
|
'style' => 'jet-top-menu-font-style',
|
|
'weight' => 'jet-top-menu-font-weight',
|
|
'charset' => 'jet-top-menu-subset',
|
|
),
|
|
'main-desc' => array(
|
|
'family' => 'jet-top-menu-desc-font-family',
|
|
'style' => 'jet-top-menu-desc-font-style',
|
|
'weight' => 'jet-top-menu-desc-font-weight',
|
|
'charset' => 'jet-top-menu-desc-subset',
|
|
),
|
|
'sub' => array(
|
|
'family' => 'jet-sub-menu-font-family',
|
|
'style' => 'jet-sub-menu-font-style',
|
|
'weight' => 'jet-sub-menu-font-weight',
|
|
'charset' => 'jet-sub-menu-subset',
|
|
),
|
|
'sub-desc' => array(
|
|
'family' => 'jet-sub-menu-desc-font-family',
|
|
'style' => 'jet-sub-menu-desc-font-style',
|
|
'weight' => 'jet-sub-menu-desc-font-weight',
|
|
'charset' => 'jet-sub-menu-desc-subset',
|
|
),
|
|
'top-badge' => array(
|
|
'family' => 'jet-menu-top-badge-font-family',
|
|
'style' => 'jet-menu-top-badge-font-style',
|
|
'weight' => 'jet-menu-top-badge-font-weight',
|
|
'charset' => 'jet-menu-top-badge-subset',
|
|
),
|
|
'sub-badge' => array(
|
|
'family' => 'jet-menu-sub-badge-font-family',
|
|
'style' => 'jet-menu-sub-badge-font-style',
|
|
'weight' => 'jet-menu-sub-badge-font-weight',
|
|
'charset' => 'jet-menu-sub-badge-subset',
|
|
),
|
|
),
|
|
)
|
|
);
|
|
|
|
$sys_messages = array(
|
|
'invalid_base_data' => esc_html__( 'Unable to process the request without nonce or server error', 'jet-menu' ),
|
|
'no_right' => esc_html__( 'No right for this action', 'jet-menu' ),
|
|
'invalid_nonce' => esc_html__( 'Stop CHEATING!!!', 'jet-menu' ),
|
|
'access_is_allowed' => '',
|
|
'wait_processing' => esc_html__( 'Please wait, processing the previous request', 'jet-menu' ),
|
|
);
|
|
|
|
jet_menu()->get_core()->init_module(
|
|
'cherry-handler',
|
|
array(
|
|
'id' => 'jet_menu_save_options_ajax',
|
|
'action' => 'jet_menu_save_options_ajax',
|
|
'capability' => 'manage_options',
|
|
'callback' => array( $this , 'jet_menu_save_options_callback' ),
|
|
'sys_messages' => $sys_messages,
|
|
)
|
|
);
|
|
|
|
jet_menu()->get_core()->init_module(
|
|
'cherry-handler',
|
|
array(
|
|
'id' => 'jet_menu_restore_options_ajax',
|
|
'action' => 'jet_menu_restore_options_ajax',
|
|
'capability' => 'manage_options',
|
|
'callback' => array( $this , 'jet_menu_restore_options_callback' ),
|
|
'sys_messages' => $sys_messages,
|
|
)
|
|
);
|
|
|
|
if ( is_admin() ) {
|
|
// Load the admin menu.
|
|
add_action( 'admin_menu', array( $this, 'add_menu_item' ) );
|
|
add_action( 'current_screen', array( $this, 'interface_builder_init' ) );
|
|
|
|
add_action( 'admin_init', array( $this, 'process_export' ) );
|
|
add_action( 'admin_init', array( $this, 'process_reset' ) );
|
|
|
|
}
|
|
|
|
add_action( 'wp_ajax_jet_menu_import_options', array( $this, 'process_import' ) );
|
|
add_filter( 'jet-data-importer/export/options-to-export', array( $this, 'export_menu_options' ) );
|
|
|
|
}
|
|
|
|
/**
|
|
* Pass menu options key into exported options array
|
|
*
|
|
* @param [type] $options [description]
|
|
* @return [type] [description]
|
|
*/
|
|
public function export_menu_options( $options ) {
|
|
$options[] = $this->options_slug;
|
|
return $options;
|
|
}
|
|
|
|
/**
|
|
* Interface Builder Init
|
|
*
|
|
* @return void
|
|
*/
|
|
public function interface_builder_init() {
|
|
$screen = get_current_screen();
|
|
|
|
if ( 'toplevel_page_jet-menu' === $screen->base ) {
|
|
$this->builder = jet_menu()->get_core()->init_module( 'cherry-interface-builder', array() );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Register the admin menu.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function add_menu_item() {
|
|
add_menu_page(
|
|
esc_html__( 'JetMenu', 'jet-menu' ),
|
|
esc_html__( 'JetMenu', 'jet-menu' ),
|
|
'manage_options',
|
|
jet_menu()->plugin_slug,
|
|
array( $this, 'render_options_page' ),
|
|
'',
|
|
100
|
|
);
|
|
|
|
}
|
|
|
|
/**
|
|
* Save options
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function jet_menu_save_options_callback() {
|
|
|
|
if ( ! empty( $_REQUEST['data'] ) ) {
|
|
$data = $_REQUEST['data'];
|
|
|
|
$this->save_options( $this->options_slug, $data );
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Restore options
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function jet_menu_restore_options_callback() {
|
|
$default_options = get_option( $this->options_slug . '_default' );
|
|
$this->save_options( $this->options_slug, $default_options );
|
|
}
|
|
|
|
/**
|
|
* Render plugin options page.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function render_options_page() {
|
|
|
|
$default_mobile_breakpoint = $this->get_default_mobile_breakpoint();
|
|
|
|
jet_menu_dynmic_css()->init_builder( $this->builder );
|
|
|
|
$this->builder->register_section(
|
|
array(
|
|
'jet_menu_options_section' => array(
|
|
'type' => 'section',
|
|
'scroll' => false,
|
|
'title' => esc_html__( 'JetMenu', 'jet-menu' ),
|
|
'description' => esc_html__( 'General JetMenu Settings', 'jet-menu' ),
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_form(
|
|
array(
|
|
'jet-menu-options-form' => array(
|
|
'type' => 'form',
|
|
'enctype' => 'multipart/form-data',
|
|
'parent' => 'jet_menu_options_section',
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_settings(
|
|
array(
|
|
'option_page_content' => array(
|
|
'type' => 'settings',
|
|
'parent' => 'jet-menu-options-form',
|
|
),
|
|
'option_page_footer' => array(
|
|
'type' => 'settings',
|
|
'parent' => 'jet-menu-options-form',
|
|
'class' => 'option-page-footer',
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_component(
|
|
array(
|
|
'tab_vertical' => array(
|
|
'type' => 'component-tab-vertical',
|
|
'parent' => 'option_page_content',
|
|
'view' => jet_menu()->get_template( 'admin/component-tab-vertical.php' ),
|
|
),
|
|
)
|
|
);
|
|
|
|
$tabs = apply_filters( 'jet-menu/options-page/tabs', array(
|
|
'general_tab' => array(
|
|
'parent' => 'tab_vertical',
|
|
'title' => esc_html__( 'General', 'jet-menu' ),
|
|
),
|
|
'styles_tab' => array(
|
|
'parent' => 'tab_vertical',
|
|
'title' => esc_html__( 'Styles', 'jet-menu' ),
|
|
),
|
|
'main_items_styles_tab' => array(
|
|
'parent' => 'tab_vertical',
|
|
'title' => esc_html__( 'Main Menu Styles', 'jet-menu' ),
|
|
),
|
|
'sub_items_styles_tab' => array(
|
|
'parent' => 'tab_vertical',
|
|
'title' => esc_html__( 'Sub Menu Styles', 'jet-menu' ),
|
|
),
|
|
'mobile_menu_tab' => array(
|
|
'parent' => 'tab_vertical',
|
|
'title' => esc_html__( 'Mobile Menu', 'jet-menu' ),
|
|
),
|
|
'advanced_tab' => array(
|
|
'parent' => 'tab_vertical',
|
|
'title' => esc_html__( 'Advanced', 'jet-menu' ),
|
|
),
|
|
) );
|
|
|
|
$this->builder->register_settings( $tabs );
|
|
|
|
$import_template = jet_menu()->get_template( 'admin/settings-import-export.php' );
|
|
|
|
ob_start();
|
|
include $import_template;
|
|
$import_export = ob_get_clean();
|
|
|
|
$this->builder->register_html(
|
|
array(
|
|
'jet-menu-import-export' => array(
|
|
'type' => 'html',
|
|
'parent' => 'option_page_footer',
|
|
'class' => 'jet-menu-import-export',
|
|
'html' => $import_export,
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-reset-options' => array(
|
|
'type' => 'button',
|
|
'parent' => 'option_page_footer',
|
|
'style' => 'normal',
|
|
'view_wrapping' => false,
|
|
'class' => 'jet-reset-options',
|
|
'content' => esc_html__( 'Reset', 'jet-menu' ),
|
|
),
|
|
'jet-menu-save-options' => array(
|
|
'type' => 'button',
|
|
'parent' => 'option_page_footer',
|
|
'style' => 'success',
|
|
'class' => 'custom-class',
|
|
'view_wrapping' => false,
|
|
'content' => '<span class="text">' . esc_html__( 'Save', 'jet-menu' ) . '</span>' . $this->spinner . $this->button_icon,
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->section_start( 'general_tab' );
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-animation' => array(
|
|
'type' => 'select',
|
|
'parent' => 'general_tab',
|
|
'title' => esc_html__( 'Animation', 'jet-menu' ),
|
|
'multiple' => false,
|
|
'filter' => true,
|
|
'value' => $this->get_option( 'jet-menu-animation' ),
|
|
'options' => array(
|
|
'none' => esc_html__( 'None', 'jet-menu' ),
|
|
'fade' => esc_html__( 'Fade', 'jet-menu' ),
|
|
'move-up' => esc_html__( 'Move Up', 'jet-menu' ),
|
|
'move-down' => esc_html__( 'Move Down', 'jet-menu' ),
|
|
),
|
|
'placeholder' => 'Select',
|
|
'label' => '',
|
|
'class' => '',
|
|
),
|
|
|
|
'jet-menu-roll-up' => array(
|
|
'type' => 'switcher',
|
|
'parent' => 'general_tab',
|
|
'title' => esc_html__( 'Menu rollUp', 'jet-menu' ),
|
|
'description' => esc_html__( 'Enable this option in order to reduce the menu size by grouping extra menu items and hiding them under the suspension dots.', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-roll-up', 'false' ),
|
|
'toggle' => array(
|
|
'true_toggle' => 'On',
|
|
'false_toggle' => 'Off',
|
|
),
|
|
),
|
|
|
|
'jet-menu-mouseleave-delay' => array(
|
|
'type' => 'slider',
|
|
'parent' => 'general_tab',
|
|
'title' => esc_html__( 'Mouse Leave Delay', 'jet-menu' ),
|
|
'max_value' => 10000,
|
|
'min_value' => 0,
|
|
'value' => $this->get_option( 'jet-menu-mouseleave-delay', 500 ),
|
|
'step_value' => 100,
|
|
),
|
|
|
|
'jet-mega-menu-width-type' => array(
|
|
'type' => 'radio',
|
|
'parent' => 'general_tab',
|
|
'title' => esc_html__( 'Mega menu base width', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-mega-menu-width-type', 'container' ),
|
|
'options' => array(
|
|
'container' => array(
|
|
'label' => esc_html__( 'Width same as main container width', 'jet-menu' ),
|
|
),
|
|
'items' => array(
|
|
'label' => esc_html__( 'Width same as total items width', 'jet-menu' ),
|
|
),
|
|
'selector' => array(
|
|
'label' => esc_html__( 'Width same as Custom css selector width', 'jet-menu' ),
|
|
'slave' => 'jet-mega-menu-selector-width-type',
|
|
)
|
|
),
|
|
'label' => '',
|
|
'class' => '',
|
|
),
|
|
|
|
'jet-mega-menu-selector-width-type' => array(
|
|
'type' => 'text',
|
|
'parent' => 'general_tab',
|
|
'title' => esc_html__( 'Mega menu width selector', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-mega-menu-selector-width-type', '' ),
|
|
'label' => '',
|
|
'class' => '',
|
|
'master' => 'jet-mega-menu-selector-width-type',
|
|
),
|
|
|
|
'jet-menu-open-sub-type' => array(
|
|
'type' => 'select',
|
|
'parent' => 'general_tab',
|
|
'title' => esc_html__( 'Sub menu open event', 'jet-menu' ),
|
|
'multiple' => false,
|
|
'filter' => true,
|
|
'value' => $this->get_option( 'jet-menu-open-sub-type', 'hover' ),
|
|
'options' => array(
|
|
'hover' => esc_html__( 'Hover', 'jet-menu' ),
|
|
'click' => esc_html__( 'Click', 'jet-menu' ),
|
|
),
|
|
'placeholder' => 'Select',
|
|
'label' => '',
|
|
'class' => '',
|
|
),
|
|
|
|
'jet-menu-mobile-breakpoint' => array(
|
|
'type' => 'slider',
|
|
'parent' => 'general_tab',
|
|
'title' => esc_html__( 'Mobile breakpoint (px)', 'jet-menu' ),
|
|
'description' => esc_html__( 'Sets the breakpoint between desktop menu and mobile menu. Below this breakpoint mobile menu will appear.', 'jet-menu' ),
|
|
'max_value' => 1200,
|
|
'min_value' => 480,
|
|
'value' => $this->get_option( 'jet-menu-mobile-breakpoint', $default_mobile_breakpoint ),
|
|
'step_value' => 1,
|
|
),
|
|
)
|
|
);
|
|
|
|
$template = get_template();
|
|
|
|
if ( file_exists( jet_menu()->plugin_path( "integration/themes/{$template}" ) ) ) {
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-disable-integration-' . $template => array(
|
|
'type' => 'switcher',
|
|
'parent' => 'general_tab',
|
|
'title' => esc_html__( 'Disable default theme integration file', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-disable-integration-' . $template, 'false' ),
|
|
'toggle' => array(
|
|
'true_toggle' => 'On',
|
|
'false_toggle' => 'Off',
|
|
),
|
|
),
|
|
)
|
|
);
|
|
|
|
}
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-cache-css' => array(
|
|
'type' => 'switcher',
|
|
'parent' => 'general_tab',
|
|
'title' => esc_html__( 'Cache menu CSS', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-cache-css', 'true' ),
|
|
'toggle' => array(
|
|
'true_toggle' => 'On',
|
|
'false_toggle' => 'Off',
|
|
),
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->section_end( 'general_tab' );
|
|
|
|
$this->section_start( 'styles_tab' );
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-container-alignment' => array(
|
|
'type' => 'select',
|
|
'parent' => 'styles_tab',
|
|
'title' => esc_html__( 'Menu items alignment', 'jet-menu' ),
|
|
'multiple' => false,
|
|
'value' => $this->get_option( 'jet-menu-container-alignment' ),
|
|
'options' => array(
|
|
'flex-end' => esc_html__( 'End', 'jet-menu' ),
|
|
'center' => esc_html__( 'Center', 'jet-menu' ),
|
|
'flex-start' => esc_html__( 'Start', 'jet-menu' ),
|
|
'stretch' => esc_html__( 'Stretch', 'jet-menu' ),
|
|
),
|
|
'label' => '',
|
|
'class' => '',
|
|
),
|
|
)
|
|
);
|
|
|
|
jet_menu_dynmic_css()->add_background_options( array(
|
|
'name' => 'jet-menu-container',
|
|
'label' => esc_html__( 'Menu container', 'jet-menu' ),
|
|
'parent' => 'styles_tab',
|
|
'defaults' => array(
|
|
'color' => '#ffffff',
|
|
),
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_border_options( array(
|
|
'name' => 'jet-menu-container',
|
|
'label' => esc_html__( 'Menu container', 'jet-menu' ),
|
|
'parent' => 'styles_tab',
|
|
'defaults' => array(
|
|
'top' => '1',
|
|
'right' => '1',
|
|
'bottom' => '1',
|
|
'left' => '1',
|
|
),
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_box_shadow_options( array(
|
|
'name' => 'jet-menu-container',
|
|
'label' => esc_html__( 'Menu container', 'jet-menu' ),
|
|
'parent' => 'styles_tab',
|
|
) );
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-mega-border-radius' => array(
|
|
'type' => 'dimensions',
|
|
'parent' => 'styles_tab',
|
|
'title' => esc_html__( 'Menu container border radius', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
'%' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-mega-border-radius' ),
|
|
),
|
|
'jet-menu-inherit-first-radius' => array(
|
|
'type' => 'switcher',
|
|
'title' => esc_html__( 'Inherit border radius for the first menu item from main container', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-inherit-first-radius' ),
|
|
'toggle' => array(
|
|
'true_toggle' => 'On',
|
|
'false_toggle' => 'Off',
|
|
),
|
|
'parent' => 'styles_tab',
|
|
),
|
|
'jet-menu-inherit-last-radius' => array(
|
|
'type' => 'switcher',
|
|
'title' => esc_html__( 'Inherit border radius for the last menu item from main container', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-inherit-last-radius' ),
|
|
'toggle' => array(
|
|
'true_toggle' => 'On',
|
|
'false_toggle' => 'Off',
|
|
),
|
|
'parent' => 'styles_tab',
|
|
),
|
|
'jet-menu-mega-padding' => array(
|
|
'type' => 'dimensions',
|
|
'parent' => 'styles_tab',
|
|
'title' => esc_html__( 'Menu container padding', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-mega-padding' ),
|
|
),
|
|
'jet-menu-min-width' => array(
|
|
'type' => 'slider',
|
|
'parent' => 'styles_tab',
|
|
'title' => esc_html__( 'Menu container min width (px)', 'jet-menu' ),
|
|
'description' => esc_html__( 'Set 0 to automatic width detection', 'jet-menu' ),
|
|
'max_value' => 900,
|
|
'min_value' => 0,
|
|
'value' => $this->get_option( 'jet-menu-min-width', 0 ),
|
|
'step_value' => 1,
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->section_end( 'styles_tab' );
|
|
|
|
$this->section_start( 'main_items_styles_tab' );
|
|
|
|
jet_menu_dynmic_css()->add_typography_options(
|
|
array(
|
|
'label' => esc_html__( 'Top level menu', 'jet-menu' ),
|
|
'name' => 'jet-top-menu',
|
|
'parent' => 'main_items_styles_tab',
|
|
)
|
|
);
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-show-top-menu-desc' => array(
|
|
'type' => 'switcher',
|
|
'parent' => 'main_items_styles_tab',
|
|
'title' => esc_html__( 'Show Item Description', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-show-top-menu-desc', 'true' ),
|
|
'toggle' => array(
|
|
'true_toggle' => 'On',
|
|
'false_toggle' => 'Off',
|
|
),
|
|
),
|
|
)
|
|
);
|
|
|
|
jet_menu_dynmic_css()->add_typography_options(
|
|
array(
|
|
'label' => esc_html__( 'Top level menu description', 'jet-menu' ),
|
|
'name' => 'jet-top-menu-desc',
|
|
'parent' => 'main_items_styles_tab',
|
|
)
|
|
);
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-item-max-width' => array(
|
|
'type' => 'slider',
|
|
'parent' => 'main_items_styles_tab',
|
|
'title' => esc_html__( 'Top level item max width (%)', 'jet-menu' ),
|
|
'description' => esc_html__( 'Set 0 to automatic width detection', 'jet-menu' ),
|
|
'max_value' => 100,
|
|
'min_value' => 0,
|
|
'value' => $this->get_option( 'jet-menu-item-max-width', 0 ),
|
|
'step_value' => 1,
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_component(
|
|
array(
|
|
'menu_items_tabs' => array(
|
|
'type' => 'component-tab-horizontal',
|
|
'parent' => 'main_items_styles_tab',
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_settings(
|
|
array(
|
|
'item_default_tab' => array(
|
|
'parent' => 'menu_items_tabs',
|
|
'title' => esc_html__( 'Default', 'jet-menu' ),
|
|
),
|
|
'item_hover_tab' => array(
|
|
'parent' => 'menu_items_tabs',
|
|
'title' => esc_html__( 'Hover', 'jet-menu' ),
|
|
),
|
|
'item_active_tab' => array(
|
|
'parent' => 'menu_items_tabs',
|
|
'title' => esc_html__( 'Active', 'jet-menu' ),
|
|
),
|
|
)
|
|
);
|
|
|
|
$tabs = array(
|
|
'default' => '',
|
|
'hover' => '-hover',
|
|
'active' => '-active',
|
|
);
|
|
|
|
foreach ( $tabs as $tab => $opt ) {
|
|
|
|
$this->section_start( 'item_' . $tab . '_tab' );
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-item-text-color' . $opt => array(
|
|
'type' => 'colorpicker',
|
|
'parent' => 'item_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item text color', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-item-text-color' . $opt ),
|
|
'alpha' => true,
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-item-desc-color' . $opt => array(
|
|
'type' => 'colorpicker',
|
|
'parent' => 'item_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item description color', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-item-desc-color' . $opt ),
|
|
'alpha' => true,
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-top-icon-color' . $opt => array(
|
|
'type' => 'colorpicker',
|
|
'parent' => 'item_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item Icon Color', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-top-icon-color' . $opt ),
|
|
'alpha' => true,
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-top-arrow-color' . $opt => array(
|
|
'type' => 'colorpicker',
|
|
'parent' => 'item_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item drop-down arrow color', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-top-arrow-color' . $opt ),
|
|
'alpha' => true,
|
|
),
|
|
)
|
|
);
|
|
|
|
jet_menu_dynmic_css()->add_background_options( array(
|
|
'name' => 'jet-menu-item' . $opt,
|
|
'label' => esc_html__( 'Item', 'jet-menu' ),
|
|
'parent' => 'item_' . $tab . '_tab',
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_border_options( array(
|
|
'name' => 'jet-menu-item' . $opt,
|
|
'label' => esc_html__( 'Item', 'jet-menu' ),
|
|
'parent' => 'item_' . $tab . '_tab',
|
|
'defaults' => array(
|
|
'top' => '1',
|
|
'right' => '1',
|
|
'bottom' => '1',
|
|
'left' => '1',
|
|
),
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_border_options( array(
|
|
'name' => 'jet-menu-first-item' . $opt,
|
|
'label' => esc_html__( 'First item', 'jet-menu' ),
|
|
'parent' => 'item_' . $tab . '_tab',
|
|
'defaults' => array(
|
|
'top' => '1',
|
|
'right' => '1',
|
|
'bottom' => '1',
|
|
'left' => '1',
|
|
),
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_border_options( array(
|
|
'name' => 'jet-menu-last-item' . $opt,
|
|
'label' => esc_html__( 'Last item', 'jet-menu' ),
|
|
'parent' => 'item_' . $tab . '_tab',
|
|
'defaults' => array(
|
|
'top' => '1',
|
|
'right' => '1',
|
|
'bottom' => '1',
|
|
'left' => '1',
|
|
),
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_box_shadow_options( array(
|
|
'name' => 'jet-menu-item' . $opt,
|
|
'label' => esc_html__( 'Item', 'jet-menu' ),
|
|
'parent' => 'item_' . $tab . '_tab',
|
|
) );
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-item-border-radius' . $opt => array(
|
|
'type' => 'dimensions',
|
|
'parent' => 'item_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item border radius', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
'%' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-item-border-radius' . $opt ),
|
|
),
|
|
'jet-menu-item-padding' . $opt => array(
|
|
'type' => 'dimensions',
|
|
'parent' => 'item_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item padding', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-item-padding' . $opt ),
|
|
),
|
|
'jet-menu-item-margin' . $opt => array(
|
|
'type' => 'dimensions',
|
|
'parent' => 'item_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item margin', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => -50,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-item-margin' . $opt ),
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->section_start( 'item_' . $tab . '_tab' );
|
|
|
|
}
|
|
|
|
$this->builder->register_component(
|
|
array(
|
|
'menu_sub_panel_tabs' => array(
|
|
'type' => 'component-tab-horizontal',
|
|
'parent' => 'sub_items_styles_tab',
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_settings(
|
|
array(
|
|
'sub_panel_simple_tab' => array(
|
|
'parent' => 'menu_sub_panel_tabs',
|
|
'title' => esc_html__( 'Simple Submenu Panel', 'jet-menu' ),
|
|
),
|
|
'sub_panel_mega_tab' => array(
|
|
'parent' => 'menu_sub_panel_tabs',
|
|
'title' => esc_html__( 'Mega Submenu Panel', 'jet-menu' ),
|
|
),
|
|
)
|
|
);
|
|
|
|
$tabs = array(
|
|
'simple' => '-simple',
|
|
'mega' => '-mega',
|
|
);
|
|
|
|
foreach ( $tabs as $tab => $opt ) {
|
|
|
|
$this->section_start( 'sub_panel_' . $tab . '_tab' );
|
|
|
|
if ( 'simple' === $tab ) {
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-sub-panel-width-simple' => array(
|
|
'type' => 'slider',
|
|
'max_value' => 400,
|
|
'min_value' => 100,
|
|
'value' => $this->get_option( 'jet-menu-sub-panel-width-simple', 200 ),
|
|
'step_value' => 1,
|
|
'title' => esc_html__( 'Panel Width', 'jet-menu' ),
|
|
'parent' => 'sub_panel_simple_tab',
|
|
),
|
|
)
|
|
);
|
|
}
|
|
|
|
jet_menu_dynmic_css()->add_background_options( array(
|
|
'name' => 'jet-menu-sub-panel' . $opt,
|
|
'label' => esc_html__( 'Panel', 'jet-menu' ),
|
|
'parent' => 'sub_panel_' . $tab . '_tab',
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_border_options( array(
|
|
'name' => 'jet-menu-sub-panel' . $opt,
|
|
'label' => esc_html__( 'Panel', 'jet-menu' ),
|
|
'parent' => 'sub_panel_' . $tab . '_tab',
|
|
'defaults' => array(
|
|
'top' => '1',
|
|
'right' => '1',
|
|
'bottom' => '1',
|
|
'left' => '1',
|
|
),
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_box_shadow_options( array(
|
|
'name' => 'jet-menu-sub-panel' . $opt,
|
|
'label' => esc_html__( 'Panel', 'jet-menu' ),
|
|
'parent' => 'sub_panel_' . $tab . '_tab',
|
|
) );
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-sub-panel-border-radius' . $opt => array(
|
|
'type' => 'dimensions',
|
|
'parent' => 'sub_panel_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Panel border radius', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
'%' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-sub-panel-border-radius' . $opt ),
|
|
),
|
|
'jet-menu-sub-panel-padding' . $opt => array(
|
|
'type' => 'dimensions',
|
|
'parent' => 'sub_panel_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Panel padding', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-sub-panel-padding' . $opt ),
|
|
),
|
|
'jet-menu-sub-panel-margin' . $opt => array(
|
|
'type' => 'dimensions',
|
|
'parent' => 'sub_panel_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Panel margin', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => -50,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-sub-panel-margin' . $opt ),
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->section_end( 'sub_panel_' . $tab . '_tab' );
|
|
|
|
}
|
|
|
|
$this->section_start( 'sub_items_styles_tab' );
|
|
|
|
jet_menu_dynmic_css()->add_typography_options(
|
|
array(
|
|
'label' => esc_html__( 'Submenu', 'jet-menu' ),
|
|
'name' => 'jet-sub-menu',
|
|
'parent' => 'sub_items_styles_tab',
|
|
)
|
|
);
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-show-sub-menu-desc' => array(
|
|
'type' => 'switcher',
|
|
'parent' => 'sub_items_styles_tab',
|
|
'title' => esc_html__( 'Show Submenu Item Description', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-show-sub-menu-desc', 'true' ),
|
|
'toggle' => array(
|
|
'true_toggle' => 'On',
|
|
'false_toggle' => 'Off',
|
|
),
|
|
),
|
|
)
|
|
);
|
|
|
|
jet_menu_dynmic_css()->add_typography_options(
|
|
array(
|
|
'label' => esc_html__( 'Submenu descriptions', 'jet-menu' ),
|
|
'name' => 'jet-sub-menu-desc',
|
|
'parent' => 'sub_items_styles_tab',
|
|
)
|
|
);
|
|
|
|
$this->builder->register_component(
|
|
array(
|
|
'menu_sub_tabs' => array(
|
|
'type' => 'component-tab-horizontal',
|
|
'parent' => 'sub_items_styles_tab',
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->section_end( 'sub_items_styles_tab' );
|
|
|
|
$this->builder->register_settings(
|
|
array(
|
|
'sub_default_tab' => array(
|
|
'parent' => 'menu_sub_tabs',
|
|
'title' => esc_html__( 'Default', 'jet-menu' ),
|
|
),
|
|
'sub_hover_tab' => array(
|
|
'parent' => 'menu_sub_tabs',
|
|
'title' => esc_html__( 'Hover', 'jet-menu' ),
|
|
),
|
|
'sub_active_tab' => array(
|
|
'parent' => 'menu_sub_tabs',
|
|
'title' => esc_html__( 'Active', 'jet-menu' ),
|
|
),
|
|
)
|
|
);
|
|
|
|
$tabs = array(
|
|
'default' => '',
|
|
'hover' => '-hover',
|
|
'active' => '-active',
|
|
);
|
|
|
|
foreach ( $tabs as $tab => $opt ) {
|
|
|
|
$this->section_start( 'sub_' . $tab . '_tab' );
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-sub-text-color' . $opt => array(
|
|
'type' => 'colorpicker',
|
|
'parent' => 'sub_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item text color', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-sub-text-color' . $opt ),
|
|
'alpha' => true,
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-sub-desc-color' . $opt => array(
|
|
'type' => 'colorpicker',
|
|
'parent' => 'sub_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item descriptions color', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-sub-desc-color' . $opt ),
|
|
'alpha' => true,
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-sub-icon-color' . $opt => array(
|
|
'type' => 'colorpicker',
|
|
'parent' => 'sub_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item icon color', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-sub-icon-color' . $opt ),
|
|
'alpha' => true,
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-sub-arrow-color' . $opt => array(
|
|
'type' => 'colorpicker',
|
|
'parent' => 'sub_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item drop-down arrow color', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-sub-arrow-color' . $opt ),
|
|
'alpha' => true,
|
|
),
|
|
)
|
|
);
|
|
|
|
jet_menu_dynmic_css()->add_background_options( array(
|
|
'name' => 'jet-menu-sub' . $opt,
|
|
'label' => esc_html__( 'Item', 'jet-menu' ),
|
|
'parent' => 'sub_' . $tab . '_tab',
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_border_options( array(
|
|
'name' => 'jet-menu-sub' . $opt,
|
|
'label' => esc_html__( 'Item', 'jet-menu' ),
|
|
'parent' => 'sub_' . $tab . '_tab',
|
|
'defaults' => array(
|
|
'top' => '1',
|
|
'right' => '1',
|
|
'bottom' => '1',
|
|
'left' => '1',
|
|
),
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_border_options( array(
|
|
'name' => 'jet-menu-sub-first' . $opt,
|
|
'label' => esc_html__( 'First item', 'jet-menu' ),
|
|
'parent' => 'sub_' . $tab . '_tab',
|
|
'defaults' => array(
|
|
'top' => '1',
|
|
'right' => '1',
|
|
'bottom' => '1',
|
|
'left' => '1',
|
|
),
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_border_options( array(
|
|
'name' => 'jet-menu-sub-last' . $opt,
|
|
'label' => esc_html__( 'Last item', 'jet-menu' ),
|
|
'parent' => 'sub_' . $tab . '_tab',
|
|
'defaults' => array(
|
|
'top' => '1',
|
|
'right' => '1',
|
|
'bottom' => '1',
|
|
'left' => '1',
|
|
),
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_box_shadow_options( array(
|
|
'name' => 'jet-menu-sub' . $opt,
|
|
'label' => esc_html__( 'Item', 'jet-menu' ),
|
|
'parent' => 'sub_' . $tab . '_tab',
|
|
) );
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-sub-border-radius' . $opt => array(
|
|
'type' => 'dimensions',
|
|
'parent' => 'sub_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item border radius', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
'%' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-sub-border-radius' . $opt ),
|
|
),
|
|
'jet-menu-sub-padding' . $opt => array(
|
|
'type' => 'dimensions',
|
|
'parent' => 'sub_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item padding', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-sub-padding' . $opt ),
|
|
),
|
|
'jet-menu-sub-margin' . $opt => array(
|
|
'type' => 'dimensions',
|
|
'parent' => 'sub_' . $tab . '_tab',
|
|
'title' => esc_html__( 'Item margin', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => -50,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-sub-margin' . $opt ),
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->section_end( 'sub_' . $tab . '_tab' );
|
|
|
|
}
|
|
|
|
$this->builder->register_component(
|
|
array(
|
|
'menu_advanced_tabs' => array(
|
|
'type' => 'component-tab-horizontal',
|
|
'parent' => 'advanced_tab',
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_settings(
|
|
array(
|
|
'advanced_icon' => array(
|
|
'parent' => 'menu_advanced_tabs',
|
|
'title' => esc_html__( 'Icon', 'jet-menu' ),
|
|
),
|
|
'advanced_badge' => array(
|
|
'parent' => 'menu_advanced_tabs',
|
|
'title' => esc_html__( 'Badge', 'jet-menu' ),
|
|
),
|
|
'advanced_arrow' => array(
|
|
'parent' => 'menu_advanced_tabs',
|
|
'title' => esc_html__( 'Drop-down Arrow', 'jet-menu' ),
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->builder->register_component( array(
|
|
'icons_accordion' => array(
|
|
'type' => 'component-accordion',
|
|
'parent' => 'advanced_icon',
|
|
)
|
|
) );
|
|
|
|
$this->builder->register_settings(
|
|
array(
|
|
'top_icon' => array(
|
|
'type' => 'settings',
|
|
'parent' => 'icons_accordion',
|
|
'title' => esc_html__( 'Top Level Icon', 'jet-menu' ),
|
|
),
|
|
'sub_icon' => array(
|
|
'type' => 'settings',
|
|
'parent' => 'icons_accordion',
|
|
'title' => esc_html__( 'Sub Level Icon', 'jet-menu' ),
|
|
),
|
|
)
|
|
);
|
|
|
|
$icons = array( 'top', 'sub' );
|
|
|
|
foreach ( $icons as $level ) {
|
|
|
|
$this->section_start( $level . '_icon' );
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-' . $level . '-icon-size' => array(
|
|
'type' => 'slider',
|
|
'max_value' => 150,
|
|
'min_value' => 10,
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-icon-size' ),
|
|
'step_value' => 1,
|
|
'title' => esc_html__( 'Icon size', 'jet-menu' ),
|
|
'parent' => $level . '_icon',
|
|
),
|
|
'jet-menu-' . $level . '-icon-margin' => array(
|
|
'type' => 'dimensions',
|
|
'parent' => $level . '_icon',
|
|
'title' => esc_html__( 'Icon margin', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => -50,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-icon-margin' ),
|
|
),
|
|
'jet-menu-' . $level . '-icon-ver-position' => array(
|
|
'type' => 'select',
|
|
'parent' => $level . '_icon',
|
|
'title' => esc_html__( 'Icon vertical position', 'jet-menu' ),
|
|
'multiple' => false,
|
|
'filter' => false,
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-icon-ver-position' ),
|
|
'options' => array(
|
|
'center' => esc_html__( 'Center', 'jet-menu' ),
|
|
'top' => esc_html__( 'Top', 'jet-menu' ),
|
|
'bottom' => esc_html__( 'Bottom', 'jet-menu' ),
|
|
),
|
|
),
|
|
'jet-menu-' . $level . '-icon-hor-position' => array(
|
|
'type' => 'select',
|
|
'parent' => $level . '_icon',
|
|
'title' => esc_html__( 'Icon horizontal position', 'jet-menu' ),
|
|
'multiple' => false,
|
|
'filter' => false,
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-icon-hor-position' ),
|
|
'options' => array(
|
|
'left' => esc_html__( 'Left', 'jet-menu' ),
|
|
'right' => esc_html__( 'Right', 'jet-menu' ),
|
|
'center' => esc_html__( 'Center', 'jet-menu' ),
|
|
),
|
|
),
|
|
'jet-menu-' . $level . '-icon-order' => array(
|
|
'type' => 'slider',
|
|
'max_value' => 10,
|
|
'min_value' => -10,
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-icon-order' ),
|
|
'step_value' => 1,
|
|
'title' => esc_html__( 'Icon order', 'jet-menu' ),
|
|
'parent' => $level . '_icon',
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->section_end( $level . '_icon' );
|
|
|
|
}
|
|
|
|
$this->builder->register_component( array(
|
|
'badges_accordion' => array(
|
|
'type' => 'component-accordion',
|
|
'parent' => 'advanced_badge',
|
|
)
|
|
) );
|
|
|
|
$this->builder->register_settings(
|
|
array(
|
|
'top_badge' => array(
|
|
'type' => 'settings',
|
|
'parent' => 'badges_accordion',
|
|
'title' => esc_html__( 'Top Level Badge', 'jet-menu' ),
|
|
),
|
|
'sub_badge' => array(
|
|
'type' => 'settings',
|
|
'parent' => 'badges_accordion',
|
|
'title' => esc_html__( 'Sub Level Badge', 'jet-menu' ),
|
|
),
|
|
)
|
|
);
|
|
|
|
$badges = array( 'top', 'sub' );
|
|
|
|
foreach ( $badges as $level ) {
|
|
|
|
$this->section_start( $level . '_badge' );
|
|
|
|
jet_menu_dynmic_css()->add_typography_options(
|
|
array(
|
|
'label' => esc_html__( 'Badge', 'jet-menu' ),
|
|
'name' => 'jet-menu-' . $level . '-badge',
|
|
'parent' => $level . '_badge',
|
|
)
|
|
);
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-' . $level . '-badge-text-color' => array(
|
|
'type' => 'colorpicker',
|
|
'parent' => $level . '_badge',
|
|
'title' => esc_html__( 'Badge text color', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-badge-text-color' ),
|
|
'alpha' => true,
|
|
),
|
|
)
|
|
);
|
|
|
|
jet_menu_dynmic_css()->add_background_options( array(
|
|
'name' => 'jet-menu-' . $level . '-badge-bg',
|
|
'label' => esc_html__( 'Badge', 'jet-menu' ),
|
|
'parent' => $level . '_badge',
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_border_options( array(
|
|
'name' => 'jet-menu-' . $level . '-badge',
|
|
'label' => esc_html__( 'Badge', 'jet-menu' ),
|
|
'parent' => $level . '_badge',
|
|
'defaults' => array(
|
|
'top' => '1',
|
|
'right' => '1',
|
|
'bottom' => '1',
|
|
'left' => '1',
|
|
),
|
|
) );
|
|
|
|
jet_menu_dynmic_css()->add_box_shadow_options( array(
|
|
'name' => 'jet-menu-' . $level . '-badge',
|
|
'label' => esc_html__( 'Badge', 'jet-menu' ),
|
|
'parent' => $level . '_badge',
|
|
) );
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-' . $level . '-badge-border-radius' => array(
|
|
'type' => 'dimensions',
|
|
'parent' => $level . '_badge',
|
|
'title' => esc_html__( 'Badge border radius', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
'%' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-badge-border-radius' ),
|
|
),
|
|
'jet-menu-' . $level . '-badge-padding' => array(
|
|
'type' => 'dimensions',
|
|
'parent' => $level . '_badge',
|
|
'title' => esc_html__( 'Badge padding', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => 0,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-badge-padding' ),
|
|
),
|
|
'jet-menu-' . $level . '-badge-margin' => array(
|
|
'type' => 'dimensions',
|
|
'parent' => $level . '_badge',
|
|
'title' => esc_html__( 'Badge margin', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => -50,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-badge-margin' ),
|
|
),
|
|
'jet-menu-' . $level . '-badge-ver-position' => array(
|
|
'type' => 'select',
|
|
'parent' => $level . '_badge',
|
|
'title' => esc_html__( 'Badge vertical position (may be overridden with order)', 'jet-menu' ),
|
|
'multiple' => false,
|
|
'filter' => false,
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-badge-ver-position' ),
|
|
'options' => array(
|
|
'top' => esc_html__( 'Top', 'jet-menu' ),
|
|
'center' => esc_html__( 'Center', 'jet-menu' ),
|
|
'bottom' => esc_html__( 'Bottom', 'jet-menu' ),
|
|
),
|
|
),
|
|
'jet-menu-' . $level . '-badge-hor-position' => array(
|
|
'type' => 'select',
|
|
'parent' => $level . '_badge',
|
|
'title' => esc_html__( 'Badge horizontal position', 'jet-menu' ),
|
|
'multiple' => false,
|
|
'filter' => false,
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-badge-hor-position' ),
|
|
'options' => array(
|
|
'right' => esc_html__( 'Right', 'jet-menu' ),
|
|
'center' => esc_html__( 'Center', 'jet-menu' ),
|
|
'left' => esc_html__( 'Left', 'jet-menu' ),
|
|
),
|
|
),
|
|
'jet-menu-' . $level . '-badge-order' => array(
|
|
'type' => 'slider',
|
|
'max_value' => 10,
|
|
'min_value' => -10,
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-badge-order' ),
|
|
'step_value' => 1,
|
|
'title' => esc_html__( 'Badge order', 'jet-menu' ),
|
|
'parent' => $level . '_badge',
|
|
),
|
|
'jet-menu-' . $level . '-badge-hide' => array(
|
|
'type' => 'switcher',
|
|
'parent' => $level . '_badge',
|
|
'title' => esc_html__( 'Hide badge on mobile', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-badge-hide', 'false' ),
|
|
'toggle' => array(
|
|
'true_toggle' => 'Yes',
|
|
'false_toggle' => 'No',
|
|
),
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->section_end( $level . '_badge' );
|
|
|
|
}
|
|
|
|
$this->builder->register_component( array(
|
|
'arrows_accordion' => array(
|
|
'type' => 'component-accordion',
|
|
'parent' => 'advanced_arrow',
|
|
)
|
|
) );
|
|
|
|
$this->builder->register_settings(
|
|
array(
|
|
'top_arrow' => array(
|
|
'type' => 'settings',
|
|
'parent' => 'arrows_accordion',
|
|
'title' => esc_html__( 'Top Level Arrow', 'jet-menu' ),
|
|
),
|
|
'sub_arrow' => array(
|
|
'type' => 'settings',
|
|
'parent' => 'arrows_accordion',
|
|
'title' => esc_html__( 'Sub Level Arrow', 'jet-menu' ),
|
|
),
|
|
)
|
|
);
|
|
|
|
$arrows = array( 'top' => 'fa-angle-down', 'sub' => 'fa-angle-right' );
|
|
|
|
foreach ( $arrows as $level => $default ) {
|
|
|
|
$this->section_start( $level . '_arrow' );
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-' . $level . '-arrow' => array(
|
|
'type' => 'iconpicker',
|
|
'label' => esc_html__( 'Arrow icon', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-arrow', $default ),
|
|
'parent' => $level . '_arrow',
|
|
'icon_data' => array(
|
|
'icon_set' => 'jetMenuIcons',
|
|
'icon_css' => jet_menu()->plugin_url( 'assets/public/css/font-awesome.min.css' ),
|
|
'icon_base' => 'fa',
|
|
'icon_prefix' => '',
|
|
'icons' => $this->get_arrows_icons(),
|
|
),
|
|
),
|
|
'jet-menu-' . $level . '-arrow-size' => array(
|
|
'type' => 'slider',
|
|
'max_value' => 150,
|
|
'min_value' => 10,
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-arrow-size' ),
|
|
'step_value' => 1,
|
|
'title' => esc_html__( 'Arrow size', 'jet-menu' ),
|
|
'parent' => $level . '_arrow',
|
|
),
|
|
'jet-menu-' . $level . '-arrow-margin' => array(
|
|
'type' => 'dimensions',
|
|
'parent' => $level . '_arrow',
|
|
'title' => esc_html__( 'Arrow margin', 'jet-menu' ),
|
|
'range' => array(
|
|
'px' => array(
|
|
'min' => -50,
|
|
'max' => 100,
|
|
'step' => 1,
|
|
),
|
|
),
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-arrow-margin' ),
|
|
),
|
|
'jet-menu-' . $level . '-arrow-ver-position' => array(
|
|
'type' => 'select',
|
|
'parent' => $level . '_arrow',
|
|
'title' => esc_html__( 'Arrow vertical position', 'jet-menu' ),
|
|
'multiple' => false,
|
|
'filter' => false,
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-arrow-ver-position' ),
|
|
'options' => array(
|
|
'center' => esc_html__( 'Center', 'jet-menu' ),
|
|
'top' => esc_html__( 'Top', 'jet-menu' ),
|
|
'bottom' => esc_html__( 'Bottom', 'jet-menu' ),
|
|
),
|
|
),
|
|
'jet-menu-' . $level . '-arrow-hor-position' => array(
|
|
'type' => 'select',
|
|
'parent' => $level . '_arrow',
|
|
'title' => esc_html__( 'Arrow horizontal position', 'jet-menu' ),
|
|
'multiple' => false,
|
|
'filter' => false,
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-arrow-hor-position' ),
|
|
'options' => array(
|
|
'right' => esc_html__( 'Right', 'jet-menu' ),
|
|
'center' => esc_html__( 'Center', 'jet-menu' ),
|
|
'left' => esc_html__( 'Left', 'jet-menu' ),
|
|
),
|
|
),
|
|
'jet-menu-' . $level . '-arrow-order' => array(
|
|
'type' => 'slider',
|
|
'max_value' => 10,
|
|
'min_value' => -10,
|
|
'value' => $this->get_option( 'jet-menu-' . $level . '-arrow-order' ),
|
|
'step_value' => 1,
|
|
'title' => esc_html__( 'Arrow order', 'jet-menu' ),
|
|
'parent' => $level . '_arrow',
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->section_end( $level . '_arrow' );
|
|
|
|
}
|
|
|
|
$this->section_start( 'mobile_menu_tab' );
|
|
|
|
$this->builder->register_control(
|
|
array(
|
|
'jet-menu-mobile-toggle-color' => array(
|
|
'type' => 'colorpicker',
|
|
'parent' => 'mobile_menu_tab',
|
|
'title' => esc_html__( 'Toggle text color', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-mobile-toggle-color' ),
|
|
'alpha' => true,
|
|
),
|
|
'jet-menu-mobile-toggle-bg' => array(
|
|
'type' => 'colorpicker',
|
|
'parent' => 'mobile_menu_tab',
|
|
'title' => esc_html__( 'Toggle background color', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-mobile-toggle-bg' ),
|
|
'alpha' => true,
|
|
),
|
|
'jet-menu-mobile-container-bg' => array(
|
|
'type' => 'colorpicker',
|
|
'parent' => 'mobile_menu_tab',
|
|
'title' => esc_html__( 'Container background color', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-mobile-container-bg' ),
|
|
'alpha' => true,
|
|
),
|
|
'jet-menu-mobile-cover-bg' => array(
|
|
'type' => 'colorpicker',
|
|
'parent' => 'mobile_menu_tab',
|
|
'title' => esc_html__( 'Cover background color', 'jet-menu' ),
|
|
'value' => $this->get_option( 'jet-menu-mobile-cover-bg' ),
|
|
'alpha' => true,
|
|
),
|
|
)
|
|
);
|
|
|
|
$this->section_end( 'mobile_menu_tab' );
|
|
|
|
/**
|
|
* Hook fires before page render
|
|
*/
|
|
do_action( 'jet-menu/options-page/before-render', $this->builder, $this );
|
|
|
|
$this->builder->render();
|
|
}
|
|
|
|
/**
|
|
* Section start trigger
|
|
*
|
|
* @param string $section Section name.
|
|
* @return void
|
|
*/
|
|
public function section_start( $section ) {
|
|
do_action( 'jet-menu/options-page/section-start/' . $section, $this->builder, $this );
|
|
}
|
|
|
|
/**
|
|
* Section start trigger
|
|
*
|
|
* @param string $section Section name.
|
|
* @return void
|
|
*/
|
|
public function section_end( $section ) {
|
|
do_action( 'jet-menu/options-page/section-end/' . $section, $this->builder, $this );
|
|
}
|
|
|
|
public function get_arrows_icons() {
|
|
return apply_filters( 'jet-menu/arrow-icons', array(
|
|
'fa-angle-down',
|
|
'fa-angle-double-down',
|
|
'fa-arrow-circle-down',
|
|
'fa-arrow-down',
|
|
'fa-caret-down',
|
|
'fa-chevron-circle-down',
|
|
'fa-chevron-down',
|
|
'fa-long-arrow-down',
|
|
'fa-angle-right',
|
|
'fa-angle-double-right',
|
|
'fa-arrow-circle-right',
|
|
'fa-arrow-right',
|
|
'fa-caret-right',
|
|
'fa-chevron-circle-right',
|
|
'fa-chevron-right',
|
|
'fa-long-arrow-right',
|
|
'fa-angle-left',
|
|
'fa-angle-double-left',
|
|
'fa-arrow-circle-left',
|
|
'fa-arrow-left',
|
|
'fa-caret-left',
|
|
'fa-chevron-circle-left',
|
|
'fa-chevron-left',
|
|
'fa-long-arrow-left',
|
|
) );
|
|
}
|
|
|
|
/**
|
|
* Build export URL
|
|
*
|
|
* @return string
|
|
*/
|
|
public function export_url() {
|
|
return add_query_arg(
|
|
array(
|
|
'jet-action' => 'export-options',
|
|
),
|
|
esc_url( admin_url( 'admin.php' ) )
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Process options reset
|
|
*
|
|
* @return void
|
|
*/
|
|
public function process_reset() {
|
|
|
|
if ( ! isset( $_GET['jet-action'] ) || 'reset-options' !== $_GET['jet-action'] ) {
|
|
return;
|
|
}
|
|
|
|
if ( ! current_user_can( 'manage_options' ) ) {
|
|
die();
|
|
}
|
|
|
|
$this->save_options( $this->options_slug, $this->default_options );
|
|
|
|
wp_redirect(
|
|
add_query_arg(
|
|
array( 'page' => jet_menu()->plugin_slug ),
|
|
esc_url( admin_url( 'admin.php' ) )
|
|
)
|
|
);
|
|
|
|
die();
|
|
}
|
|
|
|
/**
|
|
* Process settings export
|
|
*
|
|
* @return void
|
|
*/
|
|
public function process_export() {
|
|
|
|
if ( ! isset( $_GET['jet-action'] ) || 'export-options' !== $_GET['jet-action'] ) {
|
|
return;
|
|
}
|
|
|
|
if ( ! current_user_can( 'manage_options' ) ) {
|
|
die();
|
|
}
|
|
|
|
$options = $this->get_option();
|
|
|
|
if ( ! $options ) {
|
|
$options = array();
|
|
}
|
|
|
|
$file = 'jet-menu-options-' . date( 'm-d-Y' ) . '.json';
|
|
$data = json_encode( array(
|
|
'jet_menu' => true,
|
|
'options' => $options,
|
|
) );
|
|
|
|
session_write_close();
|
|
|
|
header( 'Pragma: public' );
|
|
header( 'Expires: 0' );
|
|
header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
|
|
header( 'Cache-Control: public' );
|
|
header( 'Content-Description: File Transfer' );
|
|
header( 'Content-type: application/octet-stream' );
|
|
header( 'Content-Disposition: attachment; filename="' . $file . '"' );
|
|
header( 'Content-Transfer-Encoding: binary' );
|
|
|
|
echo $data;
|
|
|
|
die();
|
|
}
|
|
|
|
/**
|
|
* Process settings import
|
|
*
|
|
* @return void
|
|
*/
|
|
public function process_import() {
|
|
|
|
if ( ! current_user_can( 'manage_options' ) ) {
|
|
die();
|
|
}
|
|
|
|
$options = isset( $_POST['data'] ) ? $_POST['data'] : array();
|
|
|
|
if ( empty( $options['jet_menu'] ) || empty( $options['options'] ) ) {
|
|
wp_send_json_error( array(
|
|
'message' => esc_html__( 'Incorrect data in options file', 'jet-menu' ),
|
|
) );
|
|
}
|
|
|
|
$this->save_options( $this->options_slug, $options['options'] );
|
|
|
|
wp_send_json_success( array(
|
|
'message' => esc_html__( 'Options successfully imported. Page will be reloaded.', 'jet-menu' ),
|
|
) );
|
|
|
|
}
|
|
|
|
/**
|
|
* Options field exist DB check
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function is_db_options_exist( $option_name ) {
|
|
|
|
( false == get_option( $option_name ) ) ? $is_exist = false : $is_exist = true;
|
|
|
|
return $is_exist;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Save options to DB
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function save_options( $option_name, $options ) {
|
|
|
|
$options = array_merge( $this->default_options, $options );
|
|
|
|
update_option( $option_name, $options );
|
|
$this->fonts_loader->reset_fonts_cache();
|
|
|
|
do_action( 'jet-menu/options-page/save' );
|
|
}
|
|
|
|
/**
|
|
* Set options externaly.
|
|
*
|
|
* @param array $options Options array to set.
|
|
* @return void
|
|
*/
|
|
public function pre_set_options( $options = array() ) {
|
|
|
|
if ( empty( $options ) ) {
|
|
$this->options = false;
|
|
} else {
|
|
$this->options = $options;
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Get option value
|
|
*
|
|
* @param string $options Option name.
|
|
* @since 1.0.0
|
|
*/
|
|
public function get_option( $option_name = null, $default = false ) {
|
|
|
|
if ( empty( $this->options ) ) {
|
|
$this->options = get_option( $this->options_slug, $this->default_options );
|
|
}
|
|
|
|
if ( ! $option_name && ! empty( $this->options ) ) {
|
|
return $this->options;
|
|
}
|
|
|
|
return isset( $this->options[ $option_name ] ) ? $this->options[ $option_name ] : $default;
|
|
}
|
|
|
|
/**
|
|
* Get default mobile breakpoint value.
|
|
*
|
|
* @since 1.4.1
|
|
* @return int
|
|
*/
|
|
public function get_default_mobile_breakpoint() {
|
|
return get_option( 'elementor_viewport_md' ) ? (int) get_option( 'elementor_viewport_md' ) : 768;
|
|
}
|
|
|
|
/**
|
|
* Create db options field if this is not exist
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @return void
|
|
*/
|
|
public function create_db_options_field() {
|
|
if ( ! $this->is_db_options_exist( $this->options_slug ) ) {
|
|
$this->save_options( $this->options_slug, $this->default_options );
|
|
}
|
|
|
|
if ( ! $this->is_db_options_exist( $this->options_slug . '_default' ) ) {
|
|
$this->save_options( $this->options_slug . '_default', $this->default_options );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return options db key.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function options_slug() {
|
|
return $this->options_slug;
|
|
}
|
|
|
|
/**
|
|
* Returns the instance.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @return object
|
|
*/
|
|
public static function get_instance() {
|
|
|
|
// If the single instance hasn't been set, set it now.
|
|
if ( null == self::$instance ) {
|
|
self::$instance = new self;
|
|
}
|
|
|
|
return self::$instance;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'jet_menu_option_page' ) ) {
|
|
|
|
/**
|
|
* Returns instanse of the plugin class.
|
|
*
|
|
* @since 1.0.0
|
|
* @return object
|
|
*/
|
|
function jet_menu_option_page() {
|
|
return Jet_Menu_Options_Page::get_instance();
|
|
}
|
|
}
|