feat: Allow the user to add more "archive" like pages #10

Merged
aniva merged 6 commits from routing/extra into main 2024-10-11 01:32:13 -07:00
10 changed files with 44 additions and 26 deletions

View File

@ -1,3 +0,0 @@
# Archives
Archives live here

View File

@ -0,0 +1,6 @@
---
title: Archives Custom Title
---
# Archives
Archives live here

View File

@ -8,5 +8,8 @@
"github": "https://github.com", "github": "https://github.com",
"email": "email:cirno@gensokyo.jp", "email": "email:cirno@gensokyo.jp",
"orcid": "https://orcid.org/cirno" "orcid": "https://orcid.org/cirno"
} },
"extra": [
{ "route": "/archives", "name": "Archives" }
]
} }

View File

@ -1,7 +1,8 @@
import siteMetadata from '$content/metadata.json';
export const routes: { route: string, name: string, disabled?: boolean }[] = [ export const routes: { route: string, name: string, disabled?: boolean }[] = [
{ route: "/", name: "Home" }, { route: "/", name: "Home" },
{ route: "/post", name: "Blog" }, { route: "/post", name: "Blog" },
{ route: "/tag", name: "Tags" }, { route: "/tag", name: "Tags" },
{ route: "/gallery", name: "Gallery", disabled: true }, { route: "/gallery", name: "Gallery", disabled: true },
{ route: "/archives", name: "Archives" }, ].concat(siteMetadata?.extra || []);
];

View File

@ -103,6 +103,7 @@
@media (max-width: 700px) { @media (max-width: 700px) {
#layout { #layout {
flex-direction: column; flex-direction: column;
margin-top: 10px;
gap: 20px; gap: 20px;
} }
} }

View File

@ -48,12 +48,12 @@
class="floater-elem" class="floater-elem"
style="padding-bottom: {(1 - progress) * 50}vh" style="padding-bottom: {(1 - progress) * 50}vh"
> >
<div class="flex h-5 items-center space-x-4 text-sm"> <div id="navbar" class="h-5 items-center space-x-4 text-sm">
<a class="navbar-link" href="#bio">Bio</a> <a href="#bio">Bio</a>
{#each routes as item} {#each routes as item}
{#if item.route !== "/"} {#if item.route !== "/"}
<Separator class="bg-gray-500 dark:bg-gray-100" orientation="vertical" /> <Separator class="bg-gray-500 dark:bg-gray-100" orientation="vertical" />
<a class="navbar-link" href={item.route} class:disabled-link={item.disabled}>{item.name}</a> <a href={item.route} class:disabled-link={item.disabled}>{item.name}</a>
{/if} {/if}
{/each} {/each}
</div> </div>
@ -98,8 +98,8 @@
background-position: center center; background-position: center center;
z-index: -10; z-index: -10;
position: fixed; position: fixed;
min-width: 100vw; min-width: 100%;
min-height: 100vh; min-height: 100%;
overscroll-behaviour: none; overscroll-behaviour: none;
} }
#front { #front {
@ -116,6 +116,10 @@
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }
#navbar {
display: flex;
flex-wrap: wrap;
}
.floater-elem { .floater-elem {
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;

View File

@ -35,8 +35,11 @@
} }
@media (max-width: 700px) { @media (max-width: 700px) {
#navbar { #navbar {
flex-direction: row; display: inline-block;
justify-content: start; white-space: pre-wrap;
}
#navbar .nav-link {
display: inline-block;
} }
} }
</style> </style>

View File

@ -1,12 +1,14 @@
<script lang="ts"> <script lang="ts">
import type { PageData } from './$types'; import type { PageData } from './$types';
export let data: PageData; export let data: PageData;
const { Content } = data; const { slug, metadata, Content } = data;
import siteMetadata from '$content/metadata.json'; import siteMetadata from '$content/metadata.json';
const title = metadata?.title || (slug[0].toUpperCase() + slug.slice(1));
</script> </script>
<svelte:head> <svelte:head>
<title>Archives | {siteMetadata.blogName}</title> <title>{title} | {siteMetadata.blogName}</title>
</svelte:head> </svelte:head>
<hr /> <hr />

View File

@ -0,0 +1,12 @@
import type { PageLoad } from './$types';
export const load: PageLoad = async ({ params }) => {
const post = await import(`$content/extra/${params.slug}.md`);
const Content = post.default;
return {
slug: params.slug,
metadata: post.metadata,
Content,
};
}

View File

@ -1,11 +0,0 @@
import type { PageLoad } from './$types';
export const load: PageLoad = async (_) => {
const post = await import("$content/archives.md");
const Content = post.default;
return {
metadata: post.metadata,
Content,
};
}