diff options
Diffstat (limited to 'src')
34 files changed, 699 insertions, 62 deletions
diff --git a/src/app.css b/src/app.css index 0199fc9..679174a 100644 --- a/src/app.css +++ b/src/app.css @@ -1,15 +1,20 @@ /* - Copyright (C) 2024 memdmp + Copyright (C) 2024-2026 memdmp - This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by Affero, Inc., at version 1. - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Affero General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + You should have received a copy of the Affero General Public License along with this program. If not, see <https://spdx.org/licenses/AGPL-1.0-only>. */ @import 'tailwindcss'; @theme { + --font-sans: + InterVariable, Inter, "Noto Sans", + ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji", sans-serif; + --font-space-grotesk: "Space Grotesk", var(--font-sans), sans-serif; --font-bios: 'Ac437 IBM EGA 8x14', 'Hack', 'Courier New', 'Courier', 'monospace'; --font-grub: @@ -17,6 +22,194 @@ 'Courier', 'monospace'; --font-mono: 'PxPlus IBM EGA 8x14', 'Hack', 'Courier New', 'Courier', 'monospace'; + --font-genericmono: + 'JetBrainsMono NF', 'Jetbrains Mono', 'JetBrains Mono', monospace; + --color-formatted-table-border: var(--color-neutral-900); + --color-formatted-table-background: var(--color-neutral-950); + --color-codeblock-border: var(--color-neutral-900); + --color-codeblock-background: var(--color-neutral-950); + --color-accent-primary: var(--color-red-400); +} + +@utility afterunderline-* { + @apply relative; + &::before { + content: ''; + background: --value(--color-*); + @apply absolute top-full left-0 -mt-0.5 h-[0.2rem] w-full transition-all -z-10; + } +} +@utility afterunderline-hoverstate { + &::before { + @apply top-0 left-0 mt-0 h-full w-full; + } +} + +@utility formatted-table { + @apply relative overflow-x-auto shadow-xs rounded-xl border bg-formatted-table-background border-formatted-table-border; + table { + @apply w-full text-sm text-left rtl:text-right bg-formatted-table-background; + thead { + @apply text-sm border-b rounded-xl border-formatted-table-border; + } + tbody tr { + @apply not-last:border-b border-formatted-table-border; + } + th,td { + @apply px-6 py-3; + } + td > b:first-child:last-child { + @apply px-6 py-4 font-medium whitespace-nowrap; + } + } +} +@utility quicklink { + @apply text-accent-primary transition-all afterunderline-accent-primary hover:afterunderline-hoverstate hover:text-white; +} + +@utility internal-header-active { + &:not(:is(p)) { + @apply text-white/95; + } + &:is(blockquote) { + &::before { + background-color: var(--colour-full); + } + } + &::after { + @apply -ml-3 bg-gray-200/50; + } +} +#postmd { + @apply font-sans; + a { + @apply quicklink; + } + h1 { + @apply text-4xl mb-1.5 mt-2; + } + h2 { + @apply my-1.5 text-2xl; + } + h3 { + @apply my-1 text-xl; + } + h4 { + @apply my-1 text-lg; + } + h1,h2,h3,h4,h5,h6,p { + @apply relative text-white/90 hover:text-white; + &::after { + content: ""; + @apply absolute top-[20%] left-0 h-[60%] w-0.5 -ml-4 rounded-full transition-all; + } + &:is(p)::after { + @apply bg-gray-200/5; + } + &:not(:is(p))::after { + @apply bg-gray-200/15; + } + &:hover::after { + @apply -ml-3 bg-gray-200/75; + } + &:hover ~ p:is(p)::after { + @apply bg-gray-200/4; + } + } + h1 { + &:not(:hover):has(~*:hover):not(:has(~h1~*:hover)) { + @apply internal-header-active; + } + } + h2 { + &:not(:hover):has(~*:hover):not(:has(~h1~*:hover,~h2~*:hover)) { + @apply internal-header-active; + } + } + h3 { + &:not(:hover):has(~*:hover):not(:has(~h1~*:hover,~h2~*:hover,~h3~*:hover)) { + @apply internal-header-active; + } + } + h4 { + &:not(:hover):has(~*:hover):not(:has(~h1~*:hover,~h2~*:hover,~h3~*:hover,~h4~*:hover)) { + @apply internal-header-active; + } + } + h5,h6,p { + &:not(:hover):has(~*:hover):not(:has(~h1~*:hover,~h2~*:hover,~h3~*:hover,~h4~*:hover,~h5~*:hover)) { + @apply internal-header-active; + } + } + p::after { + @apply h-[90%] top-[5%]; + } + p { + @apply my-1; + } + code { + @apply font-genericmono; + } + p code { + @apply bg-codeblock-background -my-1 p-1 rounded-lg; + } + pre { + @apply p-3 -mx-2 overflow-scroll bg-codeblock-background border border-codeblock-border rounded-lg transition-colors max-h-[min(75vh,38rem)]; + code { + .token { + @apply text-red-500; + } + &, + .token.builtin, + .token.interpolation { + @apply text-[#9CDCFE] selection:bg-[#9CDCFE] selection:text-black; + } + .token.operator { + @apply text-[#d4d4d4] selection:bg-[#d4d4d4] selection:text-black; + } + .token.class-name { + @apply text-[#4ec9b0] selection:bg-[#4ec9b0] selection:text-black; + } + .token.number { + @apply text-[#b5cea8] selection:bg-[#b5cea8] selection:text-black; + } + .token.comment { + @apply text-[#6a9955] selection:bg-[#6a9955] selection:text-black; + } + .token.keyword { + @apply text-[#c586c0] selection:bg-[#c586c0] selection:text-black; + } + .token.punctuation { + @apply text-[white] selection:bg-[white] selection:text-black; + } + .token.function { + @apply text-[#dcdcaa] selection:bg-[#dcdcaa] selection:text-black; + } + .token.string { + @apply text-[#ce9178] selection:bg-[#ce9178] selection:text-black; + } + .token.boolean, + .token.interpolation-punctuation { + @apply text-[#5293c9] selection:bg-[#5293c9] selection:text-black; + } + } + } + blockquote:not(.default-blockquote) { + @apply -ml-1 pl-4 p-2 relative my-1; + &::before { + @apply absolute w-1 bg-accent-primary/50 transition-colors left-0 top-[10%] h-[80%]; + content: ''; + --colour-full: var(--color-accent-primary); + } + &:hover::before { + background-color: var(--colour-full); + } + p { + &::after { + @apply hidden; + } + } + } } /* diff --git a/src/app.html b/src/app.html index 72dfdc1..edf3372 100644 --- a/src/app.html +++ b/src/app.html @@ -1,11 +1,11 @@ <!-- /** * @generated - * @license AGPL-3.0-OR-LATER - * @copyright 2024 memdmp + * @license AGPL-1.0-only + * @copyright 2024-2026 memdmp * @upstream see https://[currentdomain]/upstream * - * Copyright (C) 2024 memdmp + * Copyright (C) 2024-2026 memdmp * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -15,11 +15,13 @@ */ --> <!DOCTYPE html> -<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> +<html lang="en" xmlns="http://www.w3.org/1999/xhtml" class='-z-50 bg-black text-white'> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="icon" href="%sveltekit.assets%/favicon.webp" /> + <link rel="stylesheet" href="%sveltekit.assets%/inter/inter.css" /> + <link rel="stylesheet" href="%sveltekit.assets%/spacegrotesk/spacegrotesk.css" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> %sveltekit.head% </head> diff --git a/src/lib/blog/InfoCard.svelte b/src/lib/blog/InfoCard.svelte new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/lib/blog/InfoCard.svelte diff --git a/src/lib/blog/Post.svelte b/src/lib/blog/Post.svelte new file mode 100644 index 0000000..2c61621 --- /dev/null +++ b/src/lib/blog/Post.svelte @@ -0,0 +1,45 @@ +<script lang="ts" module> + export * from './Post'; +</script> + +<script lang="ts"> + import { parsePostMetadata, type Post } from './Post'; + + let { + post, + filename, + }: { + post: Post; + filename?: string; + } = $props(); + + let meta = $derived(parsePostMetadata(post.metadata)); + + let PostComp = $derived(post.default); +</script> + +<div class="flex justify-center"> + <div class="max-w-2xl w-full"> + <h1 class="font-space-grotesk text-5xl mt-8 mb-4"> + <span class="text-accent-primary select-none">: </span + >{meta.title}<span class="text-accent-primary select-none">;</span> + </h1> + <p class="my-4 font-genericmono"> + ctime: {meta.created.toISOString().split('T')[0]}<span class="select-none" + > ▒ </span + >mtime: {meta.updated.toISOString().split('T')[0]}{#if filename}<span + class="select-none"> ▒ </span + ><a + href={encodeURI( + `https://codeberg.org/dmpmem/tilde/src/branch/master/src/routes/blog/${filename}`, + )} + class="quicklink" + target="_blank" + rel="noopener noreferrer">src</a + >{/if} + </p> + <article id="postmd"> + <PostComp /> + </article> + </div> +</div> diff --git a/src/lib/blog/Post.ts b/src/lib/blog/Post.ts new file mode 100644 index 0000000..440dffa --- /dev/null +++ b/src/lib/blog/Post.ts @@ -0,0 +1,28 @@ + +import type { Component } from 'svelte'; + +export type PostMetadata<Parsed extends boolean = false> = { + title: string; + blurb: string; + author: string | null; + slug: string; + id: string | number; + created: Parsed extends true ? Date : string; + updated: Parsed extends true ? Date : string; +}; +export type Post<MetadataParsed extends boolean = false> = { + metadata: PostMetadata<MetadataParsed>; + default: Component; +}; + +export const parsePostMetadata = ( + m: PostMetadata<boolean>, +): PostMetadata<true> => ({ + ...m, + created: new Date(m.created), + updated: new Date(m.updated), +}); +export const parsePost = (p: Post<boolean>): Post<true> => ({ + ...p, + metadata: parsePostMetadata(p.metadata), +}); diff --git a/src/lib/blog/TableWrapper.svelte b/src/lib/blog/TableWrapper.svelte new file mode 100644 index 0000000..ddf3d73 --- /dev/null +++ b/src/lib/blog/TableWrapper.svelte @@ -0,0 +1,15 @@ +<script lang="ts"> + import type { Snippet } from 'svelte'; + + const { + children, + maxwidth = false, + }: { + children: Snippet; + maxwidth?: boolean; + } = $props(); +</script> + +<div class={{ 'formatted-table my-1': true, 'w-max': !maxwidth }}> + {@render children()} +</div> diff --git a/src/lib/fonts/Ac437_IBM_EGA_8x14.css b/src/lib/fonts/Ac437_IBM_EGA_8x14.css index 01a053b..519fc96 100644 --- a/src/lib/fonts/Ac437_IBM_EGA_8x14.css +++ b/src/lib/fonts/Ac437_IBM_EGA_8x14.css @@ -1,11 +1,11 @@ /* - Copyright (C) 2024 memdmp + Copyright (C) 2024-2026 memdmp - This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by Affero, Inc., at version 1. - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Affero General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + You should have received a copy of the Affero General Public License along with this program. If not, see <https://spdx.org/licenses/AGPL-1.0-only>. */ @font-face { font-family: "Ac437 IBM EGA 8x14"; diff --git a/src/lib/fonts/Px437_DOS-V_re_JPN12.css b/src/lib/fonts/Px437_DOS-V_re_JPN12.css index 410e9de..9a628de 100644 --- a/src/lib/fonts/Px437_DOS-V_re_JPN12.css +++ b/src/lib/fonts/Px437_DOS-V_re_JPN12.css @@ -1,11 +1,11 @@ /* - Copyright (C) 2024 memdmp + Copyright (C) 2024-2026 memdmp - This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by Affero, Inc., at version 1. - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Affero General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + You should have received a copy of the Affero General Public License along with this program. If not, see <https://spdx.org/licenses/AGPL-1.0-only>. */ @font-face { font-family: "Px437 DOS/V re. JPN12"; diff --git a/src/lib/fonts/PxPlus_IBM_EGA_8x14.css b/src/lib/fonts/PxPlus_IBM_EGA_8x14.css index d1a3a97..7f3dbda 100644 --- a/src/lib/fonts/PxPlus_IBM_EGA_8x14.css +++ b/src/lib/fonts/PxPlus_IBM_EGA_8x14.css @@ -1,11 +1,11 @@ /* - Copyright (C) 2024 memdmp + Copyright (C) 2024-2026 memdmp - This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by Affero, Inc., at version 1. - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Affero General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + You should have received a copy of the Affero General Public License along with this program. If not, see <https://spdx.org/licenses/AGPL-1.0-only>. */ @font-face { font-family: "PxPlus IBM EGA 8x14"; diff --git a/src/lib/fonts/all-local-after-woff2.css b/src/lib/fonts/all-local-after-woff2.css index 9bc8d65..deb4acf 100644 --- a/src/lib/fonts/all-local-after-woff2.css +++ b/src/lib/fonts/all-local-after-woff2.css @@ -1,11 +1,11 @@ /* - Copyright (C) 2024 memdmp + Copyright (C) 2024-2026 memdmp - This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by Affero, Inc., at version 1. - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Affero General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + You should have received a copy of the Affero General Public License along with this program. If not, see <https://spdx.org/licenses/AGPL-1.0-only>. */ @font-face { font-family: "Ac437 IBM EGA 8x14"; @@ -16,6 +16,7 @@ url("./Ac437_IBM_EGA_8x14.ttf") format("opentype"); font-display: swap; } + @font-face { font-family: "PxPlus IBM EGA 8x14"; src: @@ -25,6 +26,7 @@ url("./PxPlus_IBM_EGA_8x14.ttf") format("opentype"); font-display: swap; } + @font-face { font-family: "Px437 DOS/V re. JPN12"; src: diff --git a/src/lib/fonts/all.css b/src/lib/fonts/all.css index 7b30c9a..ef83aaf 100644 --- a/src/lib/fonts/all.css +++ b/src/lib/fonts/all.css @@ -1,11 +1,11 @@ /* - Copyright (C) 2024 memdmp + Copyright (C) 2024-2026 memdmp - This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by Affero, Inc., at version 1. - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Affero General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + You should have received a copy of the Affero General Public License along with this program. If not, see <https://spdx.org/licenses/AGPL-1.0-only>. */ @font-face { font-family: "Ac437 IBM EGA 8x14"; @@ -16,6 +16,7 @@ url("./Ac437_IBM_EGA_8x14.ttf") format("opentype"); font-display: swap; } + @font-face { font-family: "PxPlus IBM EGA 8x14"; src: @@ -25,6 +26,7 @@ url("./PxPlus_IBM_EGA_8x14.ttf") format("opentype"); font-display: swap; } + @font-face { font-family: "Px437 DOS/V re. JPN12"; src: diff --git a/src/lib/index.ts b/src/lib/index.ts index 13c5889..c83493b 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -1,10 +1,12 @@ /* - Copyright (C) 2024 memdmp + Copyright (C) 2024-2026 memdmp - This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by Affero, Inc., at version 1. - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Affero General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + You should have received a copy of the Affero General Public License along with this program. If not, see <https://spdx.org/licenses/AGPL-1.0-only>. */ export * as styles from "./styles.ts"; + +export const forceTrailingSlash = (v: string) => v.endsWith('/') ? v : `${v}/`; diff --git a/src/lib/styles.ts b/src/lib/styles.ts index 02f3805..0c60aa0 100644 --- a/src/lib/styles.ts +++ b/src/lib/styles.ts @@ -1,10 +1,10 @@ /* - Copyright (C) 2024 memdmp + Copyright (C) 2024-2026 memdmp - This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by Affero, Inc., at version 1. - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Affero General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + You should have received a copy of the Affero General Public License along with this program. If not, see <https://spdx.org/licenses/AGPL-1.0-only>. */ export const button = "bg-white/10 text-white p-4 rounded-xl"; diff --git a/src/params/int.ts b/src/params/int.ts new file mode 100644 index 0000000..3d77400 --- /dev/null +++ b/src/params/int.ts @@ -0,0 +1,3 @@ +import type { ParamMatcher } from '@sveltejs/kit'; + +export const match = ((param: string): param is `${number}` => !isNaN(parseInt(param))) satisfies ParamMatcher; diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 80bd58c..325cd61 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,12 +1,10 @@ <script lang="ts"> - import "$/lib/console"; - import "../app.css"; - import "$lib/fonts/all-local-after-woff2.css"; + import '$/lib/console'; + import '../app.css'; + import '$lib/fonts/all-local-after-woff2.css'; const { children } = $props(); </script> -<div - class="w-screen h-screen fixed top-0 left-0 bg-black text-white p-4 overflow-y-auto" -> +<div class="min-w-screen min-h-screen p-4 relative"> {@render children()} </div> diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts index 2c01569..ff02056 100644 --- a/src/routes/+layout.ts +++ b/src/routes/+layout.ts @@ -1,11 +1,11 @@ /* - Copyright (C) 2024 memdmp + Copyright (C) 2024-2026 memdmp - This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by Affero, Inc., at version 1. - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Affero General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + You should have received a copy of the Affero General Public License along with this program. If not, see <https://spdx.org/licenses/AGPL-1.0-only>. */ export const prerender = true; export const trailingSlash = 'always'; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index f70592b..cb1b7ef 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,6 +1,6 @@ <!-- /** - * @license AGPL-3.0-OR-LATER + * @license AGPL-1.0-ONLY * @copyright 2024 memdmp * * Copyright (C) 2024 memdmp diff --git a/src/routes/IndexPage.svelte b/src/routes/IndexPage.svelte index fec5d44..b79ae01 100644 --- a/src/routes/IndexPage.svelte +++ b/src/routes/IndexPage.svelte @@ -1,6 +1,6 @@ <!-- /** - * @license AGPL-3.0-OR-LATER + * @license AGPL-1.0-ONLY * @copyright 2024 memdmp * * Copyright (C) 2024 memdmp diff --git a/src/routes/anim-gen.ts b/src/routes/anim-gen.ts index 1aaaa37..49c9cbd 100644 --- a/src/routes/anim-gen.ts +++ b/src/routes/anim-gen.ts @@ -1,11 +1,11 @@ /* - Copyright (C) 2024 memdmp + Copyright (C) 2024-2026 memdmp - This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by Affero, Inc., at version 1. - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Affero General Public License for more details. - You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + You should have received a copy of the Affero General Public License along with this program. If not, see <https://spdx.org/licenses/AGPL-1.0-only>. */ import { Animation, MultiObjectKeyframe } from '@memdmp/keyframegen'; import { @@ -433,7 +433,7 @@ handleSteps.push(() => { nextStep(); const comment = `/** * @generated - * @license AGPL-3.0-OR-LATER + * @license AGPL-1.0-ONLY * @copyright 2024 memdmp * * Copyright (C) 2024 memdmp diff --git a/src/routes/blog/+page.server.ts b/src/routes/blog/+page.server.ts new file mode 100644 index 0000000..7c4726e --- /dev/null +++ b/src/routes/blog/+page.server.ts @@ -0,0 +1,13 @@ +import { parsePost, type Post } from '$/lib/blog/Post.svelte' + +const posts = import.meta.glob("./posts/*.svx") as Record<string, () => Promise<Post>> +const returnedData = Promise.all(Object.entries(posts).map(v => v[1]().then(r => [v[0], { + ...parsePost(r as Post), + default: null, +}] as const))); + +export const load = async () => { + return { + posts: Object.fromEntries(await returnedData) + } +} diff --git a/src/routes/blog/+page.svelte b/src/routes/blog/+page.svelte new |