Skip to content

Commit

Permalink
feat: Search
Browse files Browse the repository at this point in the history
  • Loading branch information
Jazee6 committed Jul 30, 2024
1 parent cff60c9 commit 6670fe9
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 28 deletions.
3 changes: 2 additions & 1 deletion README.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,15 @@ pnpm new

- [x] status badge
- [x] twikoo_visitors
- [x] Search
- [ ] View Transition
- [ ] Search
- [ ] Tags
- [ ] Next/Prev
- [ ] hero image
- [ ] AI summary
- [ ] Top
- [ ] lazy load image and CLS
- [ ] touch optimize
- [ ] ...

## Who is using Astro Blur?
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,15 @@ pnpm new

- [x] status badge
- [x] twikoo_visitors
- [x] 搜索
- [ ] View Transition
- [ ] 搜索
- [ ] 标签
- [ ] Next/Prev
- [ ] hero image
- [ ] AI摘要
- [ ] 置顶
- [ ] lazy load image and CLS
- [ ] touch optimize
- [ ] ...

## 谁在使用 Astro Blur?
Expand Down
14 changes: 14 additions & 0 deletions src/components/Header.astro
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,20 @@ import {Icon} from 'astro-icon/components'
searchContainer.classList.toggle("hidden")
searchContainer.querySelector("input").focus()
})

document.documentElement.addEventListener("keydown", (e) => {
if (e.key === "/" && document.activeElement.tagName !== "INPUT") {
const searchContainer = document.querySelector("#search-container")
searchContainer.classList.remove("hidden")
setTimeout(() => {
searchContainer.querySelector("input").focus()
})
}
if (e.key === "Escape") {
const searchContainer = document.querySelector("#search-container")
searchContainer.classList.add("hidden")
}
})
</script>

<script is:inline>
Expand Down
35 changes: 29 additions & 6 deletions src/components/Search.astro
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,50 @@
---
<div id="search-container" class="fixed hidden inset-0 z-10 backdrop-blur animate-in fade-in">
<div class="absolute top-16 left-1/2 -translate-x-1/2 container-global w-full">
<div class="absolute top-16 left-1/2 -translate-x-1/2 container-global w-full h-full">
<form class="w-3/4 mx-auto max-md:w-full animate-in slide-in-from-top">
<label>
<input name="search" placeholder="Search...(developing...)"
<input name="search" autocomplete="off" placeholder="Search..."
class="w-full outline-0 bg-base transition-all rounded-xl h-16 p-4 shadow-xl text-xl"/>
</label>
</form>
<div>
<div id="search-results" class="w-3/4 mx-auto max-md:w-full h-full overflow-y-auto rounded-xl mt-1">

</div>
</div>
</div>

<script is:inline>
const searchContainer = document.querySelector("#search-container");
searchContainer.addEventListener("click", (e) => {
if (e.target === searchContainer) {
const searchInput = searchContainer?.querySelector("input")
searchContainer?.addEventListener("click", (e) => {
if (e.target !== searchInput) {
searchContainer.classList.add("hidden")
}
})
searchContainer.querySelector("form").addEventListener("submit", (e) => {
searchContainer?.querySelector("form")?.addEventListener("submit", (e) => {
e.preventDefault()
})
searchInput.addEventListener("input", async e => {
if (e.target.dataset.loaded !== 'true') {
e.target.dataset.loaded = 'true'
window.pagefind = await import("/pagefind/pagefind.js");
}

const input = e.target.value.trim()
if (input.length) {
const search = await window.pagefind.search(input)
const searchResults = document.querySelector("#search-results")
searchResults.innerHTML = ""
for (const result of search.results) {
const data = await result.data()
searchResults.innerHTML += `
<a href="${data.url}" class="block px-4 py-2 rounded-xl bg-base/80 blur-global animate-in fade-in mt-1 first:mt-0 hover:bg-base transition-all">
<h2 class="text-xl font-bold line-clamp-1">${data.meta.title}</h2>
<p class="line-clamp-3">${data.excerpt}</p>
</a>
`
}
}
})
</script>
4 changes: 2 additions & 2 deletions src/pages/[...page].astro
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ const {page} = Astro.props
<h2 class="text-xl font-bold line-clamp-1">
{post.data.title}
</h2>
<div class="line-clamp-2">
<p class="line-clamp-2">
{post.data.description}
</div>
</p>
<div class="mt-auto flex">
<time class="ml-auto" datetime={post.data.pubDate.toISOString()}>
{
Expand Down
24 changes: 12 additions & 12 deletions src/styles/global.css
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,21 @@
}

.light {
--color-base: theme('colors.white');
--color-back: theme('colors.neutral.100');
--color-primary: theme('colors.neutral.950');
--color-secondary: theme('colors.neutral.500');
--color-hover: theme('colors.neutral.200');
--color-active: theme('colors.neutral.300');
--color-base: 255 255 255;
--color-back: 245 245 245;
--color-primary: 10 10 10;
--color-secondary: 115 115 115;
--color-hover: 229 229 229;
--color-active: 212 212 212;
}

.dark {
--color-base: theme('colors.neutral.800');
--color-back: theme('colors.neutral.900');
--color-primary: theme('colors.neutral.50');
--color-secondary: theme('colors.neutral.500');
--color-hover: theme('colors.neutral.600');
--color-active: theme('colors.neutral.700');
--color-base: 38 38 38;
--color-back: 23 23 23;
--color-primary: 250 250 250;
--color-secondary: 115 115 115;
--color-hover: 82 82 82;
--color-active: 64 64 64;
}
}

Expand Down
12 changes: 6 additions & 6 deletions tailwind.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ export default {
theme: {
extend: {
colors: {
base: 'var(--color-base)',
back: 'var(--color-back)',
primary: 'var(--color-primary)',
secondary: 'var(--color-secondary)',
hover: 'var(--color-hover)',
active: 'var(--color-active)',
base: 'rgb(var(--color-base))',
back: 'rgb(var(--color-back))',
primary: 'rgb(var(--color-primary))',
secondary: 'rgb(var(--color-secondary))',
hover: 'rgb(var(--color-hover))',
active: 'rgb(var(--color-active))',
},
},
},
Expand Down

0 comments on commit 6670fe9

Please sign in to comment.