1/** 2 * MuffinMenu 3 * 4 * Horizontal Multilevel Menu with WP MegaMenu Support 5 * 6 * 3.0 | Muffin Group 7 */ 8 9(function( $ ){ 10 "use strict"; 11 12 $.fn.mfnMenu = function( options ){ 13 14 var menu = $(this); 15 16 var defaults = { 17 addLast : false, 18 arrows : false, 19 delay : 100, 20 hoverClass : 'hover', 21 mobileInit : 768, 22 responsive : true 23 }; 24 options = $.extend( defaults, options ); 25 26 27 var init = function(){ 28 29 // add '.submenu' class 30 $( 'li:has(ul)', menu ).addClass( 'submenu' ); 31 32 // append mobile toggle button 33 $( 'li:has(ul)', menu ).append( '<span class="menu-toggle"></span>' ); 34 35 // add '.mfn-megamenu-parent' class 36 menu.children( 'li:has( ul.mfn-megamenu )' ).addClass( 'mfn-megamenu-parent' ); 37 38 // add '.last-item' class 39 $( '.submenu ul li:last-child', menu ).addClass( 'last-item' ); 40 41 // add '.last' class 42 if( options.addLast ) { 43 $( '> li:last-child', menu ).addClass( 'last' ) 44 .prev().addClass( 'last' ); 45 } 46 47 // appand submenu arrows 48 if( options.arrows ) { 49 $( 'li ul li:has(ul) > a', menu ).append( '<i class="menu-arrow icon-right-open"></i>' ); 50 } 51 52 }; 53 54 55 var doMenu = function(){ 56 57 if( ( $(window).width() >= options.mobileInit ) || ( ! options.responsive ) ){ 58 59 // desktop -------------------------------- 60 61 $( '> li, ul:not(.mfn-megamenu) li', menu ).hover(function() { 62 63 $(this).stop(true,true).addClass( options.hoverClass ); 64 65 $(this).children( 'ul' ).stop(true,true).fadeIn( options.delay ); 66 67 68 }, function(){ 69 70 $(this).stop(true,true).removeClass( options.hoverClass ); 71 72 $(this).children( 'ul' ).stop(true,true).fadeOut( options.delay ); 73 74 }); 75 76 } else { 77 78 // mobile --------------------------------- 79 80 $( 'li', menu ).unbind('hover'); 81 82 $( 'li > .menu-toggle', menu ).off('click').on('click', function(){ 83 84 var el = $(this).closest('li'); 85 86 if( el.hasClass( options.hoverClass ) ){ 87 88 el.removeClass( options.hoverClass ) 89 .children('ul').stop(true,true).fadeOut( options.delay ); 90 91 } else { 92 93 el.addClass( options.hoverClass ) 94 .children('ul').stop(true,true).fadeIn( options.delay ); 95 96 } 97 98 }); 99 100 } 101 102 }; 103 104 105 $(window).bind( 'resize', doMenu ); 106 107 var __constructor = function(){ 108 init(); 109 doMenu(); 110 }; 111 112 __constructor(); 113 114 }; 115 116})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.