Compare commits
3 Commits
97dcc9c909
...
4702e5bf89
| Author | SHA1 | Date | |
|---|---|---|---|
| 4702e5bf89 | |||
| 3aca1afecb | |||
| fdff2c2688 |
@@ -14,7 +14,7 @@
|
|||||||
<link rel="icon" href={favicon} />
|
<link rel="icon" href={favicon} />
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<nav>
|
<nav class="media-margin">
|
||||||
<a href="/">Home</a>
|
<a href="/">Home</a>
|
||||||
<a href="/about">About</a>
|
<a href="/about">About</a>
|
||||||
<a href="https://bsky.app/profile/amyt3a.bsky.social" aria-label="Link to my Bluesky account"
|
<a href="https://bsky.app/profile/amyt3a.bsky.social" aria-label="Link to my Bluesky account"
|
||||||
@@ -30,8 +30,6 @@
|
|||||||
|
|
||||||
<style>
|
<style>
|
||||||
nav {
|
nav {
|
||||||
margin: var(--d3);
|
|
||||||
|
|
||||||
font-family: 'Fraunces', serif;
|
font-family: 'Fraunces', serif;
|
||||||
font-optical-sizing: auto;
|
font-optical-sizing: auto;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
@@ -52,10 +50,4 @@
|
|||||||
color: var(--rp-moon-foam);
|
color: var(--rp-moon-foam);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: 700px) {
|
|
||||||
nav {
|
|
||||||
margin: var(--d3) var(--d1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
32
src/routes/+page.server.ts
Normal file
32
src/routes/+page.server.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import type { SvelteComponent } from 'svelte';
|
||||||
|
import type { MDsveXComponent } from '$lib/types';
|
||||||
|
|
||||||
|
export interface BlogEntry {
|
||||||
|
name: string;
|
||||||
|
src: string;
|
||||||
|
img: string;
|
||||||
|
date: string;
|
||||||
|
desc: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function load() {
|
||||||
|
const blog_entries: BlogEntry[] =
|
||||||
|
Object.entries(import.meta.glob('/src/routes/blogs/**/+page.svx', { eager: true }))
|
||||||
|
.map(([key, value]) => [
|
||||||
|
key.split('/src/routes').pop()?.split('/+page.svx').slice(0, -1).pop() as string,
|
||||||
|
value as MDsveXComponent
|
||||||
|
])
|
||||||
|
.map(([link, val]) =>
|
||||||
|
typeof val.metadata?.src !== 'undefined' ? [val.metadata?.src, val] : [link, val]
|
||||||
|
)
|
||||||
|
.map(([link, val]) => {
|
||||||
|
val.metadata.date = Date.parse(val.metadata.date);
|
||||||
|
return [link, val];
|
||||||
|
})
|
||||||
|
.sort(([link1, a], [link2, b]) => b.metadata?.date - a.metadata?.date)
|
||||||
|
.map(([link, val]) => { return { src: link, title: val.metadata.title, img: val.metadata.img, date: new Date(val.metadata.date).toDateString(), desc: val.metadata.desc } })
|
||||||
|
return {
|
||||||
|
blogs: blog_entries
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,24 +1,9 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { MDsveXComponent } from '$lib/types';
|
|
||||||
import type { SvelteComponent } from 'svelte';
|
|
||||||
import './style-entries.css';
|
import './style-entries.css';
|
||||||
|
import type { BlogEntry } from './+page.server.ts';
|
||||||
|
|
||||||
let blog_entries: [string, SvelteComponent][] = $state(
|
let { data } = $props();
|
||||||
Object.entries(import.meta.glob('/src/routes/blogs/**/+page.svx', { eager: true }))
|
let blogs = data.blogs as BlogEntry[];
|
||||||
.map(([key, value]) => [
|
|
||||||
key.split('/src/routes').pop()?.split('/+page.svx').slice(0, -1).pop() as string,
|
|
||||||
value as MDsveXComponent
|
|
||||||
])
|
|
||||||
.map(([link, val]) =>
|
|
||||||
typeof val.metadata?.src !== 'undefined' ? [val.metadata?.src, val] : [link, val]
|
|
||||||
)
|
|
||||||
.map(([link, val]) => {
|
|
||||||
if (val.metadata) val.metadata.date = Date.parse(val.metadata?.date);
|
|
||||||
return [link, val];
|
|
||||||
})
|
|
||||||
.sort(([link1, a], [link2, b]) => b.metadata?.date - a.metadata?.date)
|
|
||||||
);
|
|
||||||
console.log(blog_entries);
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
@@ -28,12 +13,12 @@
|
|||||||
This is a collection of things I've set up and created that I think might interest others.
|
This is a collection of things I've set up and created that I think might interest others.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
{#each blog_entries as [href, page]}
|
{#each blogs as blog}
|
||||||
<a {href} class="blog-entry">
|
<a href={blog.src} class="blog-entry">
|
||||||
<div>
|
<div>
|
||||||
<h4>{page.metadata?.title}</h4>
|
<h4>{blog.title}</h4>
|
||||||
<p>{page.metadata?.desc}</p>
|
<p>{blog.desc}</p>
|
||||||
<p class="date">{new Date(page.metadata?.date).toDateString()}</p>
|
<p class="date">{blog.date}</p>
|
||||||
</div>
|
</div>
|
||||||
<img src="blog-1.png" class="blog-image" />
|
<img src="blog-1.png" class="blog-image" />
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
7
src/routes/blogs/a.svelte
Normal file
7
src/routes/blogs/a.svelte
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
export let href;
|
||||||
|
|
||||||
|
let target = href.includes('https://') || href.includes('http://') ? '_blank' : '';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<a {href} {target}><slot /></a>
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
<script context="module">
|
<script context="module">
|
||||||
import img from './img.svelte';
|
import img from './img.svelte';
|
||||||
|
import a from './a.svelte';
|
||||||
import h1 from './h1.svelte';
|
import h1 from './h1.svelte';
|
||||||
import h2 from './h2.svelte';
|
import h2 from './h2.svelte';
|
||||||
import h3 from './h3.svelte';
|
import h3 from './h3.svelte';
|
||||||
export { img, h1, h2, h3 };
|
export { img, a, h1, h2, h3 };
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@@ -11,13 +12,13 @@
|
|||||||
export let date;
|
export let date;
|
||||||
export let desc;
|
export let desc;
|
||||||
|
|
||||||
let ddate = new Date(Date.parse(date));
|
let ddate = new Date(Date.parse(date)).toDateString();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<main>
|
<main>
|
||||||
<div class="title media-margin">
|
<div class="title media-margin">
|
||||||
<!-- prettier-ignore -->
|
<!-- prettier-ignore -->
|
||||||
<h1>{title}</h1><p class="date">Last updated {ddate.toDateString()}</p>
|
<h1>{title}</h1><p class="date">Last updated {ddate}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="blog-text media-margin">
|
<div class="blog-text media-margin">
|
||||||
<p>{desc}</p>
|
<p>{desc}</p>
|
||||||
|
|||||||
Reference in New Issue
Block a user