Pristine upstream, unpacked from the official wordpress.org tarball. https://wordpress.org/wordpress-7.1.1.tar.gz sha1 2a9d68474e8703aa3a66f80427b325e0941b6a1e (published by wordpress.org) sha256 3996fee13448ef12e07e9f0c77db2f655ffa1b7cde71c80a4965d3bf1fb956b3 This branch carries nothing but upstream releases, one commit each, and is never edited. It is the other side of the git-subtree merge that brings security releases into SiriusPress/wordpress/ — see SiriusPress/docs/upstream-merges.md.
63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
// packages/block-library/build-module/search/view.mjs
|
|
import {
|
|
store,
|
|
getContext,
|
|
getElement,
|
|
withSyncEvent
|
|
} from "@wordpress/interactivity";
|
|
var { actions } = store(
|
|
"core/search",
|
|
{
|
|
state: {
|
|
get ariaLabel() {
|
|
const {
|
|
isSearchInputVisible,
|
|
ariaLabelCollapsed,
|
|
ariaLabelExpanded
|
|
} = getContext();
|
|
return isSearchInputVisible ? ariaLabelExpanded : ariaLabelCollapsed;
|
|
},
|
|
get ariaControls() {
|
|
const { isSearchInputVisible, inputId } = getContext();
|
|
return isSearchInputVisible ? null : inputId;
|
|
},
|
|
get type() {
|
|
const { isSearchInputVisible } = getContext();
|
|
return isSearchInputVisible ? "submit" : "button";
|
|
},
|
|
get tabindex() {
|
|
const { isSearchInputVisible } = getContext();
|
|
return isSearchInputVisible ? "0" : "-1";
|
|
}
|
|
},
|
|
actions: {
|
|
openSearchInput: withSyncEvent((event) => {
|
|
const ctx = getContext();
|
|
const { ref } = getElement();
|
|
if (!ctx.isSearchInputVisible) {
|
|
event.preventDefault();
|
|
ctx.isSearchInputVisible = true;
|
|
ref.parentElement.querySelector("input").focus();
|
|
}
|
|
}),
|
|
closeSearchInput() {
|
|
const ctx = getContext();
|
|
ctx.isSearchInputVisible = false;
|
|
},
|
|
handleSearchKeydown: withSyncEvent((event) => {
|
|
const { ref } = getElement();
|
|
if (event?.key === "Escape") {
|
|
actions.closeSearchInput();
|
|
ref.querySelector("button").focus();
|
|
}
|
|
}),
|
|
handleSearchFocusout: withSyncEvent((event) => {
|
|
const { ref } = getElement();
|
|
if (!ref.contains(event.relatedTarget) && event.target !== window.document.activeElement) {
|
|
actions.closeSearchInput();
|
|
}
|
|
})
|
|
}
|
|
},
|
|
{ lock: true }
|
|
);
|