blog/src/lib/Post.svelte

41 lines
1.1 KiB
Svelte
Raw Normal View History

2021-10-19 10:26:50 -07:00
<script context="module">
2022-05-13 21:50:19 -07:00
import { onMount } from 'svelte';
2021-10-20 14:23:46 -07:00
import { formatDate } from './datefmt.js';
2021-10-21 21:25:28 -07:00
import { makeSlug } from '$lib/slug.js';
2021-10-19 10:26:50 -07:00
import Link from './Link.svelte';
export { Link as a };
</script>
2021-10-19 06:44:15 -07:00
<script>
2021-10-19 10:26:50 -07:00
export let title, date;
2022-05-13 21:50:19 -07:00
// deal with sidenote collisions
onMount(async () => {
const minNoteGap = 15;
let sidenotes = Array.from(document.getElementsByClassName('sidenote'));
var prev = 0;
for (var i=0; i < sidenotes.length; i++) {
let note = sidenotes[i];
let {y, height} = note.getBoundingClientRect();
y += window.scrollY; // getBoundingClientRect is relative to viewport
if (y < prev + minNoteGap) {
note.style.top = `${prev + minNoteGap}px`;
prev = prev + minNoteGap + height;
}
else {
prev = y + height;
}
}
})
2021-10-19 06:44:15 -07:00
</script>
2021-10-19 21:03:31 -07:00
<svelte:head>
<title>{title}</title>
</svelte:head>
2021-10-19 06:44:15 -07:00
<div id="post">
2021-10-21 21:25:28 -07:00
<h1 id="{makeSlug(title)}">{title}</h1>
2021-10-20 14:23:46 -07:00
<p><em>{formatDate(date)}</em></p>
2021-10-19 10:26:50 -07:00
<slot></slot>
2021-10-19 06:44:15 -07:00
</div>