1/** 2 * JQuery Simple MobileMenu 3 * Copyright (c) 2017 Position2 Inc. 4 * Licensed under MIT (http://opensource.org/licenses/MIT) 5 * https://github.com/Position2/jQuery-Simple-MobileMenu 6 */ 7(function ($) { 8 var defaults = { 9 hamburgerId: "sm_menu_ham", //Hamburger Id 10 wrapperClass: "sm_menu_outer", //Menu Wrapper Class 11 submenuClass: "sub-menu", //Submenu Class 12 menuStyle: "slide", //Menu Style 13 onMenuLoad: function () { 14 return true; 15 }, //Calls when menu loaded 16 onMenuToggle: function () { 17 return true; 18 }, //Calls when menu open/close 19 }; 20 $.fn.simpleMobileMenu = function (options) { 21 if (this.length === 0) { 22 return this; 23 } 24 var smMenu = {}, 25 ds = $(this); 26 var init = function () { 27 smMenu.settings = $.extend({}, defaults, options); 28 smMenu.styleClass = 29 smMenu.settings.menuStyle.toLowerCase() === "slide" 30 ? "slide" 31 : "accordion"; 32 // Create Wrapper div & hamburger 33 createWrapper_Ham(); 34 // Create Back Menu for each sub menu 35 createBackButton(); 36 // Callback - Menu loaded 37 if (typeof smMenu.settings.onMenuLoad == "function") { 38 smMenu.settings.onMenuLoad(ds); 39 } 40 }, 41 createWrapper_Ham = function () { 42 (smMenu.hamburger = $("<div/>", { 43 id: smMenu.settings.hamburgerId, 44 html: "<span></span><span></span><span></span><span></span>", 45 })), 46 (smMenu.smmOuter = $("<div/>", { 47 class: smMenu.settings.wrapperClass + " " + smMenu.styleClass, 48 })); 49 ds.appendTo(smMenu.smmOuter); 50 smMenu.hamburger.add(smMenu.smmOuter).appendTo($("body")); 51 }, 52 createBackButton = function () { 53 smMenu.smmOuter 54 .find("ul." + smMenu.settings.submenuClass) 55 .each(function () { 56 var dis = $(this), 57 disPar = dis.closest("li"), 58 disfA = disPar.find("> a"), 59 disBack = $("<li/>", { 60 class: "back", 61 html: "<a href='#'>" + disfA.text() + "</a>", 62 }); 63 disPar.addClass("hasChild"); 64 disPar.append('<span class="submenu-toggle"></span>'); 65 if (smMenu.settings.menuStyle.toLowerCase() === "slide") { 66 disBack.prependTo(dis); 67 } 68 }); 69 }, 70 toggleMobileMenu = function (e) { 71 $("#" + smMenu.settings.hamburgerId).toggleClass("open"); 72 $("." + smMenu.settings.wrapperClass) 73 .toggleClass("active") 74 .find("li.active") 75 .removeClass("active"); 76 $("body").toggleClass("mmactive"); 77 if (smMenu.settings.menuStyle.toLowerCase() === "accordion") { 78 $("." + smMenu.settings.wrapperClass) 79 .find("ul." + smMenu.settings.submenuClass) 80 .hide(); 81 } 82 // Callback - Menu Toggle 83 if (typeof smMenu.settings.onMenuToggle == "function") { 84 smMenu.settings.onMenuToggle( 85 ds, 86 $("#" + smMenu.settings.hamburgerId).hasClass("open"), 87 ); 88 } 89 }, 90 showSlideSubMenu = function (e) { 91 console.log("Span Clicked"); 92 e.preventDefault(); 93 $("." + smMenu.settings.wrapperClass).scrollTop(0); 94 $(this).parent().addClass("active").siblings().removeClass("active"); 95 }, 96 showAccordionSubMenu = function (e) { 97 e.preventDefault(); 98 var dis = $(this), 99 dispar = $(this).parent(), 100 lastActive = dispar.siblings(".active"); 101 dispar 102 .find("> ." + smMenu.settings.submenuClass) 103 .slideToggle(function () { 104 if ($(this).is(":visible")) { 105 var offset = dis[0].offsetTop; 106 $("." + smMenu.settings.wrapperClass) 107 .stop() 108 .animate({ scrollTop: offset }, 300); 109 } 110 }); 111 lastActive 112 .find("ul." + smMenu.settings.submenuClass) 113 .slideUp(function () { 114 $(this).find(".hasChild").removeClass("active"); 115 }); 116 dispar.toggleClass("active").siblings().removeClass("active"); 117 }, 118 goBack = function (e) { 119 e.preventDefault(); 120 $(this) 121 .closest("ul." + smMenu.settings.submenuClass) 122 .parent() 123 .removeClass("active"); 124 }; 125 /*Init*/ 126 init(); 127 /* Open Menu */ 128 smMenu.hamburger.click(toggleMobileMenu); 129 /* Show Slide SubMenu */ 130 smMenu.smmOuter 131 .filter(".slide") 132 .find("li.hasChild > span.submenu-toggle") 133 .click(showSlideSubMenu); 134 /* Show Accordion SubMenu */ 135 smMenu.smmOuter 136 .filter(".accordion") 137 .find("li.hasChild > a") 138 .click(showAccordionSubMenu); 139 /* Go Back */
140 smMenu.smmOuter.find("li.back a").click(goBack); 141 }; 142})(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.