From c9c51e612fa017cf5ce6f27460e5c3b730b772ed Mon Sep 17 00:00:00 2001 From: Puru Vijay Date: Wed, 15 Feb 2023 22:59:58 +0530 Subject: [PATCH] Finish search --- sites/svelte.dev/src/lib/search/Search.svelte | 2 ++ .../src/lib/search/SearchBox.svelte | 6 ++++- .../src/lib/search/SearchResultList.svelte | 4 ++- sites/svelte.dev/src/lib/search/content.js | 2 +- sites/svelte.dev/src/lib/workers/search.js | 26 +++++++++++++++++++ sites/svelte.dev/src/routes/+layout.svelte | 6 +++++ .../svelte.dev/src/routes/search/+page.svelte | 4 +-- 7 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 sites/svelte.dev/src/lib/workers/search.js diff --git a/sites/svelte.dev/src/lib/search/Search.svelte b/sites/svelte.dev/src/lib/search/Search.svelte index b501a6f441..efd2cb89c3 100644 --- a/sites/svelte.dev/src/lib/search/Search.svelte +++ b/sites/svelte.dev/src/lib/search/Search.svelte @@ -3,6 +3,8 @@ import { searching, query } from './stores.js'; export let q = ''; + + $: console.log($searching);
diff --git a/sites/svelte.dev/src/lib/search/SearchBox.svelte b/sites/svelte.dev/src/lib/search/SearchBox.svelte index 38abb3f6b1..3f37c6917e 100644 --- a/sites/svelte.dev/src/lib/search/SearchBox.svelte +++ b/sites/svelte.dev/src/lib/search/SearchBox.svelte @@ -158,7 +158,11 @@
{#if search?.query} -
($searching = false)}> +
($searching = false)} + on:keydown={(e) => e.key === ' ' && ($searching = false)} + > /g, '>'); + return text.replace(//g, '>').replaceAll('`', ''); } /** @@ -19,6 +19,8 @@ * @param {string} query */ function excerpt(content, query) { + if (content === null) return ''; + const index = content.toLowerCase().indexOf(query.toLowerCase()); if (index === -1) { return escape(content.slice(0, 100)); diff --git a/sites/svelte.dev/src/lib/search/content.js b/sites/svelte.dev/src/lib/search/content.js index a45c2f4bc1..d9c229588b 100644 --- a/sites/svelte.dev/src/lib/search/content.js +++ b/sites/svelte.dev/src/lib/search/content.js @@ -42,7 +42,7 @@ export function content() { const { body, metadata } = extract_frontmatter(markdown); - const sections = body.trim().split(/^## /m); + const sections = body.trim().split(/^### /m); const intro = sections.shift().trim(); const rank = +metadata.rank || undefined; diff --git a/sites/svelte.dev/src/lib/workers/search.js b/sites/svelte.dev/src/lib/workers/search.js new file mode 100644 index 0000000000..2cb5227745 --- /dev/null +++ b/sites/svelte.dev/src/lib/workers/search.js @@ -0,0 +1,26 @@ +import { init, search, lookup } from '../search/search.js'; + +addEventListener('message', async (event) => { + const { type, payload } = event.data; + + if (type === 'init') { + const res = await fetch(`${payload.origin}/content.json`); + const { blocks } = await res.json(); + init(blocks); + + postMessage({ type: 'ready' }); + } + + if (type === 'query') { + const query = payload; + const results = search(query); + + postMessage({ type: 'results', payload: { results, query } }); + } + + if (type === 'recents') { + const results = payload.map(lookup).filter(Boolean); + + postMessage({ type: 'recents', payload: results }); + } +}); diff --git a/sites/svelte.dev/src/routes/+layout.svelte b/sites/svelte.dev/src/routes/+layout.svelte index f558fac931..c044d53184 100644 --- a/sites/svelte.dev/src/routes/+layout.svelte +++ b/sites/svelte.dev/src/routes/+layout.svelte @@ -1,7 +1,9 @@ @@ -61,6 +63,10 @@ +{#if browser} + +{/if} +