Skip to content

Commit a725bc1

Browse files
authored
Fix 'on this page' widget (#96)
* fix on-this-page widget * fix * remove * sanitize titles * better styles * tweaks * remove on-this-page from blog posts, it's weird to have it there * fix
1 parent 25f791b commit a725bc1

File tree

18 files changed

+253
-556
lines changed

18 files changed

+253
-556
lines changed
Lines changed: 11 additions & 0 deletions
Loading

apps/svelte.dev/src/lib/server/content.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,10 @@ export const blog_posts = index.blog.children
4242
const date = post.metadata.date ?? post.file.split('/').pop()!.slice(0, 10);
4343

4444
return {
45-
title: post.metadata.title,
45+
...post,
4646
date,
4747
date_formatted: format_date(date),
48-
description: post.metadata.description,
49-
draft: post.metadata.draft,
50-
authors,
51-
...post
48+
authors
5249
};
5350
})
5451
.sort((a, b) => (a.date < b.date ? 1 : -1));

apps/svelte.dev/src/routes/blog/+page.server.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ export const prerender = true;
44

55
export async function load() {
66
return {
7-
posts: blog_posts
7+
posts: blog_posts.map((document) => ({
8+
metadata: document.metadata,
9+
date: document.date,
10+
slug: document.slug
11+
}))
812
};
913
}

