HEX
Server: Apache
System: Windows NT MAGNETO-ARM 10.0 build 22000 (Windows 10) AMD64
User: Michel (0)
PHP: 7.4.7
Disabled: NONE
Upload Files
File: C:/Apache24/htdocs/wp-content/themes/page-builder-framework/assets/js/mobile.js
var WPBFMobile = (function ($) {
	var breakpoints = WPBFSite.breakpoints;
	var menuType;

	/**
	 * Init the main functions.
	 */
	function init() {
		window.addEventListener('resize', function (e) {
			breakpoints = WPBFSite.breakpoints;
		});

		setupMenuType();
		setupMobileMenu();
		setupMobileSubmenu();
	}

	/**
	 * Setup menu type.
	 */
	function setupMenuType() {
		var menu = document.querySelector('.wpbf-mobile-menu-hamburger');

		if (menu) {
			menuType = 'hamburger';
			return;
		}

		menu = document.querySelector('.wpbf-mobile-menu-default');

		if (menu) {
			menuType = 'default';
			return;
		}

		menuType = 'premium';
	}

	/**
	 * Setup mobile menu both for default and hamburger menu.
	 */
	function setupMobileMenu() {
		$(document).on('click', '.wpbf-mobile-menu-toggle', function () {
			setupMenuType();
			toggleMobileMenu(menuType);
		});

		// Close mobile menu on anchor link clicks but only if menu item doesn't have submenus.
		$(document).on('click', '.wpbf-mobile-menu a', function () {

			var hasSubmenu = this.parentNode.classList.contains('menu-item-has-children');

			if (this.href.match("#") || this.href.match("/#")) {
				
				if (!hasSubmenu) {
					toggleMobileMenu(menuType);
				} else {
					toggleSubmenuOnEmptyLink(this);
				}
			}

		});

		// Hide open mobile menu on window resize.
		$(window).resize(function () {

			var windowHeight = $(window).height();
			var windowWidth = $(window).width();
			var mobileNavWrapperHeight = $('.wpbf-mobile-nav-wrapper').outerHeight();

			$('.wpbf-mobile-menu-container.active nav').css({ 'max-height': windowHeight - mobileNavWrapperHeight });

			if (windowWidth > breakpoints.desktop) {
				closeMobileMenu(menuType);

				if ($('.wpbf-mobile-mega-menu').length) {
					$('.wpbf-mobile-mega-menu').removeClass('wpbf-mobile-mega-menu').addClass('wpbf-mega-menu');
				}
			} else {
				if ($('.wpbf-mega-menu').length) {
					$('.wpbf-mega-menu').removeClass('wpbf-mega-menu').addClass('wpbf-mobile-mega-menu');
				}
			}

		});
	}

	/**
	 * Toggle mobile menu.
	 *
	 * @param {string} type Default menu or hamburger menu.
	 */
	function toggleMobileMenu(type) {
		if (type === 'premium') return;

		var menuToggle = $('.wpbf-mobile-menu-toggle');

		if (menuToggle.hasClass("active")) {
			$('.wpbf-mobile-menu-container').removeClass('active').slideUp();
			menuToggle.removeClass("active");

			if (type === 'hamburger') {
				menuToggle.removeClass('wpbff-times').addClass('wpbff-hamburger').attr('aria-expanded', 'false');
			} else {
				menuToggle.attr('aria-expanded', 'false');
			}
		} else {
			$('.wpbf-mobile-menu-container').addClass('active').slideDown();
			menuToggle.addClass("active");

			if (type === 'hamburger') {
				menuToggle.removeClass('wpbff-hamburger').addClass('wpbff-times').attr('aria-expanded', 'true');
			} else {
				menuToggle.attr('aria-expanded', 'true');
			}
		}
	}

	/**
	 * Close mobile menu.
	 * 
	 * @param {string} type Default menu or hamburger menu.
	 */
	function closeMobileMenu(type) {

		var menuToggle = $('.wpbf-mobile-menu-toggle');

		if (menuToggle.hasClass("active")) {
			$('.wpbf-mobile-menu-container').removeClass('active').slideUp();
			menuToggle.removeClass("active");

			if (type === 'hamburger') {
				menuToggle.removeClass('wpbff-times').addClass('wpbff-hamburger').attr('aria-expanded', 'false');
			} else {
				menuToggle.attr('aria-expanded', 'false');
			}
		}

	}

	/**
	 * Setup mobile submenu for both default and hamburger menu.
	 */
	function setupMobileSubmenu() {
		setupSubmenuToggle('default');
		setupSubmenuToggle('hamburger');
	}

	/**
	 * Setup submenu toggle.
	 *
	 * @param {string} type Default menu or hamburger menu.
	 */
	function setupSubmenuToggle(type) {
		var menuClass = type === 'hamburger' ? '.wpbf-mobile-menu-hamburger .wpbf-submenu-toggle' : '.wpbf-mobile-menu-default .wpbf-submenu-toggle';

		$(document).on('click', menuClass, function (e) {
			e.preventDefault();
			toggleMobileSubmenu(this);
		});
	}

	/**
	 * Toggle mobile submenu.
	 */
	function toggleMobileSubmenu(menu) {

		if ($(menu).hasClass("active")) {
			$('i', menu).removeClass('wpbff-arrow-up').addClass('wpbff-arrow-down');
			$(menu).removeClass('active').attr('aria-expanded', 'false').siblings('.sub-menu').slideUp();
		} else {
			$('i', menu).removeClass('wpbff-arrow-down').addClass('wpbff-arrow-up');
			$(menu).addClass('active').attr('aria-expanded', 'true').siblings('.sub-menu').slideDown();
		}

	}

	/**
	 * Toggle submenu on empty link.
	 *
	 * @param {HTMLElement} menu The menu.
	 */
	function toggleSubmenuOnEmptyLink(menu) {

		var toggle = $(menu).siblings('.wpbf-submenu-toggle');

		if (toggle.hasClass("active")) {
			$('i', toggle).removeClass('wpbff-arrow-up').addClass('wpbff-arrow-down');
			toggle.removeClass('active').attr('aria-expanded', 'false').siblings('.sub-menu').slideUp();
		} else {
			$('i', toggle).removeClass('wpbff-arrow-down').addClass('wpbff-arrow-up');
			toggle.addClass('active').attr('aria-expanded', 'true').siblings('.sub-menu').slideDown();
		}

	}

	init();
})(jQuery);