$(document).ready(function(){
var $body = $('body');
//== GLOBAL
//-- Applies to all the menu elements
// Does the initial cloning of each original menu
/*
$( '.js-navigation-clone' ).each(function(){
var $cloneTarget = $(this),
cloneOriginalName = $cloneTarget.data( 'original' ),
cloneType = $cloneTarget.data( 'type' ),
$clonedMenu = $( '.js-navigation[data-name="' + cloneOriginalName + '"] .js-menu' ).clone();
$cloneTarget.append($clonedMenu).find('.js-menu').attr( 'class', 'menu menu--' + cloneType + ' js-menu-' + cloneType );
});
*/
//== TYPE: DROPDOWN
//-- The ol' trusty dropdown, with touch support
$( '.js-menu-dropdown' ).each(function(){
var $menu = $(this),
$menuItems = $menu.find( '.menu__item' );
$menuItems.each(function(){
var $menuItem = $(this);
var $menuItemSubMenu = $menuItem.children( '.menu--sub-menu' );
if ( $menuItem.parent().is( '.js-menu-dropdown' ) ) {
$menuItem.addClass( 'is-parent' );
}
if ( $menuItemSubMenu.length ) {
// On mouse enter
$( $menuItem ).on( 'mouseenter', function(){
$menuItem.addClass( 'hover' );
});
// On mouse leave
$( $menuItem ).on( 'mouseleave', function(){
$menuItem.removeClass( 'hover' );
});
// Add class active when submenu is active
if ($menuItem.find('ul li').hasClass( 'is-active' ) ) {
$menuItem.addClass('is-active');
}
// On touch start
$( $menuItem ).on( 'touchstart', function(e){
if ( !$menuItem.hasClass( 'hover' ) ) {
// Checks if there is any other non-parent with sub menus open
if ( $menuItem.hasClass('is-parent') ) {
var $menuItemNonParents = $menuItem.siblings().find( '.hover' );
$menuItemNonParents.removeClass( 'hover' );
}
// Checks if there is any other siblings with sub menus open
var $menuItemSiblings = $menuItem.siblings( '.hover' );
if ( $menuItemSiblings.length ) {
$menuItemSiblings.removeClass( 'hover' );
}
$menuItem.addClass( 'hover' );
e.preventDefault();
}
e.stopPropagation();
});
}
});
});
//== TYPE: MOBILE
//-- The default mobile option.
$( '.js-menu-mobile' ).each(function(){
var $menu = $(this),
$menuItems = $menu.find( '.menu__item' );
$menuItems.each(function(){
var $menuItem = $(this);
var $menuItemSubMenu = $menuItem.children( '.menu--sub-menu' );
if ( $menuItem.parent().is('.js-menu-mobile') ) {
$menuItem.addClass('is-parent');
}
if ( $menuItemSubMenu.length ) {
var $menuItemLink = $menuItem.children( '.menu__item__link' );
var $menuItemText = $menuItem.children( '.menu__item__text' );
var $subMenuItems = $(this).find( '.menu--sub-menu' ).children();
if ( $menuItemLink.length && $subMenuItems.length ) {
$menuItemLink.append( '' );
}
else {
$menuItemText.append( '' );
}
}
});
});
$( '.js-menu-mobile-trigger' ).on( 'click touchstart', function(e) {
var $currentMenuTrigger = $(this);
var $currentMenuTarget = $('.js-menu-mobile-target');
$( 'body' ).toggleClass( 'has-menu-visible' );
$currentMenuTrigger.toggleClass( 'is-active' );
$currentMenuTarget.toggleClass( 'is-visible' );
e.stopPropagation();
e.preventDefault();
});
$( '.js-menu-mobile-close' ).on( 'click touchstart', function(e) {
var $currentMenuTarget = $('.js-menu-mobile-target');
$( 'body' ).removeClass( 'has-menu-visible' );
$currentMenuTarget.removeClass( 'is-visible' );
e.stopPropagation();
e.preventDefault();
});
$( '.js-menu-mobile-link-trigger' ).on( 'click touchstart', function(e) {
var $currentTrigger = $(this);
var $currentMenuItem = $currentTrigger.closest('.menu__item');
$currentMenuItem.children( '.menu--sub-menu' ).stop().slideToggle().toggleClass( 'is-visible' );
$currentTrigger.toggleClass( 'is-active' );
e.stopPropagation();
e.preventDefault();
});
//== TYPE: FULLSCREEN
$( '.js-menu-fullscreen-custom').each(function(){
var $menu = $(this),
$menuItems = $menu.find( '.menu__item' );
$menu.before('');
});
$( '.js-menu-fullscreen-custom-close' ).on( 'click touchstart', function(e) {
var $navigationClose = $(this);
var $navigation = $( '.js-navigation' );
var $menu = $('.js-menu-fullscreen');
var $menuClass = $menu.attr('class');
$navigation.toggleClass( 'is-visible' );
$body.toggleClass( 'has-menu-visible');
e.preventDefault();
});
//== TYPE: FULLSCREEN
$( '.js-menu-fullscreen-accordion').each(function(){
var $menu = $(this),
$menuItems = $menu.find( '.menu__item' );
$menuItems.each(function(){
var $menuItem = $(this);
var $menuItemSubMenu = $menuItem.children( '.menu--sub-menu' );
if ( $menuItem.parent().is('.js-menu-accordion') ) {
$menuItem.addClass('is-parent');
}
if ( $menuItemSubMenu.length ) {
var $menuItemLink = $menuItem.children( '.menu__item__link' );
var $menuItemText = $menuItem.children( '.menu__item__text' );
if ( $menuItemLink.length ) {
$menuItemLink.append( '' );
}
else {
$menuItemText.addClass( 'js-menu-fullscreen-accordion-submenu-trigger is-linked' );
$menuItemText.append( '' );
}
}
});
$menu.before('');
});
$( '.js-menu-fullscreen-accordion-close' ).on( 'click touchstart', function(e) {
var $navigationClose = $(this);
var $navigation = $( '.js-navigation' );
var $menu = $('.js-menu-fullscreen-accordion');
var $menuClass = $menu.attr('class');
$navigation.toggleClass( 'is-visible' );
$body.toggleClass( 'has-menu-visible');
e.preventDefault();
});
$( '.js-menu-fullscreen-accordion-submenu-trigger' ).on( 'click touchstart', function(e) {
var $currentTrigger = $(this);
var $currentMenuItem = $currentTrigger.closest('.menu__item');
$currentMenuItem.children( '.menu--sub-menu' ).stop().slideToggle().toggleClass( 'is-visible' );
$currentMenuItem.children( '.menu__item__text, .menu__item__link').children( '.js-menu-fullscreen-accordion-submenu-trigger' ).toggleClass( 'is-active' );
e.stopPropagation();
e.preventDefault();
});
});