/**
*
* Helps with accessibility for keyboard only users.
*
* Learn more: https://git.io/vWdr2
*/
( function() {
var isWebkit = navigator.userAgent.toLowerCase().indexOf( 'webkit' ) > -1,
isOpera = navigator.userAgent.toLowerCase().indexOf( 'opera' ) > -1,
isIe = navigator.userAgent.toLowerCase().indexOf( 'msie' ) > -1;
if ( ( isWebkit || isOpera || isIe ) && document.getElementById && window.addEventListener ) {
window.addEventListener( 'hashchange', function() {
var id = location.hash.substring( 1 ),
element;
if ( ! ( /^[A-z0-9_-]+$/.test( id ) ) ) {
return;
}
element = document.getElementById( id );
if ( element ) {
if ( ! ( /^(?:a|select|input|button|textarea)$/i.test( element.tagName ) ) ) {
element.tabIndex = -1;
}
element.focus();
}
}, false );
}
})();
/**
* Handles toggling the navigation menu for small screens and enables TAB key
* navigation support for dropdown menus.
*/
( function() {
var container, button, menu, links, subMenus, i, len;
container = document.getElementById( 'site-navigation' );
if ( ! container ) {
return;
}
button = container.getElementsByTagName( 'button' )[0];
if ( 'undefined' === typeof button ) {
return;
}
menu = container.getElementsByTagName( 'ul' )[0];
// Hide menu toggle button if menu is empty and return early.
if ( 'undefined' === typeof menu ) {
button.style.display = 'none';
return;
}
menu.setAttribute( 'aria-expanded', 'false' );
if ( -1 === menu.className.indexOf( 'nav-menu' ) ) {
menu.className += ' nav-menu';
}
button.onclick = function() {
if ( -1 !== container.className.indexOf( 'toggled' ) ) {
container.className = container.className.replace( ' toggled', '' );
button.setAttribute( 'aria-expanded', 'false' );
menu.setAttribute( 'aria-expanded', 'false' );
} else {
container.className += ' toggled';
button.setAttribute( 'aria-expanded', 'true' );
menu.setAttribute( 'aria-expanded', 'true' );
}
};
// Get all the link elements within the menu.
links = menu.getElementsByTagName( 'a' );
subMenus = menu.getElementsByTagName( 'ul' );
// Set menu items with submenus to aria-haspopup="true".
for ( i = 0, len = subMenus.length; i < len; i++ ) {
subMenus[i].parentNode.setAttribute( 'aria-haspopup', 'true' );
}
// Each time a menu link is focused or blurred, toggle focus.
for ( i = 0, len = links.length; i < len; i++ ) {
links[i].addEventListener( 'focus', toggleFocus, true );
links[i].addEventListener( 'blur', toggleFocus, true );
}
/**
* Sets or removes .focus class on an element.
*/
function toggleFocus() {
var self = this;
// Move up through the ancestors of the current link until we hit .nav-menu.
while ( -1 === self.className.indexOf( 'nav-menu' ) ) {
// On li elements toggle the class .focus.
if ( 'li' === self.tagName.toLowerCase() ) {
if ( -1 !== self.className.indexOf( 'focus' ) ) {
self.className = self.className.replace( ' focus', '' );
} else {
self.className += ' focus';
}
}
self = self.parentElement;
}
}
/**
* Toggles `focus` class to allow submenu access on tablets.
*/
( function( container ) {
var touchStartFn, i,
parentLink = container.querySelectorAll( '.menu-item-has-children > a, .page_item_has_children > a' );
if ( 'ontouchstart' in window ) {
touchStartFn = function( e ) {
var menuItem = this.parentNode, i;
if ( ! menuItem.classList.contains( 'focus' ) ) {
e.preventDefault();
for ( i = 0; i < menuItem.parentNode.children.length; ++i ) {
if ( menuItem === menuItem.parentNode.children[i] ) {
continue;
}
menuItem.parentNode.children[i].classList.remove( 'focus' );
}
menuItem.classList.add( 'focus' );
} else {
menuItem.classList.remove( 'focus' );
}
};
for ( i = 0; i < parentLink.length; ++i ) {
parentLink[i].addEventListener( 'touchstart', touchStartFn, false );
}
}
}( container ) );
} )();
/**
*
* Custom scripts for custom functionality
*/
( function( $ ) {
$( document ).ready( function() {
// Show or hide scroll to top
$( window ).scroll(function() {
if ( $( this ).scrollTop() > 100 ) {
$( '.scroll-to-top' ).fadeIn();
} else {
$( '.scroll-to-top' ).fadeOut();
}
} );
// Click event to scroll to top
$( '.scroll-to-top' ).click( function() {
$( 'html, body' ).animate( { scrollTop: 0 }, 800 );
return false;
} );
// Show or hide search in nav menu
$( '#site-navigation .menu-item.search-menu span' ).click( function( event ) {
$( '#site-navigation .menu-item .search-form' ).toggle();
event.preventDefault();
event.stopPropagation();
return false;
} );
// Make nav menu fixed
if ( $( '.header-nav-wrapper.m-fix' ).length && window.innerWidth > 910 ) {
var nav = $( '.header-nav-wrapper' );
var header_height = $( '#wpadminbar' ).outerHeight() + $( '#masthead > .logo-wrapper' ).outerHeight() + $( '#masthead > .header-img-wrapper' ).outerHeight();
header_height = header_height + $( '#masthead .header-top-nav' ).outerHeight() + $( '#masthead > .header-text-wrapper' ).outerHeight();
$( window ).resize( function() {
if ( window.innerWidth < 910 ) {
nav.removeClass( 'fixed' );
}
header_height = $( '#wpadminbar' ).outerHeight() + $( '#masthead > .logo-wrapper' ).outerHeight() + $( '#masthead > .header-img-wrapper' ).outerHeight();
header_height = header_height + $( '#masthead .header-top-nav' ).outerHeight() + $( '#masthead > .header-text-wrapper' ).outerHeight();
} );
if ( $(this).scrollTop() > header_height ) {
nav.addClass( 'fixed' );
} else {
nav.removeClass( 'fixed' );
}
$( window ).scroll( function () {
if ( window.innerWidth > 910 && $( this ).scrollTop() > header_height ) {
nav.addClass( 'fixed' );
} else {
nav.removeClass( 'fixed' );
}
} );
}
// Show or hide dropdown in nav menu
$( '#site-navigation li.dropdown .dropdown-toggle' ).on( 'click', function ( event ) {
event.preventDefault();
event.stopPropagation();
$( this ).parent( 'li.dropdown' ).toggleClass( 'open' );
} );
} );
} )( jQuery );