From 910568bc886bc2167c7c136f0ee003163e70af82 Mon Sep 17 00:00:00 2001 From: lonkaars Date: Thu, 1 Apr 2021 13:33:51 +0200 Subject: posts fetched from server --- components/tag.tsx | 2 +- pages/search.tsx | 52 ++++++++++++++++++++++++++++++++++++++++++++-------- styles/layout.css | 2 +- styles/search.css | 34 ++++++++++++++++++++++++++++++++++ styles/tags.css | 12 +++++++----- 5 files changed, 87 insertions(+), 15 deletions(-) diff --git a/components/tag.tsx b/components/tag.tsx index 6cacb89..48c75ce 100644 --- a/components/tag.tsx +++ b/components/tag.tsx @@ -12,7 +12,7 @@ export default function Tags(props: { export function Tag(props: { name: string; }) { - return char.charCodeAt(0)) diff --git a/pages/search.tsx b/pages/search.tsx index 11cfe2c..8053d4a 100644 --- a/pages/search.tsx +++ b/pages/search.tsx @@ -1,6 +1,9 @@ +import { useState, useEffect } from 'react'; + import Navbar from '../components/navbar'; import { FormEvent } from 'react'; import { ArticleMeta } from './post/[id]'; +import Tags from '../components/tag' import SearchOutlinedIcon from '@material-ui/icons/SearchOutlined'; @@ -16,13 +19,47 @@ function SearchBar(props: { } -export default function SearchPage(props: { - posts: Array<{ - props: { - meta: ArticleMeta +interface Post { + title: string + subtitle: string + author: string + date: string + urlname: string + tags: Array +} + +interface PostsInfo { + valid_tags: Array + posts: Array +} + +function Post(props: { post: Post }) { + return + {props.post.title} + {props.post.subtitle &&

{props.post.subtitle}

} +

Written by {props.post.author} on {new Date(props.post.date).toLocaleString("en-us", { + month: "long", day: "numeric" + })}

+ +
; +} + +function Posts(props: { posts: Array }) { + return
+ { + props.posts.map(post => ) } - }> -}) { +
; +} + +export default function SearchPage() { + var [posts, setPosts] = useState({ posts: [], valid_tags: [] }); + + useEffect(() => {(async () => { + var posts = await fetch("/posts.json"); + setPosts(await posts.json()); + })()}, []); + return
@@ -37,10 +74,9 @@ export default function SearchPage(props: { ) => { event?.preventDefault(); }}/> +
} -// grep -Por "^\[meta\]:\s+\s+\(\K(.+)(?=\)$)" posts - diff --git a/styles/layout.css b/styles/layout.css index f648634..c4c3694 100644 --- a/styles/layout.css +++ b/styles/layout.css @@ -30,7 +30,7 @@ position: sticky; top: var(--page-margins); bottom: var(--page-margins); - height: calc(100vh - 2 * var(--page-margins)); + max-height: calc(100vh - 2 * var(--page-margins)); overflow-y: scroll; diff --git a/styles/search.css b/styles/search.css index 5a63500..af6d3a4 100644 --- a/styles/search.css +++ b/styles/search.css @@ -2,6 +2,7 @@ background-color: var(--heliotrope-gray); border-radius: 8px; padding: 12px; + margin-bottom: 24px; } .searchBar .input { @@ -36,3 +37,36 @@ color: var(--heliotrope-gray) !important; } +.searchResults .post::after { + display: none; +} + +.searchResults .post { + display: block; + border-radius: 8px; + + padding: 8px; + margin-bottom: 12px; + background-color: var(--oxford-blue); + + color: var(--fg); +} + +.searchResults .post .title, +.searchResults .post .subtitle, +.searchResults .post .authordate { + margin: 4px 0; +} + +.searchResults .post .authordate { + font-style: italic; + opacity: .75; +} + +@media (prefers-color-scheme: light) { + .searchBar { background-color: var(--fg); } + .searchBar .button { color: var(--fg) !important; } + + .searchResults .post { background-color: var(--heliotrope-gray); } +} + diff --git a/styles/tags.css b/styles/tags.css index 95ce012..5e6af11 100644 --- a/styles/tags.css +++ b/styles/tags.css @@ -1,8 +1,8 @@ -.titleWrapper .tags { +.tags { margin-top: 12px; } -.titleWrapper .tags .tag { +.tags .tag { --tag-color: hsl(var(--tag-hue), 75%, 70%); padding: 4px 12px; @@ -18,12 +18,14 @@ } @media (prefers-color-scheme: light) { - .titleWrapper .tags .tag { + .tags .tag { --tag-color: hsl(var(--tag-hue), 50%, 40%); } } -.titleWrapper .tags .tag::before { +.tags .tag::after { display: none; } + +.tags .tag::before { content: ''; position: absolute; top: 0; @@ -37,4 +39,4 @@ opacity: .25; } -.titleWrapper .tags > * { margin-right: 6px; } +.tags > * { margin-right: 6px; } -- cgit v1.2.3