What it will now do: - Lint the php files against relevant PHP versions. - Lint the js files once - the result won't change across PHP versions. - Check against WPCS once - the result won't change across PHP versions. What I have changed: - Added linting against PHP 7 and HHVM, with HHVM being allowed to fail. - Added js linting and style check per example from Twenty Sixteen. - Moved to the faster container based environment for running travis. - Script will no longer pull in PHPCS, WPCS and the JS linters in every build. Now they will only be pulled in when needed. - Limited the clone depth for quicker cloning of external repositories. - Removed the pulling in of WP and running builds against different WP versions as this wasn't used at all in the actual test scripts.
81 lines
2.2 KiB
JavaScript
81 lines
2.2 KiB
JavaScript
/**
|
|
* File navigation.js.
|
|
*
|
|
* Handles toggling the navigation menu for small screens and enables tab
|
|
* 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;
|
|
}
|
|
}
|
|
} )();
|