Files
Roman Pyrih acb036dbd9 first commit
2026-05-21 15:33:11 +02:00

54 lines
1.7 KiB
JavaScript

// packages/block-library/build-module/query/view.mjs
import {
store,
getContext,
getElement,
withSyncEvent
} from "@wordpress/interactivity";
var isValidLink = (ref) => ref && ref instanceof window.HTMLAnchorElement && ref.href && (!ref.target || ref.target === "_self") && ref.origin === window.location.origin;
var isValidEvent = (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;
store(
"core/query",
{
actions: {
navigate: withSyncEvent(function* (event) {
const ctx = getContext();
const { ref } = getElement();
const queryRef = ref.closest(
".wp-block-query[data-wp-router-region]"
);
if (isValidLink(ref) && isValidEvent(event)) {
event.preventDefault();
const { actions } = yield import("@wordpress/interactivity-router");
yield actions.navigate(ref.href);
ctx.url = ref.href;
const firstAnchor = `.wp-block-post-template a[href]`;
queryRef.querySelector(firstAnchor)?.focus();
}
}),
*prefetch() {
const { ref } = getElement();
if (isValidLink(ref)) {
const { actions } = yield import("@wordpress/interactivity-router");
yield actions.prefetch(ref.href);
}
}
},
callbacks: {
*prefetch() {
const { url } = getContext();
const { ref } = getElement();
if (url && isValidLink(ref)) {
const { actions } = yield import("@wordpress/interactivity-router");
yield actions.prefetch(ref.href);
}
}
}
},
{ lock: true }
);