PageSourceSearch

https://masoncityia.com/wp-content/themes/kava/assets/js/theme-script.js?ver=2.1.4

js masoncityia.com collected 2026-10-02 17:55:06 UTC 5,346 bytes, 225 lines download raw bytes

1// Responsive menu
2var kavaResponsiveMenu = function kavaResponsiveMenu() {
3	var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4	var defaults = {
5		wrapper: '.main-navigation',
6		menu: '.menu',
7		threshold: 640, // Minimal menu width,
8		mobileMenuClass: 'mobile-menu',
9		mobileMenuOpenClass: 'mobile-menu-open',
10		mobileMenuToggleButtonClass: 'mobile-menu-toggle-button',
11		toggleButtonTemplate: '<i class="mobile-menu-close fa fa-bars" aria-hidden="true"></i><i class="mobile-menu-open fa fa-times" aria-hidden="true"></i>'
12	};
13
14	if ( typeof Object.assign !== 'function' ) {
15		options = jQuery.extend( {}, defaults, options );
16	} else {
17		options = Object.assign( defaults, options );
18	}
19
20	var wrapper = options.wrapper.nodeType ?
21		options.wrapper :
22		document.querySelector(options.wrapper);
23
24	var menu = options.menu.nodeType ?
25		options.menu :
26		document.querySelector(options.menu);
27
28	var toggleButton,
29		toggleButtonOpenBlock,
30		toggleButtonCloseBlock,
31		isMobileMenu,
32		isMobileMenuOpen;
33
34	// series
35	var init = [
36		addToggleButton,
37		checkScreenWidth,
38		addResizeHandler
39	];
40
41	if (wrapper && menu) {
42		runSeries(init);
43	}
44
45	function addToggleButton() {
46		toggleButton = document.createElement('button');
47
48		toggleButton.innerHTML = options.toggleButtonTemplate.trim();
49		toggleButton.className = options.mobileMenuToggleButtonClass;
50		wrapper.insertBefore(toggleButton, wrapper.children[0]);
51
52		toggleButtonOpenBlock = toggleButton.querySelector('.mobile-menu-open');
53		toggleButtonCloseBlock = toggleButton.querySelector('.mobile-menu-close');
54
55		toggleButton.addEventListener('click', mobileMenuToggle);
56	}
57
58	// menu switchers
59	function switchToMobileMenu() {
60		wrapper.classList.add(options.mobileMenuClass);
61		toggleButton.style.display = "block";
62		isMobileMenuOpen = false;
63		hideMenu();
64	}
65
66	function switchToDesktopMenu() {
67		wrapper.classList.remove(options.mobileMenuClass);
68		toggleButton.style.display = "none";
69		showMenu();
70	}
71
72	// mobile menu toggle
73	function mobileMenuToggle() {
74		if (isMobileMenuOpen) {
75			hideMenu();
76		} else {
77			showMenu();
78		}
79		isMobileMenuOpen = !isMobileMenuOpen;
80	}
81
82	function hideMenu() {
83		wrapper.classList.remove(options.mobileMenuOpenClass);
84		menu.style.display = "none";
85		toggleButtonOpenBlock.style.display = "none";
86		toggleButtonCloseBlock.style.display = "block";
87	}
88
89	function showMenu() {
90		wrapper.classList.add(options.mobileMenuOpenClass);
91		menu.style.display = "block";
92		toggleButtonOpenBlock.style.display = "block";
93		toggleButtonCloseBlock.style.display = "none";
94	}
95
96	// resize helpers
97	function checkScreenWidth() {
98		var currentMobileMenuStatus = window.innerWidth < options.threshold ? true : false;
99
100		if (isMobileMenu !== currentMobileMenuStatus) {
101			isMobileMenu = currentMobileMenuStatus;
102			isMobileMenu ? switchToMobileMenu() : switchToDesktopMenu();
103		}
104	}
105
106	function addResizeHandler() {
107		window.addEventListener('resize', resizeHandler);
108	}
109
110	function resizeHandler() {
111		window.requestAnimationFrame(checkScreenWidth)
112	}
113
114	// general helpers
115	function runSeries(functions) {
116		functions.forEach( function( func ) {
117			return func();
118		} );
119	}
120};
121
122var Kava_Theme_JS;
123
124(function($) {
125	'use strict';
126
127	Kava_Theme_JS = {
128
129		init: function() {
130			this.page_preloader_init();
131			this.toTopInit();
132			this.responsiveMenuInit();
133			this.magnificPopupInit();
134			this.swiperInit();
135		},
136
137		page_preloader_init: function() {
138			var $pleloader = $( '.page-preloader-cover' );
139
140			if ( $pleloader[0] ) {
141				$pleloader.delay( 500 ).fadeTo( 500, 0, function() {
142					$( this ).remove();
143				} );
144			}
145		},
146
147		toTopInit: function() {
148			if ( undefined === window.kavaConfig.toTop || ! window.kavaConfig.toTop ) {
149				return;
150			}
151
152			this.toTop();
153		},
154
155		toTop: function( options ) {
156			var defaults = {
157					buttonID:    'toTop',
158					min:         200,
159					inDelay:     600,
160					outDelay:    400,
161					scrollSpeed: 600,
162					easingType:  'linear'
163				},
164				settings = $.extend( defaults, options ),
165				buttonSelector = '#' + settings.buttonID;
166
167			$( 'body' ).append( '<div id="' + settings.buttonID + '" role="button"></div>' );
168
169			$( buttonSelector ).hide().on( 'click.KavaThemeToTop', function() {
170				$( 'html, body' ).animate( { scrollTop: 0 }, settings.scrollSpeed, settings.easingType );
171				return false;
172			} );
173
174			$( window ).on( 'scroll', function() {
175				var scrollTop = $( window ).scrollTop();
176
177				if ( scrollTop > settings.min )
178					$( buttonSelector ).fadeIn( settings.inDelay );
179				else
180					$( buttonSelector ).fadeOut( settings.outDelay );
181			} );
182		},
183
184		responsiveMenuInit: function() {
185			if (typeof kavaResponsiveMenu !== 'undefined') {
186				kavaResponsiveMenu();
187			}
188		},
189
190		magnificPopupInit: function() {
191
192			if (typeof $.magnificPopup !== 'undefined') {
193
194				//MagnificPopup init
195				$('[data-popup="magnificPopup"]').magnificPopup({
196					type: 'image'
197				});
198
199			}
200		},
201
202		swiperInit: function() {
203			if (typeof Swiper !== 'undefined') {
204
205				//Swiper carousel init
206				var mySwiper = new Swiper('.swiper-container', {
207					// Optional parameters
208					loop: true,
209					spaceBetween: 10,
210					autoHeight: true,
211
212					// Navigation arrows
213					navigation: {
214						nextEl: '.swiper-button-next',
215						prevEl: '.swiper-button-prev'
216					}
217				})
218
219			}
220		}
221	};
222
223	Kava_Theme_JS.init();
224
225}(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.