From c000841e31ac6c6661c56327b57b0599328458a5 Mon Sep 17 00:00:00 2001 From: Puru Vijay <47742487+PuruVJ@users.noreply.github.com> Date: Mon, 18 Sep 2023 12:18:35 +0530 Subject: [PATCH] feat: OnThisPage blog (#9216) * feat: OnThisPage blog ### Before submitting the PR, please make sure you do the following - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [ ] Prefix your PR title with `feat:`, `fix:`, `chore:`, or `docs:`. - [ ] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. ### Tests and linting - [ ] Run the tests with `pnpm test` and lint the project with `pnpm lint` * Bump site-kit * Add content --- pnpm-lock.yaml | 8 ++-- sites/svelte.dev/package.json | 2 +- sites/svelte.dev/src/lib/server/blog/index.js | 4 +- .../svelte.dev/src/lib/server/blog/types.d.ts | 3 ++ sites/svelte.dev/src/lib/server/docs/index.js | 3 +- .../src/routes/blog/[slug]/+page.svelte | 40 +++++++++++++------ 6 files changed, 40 insertions(+), 20 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4d28178642a6..4a3d645c02f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -188,8 +188,8 @@ importers: specifier: ^1.24.1 version: 1.25.0(svelte@packages+svelte)(vite@4.4.9) '@sveltejs/site-kit': - specifier: 6.0.0-next.45 - version: 6.0.0-next.45(@sveltejs/kit@1.25.0)(svelte@packages+svelte) + specifier: 6.0.0-next.46 + version: 6.0.0-next.46(@sveltejs/kit@1.25.0)(svelte@packages+svelte) '@sveltejs/vite-plugin-svelte': specifier: ^2.4.6 version: 2.4.6(svelte@packages+svelte)(vite@4.4.9) @@ -2398,8 +2398,8 @@ packages: svelte-local-storage-store: 0.4.0(svelte@packages+svelte) dev: false - /@sveltejs/site-kit@6.0.0-next.45(@sveltejs/kit@1.25.0)(svelte@packages+svelte): - resolution: {integrity: sha512-C7C9pXaOB/hLfsOw+7rOYBR+smZ9Rx47/qwZ1fJwXYjSC7Sc1zGX3dj1PXHj+EqbGWI8Fsj8upM05MC5ya/aIw==} + /@sveltejs/site-kit@6.0.0-next.46(@sveltejs/kit@1.25.0)(svelte@packages+svelte): + resolution: {integrity: sha512-VgFKJ6G3gXqlbnjVeZTD6MPWidhZuu93D2WdfsOd4DLL6eFKaCbF60qZXtmWF2hLj7+WDk8+NAwj3V+UZ84k8A==} peerDependencies: '@sveltejs/kit': ^1.20.0 svelte: ^4.0.0 diff --git a/sites/svelte.dev/package.json b/sites/svelte.dev/package.json index dcc5a42ba35b..fa02b14b30f3 100644 --- a/sites/svelte.dev/package.json +++ b/sites/svelte.dev/package.json @@ -30,7 +30,7 @@ "@resvg/resvg-js": "^2.4.1", "@sveltejs/adapter-vercel": "^3.0.3", "@sveltejs/kit": "^1.24.1", - "@sveltejs/site-kit": "6.0.0-next.45", + "@sveltejs/site-kit": "6.0.0-next.46", "@sveltejs/vite-plugin-svelte": "^2.4.6", "@types/cookie": "^0.5.2", "@types/node": "^20.5.9", diff --git a/sites/svelte.dev/src/lib/server/blog/index.js b/sites/svelte.dev/src/lib/server/blog/index.js index 40bbf4ef48a9..d0bcbe96c70b 100644 --- a/sites/svelte.dev/src/lib/server/blog/index.js +++ b/sites/svelte.dev/src/lib/server/blog/index.js @@ -2,6 +2,7 @@ import { extractFrontmatter } from '@sveltejs/site-kit/markdown'; import { CONTENT_BASE_PATHS } from '../../../constants.js'; import { render_content } from '../renderer.js'; +import { get_sections } from '../docs/index.js'; /** * @param {import('./types').BlogData} blog_data @@ -47,7 +48,8 @@ export async function get_blog_data(base = CONTENT_BASE_PATHS.BLOG) { author: { name: metadata.author, url: metadata.authorURL - } + }, + sections: await get_sections(body) }); } diff --git a/sites/svelte.dev/src/lib/server/blog/types.d.ts b/sites/svelte.dev/src/lib/server/blog/types.d.ts index e962e88953f8..cc2ee90f28ac 100644 --- a/sites/svelte.dev/src/lib/server/blog/types.d.ts +++ b/sites/svelte.dev/src/lib/server/blog/types.d.ts @@ -1,3 +1,5 @@ +import type { Section } from '../docs/types'; + export interface BlogPost { title: string; description: string; @@ -11,6 +13,7 @@ export interface BlogPost { }; draft: boolean; content: string; + sections: Section[]; } export type BlogData = BlogPost[]; diff --git a/sites/svelte.dev/src/lib/server/docs/index.js b/sites/svelte.dev/src/lib/server/docs/index.js index 4a4f9d6e42e7..8e5e591115d4 100644 --- a/sites/svelte.dev/src/lib/server/docs/index.js +++ b/sites/svelte.dev/src/lib/server/docs/index.js @@ -107,11 +107,12 @@ const titled = async (str) => .replace(/"/g, '"') .replace(/</g, '<') .replace(/>/g, '>') + .replace(/&/, '&') .replace(/<(\/)?(em|b|strong|code)>/g, '') ); /** @param {string} markdown */ -async function get_sections(markdown) { +export async function get_sections(markdown) { const lines = markdown.split('\n'); const root = /** @type {import('./types').Section} */ ({ title: 'Root', diff --git a/sites/svelte.dev/src/routes/blog/[slug]/+page.svelte b/sites/svelte.dev/src/routes/blog/[slug]/+page.svelte index ceee83258ad4..158973aebecd 100644 --- a/sites/svelte.dev/src/routes/blog/[slug]/+page.svelte +++ b/sites/svelte.dev/src/routes/blog/[slug]/+page.svelte @@ -1,7 +1,7 @@