|
|
|
import * as Cookies from 'js-cookie';
|
|
|
|
|
|
|
|
export default {
|
|
|
|
init() {
|
|
|
|
// JavaScript to be fired on all pages
|
|
|
|
jQuery( $ => {
|
|
|
|
$( 'body' )
|
|
|
|
.removeClass( 'no-js' )
|
|
|
|
.addClass( 'js' );
|
|
|
|
$( document ).ready( function () {
|
|
|
|
// Fontsize handler
|
|
|
|
if ( Cookies.get( 'a11y-larger-fontsize' ) === '1' ) {
|
|
|
|
$( 'html' ).addClass( 'fontsize' );
|
|
|
|
$( '#is_normal_fontsize' )
|
|
|
|
.attr( 'id', 'is_large_fontsize' )
|
|
|
|
.attr( 'aria-checked', true )
|
|
|
|
.addClass( 'active' )
|
|
|
|
.text( PB_A11y.decrease_label )
|
|
|
|
.attr( 'title', PB_A11y.decrease_label );
|
|
|
|
}
|
|
|
|
|
|
|
|
$( '.toggle-fontsize' ).on( 'click', function () {
|
|
|
|
if ( $( this ).attr( 'id' ) === 'is_normal_fontsize' ) {
|
|
|
|
$( 'html' ).addClass( 'fontsize' );
|
|
|
|
$( this )
|
|
|
|
.attr( 'id', 'is_large_fontsize' )
|
|
|
|
.attr( 'aria-checked', true )
|
|
|
|
.addClass( 'active' )
|
|
|
|
.text( PB_A11y.decrease_label )
|
|
|
|
.attr( 'title', PB_A11y.decrease_label );
|
|
|
|
Cookies.set( 'a11y-larger-fontsize', '1', {
|
|
|
|
expires: 365,
|
|
|
|
path: '',
|
|
|
|
} );
|
|
|
|
return false;
|
|
|
|
} else {
|
|
|
|
$( 'html' ).removeClass( 'fontsize' );
|
|
|
|
$( this )
|
|
|
|
.attr( 'id', 'is_normal_fontsize' )
|
|
|
|
.removeAttr( 'aria-checked' )
|
|
|
|
.removeClass( 'active' )
|
|
|
|
.text( PB_A11y.increase_label )
|
|
|
|
.attr( 'title', PB_A11y.increase_label );
|
|
|
|
Cookies.set( 'a11y-larger-fontsize', '0', {
|
|
|
|
expires: 365,
|
|
|
|
path: '',
|
|
|
|
} );
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
|
|
|
|
// Sets a -1 tabindex to ALL sections for .focus()-ing
|
|
|
|
let sections = document.getElementsByTagName( 'section' );
|
|
|
|
for ( let i = 0, max = sections.length; i < max; i++ ) {
|
|
|
|
sections[i].setAttribute( 'tabindex', -1 );
|
|
|
|
sections[i].className += ' focusable';
|
|
|
|
}
|
|
|
|
|
|
|
|
// If there is a '#' in the URL (someone linking directly to a page with an anchor), go directly to that area and focus is
|
|
|
|
// Thanks to WebAIM.org for this idea
|
|
|
|
if ( document.location.hash && document.location.hash !== '#' ) {
|
|
|
|
let anchorUponArrival = document.location.hash;
|
|
|
|
setTimeout( function () {
|
|
|
|
$( anchorUponArrival ).scrollTo( { duration: 1500 } );
|
|
|
|
$( anchorUponArrival ).focus();
|
|
|
|
}, 100 );
|
|
|
|
}
|
|
|
|
} );
|
|
|
|
$( '.js-header-nav-toggle' ).click( event => {
|
|
|
|
event.preventDefault();
|
|
|
|
$( '.header__nav' ).toggleClass( 'header__nav--active' );
|
|
|
|
} );
|
|
|
|
} );
|
|
|
|
// Props to Dave Rupert: https://daverupert.com/2017/11/happier-html5-forms/
|
|
|
|
const inputs = document.querySelectorAll( 'input, textarea' );
|
|
|
|
|
|
|
|
inputs.forEach( input => {
|
|
|
|
input.addEventListener(
|
|
|
|
'invalid',
|
|
|
|
event => {
|
|
|
|
input.classList.add( 'error' );
|
|
|
|
},
|
|
|
|
false
|
|
|
|
);
|
|
|
|
input.addEventListener( 'focus', function () {
|
|
|
|
input.classList.remove( 'error' );
|
|
|
|
} );
|
|
|
|
input.addEventListener( 'blur', function () {
|
|
|
|
input.checkValidity();
|
|
|
|
} );
|
|
|
|
} );
|
|
|
|
},
|
|
|
|
finalize() {
|
|
|
|
// JavaScript to be fired on all pages, after page specific JS is fired
|
|
|
|
},
|
|
|
|
};
|