@wordpress/interactivity-router
Version:
Package that exposes state and actions from the `core/router` store, part of the Interactivity API.
39 lines (37 loc) • 1.45 kB
JavaScript
/* wp:polyfill */
// Check if the link is valid for client-side navigation.
const isValidLink = ref => ref && ref instanceof window.HTMLAnchorElement && ref.href && (!ref.target || ref.target === '_self') && ref.origin === window.location.origin && !ref.pathname.startsWith('/wp-admin') && !ref.pathname.startsWith('/wp-login.php') && !ref.getAttribute('href').startsWith('#') && !new URL(ref.href).searchParams.has('_wpnonce');
// Check if the event is valid for client-side navigation.
const isValidEvent = event => event && event.button === 0 &&
// Left clicks only.
!event.metaKey &&
// Open in new tab (Mac).
!event.ctrlKey &&
// Open in new tab (Windows).
!event.altKey &&
// Download.
!event.shiftKey && !event.defaultPrevented;
// Navigate on click.
document.addEventListener('click', async event => {
const ref = event.target.closest('a');
if (isValidLink(ref) && isValidEvent(event)) {
event.preventDefault();
const {
actions
} = await import('@wordpress/interactivity-router');
actions.navigate(ref.href);
}
});
// Prefetch on hover.
document.addEventListener('mouseenter', async event => {
if (event.target?.nodeName === 'A') {
const ref = event.target.closest('a');
if (isValidLink(ref) && isValidEvent(event)) {
const {
actions
} = await import('@wordpress/interactivity-router');
actions.prefetch(ref.href);
}
}
}, true);
//# sourceMappingURL=full-page.js.map