/* global Cookies */
jQuery( function ( $ ) {
// Orderby
$( '.woocommerce-ordering' ).on( 'change', 'select.orderby', function () {
$( this ).closest( 'form' ).trigger( 'submit' );
} );
// Target quantity inputs on product pages
$( 'input.qty:not(.product-quantity input.qty)' ).each( function () {
var min = parseFloat( $( this ).attr( 'min' ) );
if ( min >= 0 && parseFloat( $( this ).val() ) < min ) {
$( this ).val( min );
}
} );
var noticeID = $( '.woocommerce-store-notice' ).data( 'noticeId' ) || '',
cookieName = 'store_notice' + noticeID;
// Check the value of that cookie and show/hide the notice accordingly
if ( 'hidden' === Cookies.get( cookieName ) ) {
$( '.woocommerce-store-notice' ).hide();
} else {
$( '.woocommerce-store-notice' ).show();
}
// Set a cookie and hide the store notice when the dismiss button is clicked
$( '.woocommerce-store-notice__dismiss-link' ).on(
'click',
function ( event ) {
Cookies.set( cookieName, 'hidden', { path: '/' } );
$( '.woocommerce-store-notice' ).hide();
event.preventDefault();
}
);
// Make form field descriptions toggle on focus.
if ( $( '.woocommerce-input-wrapper span.description' ).length ) {
$( document.body ).on( 'click', function () {
$( '.woocommerce-input-wrapper span.description:visible' )
.prop( 'aria-hidden', true )
.slideUp( 250 );
} );
}
$( '.woocommerce-input-wrapper' ).on( 'click', function ( event ) {
event.stopPropagation();
} );
$( '.woocommerce-input-wrapper :input' )
.on( 'keydown', function ( event ) {
var input = $( this ),
parent = input.parent(),
description = parent.find( 'span.description' );
if (
27 === event.which &&
description.length &&
description.is( ':visible' )
) {
description.prop( 'aria-hidden', true ).slideUp( 250 );
event.preventDefault();
return false;
}
} )
.on( 'click focus', function () {
var input = $( this ),
parent = input.parent(),
description = parent.find( 'span.description' );
parent.addClass( 'currentTarget' );
$(
'.woocommerce-input-wrapper:not(.currentTarget) span.description:visible'
)
.prop( 'aria-hidden', true )
.slideUp( 250 );
if ( description.length && description.is( ':hidden' ) ) {
description.prop( 'aria-hidden', false ).slideDown( 250 );
}
parent.removeClass( 'currentTarget' );
} );
// Common scroll to element code.
$.scroll_to_notices = function ( scrollElement ) {
if ( scrollElement.length ) {
$( 'html, body' ).animate(
{
scrollTop: scrollElement.offset().top - 100,
},
1000
);
}
};
// Show password visibility hover icon on woocommerce forms
$( '.woocommerce form .woocommerce-Input[type="password"]' ).wrap(
''
);
// Add 'password-input' class to the password wrapper in checkout page.
$( '.woocommerce form input' )
.filter( ':password' )
.parent( 'span' )
.addClass( 'password-input' );
$( '.password-input' ).append(
''
);
$( '.show-password-input' ).on( 'click', function () {
if ( $( this ).hasClass( 'display-password' ) ) {
$( this ).removeClass( 'display-password' );
} else {
$( this ).addClass( 'display-password' );
}
if ( $( this ).hasClass( 'display-password' ) ) {
$( this )
.siblings( [ 'input[type="password"]' ] )
.prop( 'type', 'text' );
} else {
$( this )
.siblings( 'input[type="text"]' )
.prop( 'type', 'password' );
}
} );
$( 'a.coming-soon-footer-banner-dismiss' ).on( 'click', function ( e ) {
var target = $( e.target );
$.ajax( {
type: 'post',
url: target.data( 'rest-url' ),
data: {
woocommerce_meta: {
coming_soon_banner_dismissed: 'yes',
},
},
beforeSend: function ( xhr ) {
xhr.setRequestHeader(
'X-WP-Nonce',
target.data( 'rest-nonce' )
);
},
complete: function () {
$( '#coming-soon-footer-banner' ).hide();
},
} );
} );
});
/**
* Focus on the first notice element on the page.
*
* Populated live regions don't always are announced by screen readers.
* This function focus on the first notice message with the role="alert"
* attribute to make sure it's announced.
*/
function focus_populate_live_region() {
var noticeClasses = [ 'woocommerce-message', 'woocommerce-error', 'wc-block-components-notice-banner' ];
var noticeSelectors = noticeClasses.map( function( className ) {
return '.' + className + '[role="alert"]';
} ).join( ', ' );
var noticeElements = document.querySelectorAll( noticeSelectors );
if ( noticeElements.length === 0 ) {
return;
}
var firstNotice = noticeElements[0];
firstNotice.setAttribute( 'tabindex', '-1' );
// Wait for the element to get the tabindex attribute so it can be focused.
var delayFocusNoticeId = setTimeout( function() {
firstNotice.focus();
clearTimeout( delayFocusNoticeId );
}, 500 );
}
/**
* Refresh the sorted by live region.
*/
function refresh_sorted_by_live_region () {
var sorted_by_live_region = document.querySelector( '.woocommerce-result-count[data-is-sorted-by="true"]' );
if ( sorted_by_live_region ) {
var text = sorted_by_live_region.innerHTML;
var sorted_by_live_region_id = setTimeout( function() {
sorted_by_live_region.innerHTML = '';
sorted_by_live_region.innerHTML = text;
clearTimeout( sorted_by_live_region_id );
}, 1000 );
}
}
function on_document_ready() {
focus_populate_live_region();
refresh_sorted_by_live_region();
}
document.addEventListener( 'DOMContentLoaded' , on_document_ready );