PageSourceSearch

https://sah.org/wp-content/themes/cb-sah/styles/js/jquery-simple-mobilemenu.js?ver=1.0.0

js sah.org collected 2026-09-24 08:58:23 UTC 4,303 bytes, 142 lines download raw bytes

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.