diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-14 02:41:24 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-07-14 02:44:46 +0300 |
| commit | ca7ae086e8d6e80f6efc969d541b390328a6d143 (patch) | |
| tree | 85605d0551af1dd2a25dce633fd83a06281598d7 /website/src/components | |
| parent | 2e5da968ea3fb7105c56f7674caf822de41ec176 (diff) | |
fix(website): scope docs search by locale and channel
Diffstat (limited to 'website/src/components')
| -rw-r--r-- | website/src/components/Head.astro | 9 | ||||
| -rw-r--r-- | website/src/components/Search.astro | 52 |
2 files changed, 61 insertions, 0 deletions
diff --git a/website/src/components/Head.astro b/website/src/components/Head.astro new file mode 100644 index 00000000..b1214cb1 --- /dev/null +++ b/website/src/components/Head.astro @@ -0,0 +1,9 @@ +--- +import { docsChannel } from '../docs-path'; + +const { head } = Astro.locals.starlightRoute; +const channel = docsChannel(Astro.url.pathname); +--- + +{head.map(({ tag: Tag, attrs, content }) => <Tag {...attrs} set:html={content} />)} +<meta data-pagefind-filter="channel[content]" content={channel} /> diff --git a/website/src/components/Search.astro b/website/src/components/Search.astro new file mode 100644 index 00000000..2a31ea24 --- /dev/null +++ b/website/src/components/Search.astro @@ -0,0 +1,52 @@ +--- +import StarlightSearch from '@astrojs/starlight/components/Search.astro'; +import { docsChannel } from '../docs-path'; + +const channel = docsChannel(Astro.url.pathname); +--- + +<channel-search data-channel={channel}> + <StarlightSearch /> +</channel-search> + +<script> + class ChannelSearch extends HTMLElement { + observer?: MutationObserver; + + connectedCallback() { + const channel = this.dataset.channel; + if (!channel) return; + + const selectChannel = () => { + const checkbox = this.querySelector<HTMLInputElement>( + `.pagefind-ui__filter-checkbox[name="channel"][value="${channel}"]`, + ); + if (!checkbox) return false; + if (!checkbox.checked) checkbox.click(); + this.observer?.disconnect(); + return true; + }; + + if (selectChannel()) return; + // Starlight does not expose its PagefindUI instance, so wait for Pagefind's filter control. + this.observer = new MutationObserver(selectChannel); + this.observer.observe(this, { childList: true, subtree: true }); + } + + disconnectedCallback() { + this.observer?.disconnect(); + } + } + + customElements.define('channel-search', ChannelSearch); +</script> + +<style> + channel-search { + display: contents; + } + + channel-search :global(.pagefind-ui__filter-panel) { + display: none; + } +</style> |
