PageSourceSearch

https://wheelingcvb.com/wp-content/themes/visitwheelingwv/js/mobileSubmenus.js?ver=1.1.17

js wheelingcvb.com collected 2026-10-02 10:11:57 UTC 3,903 bytes, 153 lines download raw bytes

1/****SETTINGS****/
2var mobileBreak = 1000; //mobile breakpoint
3var menuBarHeight = 50;
4var mobileMenuContainer = "mobile-menu-container"; //classname of scrolling mobile menu container
5
6window.addEventListener('DOMContentLoaded', function()
7{	
8	hookMobileSubmenus();
9	onResize();
10});
11
12function hookMobileSubmenus()
13{
14	var submenus = document.querySelectorAll('.' + mobileMenuContainer + ' > div > ul > li > .sub-menu');
15	
16	for(var i = 0; i < submenus.length; i++)
17	{	
18		submenus[i].style.height = "0px";
19		submenus[i].style.overflow = "hidden";
20		var button = submenus[i].parentNode.children[0];
21		button.addEventListener('click', function(e)
22		{
23			if (window.innerWidth <= mobileBreak)
24			{
25				if (e.target.parentNode.querySelectorAll('.sub-menu li').length > 2)
26				{
27					e.preventDefault();
28				}
29			}
30		});
31		button.addEventListener('mouseup', function(e)
32		{
33			if (e.target.parentNode.querySelectorAll('.sub-menu li').length > 2)
34			{
35				mobileSubmenuClicked(e);
36			}
37		});
38		
39		button.addEventListener('touchstart', function(e)
40		{
41			if (e.target.parentNode.querySelectorAll('.sub-menu li').length > 2)
42			{
43				mobileSubmenuClicked.x = e.changedTouches.pageX;
44				mobileSubmenuClicked.y = e.changedTouches.pageY;
45			}
46		});
47		button.addEventListener('touchend', function(e)
48		{
49			if (Math.abs(mobileSubmenuClicked.x - e.changedTouches.pageX) < 10 && Math.abs(mobileSubmenuClicked.y - e.changedTouches.pageY) < 10)
50			{
51				if (e.target.parentNode.querySelectorAll('.sub-menu li').length > 2)
52				{
53					mobileSubmenuClicked(e);
54				}
55			}
56		});
57	}
58}
59
60function onResize()
61{
62	var submenus = document.querySelectorAll('.' + mobileMenuContainer + ' > div > ul > li > .sub-menu');
63	
64	if (window.innerWidth <= mobileBreak)
65	{
66		for(var i = 0; i < submenus.length; i++)
67		{	
68			submenus[i].style.height = "0px";
69			submenus[i].style.overflow = "hidden";
70		}
71	}
72	else
73	{
74		for(i = 0; i < submenus.length; i++)
75		{	
76			submenus[i].style.height = "";
77			submenus[i].style.overflow = "";
78		}	
79	}
80}
81window.addEventListener('resize', onResize);
82
83function mobileSubmenuClicked(e)
84{
85	if (window.innerWidth <= mobileBreak)
86	{
87		e.preventDefault();
88		var submenu = e.target.parentNode.children[1];
89		if (submenu.style.height == "0px")
90		{
91			resetMobileSubmenus();
92			e.target.style.background = "";
93			e.target.className = "mobile-button-selected";
94			var innerHeight = 0;
95			for (var c=0; c < submenu.children.length; c++)
96			{
97				innerHeight+=submenu.children[c].clientHeight+1;
98			}
99			submenu.style.transition = "0.2s ease";
100			
101			submenu.style.height = innerHeight + 1 + "px";
102			
103			var viewportOffset = e.target.getBoundingClientRect();
104			
105			mobileSubmenuClicked.animating = true;
106			
107			setTimeout(function(e){mobileSubmenuClicked.animating = false;}, 200);
108			
109			animateScroll(document.getElementsByClassName(mobileMenuContainer)[0], document.getElementsByClassName(mobileMenuContainer)[0].scrollTop + viewportOffset.top - menuBarHeight); 
110		}
111		else
112		{
113			resetMobileSubmenus();
114		}
115	}
116}
117
118function resetMobileSubmenus()
119{
120	var submenus = document.querySelectorAll('.' + mobileMenuContainer + ' > div > ul > li > .sub-menu');
121	
122	for(var i = 0; i < submenus.length; i++)
123	{
124		var button = submenus[i].parentNode.children[0];
125		button.style.background = "";
126		button.className = "";
127		submenus[i].style.transition = "none";
128		submenus[i].style.height = "0px";	
129	}
130}
131
132function animateScroll(element, top, speed)
133{	
134	if (typeof speed == 'undefined')
135	{
136		speed = 4;	
137	}
138	if (element.scrollTop < Math.round(top))
139	{
140		element.scrollTop += speed;	
141	}
142	if (element.scrollTop > Math.round(top))
143	{
144		element.scrollTop -= speed;	
145	}
146	
147	if (Math.abs(element.scrollTop - Math.round(top)) > speed && (element.scrollTop != animateScroll.previous || mobileSubmenuClicked.animating))
148	{
149		setTimeout(function(){animateScroll(element, top, speed);}, 1);	
150	}
151	
152	animateScroll.previous = element.scrollTop;
153}

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.