fix: properly index <h2> sections

ref: https://github.com/wotakumoe/wotaku/pull/86
This commit is contained in:
taskylizard 2025-01-12 17:44:42 +00:00
parent 84ae282b2b
commit d6b9979464
No known key found for this signature in database
GPG key ID: 1820131ED1A24120
10 changed files with 49 additions and 68 deletions

2
.gitattributes vendored
View file

@ -198,7 +198,7 @@ TODO text
*.tmpl text *.tmpl text
*.tpl text *.tpl text
*.twig text *.twig text
*.vue text *.vue text diff=vue
# Configs # Configs
*.cnf text *.cnf text

View file

@ -100,7 +100,7 @@ #### Manually
1. Fork the repository by clicking the "Fork" button in the top right corner. 1. Fork the repository by clicking the "Fork" button in the top right corner.
2. Make sure you have [Node.js](https://nodejs.org/en/), [pnpm](https://pnpm.io/), [git](https://git-scm.com/), and [VSCode](https://code.visualstudio.com/) or any other editor installed. 2. Make sure you have [Node.js](https://nodejs.org/en/), [pnpm](https://pnpm.io/), [git](https://git-scm.com/), and [VSCode](https://code.visualstudio.com/) or any other editor installed. Alternatively, `pnpm` has `pnpm env` you can use to manage Node.
3. Clone your forked repository to your local machine. 3. Clone your forked repository to your local machine.

View file

@ -1 +0,0 @@

View file

@ -20,7 +20,6 @@ ### Post Template
description: Month 20YY updates description: Month 20YY updates
date: 20YY-MM-DD date: 20YY-MM-DD
next: false next: false
aside: left
prev: false prev: false
sidebar: false sidebar: false
footer: true footer: true

View file

@ -1,23 +0,0 @@
<!--- Provide a general summary of your changes in the Title above -->
## Description
<!--- Describe your changes in detail -->
## Context
<!--- Why is this change required? What problem does it solve? -->
<!--- If it fixes an open issue, please link to the issue here. -->
## Types of changes
<!--- What types of changes does your Pull Request introduce? Put an `x` in all the boxes that apply: -->
- [ ] Bad / Deleted sites removal
- [ ] Grammar / Markdown fixes
- [ ] Content addition (sites, projects, tools, etc.)
- [ ] New Wiki section
- [ ] Section Improvement
## Checklist:
<!--- Go over all the following points, and put an `x` in all the boxes that apply to this Pull Request. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [ ] I have read the [contribution guide](https://fmhy.net/other/contributing).
- [ ] I have made sure to [search](https://api.fmhy.net/single-page) before making any changes.
- [ ] My code follows the code style of this project.

9
.github/labeler.yml vendored
View file

@ -1,9 +0,0 @@
# See https://github.com/actions/labeler
docs:
- 'docs/**/*.md'
core:
- 'api/**'
- '.github/**'
- 'docs/.vitepress/**'

View file

@ -1,17 +0,0 @@
name: 'Pull Request Housekeeping'
on: [pull_request_target]
jobs:
triage:
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Label PRs
uses: actions/labeler@v4
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}

View file

@ -1,5 +1,5 @@
/** /**
* Copyright (c) taskylizard. All rights reserved. * Copyright (c) 2024 taskylizard
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -13,20 +13,53 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
import type { MarkdownRenderer } from 'vitepress' import type { MarkdownRenderer } from 'vitepress'
import { headers } from '../transformer/constants'
const titles = Object.keys(headers).map((key) => headers[key].title) const excluded = ['Credits']
export const headersPlugin = (md: MarkdownRenderer) => { export const headersPlugin = (md: MarkdownRenderer) => {
// Add the Feedback component after the heading and close the container // Add the Feedback component in the heading, before the link.
md.renderer.rules.heading_close = (tokens, idx, options, env, self) => { //
const result = self.renderToken(tokens, idx, options) // Adding it after the link is closed prevents vitepress from properly
const heading = tokens[idx - 1] // indexing the file's content.
const level = tokens[idx].tag.slice(1)
if (!titles.includes(env.frontmatter.title) || level !== '2') return result
return `<Feedback heading="${heading.content}" />${result}` md.renderer.rules.heading_open = (tokens, idx, options, env, self) => {
const result = self.renderToken(tokens, idx, options)
const idxClose =
idx +
tokens.slice(idx).findIndex((token) => token.type === 'heading_close')
if (idxClose <= idx) return result
const level = tokens[idx].tag.slice(1)
if (excluded.includes(env.frontmatter.title) || level !== '2') return result
// Find the token for the link.
//
// The token after `heading_open` contains the link as a child token.
const children = tokens[idx + 1].children || []
const linkOpenToken = children.find((c) => c.type === 'link_open')
if (!linkOpenToken) return result
const heading = tokens[idxClose - 1]
linkOpenToken.meta = linkOpenToken.meta || {}
linkOpenToken.meta.feedback = {
heading: heading.content
}
return result
}
md.renderer.rules.link_open = (tokens, idx, options, env, self) => {
const result = self.renderToken(tokens, idx, options)
const meta = tokens[idx].meta
if (!meta || !meta.feedback) return result
const heading = meta.feedback.heading || ''
if (!heading) return result
return `<Feedback heading="${heading}" />${result}`
} }
} }

View file

@ -16,7 +16,6 @@
"docs:dev": "vitepress dev docs/", "docs:dev": "vitepress dev docs/",
"docs:preview": "vitepress preview docs/", "docs:preview": "vitepress preview docs/",
"format": "prettier -w --cache --check .", "format": "prettier -w --cache --check .",
"postinstall": "nitropack prepare",
"lint": "biome lint .", "lint": "biome lint .",
"lint:fix": "biome lint . --write", "lint:fix": "biome lint . --write",
"lint:fix:unsafe": "biome lint . --write --unsafe", "lint:fix:unsafe": "biome lint . --write --unsafe",
@ -33,15 +32,15 @@
"nitro-cors": "^0.7.1", "nitro-cors": "^0.7.1",
"nitropack": "^2.10.4", "nitropack": "^2.10.4",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pathe": "^1.1.2", "pathe": "^2.0.1",
"unocss": "^0.63.4", "unocss": "65.4.0",
"vitepress": "^1.5.0", "vitepress": "^1.5.0",
"vue": "^3.5.12", "vue": "^3.5.12",
"x-satori": "^0.2.0", "x-satori": "^0.2.0",
"zod": "^3.23.8" "zod": "^3.23.8"
}, },
"devDependencies": { "devDependencies": {
"@biomejs/biome": "^1.9.3", "@biomejs/biome": "^1.9.4",
"@cloudflare/workers-types": "^4.20241230.0", "@cloudflare/workers-types": "^4.20241230.0",
"@ianvs/prettier-plugin-sort-imports": "^4.3.1", "@ianvs/prettier-plugin-sort-imports": "^4.3.1",
"@iconify-json/carbon": "^1.2.3", "@iconify-json/carbon": "^1.2.3",

Binary file not shown.