%PDF- %PDF-
Direktori : /var/www/html/shaban/laviva/wp-content/themes/levelup/inc/nav_menu/ |
Current File : /var/www/html/shaban/laviva/wp-content/themes/levelup/inc/nav_menu/mega-menu.class.php |
<?php if ( ! class_exists( 'Levelup_Mega_menu', false ) ) { class Levelup_Mega_menu { public $fat_menu = false; function __construct() { add_action( 'admin_enqueue_scripts', array( $this, 'register_scripts' ) ); // setup custom menu fields add_filter( 'wp_setup_nav_menu_item', array( $this, 'setup_custom_nav_fields' ) ); // save menu custom fields add_action( 'wp_update_nav_menu_item', array( $this, 'update_custom_nav_fields' ), 10, 3 ); // replace menu walker add_filter( 'wp_edit_nav_menu_walker', array( $this, 'replace_walker_class' ), 90, 2 ); // add menu item custom fields add_action( 'wp_nav_menu_item_custom_fields', array( $this, 'wp_nav_menu_item_custom_fields' ), 99, 4 ); // add admin css add_action( 'admin_print_styles-nav-menus.php', array( $this, 'add_admin_menu_inline_css' ), 15 ); // add some javascript add_action( 'admin_print_footer_scripts', array( $this, 'javascript_magic' ), 99 ); } function register_scripts(){ wp_enqueue_media(); } /** * Setup custom menu item fields before output. */ function setup_custom_nav_fields( $menu_item ) { // first level $menu_item->rdy_mega_menu_enabled = get_post_meta( $menu_item->ID, '_menu_item_rdy_mega_menu_enabled', true ); $menu_item->rdy_mega_menu_background = get_post_meta( $menu_item->ID, '_menu_item_rdy_mega_menu_background', true ); $menu_item->rdy_mega_menu_styles = get_post_meta( $menu_item->ID, '_menu_item_rdy_mega_menu_styles', true ); return $menu_item; } /** * Update custom menu item fields. */ function update_custom_nav_fields( $menu_id, $menu_item_db_id, $args ) { // mega menu enabled $enable_mega_menu = isset( $_REQUEST['menu-item-rdy-enable-mega-menu'], $_REQUEST['menu-item-rdy-enable-mega-menu'][ $menu_item_db_id ] ) ? 1 : ''; update_post_meta( $menu_item_db_id, '_menu_item_rdy_mega_menu_enabled', $enable_mega_menu ); // background if ( isset( $_REQUEST['menu-item-rdy-background'] ) && array_key_exists( $menu_item_db_id, $_REQUEST['menu-item-rdy-background'] ) ) { $background = $_REQUEST['menu-item-rdy-background'][ $menu_item_db_id ]; update_post_meta( $menu_item_db_id, '_menu_item_rdy_mega_menu_background', esc_attr( $background ) ); } // styles if ( isset( $_REQUEST['menu-item-rdy-mega-menu-styles'] ) && array_key_exists( $menu_item_db_id, $_REQUEST['menu-item-rdy-mega-menu-styles'] ) ) { update_post_meta( $menu_item_db_id, '_menu_item_rdy_mega_menu_styles', esc_attr( $_REQUEST['menu-item-rdy-mega-menu-styles'][ $menu_item_db_id ] ) ); } } /** * Replace Walker_Nav_Menu_Edit with custom one. */ function replace_walker_class( $walker, $menu_id ) { if ( 'Walker_Nav_Menu_Edit' == $walker ) { $walker = 'Levelup_Edit_Menu_Walker'; } return $walker; } /** * Add custom menu item fields. */ public function wp_nav_menu_item_custom_fields( $item_id, $item, $depth, $args ) { // set default item fields $default_mega_menu_fields = array( 'rdy_mega_menu_icon' => 'none', 'rdy_mega_menu_enabled' => '', 'rdy_mega_menu_background' => '', 'rdy_mega_menu_styles' => '', ); // set defaults foreach ( $default_mega_menu_fields as $field=>$value ) { if ( !isset($item->$field) ) { $item->$field = $value; } } $mega_menu_container_classes = array( 'rdy-mega-menu-feilds' ); $mega_menu_container_classes = implode( ' ', $mega_menu_container_classes ); ?> <!-- Mega Menu Start --> <div class="<?php echo esc_attr( $mega_menu_container_classes ); ?>"> <!-- first level --> <p class="field-rdy-enable-mega-menu"> <label for="edit-menu-item-rdy-enable-mega-menu-<?php echo esc_attr( $item_id ); ?>"> <input id="edit-menu-item-rdy-enable-mega-menu-<?php echo esc_attr( $item_id ); ?>" type="checkbox" class="menu-item-rdy-enable-mega-menu" name="menu-item-rdy-enable-mega-menu[<?php echo esc_attr( $item_id ); ?>]" <?php checked( $item->rdy_mega_menu_enabled ); ?>/> <?php _ex( 'Enable Mega Menu', 'edit menu walker', 'LEVELUP' ); ?> </label> </p> <p class="field-rdy-mega-menu-background description description-wide"> <a href="#" id="rdy-media-upload-<?php echo esc_attr( $item_id ); ?>" class="rdy-open-media button button-primary rdy-megamenu-upload-background"><?php esc_html_e( 'Set Background Image', 'LEVELUP' ); ?></a> <label for="edit-menu-item-megamenu-background-<?php echo esc_attr( $item_id ); ?>"> <input type="hidden" id="edit-menu-item-megamenu-background-<?php echo esc_attr( $item_id ); ?>" class="rdy-new-media-image widefat code edit-menu-item-megamenu-background" name="menu-item-rdy-background[<?php echo esc_attr( $item_id ); ?>]" value="<?php echo esc_attr( $item->rdy_mega_menu_background ); ?>" /> <img src="<?php echo esc_url( $item->rdy_mega_menu_background ); ?>" id="rdy-media-img-<?php echo esc_attr( $item_id ); ?>" class="rdy-megamenu-background-image" style="<?php echo ( trim( $item->rdy_mega_menu_background ) ) ? 'display: inline;' : '';?>" /> <a href="#" id="rdy-media-remove-<?php echo esc_attr( $item_id ); ?>" class="remove-rdy-megamenu-background" style="<?php echo ( trim( $item->rdy_mega_menu_background ) ) ? 'display: inline;' : '';?>">Remove Image</a> </label> </p> <p class="field-rdy-mega-menu-styles description description-wide"> <label for="edit-menu-item-megamenu-styles-<?php echo esc_attr( $item_id ); ?>"> <?php esc_html_e( 'Mega Menu Container Styles', 'LEVELUP' ); ?><br /> <textarea id="edit-menu-item-megamenu-styles-<?php echo esc_attr( $item_id ); ?>" class="widefat edit-menu-item-megamenu-styles" rows="3" cols="20" name="menu-item-rdy-mega-menu-styles[<?php echo esc_attr( $item_id ); ?>]"><?php echo esc_html( $item->rdy_mega_menu_styles ); ?></textarea> <span class="description"><?php esc_html_e('This option will allow you add custom styles (background position, background repeat,..) to your mega menu main container.', 'LEVELUP'); ?></span> </label> </p> </div> <!-- Mega Menu End --> <?php } function add_admin_menu_inline_css() { $css = ' .menu.ui-sortable .rdy-mega-menu-feilds p, .menu.ui-sortable .rdy-mega-menu-feilds .field-rdy-image, .menu.ui-sortable .custom-widget { display: none; } .menu.ui-sortable .menu-item-depth-0 .rdy-mega-menu-feilds .field-rdy-enable-mega-menu, .menu.ui-sortable .rdy-mega-menu-feilds .field-rdy-icon, .menu.ui-sortable .rdy-mega-menu-feilds.field-rdy-mega-menu-image-icon .field-rdy-image, .menu.ui-sortable .rdy-mega-menu-feilds.field-rdy-mega-menu-iconfont-icon .field-rdy-iconfont { display: block; } .menu.ui-sortable .menu-item-depth-0.field-rdy-mega-menu-enabled .rdy-mega-menu-feilds .field-rdy-mega-menu-background, .menu.ui-sortable .menu-item-depth-0.field-rdy-mega-menu-enabled .rdy-mega-menu-feilds .field-rdy-mega-menu-styles, .menu.ui-sortable .menu-item-depth-1.field-rdy-mega-menu-enabled .custom-widget, .menu.ui-sortable .menu-item-depth-2.field-rdy-mega-menu-enabled .custom-widget { display: block; } .field-rdy-mega-menu-background img { max-width: 300px; } .field-rdy-mega-menu-background .rdy-open-media { margin-bottom: 10px; } '; wp_add_inline_style( 'wp-admin', $css ); } function javascript_magic() { ?> <script type="text/javascript"> jQuery(function($){ var rdy_fat_menu = { reTimeout: false, recalc : function() { $menuItems = jQuery('.menu-item', '#menu-to-edit'); $menuItems.each( function(i) { var $item = jQuery(this), $checkbox = jQuery('.menu-item-rdy-enable-mega-menu', this); if ( $item.is('.menu-item-depth-0') ) { if ( $checkbox.is(':checked') ) { $item.addClass('field-rdy-mega-menu-enabled'); } } else { var checkItem = $menuItems.filter(':eq('+(i-1)+')'); if ( checkItem.is('.field-rdy-mega-menu-enabled') ) { $item.addClass('field-rdy-mega-menu-enabled'); $checkbox.attr('checked','checked'); } else { $item.removeClass('field-rdy-mega-menu-enabled'); $checkbox.attr('checked',''); } } }); }, binds: function() { jQuery('#menu-to-edit').on('click', '.menu-item-rdy-enable-mega-menu', function(event) { var $checkbox = jQuery(this), $container = $checkbox.parents('.menu-item:eq(0)'); if ( $checkbox.is(':checked') ) { $container.addClass('field-rdy-mega-menu-enabled'); } else { $container.removeClass('field-rdy-mega-menu-enabled'); } rdy_fat_menu.recalc(); return true; }); jQuery('#menu-to-edit').on('change', '.field-rdy-icon input[type="radio"]', function(event){ var $this = jQuery(this), $parentContainer = $this.parents('.rdy-mega-menu-feilds'); switch( $this.val() ) { case 'iconfont': $parentContainer.addClass('field-rdy-mega-menu-iconfont-icon').removeClass('field-rdy-mega-menu-image-icon'); break; default: $parentContainer.removeClass('field-rdy-mega-menu-iconfont-icon field-rdy-mega-menu-image-icon'); } return true; }); }, init: function() { rdy_fat_menu.binds(); rdy_fat_menu.recalc(); jQuery( ".menu-item-bar" ).live( "mouseup", function(event, ui) { if ( !jQuery(event.target).is('a') ) { clearTimeout(rdy_fat_menu.reTimeout); rdy_fat_menu.reTimeout = setTimeout(rdy_fat_menu.recalc, 700); } }); } }; rdy_fat_menu.init(); $.fn.manage_thumbnail_display = function( variables ) { var button_id; return this.click( function( e ){ e.preventDefault(); button_id = this.id.replace( 'rdy-media-remove-', '' ); $( '#edit-menu-item-megamenu-background-'+button_id ).val( '' ); $( '#rdy-media-img-'+button_id ).attr( 'src', '' ).css( 'display', 'none' ); }); }; $(document).ready(function () { $( '.remove-rdy-megamenu-background' ).manage_thumbnail_display(); $( '.rdy-megamenu-background-image' ).css( 'display', 'block' ); $( ".rdy-megamenu-background-image[src='']" ).css( 'display', 'none' ); rdy_media_frame_setup(); }); function rdy_media_frame_setup() { var RdyMediaFrame; var item_id; $( document.body ).on( 'click.rdyOpenMediaManager', '.rdy-open-media', function(e){ e.preventDefault(); item_id = this.id.replace('rdy-media-upload-', ''); if ( RdyMediaFrame ) { RdyMediaFrame.open(); return; } RdyMediaFrame = wp.media.frames.RdyMediaFrame = wp.media({ className: 'media-frame rdy-media-frame', frame: 'select', multiple: false, library: { type: 'image' } }); RdyMediaFrame.on('select', function(){ var media_attachment = RdyMediaFrame.state().get('selection').first().toJSON(); console.log('select:'+media_attachment.url); $( '#edit-menu-item-megamenu-background-'+item_id ).val( media_attachment.url ); $( '#rdy-media-img-'+item_id ).attr( 'src', media_attachment.url ).css( 'display', 'block' ); }); RdyMediaFrame.open(); }); } }); </script> <?php } } }