File "menu.js"
Full path: /home/kosmetik/public_html/wp-content/plugins/wpbf-premium/assets/js/menu.js
File
size: 10.21 B
MIME-type: text/plain
Charset: utf-8
Download Open Edit Advanced Editor Back
WPBFPremium.menu = (function ($) {
var isInsideCustomizer = WPBFPremium.site.isInsideCustomizer;
var breakpoints = WPBFPremium.site.breakpoints;
/**
* Call main functions.
*/
function init() {
setupMenuToggle();
setupSubmenuToggle();
setupMenuClose();
stopPropagation();
}
/**
* Check if a menu is enabled.
*
* @param {string} type The menu type.
*/
function isMenuEnabled(type) {
switch (type) {
case 'full-screen':
return (document.querySelector('.wpbf-menu-full-screen') ? true : false);
case 'off-canvas':
return (document.querySelector('.wpbf-menu-off-canvas') ? true : false);
case 'mobile-off-canvas':
return (document.querySelector('.wpbf-mobile-menu-off-canvas') ? true : false);
default:
return false;
}
}
/**
* Check if a transparent header is disabled on mobiles.
*/
function isTransparentHeaderDisabled(device) {
return (document.querySelector('[data-transparent-header-disabled="' + device + '"]') ? true : false);
}
/**
* Setup menu toggle.
*/
function setupMenuToggle() {
$(document).on('click', '.wpbf-menu-toggle', function () {
if (isMenuEnabled('full-screen')) {
toggleMenu('full-screen');
} else if (isMenuEnabled('off-canvas')) {
toggleMenu('off-canvas');
}
});
$(document).on('click', '.wpbf-mobile-menu-toggle', function () {
if (isMenuEnabled('mobile-off-canvas')) {
toggleMenu('mobile-off-canvas');
}
});
// Close mobile menu on anchor link clicks but only if menu item doesn't have submenus.
$(document).on('click', '.wpbf-mobile-menu a', function () {
if (!isMenuEnabled('mobile-off-canvas')) return;
var hasSubMenu = this.parentNode.classList.contains('menu-item-has-children');
if (this.href.match("#") || this.href.match("/#")) {
if (!hasSubMenu) {
toggleMenu('mobile-off-canvas');
} else {
toggleSubmenuOnEmptyLink(this);
}
}
});
// Close fullscreen menu on anchor link clicks but only if menu item doesn't have submenus.
$(document).on('click', '.wpbf-menu-full-screen a', function () {
var hasSubmenu = this.parentNode.classList.contains('menu-item-has-children');
if (this.href.match("#") || this.href.match("/#")) {
if (!hasSubmenu) {
toggleMenu('full-screen');
} else {
toggleSubmenuOnEmptyLink(this);
}
}
});
}
/**
* Setup submenu toggle.
*/
function setupSubmenuToggle() {
$(document).on('click', '.wpbf-menu-off-canvas .wpbf-submenu-toggle', function (e) {
e.preventDefault();
if (this.classList.contains("active")) {
$('i', this).removeClass('wpbff-arrow-up').addClass('wpbff-arrow-down');
$(this).removeClass('active').attr('aria-expanded', 'false').siblings('.sub-menu').stop().slideUp();
} else {
$('i', this).removeClass('wpbff-arrow-down').addClass('wpbff-arrow-up');
$(this).addClass('active').attr('aria-expanded', 'true').siblings('.sub-menu').stop().slideDown();
}
});
$(document).on('click', '.wpbf-mobile-menu-off-canvas .wpbf-submenu-toggle', function (e) {
e.preventDefault();
toggleSubmenu(this);
});
}
/**
* Setup menu close.
*/
function setupMenuClose() {
$(document).on('click', '.wpbf-menu-full-screen .wpbf-close', function () {
closeMenu('full-screen');
});
$(document).on('click', '.wpbf-menu-off-canvas .wpbf-close', function () {
toggleMenu('off-canvas');
});
$(document).on('click', '.wpbf-mobile-menu-off-canvas .wpbf-close', function () {
toggleMenu('mobile-off-canvas');
});
window.addEventListener('click', function () {
if (isMenuEnabled('off-canvas')) {
closeMenu('off-canvas');
}
if (isMenuEnabled('mobile-off-canvas')) {
closeMenu('mobile-off-canvas');
}
});
$(document).on('keyup', function (e) {
if (e.key !== 'Escape' && e.key !== 'Esc' && e.keyCode !== 27) return;
if (isMenuEnabled('full-screen')) {
closeMenu('full-screen');
} else if (isMenuEnabled('off-canvas')) {
closeMenu('off-canvas');
}
if (isMenuEnabled('mobile-off-canvas')) {
closeMenu('mobile-off-canvas');
}
});
$(window).on( 'resize', function () {
var windowWidth = $(window).width();
if( isTransparentHeaderDisabled('mobile') ) {
var mobileLogo = $('.wpbf-logo').data("menu-mobile-logo");
var transparentLogo = $('.wpbf-logo').data("menu-transparent-logo");
if (windowWidth < breakpoints.desktop) {
$('body').removeClass('wpbf-transparent-header');
$('.wpbf-navigation').removeClass('wpbf-navigation-transparent');
// $('.wpbf-mobile-logo img').attr('src', mobileLogo);
} else {
$('body').addClass('wpbf-transparent-header');
$('.wpbf-navigation').addClass('wpbf-navigation-transparent');
// $('.wpbf-mobile-logo img').attr('src', transparentLogo);
}
}
if (isMenuEnabled('off-canvas')) {
if (windowWidth < breakpoints.desktop) {
closeMenu('off-canvas');
}
}
if (isMenuEnabled('mobile-off-canvas')) {
if (windowWidth > breakpoints.desktop) {
closeMenu('mobile-off-canvas');
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');
}
}
}
});
}
/**
* Specific setup for both off-canvas & mobile-off-canvas.
*/
function stopPropagation() {
$(document).on('click', '.wpbf-menu-off-canvas, .wpbf-menu-toggle', function (e) {
e.stopPropagation();
});
$(document).on('click', '.wpbf-mobile-menu-container, .wpbf-mobile-menu-toggle', function (e) {
e.stopPropagation();
});
}
/**
* Setup menu toggle.
*
* @param {string} type The menu type.
*/
function toggleMenu(type) {
var toggle = document.querySelector('.wpbf-menu-toggle');
var menu;
if (type === 'full-screen') {
menu = document.querySelector('.wpbf-menu-full-screen');
if (menu.classList.contains('active')) {
toggle.classList.remove("active");
toggle.setAttribute('aria-expanded', 'false');
menu.classList.remove('active');
$(menu).stop().fadeOut(150);
} else {
toggle.classList.add("active");
toggle.setAttribute('aria-expanded', 'true');
menu.classList.add('active');
$(menu).stop().fadeIn(150);
}
} else if (type === 'off-canvas') {
menu = document.querySelector('.wpbf-menu-off-canvas');
if (menu.classList.contains("active")) {
toggle.classList.remove("active");
toggle.setAttribute('aria-expanded', 'false');
menu.classList.remove('active');
document.body.classList.remove('active');
$('.wpbf-menu-overlay').stop().animate({ opacity: '0' }, 300, function () {
this.style.display = 'none';
});
} else {
menu.setAttribute('tabindex', '-1');
menu.focus();
toggle.classList.add("active");
toggle.setAttribute('aria-expanded', 'true');
menu.classList.add('active');
document.body.classList.add('active');
$('.wpbf-menu-overlay').stop().css({ display: 'block' }).animate({ opacity: '1' }, 300);
}
} else if (type === 'mobile-off-canvas') {
toggle = document.querySelector('.wpbf-mobile-menu-toggle');
if (toggle.classList.contains('active')) {
document.body.classList.remove('active-mobile');
toggle.classList.remove("active")
toggle.setAttribute('aria-expanded', 'false');
$('.wpbf-mobile-menu-container').removeClass('active');
$('.wpbf-mobile-menu-overlay').stop().animate({ opacity: '0' }, 300, function () {
this.style.display = 'none';
});
} else {
document.body.classList.add('active-mobile');
toggle.classList.add("active");
toggle.setAttribute('aria-expanded', 'true');
$('.wpbf-mobile-menu-container').addClass('active');
$('.wpbf-mobile-menu-overlay').css({ display: 'block' }).stop().animate({ opacity: '1' }, 300);
}
}
}
/**
* Close menu.
*
* @param {string} type The menu type.
*/
function closeMenu(type) {
var toggle = document.querySelector('.wpbf-menu-toggle');
var menu;
if (type === 'full-screen') {
menu = document.querySelector('.wpbf-menu-full-screen');
if (!menu.classList.contains('active')) return;
menu.classList.remove('active');
$(menu).stop().fadeOut(150);
} else if (type === 'off-canvas') {
menu = document.querySelector('.wpbf-menu-off-canvas');
if (!menu.classList.contains('active')) return;
toggle.classList.remove("active");
toggle.setAttribute('aria-expanded', 'false');
menu.classList.remove('active');
document.body.classList.remove('active');
$('.wpbf-menu-overlay').stop().animate({ opacity: '0' }, 300, function () {
this.style.display = 'none';
});
} else if (type === 'mobile-off-canvas') {
toggle = document.querySelector('.wpbf-mobile-menu-toggle');
if (!toggle.classList.contains('active')) return;
document.body.classList.remove('active-mobile');
toggle.classList.remove("active");
toggle.setAttribute('aria-expanded', 'false');
$('.wpbf-mobile-menu-container').removeClass('active');
$('.wpbf-mobile-menu-overlay').stop().animate({ opacity: '0' }, 300, function () {
this.style.display = 'none';
});
}
}
/**
* Toggle mobile off-canvas submenu.
*
* @param {HTMLElement} menu The menu.
*/
function toggleSubmenu(menu) {
if (menu.classList.contains("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 mobile off-canvas submenu.
*
* @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);