quadmenu/lib/backend/class-settings.php

546 lines
23 KiB
PHP
Raw Permalink Normal View History

2025-01-20 11:08:41 +00:00
<?php
namespace QuadLayers\QuadMenu\Backend;
use QuadLayers\QuadMenu\Plugin;
use QuadLayers\QuadMenu\Configuration as Configuration;
if ( ! defined( 'ABSPATH' ) ) {
die( '-1' );
}
/**
* Settings Class ex QuadMenu_Settings
*/
class Settings extends Configuration {
public $tabs;
public $panels = array();
public static $instance;
public function __construct() {
add_action( 'quadmenu_modal_panels', array( $this, 'panels' ), 10, 4 );
add_action( 'wp_ajax_quadmenu_add_nav_menu_item_panel', array( $this, 'ajax_add_nav_menu_item_panel' ) );
}
public function get_children_nav_menu_items( $menu_id, $parent_menu_item_id ) {
$childrens = array();
// check we're using a valid menu ID
if ( ! is_nav_menu( $menu_id ) ) {
return $childrens;
}
if ( is_array( $menu = $this->wp_get_nav_menu_items( $menu_id ) ) && count( $menu ) ) {
foreach ( $menu as $item ) {
// find the child menu items
if ( $parent_menu_item_id == $item->menu_item_parent ) {
$childrens[ $item->ID ] = array(
'id' => $item->ID,
'title' => $item->title,
);
}
}
}
return $childrens;
}
function wp_get_nav_menu_items( $menu_id ) {
$quadmenu_menu_items = wp_cache_get( "wp_get_nav_menu_items_{$menu_id}", 'quadmenu' );
if ( $quadmenu_menu_items === false ) {
$quadmenu_menu_items = wp_get_nav_menu_items( $menu_id );
wp_cache_set( "wp_get_nav_menu_items_{$menu_id}", $quadmenu_menu_items, 'quadmenu' );
}
return $quadmenu_menu_items;
}
public function nav_menu_item_settings( $setting, $item ) {
$type = $setting['type'];
// $desc = isset($setting['desc']) ? '<span class="quadmenu-menu-item-setting-description">' . $setting['desc'] . '</span>' : '';
// $tip = isset($setting['tip']) ? '<div class="quadmenu-menu-item-setting-tip"><i class="tip-icon"></i> ' . $setting['tip'] . '</div>' : '';
$value = $item->{$setting['db']};
$id = 'menu-item-' . $setting['db'];
$name = 'menu-item-' . $setting['id'];
$class = 'menu-item-quadmenu-setting ' . $id;
$ops = '';
if ( isset( $setting['ops'] ) ) {
$ops = $setting['ops'];
if ( ! is_array( $ops ) && function_exists( $ops ) ) {
if ( isset( $setting['ops_args'] ) ) {
$ops = $ops( $setting['ops_args'] );
} else {
$ops = $ops();
}
}
}
switch ( $type ) {
case 'checkbox':
?>
<label class="multicheck-label">
<input type="checkbox" id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_attr( $ops ? $ops : 'on' ); ?>" <?php echo checked( $value, $ops ? $ops : 'on' ); ?> />
<?php echo esc_html( $setting['placeholder'] ); ?>
</label>
<?php
break;
case 'multicheck':
?>
<span class="field-wrapper">
<?php
$value = is_array( $value ) ? $value : array();
foreach ( $ops as $_val => $_name ) :
?>
<label class="multicheck-label" title="<?php echo esc_html( $_val ); ?>" >
<input type="checkbox" id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?> checkbox multicheckbox" name="<?php echo esc_attr( $name . '[]' ); ?>" value="<?php echo esc_html( $_val ); ?>" <?php echo checked( in_array( $_val, $value ) ); ?> />
<?php echo esc_html( $_name ); ?>
</label>
<?php endforeach; ?>
</span>
<?php
break;
case 'text':
if ( is_array( $value ) ) {
$value = implode( ' ', $value );
}
?>
<input type="text" id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" name="<?php echo esc_attr( $name ); ?>" placeholder="<?php echo esc_html( $setting['placeholder'] ); ?>" value="<?php echo esc_html( $value ); ?>" />
<?php
break;
case 'number':
if ( is_array( $value ) ) {
$value = implode( ' ', $value );
}
?>
<input type="number" step="<?php echo esc_attr( $ops['step'] ); ?>" min="<?php echo esc_attr( $ops['min'] ); ?>" max="<?php echo esc_attr( $ops['max'] ); ?>" id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_html( $value ); ?>" />
<?php
break;
case 'hidden':
?>
<input type="hidden" id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?> checkbox multicheckbox" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_html( $value ); ?>" />
<?php
break;
case 'textarea':
?>
<textarea id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" name="<?php echo esc_attr( $name ); ?>"><?php echo esc_html( $value ); ?></textarea>
<?php
break;
case 'select':
?>
<select id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" name="<?php echo esc_attr( $name ); ?>" >
<?php foreach ( $ops as $_val => $_name ) : ?>
<option value="<?php echo esc_html( $_val ); ?>" <?php selected( $value, $_val ); ?> ><?php echo $_name; ?></option>
<?php endforeach; ?>
</select>
<?php
break;
case 'radio':
?>
<span class="field-wrapper">
<?php foreach ( $ops as $_val => $_name ) : ?>
<label class="radio-label" title="<?php echo esc_html( $_val ); ?>" >
<input id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" type="radio" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_html( $_val ); ?>" <?php echo checked( $value, $_val ); ?> />
<?php echo esc_html( $_name ); ?>
</label>
<?php endforeach; ?>
</span>
<?php
break;
case 'width':
extract( $ops );
?>
<div class="quadmenu-setting-width-icons">
<div>
<span class="title">#</span>
</div>
<?php
if ( ! empty( $icons ) ) :
foreach ( $icons as $size ) :
?>
<div class="<?php echo esc_attr( $size ); ?>"><i></i></div>
<?php
endforeach;
endif;
?>
</div>
<?php if ( ! empty( $columns ) ) : ?>
<div class="quadmenu-setting-width-columns">
<div class="col">
<span class="title"><?php esc_html_e( 'Width', 'quadmenu' ); ?></span>
</div>
<?php
foreach ( $columns as $size ) :
if ( $size != '' ) {
$size = '-' . $size;
}
?>
<div class="col<?php echo esc_attr( $size ); ?>">
<select id="menu-item-width<?php echo esc_attr( $size ); ?>-columns" class="menu-item-quadmenu-setting menu-item-columns<?php echo esc_attr( $size ); ?>" name="menu-item-quadmenu-settings[columns][]">
<?php // if ($size != ''): ?>
<option value="">
<?php esc_html_e( 'Inherit from smaller', 'quadmenu' ); ?>
</option>
<?php // endif; ?>
<?php
for ( $i = 1; $i <= 12; $i++ ) :
$current = 'col' . $size . '-' . $i;
?>
<option value="<?php echo esc_attr( $current ); ?>" <?php selected( true, in_array( sanitize_key( $current ), str_replace( 'col-xs-', 'col-', $value ) ) ); ?>>
<?php printf( esc_html( '%1$s column', 'quadmenu' ), $i ); ?>
</option>
<?php endfor; ?>
</select>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php if ( ! empty( $offset ) ) : ?>
<div class="quadmenu-setting-width-offset">
<div>
<span class="title"><?php esc_html_e( 'Offset', 'quadmenu' ); ?></span>
</div>
<?php foreach ( $offset as $size ) : ?>
<div class="<?php echo esc_attr( $size ); ?>">
<select id="menu-item-width-<?php echo esc_attr( $size ); ?>-offset" class="menu-item-quadmenu-setting menu-item-offset-<?php echo esc_attr( $size ); ?>" name="menu-item-quadmenu-settings[columns][]">
<option value="">
<?php esc_html_e( 'Inherit from smaller', 'quadmenu' ); ?>
</option>
<?php
for ( $i = 1; $i <= 12; $i++ ) :
$current = 'offset-' . $size . '-' . $i;
?>
<option value="<?php echo esc_attr( $current ); ?>" <?php selected( true, in_array( sanitize_key( $current ), $value ) ); ?>>
<?php printf( esc_html( '%1$s column', 'quadmenu' ), $i ); ?>
</option>
<?php endfor; ?>
</select>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php if ( ! empty( $hidden ) ) : ?>
<div class="quadmenu-setting-width-hidden">
<div>
<span class="title"><?php esc_html_e( 'Hidden', 'quadmenu' ); ?></span>
</div>
<?php
foreach ( $hidden as $size ) :
$current = 'hidden-' . $size;
?>
<div class="<?php echo esc_attr( $size ); ?>">
<input type="checkbox" id="menu-item-width-<?php echo esc_attr( $size ); ?>-hidden" class="menu-item-quadmenu-setting menu-item-hidden-<?php echo esc_attr( $size ); ?> checkbox multicheckbox" name="menu-item-quadmenu-settings[columns][]" value="<?php echo esc_attr( $current ); ?>" <?php checked( true, in_array( sanitize_key( $current ), $value ) ); ?>>
</div>
<?php endforeach; ?>
</div>
<?php endif; ?>
<?php
break;
case 'icon':
?>
<div class="quadmenu-setting">
<label>
<span class="title"><?php esc_html_e( 'Icon', 'quadmenu' ); ?></span>
<input type="text" id="<?php echo esc_attr( $id ); ?>" class="<?php echo esc_attr( $class ); ?>" name="<?php echo esc_attr( $name ); ?>" value="<?php echo esc_html( $value ); ?>"/>
</label>
</div>
<div class="quadmenu-setting">
<div class="quadmenu-icons-search">
<span class="button-icon button-secondary" class="button"><i class="<?php echo esc_html( $value ); ?>"></i><?php echo _QuadMenu()->selected_icons()->name; ?></span>
<input type="search" value="" placeholder="<?php echo esc_html( $setting['placeholder'] ); ?>"/>
</div>
<div class="quadmenu-icons-scroll">
<?php foreach ( explode( ',', _QuadMenu()->selected_icons()->iconmap ) as $icon ) : ?>
<a style="display: block;" class="icon _<?php echo esc_attr( str_replace( ' ', '_', trim( $icon ) ) ); ?>"><i class="<?php echo esc_attr( $icon ); ?>"></i></a>
<?php endforeach; ?>
<div class="clearfix"></div>
</div>
</div>
<?php
break;
case 'background':
$defaults = array(
'thumbnail-id' => 0,
'size' => '',
'position' => '',
'repeat' => '',
'origin' => 'border-box',
'opacity' => 1,
);
$value = wp_parse_args( $value, $defaults );
$_src = ! empty( $value['thumbnail-id'] ) ? wp_get_attachment_image_src( $value['thumbnail-id'], 'thumbnail' ) : false;
$_url = ! empty( $value['thumbnail-id'] ) ? wp_get_attachment_image_src( $value['thumbnail-id'], 'full' ) : false;
$have_media = isset( $_src[0] ) && strlen( $_src[0] ) > 0 ? 'active' : '';
?>
<span class="field-background"
style="
background-image: url(<?php echo esc_attr( isset( $_url[0] ) ? $_url[0] : '' ); ?>);
background-size: <?php echo esc_attr( $value['size'] ); ?>;
background-repeat: <?php echo esc_attr( $value['repeat'] ); ?>;
background-position: <?php echo esc_attr( $value['position'] ); ?>;
background-origin: <?php echo esc_attr( $value['origin'] ); ?>;
opacity: <?php echo esc_attr( $value['opacity'] ); ?>;
"></span>
<span class="field-wrapper <?php echo esc_attr( $have_media ); ?>">
<span class="edit-menu-item-media-thumbnail">
<?php if ( $have_media ) : ?>
<img src="<?php echo esc_attr( $_src[0] ); ?>" width="50" height="50" id="mega-media-thumbnail-menu-item-<?php echo esc_attr( $item->ID ); ?>" title="menu-item-<?php echo esc_attr( $item->ID ); ?>-media" alt="menu-item-<?php echo esc_attr( $item->ID ); ?>-media">
<?php endif ?>
</span>
<input type="hidden" id="edit-menu-item-media-thumbnail-id-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-media-thumbnail-id" name="<?php echo esc_attr( $name . '[thumbnail-id]' ); ?>" value="<?php echo esc_attr( $value['thumbnail-id'] ); ?>" />
<span class="edit-menu-item-media-text"><?php esc_html_e( 'Select media image', 'quadmenu' ); ?></span>
<a id="<?php echo esc_attr( $item->ID ); ?>" class="menu-item-media-upload" href="javascript:void(0)"><?php esc_html_e( 'Edit', 'quadmenu' ); ?></a>
<a id="<?php echo esc_attr( $item->ID ); ?>" class="menu-item-media-clear" href="javascript:void(0)" ><?php esc_html_e( 'Remove', 'quadmenu' ); ?></a>
<div class="clearfix"></div>
<label class="setting">
<b><?php esc_html_e( 'Opacity', 'quadmenu' ); ?></b>
<input type="number" step="1" min="1" max="100" id="edit-menu-item-background-opacity-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-background-opacity" name="<?php echo esc_attr( $name . '[opacity]' ); ?>" value="<?php echo esc_attr( $value['opacity'] ); ?>"/>
</label>
<label class="setting">
<b><?php esc_html_e( 'Position', 'quadmenu' ); ?></b>
<select id="edit-menu-item-background-position-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-background-position" name="<?php echo esc_attr( $name . '[position]' ); ?>">
<option value="left top" <?php selected( 'left top', $value['position'] ); ?>>left top</option>
<option value="left center" <?php selected( 'left center', $value['position'] ); ?>>left center</option>
<option value="left bottom" <?php selected( 'left bottom', $value['position'] ); ?>>left bottom</option>
<option value="right top" <?php selected( 'right top', $value['position'] ); ?>>right top</option>
<option value="right center" <?php selected( 'right center', $value['position'] ); ?>>right center</option>
<option value="right bottom" <?php selected( 'right bottom', $value['position'] ); ?>>right bottom</option>
<option value="center top" <?php selected( 'center top', $value['position'] ); ?>>center top</option>
<option value="center center" <?php selected( 'center center', $value['position'] ); ?>>center center</option>
<option value="center bottom" <?php selected( 'center bottom', $value['position'] ); ?>>center bottom</option>
</select>
</label>
<label class="setting">
<b><?php esc_html_e( 'Repeat', 'quadmenu' ); ?></b>
<select id="edit-menu-item-background-repeat-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-background-repeat" name="<?php echo esc_attr( $name . '[repeat]' ); ?>">
<option value="repeat" <?php selected( 'repeat', $value['repeat'] ); ?>>repeat</option>
<option value="no-repeat" <?php selected( 'no-repeat', $value['repeat'] ); ?>>no-repeat</option>
</select>
</label>
<label class="setting">
<b><?php esc_html_e( 'Size', 'quadmenu' ); ?></b>
<select id="edit-menu-item-background-size-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-background-size" name="<?php echo esc_attr( $name . '[size]' ); ?>" value="<?php echo esc_attr( $value['size'] ); ?>">
<option value="auto" <?php selected( 'auto', $value['size'] ); ?>>auto</option>
<option value="cover" <?php selected( 'cover', $value['size'] ); ?>>cover</option>
<option value="contain" <?php selected( 'contain', $value['size'] ); ?>>contain</option>
</select>
</label>
<label class="setting">
<b><?php esc_html_e( 'Origin', 'quadmenu' ); ?></b>
<select id="edit-menu-item-background-origin-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-background-origin" name="<?php echo esc_attr( $name . '[origin]' ); ?>" value="<?php echo esc_attr( $value['origin'] ); ?>">
<option value="content-box" <?php selected( 'content-box', $value['origin'] ); ?>>Boxed</option>
<option value="border-box" <?php selected( 'border-box', $value['origin'] ); ?>>Stretch</option>
</select>
</label>
<div class="clearfix"></div>
</span>
<?php
break;
case 'media':
$_src = ! empty( $value['thumbnail-id'] ) ? wp_get_attachment_image_src( $value['thumbnail-id'], 'thumbnail' ) : false;
$have_media = ( strlen( $_src[0] ) > 0 ? 'active' : '' );
?>
<span class="field-wrapper <?php echo esc_attr( $have_media ); ?>">
<span class="edit-menu-item-media-thumbnail">
<?php if ( $have_media ) : ?>
<img src="<?php echo esc_attr( $_src[0] ); ?>" width="50" height="50" id="mega-media-thumbnail-menu-item-<?php echo esc_attr( $item->ID ); ?>" title="menu-item-<?php echo esc_attr( $item->ID ); ?>-media" alt="menu-item-<?php echo esc_attr( $item->ID ); ?>-media">
<?php endif ?>
</span>
<span class="edit-menu-item-media-text"><?php esc_html_e( 'Select media image', 'quadmenu' ); ?></span>
<a id="<?php echo esc_attr( $item->ID ); ?>" class="menu-item-media-upload" href="javascript:void(0)"><?php esc_html_e( 'Edit', 'quadmenu' ); ?></a>
<a id="<?php echo esc_attr( $item->ID ); ?>" class="menu-item-media-clear" href="javascript:void(0)" ><?php esc_html_e( 'Remove', 'quadmenu' ); ?></a>
<span class="edit-menu-item-media-css">
<?php
if ( $have_media ) :
echo $value['position'] . ',' . $value['repeat'] . ',' . $value['attachment'] . ',' . $value['size'];
endif
?>
</span>
<input type="hidden" id="edit-menu-item-media-thumbnail-id-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-media-thumbnail-id" name="<?php echo esc_attr( $name . '[thumbnail-id]' ); ?>" value="<?php echo esc_attr( $value['thumbnail-id'] ); ?>" />
<input type="hidden" id="edit-menu-item-media-position-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-media-position" name="<?php echo esc_attr( $name . '[position]' ); ?>" value="<?php echo esc_attr( $value['position'] ); ?>" />
<input type="hidden" id="edit-menu-item-media-repeat-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-media-repeat" name="<?php echo esc_attr( $name . '[repeat]' ); ?>" value="<?php echo esc_attr( $value['repeat'] ); ?>" />
<input type="hidden" id="edit-menu-item-media-attachment-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-media-attachment" name="<?php echo esc_attr( $name . '[attachment]' ); ?>" value="<?php echo esc_attr( $value['attachment'] ); ?>" />
<input type="hidden" id="edit-menu-item-media-size-<?php echo esc_attr( $item->ID ); ?>" class="<?php echo esc_attr( $class ); ?> edit-menu-item-media-size" name="<?php echo esc_attr( $name . '[size]' ); ?>" value="<?php echo esc_attr( $value['size'] ); ?>" /> </span>
<?php
break;
default:
printf( esc_html__( 'Unknown field %s.', 'quadmenu' ), $type );
}
// echo $desc;
// echo $tip;
}
public function form( $menu_obj, $menu_item_depth = 0, $settings = array() ) {
$fields = $this->nav_menu_item_fields( $menu_obj );
ob_start();
if ( in_array( $menu_obj->object, array( 'search', 'cart', 'login', 'column' ) ) ) {
$settings = array_diff( $settings, array( 'url', 'target', 'xfn', 'description' ) );
}
if ( in_array( $menu_obj->type, array( 'taxonomy', 'post_type', 'post_type_archive' ) ) ) {
$settings = array_diff( $settings, array( 'url' ) );
}
?>
<form id="form_<?php echo esc_attr( $menu_obj->quadmenu ); ?>_<?php echo esc_attr( $menu_obj->ID ); ?>" class="form-<?php echo esc_attr( $menu_obj->quadmenu ); ?>" data-menu_item_id="<?php echo esc_attr( $menu_obj->ID ); ?>" data-menu_item_depth="<?php echo esc_attr( $menu_item_depth ); ?>">
<?php
foreach ( $settings as $key ) :
$classes = array();
$classes[] = 'quadmenu-setting';
$classes[] = 'quadmenu-setting-' . $fields[ $key ]['type'];
$classes[] = 'quadmenu-setting-' . $fields[ $key ]['db'];
if ( isset( $fields[ $key ]['depth'] ) ) {
if ( is_array( $fields[ $key ]['depth'] ) ) {
foreach ( $fields[ $key ]['depth'] as $depth ) {
$classes[] = 'quadmenu-setting-depth-' . $depth;
}
} else {
$classes[] = 'quadmenu-setting-depth-' . $fields[ $key ]['depth'];
}
}
?>
<div class="<?php echo join( ' ', array_map( 'sanitize_html_class', $classes ) ); ?>">
<label>
<?php if ( ! empty( $fields[ $key ]['title'] ) ) : ?>
<span class="title"><?php echo esc_html( $fields[ $key ]['title'] ); ?></span>
<?php endif; ?>
<?php $this->nav_menu_item_settings( $fields[ $key ], $menu_obj ); ?>
<?php if ( ! empty( $fields[ $key ]['desc'] ) ) : ?>
<span class="description"><?php echo esc_html( $fields[ $key ]['desc'] ); ?></span>
<?php endif; ?>
</label>
</div>
<?php
endforeach;
?>
</form>
<?php
return ob_get_clean();
}
public function ajax_add_nav_menu_item_panel() {
if ( ! check_ajax_referer( 'quadmenu', 'nonce', false ) ) {
Plugin::send_json_error( esc_html__( 'Please reload the page.', 'quadmenu' ) );
}
$panel = sanitize_text_field( $_REQUEST['menu_item_panel'] );
$menu_item_id = absint( $_REQUEST['menu_item_id'] );
$menu_id = absint( $_REQUEST['menu_id'] );
if ( ob_get_contents() ) {
ob_clean();
}
$menu_obj = Plugin::wp_setup_nav_menu_item( $menu_item_id );
$items = Configuration::custom_nav_menu_items();
if ( ! $settings = $items->{$menu_obj->quadmenu}->panels->$panel->settings ) {
Plugin::send_json_error( json_encode( $menu_obj ) );
}
if ( $form = $this->form( $menu_obj, 0, $settings ) ) {
Plugin::send_json_success( $form );
} else {
Plugin::send_json_error( json_encode( $menu_obj ) );
}
wp_die();
}
public function panels( $menu_item_depth, $menu_obj, $menu_id ) {
$items = Configuration::custom_nav_menu_items();
$this->panels = $items->{$menu_obj->quadmenu}->panels;
?>
<ul role="tablist" id="settings_<?php echo esc_attr( $menu_obj->ID ); ?>" class="quadmenu-tabs vertical">
<li class="active"><a href="#setting_default_<?php echo esc_attr( $menu_obj->ID ); ?>" data-quadmenu="tab"><i class="dashicons dashicons-menu"></i><span class="title"><?php echo esc_html( 'Default', 'quadmenu' ); ?></span></a></li>
<?php foreach ( $this->panels as $key => $panel ) : ?>
<?php
$classes = array();
if ( isset( $panel->depth ) ) {
foreach ( $panel->depth as $depth ) {
$classes[] = 'quadmenu-panel-depth-' . $depth;
}
}
$classes[] = 'quadmenu-panel-' . $key;
?>
<li class="<?php echo join( ' ', array_map( 'sanitize_html_class', $classes ) ); ?>" data-menu_item_id="<?php echo esc_attr( $menu_obj->ID ); ?>" data-menu_item_panel="<?php echo esc_attr( $key ); ?>"><a class="<?php echo esc_attr( $key ); ?>" href="#setting_<?php echo esc_attr( $key ); ?>_<?php echo esc_attr( $menu_obj->ID ); ?>" data-quadmenu="tab"><i class="<?php echo esc_attr( $panel->icon ); ?>"></i><span class="title"><?php echo esc_html( $panel->title ); ?></span></a></li>
<?php $this->panels->{$key} = $panel->settings; ?>
<?php endforeach; ?>
<?php do_action( 'quadmenu_modal_panels_tab', $menu_item_depth, $menu_obj, $menu_id ); ?>
</ul>
<div class="quadmenu-tabs-content<?php // echo join(' ', array_map('sanitize_html_class', $classes)); ?>">
<div role="tabpanel" class="quadmenu-tab-pane quadmenu-tab-pane-default active" id="setting_default_<?php echo esc_attr( $menu_obj->ID ); ?>">
<?php echo $this->form( $menu_obj, 0, array( 'url', 'target', 'title', 'attr-title', 'classes', 'xfn', 'description' ) ); ?>
</div>
<?php foreach ( $this->panels as $key => $settings ) : ?>
<div role="tabpanel" class="quadmenu-tab-pane quadmenu-tab-pane-<?php echo esc_attr( $key ); ?> fade" id="setting_<?php echo esc_attr( $key ); ?>_<?php echo esc_attr( $menu_obj->ID ); ?>">
<span class="spinner"></span>
</div>
<?php endforeach; ?>
<?php do_action( 'quadmenu_modal_panels_pane', $menu_item_depth, $menu_obj, $menu_id ); ?>
</div>
<?php
}
public static function instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
}