From c2c1d4807a9741d4151d7d3cff3b6f7d41f40751 Mon Sep 17 00:00:00 2001 From: Pigges Date: Wed, 10 Jan 2024 22:11:33 +0100 Subject: [PATCH] make sidebar and toc --- bun.lockb | Bin 302494 -> 302861 bytes package.json | 1 + src/components/TableOfContents.astro | 37 ++--- src/components/TableOfContentsHeading.astro | 35 ++++- src/content/resources/daemon-settings.mdx | 18 +-- src/layouts/Collections.astro | 157 ++++++++++++++++++++ src/layouts/Markdown.astro | 70 ++++++--- src/pages/resources.astro | 6 +- src/pages/resources/[slug].astro | 2 +- src/pages/spec.astro | 37 +++-- src/pages/tutorials.astro | 2 +- src/pages/tutorials/[slug].astro | 2 +- src/styles/Header.css | 2 +- src/styles/global.scss | 4 +- src/styles/markdown.css | 116 ++------------- src/utils/generateToc.ts | 52 +++++++ 16 files changed, 360 insertions(+), 181 deletions(-) create mode 100644 src/layouts/Collections.astro create mode 100644 src/utils/generateToc.ts diff --git a/bun.lockb b/bun.lockb index 268d346ee70724563e3f5462dbd35bf71be950cd..c837de6b0f6489e233d4e04bb68912536d00c634 100755 GIT binary patch delta 62780 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 delta 62623 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 bEtF`>EvL*q+RUBqUugN2cj}L7mCyYj%7mf( diff --git a/package.json b/package.json index 8c7a44e..078b90f 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "@thewebforge/astro-code-blocks": "^0.2.0", "astro": "^4.0.3", "astro-preload": "^1.1.2", + "markdown-wasm": "^1.2.0", "rehype-autolink-headings": "^7.1.0", "rehype-slug": "^6.0.0", "sass": "^1.69.5" diff --git a/src/components/TableOfContents.astro b/src/components/TableOfContents.astro index 1f1cf04..7572ab7 100644 --- a/src/components/TableOfContents.astro +++ b/src/components/TableOfContents.astro @@ -1,30 +1,25 @@ --- // TableOfContents.astro import TableOfContentsHeading from "./TableOfContentsHeading.astro"; +import TocItem from '../utils/generateToc.ts'; const { headings } = Astro.props; -const toc = headings && headings.length ? buildToc(headings) : []; +const toc = headings && headings.length ? TocItem(headings) : []; + +console.log(toc); -function buildToc(headings) { - const toc = []; - const parentHeadings = new Map(); - headings.forEach((h) => { - const heading = { ...h, subheadings: [] }; - parentHeadings.set(heading.depth, heading); - // Change 2 to 1 if your markdown includes your

- // if (heading.depth === 2) { - // toc.push(heading); - // } else { - // parentHeadings.get(heading.depth - 1).subheadings.push(heading); - // } - toc.push(heading); - }); - return toc; -} --- \ No newline at end of file +

On this page

+
    + {toc.map((heading) => )} +
+ + \ No newline at end of file diff --git a/src/components/TableOfContentsHeading.astro b/src/components/TableOfContentsHeading.astro index f2cc35e..765c226 100644 --- a/src/components/TableOfContentsHeading.astro +++ b/src/components/TableOfContentsHeading.astro @@ -8,12 +8,39 @@ const { heading } = Astro.props; {heading.text} { - heading.subheadings.length > 0 && ( + heading.children.length > 0 && (
    - {heading.subheadings.map((subheading) => ( - + {heading.children.map((child) => ( + ))}
) } - \ No newline at end of file + + \ No newline at end of file diff --git a/src/content/resources/daemon-settings.mdx b/src/content/resources/daemon-settings.mdx index b7b79e1..ce383fd 100644 --- a/src/content/resources/daemon-settings.mdx +++ b/src/content/resources/daemon-settings.mdx @@ -10,7 +10,7 @@ This document outlines how to configure SDK daemon settings and what options are The easiest way to configure the settings is by editing the `daemon_settings.yml` file (may need to be created) that resides in the default [lbrynet directory](https://lbry.com/faq/lbry-directories). These settings can also be configured via the [settings_set](https://lbry.tech/api/sdk#settings_set) API call. The [settings_get](https://lbry.tech/api/sdk#settings_get) API call can be used to retrieve current values. Some values will require an SDK restart after being set via the API call. Sample daemon_settings.yml file: -``` +```yaml tcp_port: 3335 lbryum_servers: ['spv11.lbry.com:50001','spv19.lbry.com:50001'] download_directory: 'c:\lbry\Downloads' @@ -30,14 +30,14 @@ Configuration options are organized by their respective areas: Files, Wallet, Ne | download_dir | string | local downloads folder | 'c:\lbry\lbrynet\' | Location of downloaded output files | ### Wallet -| Setting | Format | Default value | Sample Values | Description | -|-----------------|--------|-------------------------------------------------------|----------------------------|------------------------------------------------------------| -| blockchain_name | string | 'lbrycrd_main' | 'lbrycrd_regtest' | Blockchain network to connect to | -| lbryum_servers | list | [‘spv11.lbry.com:50001’,‘spv19.lbry.com:50001’] | ["mylbryum.lbry.com:50001] | SPV wallet server address(Default servers are spv11-spv19) | -| wallet_dir | string | [varies by OS](https://lbry.com/faq/lbry-directories) | 'c:\lbry\lbryum\' | Wallet data location | -| max_key_fee | json | \{'currency': 'USD', 'amount': 50.0} | \{'currency': 'LBC', 'amount': 5.0} | Max payment allowed for content | -| wallet | string | 'lbryum' | 'lbrycrd' | Choice of wallet software, SPV (lbryum) vs full node (lbrycrd). Currently only lbryum supported | -| use_keyring | boolean | false | true | Store wallet password in keyring (not currently available) | +| Setting | Format | Default value | Sample Values | Description | +|-----------------|---------|-------------------------------------------------------|-------------------------------------|---------------------------------------------------------------------------------------------------| +| blockchain_name | string | 'lbrycrd_main' | 'lbrycrd_regtest' | Blockchain network to connect to | +| lbryum_servers | list | [‘spv11.lbry.com:50001’,‘spv19.lbry.com:50001’] | ["mylbryum.lbry.com:50001] | SPV wallet server address(Default servers are spv11-spv19) | +| wallet_dir | string | [varies by OS](https://lbry.com/faq/lbry-directories) | 'c:\lbry\lbryum\' | Wallet data location | +| max_key_fee | json | \{'currency': 'USD', 'amount': 50.0} | \{'currency': 'LBC', 'amount': 5.0} | Max payment allowed for content | +| wallet | string | 'lbryum' | 'lbrycrd' | Choice of wallet software, SPV (lbryum) vs full node (lbrycrd). Currently only lbryum supported | +| use_keyring | boolean | false | true | Store wallet password in keyring (not currently available) | diff --git a/src/layouts/Collections.astro b/src/layouts/Collections.astro new file mode 100644 index 0000000..c9347ab --- /dev/null +++ b/src/layouts/Collections.astro @@ -0,0 +1,157 @@ +--- +import Layout from './Layout.astro'; +import { markdown } from '@astropub/md'; +import { getCollection } from "astro:content"; +import TableOfContents from '../components/TableOfContents.astro'; + +import '../styles/markdown.css'; + +const { frontmatter, headings, collection } = Astro.props; +const { pathname } = Astro.url; + +const items = await getCollection(collection) || []; + +const description = await markdown(frontmatter.description); + +const isActive = (href: string)=>{ + return href === pathname || href === pathname.split('/').slice(0,2).join('/'); +} + +--- + + +
+ +
+
+ +
+

{frontmatter.title}

+

{description}

+ +
+
+
+
+ +
\ No newline at end of file diff --git a/src/layouts/Markdown.astro b/src/layouts/Markdown.astro index 38b84d8..a4ee05d 100644 --- a/src/layouts/Markdown.astro +++ b/src/layouts/Markdown.astro @@ -8,48 +8,74 @@ import '../styles/markdown.css'; const { frontmatter, headings, collection } = Astro.props; -const items = await getCollection(collection) || []; +const items = collection ? await getCollection(collection) : []; -const description = await markdown(frontmatter.description) +const description = await markdown(frontmatter.description); ---
-
- {items.length ? ( - {collection.charAt(0).toUpperCase() + collection.slice(1)} - - ) : null} -
-
-

{frontmatter.title}

-

{description}

- +
+
+ {headings && ( + + )} +
+

{frontmatter.title}

+

{description}

+ +
+
-
- -
\ No newline at end of file diff --git a/src/pages/resources.astro b/src/pages/resources.astro index 67c29fa..fd2e472 100644 --- a/src/pages/resources.astro +++ b/src/pages/resources.astro @@ -1,5 +1,5 @@ --- -import Markdown from '../layouts/Markdown.astro'; +import Collections from '../layouts/Collections.astro'; const frontmatter = { title: "Find the LBRY specification, API documentation, our Contributor’s guide, and more in the Resources area.", @@ -7,6 +7,6 @@ const frontmatter = { } --- - + - \ No newline at end of file + \ No newline at end of file diff --git a/src/pages/resources/[slug].astro b/src/pages/resources/[slug].astro index fd65cd6..6335f1c 100644 --- a/src/pages/resources/[slug].astro +++ b/src/pages/resources/[slug].astro @@ -1,6 +1,6 @@ --- import { getCollection } from 'astro:content'; -import Markdown from '../../layouts/Markdown.astro'; +import Markdown from '../../layouts/Collections.astro'; export async function getStaticPaths() { const entries = await getCollection('resources'); diff --git a/src/pages/spec.astro b/src/pages/spec.astro index c8a2ce8..ebb9caa 100644 --- a/src/pages/spec.astro +++ b/src/pages/spec.astro @@ -3,19 +3,32 @@ import Markdown from '../layouts/Markdown.astro'; import rehypeAutolinkHeadings from 'rehype-autolink-headings'; import rehypeSlug from 'rehype-slug'; +import markdown from 'markdown-wasm'; + +// import { markdown } from '@astropub/md' -import { markdown } from '@astropub/md' - - -const content = await (await fetch('https://raw.githubusercontent.com/lbryio/spec/master/index.md')).text(); -const md = await markdown(content.replace(`--- +let content = await (await fetch('https://raw.githubusercontent.com/lbryio/spec/master/index.md')).text(); +// const md = await markdown(content.replace(`--- +// layout: spec +// ---`, ''), { +// rehypePlugins: [ +// [rehypeSlug as any], +// [rehypeAutolinkHeadings as any, { behavior: 'wrap' }] +// ] +// }); +content = content.replace(`--- layout: spec ----`, ''), { - rehypePlugins: [ - [rehypeSlug as any], - [rehypeAutolinkHeadings as any, { behavior: 'wrap' }] - ] +---`, '') + +// Extract the headings from the markdown +const headings = content.match(/(?#{1,6})\s+(?.+)/g).map(heading=>{ + const text = heading.replaceAll('#', '').replace(' ', ''); + return { + depth: heading.replace(/[^#]/g, "").length, // Get number of '#' a heading has + slug: text.replaceAll(' ', '-').toLowerCase(), // URL friendly path + text + } }); --- @@ -23,6 +36,6 @@ layout: spec - {md} +}} headings={headings}> + {} \ No newline at end of file diff --git a/src/pages/tutorials.astro b/src/pages/tutorials.astro index cda4444..f48328b 100644 --- a/src/pages/tutorials.astro +++ b/src/pages/tutorials.astro @@ -1,5 +1,5 @@ --- -import Markdown from '../layouts/Markdown.astro'; +import Markdown from '../layouts/Collections.astro'; const frontmatter = { description: "Find the LBRY specification, API documentation, our Contributor's guide, and more in the Resources area." diff --git a/src/pages/tutorials/[slug].astro b/src/pages/tutorials/[slug].astro index c5f810b..8cfde61 100644 --- a/src/pages/tutorials/[slug].astro +++ b/src/pages/tutorials/[slug].astro @@ -1,6 +1,6 @@ --- import { getCollection } from 'astro:content'; -import Markdown from '../../layouts/Markdown.astro'; +import Markdown from '../../layouts/Collections.astro'; export async function getStaticPaths() { const entries = await getCollection('tutorials'); diff --git a/src/styles/Header.css b/src/styles/Header.css index 19b45ea..b57875a 100644 --- a/src/styles/Header.css +++ b/src/styles/Header.css @@ -6,7 +6,7 @@ header { header nav { display: flex; justify-content: space-between; - height: 75px; + height: var(--nav-height); padding: 0 20px; } diff --git a/src/styles/global.scss b/src/styles/global.scss index 1dc47c6..f0145f9 100644 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -7,6 +7,7 @@ --tertiary-background: #041523; --header-text: #FAFAFA; --body-text: #DDDDDD; + --nav-height: 75px; --astro-code-color-text: white; --astro-code-color-background: black; @@ -30,7 +31,7 @@ html { font-family: 'Roboto', sans-serif; - margin-top: 75px; + margin-top: var(--nav-height); scroll-behavior: smooth; } @@ -56,6 +57,7 @@ main { footer { width: 100vw; overflow: hidden; + z-index: 10; } h1, h2, h3, h4, h5, h6 { diff --git a/src/styles/markdown.css b/src/styles/markdown.css index 84e7257..39e7e36 100644 --- a/src/styles/markdown.css +++ b/src/styles/markdown.css @@ -3,10 +3,9 @@ h1 > a, h2 > a, h3 > a, h4 > a, h5 > a, h6 > a { } /* Source: https://github.com/sindresorhus/github-markdown-css */ +/* With some modifications */ -@media (prefers-color-scheme: dark) { - .markdown-body, - [data-theme="dark"] { +.markdown-body { /*dark*/ color-scheme: dark; --color-prettylights-syntax-comment: #8b949e; @@ -42,10 +41,14 @@ h1 > a, h2 > a, h3 > a, h4 > a, h5 > a, h6 > a { --color-fg-default: #e6edf3; --color-fg-muted: #7d8590; --color-fg-subtle: #6e7681; - --color-canvas-default: #0d1117; - --color-canvas-subtle: #161b22; - --color-border-default: #30363d; - --color-border-muted: #21262d; + /* --color-canvas-default: #0d1117; */ + --color-canvas-default: var(--tertiary-background); + /* --color-canvas-subtle: #161b22; */ + --color-canvas-subtle: var(--secondary-background); + /* --color-border-default: #30363d; */ + --color-border-default: var(--secondary-background); + /* --color-border-muted: #21262d; */ + --color-border-muted: var(--tertiary-background); --color-neutral-muted: rgba(110,118,129,0.4); --color-accent-fg: #2f81f7; --color-accent-emphasis: #1f6feb; @@ -53,104 +56,7 @@ h1 > a, h2 > a, h3 > a, h4 > a, h5 > a, h6 > a { --color-attention-subtle: rgba(187,128,9,0.15); --color-danger-fg: #f85149; --color-done-fg: #a371f7; - } - } - - @media (prefers-color-scheme: light) { - .markdown-body, - [data-theme="light"] { - /*light*/ - color-scheme: light; - --color-prettylights-syntax-comment: #6e7781; - --color-prettylights-syntax-constant: #0550ae; - --color-prettylights-syntax-entity: #6639ba; - --color-prettylights-syntax-storage-modifier-import: #24292f; - --color-prettylights-syntax-entity-tag: #116329; - --color-prettylights-syntax-keyword: #cf222e; - --color-prettylights-syntax-string: #0a3069; - --color-prettylights-syntax-variable: #953800; - --color-prettylights-syntax-brackethighlighter-unmatched: #82071e; - --color-prettylights-syntax-invalid-illegal-text: #f6f8fa; - --color-prettylights-syntax-invalid-illegal-bg: #82071e; - --color-prettylights-syntax-carriage-return-text: #f6f8fa; - --color-prettylights-syntax-carriage-return-bg: #cf222e; - --color-prettylights-syntax-string-regexp: #116329; - --color-prettylights-syntax-markup-list: #3b2300; - --color-prettylights-syntax-markup-heading: #0550ae; - --color-prettylights-syntax-markup-italic: #24292f; - --color-prettylights-syntax-markup-bold: #24292f; - --color-prettylights-syntax-markup-deleted-text: #82071e; - --color-prettylights-syntax-markup-deleted-bg: #ffebe9; - --color-prettylights-syntax-markup-inserted-text: #116329; - --color-prettylights-syntax-markup-inserted-bg: #dafbe1; - --color-prettylights-syntax-markup-changed-text: #953800; - --color-prettylights-syntax-markup-changed-bg: #ffd8b5; - --color-prettylights-syntax-markup-ignored-text: #eaeef2; - --color-prettylights-syntax-markup-ignored-bg: #0550ae; - --color-prettylights-syntax-meta-diff-range: #8250df; - --color-prettylights-syntax-brackethighlighter-angle: #57606a; - --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f; - --color-prettylights-syntax-constant-other-reference-link: #0a3069; - --color-fg-default: #1F2328; - --color-fg-muted: #656d76; - --color-fg-subtle: #6e7781; - --color-canvas-default: #ffffff; - --color-canvas-subtle: #f6f8fa; - --color-border-default: #d0d7de; - --color-border-muted: hsla(210,18%,87%,1); - --color-neutral-muted: rgba(175,184,193,0.2); - --color-accent-fg: #0969da; - --color-accent-emphasis: #0969da; - --color-attention-fg: #9a6700; - --color-attention-subtle: #fff8c5; - --color-danger-fg: #d1242f; - --color-done-fg: #8250df; - --color-prettylights-syntax-comment: #6e7781; - --color-prettylights-syntax-constant: #0550ae; - --color-prettylights-syntax-entity: #6639ba; - --color-prettylights-syntax-storage-modifier-import: #24292f; - --color-prettylights-syntax-entity-tag: #116329; - --color-prettylights-syntax-keyword: #cf222e; - --color-prettylights-syntax-string: #0a3069; - --color-prettylights-syntax-variable: #953800; - --color-prettylights-syntax-brackethighlighter-unmatched: #82071e; - --color-prettylights-syntax-invalid-illegal-text: #f6f8fa; - --color-prettylights-syntax-invalid-illegal-bg: #82071e; - --color-prettylights-syntax-carriage-return-text: #f6f8fa; - --color-prettylights-syntax-carriage-return-bg: #cf222e; - --color-prettylights-syntax-string-regexp: #116329; - --color-prettylights-syntax-markup-list: #3b2300; - --color-prettylights-syntax-markup-heading: #0550ae; - --color-prettylights-syntax-markup-italic: #24292f; - --color-prettylights-syntax-markup-bold: #24292f; - --color-prettylights-syntax-markup-deleted-text: #82071e; - --color-prettylights-syntax-markup-deleted-bg: #ffebe9; - --color-prettylights-syntax-markup-inserted-text: #116329; - --color-prettylights-syntax-markup-inserted-bg: #dafbe1; - --color-prettylights-syntax-markup-changed-text: #953800; - --color-prettylights-syntax-markup-changed-bg: #ffd8b5; - --color-prettylights-syntax-markup-ignored-text: #eaeef2; - --color-prettylights-syntax-markup-ignored-bg: #0550ae; - --color-prettylights-syntax-meta-diff-range: #8250df; - --color-prettylights-syntax-brackethighlighter-angle: #57606a; - --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f; - --color-prettylights-syntax-constant-other-reference-link: #0a3069; - --color-fg-default: #1F2328; - --color-fg-muted: #656d76; - --color-fg-subtle: #6e7781; - --color-canvas-default: #ffffff; - --color-canvas-subtle: #f6f8fa; - --color-border-default: #d0d7de; - --color-border-muted: hsla(210,18%,87%,1); - --color-neutral-muted: rgba(175,184,193,0.2); - --color-accent-fg: #0969da; - --color-accent-emphasis: #0969da; - --color-attention-fg: #9a6700; - --color-attention-subtle: #fff8c5; - --color-danger-fg: #d1242f; - --color-done-fg: #8250df; - } - } +} .markdown-body { font-size: 16px; diff --git a/src/utils/generateToc.ts b/src/utils/generateToc.ts new file mode 100644 index 0000000..68cdbe9 --- /dev/null +++ b/src/utils/generateToc.ts @@ -0,0 +1,52 @@ +// Source: https://github.com/withastro/docs/blob/882e0b0a9d16d1c822cb8c230a62a4bfcd308605/src/util/generateToc.ts + +import type { MarkdownHeading } from 'astro'; +export interface TocItem extends MarkdownHeading { + children: TocItem[]; +} + +function diveChildren(item: TocItem, depth: number): TocItem[] { + if (depth === 1) { + return item.children; + } else { + // e.g., 2 + return diveChildren(item.children[item.children.length - 1], depth - 1); + } +} + +export default function generateToc(headings: MarkdownHeading[], title = 'Overview') { + // const overview = { depth: 2, slug: 'overview', text: title }; + headings = [...headings.filter(({ depth }) => depth > 1 && depth < 4)]; + const toc: Array = []; + + for (const heading of headings) { + if (toc.length === 0) { + toc.push({ + ...heading, + children: [], + }); + } else { + const lastItemInToc = toc[toc.length - 1]; + if (heading.depth < lastItemInToc.depth) { + throw new Error(`Orphan heading found: ${heading.text}.`); + } + if (heading.depth === lastItemInToc.depth) { + // same depth + toc.push({ + ...heading, + children: [], + }); + } else { + // higher depth + // push into children, or children' children alike + const gap = heading.depth - lastItemInToc.depth; + const target = diveChildren(lastItemInToc, gap); + target.push({ + ...heading, + children: [], + }); + } + } + } + return toc; +} \ No newline at end of file