apps/svelte.dev/src/routes/blog/+page.svelte

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
<h1 class="visually-hidden">Blog</h1>
2020
<div class="posts stretch">
2121
{#each data.posts as post}
22-
{#if !post.draft}
22+
{#if !post.metadata.draft}
2323
<article class="post" data-pubdate={post.date}>
2424
<a class="no-underline" href="/{post.slug}" title="Read the article »">
25-
<h2>{post.title}</h2>
26-
<p>{post.description}</p>
25+
<h2>{post.metadata.title}</h2>
26+
<p>{post.metadata.description}</p>
2727
</a>
2828
</article>
2929
{/if}

apps/svelte.dev/src/routes/blog/[slug]/+page.server.js

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,16 @@ import { render_content } from '$lib/server/renderer';
55
export const prerender = true;
66

77
export async function load({ params }) {
8-
const post = blog_posts.find((post) => post.slug === `blog/${params.slug}`);
8+
const document = blog_posts.find((document) => document.slug === `blog/${params.slug}`);
99

10-
if (!post) error(404);
10+
if (!document) error(404);
1111

1212
// forgive me — terrible hack necessary to get diffs looking sensible
1313
// on the `runes` blog post
14-
post.body = post.body.replace(/( )+/gm, (match) => ' '.repeat(match.length / 4));
14+
const markdown = document.body.replace(/( )+/gm, (match) => ' '.repeat(match.length / 4));
1515

1616
return {
17-
title: post.title,
18-
description: post.description,
19-
path: `/${post.slug}`,
20-
date: post.date,
21-
date_formatted: post.date_formatted,
22-
body: await render_content(post.file, post.body),
23-
authors: post.authors,
24-
sections: post.sections
17+
...document,
18+
body: await render_content(document.file, markdown)
2519
};
2620
}

apps/svelte.dev/src/routes/blog/[slug]/+page.svelte

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,31 @@
1-
<script>
1+
<script lang="ts">
22
import { page } from '$app/stores';
33
import { copy_code_descendants, ts_js_select } from '@sveltejs/site-kit/actions';
4-
import { DocsOnThisPage, setupDocsHovers } from '@sveltejs/site-kit/docs';
4+
import { setupDocsHovers } from '@sveltejs/site-kit/docs';
55
6-
export let data;
6+
let { data } = $props();
7+
8+
let content = $state() as HTMLElement;
79
810
setupDocsHovers();
911
</script>
1012

1113
<svelte:head>
12-
<title>{data.title}</title>
14+
<title>{data.metadata.title}</title>
1315

1416
<meta name="twitter:card" content="summary_large_image" />
15-
<meta name="twitter:title" content={data.title} />
16-
<meta name="twitter:description" content={data.description} />
17-
<meta name="Description" content={data.description} />
17+
<meta name="twitter:title" content={data.metadata.title} />
18+
<meta name="twitter:description" content={data.metadata.description} />
19+
<meta name="Description" content={data.metadata.description} />
1820

1921
<meta name="twitter:image" content="https://svelte.dev/blog/{$page.params.slug}/card.png" />
2022
<meta name="og:image" content="https://svelte.dev/blog/{$page.params.slug}/card.png" />
2123
</svelte:head>
2224

2325
<div class="content">
2426
<article class="post listify text" use:ts_js_select use:copy_code_descendants>
25-
<h1>{data.title}</h1>
26-
<p class="standfirst">{data.description}</p>
27+
<h1>{data.metadata.title}</h1>
28+
<p class="standfirst">{data.metadata.description}</p>
2729

2830
<p class="byline">
2931
{#each data.authors as author, i}
@@ -37,14 +39,9 @@
3739
<time datetime={data.date}>{data.date_formatted}</time>
3840
</p>
3941

40-
<DocsOnThisPage
41-
title={data.title}
42-
path={data.path}
43-
sections={data.sections}
44-
orientation="inline"
45-
/>
46-
47-
{@html data.body}
42+
<div class="content" bind:this={content}>
43+
{@html data.body}
44+
</div>
4845
</article>
4946
</div>
5047

apps/svelte.dev/src/routes/blog/[slug]/card.png/+server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export async function GET({ params }) {
2727

2828
if (!post) error(404);
2929

30-
const result = render(Card, { props: post });
30+
const result = render(Card, { props: { title: post.metadata.title, date: post.date_formatted } });
3131
const element = toReactNode(`${result.body}<style>${CardCSS}</style>`);
3232

3333
const svg = await satori(element, {

apps/svelte.dev/src/routes/blog/[slug]/card.png/Card.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<script lang="ts">
2-
let { title, date_formatted }: { title: string; date_formatted: string } = $props();
2+
let { title, date }: { title: string; date: string } = $props();
33
</script>
44

55
<div class="card">
66
<img src="https://sveltejs.github.io/assets/artwork/svelte-machine.png" alt="Svelte Machine" />
77

88
<div class="text">
99
<h1>{title}</h1>
10-
<p class="date">{date_formatted}</p>
10+
<p class="date">{date}</p>
1111
</div>
1212
</div>
1313

apps/svelte.dev/src/routes/docs/[...path]/+layout.svelte

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
<script>
2-
import { page } from '$app/stores';
32
import { DocsContents } from '@sveltejs/site-kit/docs';
43
54
let { data, children } = $props();
6-
7-
const pageData = $derived($page.data.document);
8-
const title = $derived(pageData?.metadata.title);
9-
const category = $derived(pageData?.category);
105
</script>
116

127
<div class="container">
@@ -15,13 +10,6 @@
1510
</div>
1611

1712
<div class="page content">
18-
{#if category}
19-
<p class="category">{category}</p>
20-
{/if}
21-
{#if title}
22-
<h1>{title}</h1>
23-
{/if}
24-
2513
{@render children()}
2614
</div>
2715
</div>
@@ -45,14 +33,6 @@
4533
all: unset;
4634
}
4735
48-
.category {
49-
font: 700 var(--sk-text-s) var(--sk-font);
50-
text-transform: uppercase;
51-
letter-spacing: 0.12em;
52-
margin: 0 0 0.5em;
53-
color: var(--sk-text-3);
54-
}
55-
5636
@media (min-width: 832px) {
5737
.content {
5838
padding-left: calc(var(--sidebar-width) + var(--sk-page-padding-side));
@@ -82,15 +62,23 @@
8262
8363
@media (min-width: 1200px) {
8464
.container {
85-
--sidebar-width: max(28rem, 23vw);
65+
--sidebar-width: max(
66+
28rem,
67+
calc(
68+
0.5 *
69+
(
70+
100vw - var(--sk-line-max-width) - var(--sk-page-padding-side) -
71+
var(--sk-page-padding-side)
72+
)
73+
)
74+
);
8675
flex-direction: row;
8776
}
8877
8978
.page {
9079
--on-this-page-display: block;
9180
padding: var(--sk-page-padding-top) calc(var(--sidebar-width) + var(--sk-page-padding-side));
9281
margin: 0 auto;
93-
width: var(--sk-line-max-width);
9482
box-sizing: content-box;
9583
}
9684
}

apps/svelte.dev/src/routes/docs/[...path]/+page.svelte

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
<script>
1+
<script lang="ts">
22
import { Icon } from '@sveltejs/site-kit/components';
33
import { copy_code_descendants, legacy_details, ts_js_select } from '@sveltejs/site-kit/actions';
4-
import { DocsOnThisPage, setupDocsHovers } from '@sveltejs/site-kit/docs';
4+
import { setupDocsHovers } from '@sveltejs/site-kit/docs';
5+
import OnThisPage from './OnThisPage.svelte';
56
67
let { data } = $props();
78
89
setupDocsHovers();
10+
11+
let content = $state() as HTMLElement;
912
</script>
1013

1114
<svelte:head>
@@ -20,21 +23,23 @@
2023
</svelte:head>
2124

2225
<div class="text" id="docs-content" use:ts_js_select use:copy_code_descendants use:legacy_details>
23-
<a
24-
class="edit"
25-
href="https://github.com/sveltejs/svelte.dev/edit/main/apps/svelte.dev/content/{data.document
26-
.file}"
27-
>
28-
<Icon size={50} name="edit" /> Edit this page on GitHub
29-
</a>
30-
31-
<DocsOnThisPage
32-
title={data.document.metadata.title}
33-
path="/{data.document.slug}"
34-
sections={data.document.sections}
35-
/>
36-
37-
{@html data.document.body}
26+
<header>
27+
<h1>{data.document.metadata.title}</h1>
28+
29+
<a
30+
class="edit"
31+
href="https://github.com/sveltejs/svelte.dev/edit/main/apps/svelte.dev/content/{data.document
32+
.file}"
33+
>
34+
<Icon size={50} name="edit" /> Edit this page on GitHub
35+
</a>
36+
</header>
37+
38+
<OnThisPage {content} document={data.document} />
39+
40+
<div class="content" bind:this={content}>
41+
{@html data.document.body}
42+
</div>
3843
</div>
3944

4045
<div class="controls">

0 commit comments

Comments
 (0)