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.