aboutsummaryrefslogtreecommitdiff
path: root/src/pages
diff options
context:
space:
mode:
authorkartofen <mladenovnasko0@gmail.com>2022-08-26 23:54:17 +0300
committerkartofen <mladenovnasko0@gmail.com>2022-08-26 23:54:17 +0300
commit8f5278eb443864910dd9c2131c992d71e3af2d20 (patch)
treed56d805fa010e4b10af7dec0ed359f218e859667 /src/pages
Big bang
Diffstat (limited to 'src/pages')
-rw-r--r--src/pages/404.md1
-rw-r--r--src/pages/board/[board].astro26
-rw-r--r--src/pages/board/[board]/[tid].astro26
-rw-r--r--src/pages/boards.astro32
-rw-r--r--src/pages/index.astro101
5 files changed, 186 insertions, 0 deletions
diff --git a/src/pages/404.md b/src/pages/404.md
new file mode 100644
index 0000000..3061d00
--- /dev/null
+++ b/src/pages/404.md
@@ -0,0 +1 @@
+# 404 Error
diff --git a/src/pages/board/[board].astro b/src/pages/board/[board].astro
new file mode 100644
index 0000000..2624fed
--- /dev/null
+++ b/src/pages/board/[board].astro
@@ -0,0 +1,26 @@
+---
+import Default from '../../layouts/Default.astro';
+import Thread from '../../components/Thread.svelte'
+import type Thread from '../../models/Thread';
+
+import { api } from '../../lib/api.ts';
+import { processThreadIn } from '../../lib/thread'
+
+const { board } = Astro.params;
+const data = await api('get', `board/${board}`);
+
+if(data.status === 404) return Astro.redirect('/404');
+
+const threads: Thread[] = await data.json();
+for(let thread of threads)
+ await processThreadIn(board, thread);
+---
+
+<Default>
+ <h1><a href="/boards"> {board} </a></h1>
+
+ {threads.map((thread) => (
+ <Thread thread={thread} board={board} />
+ ))}
+
+</Default>
diff --git a/src/pages/board/[board]/[tid].astro b/src/pages/board/[board]/[tid].astro
new file mode 100644
index 0000000..80e7fbe
--- /dev/null
+++ b/src/pages/board/[board]/[tid].astro
@@ -0,0 +1,26 @@
+---
+import Default from '../../../layouts/Default.astro';
+import Thread from '../../../components/Thread.svelte'
+import Comment from '../../../components/Comment.svelte'
+import type Thread from '../../../models/Thread';
+
+import { api } from '../../../lib/api';
+import { processThreadIn } from '../../../lib/thread';
+
+const { board } = Astro.params;
+const data = await api('get', `thread/${board}/${Astro.params.tid}`);
+
+if(data.status === 404) return Astro.redirect('/404');
+
+const thread: Thread = await data.json();
+await processThreadIn(board, thread, true);
+const comments: Comment[] = thread.comments;
+---
+
+<Default>
+ <Thread thread={thread} board={board}>
+ {comments.map((comment) => (
+ <Comment comment={comment} />
+ ))}
+ </Thread>
+</Default>
diff --git a/src/pages/boards.astro b/src/pages/boards.astro
new file mode 100644
index 0000000..ab3158f
--- /dev/null
+++ b/src/pages/boards.astro
@@ -0,0 +1,32 @@
+---
+import Default from '../layouts/Default.astro';
+import { api } from '../lib/api.ts';
+
+const data = await api('get', 'boards');
+const boards: string[] = await data.json();
+---
+
+<Default>
+ <div class="blackbox">
+ <h3>Boards</h3>
+
+ <ul>
+ {boards.map((board) => (
+ <li><a href=`/board/${board}`>{board}</a></li>
+ ))}
+ </ul>
+ </div>
+</Default>
+
+<style>
+ .blackbox {
+ width: 300px;
+ height: 210px;
+ border: 10px solid black;
+ padding: 10px;
+ padding-top: 0px;
+ margin: 10px;
+ margin-left: 0px;
+ background-color: white;
+ }
+</style>
diff --git a/src/pages/index.astro b/src/pages/index.astro
new file mode 100644
index 0000000..4dfffe3
--- /dev/null
+++ b/src/pages/index.astro
@@ -0,0 +1,101 @@
+---
+import Layout from '../layouts/Layout.astro';
+import Card from '../components/Card.astro';
+---
+
+<Layout title="Welcome to Astro.">
+ <main>
+ <h1>Welcome to <span class="text-gradient">Astro</span></h1>
+ <p class="instructions">
+ Check out the <code>src/pages</code> directory to get started.<br />
+ <strong>Code Challenge:</strong> Tweak the "Welcome to Astro" message above.
+ </p>
+ <ul role="list" class="link-card-grid">
+ <Card
+ href="https://docs.astro.build/"
+ title="Documentation"
+ body="Learn how Astro works and explore the official API docs."
+ />
+ <Card
+ href="https://astro.build/integrations/"
+ title="Integrations"
+ body="Supercharge your project with new frameworks and libraries."
+ />
+ <Card
+ href="https://astro.build/themes/"
+ title="Themes"
+ body="Explore a galaxy of community-built starter themes."
+ />
+ <Card
+ href="https://astro.build/chat/"
+ title="Chat"
+ body="Come say hi to our amazing Discord community. ❤️"
+ />
+ <Card
+ href="boards"
+ title="Boards page"
+ body="Fuck you"
+ />
+ </ul>
+ </main>
+</Layout>
+
+<style>
+ :root {
+ --astro-gradient: linear-gradient(0deg, #4f39fa, #da62c4);
+ }
+
+ h1 {
+ margin: 2rem 0;
+ }
+
+ main {
+ margin: auto;
+ padding: 1em;
+ max-width: 60ch;
+ }
+
+ .text-gradient {
+ font-weight: 900;
+ background-image: var(--astro-gradient);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-size: 100% 200%;
+ background-position-y: 100%;
+ border-radius: 0.4rem;
+ animation: pulse 4s ease-in-out infinite;
+ }
+
+ @keyframes pulse {
+ 0%,
+ 100% {
+ background-position-y: 0%;
+ }
+ 50% {
+ background-position-y: 80%;
+ }
+ }
+
+ .instructions {
+ line-height: 1.6;
+ margin: 1rem 0;
+ background: #4f39fa;
+ padding: 1rem;
+ border-radius: 0.4rem;
+ color: var(--color-bg);
+ }
+
+ .instructions code {
+ font-size: 0.875em;
+ border: 0.1em solid var(--color-border);
+ border-radius: 4px;
+ padding: 0.15em 0.25em;
+ }
+
+ .link-card-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(24ch, 1fr));
+ gap: 1rem;
+ padding: 0;
+ }
+</style>