/** * MuffinMenu * * Horizontal Multilevel Menu with WP MegaMenu Support * 3.0 | Muffin Group */ (function($) { /* globals jQuery */ "use strict"; $.fn.mfnMenu = function(options) { var menu = $(this); var defaults = { addLast: false, arrows: false, delay: 100, hoverClass: 'hover', mobileInit: 768, responsive: true }; options = $.extend(defaults, options); var init = function() { // add '.submenu' class $('li:has(ul)', menu).addClass('submenu'); // append mobile toggle button $('li:has(ul)', menu).append(''); // add '.mfn-megamenu-parent' class menu.children('li:has( ul.mfn-megamenu )').addClass('mfn-megamenu-parent'); // add '.last-item' class $('.submenu ul li:last-child', menu).addClass('last-item'); // add '.last' class if (options.addLast) { $('> li:last-child', menu).addClass('last') .prev().addClass('last'); } // appand submenu arrows if (options.arrows) { $('li ul li:has(ul) > a', menu).append(''); } }; var doMenu = function() { if ((window.innerWidth >= options.mobileInit) || (!options.responsive)) { // desktop $('> li, ul:not(.mfn-megamenu) li', menu).on('mouseenter', function() { $(this).stop(true, true).addClass(options.hoverClass); $(this).children('ul').stop(true, true).fadeIn(options.delay); }).on('mouseleave', function() { $(this).stop(true, true).removeClass(options.hoverClass); $(this).children('ul').stop(true, true).fadeOut(options.delay); }); } else { // mobile $('li', menu).off('hover'); $('li > .menu-toggle', menu).off('click').on('click', function() { var el = $(this).closest('li'); if (el.hasClass(options.hoverClass)) { el.removeClass(options.hoverClass) .children('ul').stop(true, true).fadeOut(options.delay); } else { el.addClass(options.hoverClass) .children('ul').stop(true, true).fadeIn(options.delay); } }); } }; $(window).on('resize', doMenu); var __constructor = function() { init(); doMenu(); }; __constructor(); }; })(jQuery);